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