Interoperative Effizienz von latexmk/imakeidx

Interoperative Effizienz von latexmk/imakeidx

imakeidxund latexmksind 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 imakeidxIndex-Unterkompilierung während der Kompilierung im Dokument (wie ich es mir wünsche glossariesund biblatexwie es erweitert werden könnte, damit es genauso funktioniert!)

Gegebenes MWE:

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

\begin{document}

This.\index{this}

\printindex

\end{document}

makeindexwird einmal mitten in der direkten Kompilierung aufgerufen . Bei Verwendung wird latexjedoch die neue Datei ignoriert, die mittendrin erstellt wird, und die Datei wird erneut aufgerufen.latexmk -recorder (etc.)latexmk.indimakeidxmakeindex.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 glossariesund mehreren Inhaltsverzeichnissen, die mehrere Durchgänge erfordern, bevor sie abgeschlossen sind, latexmkstellt 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 latexmkdie übermäßige Bereitschaft von verbessern, makeindexin 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 makeindexAufrufe ü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 glossariesund/oder biblatexdie Möglichkeit zur In-Document-Kompilierung à la imakeidx's Art von \write18Magie. ; ) ]]

Antwort1

Ich sehe keine Möglichkeit, die aktuelle Version von so zu konfigurieren, latexmkdass die zusätzlichen Durchläufe verhindert werden. Nicht nur wird makeindexvon 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 latexmkenthä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 ..loglatexmk.indlatexlatexmk

Antwort2

Ohne Johns Antwort schmälern zu wollen, erzeugt das Hinzufügen $makeindex = "touch -m %D";zum lokalen .latexmkrceinen automatisierten Workflow mit nahezu minimalem Overhead. In diesem Fall latexwird 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 imakeidxwith \write18enabled verwendet wird – in meinem Fall kein Problem.

touch.exe(*) Windows-Benutzer können in jeder modernen gnuDistribution eine Kopie erhalten .

verwandte Informationen