OldClaudio” post=69442Antonio, credo che per te questa definizione logorroica (che Enrico troverà certamente il modo di ridurre a mezza riga 😉 ) ti possa servire per il tuo scopo particolare di mettere Febbraio 2011 in modo automatico ad ogni nuova edizione nel frontespizio del documento dove volevi metterlo:
`
\AtBeginDocument{{%% In italiano
\let~\space
\edef\Oggi{\today}
\def\GetOggiAnno#1 #2 #3!{#3}
\edef\OggiAnno{\expandafter\GetOggiAnno\Oggi!}
\def\GetOggiMese#1 #2 #3!{#2}
\edef\OggiMese{\expandafter\GetOggiMese\Oggi!}
\def\SplitOggi#1#2!{\uppercase{#1}#2\ \OggiAnno}
\xdef\myDocDate{\expandafter\SplitOggi\OggiMese!}}}
`Nel tuo frontespizio, nel punto che vuoi tu, scrivi semplicemente \myDocDate e non ci pensi più.
Spero che tu non voglia farlo con datetime, perché se ometti il giorno allora devi omettere anche le frazioni di giorno: ore, minuti, secondi, time zone e compagnia.
Non è tanto più breve, ma almeno ha il vantaggio che l’espansione di [tt]\MonthYear[/tt] è proprio “[tt]Febbraio 2012[/tt]” e non “[tt]\uppercase{f}ebbraio\ 2012[/tt]”.
`\AtBeginDocument{\begingroup
\def\extractMonthYear#1 #2#3\relax{\uppercase{\def\x{#2}}%
\edef\x{\endgroup\def\noexpand\MonthYear{\x#3}}\x}
\begingroup\let~\space\edef\x{\endgroup\noexpand\extractMonthYear\today\relax}\x}`
L’idea è la stessa di Claudio: espandere \today fino in fondo ed estrarre l’informazione che ci interessa, sapendo che l’espansione di \today è del tipo “22 febbraio 2012” (il metodo funziona solo per l’italiano, altre lingue vanno trattate in modo diverso). C’è il problema che fra giorno e mese viene messo ~ la cui espansione è una schifezza; perciò lo neutralizziamo dicendo [tt]\let~\space[/tt] prima di eseguire l’espansione completa. La definizione di [tt]\x[/tt] è, perciò
`\endgroup\extractMonthYear 22 febbraio 2012\relax`
e l’esecuzione di [tt]\x[/tt] chiude il gruppo iniziato prima di [tt]\let~\space[/tt].
Abbiamo prima definito [tt]\extractMonthYear[/tt] (nel gruppo, così sparirà) in modo che il primo argomento sia tutto ciò che va fino al primo spazio, il secondo sia il token successivo e il terzo tutto ciò che va fino a [tt]\relax[/tt]. Perciò il primo argomento è “22”, il secondo è “f”, il terzo è “ebbraio 2012”. Il lavoro di [tt]\extractMonthYear[/tt] è
1. definire [tt]\x[/tt] come il primo argomento, ma all’interno di [tt]\uppercase[/tt], così l’espansione di [tt]\x[/tt] è, oggi, “F”;
2. definire [tt]\x[/tt] in modo che la sua espansione sia [tt]\endgroup\def\MonthYear{Febbraio 2012}[/tt] (si noti che la [tt]\x[/tt] “dentro” viene espansa prima che sia assegnato il nuovo significato a [tt]\x[/tt] tramite [tt]\edef[/tt]);
3. eseguire [tt]\x[/tt], che quindi chiude il gruppo cominciato alla prima riga e a sua volta esegue [tt]\def\MonthYear{Febbraio 2012}[/tt].
Esercizio: contare quanti significati prende [tt]\x[/tt] durante tutta la faccenda. 🙂
Ciao
Enrico