Re: \advance\toks 41{...}

Liste des GroupesRevenir à fct tex 
Sujet : Re: \advance\toks 41{...}
De : florestan.chervet (at) *nospam* gmail.com (Florent CHERVET)
Groupes : fr.comp.text.tex
Date : 28. Oct 2023, 22:59:55
Autres entêtes
Message-ID : <0f492a94-b10c-4658-8d3f-303a785b1b76n@googlegroups.com>
References : 1 2 3 4 5 6
User-Agent : G2/1.0
Le samedi 14 octobre 2023 à 19:27:28 UTC+2, Texboy a écrit :
Le 13/10/2023 à 15:13, Gérard Lemenn a écrit :
 
Pour être plus précis :
\toks 0=\toks 10
 
est ultra rapide, car alors \toks 0 pointe sur la même chaine que \toks 10
Il n'y a pas de copie du contenu de \toks 10 dans \toks 0.
Ah ?
 
\toks0={A} \toks10={B}
\toks0=\toks10
\toks10={C}
\showthe\toks0 % donne B et non pas C
Et on a besoin d'un token auxilliaire pour stocker la chaine à ajouter.
% ------------------------------------------
\def\toks@advance {\expandafter \toks@adva \romannumeral-`\q }%
\def\toks@adva {\afterassignment \toks@advb \let\@let@token =}%
\def\toks@advb {\ifx \toks\@let@token \begingroup
\afterassignment\toks@advc \count@ =%
\else \afterassignment\toks@advd \toks@advtok \fi
}% \toks@advb
\def\toks@advc {\expandafter \endgroup \expandafter \toksdef \expandafter \@let@token \the\count@
\afterassignment\toks@advd \toks@advtok
}% \toks@advc
\def\toks@advd {\@let@token =\expandafter {\the\expandafter\@let@token \the\toks@advtok }}%
% -------------------------------------------
Oui. Pour le sucre syntaxique et faire la distinction entre
\toks<nombre> et \<toksname>, on peut aussi utiliser \meaning et alléger
un peu le code. Ce qui, à mon avis, ne doit pas modifier de façon
significative la vitesse d'exécution (pas testé)...
 
\newtoks\tmptoks \newcount\tmpcount
\def\toksadd{\expandafter\toksaddA\meaning}
\expandafter\def\expandafter\toksaddA\string\toks{\afterassignment\toksaddB\tmpcount}
\def\toksaddB{\afterassignment\toksaddC\tmptoks= }
\def\toksaddC{\toks\tmpcount\expandafter{\the\toks\expandafter\tmpcount\the\tmptoks}}

Mon code marcherait même si on écrit :
    \toks@advance \macro
où \macro commence par : \toks@
Alors que votre code non.

Mais on peut bien sûr passer par \meaning si on veut, mais il faut
le \romannumeral-`\q avant de s'occuper du \meaning.

Donc en fait, hormis \global impossible, mon code s'approche le plus de la syntaxe de TeX.

Bref, bon weekend !


Date Sujet#  Auteur
7 Oct 23 * Re: \advance\toks 41{...}7Texboy
13 Oct 23 `* Re: \advance\toks 41{...}6Gérard Lemenn
13 Oct 23  `* Re: \advance\toks 41{...}5Gérard Lemenn
13 Oct 23   `* Re: \advance\toks 41{...}4Gérard Lemenn
14 Oct 23    `* Re: \advance\toks 41{...}3Texboy
28 Oct 23     +- Re: \advance\toks 41{...}1Florent CHERVET
28 Oct 23     `- Re: \advance\toks 41{...}1Florent CHERVET

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal