X-Received: by 2002:a05:622a:8b:b0:419:b54d:99b4 with SMTP id o11-20020a05622a008b00b00419b54d99b4mr487824qtw.13.1697202781634; Fri, 13 Oct 2023 06:13:01 -0700 (PDT) X-Received: by 2002:a05:6808:3023:b0:3a7:45f6:4b3f with SMTP id ay35-20020a056808302300b003a745f64b3fmr13024328oib.3.1697202781452; Fri, 13 Oct 2023 06:13:01 -0700 (PDT) Path: ...!news-out.google.com!nntp.google.com!postnews.google.com!google-groups.googlegroups.com!not-for-mail Newsgroups: fr.comp.text.tex Date: Fri, 13 Oct 2023 06:13:01 -0700 (PDT) In-Reply-To: Injection-Info: google-groups.googlegroups.com; posting-host=102.129.143.77; posting-account=NutYcAoAAABAtPQ7tqrQXGbe3DyttJ9- NNTP-Posting-Host: 102.129.143.77 References: <564ae975-a378-42f5-8048-691605fdeea5n@googlegroups.com> User-Agent: G2/1.0 MIME-Version: 1.0 Message-ID: <9b7345d6-74ba-4cad-9ca4-260737d96c3bn@googlegroups.com> Subject: Re: \advance\toks 41{...} From: =?UTF-8?Q?G=C3=A9rard_Lemenn?= Injection-Date: Fri, 13 Oct 2023 13:13:01 +0000 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Bytes: 6230 Lines: 128 Le vendredi 13 octobre 2023 =C3=A0 15:02:35 UTC+2, G=C3=A9rard Lemenn a =C3= =A9crit=C2=A0: > Le vendredi 13 octobre 2023 =C3=A0 14:48:57 UTC+2, G=C3=A9rard Lemenn a = =C3=A9crit :=20 > > Le samedi 7 octobre 2023 =C3=A0 18:11:48 UTC+2, Texboy a =C3=A9crit := =20 > > > Le 07/10/2023 =C3=A0 17:45, G=C3=A9rard Lemenn a =C3=A9crit :=20 > > > > Bonjour,=20 > > > >=20 > > > > Quelqu'un a une r=C3=A9f=C3=A9rence ou une id=C3=A9e de pourquoi on= ne peut pas =C3=A9crire :=20 > > > >=20 > > > > \advance\toks 41{}=20 > > > > ou=20 > > > > \advance\toks 41\toks 10=20 > > > >=20 > > > > Ce qui =C3=A9videmment serait une concat=C3=A9nation de cha=C3=AEne= s de symboles.=20 > > > >=20 > > > > Bien s=C3=BBr on peut cr=C3=A9er une macro \toks@advance qui permet= te cette syntaxe, mais l'id=C3=A9e serait de surtout de rendre plus rapide = la concat=C3=A9nation de cha=C3=AEnes.=20 > > > >=20 > > > > Bonne journ=C3=A9e.=20 > > > La primitive \advance s'emploie avec la syntaxe suivante=20 > > >=20 > > > \advance<[by]>=20 > > > \advance<[by]>=20 > > > \advance<[by]>=20 > > > \advance<[by]>=20 > > >=20 > > > Pour la premi=C3=A8re, elle agit sur un compteur et l'incr=C3=A9mente= de l'entier=20 > > > sign=C3=A9 . Le fonctionnement est identique pour les autres = syntaxes.=20 > > >=20 > > > Elle ne peut pas agir sur un registre de tokens.=20 > > >=20 > > > Si vous souhaitez une macro qui ajoute un = =C3=A0 un registre=20 > > > de tokens, vous pouvez d=C3=A9finir une macro comme par exemple :=20 > > >=20 > > > \def\addtotoks#1#2{#1\expandafter{\the#1#2}}=20 > > >=20 > > > Notez que l'argument #2 n'est pas d=C3=A9velopp=C3=A9 et donc=20 > > >=20 > > > \addtotoks{\toks41 }{\toks10 }=20 > > >=20 > > > pourra ne pas fonctionner comme attendu.=20 > > Merci.=20 > > Mais on pourrait imaginer une extension de la primitive \advance=20 > > de sorte que :=20 > > \advance\toks 0\toks 10=20 > >=20 > > concat=C3=A8ne les tokens de fa=C3=A7on beaucoup plus rapide que :=20 > > \toks 0=3D\expandafter {\the\toks \expandafter\z@ \the\toks 10}=20 > >=20 > > car avec cette =C3=A9criture, le contenu de \toks 0 est relu (comme un = argument)=20 > > pour assigner =C3=A0 nouveau \toks 0.=20 > >=20 > > Ce qui est long dans le cas ou \toks 0 contient une longue cha=C3=AEne.= =20 > >=20 > > De plus, =C3=A7a me para=C3=AEt esth=C3=A9tique car \advance=20 > > pourrait alors s'appliquer =C3=A0 tous les registres de eTeX.=20 > >=20 > > Bonne journ=C3=A9e. > Pour =C3=AAtre plus pr=C3=A9cis :=20 > \toks 0=3D\toks 10=20 >=20 > est ultra rapide, car alors \toks 0 pointe sur la m=C3=AAme chaine que \t= oks 10=20 > Il n'y a pas de copie du contenu de \toks 10 dans \toks 0.=20 > On le v=C3=A9rifie facilement avec :=20 > \loggingall \toks 0=3D\toks 10\toks 0=3D\toks 10=20 >=20 > La deuxi=C3=A8me affectation signale : "reassigning toks 0"=20 > ce qui signifie qu'eTeX ne fait rien, \toks 0 pointant d=C3=A9j=C3=A0=20 > sur la m=C3=AAme zone m=C3=A9moire que \toks 10.=20 >=20 > Les tokens registers sont extr=C3=AAmement pratiques pour pleins de raiso= ns,=20 > et notamment aussi parce que :=20 > \edef\macro {\the\toks 0}=20 > est extr=C3=AAmement rapide, m=C3=AAme si \the\toks 0 est tr=C3=A8s long,= car TeX=20 > ne regarde pas dans le contenu de \toks 0.=20 >=20 > On le v=C3=A9rifie ais=C3=A9ment en mettant par exemple une s=C3=A9quence= \outer dans \toks 0 :=20 > \loggingall=20 > \toks 0=3D{\outermacro }=20 > \outer\def\outermacro {}=20 > \edef\macro {\the\toks 0}% no problem here: TeX does not look inside \tok= s 0=20 > \show\macro=20 >=20 > Bon weekend. Pour finir voici un petit code d'impl=C3=A9mentation de \advance pour les t= okens sous le nom de \toks@advance. Bien s=C3=BBr, on ne peut pas pr=C3=A9fixer par \global ! Et on a besoin d'un token auxilliaire pour stocker la chaine =C3=A0 ajouter= .. % ------------------------------------------ \def\toks@advance {\expandafter \toks@adva \romannumeral-`\q }% \def\toks@adva {\afterassignment \toks@advb \let\@let@token =3D}% \def\toks@advb {\ifx \toks\@let@token \begingroup \afterassignment\toks@advc \count@ =3D% \else \afterassignment\toks@advd \toks@advtok \fi }% \toks@advb \def\toks@advc {\expandafter \endgroup \expandafter \toksdef \expandafte= r \@let@token \the\count@ \afterassignment\toks@advd \toks@advtok }% \toks@advc \def\toks@advd {\@let@token =3D\expandafter {\the\expandafter\@let@token= \the\toks@advtok }}% % ------------------------------------------- Allez. Bon weekend again !