\index 命令在下划线后添加空格

\index 命令在下划线后添加空格

我正在编写一个文档,其中包含可能包含下划线符号的命令索引。因此,我使用如下条目:

\index{a\_b}

但是,.idx 文件包含以下形式的代码:

\indexentry{a\_ b}{23}

当然,生成的文档显示为“a_ b”,这显然不是我想要的。有没有办法避免这种情况?谢谢!

以下是一个小例子:

\documentclass{book}
\RequirePackage[T1]{fontenc}
\RequirePackage{multind}
\newcommand{\dcommand}[1]{\texttt{#1}\index{commands}{\texttt{#1}}}
\begin{document}
\dcommand{foo\_bar}
\dcommand{bar\_foo}
\printindex{commands}{Commands index}
\end{document}

[抱歉编辑花了这么长时间,我正在处理几个项目,其中包括一些非常紧急的项目]

答案1

multind软件包是为 LaTeX 2.09 制作的,自 1991 年以来一直无人维护。

只需进行很小的改动,您就可以获得相同的效果(甚至更多)imakeidx

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage{imakeidx}

\makeindex[name=commands,title=Commands index]

\newcommand{\dcommand}[1]{\texttt{#1}\index[commands]{\texttt{#1}}}

\begin{document}

\dcommand{foo\_bar}
\dcommand{bar\_foo}

\printindex[commands]

\end{document}

在此处输入图片描述

如果坚持使用,请使用而不是 来multind修正 的定义。\@wrindex\protected@xdef\xdef

\documentclass{book}
\usepackage[T1]{fontenc}
\usepackage{multind}

\makeatletter
\def\@wrindex#1#2{\let\thepage\relax
   \protected@xdef\@gtempa{\@ifundefined{#1@idxfile}{}{\expandafter
      \write\csname #1@idxfile\endcsname{\string
      \indexentry{#2}{\thepage}}}}\endgroup\@gtempa
   \if@nobreak \ifvmode\nobreak\fi\fi\@esphack}
\makeatother

\newcommand{\dcommand}[1]{\texttt{#1}\index{commands}{\texttt{#1}}}
\begin{document}
\dcommand{foo\_bar}
\dcommand{bar\_foo}
\printindex{commands}{Commands index}
\end{document}

相关内容