Choisir un moteur ou un format

pdfLaTeX, XeLaTeX, LuaLaTeX, upLaTeX — lequel devriez-vous utiliser ? Cette page est un guide de décision pratique pour précisément cette question. Il s'ouvre par une recommandation, puis détaille les facteurs qui déterminent le choix et se termine par un tableau comparatif et des notes pour changer de moteur.

La recommandation rapide

Avant les détails, voici les premiers choix par objectif – pour la plupart des gens, cela suffit. Rappelons de la page « formats LaTeX » que chaque nom est un moteur (le programme de traitement) combiné à un format (LaTeX, le système de commande). Ci-dessous, nous les donnons par la commande que vous tapez réellement (pdflatex, etc.).

  • Texte occidental (anglais/langues européennes), le chemin le plus simple, compatibilité maximale des packagespdfLaTeX (pdflatex). Il s’agit du standard de facto de LaTeX, avec le plus de documentation et d’art antérieur.
  • Vous souhaitez utiliser les polices OpenType du système, gérer le texte Unicode/multilingue et garder les choses simplesXeLaTeX (xelatex). fontspec facilite le travail multilingue non japonais.
  • Polices système et Unicode, ainsi qu'un contrôle programmable et précis et une pérennitéLuaLaTeX (lualatex). Vous pouvez façonner la composition à partir de Lua, et l'équipe LaTeX la considère comme le futur standard.
  • JaponaisupLaTeX (uplatex) est le choix courant et sûr ; LuaLaTeX + luatexja est la route moderne, native de Unicode (mais plus lente). La classe jlreq fonctionne avec l'un ou l'autre.

En une phrase : pdfLaTeX pour le texte occidental, XeLaTeX ou LuaLaTeX lorsque vous avez besoin de polices système ou Unicode, et upLaTeX ou LuaLaTeX pour le japonais. Pour un nouveau projet sans exigences particulières, à partir de pdfLaTeX (occidental) ou upLaTeX (japonais) est la valeur sûre ; si vous voulez que tout soit unifié sur Unicode à long terme, LuaLaTeX vaut la peine d'être choisi.

Cinq chèques avant d'écrire

Le choix du moteur est plus sûr lorsque vous travaillez à rebours à partir de la cible de soumission et des documents sources, et non selon vos goûts personnels. Une thèse peut hériter d'un modèle de laboratoire, un article de journal peut nécessiter un fichier de classe et un manuel technique peut être compilé par CI ou par la machine d'un lecteur. Vérifiez ces cinq points avant d’écrire le premier vrai paragraphe, et vous éviterez de réécrire des dizaines de pages plus tard.

  • Respectez d'abord l'objectif de soumission : si le fichier de classe ou les instructions s'appellent uplatex, pdflatex, lualatex ou un autre moteur, utilisez-le.
  • Décidez comment le japonais sera traité : les modèles japonais hérités pointent souvent vers upLaTeX ; une nouvelle configuration Unicode/OpenType pointe vers LuaLaTeX + luatexja.
  • Vérifiez la bibliographie et les outils d'index : BibTeX contre Biber et mendex contre upmendex affectent la configuration de latexmk.
  • Regardez les figures et les polices : les caractères EPS ou PSTricks hérités favorisent un itinéraire DVI, tandis que les chiffres PDF/PNG et les polices OpenType favorisent pdfLaTeX, LuaLaTeX ou XeLaTeX.
  • Gelez la construction : écrivez la commande dans .latexmkrc ou README afin que les collaborateurs et CI puissent reproduire le même PDF.

Les facteurs qui déterminent le choix

Car lorsque la réponse rapide ne convient pas – ou lorsque vous voulez savoir pourquoi – voici les axes un par un. La plupart d'entre eux reviennent sur la façon dont le moteur gère les polices et l'encodage des caractères.

Polices. pdfTeX utilise le modèle de police traditionnel de TeX : TFM (TeX Font Metric) plus polices Type1/PK. Il ne peut pas simplement pointer vers une police ordinaire installée sur votre OS. XeTeX et LuaTeX diffèrent ici le plus nettement : ils peuvent utiliser directement les polices TrueType / OpenType déjà présentes sur le système, nommées via le package fontspec, par ex. \setmainfont{Times New Roman}. fontspec nécessite XeTeX ou LuaTeX ; cela ne fonctionne pas sous pdfLaTeX.

