2014-12-21 12 views
11

Ich frage mich, ob es eine Funktion gibt line numbers mit knitr in .Rnw zu setzen. Ich fand this discussion und diese Dokumente (here und here) aber konnte nicht den Weg finden, Zeilennummern zu setzen. Jede Hilfe wird sehr geschätzt. DankeZeilennummer für R-Code mit Knit setzen

+0

Um c larify, willst du Zeilennummern in der PDF-Ausgabe? Oder in der .RNW-Datei? – CephBirk

+0

Ja, ich brauche Zeilennummern in der PDF-Ausgabe. – MYaseen208

+0

Und Sie wollen sie für jede Zeile des Dokuments oder nur Zeilennummern in der Chunk-Ausgabe? – CephBirk

Antwort

10

Diese Lösung verwendet die LaTeX Angebote Paket, um Zeilennummern zu erstellen. Ich kann sie nur zur Arbeit bringen, indem ich mich über alle Code-Chunks akkumuliere, aber ich stelle mir vor, dass es eine ähnliche Lösung gibt, die Linien nur innerhalb jedes Chunks aufzählt. Hier ist die .Rnw Quelle:

\documentclass{article} 
\usepackage{listings} 
\begin{document} 

<<setup, echo=FALSE>>= 
knit_hooks$set(source = function(x, options) { 
    paste("\\begin{lstlisting}[numbers=left, firstnumber=last]\n", x, 
     "\\end{lstlisting}\n", sep = "") 
}) 
@ 

<<a, results='hold'>>= 
1:2 
3:4 
5:6 
@ 

<<b>>= 
"test1" 
"test2" 
"test3" 
@ 

\end{document} 

Die wichtigsten Teile hierfür sind in der Quelle Haken, which is basically copied from here. Die firstnumber=last teilt Auflistungen mit, um Zeilennummern über Auflistungen zu sammeln. Ohne es sind alle Zeilen mit 1 nummeriert, weil knitr jede Codezeile in eine eigene Auflistung setzt.

Und hier ist das Ergebnis:

enter image description here

Wenn Sie jeder Codeblock von 1 Nummerierung beginnen soll, einen Haken fügen Sie den Zähler zurücksetzen:

knit_hooks$set(reset = function(before, options, envir){ 
if(before){ 
    return("\\setcounter{lstnumber}{1}") 
} 
}) 

und verwenden Sie dann reset=TRUE zu Aktivieren Sie den Haken in jedem Stück, das Sie möchten:

<<a, results='hold', reset=TRUE>>= 
1:2 
3:4 
@ 
+0

(+1): Das ist großartig @Thomas. Wäre schön, wenn sich die Zeilennummern in jedem R Chunk ändern würden. – MYaseen208

+0

@ Spacedman Danke für die Bearbeitung. – Thomas

+0

Das funktioniert gut. Aber es wird nicht die Farbe des Codes (Schriftart) wie beim ursprünglichen 'Knitrout' erhalten. Irgendeine Lösung dafür. – MYaseen208