Re: Ridefinire \today senza datetime (ma con babel!)

#49408
Up
0
Down
::

Ciao a tutti,
ho un dubbio da alcuni anni, di recente è riemerso e vorrei risolverlo.

In un documento italiano, la data corrente, fornita dalla macro «\today», viene resa nel seguente modo:

`7 settembre 2010
`
mi è spesso utile modificarla in modo tale da ottenere come risultato la formattazione

`martedì 7 settembre 2010
`
Come fare? La soluzione che ho adottato tempo fa consisteva nello scomodare il pacchetto «datetime.sty» modificando la macro «\today» con le istruzioni messe a disposizione dal pacchetto:

`\documentclass{article}
\usepackage[italian]{babel}
\usepackage{datetime}

\renewcommand{\today}{\thisdayofweekname\ \the\day\ \monthname\ \the\year}

\begin{document}

\today

\end{document}
`
È possibile ottenere lo stesso risultato (quindi anteponendo il nome del giorno della settimana al numero del giorno del mese) senza scomodare «datetime.sty»? Lo domando perché curiosando all’interno di «italian.ldf» ho notato la definizione

`\def\dateitalian{%
\def\today{\number\day~\ifcase\month\or
gennaio\or febbraio\or marzo\or aprile\or maggio\or giugno\or
luglio\or agosto\or settembre\or ottobre\or novembre\or
dicembre\fi\space \number\year}}%
`
e mi è venuto in mente che si potrebbe copiare quell’«\ifcase…» in modo da definire a mano i nomi dei giorni (in italiano, «\or sabato\or domenica», ecc.). Resta da capire quale istruzione passargli (nell’esempio sopra, «\month») per eseguire il calcolo.

Secondo problema (presumo meno difficile del primo), il pacchetto «babel.sty» non deve sparire; tuttavia, eventuali

`\renewcommand{\today}{…}
`
dopo il caricamento di babel sembrano non avere effetto, mentre invece funzionano se babel lo commento, cosa che non posso fare.

Vediamo di fare un po’ d’ordine. Il comando \today ha una definizione standard che produce la data in inglese; attenzione, perché non fa parte del nucleo di LaTeX, sono le classi standard che lo definiscono.

Se si carica babel, si ha una definizione di \today che varia a seconda della lingua attiva. Infatti \selectlanguage{} e \begin{otherlanguage}{} eseguono il comando \date (per esempio \dateitalian), la cui funzione è proprio di ridefinire \today.

Il pacchetto datetime ridefinisce tutti i \date, ma sei libero di ridefinire ancora questi comandi. Quindi
`\renewcommand{\dateitalian}{%
\renewcommand{\today}{quel che ti pare}}`
è il modo corretto di procedere. Queste ridefinizioni vanno date dopo che si è caricato datetime.

Difficile risalire al nome del giorno senza usare un pacchetto specifico: occorre calcolarsi che giorno è; datetime è piuttosto flessibile e consigliabile.

Ciao
Enrico

Go to top