> 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/nl/diepgaande-artikelen/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md).

# De twee modi van TeX-engines: INI-modus en productiemodus

Alle TeX-engines hebben twee "modi" van werking: een "INI"-modus en een "productie"-modus—de laatste is gewoon de standaardmodus die wordt gebruikt voor de productie van opgemaakte tekst. INI-modus is nogal anders en je moet een opdrachtregeloptie gebruiken om een TeX-engine in INI-modus te zetten. Je kunt zien hoe dat moet door `--help` op de opdrachtregel te geven. Bijvoorbeeld, met LuaTeX, als je doet

`luatex --help`

zie je veel opdrachtregelopties die door die engine worden ondersteund:

```
Gebruik: luatex --lua=FILE [OPTIE]... [TEXNAAM[.tex]] [COMMANDO'S]
   of: luatex --lua=FILE [OPTIE]... \EERSTE-REGEL
   of: luatex --lua=FILE [OPTIE]... &FMT ARGUMENTEN
  Voer LuaTeX uit op TEXNAME, waarbij gewoonlijk TEXNAME.pdf wordt aangemaakt.
  Alle overgebleven COMMANDO'S worden verwerkt als luatex-invoer, nadat TEXNAME is gelezen.

  Als het eerste argument zonder optie begint met een backslash,
  interpreteert luatex alle argumenten zonder optie als een invoerregel.

  Als het eerste argument zonder optie begint met een &,
  wordt het volgende woord beschouwd als de te lezen FMT, waarbij al het andere wordt overschreven. Alle
  overgebleven argumenten worden verwerkt zoals hierboven.

  Als er geen argumenten of opties zijn opgegeven, vraag dan om invoer.

  De volgende gewone opties worden begrepen:

   --credits                     toon credits en sluit af
   --debug-format                schakel formaat-debugging in
   --draftmode                   schakel conceptmodus in (genereert geen uitvoer-PDF)
   --[no-]file-line-error        schakel foutenmeldingen in de stijl file:line:error uit/in
   --[no-]file-line-error-style  aliassen van --[no-]file-line-error
   --fmt=FORMAT                  laad het formaatbestand FORMAT
   --halt-on-error               stop met verwerken bij de eerste fout
   --help                        toon hulp en sluit af
   --ini                         wees iniluatex, voor het wegschrijven van formaten
   --interaction=STRING          stel de interactiemodus in (STRING=batchmode/nonstopmode/scrollmode/errorstopmode)
   --jobname=STRING              stel de jobnaam in op STRING
   --kpathsea-debug=NUMBER       stel debugvlaggen voor padzoeken in volgens de bits van NUMBER
   --lua=FILE                    laad en voer een lua-initialisatiescript uit
   --[no-]mktex=FMT              schakel het genereren van mktexFMT uit/in (FMT=tex/tfm)
   --nosocket                    schakel de Lua-socketbibliotheek uit
   --output-comment=STRING       gebruik STRING als opmerking in het DVI-bestand in plaats van de datum (geen effect voor PDF)
   --output-directory=DIR        gebruik bestaande DIR als map om bestanden in weg te schrijven
   --output-format=FORMAT        gebruik FORMAT voor uitvoer van de job; FORMAT is 'dvi' of 'pdf'
   --progname=STRING             stel de programmanaam in op STRING
   --recorder                    schakel bestandsnaamregistratie in
   --safer                       schakel gemakkelijk misbruikbare lua-opdrachten uit
   --[no-]shell-escape           schakel systeemcommando's uit/in
   --shell-restricted            beperk systeemcommando's tot een lijst van commando's in texmf.cnf
   --synctex=NUMBER              schakel synctex in (zie man synctex)
   --utc                         initialisatietijd naar UTC
   --version                     toon versie en sluit af

Alternatieve gedragsmodellen kunnen worden verkregen met speciale schakelaars

  --luaonly                      voer een lua-bestand uit en sluit dan af
  --luaconly                     byte-compileer een lua-bestand en sluit dan af
  --luahashchars                 de bits die door de huidige Lua-interpreter worden gebruikt voor het hashen van strings

Zie de referentiehandleiding voor meer informatie over het opstartproces.

E-mail foutrapporten naar dev-luatex@ntg.nl.
```

