> 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/fr/articles-approfondis/50-the-two-modes-of-tex-engines-ini-mode-and-production-mode.md).

# Les deux modes des moteurs TeX : mode INI et mode production

Tous les moteurs TeX ont deux « modes » de fonctionnement : un mode « INI » et un mode « production » — ce dernier n’est que le mode par défaut (standard) utilisé pour la production de documents composés. Le mode INI est assez différent et vous devez utiliser une option en ligne de commande pour placer un moteur TeX en mode INI. Vous pouvez voir comment faire en exécutant `--help` sur la ligne de commande. Par exemple, avec LuaTeX, si vous faites

`luatex --help`

vous verrez de nombreuses options en ligne de commande prises en charge par ce moteur :

```
Utilisation : luatex --lua=FILE [OPTION]... [TEXNAME[.tex]] [COMMANDS]
   ou : luatex --lua=FILE [OPTION]... \\FIRST-LINE
   ou : luatex --lua=FILE [OPTION]... &FMT ARGS
  Exécute LuaTeX sur TEXNAME, en créant généralement TEXNAME.pdf.
  Toutes les COMMANDS restantes sont traitées comme entrée de luatex, après la lecture de TEXNAME.

  Sinon, si le premier argument non option commence par une barre oblique inverse,
  luatex interprète tous les arguments non option comme une ligne d'entrée.

  Sinon, si le premier argument non option commence par un &,
  le mot suivant est pris comme le FMT à lire, en primant sur tout le reste. Tout
  les arguments restants sont traités comme ci-dessus.

  Si aucun argument ni aucune option ne sont spécifiés, demande une entrée.

  Les options standards suivantes sont reconnues :

   --credits                     afficher les crédits et quitter
   --debug-format                activer le débogage du format
   --draftmode                   activer le mode brouillon (ne génère aucune sortie PDF)
   --[no-]file-line-error        désactiver/activer les messages au format file:line:error
   --[no-]file-line-error-style  alias de --[no-]file-line-error
   --fmt=FORMAT                  charger le fichier de format FORMAT
   --halt-on-error               arrêter le traitement à la première erreur
   --help                        afficher l'aide et quitter
   --ini                         passer en iniluatex, pour générer des formats
   --interaction=STRING          définir le mode d'interaction (STRING=batchmode/nonstopmode/scrollmode/errorstopmode)
   --jobname=STRING              définir le nom du travail sur STRING
   --kpathsea-debug=NUMBER       définir les indicateurs de débogage de recherche de chemins selon les bits de NUMBER
   --lua=FILE                    charger et exécuter un script d'initialisation lua
   --[no-]mktex=FMT              désactiver/activer la génération de mktexFMT (FMT=tex/tfm)
   --nosocket                    désactiver la bibliothèque lua socket
   --output-comment=STRING       utiliser STRING pour le commentaire du fichier DVI au lieu de la date (sans effet pour PDF)
   --output-directory=DIR        utiliser DIR existant comme répertoire d'écriture des fichiers
   --output-format=FORMAT        utiliser FORMAT pour la sortie du travail ; FORMAT est 'dvi' ou 'pdf'
   --progname=STRING             définir le nom du programme sur STRING
   --recorder                    activer l'enregistreur de noms de fichiers
   --safer                       désactiver les commandes lua facilement exploitables
   --[no-]shell-escape           désactiver/activer les commandes système
   --shell-restricted            restreindre les commandes système à une liste de commandes donnée dans texmf.cnf
   --synctex=NUMBER              activer synctex (voir man synctex)
   --utc                         initialiser l'heure en UTC
   --version                     afficher la version et quitter

Des modèles de comportement alternatifs peuvent être obtenus à l'aide de commutateurs spéciaux

  --luaonly                      exécuter un fichier lua, puis quitter
  --luaconly                     compiler en bytecode un fichier lua, puis quitter
  --luahashchars                 les bits utilisés par l'interpréteur Lua actuel pour le hachage des chaînes

Consultez le manuel de référence pour plus d'informations sur le processus de démarrage.

Envoyez les rapports de bogues à dev-luatex@ntg.nl.
```

