2

私はRStudio内でXeLaTeXでknitrを使用しています。ドキュメントをコンパイルするたびに特定のコードを再実行する必要がないように、チャンクキャッシュを使用しています。この最小限の例は、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、コードが2回実行されると、失敗します。たとえば、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パッケージがロードされていない場合、このエラーは発生しません。

私の質問は:これはバグですか、それとも私のコードに何か問題がありますか?

R(R開発中(不安定)(2012-11-10 r61101))からRStudio(0.97.246)(RStudioサーバーからブラウザー経由でアクセス)でtikzDevice(0.6.3)を使用してknitr(1.1)を使用しています。 Ubuntu(12.04.2 LTS)で実行されています。私のLaTeX2eの日付は<2009/09/24>です。

4

1 に答える 1

3

options(tikzDefaultEngine="xetex")キャッシュできない副作用があるため、キャッシュされたチャンクを入れないでください。そのため、2回目にドキュメントをコンパイルするときに、このオプションはスキップされます。Webサイトのキャッシュページの重要な注意事項のセクションをお読みください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 に答える