我在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
包,则不会发生此错误。
我的问题是:这是一个错误,还是我的代码有问题?
我正在使用knitr(1.1)在R(R Under Developing(unstable)(2012-11-10 r61101)上使用tikzDevice(0.6.3)通过RStudio(0.97.246)(通过浏览器通过RStudio Server访问)它本身运行在Ubuntu(12.04.2 LTS)上。我的LaTeX2e日期为&lt; 2009/09/24&gt;。
答案 0 :(得分:2)
不要将options(tikzDefaultEngine="xetex")
放在缓存的块中,因为它具有无法缓存的副作用,因此第二次编译文档时,将跳过此选项。请阅读knitr
网站上的Important Notes in the cache page部分。
请注意,您也不需要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}