Re: plain: apertura e chiusura implicita di un registro token.

#83314
Up
0
Down
::

Sam Qasbah” post=82658Salve a tutti.

Desidero scrivere i comandi di un ambiente che raccoglie tokens e che li salva in un apposito registro.

Alcuni dei miei ultimi esperimenti sono
`
\newtoks\toka

\edef\opentok#1{\noexpand#1=\bgroup} % dovrebbe aprire il registro token
\edef\closetok{\iffalse{\else}\fi} % dovrebbe chiudere il registro token

\opentok\toka
Una lista di tokens che finisce con una i
\closetok

\the\toka
\bye
% Il file di log dice:
% ! Too many }'s.
% l.13 \edef\closetok{\iffalse{\else}\fi}
`
ci riprovo
`
\newtoks\toka

\edef\opentok#1{\noexpand#1=\iftrue{\else}\fi} % invece di usare \bgroup
\edef\closetok{\iffalse{\else}\fi}

\opentok\toka
Una lista di tokens che finisce con una i
\closetok

\the\toka
\bye
% ! Undefined control sequence.
% l.13 \edef\closetok
% {\iffalse{\else}\fi}
`

L’ultimo messaggio di errore è davvero criptico e non riesco ad andare avanti.

Esiste un modo per riuscirci?

No. Le liste di token passate a [tt]\toks[/tt], [tt]\uppercase[/tt], [tt]\lowercase[/tt] e qualche altro comando primitivo possono cominciare con una graffa implicita, ma devono terminare con una esplicita. Siccome TeX non espande in quelle situazioni, anche [tt]\iffalse{\else}\fi[/tt] non può funzionare.

Nota che
`\edef\opentok#1{\noexpand#1=\bgroup} % dovrebbe aprire il registro token`
è del tutto equivalente a
`\def\opentok#1{#1=\bgroup} % dovrebbe aprire il registro token`
e effettivamente apre la lettura della lista di token. Ma non puoi finirla che con [tt]}[/tt].

Invece
`\edef\closetok{\iffalse{\else}\fi} % dovrebbe chiudere il registro token`
è illegale, nel senso che l’espansione di [tt]\iffalse[/tt] produce la graffa che corrisponde a quella aperta e ne rimane una chiusa di troppo.

Ciao
Enrico

Go to top