およびのキャッシュ オプションを有効にするminted
と、tikz
予期しない非効率的なキャッシュが発生します。tikz
外部化されたすべての図について、minted
メイン ドキュメントのすべてのコード ブロックがtikz
キャッシュ ディレクトリ内にキャッシュされます。たとえば、図が 50 個以上、コード リストが 100 個以上のドキュメントの場合、キャッシュに時間がかかり、必要以上のディスク領域が使用されます。
例として、次の MWE を考えてみましょう。
\documentclass[11pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage[cache]{minted}
\usepackage{pgf,tikz}
\usetikzlibrary{external}
\tikzsetexternalprefix{figures/cache/}
\tikzset{external/system call={pdflatex -shell-escape -halt-on-error -interaction=batchmode -jobname "\image" "\texsource"}}
\tikzexternalize
\begin{document}
\begin{minted}[frame=none,fontsize=\small,linenos=true]{r}
plotdata <- data.frame(this = rnorm(20), that = rnorm(20))
\end{minted}
\begin{tikzpicture}[->,>=stealth',shorten >=1pt,auto,node distance=3cm,
thick,main node/.style={circle,fill=blue!20,draw,font=\sffamily\Large\bfseries}]
\node[main node] (1) {1};
\node[main node] (2) [below left of=1] {2};
\node[main node] (3) [below right of=2] {3};
\node[main node] (4) [below right of=1] {4};
\path[every node/.style={font=\sffamily\small}]
(1) edge node [left] {0.6} (4)
edge [bend right] node[left] {0.3} (2)
edge [loop above] node {0.1} (1)
(2) edge node [right] {0.4} (1)
edge node {0.3} (4)
edge [loop left] node {0.4} (2)
edge [bend right] node[left] {0.1} (3)
(3) edge node [right] {0.8} (2)
edge [bend right] node[right] {0.2} (4)
(4) edge node [left] {0.2} (3)
edge [loop right] node {0.6} (4)
edge [bend right] node[right] {0.2} (1);
\end{tikzpicture}
\end{document}
これにより、ディレクトリ構造は次のようになります。
.minted-mwe/
475544BE9F571FFAF1D26ACA3A0AB8D0502F9AF18E3C3312853333EF1520885B.pygtex
default.pygstyle
.minted-figures/
cache/
mwe-figure0/
475544BE9F571FFAF1D26ACA3A0AB8D0502F9AF18E3C3312853333EF1520885B.pygtex
default.pygstyle
figures/
cache/
mwe-figure0.aex
mwe-figure0.dpth
mwe-figure0.log
mwe-figure0.md5
mwe-figure0.pyg
ファイルが冗長化されています。これは、システム コールが個々の図を処理する方法、つまりすべての環境が外部ジョブで考慮される*.pygtex
ためであると考えられます。tikz
minted
pdflatex
これを解決する方法について何かアイデアはありますか? 何かが欠けている/誤って設定されているのでしょうか?
答え1
これは外部化の仕組みによるものですtikz
。PGF/TikZマニュアルの外部化の「プロセスの詳細」(バージョン3.0.0マニュアルのセクション50.4.5、625ページ)を見ると、外部化は次のように動作することがわかります。ファイル全体をコンパイルする外部化される画像ごとに1回ずつコンパイルされます。このコンパイルプロセス中、現在の画像に関係のないドキュメントのすべての部分は「黙って破棄されます」。残念ながら、minted
出力破棄されますが、minted
キャッシュされたコンテンツが存在するかどうかを確認し、存在しない場合は作成します。外部化されたイメージのコンパイル方法により、minted
メイン実行から既存のキャッシュを検出できず、新しいキャッシュが作成されます。
側面から改善できる点があるかもしれませんtikz
。外部化プロセスの技術的な詳細についてはよくわかっていません。側面から見るとminted
、条件付きでロードすることで重複の問題を解決できます(これには2.0minted
が必要です)。minted
\ifcsname tikzexternalrealjob\endcsname
\usepackage[draft]{minted}
\else
\usepackage[cache]{minted}
\fi
マクロが\tikzexternalrealjob
存在する場合 (ファイルがイメージを外部化するためだけにコンパイルされている場合)、これはドラフト モードで読み込まれます。ドラフト モードでは、外部ファイルは作成されず、Python (Pygments) は呼び出されません。(イメージの未使用のキャッシュ ディレクトリは引き続き作成されます...次のリリースでこれを修正し、外部化検出minted
を追加する予定です。tikz
minted
問題追跡)\tikzexternalrealjob
が存在しない場合は、通常のコンパイルとなり、minted
通常どおり続行されます。