knit2pdf可以使用全球环境吗?

时间:2013-03-26 20:59:11

标签: r knitr

this answer中,@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 

我尝试将环境传递给knit2pdfenvir = globalenv()),希望传递...,我只是得到一个未使用的参数错误。

一般来说,我知道引用全局环境的形式很差,但有没有办法用knit2pdf来实现,或明确传递环境,或者我最好使用brewsprintf与上述同一问题的@Ramnath's answer一样?

在我的用例中,我不认为tools::texi2pdf是有用的,因为我需要使用XeLaTeX进行编译,knit2pdf可以毫不费力地处理。

1 个答案:

答案 0 :(得分:7)

问题中的示例问题似乎与环境无关。如果output参数不在knit2pdf之内,那么所有内容都会正确编译而不会发出警告。

作为参考,我在Windows 7上的R 2.15.3上使用了knitr 1.1。我会让Yihui知道它似乎是knit2pdf中的一个错误(调用tools::texi2pdf,它不会不接受输出文件路径。

更新:问题已在knitravailable here的开发版本中修复。

还值得注意的是, RStudio 中的Compile PDF按钮不会使用您当前的环境,因此如果您想要访问全局变量,那么正在使用RStudio,显式调用相应的knit函数,而不是依赖于快捷方式。实际上,它不直接使用knit2pdf,而是调用rmarkdown::render