创建的默认索引makeidx
显示索引条目的列表和相应出现的页面。
我需要索引在几页内(在较长的enumerate
环境中)出现多次的很多单词,因此显示它们出现的页面毫无意义。相反,我想显示每个索引键在环境中的出现次数(即,与键出现的项目相对应的计数器enumerate
值)。enumerate
可以这样做吗?
以下是 MWE:
\documentclass{article}
\usepackage{makeidx}
\makeindex
\begin{document}
\begin{enumerate}
\item The One Ring can be destroyed only in Mordor.
\index{One Ring}
\index{Mordor}
\item Sauron's fortress is Barad-d\^{u}r, which is located in Mordor.
\index{Sauron}
\index{Barad-d\^{u}r}
\index{Mordor}
\item The One Ring belongs to Sauron.
\index{One Ring}
\index{Sauron}
\end{enumerate}
\printindex
\end{document}
这是 pdf 中显示的内容:
- 至尊魔戒只有在魔多才能被摧毁。
- 索伦的堡垒是巴拉督尔,位于魔多。
- 至尊魔戒属于索伦。
指数
巴拉督尔,1
魔多,1
一环,1
索伦,1
但我希望索引是:
巴拉督尔,2
魔多, 1, 2
一环,1,3
索伦, 2, 3
答案1
解决方案构想
我们注意到索引条目由\index
命令创建。进一步调查显示,实际对文件的低级写入由命令.idx
完成。这用于写入最终在索引条目中使用的页码。\@wrindex
latex.ltx
\@wrindex
\thepage
因此,我们破解该\@wrindex
命令并使用 \theenumi
来代替\thepage
。
解决方案
\documentclass{article}
\usepackage{makeidx}
\makeatletter
\def\@wrindex#1{%
\protected@write\@indexfile{}%
{\string\indexentry{#1}{\theenumi}}
\endgroup
\@esphack}
\makeindex
\begin{document}
\begin{enumerate}
\item The One Ring can be destroyed only in Mordor.
\index{One Ring}
\index{Mordor}
\item Sauron's fortress is Barad-d\^{u}r, which is located in Mordor.
\index{Sauron}
\index{Barad-d\^{u}r}
\index{Mordor}
\item The One Ring belongs to Sauron.
\index{One Ring}
\index{Sauron}
\end{enumerate}
\printindex
\end{document}
输出
局限性
只有第一级枚举(\enumi
仅使用了这个问题改进解决方案以使用其他(当前子级)枚举级别。
答案2
一种可能性是使用glossaries
。您至少需要 4.02 版本才能运行以下示例:
% arara: pdflatex
% arara: makeglossaries
% arara: pdflatex
\documentclass{article}
\usepackage[index,counter=enumi,nomain]{glossaries}
\makeglossaries
\newterm{duck}
\newterm{arara}
\newterm{cat}
\newterm{zebra}
\newterm{aardvark}
\newterm{goose}
\begin{document}
\begin{enumerate}
\item A \gls{duck} and a \gls{zebra} went to tea with the \gls{arara}.
\item A \gls{zebra}.
\item More \glspl{zebra}.
\item Index without producing text\glsadd{cat}.
\item Now with some text: \gls{cat}.
\item An \gls{aardvark} met a \gls{duck}.
\item \Gls{duck}, \gls{duck}, \gls{goose}.
\end{enumerate}
\printindex
\end{document}
得出的结果为: