【发布时间】:2013-03-26 20:59:10
【问题描述】:
在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
我尝试将环境传递给 knit2pdf (envir = globalenv()) 希望它会被 ... 传递,但我只是得到一个未使用的参数错误。
一般来说,我知道引用全局环境是不好的形式,但是有没有办法用knit2pdf 来做到这一点,或者明确地传递一个环境,或者我最好使用brew 和sprintf 作为在@Ramnath's answer 上面的同一个问题?
在我的用例中,我不认为 tools::texi2pdf 有用,因为我需要使用 XeLaTeX 进行编译,而 knit2pdf 可以轻松处理。
【问题讨论】:
-
您是否尝试过在
knit2pdf中显式设置envir参数? -
是的,我只是得到一个未使用的参数错误。
-
你试过不引用全局变量吗?当我尝试使用
knit2pdf()时,我得到完全相同的错误,当 R 代码的一行是print("Hello World")时(即当没有明确引用全局变量时)......我在 Windows XP 机器上,使用 R-devel 和knitr_1.1,在引擎盖下使用 MikTeX 发行版。 -
@JoshO'Brien,感谢您指出这一点!
knit2pdf的output参数似乎有问题,当它消失时,其他一切都按预期工作。