latex:hintergrund

Dies ist eine alte Version des Dokuments!


Hintergrundwissen

Auf dieser Seite erläutern wir Hintergrundinformationen, die zum besseren Verständnis diverser Themen dienen. In diesem Bereich

LaTeX? pdfLaTeX? psLaTeX? XeLaTex? LuaTeX?

Der wiederholte LaTeX-Aufruf

In diversen anderen Abschnitten wird immer wieder erwähnt, dass der Kompilier-Vorgang mehrmals durchzuführen ist. Dieser Natur gehen wir hier kurz auf den Grund. LaTeX (unabhängig der Variante) agiert wie ein Compiler, der die Eingabesprache (LaTeX) in die Sprache des Ausgabeformats (z.B. PDF) übersetzt.

Ein wichtiger Aspekt ist die Art und Weise, wie der Kompilier-Vorgang durchgeführt wird: LaTeX ist ein Single-Pass-Compiler. Die Eingabedatei wird von der ersten bis zur letzten Zeile schrittweise abgearbeitet. Das Ausgabedokument wird dabei im selben Atemzug Seite für Seite erstellt. Referenziert man nun in einem Dokument einen späteren Abschnitt (vorausschauend), so ist dem LaTeX-Compiler während er das Eingabedokument liest die Markierung (das Label) dieses referenzierten Abschnitts noch gar nie begegnet und damit unbekannt. Die Referenz kann vorerst nicht erstellt werden und wird stattdessen mit einem [?] versehen.

Um dieses Problem zu lösen, erstellt der LaTeX-Compiler bei jedem Kompilier-Vorgang sogenannte Meta-Dateien. Sie enthalten diverse Informationen über das Dokument; darunter für Abschnitte, Markierungen und Referenzen:

  • Welche Abschnitte gibt es?
  • Welche Markierungen gibt es?
  • Auf welchen Seiten des Ausgabedokuments sind sie zu finden?

LaTeX liest vor aufeinanderfolgenden Kompilier-Vorgängen die Meta-Dateien und setzt bislang unbekannte Informationen passend ein. Ein frisch erstelltes LaTeX-Projekt hat keine Meta-Dateien. Daher kann das erste, kompilierte Ausgabedokument keine Referenzen oder andere von dieser Systematik abhängige Elemente enthalten. Zur Illustration stellt die nachfolgende Abbildung dieses 2-Schritte-Verfahren schematisch dar (die zwei Schritte sind rot markiert):

LaTeX-Iterationen

Nun gilt es zu klären, was dies für Ihren Arbeitsalltag bedeutet. Klar ist, dass jedes Dokument zur endgültigen Fertigstellung mindestens zwei Mal kompiliert werden muss - nämlich nach jeder Änderung. Während des Arbeitsalltags ist dies allerdings nicht nötig, da Sie aller Voraussicht nach Ihr Dokument schrittweise erweitern und dadurch ständig fast-aktuelle Meta-Dateien vorliegen.

Zu klären ist auch, welche Elemente in einem Dokument überhaupt von dieser Zwei-Schritte-Systematik betroffen sind. Da auch viele Funktionen von Erweiterungspaketen in diese Kategorie fallen, ist es an dieser Stelle unmöglich, alle aufzulisten. Aus den grundlegenden Funktionen sind betroffen:

  • Inhaltsverzeichnis
  • Markierungen und Referenzen (Querverweise, auch Seitenverweise)
  • Digitale Sprungpunkte (Hyperlinks)
  • Zitation und Literaturverzeichnis
  • Stichwörter für Glossare und andere Verzeichnisse
  • Randmarkierungen in zweiseitigen Dokumenten

Viele LaTeX-Arbeitsumgebungen oder spezielle Build-Systeme sind sich dieser Problematik bewusst und veranlassen daher automatisch mehrfache Kompilier-Vorgänge.

Um hier die Vollständigkeit zu wahren, erwähnen wir die ganze Wahrheit. In manchen Fällen sind auch zwei Kompilier-Vorgänge von LaTeX nicht ausreichend. Dies betrifft vor allem lange Dokumente, in seltenen Fällen aber auch kürzere. Angenommen Sie kopieren eine bestehende, längere LaTeX-Eingabedatei in einen neuen Ordner, ein neues LaTeX-Projekt. Nun kompilieren Sie ein erstes Ausgabedokument. Sie stellen fest, dass keine Querverweise existieren und das Inhaltsverzeichnis leer ist. Sie kompilieren daher das Dokument ein zweites Mal. Querverweise werden angezeigt, das Inhaltsverzeichnis ist gefüllt. Sie drucken oder versenden Ihr (möglicherweise sehr wichtiges) Dokument.

Nun stellen Sie fest, dass alle Seitenangaben der Querverweise und im Inhaltsverzeichnis falsch sind. Hat LaTeX hier Probleme, die man aus anderen Textverarbeitungsprogrammen kennt? Nein. Entmystifizieren wir das Problem: alle Veränderungen im Dokument, die ein Anwachsen oder Schrumpfen von Seiten im Ausgabedokument gegenüber der Letztversion bewirken, führen in diesem Sinne potentiell zu Fehlern. Das Ausgabedokument und die Meta-Dateien sind während des Kompilier-Vorgangs „asynchron“. Erst das Dokument des nächsten Kompilier-Vorgangs stellt die Fehler richtig. Typische Phänomene, die solches Verhalten bewirken:

  • Ein Verzeichnis wächst oder schrumpft um eine Seite.
  • Referenzen oder Zitationen werden eingesetzt und erwirken Zeilen- und Seitenverschiebung (z.B. [?] wird durch [Ernst & Wenger, 2011] ersetzt).
  • Gleitobjekte verschieben sich.

Im vorhergehenden Beispiel wurde beim Kompilier-Vorgang das z.B. zweiseitige Inhaltsverzeichnis eingesetzt und dadurch erhöhte sich die Seitenzahl aller Folgeseiten um Eins. Diese Information war in den Meta-Dateien beim Erstellen des Inhaltsverzeichnisses und der Querverweise aber noch gar nicht verfügbar.

Je länger Ihr Dokument wird (z.B. mehrere Hundert Seiten), desto größer ist die Chance solcher Effekte. Kompilieren Sie längere Dokumente bei Fertigstellung daher sicherheitshalber drei oder gar vier Mal, um sicherzustellen dass sich keine Verschiebungen mehr ergeben.

Randnotiz: in diesem Kontext ist auch die Betrachtung externe Programme, wie bibtex, biber oder makeindex notwendig. Auch Sie bewirken manchmal sprungartige Änderungen im Ausgabedokument. Betrachten Sie also den Einsatz externer Programme wie eine potentielle Änderung im Ausgabedokument.

latex/hintergrund.1362847454.txt.gz · Zuletzt geändert: 09.03.2013 17:44 von Thomas Schlager