我有一份包含多个索引的文档。所有索引都应在目录中提及(以及参考书目等类似元素)。我使用包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
加载,然后加载,然后从包中修补功能。index
tocbibind
index
\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%
}