latexmk / imakeidx 相互運用効率

latexmk / imakeidx 相互運用効率

imakeidxと は、latexmkTeX 時代を通じて私が最も気に入っているユーティリティの 2 つです。特に、書籍サイズのコンパイルでは、これが役に立ちます (@egreg と @John Collins に心から感謝します!)。複数のインデックスを簡単に作成できることに加え、 の最も便利な特性の 1 つimakeidxは、ドキュメント内コンパイル インデックスのサブコンパイルです (同じように動作するように拡張できればいいのですが)。glossariesbiblatex

MWE を前提とすると:

\documentclass{article}
\usepackage{imakeidx}
\makeindex

\begin{document}

This.\index{this}

\printindex

\end{document}

makeindexは、単純なコンパイルの途中で 1 回呼び出されますlatex。ただし、 を使用する場合latexmk -recorder (etc.)、は途中で生成されるlatexmk新しい.indファイルを無視し、ファイルに対して をもう一度呼び出します。imakeidxmakeindex.idx

もちろん、この非効率性はこのおもちゃの MWE ではほとんど目立ちません。しかし、多数のファイルがある本サイズのドキュメントで、複数の大きな索引、biblatex/ biberglossaries複数の toc があり、完了するまでに数回のパスが必要となる場合、余分な作業latexmk(削除するのではなく) が生み出され、私の優雅さの感覚 (そして時には忍耐力) が大いに試されます。

それでは、を使用してドキュメント内でのlatexmkの過剰な呼び出しを改善するにはどうすればよいでしょうか。 に追加できる簡単なルールがいくつかあることを期待しています。特に、複数のパス (この MWE では示されていません) にわたる呼び出し回数を最小限に抑えることに興味があります。たとえば、インデックス ファイルごとに最大 2 回の呼び出しに抑えます。makeindeximakeidx.latexmkrcmakeindex

[ [ のマジックブランドによるドキュメント内コンパイルの拡張glossariesおよび/または機能にはボーナスポイントが付きます。 ; ) ]]biblateximakeidx\write18

答え1

latexmk現在のバージョンの を設定して、余分な実行が行われないようにする方法がわかりません。makeindexは によって 2 回目に実行されるだけでなくlatexmk、 も実行されるlatexため、実行時間が 2 倍になり、大きなドキュメントでは大きなペナルティとなります。

これを修正するには、 自体の変更が必要です。 のファイルには、 の実行中にファイルが作成されたかどうか、またそれが読み取られる前かどうかを決定するのにlatexmk十分な情報があるため、追加の実行は不要であることがわかります。 の将来のバージョン向けの機能強化リストにこれを追加しました。.loglatexmk.indlatexlatexmk

答え2

John の回答を否定するつもりはありませんが、$makeindex = "touch -m %D";ローカルに追加すると.latexmkrc、オーバーヘッドがほぼ最小限で自動化されたワークフローが生成されます。この場合、この例の私のシステムでは、latexは 1 回だけ実行されます。つまり、これは (ほぼ) 可能な限り効率的です。もちろん、imakeidxwith \write18enabled は常に使用されるという条件がありますが、私の場合は問題ではありません。

touch.exe(*) Windows ユーザーは、最新のディストリビューションからのコピーを入手できますgnu

関連情報