2

我在 RStudio 中使用 knitr 和 XeLaTeX。我使用块缓存,这样每次编译文档时都不必重新运行某些代码。fontspec这个最小的例子表明,如果加载了包,缓存似乎被破坏了。

\documentclass{article}
\usepackage{fontspec} % Appears to somehow conflict with caching.

\begin{document}

<<pre_load, cache=TRUE>>=
library(tikzDevice)
options(tikzDefaultEngine="xetex")
@

\section{Test}
<<test_block, dev='tikz', dependson='pre_load'>>=
plot(1:10,main='Test')
@

\end{document}

第一次将此文档编译为 PDF 时,它会起作用,因为没有使用缓存。但是,如果对块进行了更改test_block,并且第二次运行代码,它将失败。例如,编译成 PDF 一次后,将test_block块更改为:

<<test_block, dev='tikz', dependson='pre_load'>>=
plot(1:10,main='Test Modified')
@

现在,编译为 PDF 失败并出现以下错误:

! 
 ********************************************
 * XeTeX is required to compile this document.
 * Sorry!
 ********************************************.
\RequireXeTeX ...********************************}
                                                  \endgroup \fi 
l.18 \RequireXeTeX

此错误表示options(tikzDefaultEngine="xetex")尚未设置。有趣的是,如果fontspec未加载包,则不会发生此错误。

我的问题是:这是一个错误,还是我的代码有问题?

我正在通过RStudio(0.97.246)(通过浏览器通过RStudio Server访问)在R(R正在开发(不稳定)(2012-11-10 r61101))上使用tikzDevice(0.6.3)使用knitr(1.1),它本身就是在 Ubuntu (12.04.2 LTS) 上运行。我的 LaTeX2e 的日期为 <2009/09/24>。

4

1 回答 1

3

不要放入options(tikzDefaultEngine="xetex")缓存的块,因为它具有无法缓存的副作用,因此第二次编译文档时,将跳过此选项。阅读网站缓存页面中的重要说明部分knitr

请注意,您也不需要library(tikzDevice);这个包会在你设置的时候自动加载dev='tikz'

在大多数情况下,您应该缓存绘图块,因为创建 TikZ 图形很慢。

\documentclass{article}
\usepackage{fontspec} % Appears to somehow conflict with caching.

\begin{document}

<<pre_load>>=
options(tikzDefaultEngine="xetex")
@

\section{Test}
<<test_block, dev='tikz'>>=
plot(1:10,main='Test')
@

\end{document}
于 2013-03-04T20:38:39.407 回答