imakeidx
und latexmk
sind zwei meiner Lieblings-Hilfsprogramme seit Beginn meiner TeX-Zeit, insbesondere angesichts buchgroßer Kompilierungen (vielen Dank an @egreg und @John Collins!). Abgesehen von der einfachen Erstellung mehrerer Indizes ist eine der nützlichsten Eigenschaften von die imakeidx
Index-Unterkompilierung während der Kompilierung im Dokument (wie ich es mir wünsche glossaries
und biblatex
wie es erweitert werden könnte, damit es genauso funktioniert!)
Gegebenes MWE:
\documentclass{article}
\usepackage{imakeidx}
\makeindex
\begin{document}
This.\index{this}
\printindex
\end{document}
makeindex
wird einmal mitten in der direkten Kompilierung aufgerufen . Bei Verwendung wird latex
jedoch die neue Datei ignoriert, die mittendrin erstellt wird, und die Datei wird erneut aufgerufen.latexmk -recorder (etc.)
latexmk
.ind
imakeidx
makeindex
.idx
Natürlich ist diese Ineffizienz bei diesem Spielzeug-MWE kaum wahrnehmbar. Aber bei Dokumenten in Buchgröße mit vielen Ablagen, mehreren großen Indizes, biblatex
/ biber
, mehreren glossaries
und mehreren Inhaltsverzeichnissen, die mehrere Durchgänge erfordern, bevor sie abgeschlossen sind, latexmk
stellt die zusätzliche Arbeit, die dadurch entsteht (anstatt sie zu vermeiden), meinen Sinn für Eleganz (und manchmal auch meine Geduld) auf eine harte Probe.
Wie kann ich also latexmk
die übermäßige Bereitschaft von verbessern, makeindex
in Dokumenten mit aufzurufen imakeidx
? Ich hoffe auf einige einfache Regeln, die ich zu meinem hinzufügen kann .latexmkrc
. Besonders daran interessiert ist es, die Anzahl der makeindex
Aufrufe über mehrere Durchläufe hinweg auf ein Minimum zu beschränken (wird bei diesem MWE nicht angezeigt) – sagen wir, auf maximal zwei Aufrufe pro Indexdatei.
[[Bonuspunkte für die Erweiterung glossaries
und/oder biblatex
die Möglichkeit zur In-Document-Kompilierung à la imakeidx
's Art von \write18
Magie. ; ) ]]
Antwort1
Ich sehe keine Möglichkeit, die aktuelle Version von so zu konfigurieren, latexmk
dass die zusätzlichen Durchläufe verhindert werden. Nicht nur wird makeindex
von ein zweites Mal ausgeführt latexmk
, sondern auch latex
, sodass sich die Ausführungszeit verdoppelt, was bei einem großen Dokument eine schlimme Strafe darstellt.
Um dies zu korrigieren, sind Änderungen an sich erforderlich . Die Datei latexmk
enthält genügend Informationen, um festzustellen, dass die Datei während des Laufs von erstellt wurde, bevor sie gelesen wurde, und zeigt daher, dass die zusätzlichen Läufe nicht erforderlich sind. Ich habe dies zu meiner Liste der Verbesserungen für eine zukünftige Version von hinzugefügt ..log
latexmk
.ind
latex
latexmk
Antwort2
Ohne Johns Antwort schmälern zu wollen, erzeugt das Hinzufügen $makeindex = "touch -m %D";
zum lokalen .latexmkrc
einen automatisierten Workflow mit nahezu minimalem Overhead. In diesem Fall latex
wird auf meinem System mit diesem Beispiel nur einmal ausgeführt. D. h., dies ist (fast) so effizient, wie es nur sein kann. Die Voraussetzung ist natürlich, dass immer imakeidx
with \write18
enabled verwendet wird – in meinem Fall kein Problem.
touch.exe
(*) Windows-Benutzer können in jeder modernen gnu
Distribution eine Kopie erhalten .