索引显示“枚举”计数器而不是页面

索引显示“枚举”计数器而不是页面

创建的默认索引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. 至尊魔戒只有在魔多才能被摧毁。
  2. 索伦的堡垒是巴拉督尔,位于魔多。
  3. 至尊魔戒属于索伦。

指数

巴拉督尔,1

魔多,1

一环,1

索伦,1

但我希望索引是:

巴拉督尔,2

魔多, 1, 2

一环,1,3

索伦, 2, 3

答案1

解决方案构想

我们注意到索引条目由\index命令创建。进一步调查显示,实际对文件的低级写入由命令.idx完成。这用于写入最终在索引条目中使用的页码。\@wrindexlatex.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}

输出

enter image description here

局限性

只有第一级枚举(\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}

得出的结果为:

Image of resulting documnt

相关内容