Sujet : Re: \advance\toks 41{...}
De : gouailles (at) *nospam* gmail.com (Gérard Lemenn)
Groupes : fr.comp.text.texDate : 13. Oct 2023, 13:48:56
Autres entêtes
Message-ID : <dca2cab4-21f2-4003-bccf-5da7a33dbc81n@googlegroups.com>
References : 1 2
User-Agent : G2/1.0
Le samedi 7 octobre 2023 à 18:11:48 UTC+2, Texboy a écrit :
Le 07/10/2023 à 17:45, Gérard Lemenn a écrit :
Bonjour,
Quelqu'un a une référence ou une idée de pourquoi on ne peut pas écrire :
\advance\toks 41{<general text>}
ou
\advance\toks 41\toks 10
Ce qui évidemment serait une concaténation de chaînes de symboles.
Bien sûr on peut créer une macro \toks@advance qui permette cette syntaxe, mais l'idée serait de surtout de rendre plus rapide la concaténation de chaînes.
Bonne journée.
La primitive \advance s'emploie avec la syntaxe suivante
\advance<registre de compteur><[by]><nombre>
\advance<registre de dimension><[by]><dimension>
\advance<registre de ressort><[by]><ressort>
\advance<registre de muressort><[by]><muressort>
Pour la première, elle agit sur un compteur et l'incrémente de l'entier
signé <nombre>. Le fonctionnement est identique pour les autres syntaxes.
Elle ne peut pas agir sur un registre de tokens.
Si vous souhaitez une macro qui ajoute un <texte général> à un registre
de tokens, vous pouvez définir une macro comme par exemple :
\def\addtotoks#1#2{#1\expandafter{\the#1#2}}
Notez que l'argument #2 n'est pas développé et donc
\addtotoks{\toks41 }{\toks10 }
pourra ne pas fonctionner comme attendu.
Merci.
Mais on pourrait imaginer une extension de la primitive \advance
de sorte que :
\advance\toks 0\toks 10
concatène les tokens de façon beaucoup plus rapide que :
\toks 0=\expandafter {\the\toks \expandafter\z@ \the\toks 10}
car avec cette écriture, le contenu de \toks 0 est relu (comme un argument)
pour assigner à nouveau \toks 0.
Ce qui est long dans le cas ou \toks 0 contient une longue chaîne.
De plus, ça me paraît esthétique car \advance
pourrait alors s'appliquer à tous les registres de eTeX.
Bonne journée.