> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/de/ausfuhrliche-artikel/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md).

# Die zwei Modi von TeX-Engines: INI-Modus und Produktionsmodus

Alle TeX-Engines haben zwei „Modi“ des Betriebs: einen „INI“-Modus und einen „Produktionsmodus“ — Letzterer ist einfach der Standardmodus, der für die Herstellung gesetzten Materials verwendet wird. Der INI-Modus ist recht anders, und man muss eine Befehlszeilenoption verwenden, um einen TeX-Engine in den INI-Modus zu versetzen. Wie das geht, sieht man durch Aufruf von `--help` in der Kommandozeile. Wenn man zum Beispiel bei LuaTeX

`luatex --help`

eingibt, sieht man viele von dieser Engine unterstützte Befehlszeilenoptionen:

```
Verwendung: luatex --lua=DATEI [OPTION]... [TEXNAME[.tex]] [BEFEHLE]
   oder: luatex --lua=DATEI [OPTION]... \ERSTE-ZEILE
   oder: luatex --lua=DATEI [OPTION]... &FMT ARGUMENTE
  Führt LuaTeX auf TEXNAME aus und erzeugt dabei normalerweise TEXNAME.pdf.
  Alle verbleibenden BEFEHLE werden als LuaTeX-Eingabe verarbeitet, nachdem TEXNAME gelesen wurde.

  Wenn das erste Nicht-Optionsargument mit einem Backslash beginnt,
  interpretiert luatex alle Nicht-Optionsargumente als Eingabezeile.

  Wenn das erste Nicht-Optionsargument mit einem & beginnt, wird alternativ
  das nächste Wort als zu lesendes FMT genommen und setzt alles andere außer Kraft. Alle
  verbleibenden Argumente werden wie oben verarbeitet.

  Wenn keine Argumente oder Optionen angegeben sind, wird zur Eingabe aufgefordert.

  Die folgenden regulären Optionen werden verstanden:

   --credits                     Credits anzeigen und beenden
   --debug-format                Format-Debugging aktivieren
   --draftmode                   Entwurfsmodus einschalten (erzeugt keine Ausgabe-PDF)
   --[no-]file-line-error        Meldungen im Stil Datei:Zeile:Fehler deaktivieren/aktivieren
   --[no-]file-line-error-style  Alias von --[no-]file-line-error
   --fmt=FORMAT                  die Formatdatei FORMAT laden
   --halt-on-error               die Verarbeitung beim ersten Fehler anhalten
   --help                        Hilfe anzeigen und beenden
   --ini                         imiluatex sein, zum Ausgeben von Formaten
   --interaction=STRING          Interaktionsmodus festlegen (STRING=batchmode/nonstopmode/scrollmode/errorstopmode)
   --jobname=STRING              den Jobnamen auf STRING setzen
   --kpathsea-debug=NUMBER       Debug-Flags für die Pfadsuche entsprechend den Bits von NUMBER setzen
   --lua=FILE                    ein Lua-Initialisierungsskript laden und ausführen
   --[no-]mktex=FMT              Erzeugung von mktexFMT deaktivieren/aktivieren (FMT=tex/tfm)
   --nosocket                    die Lua-Socket-Bibliothek deaktivieren
   --output-comment=STRING       STRING für den Kommentar in der DVI-Datei statt des Datums verwenden (keine Wirkung für PDF)
   --output-directory=DIR        ein vorhandenes DIR als Verzeichnis zum Schreiben von Dateien verwenden
   --output-format=FORMAT        FORMAT für die Ausgabe des Jobs verwenden; FORMAT ist 'dvi' oder 'pdf'
   --progname=STRING             den Programmnamen auf STRING setzen
   --recorder                    Dateinamen-Protokollierung aktivieren
   --safer                       leicht ausnutzbare Lua-Befehle deaktivieren
   --[no-]shell-escape           Systembefehle deaktivieren/aktivieren
   --shell-restricted            Systembefehle auf eine in texmf.cnf angegebene Befehlsliste beschränken
   --synctex=NUMBER              synctex aktivieren (siehe man synctex)
   --utc                         Initialisierungszeit auf UTC setzen
   --version                     Version anzeigen und beenden

Alternative Verhaltensmodelle lassen sich mit speziellen Schaltern erreichen

  --luaonly                      eine Lua-Datei ausführen und dann beenden
  --luaconly                     eine Lua-Datei in Bytecode kompilieren und dann beenden
  --luahashchars                 die Bits, die vom aktuellen Lua-Interpreter für String-Hashing verwendet werden

Weitere Informationen über den Startvorgang finden Sie im Referenzhandbuch.

Fehlerberichte per E-Mail an dev-luatex@ntg.nl senden.
```

