2013-08-22 32 views
6

Tôi có tệp Rnw (tệp lớn) và tôi muốn hiển thị tất cả mã được sử dụng trong phụ lục.Hiển thị mã trong phụ lục sử dụng knitr

Nó được diễn tả bằng một số ví dụ knitr (https://github.com/yihui/knitr-examples/blob/master/073-code-appendix.Rnw, cũng là một MWe tốt) rằng có một khối mã như thế này là cách:

<<Rcode, eval=FALSE, ref.label=all_labels()[-1],echo=TRUE, cache=FALSE>>= 
@ 

này hoạt động tốt, ngoại trừ tất cả các khối đang sáp nhập vào nhau khác và không có nhãn nào được dán nhãn.

Mặt khác, nếu tôi chạy tuyến tính (myfile.Rnw), nó sẽ gắn nhãn các đoạn mã và tách chúng bằng hai dòng, điều này giúp mọi thứ dễ đọc hơn nhiều.

Có cách nào tự động liệt kê mã bằng cách sử dụng phương pháp thứ hai trong phụ lục báo cáo không? Tôi biết tôi có thể có một đoạn mã để chạy purl để sản xuất myfile.R như một phần của báo cáo của tôi, nhưng làm thế nào để tôi sau đó hiển thị mã trong myfile.R trong phụ lục của tôi?

+0

Tại sao không 'purl' tệp và sau đó đặt \ include vào rnw của bạn để nhúng đầu ra dạng đầu ra? I.E., purl đầu tiên, sau đó bao gồm các đầu ra purl? – Thomas

+0

bạn có nghĩa là trong latex '\ include' một cái gì đó như \ include {myfile.R} hoặc cái gì khác. Tốt nếu mã teh được định dạng quá, ví dụ: làm nổi bật cú pháp – DavidC

Trả lời

3

Dưới đây là một ví dụ .Rnw tập tin (gọi là "example.rnw"):

\documentclass{article} 
\begin{document} 

<<a>>= 
x <- 1:10 
x 
@ 

<<b>>= 
y <- 10:1 
y 
@ 

<<c>>= 
z <- 1:5 
z 
@ 

\clearpage 
\input{example-purl.tex} 
\end{document} 

Nếu bạn tạo một tập tin trong thư mục làm việc của bạn được gọi là "template.rnw" mà chỉ chứa:

<<%sCHUNK_LABEL_HERE, eval=FALSE>>= 
@ 

Sau đó, bạn chạy:

stitch(purl("example.rnw",output="example-purl.r"),template="template.rnw") 
knit("example.rnw") 

Điều đó có ý nghĩa không? Về cơ bản, bạn đang purl ing, stitch nhập mã ed purl, knit ting tài liệu gốc và sau đó biên dịch LaTeX ("example.tex") bao gồm các số knit ting và purl ing. Mọi thứ phải được định dạng độc đáo (và nhất quán).

Các vấn đề liên quan