Übersicht
Einstieg und Anwendung
Spezialgebiete
Software
Diverses
Vorlagen
Über das Projekt
Übersicht
Einstieg und Anwendung
Spezialgebiete
Software
Diverses
Vorlagen
Über das Projekt
Dies ist eine alte Version des Dokuments!
Auf dieser Seite erläutern wir Hintergrundinformationen, die zum besseren Verständnis diverser Themen dienen.
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
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:
\includegraphics
-Befehlen keine Dateiendungen. Damit wird die Auswahl der richtigen Grafik LaTeX überlassen, auch wenn latex
und pdflatex
gemischt werden.
epstopdf
für die Konvertierung von EPS
zu PDF
verwenden.
latex
kompilieren und Ihre bisherige Software einsetzen. Die Finalversion kann dann mit pdflatex
generiert werden.
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:
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):
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:
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:
[?]
wird durch [Ernst & Wenger, 2011] ersetzt).
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.