2013-03-29 4 views
9

Meine Frage ist über die Knitr-Option fig.cap, wenn Sie LaTeX verwenden. Ist es möglich, eine \ rinline oder \ Sexpr in die fig.cap Zeichenkette aufzunehmen?knitr: Verwenden Sie einen Inline-Ausdruck in fig.cap Chunk-Option

Zum Beispiel würde Ich mag wie etwas haben (ich eine .Rtex Datei bin mit):

\documentclass{article} 
\begin{document} 
%% begin.rcode fig.cap="x is \\rinline{x}" 
% x <- 5 
% p <- seq(0,5) 
% q <- x*p 
% plot(p,q) 
%% end.rcode 
\end{document} 

Ich würde wirklich gern für den Chunk ein Grundstück in meinem .tex Dokument zu erzeugen, mit einer Beschriftung, die "x ist 5" liest. Stattdessen wird bei der pdflatex-Kompilierung ein Fehler "nicht definierte Steuersequenz" ausgegeben.

Wenn ich die Rinline nicht entkomme (d. H. Benutze nur \ rinline {x}), kompiliert sie, aber die Beschriftung lautet "x ist inlinex".

Ist das, was ich fragen, möglich?

Dies ist meine erste SO-Frage (die Antworten hier oft verwendet, aber. Danke!), So würde ich mich über jede Rückmeldung freuen, wie Sie bessere Fragen stellen.

Danke für die Hilfe!

Antwort

8

fig.cap wird als R Ausdruck ausgewertet, so dass anstelle \rinline der Verwendung (und damit durch knitr die Beschriftung erneut analysiert haben), können Sie nur die Beschriftung Zeichenfolge in R.

%% begin.rcode fig.cap=paste("x is", x) 

schaffen, sondern weil fig.cap ist ausgewertet vorx ist standardmäßig erstellt, müssen Sie die Auswertung von fig.cap verschieben; das zu tun, können Sie ein Stück wie dieses am Anfang des Dokuments sind:

%% begin.rcode setup, include=FALSE 
%% opts_knit$set(eval.after = 'fig.cap') 
%% end.rcode 

Es gibt fig.cap ausgewertet werden, nachdem der Code Chunk ausgewertet wird, dh wenn x ist für Sie in der Abbildung zu verwenden, Bildbeschriftung. Siehe eval.after in the documentation.

Der andere Weg, dies zu tun ist x in ein vorherigen Brocken zu erstellen, und fig.cap=paste("x is", x) im nächsten Brocken verwenden.

+1

Eigentlich habe ich über dieses Problem nachgedacht - ich denke, es ist sinnvoll, Chunk-Optionen wie 'fig.cap' standardmäßig in die' eval.after'-Option zu bringen, da sie nur nach einem Chunk verwendet werden. –

+0

Das ist großartig; eval.after ist genau das was ich gesucht habe! Es ist mir peinlich, dass ich es selbst nicht gefunden habe - RTFM, denke ich. Danke Leute! –

+0

@ user2225161 Kein Problem; Wie gesagt, ich möchte, dass dies standardmäßig geschieht, anstatt manuell eingestellt zu werden. 'eval.after' ist irgendwie peinlich ... –

Verwandte Themen