TeX 定义抑制与宏冲突的页码,使其他页码变为粗体

TeX 定义抑制与宏冲突的页码,使其他页码变为粗体

在文中是否有类似于 \addtocontents{toc}{text} 的索引命令?,我询问是否存在一个命令,可以用来以类似于向目录中添加注释的方式向索引中添加注释。

David Carlisle 提供了一个非常有用的答案,重点关注以下内容:

\def\kkk#1#2#3{#1}

最近,我遇到了一个问题,似乎源于同时尝试将索引中的引用页面加粗。

考虑 MWE

\documentclass[12pt]{book}
\usepackage{xcolor}
\let\cleardoublepage\clearpage 

\usepackage{imakeidx}
\makeindex
\usepackage{idxlayout}
\def\kkk#1#2#3{#1}

% Make all page numbers in index bold
\let\oldindex\index
\renewcommand{\index}[1]{%
  \oldindex{#1|textbf}%
}%

\begin{document}
\thispagestyle{empty}
\LARGE


Sentence.
\index{Heading@!Index entry 1}
\index{Heading@!Index entry 2}
\index{Heading@!Index entry 3}\index{CLASS INTRODUCTION@\kkk{\textbf{\textcolor{blue}{CLASS INTRODUCTION}}}}

\idxlayout{columns=1}
\printindex
\end{document}

生成索引

在此处输入图片描述

问题:有人能找出可能导致此问题的原因以及如何纠正它,以便 MWE 在需要时生成粗体页面并根据需要生成蓝色介绍性注释吗?

谢谢。

答案1

您可以\gobblethree在处理 .ind 文件阶段使用它来删除逗号、标记\textbf和嵌套在花括号中的页码。

为了确保\gobblethree在写入 .idx 文件时不会执行该操作,而是将其写入 .ind 文件,您可以阻止其扩展

  • 通过在前面加上\protect,即\protect\gobblethree
  • 或者通过\gobblethree定义\DeclareRobustCommand
  • 或者 —— 如果 LaTeX 2e 内核足够新 —— 通过定义\gobblethree\newcomand然后应用\MakeRobust\gobblethree
\documentclass[12pt]{book}
\usepackage{xcolor}
\let\cleardoublepage\clearpage 

\usepackage{imakeidx}
\makeindex
\usepackage{idxlayout}
\DeclareRobustCommand\gobblethree[3]{}%
%\newcommand\gobblethree[3]{}%
%\MakeRobust\gobblethree

% Make all page numbers in index bold
\let\oldindex\index
\renewcommand{\index}[1]{%
  \oldindex{#1|textbf}%
}%

\begin{document}
\thispagestyle{empty}
\LARGE


Sentence.
\index{Heading!Index entry 1}
\index{Heading!Index entry 2}
\index{Heading!Index entry 3}
\index{CLASS INTRODUCTION@\textbf{\protect\textcolor{blue}{CLASS INTRODUCTION}}\gobblethree}

\idxlayout{columns=1}
\printindex
\end{document}

所结果的.idx-文件:

\indexentry{Heading!Index entry 1|textbf}{1}
\indexentry{Heading!Index entry 2|textbf}{1}
\indexentry{Heading!Index entry 3|textbf}{1}
\indexentry{CLASS INTRODUCTION@\textbf  {\textcolor {blue}{CLASS INTRODUCTION}}\gobblethree  |textbf}{1}

所结果的.ind-文件:

\begin{theindex}

  \item \textbf  {\textcolor {blue}{CLASS INTRODUCTION}}\gobblethree  , 
        \textbf{1}

  \indexspace

  \item Heading
    \subitem Index entry 1, \textbf{1}
    \subitem Index entry 2, \textbf{1}
    \subitem Index entry 3, \textbf{1}

\end{theindex}

生成的输出文件:

在此处输入图片描述

相关内容