Commandes de compilation

Pour transformer un fichier .tex en PDF, on lance une commande de compilation dans un terminal. pdflatex, lualatex, xelatex, latex, ainsi que les commandes japonaises platex / uplatex, relèvent toutes de « LaTeX » ; mais la commande choisie sélectionne le moteur sous-jacent, qui décide du format de sortie (PDF ou DVI) et des polices et caractères disponibles. Cette page donne une carte pratique de chaque commande et des options que l’on saisit vraiment.

Le nom de commande choisit le moteur

LaTeX est un format (un système de commandes) ; le moteur qui le traite réellement est un programme distinct. Le nom de commande nomme la combinaison : pdflatex signifie « moteur pdfTeX + format LaTeX », lualatex « LuaTeX + LaTeX », etc. On les invoque tous de la même façon : on passe le fichier source en argument ; l’extension .tex est facultative.

terminal
pdflatex document.tex      # → document.pdf, document.aux, document.log
lualatex document          # 拡張子は省略可 / extension optional
xelatex  document.tex

L’exécution d’une commande produit la sortie principale (.pdf ou .dvi) ainsi que des fichiers auxiliaires : .aux, qui accumule les références croisées et les données de table des matières, .log, qui consigne le traitement, etc. Pour stabiliser numéros, références et sommaire, on lance normalement la même commande deux fois : le premier passage écrit les numéros dans .aux, le second les relit dans le texte. Des outils comme latexmk automatisent ces passages multiples. Le pipeline complet est présenté dans « De la source au PDF ».

Les trois commandes qui sortent directement du PDF

pdflatex, lualatex et xelatex produisent tous directement un PDF. Ils diffèrent par leur gestion d’Unicode et des polices, ainsi que par leur vitesse.

pdflatex utilise le moteur pdfTeX. pdfTeX est l’extension de TeX développée par Hàn Thế Thành dans ses travaux de doctorat sur la microtypographie (protrusion des caractères dans la marge, légère expansion des fontes) ; sa caractéristique majeure était la production directe de PDF sans étape DVI. C’est le plus ancien des trois, avec la meilleure compatibilité avec les paquets existants et la compilation la plus rapide. En contrepartie, son entrée est fondamentalement orientée octets, sans Unicode natif ni polices système ; LaTeX moderne accepte UTF-8 par défaut, mais les polices restent celles de TeX.

lualatex utilise le moteur LuaTeX. Il part d’UTF-8 dès le départ et, via le paquet fontspec, emploie directement les polices OpenType/TrueType installées sur le système. Sa caractéristique distinctive est le langage de script Lua intégré, qui permet d’intervenir dans le processus de composition lui-même. Il est promu comme la direction standard de LaTeX ; la composition japonaise est assurée par le paquet luatexja.

xelatex utilise le moteur XeTeX, développé par Jonathan Kew vers 2004. Il prend aussi en charge Unicode et les polices système, mais son implémentation s’appuie davantage sur des bibliothèques externes et diffère nettement de LuaTeX. En interne, il n’écrit pas directement le PDF : il produit un fichier .xdv, une forme étendue de DVI, que xdvipdfmx convertit automatiquement en PDF. Avec -no-pdf, on s’arrête au .xdv avant cette conversion.

CommandeMoteurSortieUnicode / polices
pdflatexpdfTeXPDF directPolices TeX ; rapide, excellente compatibilité
lualatexLuaTeXPDF directPolices système + Unicode + Lua
xelatexXeTeXPDF (via .xdv en interne)Polices système + Unicode

La commande latex produit du DVI

La commande latex simple, dans TeX Live actuel, lance le moteur pdfTeX en mode DVI et produit un fichier .dvi plutôt qu’un PDF. DVI (device-independent) est un format intermédiaire indépendant du périphérique ; comme il est peu pratique à afficher ou imprimer tel quel, on le convertit en PDF avec dvipdfmx, ou en PostScript avec dvips. Là où pdflatex émet directement un PDF, cette approche sépare en deux étapes la « composition » et la « création du PDF ».

Pourquoi utiliser encore DVI ? Certains mécanismes anciens ne fonctionnent que par DVI, par exemple des parties de PSTricks, et, comme l’explique la section suivante, la composition japonaise est traditionnellement passée par DVI. Pour produire du DVI avec LuaTeX, utilisez dvilualatex. La conversion depuis DVI est détaillée sur la page « Convertisseurs DVI ».

Commandes japonaises — platex / uplatex

