latex:hintergrund

Hintergrundwissen

Auf dieser Seite erläutern wir Hintergrundinformationen, die zum besseren Verständnis diverser Themen dienen. Leider muss man in diesem Zusammenhang immer wieder etwas weiter ausschweifen.

"latex" oder "pdflatex"?

Die Unterschiede zwischen diesen beiden Kommandos liegen im Detail. Es ist sogar so, dass beide Kommandos symbolische Links auf das gleiche Programm – nämlich pdftex – sind:

$ ls -la $(which latex)
lrwxrwxrwx 1 root root 6 12. Jän 2010  /usr/bin/latex -> pdftex
$ ls -la $(which pdflatex)
lrwxrwxrwx 1 root root 6 12. Jän 2010  /usr/bin/pdflatex -> pdftex

pdfTeX ist die logische Weiterentwicklung und Vereinigung von TeX (Donald Knuth) und eTeX (Peter Breitenlohner). LaTeX wiederum ist Eingabesprache und Textsatz-System, die um diese Technologien gesponnen wurden. Eine Makro-Paket sozusagen. Historie und Ablauf der Entwicklung lassen sich über Suchmaschinen mit einigem Leseaufwand verfolgen.

pdfTeX ist im Gegensatz zu seinen Vorgängern in der Lage, direkt PDF-Dateien zu erstellen. Dadurch lassen sich viele der in PDF verfügbaren Features nutzen. Darüber hinaus hat man pdfTeX mit der Fähigkeit ausgestattet, DVI-Dateien erstellen zu können:

  • latex → erzeugt DVI-Dateien
  • pdflatex → erzeugt PDF-Dateien

Entscheidet man sich für pdflatex können Pakete, die auf Konvertierung von DVI zu PostScript basieren, nicht verwendet werden (z.B. PSTricks). Auch das direkte einbetten von PostScript-Grafiken ist unmöglich (sie können aber in verträgliche Formate umgewandelt werden). Als Alternative zur Erzeugung von Grafiken mit PSTricks wurde PGF/TikZ entwickelt. (vgl. http://de.wikipedia.org/wiki/PdfTeX)

Einsetzbare Grafik-Formate:

  • latex → ps, eps, tiff
  • pdflatex → jpeg, png, pdf

Da beide Kommandos pdfTeX verwenden, lassen sich auch beide Formate damit generieren. Für die Ausgabeformate sind dennoch die erwähnten Einschränkungen gültig:

  pdflatex -output-format dvi datei.tex

latex oder pdflatex?

Den einzig „richtigen“ Weg gibt es nicht. Bisher haben wir bewusst die Verwendung von pdflatex forciert, weil es die moderne Vorgehensweise ist. Es gibt aber durchaus Situationen, die die Verwendung von latex fordern, beispielsweise dann wenn Pakete wie pstricks und psfrag eingesetzt werden oder Abbildungen im EPS-Format vorliegen. Unter Umständen wollen Sie auch Ihren bestehenden Workflow nicht ändern und an bewährten Programmen wie Ihrem DVI-Anzeige-Programm festhalten. In solchen Fällen ist ein gemischtes Vorgehen anzuraten:

  1. Verwenden Sie bei \includegraphics-Befehlen keine Dateiendungen. Damit wird die Auswahl der richtigen Grafik LaTeX überlassen, auch wenn latex und pdflatex gemischt werden.
  2. Einzubindende Grafiken können in mehreren Formaten vorliegen. Sie können beispielsweise epstopdf für die Konvertierung von EPS zu PDF verwenden.
  3. Sie können das Dokument während der Arbeit mit latex kompilieren und Ihre bisherige Software einsetzen. Die Finalversion kann dann mit pdflatex generiert werden.

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. Auf neu hinzugefügte Elemente kann im direkt darauffolgenden Kompilier-Vorgang nicht verwiesen werden.

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:

  • Verzeichnisse
  • 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.txt · Zuletzt geändert: 10.03.2013 14:51 von Thomas Schlager