LaTeX ne vous montre pas le résultat pendant que vous tapez. Vous écrivez un fichier .tex en texte brut et le compilez pour obtenir un PDF — un modèle « écrire, puis traiter le tout en même temps ». Il existe deux routes : l'une passe par un fichier DVI intermédiaire, l'autre produit directement PDF.
Pourquoi ce n'est pas WYSIWYG
TeX optimise les sauts de ligne en examinant tout le paragraphe à la fois. L'ajout d'un seul caractère à la fin d'un paragraphe peut donc modifier l'endroit où se termine sa toute première ligne. Refaire cela à chaque frappe serait beaucoup trop coûteux.
Ainsi, au lieu d'un traitement de texte WYSIWYG qui repeint au fur et à mesure que vous tapez, TeX utilise le traitement par lots : il compose l'intégralité du document en une seule fois. Vous abandonnez l'aperçu en direct, mais vous bénéficiez d'une composition globalement optimale, d'un formatage cohérent dans l'ensemble du document et de l'automatisation rendue possible par le texte brut.
De la source à la sortie : deux parcours
Un moteur traite le .tex que vous avez écrit. Il existe deux familles de sorties. Sur la route moderne, pdfTeX, XeTeX et LuaTeX produisent directement PDF. XeTeX et LuaTeX en particulier lisent l'entrée Unicode et peuvent utiliser les polices OpenType déjà installées sur votre système.
Sur la route héritée, le moteur émet d'abord un fichier DVI. DVI signifie *indépendant du périphérique* — une pure description de la page qui n'est liée à aucun périphérique de sortie particulier. Un pilote dvi le convertit ensuite : dvipdfmx en PDF, dvips en PostScript, dvisvgm en SVG. Un pilote qui s'affiche à l'écran est appelé visionneuse DVI. Les formats japonais pLaTeX et upLaTeX utilisent cette route DVI.
# Direct PDF (modern engines)
lualatex document.tex # → document.pdf
# Via DVI (legacy route, e.g. Japanese upLaTeX)
uplatex document.tex # → document.dvi
dvipdfmx document.dvi # → document.pdfÀ titre d'exception, pdfLaTeX conserve l'ancien style d'entrée (en grande partie non-Unicode) mais génère directement PDF, sans DVI. Il est utile de traiter « DVI vs direct PDF » et « Unicode / polices système ou non » comme deux axes distincts.
| Moteur | Sortie | Saisie et polices | Formats d'images |
|---|---|---|---|
latex | DVI (nécessite un pilote DVI) | Surtout ASCII | EPS, PS |
pdflatex | PDF (direct) | Limité Unicode | PNG, JPG, PDF (EPS auto-converti) |
xelatex | PDF (direct) | Unicode, système OpenType (fontspec) | PNG, JPG, PDF, EPS |
lualatex | PDF (direct) | Unicode, polices système, Lua | PNG, JPG, PDF, EPS |
Fichiers d'assistance et règle « compiler deux fois »
La compilation produit, outre le PDF, des fichiers d'aide tels que .aux (étiquettes et données de référence), .toc (la table des matières) et .log (un enregistrement). Les références croisées et la table des matières nécessitent deux passes : la première passe écrit les nombres et les positions (« sur quelle page se trouve le chapitre 3 ? ») dans .aux, et la seconde passe les lit pour remplir \ref et la liste des matières.
Ainsi, lorsque vous voyez ?? dans la sortie, ou un avertissement du type *Réexécuter pour obtenir les bonnes références croisées*, le correctif consiste simplement à recompiler. Les bibliographies (BibTeX/biber) et les index (makeindex) ajoutent encore plus de passages.
Où chercher lorsqu'une build s'arrête
Lorsqu'une build s'arrête, lisez la première erreur dans le .log, pas dans le PDF. TeX essaie de continuer après le premier problème, donc la douzaine d'erreurs qui suivent ne sont souvent que des retombées. ! Undefined control sequence signifie généralement une commande mal orthographiée ou un package manquant ; File ... not found pointe vers la recherche d'image, de classe ou de package ; LaTeX Warning: Label(s) may have changed signifie qu'une autre exécution est nécessaire. Diagnostiquez par l'étape du pipeline où le message apparaît.
- Si seules les références croisées sont erronées, laissez
latexmkréexécuter avant de supprimer les fichiers.auxou.toc. - Si une image manque, vérifiez si l'itinéraire est direct PDF ou DVI et choisissez les formats d'image en conséquence.
- Supprimez
.aux,.toc,.outet vos amis uniquement lorsque des fichiers d'assistance périmés en sont probablement la cause.
Arrêtez de compter les passes — latexmk et éditeurs
Compter les passes à la main est fastidieux. latexmk surveille les fichiers comme .aux et réexécute le moteur exactement autant de fois que nécessaire, en appelant BibTeX/biber et makeindex lorsque cela est nécessaire, et en s'arrêtant une fois que la sortie est stable. Par défaut, il se répétera jusqu'à cinq fois ($max_repeat = 5) avant de décider de mettre en boucle ; ce plafond est suffisant pour pratiquement tous les documents réels.
latexmk -lualatex document.tex # LuaLaTeX, as many passes as needed
latexmk -pdf document.tex # pdfLaTeX
latexmk -c # clean .aux/.log and friendsLes éditeurs et services tels que VS Code (LaTeX Workshop), TeXShop et Overleaf appellent généralement latexmk sous le capot, il vous suffit donc d'appuyer sur « compiler ». Et lorsque SyncTeX est activé, vous pouvez cliquer pour passer d'une ligne dans la source à l'endroit correspondant dans le PDF.