knit2pdf可以使用全球环境吗?

Gre*_*gor 13 r knitr

这个答案中,@Yihui表示knitr利用全球环境.这让我很困惑 - 我的经历是,它没有.我从来没有真正使用过knit,我通常直接使用PDF.

在一个小实验中,似乎knit确实使用了全局环境(或者使用envir参数指定的任何环境),但knit2pdf事实并非如此.

最小的例子:global_test.Rnw文件

\documentclass{article}
\begin{document}
<<>>=
    print(x)
@
\end{document}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

后者生成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 
Run Code Online (Sandbox Code Playgroud)

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

一般来说,我知道,参照全球环境表现欠佳,但有没有办法做到这一点的knit2pdf,或者明确地传递一个环境,还是我最好使用brewsprintf作为@ Ramnath的回答上述同样的问题?

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

Gre*_*gor 8

问题中的示例问题似乎与环境无关.如果output参数不在,一切都会正确编译而不会发出警告knit2pdf.

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

更新:问题已在开发版本中修复knitr,可在此处获得.

还值得注意的是,RStudio Compile PDF按钮使用您当前的环境,因此如果您想要访问全局变量并使用RStudio,请显式调用相应的函数,而不是依赖于快捷方式.实际上,它不是直接使用,而是直接使用. knitknit2pdfrmarkdown::render