Caro Enrico,
le cose stanno così: mentre la parte del codice che pensavo fosse più difficile da realizzare è un successo, quella più “banale” mi da i maggiori problemi.
Infatti vorrei formattare con il pacchetto numprint il valore contenuto nel registro fltpoint.
Questo lo faccio normalmente se carico il materiale direttamente nel registro di token, mentre non è possibile se l’append viene svolto con edef.
Dunque se utilizzo edef non posso passargli anche un \numprint{\mynumber}, mentre se utilizzo l’append diretto nel registro funziona il numprint ma il valore del registro diventa l’ultimo:
`%funziona senza numprint
\fpRegSet{myreg}{1000,85}\fpRegGet{myreg}{\mynumber}
\edef\temp{Il numero adesso vale: \mynumber}
\toks255=\expandafter{\temp}
\the\toks255
\fpRegSet{myreg}{8541256321,45}\fpRegGet{myreg}{\mynumber}
\edef\temp{\the\toks255 Mentre ora vale: \mynumber}
\toks255=\expandafter{\temp}
\the\toks255
`
`%funziona con numprint ma i registri mantengono tutti l'ultimo valore
\fpRegSet{myreg}{1000,85}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\mynumber}
\toks255={Il numero adesso vale: \numprint{\temp}}
\the\toks255
\fpRegSet{myreg}{8541256321,45}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\mynumber}
\toks255=\expandafter{\the\toks255 Mentre ora vale: \numprint{\temp}}
\the\toks255
`Credo sia necessario passare al piano B, ovvero l’utilizzo esclusivo dei registri tokens senza utilizzare edef.
Prova a guardare bene: quando esegui la prima assegnazione, il contenuto del registro è “Il numero adesso vale: \numprint{\temp}” che non ti serve a nulla. Non servirebbe a nulla nemmeno scrivere prima \edef\temp{\numprint{\mynumber}} perché di certo \numprint contiene svariate cose non espandibili.
`\def\MessaggioA{Il numero adesso vale: }
\def\MessaggioB{Mentre ora vale: }
\fpRegSet{myreg}{1000,85}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\noexpand\numprint{\mynumber}}
\toks@=\expandafter{\expandafter\MessaggioA\temp\\}
\the\toks@
\fpRegSet{myreg}{8541256321,45}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\noexpand\numprint{\mynumber}}
\toks@=\expandafter\expandafter\expandafter{%
\expandafter\the\expandafter\toks@\expandafter\MessaggioB\temp}
\the\toks@`
Naturalmente la cosa diventa improponibile se ci sono più messaggi di cui tener conto, per via della moltiplicazione degli \expandafter; si dovrebbe andare con l’uso di macro, ma senza sapere dove veramente vuoi arrivare è difficile dire con più precisione. Nota l’uso di un nome simbolico per \toks255 (che ti impone di usare \makeatletter); qui è meglio che con \toks255. In effetti l’uso di \edef può essere migliore:
`\def\MessaggioA{Il numero adesso vale: }
\def\MessaggioB{Mentre ora vale: }
\fpRegSet{myreg}{1000,85}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\noexpand\MessaggioA\noexpand\numprint{\mynumber}}
\toks@=\expandafter{\temp\\}
\the\toks@
\fpRegSet{myreg}{8541256321,45}
\fpRegGet{myreg}{\mynumber}
\edef\temp{\noexpand\MessaggioB\noexpand\numprint{\mynumber}}
\toks@=\expandafter\expandafter\expandafter{%
\expandafter\the\expandafter\toks@\temp}
\the\toks@`
Ciao
Enrico