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.

LaTeX? pdfLaTeX? psLaTeX? XeLaTex? LuaTeX?

Was ist der Unterschied zwischen dem Kommando 'latex' und 'pdflatex'?

Zu Beginn muss man schon mal sagen, dass heute die Unterschiede zwischen den beiden Kommandos im Detail liegen. Es ist sogar so, dass beide Kommandos symbolische Links auf den selben Interpreter - 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 (geschrieben von Donald Knuth) und eTeX (geschrieben von Peter Breitenlohner). Mit Hilfe von google kann man sich da leicht einen Tag lang beschäftigen um Historie und Ablauf der Entwicklung zu erforschen.

Wichtig ist eigentlich nur zu wissen, dass pdfTeX im Gegensatz zu seinen Vorgängern in der Lage ist direkt pdf Dateien zu erstellen. D.h. man kann damit auch pdf Features nutzen. Darüber hinaus hat man aber pdfTeX mit der Fähigkeit ausgestattet weiterhin DVI Dateien zu erstellen - das Ausgabeformat von TeX bzw. eTeX. Zusammengefasst

  • latex → erzeugt DVI Dateien
  • pdflatex → erzeugt pdf Dateien

Entscheidet man sich für die Erstellung von pdf Dateien funktionieren Pakete, die auf der Konvertierung von DVI zu PostScript aufsetzen, mit pdfTeX nicht (vor allem PSTricks). Das gilt insbesondere auch für das Einbetten von PostScript-Grafiken. Diese müssen zuvor in ein Format umgesetzt werden, das von pdfTeX unmittelbar verarbeitet werden kann (PNG, JPEG, JBIG2 oder PDF). Als Alternative zur Erzeugung von Grafiken mit LaTeX wurde das System PGF/TikZ entwickelt. (vgl. http://de.wikipedia.org/wiki/PdfTeX)

D.h. vor allem die verwendbaren Grafikformate sind eine wichtige Eigenschaft die der User zu spüren bekommt. Dabei kann man folgende Formate zuordnen (die Reihenfolge ist auch jene in der pdfTeX nach Dateiendungen sucht so fern keine angegeben wurden):

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

Da nun beide Kommandos pdftex im Hintergrund verwenden kann man auch mit pdflatex DVI Dateien erzeugen (natürlich mit allen oben genannten Einschränkungen und Unterschieden.

  pdflatex -output-format dvi datei.tex

Soll ich jetzt mit latex oder pdflatex arbeiten?

Den einzig „richtigen“ Weg gibt es nicht. Bis zu diesem „Tutorial für Experten“ haben wir bewusst ausschließlich mit pdflatex gearbeitet weil das unserer Meinung nach die modernere Vorgehensweise ist. Es gibt aber eben wie überall auch hier nicht nur Vorteile. Einige sehr interessante Features funktionieren nur mit latex. Diese tools (pstricks, psfrag, usw.) wollen wir nun hier vorstellen.

Wir können auch noch folgende „gemischte“ Vorgehensweise empfehlen:

  • Die einzubindenden Grafiken als EPS und PDF speichern, im Dokument den Dateinamen ohne .eps oder .pdf angeben. Hat man Grafiken im EPS-Format vorliegen, übernimmt das Programm epstopdf die problemlose Umwandlung nach PDF.
  • Das Dokument während der Arbeit mit latex kompilieren, die entstandene DVI-Datei kann schnell überprüft werden (mit Yap unter Windows bzw. xdvi unter Linux)
  • Sind alle Arbeiten abgeschlossen, kann mit pdflatex kompiliert 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:

  • 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.1362848052.txt.gz · Zuletzt geändert: 09.03.2013 17:54 von Thomas Schlager