В этот ответ, @Yihui сказал, что knitr
использует глобальную среду. Это меня смутило - мой опыт состоял в том, что это не так. Я никогда не использую knit
, хотя обычно я перехожу прямо в PDF.
В небольшом эксперименте кажется, что knit
использует глобальную среду (или любую другую среду, которую вы указываете с помощью аргумента envir
), но это knit2pdf
не работает.
Минимальный пример: файл global_test.Rnw
\documentclass{article}
\begin{document}
<<>>=
print(x)
@
\end{document}
R Script:
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 ответить на тот же вопрос выше?
В моем случае использования, я не думаю, что tools::texi2pdf
полезен, потому что мне нужно скомпилировать с XeLaTeX, который knit2pdf
обрабатывает без усилий.