多个索引:一个或多个章节的一个索引

多个索引:一个或多个章节的一个索引

这是多重索引:书的每个部分都有一个索引


我正在写一本书的项目,这本书分为几个部分和章节。在某些章节的末尾(比如说第 2 章和第 3 章的末尾),我想要一个索引,列出自上一个索引以来提到的所有关键字。

例子

  • 第一章关键词:\index{Aaa}\index{Bbb}\index{Caa}
  • 第二章关键词:\index{Aaa}\index{Ddd}\index{Eee}
  • 第三章关键词:\index{Aaa}\index{Ddd}\index{Fff}

我想要第 2 章末尾的索引,其中列出第 1 章和第 2 章的所有关键词。第 3 章末尾也应该有一个索引,其中仅列出第 3 章的关键词。

以下是我迄今为止尝试过的(MWE):

\documentclass{book}

\usepackage{blindtext}

\usepackage{imakeidx}
\makeindex


\begin{document}

\part{My Headline}

    \chapter{My Headline}
    \blindtext[2]

    \index{Aaa}\index{Bbb}\index{Caa} % keywords for INDEX 1

    \chapter{My Headline}
    \blindtext[2]

    \index{Aaa}\index{Ddd}\index{Eee} % keywords for INDEX 1

    \printindex % INDEX 1

    \chapter{My Headline}

    \index{Aaa}\index{Ddd}\index{Fff} % keywords for INDEX 2

    \printindex % INDEX 2

\end{document}

我不想要什么

我知道splitidx。手册上说:

使用 \newindex 命令声明单独的索引并赋予唯一的快捷方式标识符。

我的问题是:有没有办法避免使用该\nexindex命令?这本书已经写好了,我不想将其更改\index{Aaa}\newindex{index1}{Aaa}

答案1

您可以执行以下操作:

\documentclass{book}
\usepackage{imakeidx}
\usepackage{xpatch}
\usepackage{blindtext}

\makeindex

\makeatletter
\let\makepartialindex\makeindex
\AtBeginDocument{%
  \edef\imki@jobname{\imki@jobname\noexpand\theidx@count}%
}
\newcounter{idx@count}
\xapptocmd{\printindex}{\stepcounter{idx@count}}{}{}
\makeatother

\begin{document}

\makepartialindex

\part{My Headline}

\chapter{My Headline}
\blindtext[2]

\index{Aaa}\index{Bbb}\index{Caa} % keywords for INDEX 1

\chapter{My Headline}
\blindtext[2]

\index{Aaa}\index{Ddd}\index{Eee} % keywords for INDEX 1

\printindex % INDEX 1

\makepartialindex

\chapter{My Headline}

\index{Aaa}\index{Ddd}\index{Fff} % keywords for INDEX 2

\printindex % INDEX 2

\end{document}

答案2

为了实现对同一索引文件的重用,我们需要做的就是重新打开文件进行写入,从而破坏原始文件。尝试将以下内容粘贴到您的序言中:

\makeatletter
\renewcommand*{\printindex[1]}[\imki@jobname]{%
  \@ifundefined{#1@idxfile}{\imki@error{#1}}%
    {\imki@putindex{#1}%
     \immediate\openout\csname #1@idxfile\endcsname #1.idx}%
 }
\makeatother

这将重新定义\printindex为在打印完第一个索引后重新打开文件进行写入。

如上所述,我认为它不适用于该splitindex选项。也许我以后会为此写一个。

相关内容