它已经在我的任务清单上一段时间了,而且这个帖子让我问了一个后续问题,在我看来,这是在设置此类列表时缺少的部分。
举个例子,想想 n 维空间的标准符号;我将使用以下代码来排版它:\mathbb{R}^n
。然后,为了加快速度,我将定义一个宏\newcommand*{\Rn}{\mathbb{R}^n}
。到目前为止一切顺利。现在,我还想有一个符号列表。简而言之,问题是:为复杂符号生成符号列表的最佳做法是什么?
让我考虑一下这个nomencl
包,但我认为当使用其他替代方案时,这个问题也是有效的。目前,我有一个文件,我在其中定义了我在文档中使用的所有宏,类似于我上面给出的示例。然后,为了生成列表的条目,我会添加
\nomenclature{$\mathbb{R}^n$}{$n$-dimensonal real space}
我第一次使用宏的地方\Rn
。这是正确/最好的方法吗?这里的一个大缺点是,当我将来想更改符号时,我必须在两个不同的地方进行更改。有没有更聪明的方法?以某种方式统一生成列表条目和宏这两个任务,以便稍后排版符号?
答案1
只要您确定第一次出现\Rn
不在章节标题或其他移动参数中,那么您就可以定义\Rn
以发出所需的\nomenclature
命令并重新定义自身:
\newcommand*{\Rn}{%
\nomenclature{$\mathbb{R}^n$}{$n$-dimensional real space}%
\gdef\Rn{\mathbb{R}^n}\mathbb{R}^n%
}
当然,您可以在通用宏中自动执行此操作:
\newcommand*{\definesymbol}[3]{%
\def#1{\nomenclature{$#2$}{#3}\gdef#1{#2}#2}%
}
然后说
\definesymbol{\Rn}{\mathbb{R}^n}{$n$-dimensional real space}
其他符号也类似。
\section{Definition of $\Rn$}
警告:如果您说并且这是 的第一次出现,这将会严重中断\Rn
。
如果您计划在章节标题中使用这些符号,则以下修改后的定义应该有效:
\makeatletter
\newcommand*{\definesymbol}[3]{\def#1{%
\ifx\protect\@unexpandable@protect
#2%
\else
\nomenclature{$#2$}{#3}\gdef#1{#2}#2%
\fi}
}
\makeatother