Automatisierte Builds

Ein LaTeX-Dokument von Hand zu bauen bedeutet, immer wieder „kompilieren → Bibliografie → kompilieren → kompilieren“ auszuführen und sich zu merken, wann welcher Schritt erneut nötig ist. Ein automatisierter Build überlässt diese Entscheidung einem Werkzeug: Es verfolgt Abhängigkeiten, führt nur die nötigen Schritte aus und baut im Watch-Modus sofort nach dem Speichern neu. Diese Seite behandelt den Workflow (zu den Werkzeugen selbst siehe „Build tools“).

Was ein automatisierter Build ist

Mit Querverweisen, Inhaltsverzeichnis, Bibliografie oder Index braucht die Kompilierung mehrere Durchläufe, dazwischen etwa biber oder makeindex. Ein automatisiertes Build-Werkzeug ermittelt Reihenfolge und Anzahl selbst, ruft Hilfsprogramme zum richtigen Zeitpunkt auf und läuft weiter, bis die Ausgabe stabil ist. Sie geben im Grunde nur einen Befehl ein. Der Standard ist latexmk; die deklarative Alternative ist llmk.

Mit latexmk automatisieren

Ein einzelnes latexmk -pdf document.tex führt so viele Kompilierungen wie nötig aus, ruft bibtex/biber und makeindex auf und wiederholt alles, bis es stabil ist. Projektspezifische Einstellungen gehören in .latexmkrc (Engine wechseln, japanisches uplatex + dvipdfmx-Setup usw.). Bei Zusammenarbeit sollte diese Datei ins Repository: Sie wird zum Projektvertrag „Dieses Dokument wird mit diesem Befehl gebaut.“ So lässt sich dasselbe PDF über Editoren und Betriebssysteme hinweg leichter reproduzieren. Zu den einzelnen Optionen siehe „Build tools“.

terminal
latexmk -pdf document.tex   # 必要な手順を自動で回す / runs all the needed steps

Die erste Entscheidung ist der Engine-Pfad, der das PDF erzeugt. Für ein kurzes rein englisches Dokument reicht oft pdflatex; japanischer Text oder OpenType-Schriften sprechen meist für upLaTeX + dvipdfmx oder LuaLaTeX. Halten Sie diese Entscheidung in .latexmkrc fest, damit Editor-Buttons, Terminal und CI denselben Weg nehmen. Je länger das Dokument wird, desto stärker zahlt sich dieser fixierte Build-Pfad aus.

terminal
# .latexmkrc — upLaTeX + dvipdfmx の例 / example route
$latex = 'uplatex -interaction=nonstopmode -halt-on-error %O %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3;

Bei jedem Speichern neu bauen — latexmk -pvc

Der nützlichste Modus beim Schreiben ist -pvc (preview continuously). latexmk überwacht alle Quelldateien, von denen es abhängt: die Hauptdatei, alle mit \input/\include eingebundenen .tex-Dateien sowie Grafikdateien. Sobald eine davon gespeichert wird, baut es automatisch neu und aktualisiert den Viewer. Es fühlt sich an wie ein „Dev-Server“ für Ihr Dokument: speichern, Ergebnis sofort sehen.

terminal
latexmk -pdf -pvc document.tex   # 監視して保存ごとに自動更新 / watch and auto-rebuild on save

Nur Änderungen verarbeiten — inkrementelle Builds

latexmk vermeidet überflüssige Wiederholungen, weil es die Abhängigkeiten aufzeichnet. Nach jedem Lauf speichert es den Zustand jeder Quelldatei in einer Datenbank, .fdb_latexmk, und nutzt die von -recorder erzeugte .fls-Datei (eine Liste dessen, was dieser Lauf gelesen und geschrieben hat), um Eingaben und Ausgaben genau zu kennen. Beim nächsten Aufruf wird ein Schritt nur erneut ausgeführt, wenn sich seine Eingaben geändert haben: Ohne Änderung passiert nichts, und eine kleine Korrektur startet nur die nötigen Durchläufe. Deshalb sind Neubauten schnell.

Auch llmk automatisiert den Build. Weil seine Einstellungen deklarativ in llmk.toml stehen (oder als Magic Comments im Dokument), sind die Schritte für alle auf jeder Maschine gleich. Das ist sehr gut für Reproduzierbarkeit und passt zu Zusammenarbeit und Verteilung. Betrachten Sie latexmk als Werkzeug, das nötige Wiederholungen aus Logs und Abhängigkeiten ableitet, und llmk als Werkzeug, das den Verarbeitungsworkflow im Dokumentprojekt selbst festschreibt.

In den eigenen Workflow einbauen

-pvc ist fürs Schreiben gedacht, ein normaler latexmk-Lauf für die Prüfung vor der Abgabe, und latexmk -C ist das Aufräumen, das zeigt, dass Sie nicht von veralteten erzeugten Dateien abhängen. Gerade in der Zusammenarbeit bricht ein Dokument, das keinen Clean Build schafft, wahrscheinlich auch bei jemand anderem. Verlassen Sie sich nicht nur auf sofortige Vorschauen beim Speichern; bereinigen und bauen Sie regelmäßig neu, damit die finale PDF-Abgabe ruhig bleibt.

  • Beim Schreibenlatexmk -pdf -pvc: automatische Aktualisierung bei jedem Speichern.
  • Konfiguration mit dem Projekt ausliefern.latexmkrc / llmk.toml für Reproduzierbarkeit im Repository halten.
  • Letzter Durchlauf vor der Verteilung → mit latexmk -C Ausgaben löschen, dann clean builden.
  • Build auf Server oder in CI → siehe Seite „CI“.