在目录中记录多个索引

在目录中记录多个索引

我有一份包含多个索引的文档。所有索引都应在目录中提及(以及参考书目等类似元素)。我使用包index来定义备选索引,并tocbibind使用包将它们列在目录中。

\documentclass{article}
\usepackage{index}
\usepackage{tocbibind}
\newindex{other}{odx}{ond}{Other index}
\makeindex
\begin{document}
\tableofcontents
\index{foo}
\index[other]{bar}
This page is intentionally not left blank.
\printindex
\printindex[other]
\end{document}

我本以为第二个索引应该叫做“其他索引”,但最后一页的标题和目录中的对应条目都写着“索引”。这是软件包的问题tocbibind:如果没有它,最后一页的标题是正确的 — 但目录中当然不会列出索引。

文档中提到了这一点tocbibind

标题文本是从 [命令] 中获取的\indexname。可以通过更改标准命令或使用\setindexname{name}[…]来更改标题文本

好的,但是我该如何对具有不同标题的多个索引执行此操作呢?

我宁愿坚持index,但我会切换到替代如果我真的需要的话。然而问题似乎出在tocbibind。有其他方法吗?

答案1

这难道不是您想要的吗?对于快速设置,使用\setindexname{Other Index}可能是实现此目的的最简单方法。

index是一个旧的软件包,很可能的作者tocbibind在开发时并没有考虑到这个软件包tocbibind

另一种可能性是imakeidx

在此处输入图片描述

\documentclass{article}
\usepackage{index}
\usepackage{tocbibind}
\newindex{other}{odx}{ond}{Other index}
\makeindex
\begin{document}
\tableofcontents
\index{foo}
\index[other]{bar}
This page is intentionally not left blank.
\printindex
\setindexname{Other index}
\printindex[other]
\end{document}

答案2

问题在于tocbinind包和index包都重新定义了theindex环境,因此最后加载的包都会破坏另一个包所做的定制。

tocbibind包进行了一些相对复杂的分析,以确定要插入哪种章节标题。该index包添加了两个简单的东西:它\indexname根据 的第一个可选参数重新定义,并在章节或章节标题下方添加序言。所以我将首先\printindex加载,然后加载,然后从包中修补功能。indextocbibindindex

\usepackage{index}
\usepackage{tocbibind}
% Patch the functionality from the index package into the {theindex}
% environment, where it was overridden by the tocbibind package. Note that
% this assumes that index was loaded first, then tocbibind.
\let\theindex@beforeindex\theindex
\def\theindex{%
  \edef\indexname{\the\@nameuse{idxtitle@\@indextype}}%
  \let\@topnewpage@real\@topnewpage
  \def\@topnewpage[##1]{\@topnewpage@real[##1%
      \ifx\index@prologue\@empty\else%
        \index@prologue%
        \bigskip%
      \fi%
    ]%
    \let\@topnewpage\@topnewpage@real%
  }%
  \theindex@beforeindex%
}

对于的多重索引特性index,而不是序言特性,重新定义会简单得多:

\let\theindex@beforeindex\theindex
\def\theindex{%
  \edef\indexname{\the\@nameuse{idxtitle@\@indextype}}%
  \theindex@beforeindex%
}

或者

\def\index@redefine@indexname{\edef\indexname{\the\@nameuse{idxtitle@\@indextype}}}
\expandafter\def\expandafter\theindex\expandafter{%
  \expandafter\index@redefine@indexname%
  \theindex@beforeindex%
}

相关内容