LaTeX 不会扩展 \index 中的宏

LaTeX 不会扩展 \index 中的宏

从某种意义上来说,我遇到的问题似乎与脆弱宏观问题相反。

我正在为一本书创建索引。我有很长的索引命令,我想重复使用和/或轻松更改它们,而无需在书的每个实例中都进行更改。我想在序言中使用\def\newcommand创建命令并重复使用它们。

例如,在序言中,我想写一些类似的东西:

\newcommand{\oGravity}{Sir Isaac Newton!Gravity!As Occult Force}

这应该创建一个 3 级索引条目,其中“艾萨克·牛顿爵士”位于顶行,“引力”作为子条目,“作为神秘力量”作为子子条目。

然后,以后任何时候我想显示该条目,我只需输入

\index{\oGravity

问题是,当我实际执行此操作时\oGravity, 并没有被展开,因此在.idx文件中它只是显示为\oGravity。它只是稍后通过 makeindex 进行展开,因此我在索引本身中得到的是“Sir Isaac Newton!Gravity!Occult Force”,而不是预期的内容。

我也尝试使用\def而不是,\newcommand希望使用 TeX 原语会产生不同的效果。没有变化。我也尝试在\protect命令前使用(虽然它似乎做了与我想要的相反的事情)。没有帮助。

索引下方的 MWE 显示两个条目。使用实际字符串的条目生成了预期的行为。另一个则没有。

\documentclass[openright, onecolumn, 11pt]{memoir}
\immediate\write18{makeindex MWE}
\makeindex
\def\oGravity{Sir Isaac Newton!Gravity!As Occult Force}
\checkandfixthelayout
\begin{document}
Page 1 Gravity 
\index{\oGravity}
\vfill\eject
Page 2 More gravity
\index{Sir Isaac Newton!Gravity!As Occult Force}
\printindex
\end{document}

答案1

由于输入\index{...}基本上是逐字传递的,因此您可以定义宏以包含组件\index

\newcommand{\oGravity}{\index{Sir Isaac Newton!Gravity!As Occult Force}}

这会将所需的字符串放置在.idx文件中。当然,您必须记住它\index已经包含在内,并且不要在主文本输入中重复它。此外,它可能会使在文件中查找索引输入变得更加困难。另一方面,它确实具有一致性的优势,当使用如此复杂的条目时,缺乏一致性可能会造成一定的麻烦。

相关内容