我正在写一本书的项目,这本书分为几个部分和章节。在某些章节的末尾(比如说第 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
选项。也许我以后会为此写一个。