Deutsch   English   Français   Italiano  
<ugej1s$3v7g2$1@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!3.us.feeder.erje.net!3.eu.feeder.erje.net!feeder.erje.net!eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Texboy <tex.boy@teaser.fr>
Newsgroups: fr.comp.text.tex
Subject: Re: \advance\toks 41{...}
Date: Sat, 14 Oct 2023 19:27:24 +0200
Organization: A noiseless patient Spider
Lines: 40
Message-ID: <ugej1s$3v7g2$1@dont-email.me>
References: <564ae975-a378-42f5-8048-691605fdeea5n@googlegroups.com>
 <ufs001$2dann$1@dont-email.me>
 <dca2cab4-21f2-4003-bccf-5da7a33dbc81n@googlegroups.com>
 <a9880a47-f6ea-4097-ad43-5044b830f49fn@googlegroups.com>
 <9b7345d6-74ba-4cad-9ca4-260737d96c3bn@googlegroups.com>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
Injection-Date: Sat, 14 Oct 2023 17:27:24 -0000 (UTC)
Injection-Info: dont-email.me; posting-host="1f5dea177832168e1036da3951360e34";
	logging-data="4169218"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX18e52b+lUvvvlNIynUtzzprnDY6+cL4yGs="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:rhqBzL0LiN0L5a/44nopPxCcFxU=
Content-Language: fr
In-Reply-To: <9b7345d6-74ba-4cad-9ca4-260737d96c3bn@googlegroups.com>
Bytes: 3001

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}}