Prima di tutto buona estate a tutti!
Devo (senza fretta) impostare l’indice dei nomi del mio prossimo lavoro; nel precedente volume avevo distinto i nomi che comparivano nel testo da quelli che si trovavano in nota utilizzando le seguenti macro:
`\renewcommand{\edindex}[1]{\index{#1}}
\newcommand{\formatonota}[1]{\textbf{#1}}
\newcommand{\nindex}[1]{\index{#1|formatonota}}`
Dove, ovviamente, il comando \edindex indicizza le occorrenze dei nomi del testo e \nindex quelli che occorrono in nota.
Ora, invece di distinguerli col grassetto mi piacerebbe realizzare un indice che registrasse le seguenti occorrenze:a) nome nel testo
b) nome nel testo e in nota
c) nome solo in notaEsempio:
Agostino d’Ippona, santo, 25, 27 e n, 30n
Vi assicuro che non è una richiesta/esigenza peregrina, perché è prassi abbastanza diffusa nella letteratura umanistica. Cosa dite?
Ciao e al solito grazie,
Luca
`\begin{filecontents*}{nomiinnota.ist}
item_0 “\\stoprange \n\\item ”
delim_0 “\\startrange ”
postamble “\\stoprange\n\n\\end{theindex}\n”
\end{filecontents*}
\documentclass[a4paper]{book}
\usepackage{imakeidx,etoolbox}
\makeindex[options=-r -s nomiinnota]
\newcommand\nindex[1]{\index{#1|innota}}
\newcommand\innota[1]{#1n}
\makeatletter
\let\stoprange\relax
\def\startrange#1\stoprange{\begingroup\process@range{#1}\endgroup}
\def\process@range#1{\def\in@range{#1}\def\in@list{\unskip}%
\@for\next:=\in@range\do
{\expandafter\process@entry\next\@nil}
\in@list}
\def\process@entry{\@ifnextchar\innota{\process@nota}{\process@reg}}
\def\process@reg#1\@nil{%
\@namedef{exists#1}{, #1}%
\appto\in@list{\csname exists#1\endcsname}}
\def\process@nota#1#2\@nil{%
\@ifundefined{exists#2}
{\@namedef{exists#2}{, #2n}\appto\in@list{\csname exists#2\endcsname}}
{\@namedef{exists#2}{, #2 e n}}%
}
\makeatother
\begin{document}
\mainmatter
Agostino\index{Agostino}
\newpage
Agostino\index{Agostino}\footnote{Agostino\nindex{Agostino}}
\newpage
Agostino\index{Agostino}
\newpage
Agostino\footnote{x\nindex{Agostino}}
\backmatter
\printindex
\end{document}`
Rimane il problema degli “implicit ranges” che per ora ho risolto ignorandolo. Makeindex, normalmente, genera da sé un intervallo (come 1–3) se un nome compare su tre o più pagine di seguito. Ti serve?
Note tecniche: per indicizzare un nome scrivi \index{nome} se compare nel testo, scrivi \nindex{nome} se compare in una nota.
Ciao
Enrico