Re: evitare che makeidx “condensi” l’indice analitico

#6289
Up
0
Down
::

Non mi pare che makeidx accorpi i numeri di pagina da solo; è l’utente che lo fa con`\index{parolachiave|(}
\index{parolachiave|)}`

Ti devo contraddire, ho costruito un semplice esempio composto da:

“\section{sezione}\index{uno}\index{due}
testo testo …

\section{sezione}\index{uno}\index{due}
testo testo …”

ripetuto diverse volte fino a riempire 4 pagine ed il risultato è stato:

Index
due, 1–4
uno, 1–4

Cito dalla manpage di makeindex:`
-r Disable implicit page range formation; page ranges must be
created by using explicit range operators; see SPECIAL
EFFECTS below. By default, three or more successive pages
are automatically abbreviated as a range (e.g. 1–5).`
Devo dire che non ricordavo questa proprietà di makeindex. Dunque, usare makeindex -r, che così non accorpa.

Quanto alle ripetizioni nell’indice analitico: il numero di pagina da solo dice che il termine compare in quella pagina. Se compare più volte in sezioni diverse, dovrebbe bastare. Altrimenti dovresti arricchire l’indice; per esempio con numero di pagina e numero di sezione, magari fra parentesi. Come si può fare? Mi viene in mente una soluzione.
`
\def\sectionlabel#1{\label{#1}%
\def\currentlabel{#1}%
\expandafter\edef\csname richindex#1\endcsname##1{##1~(\ref{\currentlabel})}}

\newcommand{\myindex}[1]{\index{#1|richindex\currentlabel}}
`
Poi usi la faccenda così:`
\section{Prima}\sectionlabel{uno}
Testo…\myindex{prima}…

\section{Seconda}\sectionlabel{due}
Testo…\myindex{seconda}…
`
Attento che come argomento di \sectionlabel puoi usare solo lettere, non come in una \label normale; puoi usare \ref al modo usuale, però. Prima di usare makeindex devi assicurarti che i riferimenti incrociati siano risolti (cioè che non ci siano più avvisi del tipo “Label(s) may have changed. Rerun to get cross-references right.”).

Wow 8) Ho usato: \expandafter, \edef, \csname…\endcsname e anche una definizione con parametro dentro una definizione 😮 Roba da duri 😀

Ciao
Enrico

Go to top