Onder al die vele opties zijn er twee die hier van belang zijn:

```
--ini              wees iniluatex, voor het wegschrijven van formaten
--fmt=FORMAT       laad het formaatbestand FORMAT
```

Hier verwijst LuaTeX naar zijn INI-modus met de naam `iniluatex`. Dus wat betekent dit `iniluatex` (INI-modus) nu eigenlijk? Een kleine aanwijzing is de tweede opdrachtregeloptie die hierboven wordt getoond:

```
--fmt=FORMAT       laad het formaatbestand FORMAT
```

### INI-modus? Formaatbestanden? Ik ben in de war...

Macro-pakketten, zoals LaTeX, zijn grote verzamelingen van complexe macro's: het laden en verwerken van de ruwe tekst van alle samenstellende bestanden brengt inderdaad een zekere tijds- en rekenoverhead met zich mee; bijvoorbeeld:

* het lezen en scannen van tienduizenden afzonderlijke tekens tekst;
* het ontleden, verwerken en opslaan van honderden macro's/commando's;
* het initialiseren van interne tabellen met lettertypen en afbreekgegevens.

Dit alles moet gebeuren, en de resultaten moeten in het geheugen worden opgeslagen, voordat de TeX-engine daadwerkelijk klaar is om een TeX-document van een gebruiker te verwerken dat gebruikmaakt van de macro's die bijvoorbeeld worden geleverd door de Plain TeX- of LaTeX-macroverzamelingen. Je kunt dit zien als het opstartproces van een TeX-engine: essentiële voorbereidingen voordat hij klaar is om je document te verwerken.

Misschien als weerspiegeling van de technologie van zijn tijd bieden TeX-engines een snelkoppeling voor het verwerken van tekstbestanden vol macroverzamelingen: het laden van vooraf verwerkte binaire (*formaat*)-bestanden.

Wanneer een TeX-engine in INI-modus wordt gezet, is zijn taak niet het zetten van tekst, maar in plaats daarvan:

1. al zijn primitieve commando's laden en initialiseren plus het minimale aantal catcodes (en andere codes) instellen, zodat de TeX-engine verdere verwerking kan starten.
2. zodra (1) is voltooid, zal het vervolgens een door de gebruiker geleverde macroverzameling laden en verwerken, aangeduid als een "formaat" (bijv. Plain TeX of de LaTeX-macroverzameling).
3. nadat het (1) en (2) succesvol heeft voltooid, zal TeX een "binaire hersenafdruk" maken van alles wat in het geheugen is geladen en verwerkt en dit wegschrijven naar een binair *formaat* bestand (bijv. `lualatex.fmt`).

Een formaatbestand is een binair bestand dat een weergave opslaat van TeX' "toestand" nadat talloze interne gegevenstabellen (inclusief de primitieve commando's) zijn geïnitialiseerd en alle macrocommando's in de door de gebruiker geleverde macroverzameling zijn verwerkt. TeX-engines doen dit omdat het sneller is om een vooraf gecompileerd binair bestand te laden dan de ruwe macro's telkens opnieuw te verwerken wanneer je een TeX-engine wilt uitvoeren met bijvoorbeeld Knuth's Plain TeX of het LaTeX-macropakket—of inderdaad elk macropakket dat is ontworpen als een "formaat".

Wanneer je een document verwerkt dat door LaTeX moet worden gezet, leest de TeX-engine bijvoorbeeld niet opnieuw alle kernmacro's van LaTeX, maar leest in plaats daarvan een binair bestand met bijvoorbeeld de naam `lualatex.fmt`. De interne details van formaatbestanden zijn specifiek voor elke TeX-engine en elke versie van het macropakket dat wordt gebruikt om een `.fmt` bestand te genereren. Als je bijvoorbeeld je LaTeX-distributie bijwerkt (d.w\.z. de kern van LaTeX zelf, niet aanvullende pakketten), dan moet je misschien ook een nieuw `.fmt` bestand genereren.

### Voorbeeld

Binnen de LaTeX-broncodedistributie vind je bestanden met een `.ini` extensie, bijvoorbeeld lualatex.ini, die worden gebruikt om `.fmt` bestanden te genereren—die `.ini` bestanden bevatten doorgaans engine-specifieke initialisatiecode en gaan vervolgens over tot het inlezen van de kern-LaTeX-macrobestanden. Als je bijvoorbeeld LuaTeX uitvoert met de volgende opdrachtregel:

