imakeidx
と は、latexmk
TeX 時代を通じて私が最も気に入っているユーティリティの 2 つです。特に、書籍サイズのコンパイルでは、これが役に立ちます (@egreg と @John Collins に心から感謝します!)。複数のインデックスを簡単に作成できることに加え、 の最も便利な特性の 1 つimakeidx
は、ドキュメント内コンパイル インデックスのサブコンパイルです (同じように動作するように拡張できればいいのですが)。glossaries
biblatex
MWE を前提とすると:
\documentclass{article}
\usepackage{imakeidx}
\makeindex
\begin{document}
This.\index{this}
\printindex
\end{document}
makeindex
は、単純なコンパイルの途中で 1 回呼び出されますlatex
。ただし、 を使用する場合latexmk -recorder (etc.)
、は途中で生成されるlatexmk
新しい.ind
ファイルを無視し、ファイルに対して をもう一度呼び出します。imakeidx
makeindex
.idx
もちろん、この非効率性はこのおもちゃの MWE ではほとんど目立ちません。しかし、多数のファイルがある本サイズのドキュメントで、複数の大きな索引、biblatex
/ biber
、glossaries
複数の toc があり、完了するまでに数回のパスが必要となる場合、余分な作業latexmk
(削除するのではなく) が生み出され、私の優雅さの感覚 (そして時には忍耐力) が大いに試されます。
それでは、を使用してドキュメント内でのlatexmk
の過剰な呼び出しを改善するにはどうすればよいでしょうか。 に追加できる簡単なルールがいくつかあることを期待しています。特に、複数のパス (この MWE では示されていません) にわたる呼び出し回数を最小限に抑えることに興味があります。たとえば、インデックス ファイルごとに最大 2 回の呼び出しに抑えます。makeindex
imakeidx
.latexmkrc
makeindex
[ [ のマジックブランドによるドキュメント内コンパイルの拡張glossaries
および/または機能にはボーナスポイントが付きます。 ; ) ]]biblatex
imakeidx
\write18
答え1
latexmk
現在のバージョンの を設定して、余分な実行が行われないようにする方法がわかりません。makeindex
は によって 2 回目に実行されるだけでなくlatexmk
、 も実行されるlatex
ため、実行時間が 2 倍になり、大きなドキュメントでは大きなペナルティとなります。
これを修正するには、 自体の変更が必要です。 のファイルには、 の実行中にファイルが作成されたかどうか、またそれが読み取られる前かどうかを決定するのにlatexmk
十分な情報があるため、追加の実行は不要であることがわかります。 の将来のバージョン向けの機能強化リストにこれを追加しました。.log
latexmk
.ind
latex
latexmk
答え2
John の回答を否定するつもりはありませんが、$makeindex = "touch -m %D";
ローカルに追加すると.latexmkrc
、オーバーヘッドがほぼ最小限で自動化されたワークフローが生成されます。この場合、この例の私のシステムでは、latex
は 1 回だけ実行されます。つまり、これは (ほぼ) 可能な限り効率的です。もちろん、imakeidx
with \write18
enabled は常に使用されるという条件がありますが、私の場合は問題ではありません。
touch.exe
(*) Windows ユーザーは、最新のディストリビューションからのコピーを入手できますgnu
。