Prof.,
Piccola spiegazione.
Relativamente al punto hai messo tre espansioni perché \phantom dà problemi o c’è dell’altro? E perché solo al punto e non anche sopra?
Infatti se ne metti una se ne mangia un bel po’, mentre se ne metti due dà pure un errore.
Mi spieghi la faccenda?
Inoltre ti faccio notare che quel \expandafter prima di \test è pleonastico.
È vero, l’ultimo \expandafter non serve, ma vedi più avanti.
Primo caso: “\ifx0\test” vero. Le espansioni sono, scritta su righe successive
`\expandafter\phzero\else
\phzero
\phantom{0}\sbianca`
e a questo punto \sbianca guarda il token che segue prendendolo come argomento.
Secondo caso: “\ifx0\test” falso. Ora rimangono tutti i token dal primo \else (escluso) all’ultimo \fi (incluso):
`\ifx.\test\expandafter\expandafter\expandafter\phdot\else\test\fi\fi`
Se questo condizionale è vero nella lista di token rimane
`\expandafter\expandafter\expandafter\phdot\else\fi`
Nota che adesso TeX non sta valutando i condizionali, sta solo eseguendo le espansioni. Il primo \expandafter espande il terzo che espande \else (la cui espansione è vuota). La lista che rimane è
`\expandafter\phdot\fi`
e \expandafter espande \fi, togliendolo di mezzo; rimane \phdot e siamo come prima.
Se, per finire, il test interno è falso, ciò che rimane è quanto sta fra \else (escluso) e \fi
quindi siamo a posto anche qui:
`\test\fi\fi`
Il token \test equivale a ciò che è stato “mangiato” come argomento da \sbianca. Ci vorrebbero in effetti tre \expandafter anche davanti a \test, nel caso fosse plausibile che il token sia una macro con argomenti (nell’applicazione pensata non è così), ma meglio correggere.
Ciao
Enrico