Ma non è più corretto scrivere così?
`
\makeatletter
\newtoks\@authortoks
\@authortoks={\@empty}
\newcommand{\@authorcomma}{, }
\let\orig@author\author
\renewcommand\author[2]{%
\@authortoks\expandafter{\the\@authortoks#1\footnotemark[#2]\space\@authorcomma}%
}
\newtoks\@addresstoks
\newcommand{\address}[2]{%
\@addresstoks\expandafter{\the\@addresstoks\footnotetext[#1]{#2}}}
\let\orig@maketitle\maketitle
\def\maketitle{%
\orig@author{\the\@authortoks}
\begingroup
\renewcommand{\thefootnote}{\fnsymbol{footnote}}%
\orig@maketitle
\the\@addresstoks
\endgroup}
\makeatother`
No, così hai una virgola anche dopo l’ultimo.
Ma mi spieghi meglio cosa fanno \@authortoks e \the\@authortoks dentro la ridefinizione di author e quale è la loro differenza?
\@authortoks è il nome di un registro token, \the\@authortoks ne estrae il contenuto. Per assegnare un valore a un registro token si scrive
`
dove il carattere = è opzionale. Siccome le regole di TeX prevedono che
`\@authortoks\expandafter{\the\@authortoks
la presenza di \@authortoks impone l’espansione di \expandafter, la quale causa l’espansione del token successivo a quello che segue \expandafter, quindi \the; così il contenuto di \@authortoks viene immesso nella lista di token tra le graffe e si ottiene il risultato voluto.
Un po’ diverso se si desiderasse aggiungere qualcosa all’inizio della lista. Nella macro che segue, #1 è la lista di token da aggiungere, #2 il nome di un registro token.
`\def\addinfrontof#1#2{%
\toks0={#1}%
#2\expandafter{\the\toks0\expandafter\space\the#2}}`
È interessante capire perché funziona. Dopo aver caricato la lista nel registro token temporaneo \toks0, il passo successivo è come prima. Con una differenza: quando \expandafter causa l’espansione di \the, questo trova \toks e la regola vuole che \toks sia seguito da un numero. Quando TeX è in cerca di un numero trova le cifre espandendo i token finché ne trova uno inespandibile che non sia una cifra. Perciò qui, trovando uno 0, espande il token successivo che è \expandafter, il quale provoca quella del secondo \the, il quale estrae il contenuto del registro #2. Il token \space, alla fine, sparisce perché segue una costante. WOW.
Ciao
Enrico
(Nota: ho modificato leggermente la macro perché, se per caso il registro token #2 avesse un contenuto che comincia con un numero si sarebbe nei pasticci.)