Re: Ordinamento nell’indice analitico

#75459
Up
0
Down
::

Marco87″ post=74598Ciao a tutti,

volendo realizzare l’indice analitico, mi sono trovato di fronte a un problema. Lo spiego con un esempio. Ho bisogno di inserire delle voci come queste:
`\index{11:12}
\index{11:7}
\index{7:12}
\index{7:2}`
e vorrei che venissero ordinate in questo modo:
`7:2
7:12
11:7
11:12`
I numeri prima e dopo i due punti vorrei che fossero letti “per intero”; nell’esempio: undici, dodici, sette e due. È possibile fare questo?

Grazie e buon weekend,
Marco.

`\documentclass{book}
\usepackage{xparse,imakeidx}
\makeindex

\NewDocumentCommand\numindex{>{\SplitArgument{1}{:}}m}{\donumindex #1}
\ExplSyntaxOn
\NewDocumentCommand{\donumindex}{mm}
{
\marco_donumindex:nn{#1}{#2}
}

\cs_new_protected:Npn \marco_donumindex:nn #1 #2
{
\index{ \marco_pad:n { #1 } : \marco_pad:n { #2 } @ #1 : #2 }
}
\cs_generate_variant:Nn \marco_donumindex:nn { xx }

\cs_new:Npn \marco_pad:n #1
{
\int_compare:nT { #1 < 100 } { 0 } \int_compare:nT { #1 < 10 } { 0 } #1 } \ExplSyntaxOff \begin{document} abc \numindex{11:12} \numindex{11:7} \numindex{7:12} \numindex{7:2} \printindex \end{document}` Per stare sul sicuro aggiungo zeri fino ad arrivare a tre cifre. Spiegazione. 1. \numindex richiede un argomento della forma {:}
2. L’argomento viene passato a \donumindex nella forma {}{}
3. \marco_donumindex:nn è la versione interna del comando di prima; il suo compito è di emettere il corretto comando \index
4. I due argomenti sono passati a \marco_pad:n che aggiunge uno zero se il numero è minore di 100 e un altro se il numero è minore di 10

Così \numindex{7:2} esegue alla fine \index{007:002@7:2}

Ciao
Enrico

Go to top