Ciao ragazzi,
mi è venuta l’idea di fare una macro (più per esercizio) la cui espansione è l’ultimo token non più espandibile dell’argomento. Per esempio:
`\newcommand*\ciao{ciao}
\lastof{\ciao} o`Avevo pensato a questo codice:
`
\def\lastof#1{\begingroup\last@f{#1}\endgroup}
\def\last@f#1{%
\edef\next{\expandafter\@gobble#1}%
\ifx\next\@empty
#1\else
\last@f\next
\fi
}
` ma non va. Mentre funziona il seguente (ipotizzando che l’argomento iniziale non sia vuoto):
`
\def\lastof#1{\begingroup\last@f{#1}\endgroup}
\def\last@f#1{%
\edef\next{\expandafter\@gobble#1}%
\ifx\next\@empty
#1\else
\expandafter\last@f\expandafter{\next}%
\fi
}
`Quello che mi chiedo… perché il primo non funziona? L’espansione effuettuata dagli \expandafter non dovrebbe essere “inutili” dato che c’è l’\edef? 😯 😕
Intanto la macro \last@f è inutile, non c’è alcun pericolo nel ridefinire \next; puoi mettere il codice direttamente in \lastof. Perché dici che il primo non funziona? Non mi pare di avere osservato differenze.
Ciao
Enrico