Re: Numerazione ordinale per i contatori

#8243
Up
0
Down
::

Come scritto in oggetto io vorrei usare un nuovo sistema di numerazione simile ai più noti \Roman \arabic…
In un testo scritto palesemente in latex o visto che le parti sono “numerate” o ordinate nel seguente modo, se non mi sbaglio è il sistema numerale ordinale:

Parte prima
Capitolo 1
….
Parte seconda
Capitolo 7
….

Io vi chiedo se è possibile definire una nuova numerazione in modo da poter scrivere:`%semplice esempio
\renewcommand{\thepart}{\ordinalefs{part}}%ordinale femminile singolare
\setcounter{part}{2}% parte seconda
..
\part{titolo parte seconda}`senza dover fare una struttura iterativa tipo questa:`\usepackage{ifthen}
\renewcommand{\thepart}{\ifthenelse{…=1}{prima}{\ifthenelse…}}`

Imitando ciò che fa LaTeX per i simboli di nota (\fnsymbol)
`\makeatletter
\def\ordinalefs#1{\expandafter\@ordinalefs\csname c@#1\endcsname}
\def\@ordinalefs#1{\ifcase#1\or prima\or seconda\or terza\or quarta\or
quinta\or sesta\or settima\or ottava\or nona\else\@ctrerr\fi}
\makeatother`Ora puoi dare comandi come`\renewcommand{\thepart}{\ordinalefs{part}}`Se vuoi andare oltre la nona parte 😀 basta allungare la lista nella definizione.

Si può dare una definizione più in stile LaTeX, ma con questa impariamo un po’ di cose:
(1) il valore del contatore “pippo” è disponibile come \c@pippo (oltre che come \value{pippo});
(2) Quando LaTeX si trova davanti il comando \ordinalefs{part} sostituisce \@ordinalefs{\c@part}; la sequenza di controllo \c@part è costruita in modo indiretto, usando l’argomento di \ordinalefs;
(3) \ifcase permette una scelta di casi fra più valori:`\ifcase\or\or…\or\else\fi`Il numero può essere passato come argomento di una macro (come nel nostro caso); LaTeX guarda questo numero e sostituisce il testo opportuno. Se il numero non ha un valore fra 0 e n, viene sostituito il testo dopo \else; nel nostro caso \@ctrerr che produce un messaggio di errore (Counter too large).

Con \ifthenelse potresti ottenere un effetto di questo tipo, ma con molta più fatica.

Ciao
Enrico

Go to top