2013-03-29 40 views
9

當我使用LaTeX時,我的問題是關於knitr選項fig.cap。在fig.cap字符串中是否可以包含\ rinline或\ Sexpr ?knitr:在fig.cap中使用內聯表達式選項

例如,我想有這樣的事情(我使用的是.Rtex文件):

\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} 

我真的很喜歡該塊到我的.tex文件中產生一個情節,標題爲「x是5」。相反,它會在pdflatex編譯中引發「未定義的控制序列」錯誤。

如果我不逃避rinline(即使用\ rinline {x}),那麼它會編譯,但標題是「x is inlinex」。

是我問的可能嗎?

這是我的第一個SO問題(在這裏多次使用答案,謝謝!),所以我會很感激任何關於如何提出更好問題的反饋。

感謝您的幫助!

回答

8

fig.cap被評估爲R的表達,因此代替使用\rinline(並因此具有再次knitr解析的字幕)時,可以只在R.

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

創建標題字符串,但因爲是fig.cap評估之前x默認情況下創建,您將需要推遲評估fig.cap;要做到這一點,您可以包括這樣的大塊在你的文檔的開頭:

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

它指定fig.cap代碼塊後評估進行評估,即當x可供您在圖中使用標題。見eval.after in the documentation

另一種方式做,這是在以前創建x,並在接下來的使用fig.cap=paste("x is", x)

+1

其實我一直在想這個問題 - 我認爲在默認情況下將'fig.cap'這樣的塊選項放入'eval.after'選項是合理的,因爲它們只能在塊之後使用。 –

+0

太棒了; eval.after正是我所期待的!我很尷尬,我沒有找到它我自己 - RTFM我想。多謝你們! –

+0

@ user2225161沒問題;正如我所說,我可能希望這是默認情況下發生的,而不是手動設置; 'eval.after'有點尷尬...... –

相關問題