egreg9″ post=69456
Mi resta una (forte) domanda: perché non posso avere ~ a delimitare #1 e #2 nella definizione di [tt]\extractMonthYear[/tt]?
Puoi farlo sostituendo [tt]\let~\relax[/tt] a [tt]\let~\space[/tt] e definendo
`\def\extractMonthYear#1~#2#3\relax{…% il resto esattamente come prima`
Non trovi che sia carina? Domanda: perché quel [tt]\let~\relax[/tt] non rovina tutta la faccenda?Ciao
Enrico
Interessante: dato che [tt]\relax[/tt] non è espandibile, può essere usato con un [tt]\let[/tt] per rendere non espandibile un altro token!
Se dico giusto, la faccenda continua a funzionare perché in quel modo rendo ~ non espandibile. Dunque, sopravvive all’espansione di [tt]\today[/tt] e il [tt]\def[/tt] se lo ritrova tal quale come delimitatore tra gli argomenti (nemmeno [tt]\def[/tt] espande i token che incontra come delimitatori). Sarebbe del tutto equivalente ad avere
`\providecommand*% o simile
\today{23\noexpand~febbraio 2012}
…
\def\extractMonthYear#1~#2#3\relax{…% il resto esattamente come prima`
La mia domanda nascondeva anche un altro problema: perché non posso avere ~ a delimitare #1 e #2 nella definizione di [tt]\extractMonthYear[/tt] dopo aver cambiato a 11 il codice di categoria di ~?
La risposta naturalmente è che, oltre a dover mettere `\catcode`\~=11` al di fuori anche di [tt]\AtBeginDocument[/tt], [tt]\today[/tt] è già stato digerito da un bel pezzo, con ~ come carattere attivo, ed è impossibile cambiarglielo ora.
Anche se si applica solo (principalmente) all’italiano, bellina questa discussione. 🙂