Wie die Verarbeitung funktioniert (DVI/PDF)

LaTeX zeigt Ihnen das Ergebnis nicht an, während Sie tippen. Sie schreiben eine Nur-Text-Zxqph0xz-Datei und kompilieren sie, um ein PDF-Modell zu erhalten – ein „Schreiben und dann das Ganze auf einmal verarbeiten“-Modell. Es gibt zwei Routen: Eine geht durch eine Zwischendatei DVI, die andere erzeugt direkt PDF.

Warum es nicht WYSIWYG ist

TeX optimiert den Zeilenumbruch, indem es den ganzen Absatz auf einmal betrachtet. Das Hinzufügen eines einzelnen Zeichens am Ende eines Absatzes kann daher die Stelle ändern, an der die erste Zeile umbricht. Das bei jedem Tastendruck zu wiederholen, wäre viel zu teuer.

Anstelle eines WYSIWYG-Textverarbeitungsprogramms, das sich während der Eingabe neu zeichnet, verwendet TeX also die Stapelverarbeitung – es setzt das gesamte Dokument in einem Durchgang. Sie verzichten auf die Live-Vorschau, profitieren aber von einem weltweit optimalen Schriftsatz, einer konsistenten Formatierung im gesamten Dokument und der Automatisierung, die einfacher Text ermöglicht.

Von der Quelle bis zur Ausgabe: zwei Routen

Eine Engine verarbeitet das von Ihnen geschriebene .tex. Es gibt zwei Ausgabefamilien. Auf der modernen Route produzieren pdfTeX, XeTeX und LuaTeX direkt PDF**. Insbesondere XeTeX und LuaTeX lesen Unicode-Eingaben und können die bereits auf Ihrem System installierten OpenType-Schriftarten verwenden.

Auf der Legacy-Route gibt die Engine zunächst eine DVI-Datei aus. DVI steht für *device independent* – eine reine Beschreibung der Seite, die nicht an ein bestimmtes Ausgabegerät gebunden ist. Ein DVI-Treiber konvertiert es dann: dvipdfmx in PDF, dvips in PostScript, dvisvgm in SVG. Ein Treiber, der auf dem Bildschirm rendert, wird DVI-Viewer genannt. Die japanischen Formate pLaTeX und upLaTeX verwenden diese DVI-Route.

terminal
# Direct PDF (modern engines)
lualatex document.tex        # → document.pdf

# Via DVI (legacy route, e.g. Japanese upLaTeX)
uplatex  document.tex        # → document.dvi
dvipdfmx document.dvi        # → document.pdf

Als Ausnahme behält pdfLaTeX den alten (größtenteils nicht von Unicode abweichenden) Eingabestil bei, gibt jedoch PDF direkt aus, ohne DVI. Es hilft, „DVI vs direkt PDF“ und „Unicode / Systemschriftarten oder nicht“ als zwei separate Achsen zu behandeln.

MotorAusgabeEingabe & SchriftartenBildformate
latexDVI (benötigt einen DVI-Treiber)Meistens ASCIIEPS, PS
pdflatexPDF (direkt)Begrenzt UnicodePNG, JPG, PDF (EPS automatisch konvertiert)
xelatexPDF (direkt)Unicode, System OpenType (fontspec)PNG, JPG, PDF, EPS
lualatexPDF (direkt)Unicode, Systemschriftarten, LuaPNG, JPG, PDF, EPS

Hilfsdateien und die Regel „zweimal kompilieren“.

Beim Kompilieren entstehen neben PDF auch Hilfsdateien wie .aux (Beschriftungen und Referenzdaten), .toc (das Inhaltsverzeichnis) und .log (ein Datensatz). Querverweise und das Inhaltsverzeichnis erfordern zwei Durchgänge: Der erste Durchgang schreibt Zahlen und Positionen („Auf welcher Seite befindet sich Kapitel 3?“) in .aux, und der zweite Durchgang liest sie zurück, um \ref und das Inhaltsverzeichnis auszufüllen.

Wenn Sie also ?? in der Ausgabe sehen oder eine Warnung wie *Erneut ausführen, um Querverweise richtig zu machen*, besteht die Lösung einfach darin, erneut zu kompilieren. Bibliographien (BibTeX/biber) und Indizes (makeindex) fügen noch weitere Durchgänge hinzu.

Wo muss man suchen, wenn ein Build stoppt?

Wenn ein Build stoppt, lesen Sie den ersten Fehler im .log, nicht im PDF. TeX versucht nach dem ersten Problem fortzufahren, daher sind die Dutzenden Fehler, die folgen, oft nur Nebeneffekte. ! Undefined control sequence bedeutet normalerweise einen falsch geschriebenen Befehl oder ein fehlendes Paket; File ... not found zeigt auf die Bild-, Klassen- oder Paketsuche; LaTeX Warning: Label(s) may have changed bedeutet, dass ein weiterer Lauf erforderlich ist. Diagnostizieren Sie anhand der Phase der Pipeline, in der die Nachricht angezeigt wird.

  • Wenn nur Querverweise falsch sind, lassen Sie latexmk zunächst erneut ausführen, bevor Sie .aux- oder .toc-Dateien löschen.
  • Wenn ein Bild fehlt, prüfen Sie, ob die Route direkt PDF oder DVI ist, und wählen Sie die Bildformate entsprechend aus.
  • Löschen Sie .aux, .toc, .out und Freunde nur, wenn veraltete Hilfsdateien die wahrscheinliche Ursache sind.

Hören Sie auf, Durchgänge zu zählen – latexmk und Redakteure

Das manuelle Zählen der Durchgänge ist mühsam. latexmk überwacht Dateien wie .aux und führt die Engine genau so oft wie nötig erneut aus, ruft bei Bedarf BibTeX/biber und makeindex auf und stoppt, sobald die Ausgabe stabil ist. Standardmäßig wird es bis zu fünf Mal wiederholt ($max_repeat = 5), bevor entschieden wird, dass es sich um eine Schleife handelt. Diese Obergrenze reicht für praktisch alle echten Dokumente aus.

terminal
latexmk -lualatex document.tex   # LuaLaTeX, as many passes as needed
latexmk -pdf     document.tex     # pdfLaTeX
latexmk -c                        # clean .aux/.log and friends

Editoren und Dienste wie VS Code (LaTeX Workshop), TeXShop und Overleaf rufen normalerweise latexmk unter der Haube auf, sodass Sie einfach auf „Kompilieren“ klicken. Und wenn SyncTeX aktiviert ist, können Sie durch Klicken zwischen einer Zeile in der Quelle und der entsprechenden Stelle in PDF springen.