makeindex:如何避免相邻页码之间的逗号格式不正确?

makeindex:如何避免相邻页码之间的逗号格式不正确?

假设您有一个文档,您想在其中索引第 1、2 和 4 页上的单词“x”,并且您想以相同的方式设置索引中每个页码条目的样式(也许每个条目都是对定义的引用)。以下是一个例子:

\documentclass{book}
\usepackage{color}

\newcommand{\colorred}[1]{{\color{red}{#1}}}

\usepackage{makeidx}
\makeindex

\begin{document}

\chapter{Theory}

x\index{x|colorred}

\newpage

x\index{x|colorred}

\newpage

y

\newpage

x\index{x|colorred}

\printindex

\end{document}

结果将是索引条目

索引条目

其中,页码格式 --- 红色 --- 应用于第一个逗号。(在我的应用程序中,我使用的格式是背景色,这会使外观更糟糕。为简单起见,我在这里使用前景色。)

有没有一种优雅的方法来解决此功能?我发现的唯一方法是makeidx通过定义第二个宏来诱使它认为连续数字的格式不同

\newcommand{\colorrojo}[1]{{\color{red}{#1}}}

其效果与在第 1 页和第 2 页上\colorred书写相同。这可行(索引条目中的第一个逗号与第二个逗号一样是黑色),但这似乎不是正确的做法。x\index{x|colorred}x\index{x|colorrojo}

答案1

您可能希望makeindex使用-r禁用自动范围形成的命令行选项来调用。

否则,但似乎有点过头了,处理以下论点\colorred

\documentclass{book}
\usepackage{color}
\usepackage{xparse}

\ExplSyntaxOn
\NewDocumentCommand{\colorred}{m}
 {
  \seq_set_split:Nnn \l_tmpa_seq { , } { #1 }
  \seq_set_map:NNn \l_tmpb_seq \l_tmpa_seq { \textcolor{red}{##1} }
  \seq_use:Nn \l_tmpb_seq { ,~ }
 }
\ExplSyntaxOff

\usepackage{makeidx}
\makeindex

\begin{document}

\chapter{Theory}

x\index{x|colorred}

\newpage

x\index{x|colorred}

\newpage

y

\newpage

x\index{x|colorred}

\printindex

\end{document}

请注意,通常\textcolor{red}{word}比更可取{\color{red}word}

在此处输入图片描述

相关内容