要索引一个非平凡的 TeX 表达式expr
,我们使用命令\index{str@expr}
,其中是用于排序的str
简化(通常是纯 ASCII)表示。expr
然而,str@expr
脚注内的解析不正确:
\documentclass{report}
\usepackage{imakeidx}
\makeindex
\def\gnu{\texttt{Gnu}}
\def\gnat{\texttt{Gnat}}
\begin{document}
Some text\index{Gnu@\gnu}\index{Gnat@\gnat}.
\pagebreak
Some more text\index{Gnu@\gnu}.\footnote
{A footnote.\index{Gnat@\gnat}}
\printindex
\end{document}
这将生成以下.idx
文件
\indexentry{Gnu@\gnu}{1}
\indexentry{Gnat@\gnat}{1}
\indexentry{Gnu@\gnu}{2}
\indexentry{Gnat@\texttt {Gnat}}{2}
“Gnat” 的两个索引条目有所不同,因此\Gnat
在索引中出现了两次,如以下屏幕截图所示:
如何\footnote
修改\index
命令,以及可以做些什么?
答案1
这不是一个构造问题@
,而是一个控制序列扩展问题。一个基于https://groups.google.com/forum/#!topic/comp.text.tex/_Hwo6Hapcng建议提供一个命令,我们可以使用它来保护脚注中索引条目中的反斜杠\def\indexprotect#1{\string#1}
。正如 Ulrike Fischer 指出的那样,\string
它本身就足以做到这一点:
\documentclass{report}
\usepackage{imakeidx}
\makeindex
\def\gnu{\texttt{Gnu}}
\def\gnat{\texttt{Gnat}}
\begin{document}
Some text\index{Gnu@\gnu}\index{Gnat@\gnat}.
\pagebreak
Some more text\index{Gnu@\gnu}.\footnote
{A footnote.\index{Gnat@\string\gnat}}
\printindex
\end{document}
答案2
@Andrew Swann 和 @Ulrike Fischer 的解决方案(用于\string
转义 中的反斜杠expr
)效果很好,但需要在所有相关的脚注或标题中重复努力。因此,@egreg 在评论中提到的解决方案,
\usepackage{bigfoot}
一劳永逸地解决问题,对我来说似乎更好。