Re: Fncychap e lingua italiana

#11499
Up
0
Down
::

Ho appena scoperto un pacchetto che scrive i numeri in portoghese: ordinalpt. Modificarlo per l’italiano non dovrebbe essere troppo difficile.

Purtroppo l’italiano e il portoghese non sono abbastanza simili. Se si vuole un comando che gestisce i nomi dei numeri fino a 99, ecco qui:
`\makeatletter
\def\NumeroinParole#1{\expandafter\@NumeroinParole\csname c@#1\endcsname}
\def\@NumeroinParole#1{%
\ifnum#1>99
\@ctrerr
\else
\ifnum#1<30 \np@small{#1}\else\expandafter\np@large\number#1\fi
\fi}
\def\np@small#1{\ifcase#1\or
Uno\or Due\or Tre\or Quattro\or Cinque\or
Sei\or Sette\or Otto\or Nove\or Dieci\or
Undici\or Dodici\or Tredici\or Quattordici\or Quindici\or
Sedici\or Diciassette\or Diciotto\or Diciannove\or Venti\or
Ventuno\or Ventidue\or Ventitr\'e\or Ventiquattro\or Venticinque\or
Ventisei\or Ventisette\or Ventotto\or Ventinove\fi}

\def\np@large#1#2{%
\ifcase#1\or\or\or Trent\or Quarant\or Cinquant\or
Sessant\or Settant\or Ottant\or Novant\fi
\ifcase#2a\or uno\or adue\or atr\'e\or aquattro\or
acinque\or asei\or asette\or otto\or anove\fi}
\makeatletter
\renewcommand{\thechapter}{\NumeroinParole{chapter}}`
Se si preferiscono le minuscole, basta cambiarle.

Il comando \@NumeroinParole legge il valore del contatore dato ad argomento di \NumeroinParole. Se il numero è maggiore di 99, errore. Se il numero è <30, si va caso per caso, non c’è altro modo. Da 30 in poi, invece, viene letto il numero (che ha certamente due cifre) tramite
`\expandafter\np@large\number#1`
Con \expandafter abbiamo che \number produce la rappresentazione decimale del valore del contatore; \np@large ha due argomenti, il primo è la cifra delle decine, il secondo quella delle unità. A questo punto basta eseguire due \ifcase.

Il comando è espandibile, quindi dà il risultato corretto con \label. Attenzione, però: un
`\chapter{Titolo}\label{capitolo}`
dando \ref{capitolo} si otterrà il numero scritto in parole. Così funziona il sistema.

Ciao
Enrico

Go to top