Re: Iniziale maiuscola per \monthname

#70205
Up
0
Down
::


Grazie mille, Claudio e Enrico!

Tentiamo lo sforzo ermeneutico sul codice di Enrico: 🙂
`\AtBeginDocument{%
\begingroup
% giorno / spazio / prima lettera del mese / tutto fino a \relax
\def\extractMonthYear#1 #2#3\relax{%`
Con la [tt]\def[/tt]inizione dentro [tt]\uppercase[/tt], [tt]\x[/tt] contiene solo la prima lettera del mese in maiuscolo
` \uppercase{\def\x{#2}}%`
L'[tt]\edef[/tt] esterno prepara la definizione di [tt]\MonthYear[/tt] come “Febbraio 2012”: con [tt]\x#3[/tt] unisce la prima lettera del mese in maiuscolo e il resto fino a [tt]\relax[/tt]. L'[tt]\endgroup[/tt] farà sparire [tt]\extractYearMonth[/tt] ([tt]\endgroup[/tt] ed [tt]\edef[/tt] non sono espandibili).
` \edef\x{\endgroup\edef\noexpand\MonthYear{\x#3}}%
\x`
A questo punto finalmente [tt]\MonthYear[/tt] vale “Febbraio 2012”.
` }
\begingroup`
Siccome [tt]\today[/tt] separa giorno e mese con ~, lo rendiamo equivalente a uno spazio:
` \let~\space`
L'[tt]\edef[/tt] seguente espande [tt]\today[/tt] e prepara la “chiamata” a [tt]\extractMonthYear[/tt]…
` \edef\x{\endgroup\noexpand\extractMonthYear\today\relax}%
\x % …che avviene qui!
}`

Mi resta una (forte) domanda: perché non posso avere ~ a delimitare #1 e #2 nella definizione di [tt]\extractMonthYear[/tt]?


Edit:
Mi hai già risposto nel messaggio precedente (che ho visto solo ora :)):

egreg9″ post=69444…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.

Grazie!

Ciao,
Antonio

Go to top