`luatex --ini lualatex.ini`

zal LuaTeX een bestand wegschrijven met de naam `lualatex.fmt`

Op het moment van schrijven, `lualatex.ini` bevat de volgende code:

```
% tex-ini-files 2016-04-15: lualatex.ini
% Oorspronkelijk geschreven in 2008 door Karl Berry. Publiek domein.

\input luatexconfig.tex

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  % Stel naamquotering voor de job in vóór latex.ltx
  % Web2c pdfTeX/XeTeX citeren jobnamen met spaties, maar LuaTeX doet
  % dit niet op engine-niveau. Het gedrag kan worden gewijzigd met
  % een callback. Oorspronkelijk werd deze code geladen via lualatexquotejobname.tex
  % maar daarvoor was een hack rond latex.ltx nodig: het gedrag is aangepast
  % zodat de callback-route rechtstreeks kan worden gebruikt.
  \global\everyjob{\directlua{require("lualatexquotejobname.lua")}}
\endgroup

\input latex.ltx
```

`lualatex.ini` begint met het inlezen van een bestand met de naam `luatexconfig.tex` dat enige LuaTeX-specifieke initialisatie doet—zoals je zou verwachten van een `.ini` (initialisatie)bestand! Op de laatste regel leest het `latex.ltx` in, wat LuaTeX ertoe brengt de kern-LaTeX-macro's te lezen en te verwerken.

Nadat LuaTeX klaar is met het verwerken van `lualatex.ini` zal het de binaire *formaatbestand* wegschrijven met de naam `lualatex.fmt`. Zodra de LaTeX-code is gecompileerd tot een binair formaat, kan LuaTeX (of elke andere TeX-engine) het `.fmt` bestand heel snel lezen om zijn interne tabellen met LaTeX-macrodefinities, lettertypen enzovoort te initialiseren—het hoeft niet het langdurige proces te doorlopen van het lezen en verwerken van de vele duizenden tekens die in het LaTeX-macropakket zitten.

Je kunt LuaTeX nu instrueren om je LaTeX-document op te maken `yourfile.tex` (met het `lualatex` formaatbestand) door het commando te geven:

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

`.fmt` bestanden zijn meestal specifiek voor een bepaalde engine: bijv. LuaTeX's `.fmt` bestanden zijn doorgaans niet overdraagbaar voor gebruik met een andere TeX-engine: bijv. pdfTeX of XeTeX. Bovendien, als het uitvoerbare bestand van LuaTeX wordt bijgewerkt met nieuwe functies, is het heel goed mogelijk dat een `.fmt` bestand dat met een oudere versie van LuaTeX is voorbereid, niet zou werken met de nieuwe engine: je zou het `.fmt` bestand.

Als je probeert een incompatibel `.fmt` bestand te gebruiken, zal een TeX-engine het niet kunnen laden en reageren met de foutmelding:

```
Fatale fout in formaatbestand; ik ben onthand
```

Evenzo, als de kern-LaTeX-macro's worden bijgewerkt, moet je mogelijk ook de `lualatex.fmt` bestand genereren.

`.fmt` bestanden kunnen worden voorbereid uit elk geschikt macropakket—not alleen LaTeX; bijvoorbeeld de oorspronkelijke, en veel eenvoudigere, "Plain" TeX-macro's kunnen ook worden verwerkt om een `.fmt` bestand te genereren. Je zou, als je de tijd had, je eigen macroverzameling kunnen schrijven en een formaatbestand voor dat pakket kunnen produceren—merk op dat je ergens in je macropakket het primitieve commando `\dump` zou moeten aanroepen, dat de TeX-engine vertelt zijn "binaire hersenafdruk" te maken en het `.fmt` bestand.

De overgrote meerderheid van de gebruikers hoeft zich echter nooit zorgen te maken over de "INI"-modus van TeX-engines, of over het genereren van `.fmt` bestanden: Overleaf en de TeX Live-distributie schermen je af van die details—tenzij je ze juist moet opzoeken.


---

# 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/nl/diepgaande-artikelen/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.
