符号/缩写和宏列表

符号/缩写和宏列表

它已经在我的任务清单上一段时间了,而且这个帖子让我问了一个后续问题,在我看来,这是在设置此类列表时缺少的部分。

举个例子,想想 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

相关内容