XeTeX

XeTeX est un moteur TeX qui lit directement UTF-8 et utilise les polices déjà installées sur votre système. Sans configuration de TFM ou de fichier de carte, vous nommez simplement une police via le package fontspec et les polices OpenType fonctionnent simplement. Il a été écrit par Jonathan Kew et vous l'invoquez normalement sous la forme xelatex.

Qu'est-ce que XeTeX

Dans les classiques TeX et pdfTeX, utiliser une police signifiait préparer un fichier de dimension TFM (TeX Font Metrics) et le mapper à une vraie police via un fichier .map — une danse compliquée. XeTeX supprime cette corvée : il vous permet de nommer n'importe quelle police connue du système d'exploitation (OpenType / TrueType et AAT sur macOS) et de l'utiliser directement. L'entrée est interprétée par défaut comme UTF-8, vous pouvez donc écrire des lettres japonaises, grecques ou accentuées sous forme de caractères littéraux.

Jonathan Kew l'a initialement écrit pour SIL International, construit autour de la technologie de composition Mac de l'époque, AAT (Apple Advanced Typography) ; la première version est sortie en avril 2004 pour Mac OS X uniquement, et elle est ensuite devenue un moteur multiplateforme fonctionnant également sur Windows et Linux. En interne, il inclut l'ensemble d'extensions e-TeX, de sorte que les fonctionnalités supposées par LaTeX moderne sont toutes présentes.

Le Xe dans le nom joue sur le X final de TeX (le grec χ) inversé – un jeu de mots sur « l’inverse de TeX ». En anglais, il est lu de manière informelle comme « zee-tech » ou « zi-tech », bien que les prononciations varient.

Un exemple minimal

Voici le plus petit document compilé avec xelatex. Il charge fontspec et définit la police du corps avec \setmainfont, en nommant la police telle que le système la connaît. Les polices groupées telles que Latin Modern ou TeX Gyre fonctionnent sans installation supplémentaire, mais une police OS comme Hiragino Mincho ProN porte le même nom.

latex
\documentclass{article}
\usepackage{fontspec}
\setmainfont{TeX Gyre Termes}
\begin{document}
Hello, \XeTeX! こんにちは、世界。
\[ E = mc^2 \]
\end{document}

Le point clé est que vous ne chargez pas inputenc ou fontenc. L'entrée UTF-8 et les polices Unicode constituent la ligne de base, de sorte que les incantations de codage de caractères dont pdfLaTeX avait besoin disparaissent tout simplement. Vous compilez avec un seul xelatex document.tex (deux fois si vous avez des références croisées).

Polices — fontspec est la star

En pratique, vous atteignez la puissance des polices de XeTeX via le package fontspec. Vous définissez les polices de corps, sans empattement et à espacement fixe comme ci-dessous, et pouvez également créer une nouvelle famille de polices dans un but spécifique.

latex
\usepackage{fontspec}
\setmainfont{TeX Gyre Pagella}
\setsansfont{TeX Gyre Heros}
\setmonofont{TeX Gyre Cursor}
\newfontfamily\headingfont{TeX Gyre Adventor}

fontspec expose également les fonctionnalités OpenType intégrées dans une police. Grâce à ses options, vous pouvez activer les ligatures historiques, les petites majuscules ou les chiffres à l'ancienne, entre autres. Les fonctionnalités que la police ne comporte pas n’ont tout simplement aucun effet.

latex
\setmainfont{TeX Gyre Pagella}[
  Ligatures = {Common, Historic},
  Numbers   = OldStyle,
  SmallCapsFeatures = {Letters = SmallCaps},
]
% 生の OpenType / Graphite タグを直接指定:
\newfontfamily\swashfont{EB Garamond}[RawFeature = {+swsh}]

Pour un contrôle plus fin, il existe des options telles que Renderer (choisissez le shaper HarfBuzz / AAT / Graphite) et RawFeature (transmettez directement les balises de fonctionnalités brutes d'une police). Pour changer le codage d'entrée au milieu du document, le moteur fournit le \XeTeXinputencoding intégré. Et lorsque vous voulez une police mathématique Unicode (STIX Two Math, Latin Modern Math,…), vous associez XeTeX au package unicode-math.

Le pipeline — de XDV à PDF

Là où pdfTeX écrit directement PDF, XeTeX fonctionne en deux étapes. Le moteur émet d'abord un fichier intermédiaire XDV (DVI étendu ; XeTeX indépendant du DeVice), que le pilote xdvipdfmx fourni transforme ensuite en PDF. De votre côté, une seule exécution de xelatex fait tout, mais en interne ces deux étapes s'exécutent en séquence (depuis la version 0.997, xdvipdfmx est le pilote par défaut sur toutes les plateformes).

Cette conception est importante pour \special, les options dépendantes du pilote et l'inclusion graphique. Parce que xdvipdfmx est ce qui produit réellement le PDF, lorsqu'un package comme graphicx a besoin d'un pilote explicite, vous le pointez vers xetex (c'est-à-dire xdvipdfmx). La plupart des packages détectent automatiquement XeTeX, vous devez donc rarement y penser.

