\compare{xelatex-vs-lualatex}

XeLaTeX vs LuaLaTeX

Les deux moteurs gèrent Unicode nativement et chargent les polices système via fontspec. La vraie différence tient au moteur de script Lua intégré à LuaLaTeX et à son pipeline de mise en forme du texte supérieur. Ce guide couvre toutes les distinctions utiles.

XeLaTeX— rapide, Unicode, polices systèmeLuaLaTeX— scripts Lua + HarfBuzz
Utilisez XeLaTeX quand…
  • La vitesse de compilation est une priorité
  • Vous avez besoin de polices système avec fonctionnalités OpenType
  • Écritures RTL (arabe, hébreu) avec le paquet bidi
  • Vous n'avez pas besoin des scripts Lua à la compilation
Utilisez LuaLaTeX quand…
  • Vous avez besoin de scripts Lua dans votre document
  • Une mise en forme avancée du texte (HarfBuzz) est requise
  • Génération de tableaux dynamiques ou de contenu calculé
  • Vous avez besoin des fonctionnalités de luacolor ou luatextra

\section{Différences techniques}

Ce qui diffère réellement en coulisses

Moteur de script Lua

XeLaTeX

XeLaTeX n'a pas de langage de script intégré. La logique du document doit être exprimée entièrement avec des macros ou des paquets TeX. C'est suffisant pour presque toutes les tâches de composition, mais cela limite la génération de contenu dynamique à la compilation.

LuaLaTeX

LuaLaTeX intègre un interpréteur Lua 5.3 complet, accessible depuis votre document via luacode. Vous pouvez calculer des valeurs, parcourir des données, appeler des bibliothèques Lua externes et réinjecter les résultats dans le flux de composition TeX à la compilation.

Mise en forme du texte et écritures complexes

XeLaTeX

XeLaTeX utilise les bibliothèques de mise en forme du texte ICU et SIL via le moteur XeTeX. Les écritures complexes (arabe, devanagari, thaï) sont prises en charge grâce aux paquets bidi et polyglossia. En pratique, cela couvre la plupart des besoins de composition multilingue.

LuaLaTeX

LuaLaTeX intègre HarfBuzz (via LuaHarfBuzz), le même moteur de mise en forme que celui des navigateurs, d'Android et de macOS. HarfBuzz couvre davantage d'écritures et applique plus précisément les fonctionnalités OpenType, ce qui en fait le meilleur choix pour les documents aux écritures complexes ou nécessitant des substitutions de glyphes avancées.

Vitesse de compilation

XeLaTeX est systématiquement plus rapide que LuaLaTeX. La différence vient du surcoût d'initialisation de la machine virtuelle Lua de LuaLaTeX et du pipeline de mise en forme HarfBuzz. Sur des documents simples, l'écart est faible ; sur de gros documents riches en polices, LuaLaTeX peut être 30 à 50 % plus lent.

XeLaTeX

~1.5s

document typique en une seule passe

LuaLaTeX

~2.0s

document typique en une seule passe

Compatibilité des paquets

XeLaTeX

La plupart des paquets CTAN qui fonctionnent avec pdfLaTeX fonctionnent aussi avec XeLaTeX, à l'exception des paquets de bas niveau propres à pdfLaTeX. Les paquets fontspec et unicode-math y sont des citoyens de premier rang.

LuaLaTeX

LuaLaTeX offre la même prise en charge des paquets que XeLaTeX, plus l'accès à l'écosystème Lua. Des paquets comme luacode, luacolor et luatextra sont exclusifs à LuaLaTeX.

\subsection{Matrice des fonctionnalités}

Comparaison côte à côte

Fonctionnalité
XeLaTeX
LuaLaTeX
Entrée Unicode
Natif
Natif
Polices système (fontspec)
Oui
Oui
Scripts Lua
Non
Oui (luacode)
Vitesse de compilation
Rapide (~1,5 s)
Modérée (~2 s)
Mathématiques OpenType
Oui (unicode-math)
Oui (unicode-math)
Langues RTL
Oui (bidi)
Partiel (luabidi)
Contenu dynamique
Non
Oui (Lua à l'exécution)
Compat. des paquets
Bonne
Bonne
LuaHarfBuzz (mise en forme du texte)
Non
Oui
Utilisation de la mémoire
Modérée
Plus élevée

\section{Recommendations}

Quel moteur pour quel type de document ?

Le bon moteur dépend de vos besoins précis, et non d'un classement universel.

Article académique (texte latin)

XeLaTeX

Compilation plus rapide, excellente prise en charge de fontspec et unicode-math complet pour les polices mathématiques modernes.

Rapport multilingue (écritures complexes)

LuaLaTeX

La mise en forme HarfBuzz gère l'arabe, le devanagari et le thaï avec plus de précision que le moteur ICU de XeLaTeX.

Génération automatisée de rapports

LuaLaTeX

Les scripts Lua permettent de parcourir des données et de générer des tableaux ou des sections à la compilation, sans prétraitement externe.

Thèse / mémoire

XeLaTeX

Itération plus rapide pendant la rédaction, large prise en charge des modèles, et fontspec couvre tous les besoins typiques en polices.

Livre ou document long

LuaLaTeX

Les callbacks Lua permettent une personnalisation micro-typographique au-delà de ce que permettent les macros TeX. HarfBuzz améliore la qualité des glyphes pour les polices personnalisées.

CV

XeLaTeX

Document court, compilation rapide, et fontspec gère toutes les polices de marque personnalisées dont vous pourriez avoir besoin.

\begin{examples}

Exemples minimaux fonctionnels

Les deux exemples se compilent avec FormaTeX. Essayez-les directement dans le playground.

XeLaTeX
% XeLaTeX — Unicode native, system fonts via fontspec
\documentclass{article}
\usepackage{fontspec}
\usepackage{unicode-math}

\setmainfont{Linux Libertine O}
\setmathfont{XITS Math}

\begin{document}
XeLaTeX handles Unicode natively: α β γ — no inputenc needed.
Arabic: \textarabic{مرحبا} \quad Greek: Αλφαβητικό

$\int_0^\infty e^{-x^2}\, dx = \frac{\sqrt{\pi}}{2}$
\end{document}
LuaLaTeX
% LuaLaTeX — Lua scripting + modern font loading
\documentclass{article}
\usepackage{fontspec}
\usepackage{luacode}

\setmainfont{Linux Libertine O}

% Generate content with Lua at compile time
\begin{luacode*}
  local items = {"Introduction", "Methods", "Results", "Discussion"}
  for i, v in ipairs(items) do
    tex.print(i .. ". " .. v .. "\\\\")
  end
\end{luacode*}

\begin{document}
LuaLaTeX: Unicode + Lua scripting in a single engine.
$f(x) = \sum_{n=0}^{\infty} \frac{f^{(n)}(a)}{n!}(x-a)^n$
\end{document}

\section{FAQ}

Questions fréquentes

XeLaTeX et LuaLaTeX sont tous deux disponibles

Compilez avec le moteur de votre choix

FormaTeX exécute XeLaTeX, LuaLaTeX, pdfLaTeX et latexmk. Changez de moteur en modifiant un seul champ de l'API, sans infrastructure à gérer.