Moin,

Ich schreibe gerade an einer Präsentation über Word und Latex. Ja die Präsent. ist in PowerPoint erstellt worden. :) Meine Frage bezieht sich auf den technischen Hintergrund. Was passiert bei der Übersetzung des Codes? Welche Dateien werden angelegt. Wie erfolgt dieses Prozedere? Danke :)

gefragt 29 Sep '15, 07:56

PeterKoller's gravatar image

PeterKoller
357
Akzeptiert: 40%


LaTeX selbst ist ein Format für die Maschine TeX. Ruft man das Programm pdflatex auf, so lädt dies zunächst das Format LaTeX. Ein Format ist sozusagen eine vorkompilierte Version einer Sammlung von TeX-Makros oder eine Art Speicherauszug. Dann wird die Hauptdatei gelesen und interpretiert. Die Hauptdatei besteht dabei aus einer Mischung aus Verarbeitungsanweisungen und Satzanweisungen. Die Verarbeitungsanweisungen können auch dazu dienen, neue Anweisungen zu definieren.

Ein LaTeX-Dokument ist aufgebaut in Vorspann oder Präambel und Hauptteil oder Körper. Die Präambel definiert in erster Linie die Form, während der Hauptteil maßgeblich für den Inhalt ist. In der Regel beginnt die Präambel mit dem Laden einer Dokumentklasse. In der Dokumentklasse werden Anweisungen definiert, die wesentlich für die Form des Dokuments sind. Darauf folgen Anweisungen zum Laden von Paketen. Pakete erweitern die Fähigkeiten von Klassen. Weitere Definitionen und Einstellungen können folgen.

Während der Verarbeitung des Hauptteils, dessen Satzanweisungen entfernt mit HTML-Anweisungen zu vergleichen sind, werden außerdem Informationen für zukünftige Verarbeitungsläufe aufgesammelt. Beispielsweise werden Informationen zu Querverweisen so konserviert, aber auch Informationen zu den Inhalten von Verzeichnissen. Auch Informationen zu verwendeten Quellen oder anzulegenden Stichworten im Stichwortverzeichnis werden in externen Dateien abgelegt. Gleichzeitig wird Seite für Seite die PDF-Datei geschrieben. Vorteil dieses Vorgehens ist, dass sie eher wenig Speicher benötigt. Nicht das gesamte Dokument muss im Speicher gehalten werden, nur die gültigen Definitionen, die aktuelle Seite und der aktuelle Absatz. Ein sehr wesentliches Merkmal von LaTeX ist auch, dass es keinen einfachen Zeilenumbruch durchführt, sondern immer komplette Absätze nach einstellbaren Parametern umbricht.

Wieviele und welche Hilfsdateien es gibt, hängt sehr maßgeblich von Dokument selbst bzw. den verwendeten Klassen und Paketen ab. Zwar kann LaTeX nur 16 Dateien gleichzeitig lesen und nur 16 Dateien gleichzeitig schreiben, die Gesamtzahl der (nacheinander geschriebenen oder gelesenen) Dateien ist jedoch unbegrenzt.

Der jeweils nächste LaTeX-Lauf arbeitet ganz genauso, wobei die Informationen einiger Hilfsdateien beim Übergang von der Präambel zum Hauptteil gelesen werden. Diese Hilfsdateien enthalten in dem Fall ebenfalls TeX-Anweisungen. Andere Hilfsdateien wie die für den Index, werden von externen Programmen zwischen den LaTeX-Läufen verarbeitet. Die externen Programme schreiben andere Hilfsdateien, die wiederum aus TeX-Anweisungen bestehen. Einige der Hilfsdateien werden auch erst bei bestimmten Aktionen beispielsweise durch die Anweisungen zur Ausgabe eines Verzeichnisses eingelesen.