Lors du débogage, n'oubliez pas ce pipeline en deux étapes. Même si vous avez tapé xelatex, les échecs concernant les images, l'intégration de polices ou les signets PDF se terminent souvent par un message xdvipdfmx dans le journal. Lisez le .log en séparant la première ligne d'erreur TeX de la ligne finale du pilote ; cela vous indique rapidement si le problème vient de la syntaxe TeX ou du fait que le pilote ne parvient pas à traiter un graphique ou une police.

Scripts multilingues et complexes

L'une des raisons pour lesquelles XeTeX est si largement utilisé est sa force avec les scripts de droite à gauche (RTL) et complexes. Le XeTeX moderne façonne les glyphes avec HarfBuzz (adopté dans la version 0.9999, en 2013, en remplacement de l'ancien LayoutEngine ICU), de sorte qu'il définit correctement les scripts de jointure arabe et riches en ligatures.

Pour changer de langue, vous utilisez le package polyglossia de l'ère XeTeX / LuaTeX (le remplacement du babel classique). La composition RTL est gérée par le package bidi, et polyglossia charge automatiquement bidi lorsque vous demandez l'arabe, l'hébreu, etc. Le chinois, le coréen et le japonais (CJK) sont gérés avec xeCJK — bien que pour le japonais en particulier, beaucoup préfèrent encore LuaTeX-ja (luatexja) ou upLaTeX pour l'écriture verticale et les règles plus fines de la composition japonaise.

XeTeX contre LuaTeX

XeTeX et LuaTeX partagent la même fondation moderne – entrée Unicode plus polices système – mais ils ont des tempéraments différents. XeTeX est plus simple et rapide : il convient à « Je veux juste utiliser les polices OS avec Unicode », et des années d'utilisation l'ont rendu stable et mature. LuaTeX, en revanche, intègre le langage Lua dans le moteur de composition, vous permettant de programmer son comportement dans les moindres détails via des hooks de bas niveau.

Le revers de la médaille est que XeTeX ne peut pas exécuter Lua et a moins de hooks de bas niveau. Le développement de nouvelles technologies de polices et de machines de composition a tendance à se concentrer du côté de LuaTeX. En tant que division approximative du travail : XeTeX pour la facilité et la stabilité, LuaTeX pour la programmabilité et la longévité.

AspectXeTeXLuaTeX
Unicode 入力Oui (UTF-8 par défaut)Oui (UTF-8 par défaut)
システムフォントDirectement, via fontspecDirectement, via fontspec
シェーピングHarfBuzz / AAT / GraphiteHarfBuzz (luaotfload)
PDF 化XDV → xdvipdfmx (deux étapes)Sortie directe
スクリプト言語AucunLua intégré
性格Simple, stable, matureProgrammable, évolutif

Quand contacter XeTeX

  • Utilisez les polices déjà présentes sur votre système. Nommez une police OpenType / TrueType et vous avez terminé.
  • Écrivez Unicode littéralement. L'entrée UTF-8 est la valeur par défaut ; aucune configuration d'encodage n'est requise.
  • Définissez le texte multilingue / RTL. polyglossia + bidi le rendent puissant pour l'arabe, l'hébreu et plus encore.
  • Démarrez rapidement et de manière fiable. Peu de configuration et un historique long et stable.
  • Considérez LuaTeX si vous avez besoin d'une personnalisation au niveau Lua, ou upLaTeX / luatexja pour une composition japonaise précise.

Un flux de travail de sélection de polices plus sûr

Les échecs de XeLaTeX proviennent généralement de deux endroits : le nom de la police n'est pas visible pour le OS, ou les attentes japonaises en matière de composition dépassent ce que xeCJK est censé gérer. Compilez d’abord le document minimal avec des polices groupées telles que Latin Modern ou TeX Gyre, puis remplacez une police à la fois. Si vous avez besoin d'une écriture verticale japonaise, d'un comportement kinsoku précis ou d'un cours de japonais fourni par l'éditeur, testez upLaTeX ou LuaLaTeX + LuaTeX-ja tôt.

  • Pour les erreurs font not found, suspectez la résolution du nom de police OS avant TeX lui-même.
  • Pour une soumission PDF uniquement, vérifiez toujours l'intégration des polices.
  • Pour la collaboration, ne supposez pas que tous les OS ont les mêmes polices ; envisagez des polices groupées telles que TeX Gyre.