Parmi ces nombreuses options, deux nous intéressent ici :

```
--ini              passer en iniluatex, pour générer des formats
--fmt=FORMAT       charger le fichier de format FORMAT
```

Ici, LuaTeX désigne son mode INI sous le nom de `iniluatex`. Alors que signifie donc ce `iniluatex` (mode INI) en fait ? Un petit indice se trouve dans la deuxième option en ligne de commande affichée ci-dessus :

```
--fmt=FORMAT       charger le fichier de format FORMAT
```

### Mode INI ? Fichiers de format ? Je suis perdu...

Les paquets de macros, tels que LaTeX, sont de vastes ensembles de macros complexes : charger et traiter le texte brut de tous les fichiers constitutifs entraîne un certain coût en temps et en calcul ; par exemple :

* lecture et balayage de dizaines de milliers de caractères de texte individuels ;
* analyse, traitement et stockage de centaines de macros/commandes ;
* initialisation des tables internes des polices et des données de césure.

Tout cela doit se produire, et les résultats être stockés en mémoire, avant que le moteur TeX soit réellement prêt à traiter un document TeX de l'utilisateur qui fait appel aux macros fournies par, par exemple, les collections de macros Plain TeX ou LaTeX. Vous pouvez voir cela comme le processus d'amorçage d'un moteur TeX : des préparatifs essentiels avant qu'il soit prêt à traiter votre document.

Peut-être en écho à la technologie de l'époque, les moteurs TeX offrent un raccourci pour le traitement de fichiers texte remplis de collections de macros : le chargement de fichiers binaires prétraités (*format*) fichiers.

Lorsqu'il est placé en mode INI, la tâche d'un moteur TeX n'est pas de faire de la composition, mais plutôt de :

