X-Received: by 2002:a05:622a:1982:b0:410:9089:6b5e with SMTP id u2-20020a05622a198200b0041090896b5emr457453qtc.3.1697202153952; Fri, 13 Oct 2023 06:02:33 -0700 (PDT) X-Received: by 2002:a05:6870:bf97:b0:1e9:9b7f:a04f with SMTP id av23-20020a056870bf9700b001e99b7fa04fmr1975827oac.6.1697202153337; Fri, 13 Oct 2023 06:02:33 -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:02:33 -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: Subject: Re: \advance\toks 41{...} From: =?UTF-8?Q?G=C3=A9rard_Lemenn?= Injection-Date: Fri, 13 Oct 2023 13:02:33 +0000 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Bytes: 4847 Lines: 97 Le vendredi 13 octobre 2023 =C3=A0 14:48:57 UTC+2, G=C3=A9rard Lemenn a =C3= =A9crit=C2=A0: > 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 n= e 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=AEnes = de symboles.=20 > > >=20 > > > Bien s=C3=BBr on peut cr=C3=A9er une macro \toks@advance qui permette= 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 d= e l'entier=20 > > sign=C3=A9 . Le fonctionnement est identique pour les autres sy= ntaxes.=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. > 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 ar= gument)=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 : \toks 0=3D\toks 10 est ultra rapide, car alors \toks 0 pointe sur la m=C3=AAme chaine que \tok= s 10 Il n'y a pas de copie du contenu de \toks 10 dans \toks 0. On le v=C3=A9rifie facilement avec : \loggingall \toks 0=3D\toks 10\toks 0=3D\toks 10 La deuxi=C3=A8me affectation signale : "reassigning toks 0" ce qui signifie qu'eTeX ne fait rien, \toks 0 pointant d=C3=A9j=C3=A0 sur la m=C3=AAme zone m=C3=A9moire que \toks 10. Les tokens registers sont extr=C3=AAmement pratiques pour pleins de raisons= , et notamment aussi parce que : \edef\macro {\the\toks 0} est extr=C3=AAmement rapide, m=C3=AAme si \the\toks 0 est tr=C3=A8s long, c= ar TeX ne regarde pas dans le contenu de \toks 0. On le v=C3=A9rifie ais=C3=A9ment en mettant par exemple une s=C3=A9quence \= outer dans \toks 0 : \loggingall \toks 0=3D{\outermacro } \outer\def\outermacro {} \edef\macro {\the\toks 0}% no problem here: TeX does not look inside \= toks 0 \show\macro Bon weekend.