platex est pLaTeX exécuté sur le moteur pTeX spécialisé pour la composition japonaise (développé chez ASCII Corporation, aujourd’hui e-pTeX). Il gère l’écriture verticale, l’interligne et les règles de coupure japonaises (*kinsoku*), ainsi que l’espacement entre texte japonais et latin. Sa sortie est DVI. L’encodage d’entrée par défaut dépend de l’environnement (Shift_JIS / EUC-JP / UTF-8) ; -kanji=utf8 force la lecture en UTF-8. Même ainsi, pTeX ne traite directement que les caractères ASCII + JIS X 0208.

uplatex est upLaTeX sur le moteur upTeX de Takuji Tanaka, dont le traitement interne est fondé sur Unicode. Son entrée par défaut est UTF-8 et il gère sans paquet supplémentaire les caractères hors JIS X 0208 (kanji rares de noms propres, ensemble complet des idéogrammes unifiés CJK, etc.), ce qui en fait le standard des articles japonais modernes. Sa sortie est également DVI, et l’option -kanji permet de changer l’encodage d’entrée.

terminal
# 日本語: 組版 → DVI → PDF / Japanese: typeset → DVI → PDF
uplatex -kanji=utf8 document.tex   # → document.dvi
dvipdfmx document.dvi              # → document.pdf

Le DVI produit par (u)platex devient un PDF via dvipdfmx (celui de TeX Live prend en charge upTeX). Les TeX Live récents utilisent UTF-8 par défaut, si bien que -kanji=utf8 peut souvent être omis ; l’indiquer explicitement évite toutefois les surprises entre environnements. Pour un UTF-8 sans BOM fiable, combinez uplatex avec -no-guess-input-enc. À l’inverse, lualatex + luatexja produit directement un PDF depuis une source japonaise, sans étape DVI.

Options réellement utilisées

Placez les options avant le nom du fichier source. Les suivantes fonctionnent avec les commandes pdfTeX / XeTeX / LuaTeX :

OptionEffet
-synctex=1Émet les données SyncTeX pour permettre les sauts entre éditeur et PDF
-interaction=nonstopmodeVa jusqu’au bout sans pause sur les erreurs (batchmode est encore plus silencieux)
-halt-on-errorS’arrête à la toute première erreur
-file-line-errorSignale les erreurs au format file:line: (pratique pour les IDE)
-output-directory=DIRÉcrit les sorties dans un répertoire existant
-jobname=NAMEDéfinit le nom de base des fichiers de sortie
-shell-escapeAutorise les commandes externes via \write18 (voir l’avertissement)
-draftmodeN’écrit pas le PDF pour une vérification rapide (pdfTeX / LuaTeX)
terminal
pdflatex -synctex=1 -interaction=nonstopmode -halt-on-error -file-line-error document.tex

Pour le format de sortie, pdfTeX et LuaTeX acceptent -output-format=dvi|pdf ; XeTeX utilise plutôt -no-pdf pour obtenir .xdv. Attention à -shell-escape : des paquets comme minted (coloration de code) et certains paquets de dessin en ont besoin pour appeler des programmes externes, mais cela permet au document d’exécuter n’importe quelle commande shell. Ne l’activez jamais pour des sources non fiables.

Lequel utiliser

  • Nouveau document japonaisuplatex (→ dvipdfmx) ou lualatex + luatexja.
  • Texte surtout anglais / européenpdflatex, rapide et compatible.
  • Vous voulez les polices du systèmelualatex ou xelatex.
  • Vous avez besoin d’un mécanisme DVI uniquementlatex (→ dvipdfmx / dvips).

En pratique, plutôt que de saisir ces commandes deux fois à la main, on confie généralement le travail à un outil de construction comme latexmk, qui lance autant de passages que nécessaire et peut gérer la conversion DVI. Pour approfondir les moteurs eux-mêmes, consultez « Choisir un moteur et un format ».

Vérification de commande avant soumission

  • Tester d’abord la commande seule : exécutez une fois la commande choisie, pdflatex, lualatex, uplatex, etc., dans un terminal pour prouver que l’échec ne vient pas de l’éditeur.
  • Réglage de soumission : ajoutez -halt-on-error -file-line-error -interaction=nonstopmode afin que la CI et les journaux pointent vers la première vraie erreur.
  • Choix du PDF japonais : avec upLaTeX, lancez uplatex puis dvipdfmx ; avec LuaLaTeX, produisez directement le PDF. Ne mélangez pas les deux routes par accident.
  • Lire le journal : lisez depuis le premier !, pas seulement la fin du .log, pour revenir à la commande qui a déclenché la cascade.