具有不同字体的索引键

具有不同字体的索引键

我想索引一些可能包含代码的文本元素,例如:

foo of type \code{bar}

其中的\code内容类似于\texttt。但是当我将此文本粘贴到时\index,代码和普通文本之间的排序规则不同:

\index{foo of type \code{bar}}
\index{foo of type abc}
\index{foo of type unknown}

排序规则是错误的,为了获得正确的排序规则,我需要说:

\index{foo of type bar@foo of type \code{bar}}
\index{foo of type abc@foo of type abc}
\index{foo of type unknown@foo of type unknown}

然而,维护起来非常繁琐。

是否可以编写一个命令来为排序规则创建剥离的“裸”文本?理想情况下,类似这样的命令:

\myindex{abc \code{def} ghi}

即成为

\index{abc def ghi@abc \code{def} ghi}

如果该机制只能剥离一个特定命令(例如\code上述命令),那么这是可以接受的。


重现的小例子:

\documentclass{article}
\usepackage{makeidx}
\makeindex

\begin{document}

\index{aba}
\index{abc}
\index{abe}
\index{ab\texttt{b}}
\index{ab\texttt{d}}

\printindex

\end{document}

这会导致排序不正确。我想要一个可以代替的宏,\index它可以生成正确的排序顺序“aba”、“abb”、“abc”、“abd”、“abe”。

答案1

我不确定这是否是一种好方法,但对于发布的最小示例来说,它似乎有效。它试图仅解决所描述的受限问题,即仅处理一个命令。在这种情况下,\code{}将进行特殊处理,以便它不会影响条目的排序,而只会影响条目的格式。

\documentclass{article}
\usepackage{makeidx}
\makeindex
\newcommand*\ocode[1]{\string\texttt{#1}}
\newcommand*\nocode[1]{#1}
\let\code\ocode
\def\myindexx#1\relax{\index{#1}}
\newcommand*\myindex[1]{%
  \let\code\nocode
  \edef\tempa{#1}%
  \let\code\ocode
  \myindexx\tempa@#1\relax
}
\begin{document}
abc

\myindex{aba}
\myindex{abc}
\myindex{abe}
\myindex{ab\code{b}}
\myindex{ab\code{d}}

\printindex

\end{document}

排序并格式化

相关内容