Der internen Verarbeitung in TeX, also dem Compiler, der sowohl die LaTeX-Datei, als auch das Format verarbeitet, ist auf vielen Dutzend Seiten in The TeXbook dokumentiert. Dabei enthält TeX wie jeder Interpreter oder Compiler einen Scanner und einen Tokenize als Vorderteil (aka Mund). Daran knüpft sich bei TeX die eigentliche Satzmaschine an, die sozusagen den Bauch darstellt. Je nach TeX gibt es unterschiedliche Backends entweder für DVI-Dateien, PDF-Dateien oder erweiterte DVI-Dateien.

TeX liest Dateien immer sequentiell. Die Ausgabe erfolgt ebenfalls sequentiell. Allerdings erfolgt die Ausgabe einer Seite erst, wenn die Seite komplett aufgebaut ist. Weil Absätze immer im Ganzen umbrochen werden und Seitenumbrüche zwischen Absätzen auch verboten werden können, können dabei auch mehrere Seiten auf einmal ausgegeben werden und erst bei der Ausgabe selbst ist TeX bekannt, welche Teile welcher Absätze auf welchen Seiten ausgegeben werden. Man spricht deshalb von einer asynchronen Ausgabe. Da zum Zeitpunkt der Ausgabe die Absätze der Seite bereits fertig umbrochen sind, hat dies Auswirkungen auf jegliche Bezüge zur aktuellen Seitennummer. Diese benötigen ggf. einen Umweg über die bereits erwähnten Hilfsdateien uns stehen somit erst beim nächsten LaTeX-Lauf als Rückschau zur Verfügung. Davon ausgenommen sind lediglich Kopf und Fuß der Seite, die erst während des Seitenumbruchs erstellt werden. Daraus ergibt sich wiederum, dass Informationen, die vom Seiteninhalt in den Kopf gelangen sollen, über spezielle Mechanismen ausgetauscht werden müssen, um wirklich auf die richtige Seite zu gelangen.

Wichtig ist auch, dass LaTeX nicht von sich aus, so viele Läuft durchführt, bis ein Dokument einen unveränderlichen Zustand erreicht. Das wäre auch nicht wünschenswert, da ein Dokument nicht zwingend einen finalen Zustand erreichen muss. LaTeX gibt allerdings in der Log-Datei, die über auch über den Verlauf der Tätigkeit informiert, Hinweise, ob aus seiner Sicht ein weiterer LaTeX-Lauf erforderlich ist. Spezielle LaTeX-Editoren oder LaTeX-Build-Prozessoren verarbeiten solche Informationen üblicherweise.

Die Haupt-Hilfsdatei mit Endung .aux wird bei jedem LaTeX-Lauf beim Übergang zwischen Präambel und Hauptteil gelesen (wenn sie bereits existiert), dann neu zum Schreiben geöffnet und während des Hauptteils neu geschrieben. Ab Ende des Hauptteils wird sie geschlossen und erneut gelesen. Diese Datei wird außerdem zwischen den LaTeX-Läufen von biber oder bibtex verarbeitet, wenn eines dieser Programme verwendet wird. Die Indexrohdaten der Datei mit Endung .idx werden ggf. während des Hauptteils geschrieben, beispielsweise von makeindex zwischen den LaTeX-Läufen zu der Indexdatei mit Endung .ind verarbeitet, die dann zur Ausgabe des Index im Dokument wieder eingelesen wird. Viele Hilfsdateien wie die mit Endung .toc für das Inhaltsverzeichnis, .lof für das Abbildungsverzeichnis oder .lot für das Tabellenverzeichnis werden am Ende des Hauptteils beim Einlesen der aux-Datei erzeugt. Eingelesen werden sie durch die Anweisungen zur Ausgabe der entsprechenden Verzeichnisse im Hauptteil des Dokuments.

Vereinfacht als ASCII-Art dargestellt, wäre das also etwas wie:


tex-Datei
    |<----------------------------------------------------+
    |                                                     |
    |<------------------------------------------------+   |
    |                                                 |   |
    |<----------------------------------------+       |   |
    |                                         |       |   |
    |                       bib-Datei         |       |   |
    |                           |             |       |   |
    |                           |             |       |   |
    |<-----------+              |             |       |   |
    v            |              v             |       |   |
+-------+        |          +--------+        |       |   |
|       | --> aux-Datei --> | bibtex | --> bbl-Datei  |   |
|       |        |          +--------+                |   |
|       | <------+                                    |   |
|       |                                             |   |
|       | --> toc-Datei, lof-Datei, lot-Datei etc.----+   |
| LaTeX |                                                 |
|       |                   +-----------+                 |
|       | --> idx-Datei --> | makeindex | --> ind-Datei --+
|       |                   +-----------+
|       |
|       | --> log-Datei
+-------+
    |
    |
    v
pdf/dvi-Datei

Wird biber statt bibtex verwendet, kommen weitere Dateien hinzu. Ebenso kommen weitere Dateien und ggf. weitere Aufrufe von externen Programmen hinzu, falls zusätzliche Verzeichnisse beispielsweise für Listings, Namensindex, Glossar etc. verwendet werden. Wie die Grafik zeigt, entsteht also insbesondere bei jedem Lauf eine Ausgabedatei (pdf oder dvi). Bis zum finalen LaTeX-Lauf zeigt diese jedoch nur einen Zwischenstand an, in dem beispielsweise Querverweise oder Verzeichnisse noch nicht korrekt sind.

Als Literatur sei neben The TeXbook auch TeX by Topic erwähnt. In beiden Büchern ist neben den oben erwähnten drei Stufen der Verarbeitung auch noch sehr ausführlich die Stufe der Expansion erklärt, die noch vor der Satzmaschine stattfindet, und tatsächlich den Anwendern anfänglich oft die meisten Rätsel aufgibt.

Permanenter link

beantwortet 29 Sep '15, 09:17

saputello's gravatar image

saputello
18.4k22352

bearbeitet 01 Okt '15, 03:22

@saputello perfekt

