自动编号常量

自动编号常量

我想以某种方式使用 LaTeX 自动编号常量。

一些背景知识

作为一名数学家,在我的日常工作中,有很多在论述中并不十分重要的一次性常数。因此,我有时会写出如下不等式

\[ f(x) \leq c_1 g(x) \leq c_2 (g'(x) + h(x)^2 -3) \leq c_3 \int h(x)^2 \]

由于常数本身并不重要,为了节省字母,我将它们全部称为带下标的“c”。现在,

  1. 手动跟踪我在论文中某一时刻使用过的数字,特别是当我在处理大型文档时

  2. 如果我修改了参数,则重新编号常数。假设我从上面的例子中删除中间的不等式,出于美观目的,最好在最后一个术语中使用 而不是\[ f(x) \leq c_1 g(x) \leq c_2 \int h(x)^2 \]c_3但这样我就必须返回文档重新编号全部常数。

现在,有时我可以使用惯例来解决问题,即没有下标的“c”代表可以逐行变化的常数。但这通常不可行(假设我确实需要引用这些常数中的单个常数并验证它们对于我的目的而言确实足够“恒定”)。

我想要的

现在我知道了newcounter定义新计数器的命令。我甚至知道如何使用它来自动增加计数器。所以我可以定义一个打印c_\thecounter和增加计数器的命令,这样我就得到了一个运行的常量列表。这样就解决了一半的问题。

我不知道如何处理的另一半问题是如何参考到先前定义的常量。单纯地使用labelref当然是行不通的。(我实际上不太了解这两个命令的内部工作原理;因此解释一下它们为什么不起作用也会有所帮助。)

为了说明我想要的,如果有一对命令\newconstant\oldconstant可以像这样使用就太好了

% Create some new constants
\[ f(x) \leq \newconstant g(X) \leq \newconstant h(x) \]
% Create a new constant with a label
\[ m \geq \newconstant[cnst:m] m' \]
% Refer to an already defined constant
The constant $\oldconstant{cnst:m}$ defined above is actually 1. 

这将显示类似

f(x) <= c_1 g(x) <= c_2 h(x)
m >= c_3 m'
The constant c_3 defined above is actually 1

我所知道的是定义,说

\newcounter{cnstcnt}
\newcommand{\newconstant}{\ensuremath{c_\thecnstcnt}\addtocounter{cnstcnt}{1}}

这将打印运行列表。

是否已经有可以执行此操作的包?如果没有,是否有办法获得我描述的行为?(尤其是引用前一个常量的能力。)

答案1

使用\refstepcounter代替\addtocounter{...}{1}将可行\ref

\newcounter{cnstcnt}
\newcommand{\newconstant}{%
\refstepcounter{cnstcnt}%
\ensuremath{c_\thecnstcnt}}
\newcommand{\oldconstant}[1]{\ensuremath{c_{\ref{#1}}}}
\begin{document}
\newconstant\label{first}
\oldconstant{first}
\end{document}

答案2

自从问了这个问题,我还发现了这个constants在 CTAN。它完全满足了我的需求,而且还让我免于定义自己的命令和计数器。

具体来说,可以通过以下方式声明新的常量系列

\newconstantfamily{name}{symbol=<symbol>}

(也可以调整下标的显示方式等)并使用这个新的系列

\C[name]
\Cl[name]{label}
\Cr{label}

(第一种形式给出了家族中的下一个常量name,第二种形式也用标记它label,第三种形式指的是常量label指向的任何常量。默认家族的符号设置为 C。它也很好地配合使用,hyperref因为没有为常量生成任何链接(我认为应该是这样)。

需要注意的是:默认情况下,该命令不知道您处于哪种模式。因此,如果您想使用数学模式符号,定义一个包装器可能会更快

\newconstantfamily{errorterms}{symbol=\mathfrak{e}}
\newcommand{\errorterm}{\ensuremath{\C[errorterms]}}
\newcommand{\errorterml}[1]{\ensuremath{\C[errorterms]{#1}}}
...

使得文本模式下的打字更加愉快。

相关内容