Entrée Unicode. XeTeX et LuaTeX sont Unicode-natifs en interne et prennent la source UTF-8 telle quelle. pdfTeX également, puisque la version 2018 LaTeX utilise UTF-8 comme encodage d'entrée par défaut (donc \usepackage[utf8]{inputenc} n'est plus nécessaire) - mais en interne, il correspond toujours aux encodages de police 8 bits (T1 et similaires), donc les caractères qui fonctionnent dépendent de votre fontenc et de votre police, et vous ne pouvez pas taper librement arbitrairement Unicode ou CJK directement. Pour taper du texte et des symboles multilingues sans problème, XeTeX/LuaTeX ont l'avantage.

Compatibilité des packages. C'est le piège pratique qui manque aux gens. Certains packages sont spécifiques au moteur. fontspec et unicode-math, par exemple, sont uniquement XeTeX/LuaTeX. À l'inverse, pstricks fonctionne sous les pdfLaTeX et XeLaTeX routés par DVI mais, en règle générale, pas sous LuaLaTeX. Certaines parties de microtype (ci-dessous) penchent également vers pdfTeX/LuaTeX. L'incompatibilité fonctionne également dans l'autre sens : les sources écrites pour suivre un ancien tutoriel peuvent ne pas être compilées sur un moteur plus récent. La règle cardinale est de vérifier quel moteur votre modèle ou votre classe de journal exige avant toute autre chose.

