条件:\renewcommand{\index}

条件:\renewcommand{\index}

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

第一个索引的图片:

在此处输入图片描述

相关内容