(29 Sep '15, 09:23) PeterKoller

@PeterKoller: Noch lange nicht. Das ist nur ein ganz kleiner und noch sehr unscharfer Ausschnitt.

(29 Sep '15, 09:37) saputello

Spannendes Thema: Wie zitiert man eine TeXwelt-Antwort? :-)

(29 Sep '15, 09:41) Johannes

@saputello @Johannes könnte ich diese Grafik auf der Seite 4 verwenden? Was sagt ihr als Experten dazu? http://www.statistik.lmu.de/~carolin/texkurs/ss07kurs.pdf

(30 Sep '15, 05:41) PeterKoller

@PeterKoller: Die finde ich sehr irreführend. Das sieht so aus, also würde latex erst die Dateien log, aux und toc erzeugen und daraus dann eine dvi, während pdflatex direkt ein pdf erstellt. Das stimmt so nicht. Vielmehr besteht die Eingabe von latex und von pdflatex aus tex, aux, toc, lof, ind u. v. m. und die Ausgabe aus dvi/pdf, log, aux, toc, lof, idx u. v. m. dazwischen fummeln ggf. noch makeindex und bibtex/biber an einigen Dateien. Ich habe Dir mal einen Gegenvorschlag als ASCII-Art in meine Antwort eingefügt.

(30 Sep '15, 05:54) saputello

latex oder pdflatex sind unter Windows tatsächlich eigenständige Programme, weil es keine Softwarelinks kennt. Unter Linux sind beides nur Links auf pdftex. Nur wenn man explzit eine Quelldatei mit tex übetsetzt, wird das originale TeX verwendet, ansonsten immer pdftex,xetex oder luatex, egal, ob man ein TeX oder LaTeX-Dokument hat. Immer dann, wenn man ein la bei den Programmnamen hat, wird automatisch das Format LaTeX, welches in binärer Form voeliegt, eingebunden und dann das jeweilige ??TeX ausgeführt.

(30 Sep '15, 06:10) Herbert

@Herbert Wo ist das jetzt ein Widerspruch zu dem, was ich oben geschrieben habe?

(30 Sep '15, 06:18) saputello

@PeterKoller: Ich habe übrigens langsam den Eindruck, dass wir hier Deine Aufgabe für Dich erledigen sollen, also Dir Deine Arbeit machen. Das wäre nicht gut. Du solltest das schon verstanden haben. Schließlich musst Du während der Präsentation auch Fragen beantworten können. Wenn Dich nur der Datenfluss interessiert, also welche Dateien werden erzeugt und was passiert weiter damit: Das erklärt fast jede LaTeX-Einführung.

(30 Sep '15, 06:31) saputello

@saputello: Nirgends, mein Kommentar war eine Ergänzung!

(30 Sep '15, 06:47) Herbert

@Johannes wie jede Onlinequelle, würde ich sagen, in der URL Fragen- und Antwort-ID: http://texwelt.de/wissen/fragen/14506#14513

(01 Okt '15, 03:16) Clemens

Das war mehr ein vergiss nicht die Antwort zu zitieren verbunden mit einem: Wer ist author, nutzt man piblisher und ähnliches

(01 Okt '15, 12:07) Johannes
Ergebnis 5 von 11 Alle anzeigen

Hier kommt mal eine Zusammenstellung, welches "Programm" was macht. "links to" ist eigentlich nur korrekt für *nix, Windows kann das so nicht in dieser einfachen Form:

Open in Online-Editor
Program name     links to      comment (used option)
-----------------------------------------------------------------------------------
tex              tex           the original TeX, only dvi

etex             pdftex        dvi mode
eplain           pdftex        format eplain in dvi mode
latex            pdftex        format latex in dvi mode
pdftex           pdftex        pdf mode or dvi mode (-output-format dvi)
pdflatex         pdftex        format latex in pdf or dvi mode 
                               (-output-format dvi)

luatex           luatex        in pdf or dvi mode (-output-format dvi)
lualatex         luatex        format latex in pdf or dvi mode 
                               (-output-format dvi)
dviluatex        luatex        dvi mode
dvilualatex      luatex        format latex in dvi mode

xetex            xetex         in pdf or xdv mode (-no-pdf)
xelatex          xetex         format latex in pdf or xdv mode (-no-pdf)

texexec          pdftex/xetex  cont-en format in pdf or dvi mode (--dvi)
context          luatex        cont-en format in pdf mode

xmltex           pdftex        xml parser with dvi output
pdfxmltex        pdftex        xml parser in pdf or dvi mode 
                               (-output-format dvi)
jadetex          pdftex        Jade/OpenJade in dvi mode
pdfjadetex       pdftex        Jade/OpenJade in pdf or dvi mode 
                               (-output-format dvi)

mtex             pdftex        special format for polish in dvi mode          
pdfmtex          pdftex        special format for polish in pdf or dvi mode 
                               (-output-format dvi)
utf8mex          pdftex        special format for polish in dvi mode

cslatex          pdftex        special format for czech/slovak in dvi mode
pdfcslatex       pdftex        special format for czech/slovak in pdf 
                               or dvi mode (-output-format dvi)
csplain          pdftex        special plain format for czech/slovak in dvi mode
pdfcsplain       pdftex        special plain format for czech/slovak in pdf 
                               or dvi mode (-output-format dvi)

aleph            aleph         TeX with unicode for multiligual in dvi mode
lamed            aleph         aleph with format latex in dvi mode

amstex           pdftex        special format in pdf or dvi mode 
                               (-output-format dvi)

texsis           pdftex        special format for physic papers in pdf 
                               or dvi mode (-output-format dvi)
Permanenter link

beantwortet 30 Sep '15, 06:16

Herbert's gravatar image

Herbert
5.0k34

bearbeitet 30 Sep '15, 06:19

Ob Link oder Kopie ist egal. Man kann auch unter Unix eine Kopie von pdfetex in pdflatex umbenennen und erhält damit ein richtiges pdflatex. Das eigentlich Programm ermitteln (sowohl unter *nix als auch Windows) am Anfang, wie es heißt (arg[0] in C), und bestimmt daraus, welches Format es laden muss. Es gibt auch noch die Format-Kommentar-Erweiterung (%& format). Damit kann man zwar pdfetex aufrufen aber trotzdem das LaTeX-Format laden. All das ist aber eine Frage der Implementierung und nicht Bestandteil der TeX-Spezifikation.

(30 Sep '15, 06:25) saputello

Nein, das ist für das Verständnis nicht egal! Durch die Links wird es meiner Meinung nach viel klarer, was es heißt, wenn man sagt: "LaTeX := TeX + Format LaTeX"

(30 Sep '15, 06:50) Herbert

Es ist für die Funktion egal. Wie gesagt: Man kann auch unter *nix mit Kopien oder Hardlinks statt Softlinks arbeiten. Softlinks sind da kein Muss.

(30 Sep '15, 07:48) saputello

Natürlich ist es egal! Sonst hätte ich ja unter Windows andere Ergebnisse. Es ist aber nicht egal, wenn ich jemandem erklären will, was man sich so unter TeX, LaTeX, ConTeXt, ... vorzustellen hat. Und nur darum geht es mir!

(30 Sep '15, 07:54) Herbert

Aber wichtig ist doch, welche Engine es ist und nicht, ob die Engine kopiert und umbenannt, hart verlinkt (und umbenannt) oder soft verlinkt (und umbenannt) wird. Wichtig ist, dass der Dateiname entscheidend dafür ist, welches Format automatisch geladen wird, während das eigentlich Programm immer das gleiche ist.

(30 Sep '15, 09:56) saputello

ich hoffe ich habe keine Lawine losgetreten ... Danke für all die interessanten Antworten @Herbert @saputello @Johannes

(30 Sep '15, 10:21) PeterKoller

@PeterKoller: Keine Sorge. Wir können ggf. auch ertragen, wenn wir mal nicht einer Meinung sind. Letztlich ist das eine didaktische Frage, bei der es auch auf die konkreten Umstände ankommt. Unterschiedliche Ansätze vertragen oder benötigen ggf. auch unterschiedliche Sichtweisen oder umgekehrt. ;-)

(30 Sep '15, 10:48) saputello

@saputello: Genau das will ja sagen: Der Linux-Nutzer kann sofort sehen, welche Engine genutzt wird (wenn er ins Dateiverzeichnis sieht), der Windows-Nutzer nicht unbedingt.

(30 Sep '15, 11:12) Herbert

@Herbert: Das ist in der Tat ein Argument, setzt aber voraus, dass der Linux-Nutzer ein wenig Ahnung hat. Da inzwischen auch immer mehr Linux-Anwender mit der Konsole auf dem Kriegsfuß stehen, muss man denen das ggf. auch noch erklären.

(30 Sep '15, 11:16) saputello
Ergebnis 5 von 9 Alle anzeigen

Das ist schwer zu beantworten, wie genau willst du es beschrieben haben? Im Grunde gibt es mehrere Stufen und jede kann sehr ausführlich besprochen/beschrieben werden. Du hast als erstes die tex-Dateien die dein Dokument beschreiben beim ersten Durchlauf werden die Verweise (label, section ref footnode etc.) aus dem Dokument in die aux-Datei(en) geschrieben BibTex liest die aux-Datei und erstellt die bib-Datei(en) die Referenzen werden dann in die bbl-Datei geschrieben. Im Zweiten Durchlauf werden die aux und text-Dateien wieder gelesen und zusammen geführt (wenn man es so nennen möchte) um die Querverweise zu verbinden und die Zieldatei zu schreiben. Das ist aber jetzt nur eine sehr grobe Beschreibung jeden einzelnen Schritt bzw. die Erstellung der Dateien kann man ausführlicher beschreiben.

Permanenter link

beantwortet 29 Sep '15, 08:30

loro's gravatar image

loro
313

...klingt recht umfangreich. Ich dachte dafür gibt es irgendwo eine anschauliche Grafik die das auch optisch beschreibt. Am liebsten wäre mir eine genaue Beschreibung da es für mich sonst zu abstrakt wird. @loro

(29 Sep '15, 09:15) PeterKoller
1

bibtex schreibt keine bib-Dateien.

(29 Sep '15, 09:43) Johannes
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×17
×10

Frage gestellt: 29 Sep '15, 07:56

Frage wurde angeschaut: 1,869 Mal

Zuletzt aktualisiert: 01 Okt '15, 12:07