2013-03-29 14 views
9

Câu hỏi của tôi là về fig.cap tùy chọn đan, khi sử dụng LaTeX. Có thể bao gồm \ rinline hoặc \ Sexpr trong chuỗi ký tự fig.cap không?knitr: Sử dụng biểu thức nội tuyến trong tùy chọn chunk fig.cap

Ví dụ, tôi muốn có một cái gì đó tương tự (Tôi đang sử dụng một tập tin .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} 

tôi thực sự muốn cho đoạn đó để tạo ra một âm mưu trong tài liệu .tex của tôi, với chú thích đọc "x là 5". Thay vào đó, nó đưa ra một lỗi "chuỗi điều khiển không xác định" trên trình biên dịch pdflatex.

Nếu tôi không thoát khỏi đường biên (tức là chỉ sử dụng \ rinline {x}), thì nó biên dịch, nhưng chú thích là "x là inlinex".

Tôi có thể yêu cầu điều gì không?

Đây là câu hỏi SO đầu tiên của tôi (đã sử dụng câu trả lời ở đây nhiều lần.), Vì vậy tôi đánh giá cao bất kỳ phản hồi nào về cách đặt câu hỏi hay hơn.

Cảm ơn sự giúp đỡ!

Trả lời

8

fig.cap được đánh giá là một biểu thức R, do đó thay vì sử dụng \rinline (và do đó có chú thích một lần nữa phân tách bởi knitr), bạn chỉ có thể tạo ra các chuỗi caption trong R.

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

nhưng vì fig.cap là được đánh giá trước khix được tạo theo mặc định, bạn sẽ cần phải hoãn đánh giá số fig.cap; để làm điều đó, bạn có thể bao gồm một đoạn như thế này trong phần đầu của tài liệu của bạn:

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

Nó chỉ rõ fig.cap được đánh giá sau khi mã đoạn được đánh giá, tức là khi x có sẵn để bạn có thể sử dụng trong hình chú thích. Xem eval.after in the documentation.

Một cách khác để làm điều này là để tạo ra x trong một trước đoạn, và sử dụng fig.cap=paste("x is", x) trong đoạn tiếp theo.

+1

Thực ra tôi đã suy nghĩ về vấn đề này - tôi nghĩ sẽ hợp lý để tạo các tùy chọn đoạn như 'fig.cap' thành tùy chọn' eval.after' bởi vì chúng chỉ được sử dụng sau một đoạn. –

+0

Thật tuyệt vời; eval.after là chính xác những gì tôi đang tìm kiếm! Tôi xấu hổ vì tôi đã không tìm thấy nó-RTFM tôi đoán. Cảm ơn các bạn! –

+0

@ user2225161 Không sao cả; như tôi đã nói, tôi có thể muốn điều này xảy ra theo mặc định thay vì được đặt theo cách thủ công; 'eval.after' là loại khó xử ... –

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