![makeindex:如何避免相邻页码之间的逗号格式不正确?](https://linux22.com/image/406341/makeindex%EF%BC%9A%E5%A6%82%E4%BD%95%E9%81%BF%E5%85%8D%E7%9B%B8%E9%82%BB%E9%A1%B5%E7%A0%81%E4%B9%8B%E9%97%B4%E7%9A%84%E9%80%97%E5%8F%B7%E6%A0%BC%E5%BC%8F%E4%B8%8D%E6%AD%A3%E7%A1%AE%EF%BC%9F.png)
假设您有一个文档,您想在其中索引第 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}
。