Fonctionnement du traitement (DVI/PDF)

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.

terminal
# 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.

MoteurSortieSaisie et policesFormats d'images
latexDVI (nécessite un pilote DVI)Surtout ASCIIEPS, PS
pdflatexPDF (direct)Limité UnicodePNG, JPG, PDF (EPS auto-converti)
xelatexPDF (direct)Unicode, système OpenType (fontspec)PNG, JPG, PDF, EPS
lualatexPDF (direct)Unicode, polices système, LuaPNG, 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 latexmk réexécuter avant de supprimer les fichiers .aux ou .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, .out et 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.

terminal
latexmk -lualatex document.tex   # LuaLaTeX, as many passes as needed
latexmk -pdf     document.tex     # pdfLaTeX
latexmk -c                        # clean .aux/.log and friends

Les é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.