imakeidx 包问题中的 \indexsetup 和 intoc

imakeidx 包问题中的 \indexsetup 和 intoc

我正在编写一个小文档,其中我将在每个部分使用一些索引,使用imakeidx包的默认选项一切都很好,但是,当我尝试使用时,\indexsetup事情并不如我所愿。这是我的 MWE(它的数据取自其他帖子,但它说明了问题)

\begin{filecontents*}{mydotfill.ist}
delim_0 "\\nobreak\\dotfill"
\end{filecontents*}
\documentclass{article}
\usepackage{imakeidx}
\usepackage{lipsum}
\usepackage{hyperref}
% \indexsetup{level=\section,toclevel=section}
\makeindex[options={-s mydotfill.ist},intoc,name=person,title={Index of persons}]
\makeindex[options={-s mydotfill.ist},intoc]
\begin{document}
\tableofcontents
\section{First}
\lipsum[1]
Einstein\index[person]{Einstein}
\lipsum[2]
\section{Second}
Heisenberg\index[person]{Heisenberg} % Person index
\lipsum[3]
\index{foo}
\index{bar}
\lipsum[4]
\indexprologue{\small In this index you’ll find only
famous people’s names}
\printindex[person]
\printindex
\end{document}

生成的索引和目录是正确的,但是使用时\indexsetup输出的是: 输出

我尝试使用该noautomatic选项并手动运行makeindex,但结果是一样的,我必须编译三次(而不是两次)。

如果问题重复,我将非常感激提供其链接(我在论坛中搜索了很长时间,但没有找到答案)。

次要(相关)问题:是否有必要imakeidx运行makeindex每次编译的时候都...或者在第一次构建时运行 makeindex 就足够了?

答案1

发生这种情况的原因是,您执行了level=\section,这会使\section{\indexname}索引开头出现(这会添加一个 ToC 条目),然后您执行,这会为索引intoc,toclevel=section添加一个ToC 条目。然后您就会得到您想要的结果 :-)section

你应该只使用其中之一。如果你想编号索引部分,然后只需使用level=\section

\indexsetup{level=\section}
\makeindex[options={-s mydotfill.ist},name=person,title={Index of persons}]
\makeindex[options={-s mydotfill.ist}]

那么索引将以 开头\section,并且 LaTeX 将执行正确的操作。输出如下所示:

在此处输入图片描述

如果你想要未编号索引部分,那么您必须明确要求intoc并告知imakeidx进行section级别 ToC 条目:

\indexsetup{toclevel=section}
\makeindex[options={-s mydotfill.ist},intoc,name=person,title={Index of persons}]
\makeindex[options={-s mydotfill.ist},intoc]

(这里level=\section*是默认值)。输出将如下所示:

在此处输入图片描述


次要(相关)答案:这并不严格必要的makeindex每次运行都要运行。您只需makeindex在添加/删除/更改索引条目时运行一次即可。但对于imakeidx对于探测它要么需要-shell-escape(以及类似的东西md5sum或诸如此类的东西),要么需要手动检查每个索引条目,这可能比makeindex每次运行更耗费时间和内存。

相关内容