我正在写一本书的项目,这本书分为几个部分和章节。在某些章节的末尾(比如说第 2 章和第 3 章的末尾),我想要一个索引,列出自上一个索引以来提到的所有关键字。
输出应如下所示
\documentclass{book}
\usepackage{blindtext}
\usepackage{imakeidx}
\makeindex[name=1]
\makeindex[name=2]
\begin{document}
\part{My Headline}
\chapter{My Headline}
\blindtext[2]
\index[1]{Aaa}\index[1]{Bbb}\index[1]{Caa} % keywords for INDEX 1
\chapter{My Headline}
\blindtext[2]
\index[1]{Aaa}\index[1]{Ddd}\index[1]{Eee} % keywords for INDEX 1
\printindex[1] % INDEX 1
\chapter{My Headline}
\index[2]{Aaa}\index[2]{Ddd}\index[2]{Fff} % keywords for INDEX 2
\printindex[2] % INDEX 2
\end{document}
问题是这本书已经写好了,我不想手动将所有\index{}
命令更改为\index[1]{}
或\index[2]{}
。我的想法是\index{}
根据章节号重新定义命令。
我正在寻找类似的东西:
\if \thechapter < 3
\renewcommand{\index}{\index[1]}
\else
\renewcommand{\index}{\index[2]}
\fi
上面的代码不起作用,我不知道为什么。
我的文件现在看起来像这样
\documentclass{book}
\usepackage{blindtext}
\usepackage{imakeidx}
\makeindex[name=1]
\makeindex[name=2]
% here is something missing like:
%
% \if \thechapter < 3
% \renewcommand{\index}{\index[1]}
% \else
% \renewcommand{\index}{\index[2]}
% \fi
\renewcommand{\index}
\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[1] % INDEX 1
\chapter{My Headline}
\index{Aaa}\index{Ddd}\index{Fff} % keywords for INDEX 2
\printindex[2] % INDEX 2
\end{document}
答案1
这是与我提供的 OP 问题的另一个答案类似的代码这里
首先获取 的原始定义\index
,处理 引入的可选参数,然后如果使用 则imakeidx
分支到原始版本,或者使用 检查章节编号\index[...]{foo}
\ifnum\value{chapter} < 3
\else
\fi
当然,这仅适用于这个特定目的。
\documentclass{book}
\usepackage{blindtext}
\usepackage{letltxmacro}
\usepackage{imakeidx}
\makeindex[name=1]
\makeindex[name=2]
\makeatletter
\LetLtxMacro\latex@@index\index
\renewcommand{\index}[2][]{%
\def\@firstarg{#1}%
\ifx\@firstarg\empty
\ifnum\value{chapter} < 3
\latex@@index[1]{#2}%
\else
\latex@@index[2]{#2}%
\fi
\else
\latex@@index[#1]{#2}%
\fi
}
\makeatother
\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[1] % INDEX 1
\chapter{My Headline}
\index{Aaa}\index{Ddd}\index{Fff} % keywords for INDEX 2
\printindex[2] % INDEX 2
\end{document}
答案2
您可以简单地将可选参数的默认值更改为当前章节编号。
\documentclass{book}
\usepackage[noautomatic]{imakeidx}
\indexsetup{level=\section*,toclevel=section,noclearpage}
\makeindex[name=1,intoc]
\makeindex[name=2,intoc]
\makeindex[name=3,intoc]
\usepackage{blindtext}
\makeatletter
% The default value for the optional argument is the jobname.
% Change it into the current chapter number.
\renewcommand{\index}{%
\@bsphack
\@ifnextchar[{\@index}{\@index[\arabic{chapter}]}%
}
\makeatother
\begin{document}
\tableofcontents
\part{My Headline}
\chapter{My Headline}
\blindtext[2]
\index{Aaa}\index{Bbb}\index{Caa} % keywords for INDEX 1
\printindex[2] % INDEX 1
\chapter{My Headline}
\blindtext[2]
\index{Aaa}\index{Ddd}\index{Eee} % keywords for INDEX 2
\printindex[2] % INDEX 2
\chapter{My Headline}
\index{Aaa}\index{Ddd}\index{Fff} % keywords for INDEX 3
\printindex[3] % INDEX 3
\end{document}
我还添加了必要的位,以便正确打印本地索引。该noautomatic
选项是必需的,否则索引文件将在处理第一个\printindex
命令时关闭。
对于与章节无关的索引序列,可以使用不同的策略:我们定义一个在每次打印索引时步进的计数器,并使用它来代替chapter
像以前解决方案中的计数器。
\documentclass{book}
\usepackage[noautomatic]{imakeidx}
\indexsetup{
othercode={\stepcounter{printindex}},
}
\makeindex[name=1,intoc]
\makeindex[name=2,intoc]
\usepackage{blindtext}
\makeatletter
% The default value for the optional argument is the jobname.
% Change it into the current printindex value, that's stepped
% at each \printindex command.
\newcounter{printindex}
\setcounter{printindex}{1}
\renewcommand{\index}{%
\@bsphack
\@ifnextchar[{\@index}{\@index[\arabic{printindex}]}%
}
\makeatother
\begin{document}
\tableofcontents
\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 2
\printindex[1] % INDEX 1
\chapter{My Headline}
\index{Aaa}\index{Ddd}\index{Fff} % keywords for INDEX 3
\printindex[2] % INDEX 2
\end{document}
第一个索引的图片: