在这个答案中,@Yihui 说knitr
使用全球环境。这让我很困惑——我的经验是它没有。我从来没有真正使用过knit
,我通常直接去PDF。
在一个小实验中,似乎knit
确实使用了全局环境(或您使用envir
参数指定的任何环境),但knit2pdf
事实并非如此。
最小示例:global_test.Rnw 文件
\documentclass{article}
\begin{document}
<<>>=
print(x)
@
\end{document}
R脚本:
x <- "Hello World"
knit(input="global_test.Rnw")
# Works as expected, could now call tools::texi2pdf to generate pdf.
knit2pdf(input="global_test.Rnw")
# Doesn't
后者生成不会显示的 PDF 文件并给出警告:
running command '"C:\PROGRA~2\MIKTEX~1.9\miktex\bin\texi2dvi.exe" --quiet --pdf
"global.pdf" -I "C:/PROGRA~1/R/R-215~1.3/share/texmf/tex/latex" -I
"C:/PROGRA~1/R/R-215~1.3/share/texmf/bibtex/bst"' had status 1
我尝试将环境传递给knit2pdf
( envir = globalenv()
) 希望它会被...
传递,我只是得到一个未使用的参数错误。
一般来说,我知道引用全局环境是一种糟糕的形式,但是有没有办法用 来做到这一点knit2pdf
,或者明确地传递一个环境,或者我最好使用brew
和@Ramnath对上述相同问题sprintf
的回答?
在我的用例中,我认为没有tools::texi2pdf
用,因为我需要使用 XeLaTeX 进行编译,它可以knit2pdf
轻松处理。