我正在编写一个小文档,其中我将在每个部分使用一些索引,使用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
每次运行更耗费时间和内存。