Le mpg-blog

LaTeX et autres geekeries

LuaTeX récent sur TeX Live, compléments

with one comment

Dans un article précédent, j’expliquais comment installer une version récente de LuaTeX sur TeX Live. Suite à un changement depuis la version 0.39.0 de LuaTeX, un action supplémentaire (modification des fichiers d’initialisation) est requise. Celle-ci doit être effectuée une fois pour toute pour permettre d’utiliser une version supérieure à 0.39.0, contrairement aux étapes décrites précédemment qui sont à refaire pour chaque installation d’une nouvelle version. (Mise à jour : cette manipulation n’est plus nécessaire depuis TeX Live 2009.)

Le comment

Vu que l’installation des binaires se fait forcément dans l’arborescence principale de TeX Live, toutes les explications qui suivent supposent que vous installez les fichiers d’initialisation dans TEXMFLOCAL, car je ne vois pas de raison d’utiliser plutôt TEXMFHOME. Pour connaître la valeur de TEXMFLOCAL, utilisez la commande suivante.

kpsewhich --var-value TEXMFLOCAL

Par ailleurs, je suppose que vous avez les privilèges suffisants pour effectuer toutes les opérations décrites. Il est conseillé d’installer TeX Live en tant que simple utilisateur (surtout si vous comptez la bidouiller beaucoup, comme c’est l’objet de ces billets), mais si vous ne l’avez pas fait, n’hésitez pas à utiliser sudo ou su sous Unix, ou « ouvrir une ligne de commande en tant qu’administrateur » sous Windows au besoin.

Dans TEXMFLOCAL/tex/generic/config, créez un fichier nommé luatexiniconfig.tex ayant le contenu suivant.

\begingroup
\catcode `\{=1
\catcode `\}=2
\expandafter\ifx\csname luatexversion\endcsname\relax
  \let\luatexversion\undefined
  \directlua{tex.enableprimitives('', tex.extraprimitives())}
\fi
\endgroup

Ensuite, trouvez l’arborescence TEXMFDIST (utilisez kpsewhich --var-value au besoin), et copiez de cette arborescence vers TEXMFLOCAL les fichiers suivants.

tex/plain/config/luatex.ini
tex/plain/config/pdfluatex.ini
tex/latex/latexconfig/lualatex.ini
tex/latex/latexconfig/pdflualatex.ini

Éditez ensuite la copie présente dans TEXMFLOCAL de chacun de ces fichiers, pour ajouter au tout début (juste après les commentaires initiaux) la ligne

\input luatexiniconfig

Il faut maintenant mettre à jour la base de données des fichiers de TeX. Vu que tous les fichiers créés sont dans TEXMFLOCAL, il suffit de se placer dans ce répertoire et de taper

mktexlsr .

Tout ceci est à effectuer une fois avant d’installer une version supérieure ou égale à 0.39.0 de LuaTeX, par la méthode donnée dans le billet précédent.

Le pourquoi du comment

Sans la manipulation décrite ci-dessus, vous aurez une erreur au moment de re-générer les formats (l’étape fmtutil-sys). En effet, les fichiers d’initialisation des formats supposent qu’un certain nombre de primitives fournies par e-TeX ou pdfTeX existent, ce qui est bien naturel vu qu’il sont destinés à un moteur précis.

Or, depuis la version 0.39.0, LuaTeX (en mode INI, c’est-à-dire sans format pré-chargé) démarre avec exactement les même primitives que TeX82, sauf \directlua en plus. Si on veut accéder aux nouvelles primitives, il faut explicitement demander leur activation avec la fonction Lua tex.enableprimitives(). Ceci présente deux avantages :

  • si dans un futur distant on veut réellement remplacer pdfTeX par LuaTeX, on peut (en utilisant le deuxième argument de tex.enableprimitives()) n’activer que les primitives pdfTeX dans ce mode-là.
  • en activant les primitives, on peut si on veut (premier argument de tex.enableprimitives()) leur ajouter un préfixe (par exemple \LuaTeXprimitive au lieu de \primitive) pour éviter les conflits de noms avec des macros déjà utilisés dans différents paquets.

Pour plus de détails, voir les parties 2.1 et 4.1.14 d’un version récente du manuel LuaTeX.

Written by mpg

avril 20th, 2009 at 3:55

Posted in TeX et compagnie

Tagged with , ,

One Response to 'LuaTeX récent sur TeX Live, compléments'

  1. [...] à jour LuaTeX comme je l’expliquais précédemment (noter que l’étape supplémentaire décrite ici n’est plus nécessaire), pour tester Mark IV. Mais si l’on envisage d’utiliser [...]