Discussione:
Non espandere caratteri attivi in \scantokens
(troppo vecchio per rispondere)
m***@gmail.com
2014-03-07 14:49:19 UTC
Permalink
Scusatemi la domanda forse un po’ stupida, ma la mia conoscenza delle regole e dell’ordine d’espansione non è per niente completa.

Devo scrivere (in Plain) una macro che prende nell’argomento una lista di token, poi cambia certi \catcode, «rilegge» con \scantokens l’argomento e lo passa, in forma di un’altra lista di tokens, a un’altra macro. La ragione di questo (e anche il problema) è che alcuni caratteri della lista sono di categoria 13, quando \scantokens sta rileggendoli. E mi serve che nella lista finale (quella che si passa all’altra macro) i caratteri attivi siano NON ESPANSI.

Cioè:

{\catcode`\b=13\relax
\def b{haha}}

\def\macro#1{%
{\catcode`\b=13\relax
\laltramacro{\scantokens{#1}}
}}

Voglio che, dopo di usare \macro{abc}, \laltramacro ottenga {ab₁₃c} e no {ahahac}.

Penso che sia la riga
\laltramacro{\scantokens{#1}}
che va scritta in modo diverso, forse con alcuni \expandafter, \unexpanded, utilizzando toks registers, \edef ecc. Dopo di perdere due giorni provandolo in varie combinazioni mi rivolgo a questo gruppo.

Vi ringrazio in anticipo di ogni aiuto

Tomáš
Enrico Gregorio
2014-03-08 00:20:36 UTC
Permalink
Scusatemi la domanda forse un po¹ stupida, ma la mia conoscenza delle regole
e dell¹ordine d¹espansione non è per niente completa.
Devo scrivere (in Plain) una macro che prende nell¹argomento una lista di
token, poi cambia certi \catcode, «rilegge» con \scantokens l¹argomento e lo
passa, in forma di un¹altra lista di tokens, a un¹altra macro. La ragione di
questo (e anche il problema) è che alcuni caratteri della lista sono di
categoria 13, quando \scantokens sta rileggendoli. E mi serve che nella lista
finale (quella che si passa all¹altra macro) i caratteri attivi siano NON
ESPANSI.
{\catcode`\b=13\relax
\def b{haha}}
\def\macro#1{%
{\catcode`\b=13\relax
\laltramacro{\scantokens{#1}}
}}
Voglio che, dopo di usare \macro{abc}, \laltramacro ottenga {ab??c} e no
{ahahac}.
Penso che sia la riga
\laltramacro{\scantokens{#1}}
che va scritta in modo diverso, forse con alcuni \expandafter, \unexpanded,
utilizzando toks registers, \edef ecc. Dopo di perdere due giorni provandolo
in varie combinazioni mi rivolgo a questo gruppo.
Vi ringrazio in anticipo di ogni aiuto
Scusa, ma non capisco il problema. Puoi provare a spiegarti meglio?

Ciao
Enrico
T.K.
2014-03-10 09:37:44 UTC
Permalink
Forse il malinteso è stato causato dai due punti interrogativi… Scusa,
questa volta ho usato Google groups per inviare la domanda e non ho
controllato il risultato. Il {ab??c} c’è stato messo da GoogleGroups
invece di {ab₁₃c} (oppure (ab$_{13}$c}) che voleva dire «{a, b di
categoria 13, c}».

Uso lo \scantokens per passare l’argomento di \macro al \laltramacro con
la categoria di alcuni caratteri cambiata a 13. Voglio che i caratteri
attivi siano presentati a \laltramacro come tali e non come il risultato
della loro espansione.

Tomáš
Post by Enrico Gregorio
Scusatemi la domanda forse un po¹ stupida, ma la mia conoscenza delle regole
e dell¹ordine d¹espansione non è per niente completa.
Devo scrivere (in Plain) una macro che prende nell¹argomento una lista di
token, poi cambia certi \catcode, «rilegge» con \scantokens l¹argomento e lo
passa, in forma di un¹altra lista di tokens, a un¹altra macro. La ragione di
questo (e anche il problema) è che alcuni caratteri della lista sono di
categoria 13, quando \scantokens sta rileggendoli. E mi serve che nella lista
finale (quella che si passa all¹altra macro) i caratteri attivi siano NON
ESPANSI.
{\catcode`\b=13\relax
\def b{haha}}
\def\macro#1{%
{\catcode`\b=13\relax
\laltramacro{\scantokens{#1}}
}}
Voglio che, dopo di usare \macro{abc}, \laltramacro ottenga {ab??c} e no
{ahahac}.
Penso che sia la riga
\laltramacro{\scantokens{#1}}
che va scritta in modo diverso, forse con alcuni \expandafter, \unexpanded,
utilizzando toks registers, \edef ecc. Dopo di perdere due giorni provandolo
in varie combinazioni mi rivolgo a questo gruppo.
Vi ringrazio in anticipo di ogni aiuto
Scusa, ma non capisco il problema. Puoi provare a spiegarti meglio?
Ciao
Enrico
Enrico Gregorio
2014-03-10 18:09:07 UTC
Permalink
Forse il malinteso è stato causato dai due punti interrogativiŠ Scusa,
questa volta ho usato Google groups per inviare la domanda e non ho
controllato il risultato. Il {ab??c} c¹è stato messo da GoogleGroups
invece di {ab??c} (oppure (ab$_{13}$c}) che voleva dire «{a, b di
categoria 13, c}».
Uso lo \scantokens per passare l¹argomento di \macro al \laltramacro con
la categoria di alcuni caratteri cambiata a 13. Voglio che i caratteri
attivi siano presentati a \laltramacro come tali e non come il risultato
della loro espansione.
Tomá?
Fino alla questione del pedice sì. Per il resto,
spiacente, no. Ti prego, non fare top-posting.

Ciao
Enrico

Loading...