我正在编写一个文档,其中包含可能包含下划线符号的命令索引。因此,我使用如下条目:
\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}