Re: Solita difficoltà con i gruppi del tabular

#24293
Up
0
Down
::

… speravo “implicitamente” che funzionasse perchè non riesco a far digerire i token giusti al registro in quest’altro caso:
`\fpRegSet{myreg}{1000}
\fpRegGet{myreg}{\mynumber}
\toks255=\expandafter{Il numero adesso vale: \expandafter\space\number\mynumber\\}
\fpRegSet{myreg}{50000}
\fpRegGet{myreg}{\mynumber}
\toks255=\expandafter{\the\toks255 mentre adesso siamo a: \expandafter\space\number\mynumber}
\the\toks255
`
utilizzo il pacchetto fltpoint salvando un valore numerico nel registro denominato myreg, dal quale posso ricavarne il valore depositandolo in un comando (fantasiosamente nominato come \mynumber).
Se compilato il codice produce la stessa situazione precedente, ovverro nel registro viene salvato il token complesso di \mynumber e quindi scaricare i token con \the\toks255 fa apparire solo l’ultimo valore del registro quello attuale.
Come posso fare per inserire invece i token relativi al valore che \mynumber ha in quel momento?

Con il codice
`\toks255=\expandafter{Il numero adesso vale: \expandafter\space\number\mynumber\\}`
il primo \expandafter non fa assolutamente nulla, perché cerca di espandere il token “I” che non è espandibile. Perciò dopo quell’istruzione il registro \toks255 contiene esattamente la lista che hai dato tra le graffe. Qui ci vuole \edef:
`\fpRegSet{myreg}{1000}
\fpRegGet{myreg}{\mynumber}
\edef\temp{Il numero adesso vale: \mynumber\\}
\toks255=\expandafter{\temp}
\fpRegSet{myreg}{50000}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\the\toks255 mentre adesso siamo a: \mynumber}
\temp`
Si può fare anche con i registri token, ma occorre inserire in macro quei testi fissi e usare un bel numero di \expandafter.

Ps. perchè invece questo funziona?
`\newcommand\posizione{}

\renewcommand\posizione{primo}

\toks255=\expandafter{\posizione}
\the\toks255

\renewcommand\posizione{ultimo}
\toks255=\expandafter{\the\toks255 \posizione}
\the\toks255`

Perché quando scrivi \the\toks255 la lista viene liberata; dopo \toks255=\expandafter{\posizione} contiene “primo”; alla seconda assegnazione contiene “primo\posizione” e quindi quando il registro viene usato con \the la macro \posizione viene espansa e ciò che ottieni in stampa è “primoultimo”.

Ciao
Enrico

Go to top