我正在写一本书,分为几个部分。基本上,我希望在每个部分的末尾都有一个索引。索引应该只列出这部分中提到的单词。实现这个最简单的方法是什么?
在下面的 MWE 中,您可以看到我迄今为止尝试过的内容。我想要以下内容:
- INDEX 1 应列出啊,贝比和加拿大
- 索引 2 应列出啊,滴滴和电竞
在我的“解决方案”中,索引 2 列出的内容与索引 1 相同。
平均能量损失
\documentclass{book}
\usepackage{blindtext}
\usepackage{imakeidx}
\makeindex
\begin{document}
\part{My Headline}
\chapter{My Headline}
\blindtext[2]
\chapter{My Headline}
\blindtext[2]
\index{Aaa}\index{Bbb}\index{Caa} % keywords for INDEX 1
\printindex % INDEX 1
\part{Two}
\chapter{My Headline}
\blindtext[2]
\chapter{My Headline}
\blindtext[2]
\index{Aaa}\index{Ddd}\index{Eee} % keywords for INDEX 2
\printindex % INDEX 2
\end{document}
我不想要什么
我知道splitidx
。手册上说:
使用 \newindex 命令声明单独的索引并赋予唯一的快捷方式标识符。
我的问题是:有没有办法避免使用该\nexindex
命令?这本书已经写好了,我不想将其更改\index{Aaa}
为\newindex{index1}{Aaa}
。
答案1
\documentclass{book}
\usepackage{blindtext}
\usepackage{imakeidx}
\usepackage{letltxmacro}
\makeindex[name=index1]
\makeindex[name=index2]
\makeatletter
\AtBeginDocument{%
\let\latex@@index\index
\renewcommand{\index}[1]{%
\latex@@index[index\number\value{part}]{#1}%
}
}
\makeatother
\begin{document}
\part{My Headline}
\chapter{My Headline}
\blindtext[2]
\chapter{My Headline}
\blindtext[2]
\index{Aaa}\index{Bbb}\index{Caa} % keywords for INDEX 1
\printindex[index\number\value{part}] % INDEX 1
\part{Two}
\chapter{My Headline}
\blindtext[2]
\chapter{My Headline}
\blindtext[2]
\index{Aaa}\index{Ddd}\index{Eee} % keywords for INDEX 2
\printindex[index\number\value{part}] % INDEX 2
\end{document}
改良版
自动\makeindex[index...]
循环定义并\printindex
\documentclass{book}
\usepackage{blindtext}
\usepackage{imakeidx}
\usepackage{letltxmacro}
\makeatletter
\newcounter{loopcntr}
\newcommand{\setupindexfiles}[1]{%
\setcounter{loopcntr}{1}%
\loop\unless\ifnum\value{loopcntr}>#1%
\makeindex[name=index\number\value{loopcntr}]
\stepcounter{loopcntr}%
\repeat
}%
\setupindexfiles{3}
\AtBeginDocument{%
\LetLtxMacro\latex@@index\index
\LetLtxMacro\latex@@printindex\printindex
\renewcommand{\index}[2][]{%
\def\first@arg{#1}%
\ifx\first@arg\empty
\latex@@index[index\number\value{part}]{#2}%
\else
\latex@@index[#1]{#2}%
\fi
}
\renewcommand{\printindex}[1][]{%
\def\first@arg{#1}%
\ifx\first@arg\empty
\latex@@printindex[index\number\value{part}]%
\else
\latex@@printindex[#1]%
\fi
}
}
\makeatother
\begin{document}
\part{My Headline}
\chapter{My Headline}
\blindtext[2]
\chapter{My Headline}
\blindtext[2]
\index{Aaa}\index{Bbb}\index{Caa} % keywords for INDEX 1
\printindex
\part{Two}
\chapter{My Headline}
\blindtext[2]
\chapter{My Headline}
\blindtext[2]
\index{Aaa}\index{Ddd}\index{Eee} % keywords for INDEX 2
\printindex%
\part{Three}
\chapter{My Headline}
\blindtext[2]
\chapter{My Headline}
\blindtext[2]
\index{Aaa}\index{FFFFFF}\index{AAAAAAA} % keywords for INDEX 2
\printindex%
\end{document}