1. charger et initialiser toutes ses commandes primitives, puis mettre en place le strict minimum de catcodes (et d'autres codes) afin que le moteur TeX puisse commencer un traitement ultérieur.
2. une fois (1) terminé, il chargera et traitera ensuite une collection de macros fournie par l'utilisateur, appelée un « format » (par ex., la collection de macros Plain TeX ou LaTeX).
3. après avoir mené à bien (1) et (2), TeX effectuera un « vidage binaire du cerveau » de tout ce qui a été chargé et traité dans sa mémoire et l'écrira dans un fichier binaire *format* fichier (par ex., `lualatex.fmt`).

Un fichier de format est un fichier binaire qui stocke une représentation de l’« état d’esprit » de TeX après l’initialisation de nombreuses tables de données internes (y compris les primitives) et le traitement de toutes les commandes de macro présentes dans la collection de macros fournie par l’utilisateur. Les moteurs TeX font cela parce qu’il est plus rapide de charger un fichier binaire « précompilé » plutôt que de retraiter les macros brutes à chaque fois que vous voulez lancer un moteur TeX en utilisant, par exemple, le Plain TeX de Knuth ou le paquet de macros LaTeX — ou même tout paquet de macros conçu comme un « format ».

Lorsque vous traitez un document destiné à être composé par LaTeX, par exemple, le moteur TeX ne relit pas (ne retraitent pas) toutes les macros de base de LaTeX, mais lit à la place un fichier binaire appelé, par exemple, `lualatex.fmt`. Les détails internes des fichiers de format dépendent de chaque moteur TeX et de chaque version du paquet de macros utilisé pour générer un `.fmt` fichier. Par exemple, si vous mettez à niveau votre distribution LaTeX (c.-à-d. le cœur même de LaTeX, et non les paquets additionnels), il se peut que vous deviez aussi générer un nouveau `.fmt` fichier.

### Exemple

Dans la distribution du code source de LaTeX, vous trouverez des fichiers avec une extension `.ini` extention, par exemple lualatex.ini, qui sont utilisés pour générer `.fmt` des fichiers — ces `.ini` fichiers contiennent généralement du code d'initialisation spécifique au moteur, puis chargent les fichiers de macros de base de LaTeX. Par exemple, si vous exécutez LuaTeX avec la ligne de commande suivante :

`luatex --ini lualatex.ini`

LuaTeX écrira un fichier appelé `lualatex.fmt`

Au moment de la rédaction, `lualatex.ini` contient le code suivant :

```
% tex-ini-files 2016-04-15 : lualatex.ini
% Écrit à l'origine en 2008 par Karl Berry. Domaine public.

\input luatexconfig.tex

\begingroup
  \catcode`\{=1 %
  \catcode`\}=2 %
  % Configurer la mise entre guillemets du nom de travail avant latex.ltx
  % Web2c pdfTeX/XeTeX met entre guillemets les noms de travail contenant des espaces, mais LuaTeX ne
  % le fait pas au niveau du moteur. Le comportement peut être modifié à l'aide
  % d'un rappel. À l'origine, ce code était chargé via lualatexquotejobname.tex
  % mais cela nécessitait une bidouille autour de latex.ltx : le comportement a été modifié
  % pour permettre d'utiliser directement la voie du rappel.
  \global\everyjob{\directlua{require("lualatexquotejobname.lua")}}
\endgroup

\input latex.ltx
```

`lualatex.ini` commence par charger un fichier appelé `luatexconfig.tex` qui effectue une initialisation propre à LuaTeX — comme on peut s'y attendre d'un `.ini` fichier d'initialisation ! À la dernière ligne, il charge `latex.ltx` ce qui amène LuaTeX à lire et traiter les macros de base de LaTeX.

Après que LuaTeX a terminé le traitement de `lualatex.ini` il écrira le fichier binaire *fichier de format* appelé `lualatex.fmt`. Une fois le code LaTeX compilé dans un format binaire, LuaTeX (ou tout autre moteur TeX) peut lire très rapidement le `.fmt` fichier pour amorcer et initialiser ses tables internes de définitions de macros LaTeX, de polices, etc. — il n'a pas à subir le long processus de lecture et de traitement des milliers de caractères contenus dans le paquet de macros LaTeX.

Vous pouvez maintenant demander à LuaTeX de composer votre document LaTeX `yourfile.tex` (en utilisant le `lualatex` fichier de format) en exécutant la commande :

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

`.fmt` Les fichiers de format sont généralement spécifiques à un moteur particulier : par ex., ceux de LuaTeX `.fmt` ne sont généralement pas portables pour être utilisés avec un autre moteur TeX : par ex., pdfTeX ou XeTeX. En outre, si l'exécutable LuaTeX est mis à jour avec de nouvelles fonctionnalités, il est tout à fait possible qu'un `.fmt` fichier préparé avec une ancienne version de LuaTeX ne fonctionne pas avec le nouveau moteur : il faudrait reconstruire (recompiler) le `.fmt` fichier.

Si vous essayez d'utiliser un `.fmt` fichier incompatible, un moteur TeX échouera à le charger et renverra l'erreur :

```
Erreur fatale du fichier de format ; je suis bloqué
```

De même, si les macros de base de LaTeX sont mises à jour, vous devrez peut-être aussi reconstruire les `lualatex.fmt` fichier.

`.fmt` fichiers de format peuvent être préparés à partir de n'importe quel paquet de macros approprié — pas seulement LaTeX ; par exemple, les macros TeX « Plain » originales de Knuth, beaucoup plus simples, peuvent aussi être traitées pour générer un `.fmt` fichier. Vous pourriez, si vous aviez le temps, écrire votre propre collection de macros et produire un fichier de format pour ce paquet — notez qu'à un endroit ou à un autre dans votre paquet de macros, vous devriez invoquer la commande primitive `\dump` qui indique au moteur TeX d'effectuer son « vidage binaire du cerveau » et d'écrire le `.fmt` fichier.

Cependant, l'immense majorité des utilisateurs n'ont jamais besoin de se soucier du mode « INI » des moteurs TeX, ni du processus de génération des `.fmt` fichiers : Overleaf et la distribution TeX Live vous protègent de ces détails — sauf si vous devez aller les chercher.


---

# 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/fr/articles-approfondis/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.
