在这个答案中,@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,或者明确地传递一个环境,还是我最好使用brew并sprintf作为@ Ramnath的回答上述同样的问题?
在我的用例中,我认为tools::texi2pdf没有用,因为我需要使用XeLaTeX进行编译,XeLaTeX可以knit2pdf毫不费力地处理.
问题中的示例问题似乎与环境无关.如果output参数不在,一切都会正确编译而不会发出警告knit2pdf.
作为参考,我在Windows 7上使用R 2.15.3上的knitr 1.1.我会让Yihui知道它似乎是一个错误knit2pdf(调用tools::texi2pdf,它不接受输出文件路径).
更新:问题已在开发版本中修复knitr,可在此处获得.
还值得注意的是,RStudio 中的Compile PDF按钮不使用您当前的环境,因此如果您想要访问全局变量并使用RStudio,请显式调用相应的函数,而不是依赖于快捷方式.实际上,它不是直接使用,而是直接使用. knitknit2pdfrmarkdown::render
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |