从某种意义上来说,我遇到的问题似乎与脆弱宏观问题相反。
我正在为一本书创建索引。我有很长的索引命令,我想重复使用和/或轻松更改它们,而无需在书的每个实例中都进行更改。我想在序言中使用\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
已经包含在内,并且不要在主文本输入中重复它。此外,它可能会使在文件中查找索引输入变得更加困难。另一方面,它确实具有一致性的优势,当使用如此复杂的条目时,缺乏一致性可能会造成一定的麻烦。