Re: simulare \thanks con molti \author nel documento [risolto]

#19352
Up
0
Down
::

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 sia seguito da una parentesi graffa aperta, TeX espande i token successivi al nome finché trova una graffa aperta. Quindi con
`\@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.)

Go to top