正确排序包含宏的 \index 条目

正确排序包含宏的 \index 条目

我使用\index传统方式,但也使用一些宏作为内容。更准确地说,我有一些宏,例如\def\foo{BAR},然后我使用\index{\foo}

不幸的是,索引是按宏的名称排序的,而不是按宏的内容排序的。这很尴尬,因为所有宏都位于列表顶部(由于使用了\)。

有办法改变这种状况吗?

答案1

如果在读取之前展开宏\index,则内容之后的排序应该是正确的。您可以使用以下方法执行此操作\expandafter

  \def\foo{BAR}
  % ...
  \expandafter\index\expandafter{\foo}

{ }如果将其放在定义里面则会更短:

  \def\foo{{BAR}}
  % ...
  \expandafter\index\foo

\edef对于更复杂的内容,即具有多个宏,您应该使用(或可能)完全扩展内容\protected@edef

  \def\foo{BAR}
  \def\bar{FOO}
  % ...
  \edef\temp{\noexpand\index{\foo\bar}}
  \temp

如果您想要保留\temp本地定义,请使用:

  \begingroup
  \edef\temp{\endgroup\noexpand\index{\foo\bar}}
  \temp

反而。

答案2

\documentclass{article}
\usepackage{makeidx}\makeindex
    \def\Index#1{#1\expandafter\index\expandafter{#1}}
\begin{document}

\index{classical}
\def\foo{BAR} and I use then \foo\index{\foo} (the wrong entry)\newpage
 and \Index{\foo} (the correct entry).

\printindex 
\end{document}

第一个条目是错误的,第二个条目\Index正确:

在此处输入图片描述

答案3

这是 Martin Sharrer 的解决方案的一个示例(如上所示)。

所有索引键 AAAAA 到 HHHHH 均按字母顺序排序,无论其原始格式如何(newcommand、def、bfseries 等),但 ZZZZZ 则不然。

\documentclass{article}
\usepackage{imakeidx}
\usepackage{xcolor}
\makeindex%
\begin{document}
\newcommand{\BBBBB}[0]{BBBBB}
\newcommand{\DDDDD}[0]{DDDDD}
\def\EEEEE{EEEEE}
\def\FFFFF{FFFFF}
\def\HHHHH{HHHHH}
\newcommand{\ZZZZZ}[0]{ZZZZZ}

Here is an example of Martin Sharrer's solution (http://tex.stackexchange.com/questions/18336/correct-sorting-of-index-entries-containing-macros).
All the index keys AAAAA to HHHHH are sorted in alphabetical order, regardless of their original format (newcommand, def, bfseries, etc.) whereas ZZZZZ is not. 

\index{AAAAA@\bfseries AAAAA \normalfont}
\expandafter\index\expandafter{\BBBBB}
\index{CCCCC}
 \expandafter\index\expandafter{\DDDDD}
 \expandafter\index\expandafter{\EEEEE @ \scshape \EEEEE \normalfont}
 \expandafter\index\expandafter{\FFFFF}
\index{GGGGG@\color{red} GGGGG \color{black}\normalfont}
 \expandafter\index\expandafter{\HHHHH}
 \index{\ZZZZZ}% sorted according to its "\"

\printindex
\end{document}

在此处输入图片描述

相关内容