Vitesse. La différence est réelle et perceptible. L'ordre habituel est pdfTeX le plus rapide, XeTeX au milieu, LuaTeX le plus lent. LuaTeX entraîne la surcharge liée au démarrage d'un Lua VM et à la mise en forme des polices via HarfBuzz, et sur des documents volumineux et riches en polices, il peut fonctionner plus de trois fois plus lentement que pdfLaTeX (sur des documents simples, l'écart est petit). Au fil des centaines de recompilations qu'implique une véritable session d'écriture, cela s'additionne.

Micro-typographie. La saillie des caractères et l'expansion des polices du package microtype rehaussent visiblement l'apparence du texte occidental. Les différences de moteur ici sont importantes : la saillie fonctionne sur les trois, mais l'expansion des polices n'est prise en charge que sur pdfTeX et LuaTeX, pas sur XeTeX. Les ajustements de l'espacement entre les mots et du crénage sont uniquement sur pdfTeX, la désactivation des ligatures fonctionne sur pdfTeX/LuaTeX et l'espacement des lettres fonctionne sur les trois. Pour le meilleur rendu occidental, pdfLaTeX ou LuaLaTeX est le choix sûr.

Fonctionnalités graphiques / PDF et programmabilité. Chaque moteur importe PNG, JPEG et PDF via graphicx, et \includegraphics se comporte à peu près de la même manière entre eux (pdfLaTeX convertit automatiquement EPS). La force distinctive de LuaTeX est le contrôle via Lua : vous pouvez vous connecter à des passes de composition ou lire des données externes pour créer des tableaux – des choses qui sont gênantes dans les macros. Il se marie également bien avec la pile de packages moderne, notamment fontspec et unicode-math, c'est pourquoi il est qualifié de « évolutif ».

Le cas particulier de CJK / japonais. Définir correctement le japonais — écriture verticale, règles de saut de ligne (kinsoku), espacement entre le texte japonais et occidental — nécessite une machinerie dédiée. La valeur par défaut de longue date est le moteur de la famille pTeX (uplatex), qui utilise le japonais JFM (métriques de police) et est stable et rapide. L'alternative moderne, LuaLaTeX + luatexja, gère tout dans Unicode et vous permet d'utiliser librement les polices système, mais comme le wiki TeX le note clairement, la composition prend plus de temps que XeLaTeX, upLaTeX ou pLaTeX (LuaJITTeX rachète environ 1,3x). Notez également que la sélection directe de la police CJK utilise luatexja-fontspec plutôt que fontspec simple. La classe jlreq (construite sur les exigences JIS pour la composition japonaise) s'exécute sous platex, uplatex ou lualatex et détecte automatiquement le moteur. La page japonaise dédiée couvre le reste.

Décidez avec un petit fichier d’essai

Changer de moteur dans une thèse ou un brouillon de soumission peut déplacer simultanément les polices, les figures, la bibliographie et les sauts de ligne, masquant ainsi la cause du problème. En cas de doute, créez un fichier d'essai d'une page avant de commencer la véritable écriture et compilez les mêmes documents avec les moteurs candidats. Vérifiez non seulement s'il se compile, mais également les avertissements dans le journal, l'intégration des polices dans le PDF, la gestion des figures et si les collaborateurs peuvent reproduire les étapes.

terminal
# 欧文の候補 / Western candidates
pdflatex engine-test.tex
lualatex engine-test.tex
xelatex engine-test.tex

# 日本語 upLaTeX の候補 / Japanese upLaTeX candidate
uplatex engine-test.tex
dvipdfmx engine-test.dvi
  • Si un modèle cible existe, testez avec ce modèle. Un fichier vierge réussi ne prouve pas que la configuration de la soumission fonctionne.
  • Incluez une figure, une équation affichée et un élément de bibliographie, afin que l'essai représente le véritable manuscrit en miniature.
  • Une fois choisi, épinglez le moteur dans .latexmkrc ou README et évitez de compiler le projet avec un autre moteur.
  • Comparez les PDF ; si les sauts de ligne ou les polices diffèrent, laissez la raison du choix à l'intérieur du projet.

Tableau comparatif

Les quatre choix principaux, disposés selon des axes décisifs. Le nom de la commande est la colonne la plus à gauche. Pour microtype, la saillie et l'expansion sont affichées séparément (un tiret signifie non pris en charge).

CommandeUnicode / polices systèmemicrotypeVitesseUtilisation principale
pdflatexNon (entrée TFM/Type1 ; entrée UTF-8 ok mais mappée en 8 bits)saillie oui / expansion ouiLe plus rapideDéfaut occidental ; compatibilité la plus large
xelatexOui (OpenType directement via fontspec)saillie oui / expansion nonMilieuMultilingue facile / OpenType
lualatexOui (fontspec, plus contrôle Lua)saillie oui / expansion ouiLe plus lentModerne/futur ; Japonais via luatexja
uplatexJaponais via JFM (itinéraire DVI) ; entrée UTF-8Limité, partie ouest uniquementRapidepapiers japonais; valeur par défaut stable

Considérez la table comme un guide et non comme un verdict. pdfLaTeX, associé à \usepackage[T1]{fontenc} et à un package de polices occidentales approprié, définit magnifiquement de nombreuses langues européennes ; et même sur XeLaTeX, la saillie microtype s'applique toujours. Lisez-le moins comme un binaire « peut / ne peut pas » et plus comme un équilibre entre efforts et polissage.

Notes pour changer de moteur

Changer de moteur à mi-chemin peut modifier le résultat, même à partir d'une source identique. Voici les problèmes que les gens rencontrent réellement.

Modifications de la configuration de la police et de l'encodage. Les agrafes pdfLaTeX \usepackage[utf8]{inputenc} et \usepackage[T1]{fontenc} sont inutiles sur XeLaTeX/LuaLaTeX et normalement omises (elles sont Unicode en interne) ; vous recherchez plutôt fontspec et \setmainfont. Transférer un préambule pdfLaTeX directement vers XeLaTeX peut produire des avertissements ou des erreurs liées à la police.

latex
% pdfLaTeX 向け(旧来)/ for pdfLaTeX (traditional)
%   \usepackage[utf8]{inputenc}
%   \usepackage[T1]{fontenc}

% XeLaTeX / LuaLaTeX 向け / for XeLaTeX / LuaLaTeX
\usepackage{fontspec}
\setmainfont{TeX Gyre Termes}  % OS / TeX のフォントを名前で指定

microtype se comporte différemment. Le même \usepackage{microtype} produit des effets différents par moteur — sur XeLaTeX, l'expansion des polices est simplement désactivée, par exemple. La mise en page réglée sous pdfLaTeX peut légèrement changer (longueurs de ligne, positions de rupture) une fois déplacée vers XeLaTeX.

Modifications de la disponibilité des packages. Certains packages cessent de fonctionner (ou deviennent disponibles pour la première fois) sur le moteur cible. Les figures basées sur PSTricks ne fonctionneront pas si vous les déplacez vers LuaLaTeX (pstricks n'y est pas pris en charge) ; à l'inverse, fontspec et unicode-math ne sont pas disponibles sur pdfLaTeX. Les modèles de journaux et d'éditeurs supposent généralement un moteur spécifique, donc suivre cela en premier est la décision la plus sûre.

Pour le japonais, toute la configuration de la police CJK change. upLaTeX (famille pTeX) et LuaLaTeX + luatexja diffèrent à la fois par la façon dont vous nommez les polices japonaises et par la façon dont elles sont intégrées. Attendez-vous à ce que la migration du moteur soit plus dure pour les documents japonais que pour les documents occidentaux. Pour les équivalents concrets des commandes, voir la page « Compiler les commandes ».