Qu’est-ce que LuaTeX ?#

LuaTeX consiste en un moteur de type avec un interpréteur Lua intégré.

Lua est un langage de script libre, conçu de manière à pouvoir être embarqué au sein d’autres applications afin d’étendre celles-ci. Cette aptitude est utilisée dans LuaTeX : l’interpréteur Lua a accès à de nombreuses structures de données internes que le moteur TeX utilise pour la composition du document, de sorte que le programmeur peut insérer des morceaux de code Lua dans des commandes ou , tout comme il peut placer des « rappels » (call-backs) pour modifier le comportement de lors de certaines opérations. Ceci le rend particulièrement souple.

Voici un exemple dans lequel du code Lua très simple est intégré à un document LaTeX, en argument de la macro \directlua :

\documentclass{article}
  \usepackage[width=8cm]{geometry}
  \pagestyle{empty}

\begin{document}
On sait compter :
\directlua{
  for x=1,12 do
    tex.print(x)
  end
}%
.
\end{document}

Le moteur standard pdfTeX est entièrement rétrocompatible avec . En tant que tel, il reste un système 8 bits utilisant des métriques de polices dédiées. En revanche, le moteur LuaTeX est basé sur Unicode et capable de charger des polices système standards (OpenType).

Contrairement à XeTeX, la capacité à utiliser des polices système standards n’est pas intégrée au moteur lui-même mais ajoutée en utilisant du code Lua. Malgré cette différence de conception, LuaTeX et XeTeX arrivent à des résultats similaires en ce qui concerne la gestion des polices (avec des avantages différents à la clef).

Bien qu’il existe des différences voulues entre le comportement de LuaTeX, de ou pdfTeX, pour la plupart des utilisateurs, LuaTeX peut être utilisé en remplacement des deux autres. D’ailleurs, pour la plupart des utilisateurs finaux de , les subtilités sont transparentes, le noyau et l’extension fontspec fournissant des interfaces.

Pour davantage de détails, voir le Guide touristique de LuaLaTeX (en français), de Manuel Pégourié-Gonnard.

Note

ConTeXt Mark 4 nécessite LuaTeX mais c’est maintenant transparent pour l’utilisateur.


Sources :