Unter diesen vielen Optionen gibt es zwei, die hier relevant sind:

```
--ini              imiluatex sein, zum Ausgeben von Formaten
--fmt=FORMAT       die Formatdatei FORMAT laden
```

Hier bezeichnet LuaTeX seinen INI-Modus mit dem Namen `iniluatex`. Was bedeutet also diese `iniluatex` (INI-Modus) eigentlich? Ein kleiner Hinweis ist die zweite oben gezeigte Befehlszeilenoption:

```
--fmt=FORMAT       die Formatdatei FORMAT laden
```

### INI-Modus? Formatdateien? Ich bin verwirrt...

Makropakete wie LaTeX sind große Sammlungen komplexer Makros: Das Laden und Verarbeiten des Rohtexts aller enthaltenen Dateien verursacht durchaus einen gewissen Zeit- und Rechenaufwand; zum Beispiel:

* Lesen und Durchsuchen von Zehntausenden einzelner Textzeichen;
* Analysieren, Verarbeiten und Speichern Hunderter von Makros/Befehlen;
* Initialisieren interner Tabellen für Schriftarten und Silbentrenndaten.

All das muss geschehen, und die Ergebnisse müssen im Speicher abgelegt werden, bevor die TeX-Engine überhaupt bereit ist, ein TeX-Dokument eines Benutzers zu verarbeiten, das die von beispielsweise den Makrosammlungen Plain TeX oder LaTeX bereitgestellten Makros verwendet. Man kann sich das als den Bootstrapping-Prozess einer TeX-Engine vorstellen: wesentliche Vorbereitungen, bevor sie bereit ist, Ihr Dokument zu verarbeiten.

Vielleicht als Spiegel der Technik ihrer Zeit bieten TeX-Engines eine Abkürzung für die Verarbeitung von Textdateien voller Makrosammlungen: das Laden vorverarbeiteter binärer (*Format*)-Dateien.

Wenn eine TeX-Engine in den INI-Modus versetzt wird, besteht ihre Aufgabe nicht darin, Satz zu erzeugen, sondern stattdessen:

1. alle primitiven Befehle zu laden und zu initialisieren sowie das absolut Notwendigste an Catcodes (und anderen Codes) einzurichten, damit die TeX-Engine mit der weiteren Verarbeitung beginnen kann.
2. Sobald (1) erledigt ist, lädt und verarbeitet sie dann eine vom Benutzer bereitgestellte Makrosammlung, die als „Format“ bezeichnet wird (z. B. Plain TeX oder die LaTeX-Makrosammlung).
3. Nachdem sie (1) und (2) erfolgreich abgeschlossen hat, führt TeX einen „binären Gehirndump“ von allem aus, was geladen und in ihrem Speicher verarbeitet wurde, und schreibt es in eine binäre *Format* Datei (z. B.  `lualatex.fmt`).

Eine Formatdatei ist eine Binärdatei, die eine Darstellung von TeXs „Geisteszustand“ speichert, nachdem zahlreiche interne Datentabellen (einschließlich der Primitiven) initialisiert und alle in der vom Benutzer gelieferten Makrosammlung vorhandenen Makrobefehle verarbeitet wurden. TeX-Engines tun dies, weil es schneller ist, eine „vorkompilierte“ Binärdatei zu laden, statt die Rohmakros jedes Mal erneut zu verarbeiten, wenn man eine TeX-Engine mit beispielsweise Knuths Plain TeX oder dem LaTeX-Makropaket — oder überhaupt jedem als „Format“ entworfenen Makropaket — ausführen möchte.

Wenn Sie zum Beispiel ein Dokument verarbeiten, das mit LaTeX gesetzt werden soll, liest die TeX-Engine nicht alle Kernmakros von LaTeX erneut ein (verarbeitet sie nicht erneut), sondern lädt stattdessen eine Binärdatei, die zum Beispiel `lualatex.fmt`. Die internen Details von Formatdateien sind spezifisch für jede TeX-Engine und jede Version des Makropakets, das zur Erzeugung einer `.fmt` -Datei verwendet wird. Wenn Sie zum Beispiel Ihre LaTeX-Distribution aktualisieren (d. h. den Kern von LaTeX selbst, nicht Zusatzpakete), müssen Sie möglicherweise auch eine neue `.fmt` Datei erzeugen.

### Beispiel

Innerhalb der LaTeX-Quellcodedistribution finden Sie Dateien mit einer `.ini` -Erweiterung, zum Beispiel lualatex.ini, die zum Erzeugen von `.fmt` Dateien verwendet werden — diese `.ini` Dateien enthalten normalerweise enginespezifischen Initialisierungscode und laden dann die zentralen LaTeX-Makrodaten ein. Wenn Sie LuaTeX beispielsweise mit der folgenden Befehlszeile ausführen:

