Comment prendre la main sur un registre de liste d’unités lexicales ?#
Manipuler un registre de liste d’unités lexicales utilisé par d’autres commandes
peut parfois être nécessaire. Par exemple, lorsque vous voulez ajouter quelque chose
à un tel registre du système (\output
ou \every*
),
mais que vous savez que d’autres commandes utilisent également ce registre.
C’est un cas fréquent avec \everypar
car LaTeX change \everypar
à chaque fois que l’on touche à quelque chose.
La technique suivante, due à David Kastrup, fait ce dont vous avez besoin, et permet à une autre extension d’obtenir un résultat identique :
\let\monpkg@@everypar\everypar
\newtoks\monpkg@everypar
\monpkg@everypar\expandafter{\the\everypar}
\monpkg@@everypar{\monpkg@ajout\the\monpkg@everypar}
\def\monpkg@ajout{%
⟨choses à faire au début du registre⟩%
}
\let\everypar\monpkg@everypar
Comme vous pouvez le voir, ce code pour notre extension monpkg :
crée un alias pour le registre système
\everypar
(figé dans n’importe quel environnement, et continuant à utiliser l’original) ;crée un registre pour récupérer
\everypar
et l’initialise avec le contenu actuel de\everypar
;définit l’ancien
\everypar
pour qu’il exécute son propre code supplémentaire, ainsi que le contenu de son propre registre de jetons ;définit la commande
\monpkg@ajout
pour le code supplémentaire ; etfait pointer le registre
\everypar
vers le nouveau registre.
Les noms de la forme \monpkg@...
sont recommandés pour les noms internes des commandes des extensions LaTeX,
c’est pourquoi cet exemple utilise des macros de cette forme.
Sources