2013-08-22 11 views
6

Ho un file Rnw (uno grande) e voglio mostrare tutto il codice usato in un'appendice.Mostra il codice nell'appendice usando knitr

Si suggerisce in alcuni degli esempi knitr (https://github.com/yihui/knitr-examples/blob/master/073-code-appendix.Rnw, anche una buona MWe) che avere un blocco di codice come questo è il modo:

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

Questo funziona bene, tranne tutti i pezzi di codice si fondono in ogni altro e nessuno è etichettato.

D'altra parte, se eseguo il comando purl (myfile.Rnw), contrassegna i blocchi di codice e li separa in due righe, il che rende le cose molto più facili da leggere.

Esiste un modo per elencare automaticamente il codice utilizzando il secondo approccio in un'appendice di report? So che posso avere un pezzo di codice per eseguire purl per produrre myfile.R come parte del mio report, ma come faccio a mostrare il codice in myfile.R nella mia appendice?

+0

Perché non "rovinare" il file e quindi inserire un \ include nel proprio rnw per incorporare l'output di purl? I.e., prima il rovescio, quindi includi l'uscita di rovescio? – Thomas

+0

intendi come in lattice '\ include' qualcosa come \ include {myfile.R} o qualcos'altro. Buono se il codice è stato formattato anche ad es. evidenziazione della sintassi – DavidC

risposta

3

Ecco un esempio di file .Rnw (chiamato "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} 

Se si crea un file nella directory di lavoro denominata "template.rnw" che contiene solo:

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

Quindi si esegue:

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

Ha senso? Fondamentalmente, sei purl ing, ing purl codice, knit ting il documento originale, e quindi compilando il risultante LaTeX ("esempio.tex") che include il knit ting e purl ing. Tutto dovrebbe essere formattato bene (e coerentemente).

Problemi correlati