`luatex --ini lualatex.ini`

schreibt LuaTeX eine Datei mit dem Namen `lualatex.fmt`

Zum Zeitpunkt der Abfassung `lualatex.ini` enthält den folgenden Code:

```
% tex-ini-files 2016-04-15: lualatex.ini
% Ursprünglich 2008 von Karl Berry geschrieben. Gemeinfrei.

\input luatexconfig.tex

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  % Jobnamen-Zitierung vor latex.ltx einrichten
  % Web2c pdfTeX/XeTeX setzen Jobnamen, die Leerzeichen enthalten, in Anführungszeichen, aber LuaTeX
  % tut dies auf der Engine-Ebene nicht. Das Verhalten kann mit
  % einem Callback geändert werden. Ursprünglich wurde dieser Code über lualatexquotejobname.tex geladen
  % aber das erforderte einen Hack um latex.ltx herum: Das Verhalten wurde geändert
  % damit der Callback-Weg direkt verwendet werden kann.
  \global\everyjob{\directlua{require("lualatexquotejobname.lua")}}
\endgroup

\input latex.ltx
```

`lualatex.ini` beginnt damit, eine Datei mit dem Namen `luatexconfig.tex` einzulesen, die eine gewisse LuaTeX-spezifische Initialisierung vornimmt — wie man es von einer `.ini` (Initialisierungs-)Datei erwarten würde! In der letzten Zeile wird `latex.ltx` eingelesen, wodurch LuaTeX die zentralen LaTeX-Makros liest und verarbeitet.

Nachdem LuaTeX die Verarbeitung von `lualatex.ini` abgeschlossen hat, schreibt es die binäre *Formatdatei* mit dem Namen `lualatex.fmt`. Sobald der LaTeX-Code in ein binäres Format kompiliert wurde, kann LuaTeX (oder jede andere TeX-Engine) die `.fmt` Datei sehr schnell lesen, um seine internen Tabellen mit LaTeX-Makrodefinitionen, Schriftarten und so weiter zu bootstrappen und zu initialisieren — es muss nicht den langwierigen Prozess des Lesens und Verarbeitens der vielen Tausend Zeichen durchlaufen, die im LaTeX-Makropaket enthalten sind.

Sie können LuaTeX nun anweisen, Ihr LaTeX-Dokument zu setzen `yourfile.tex` (unter Verwendung der `lualatex` Formatdatei) mit dem folgenden Befehl:

```
luatex --fmt=lualatex yourfile.tex
```

`.fmt` Dateien sind normalerweise spezifisch für eine bestimmte Engine: z. B. LuaTeXs `.fmt` Dateien sind im Allgemeinen nicht portierbar für die Verwendung mit einer anderen TeX-Engine: z. B. pdfTeX oder XeTeX. Wenn außerdem die LuaTeX-Ausführungsdatei mit neuen Funktionen aktualisiert wird, ist es durchaus möglich, dass eine `.fmt` Datei, die mit einer älteren Version von LuaTeX erstellt wurde, mit der neuen Engine nicht funktioniert: Sie müssten die `.fmt` -Datei.

Wenn Sie versuchen, eine inkompatible `.fmt` Datei zu verwenden, dann wird eine TeX-Engine sie nicht laden können und mit dem Fehler antworten:

```
Schwerwiegender Fehler in der Formatdatei; ich bin ratlos
```

Ebenso müssen Sie, wenn die zentralen LaTeX-Makros aktualisiert werden, möglicherweise auch die `lualatex.fmt` Datei erzeugen.

`.fmt` Dateien können aus jedem geeigneten Makropaket erstellt werden — nicht nur aus LaTeX; zum Beispiel können auch Knuths ursprüngliche und viel einfachere „Plain“-TeX-Makros verarbeitet werden, um eine `.fmt` Datei zu erzeugen. Sie könnten, wenn Sie die Zeit hätten, Ihre eigene Makrosammlung schreiben und für dieses Paket eine Formatdatei erzeugen — beachten Sie, dass Sie irgendwo in Ihrem Makropaket den primitiven Befehl `\dump` aufrufen müssten, der die TeX-Engine anweist, ihren „binären Gehirndump“ auszuführen und die `.fmt` -Datei.

Allerdings müssen sich die allermeisten Benutzer nie um den „INI“-Modus von TeX-Engines oder um den Prozess der Erzeugung von `.fmt` Dateien kümmern: Overleaf und die TeX-Live-Distribution schirmen Sie vor diesen Details ab — es sei denn, Sie müssen danach suchen.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/de/ausfuhrliche-artikel/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
