cleveref 和 aliascnt:以智能方式引用子方程和不等式

cleveref 和 aliascnt:以智能方式引用子方程和不等式

初步说明:

文档可能包含分别引用方程和子方程的标签。此外,一些方程实际上可能表示不等式。使用该cleveref包时,一个常见的问题是所有引用都具有相同的形式,例如。但是,如果将子方程称为,将不等式称为或eq. (1),对读者来说会更直观。解决此问题的一种可能性是通过定义所需的引用并使用相应标签的可选参数来覆盖交叉引用类型,例如;参见eqs. (1)ineq. (1)ineqs. (1)\crefname{pluralequation}{eqs.}{eqs.}\label[pluralequation]{eq1}使用 cleveref 引用子方程. 类似的方法可以应用于不等式,如下所示如何用 \cref 引用不等式?。因此,使用此方法时必须为每个标签手动定义交叉引用类型。

我的问题:

然而,在第 9 页cleveref 手册,可以找到以下段落:

如果您需要频繁执行此操作(即覆盖交叉引用类型),每次都明确指定标签会变得很乏味。另一种方法是使用 aliascnt 包。这允许您将一个计数器定义为另一个计数器的别名,这样实际上同一个计数器就有两个名称。由于 cleveref 根据计数器名称确定标签类型,因此两个计数器别名可以具有不同的交叉引用格式,但实际上是同一个计数器。您必须以某种方式安排使用正确的计数器别名,具体取决于您想要哪种交叉引用格式(可能通过定义所讨论环境的两个变体)。但所涉及的努力可能是值得的,因为不必记住将显式可选参数传递给大量标签。

有一个简短的例子说明如何为环境实现这一点theorem。不幸的是,没有对实际方程环境给出进一步的解释。因此,我想知道:如何aliascnt利用它正确地定义子方程和不等式环境,以便标签不需要可选参数?

更准确地说,我想了解所引用的 cleveref 手册中的方法是如何工作的。正如手册中所写,这种替代方法aliascnt应该优于每次我想要引用不等式或子方程时手动覆盖交叉引用类型的上述方法。

答案1

这里尝试解释一下aliascnt该包的用户指南第 6 节中提到但未完全解释的方法如何cleveref工作。

假设您的论文中有很多不等式,并且编号的不等式与方程式共享一个计数器。要使用该aliascnt方法,您需要 (a) 使用\newaliascnt\aliascntresetthe指令初始化新计数器(inq在下面的示例中称为)和 (b) 设置一个环境来显示不等式。在下面的代码中,此环境称为ineq。(此处显示的代码还使用包并使用选项hyperref加载包,以突出显示两个指令的输出。)cleverefnameinlink\cref

就我个人而言,我认为,aliascnt如果你的文档中有很多(比如说,超过十几个)不等式,那么采用这种方法最有可能获得成功。如果不等式的数量少于十几个左右,我认为\label[ineq]{<label-name>}在回答如何用 \cref 引用不等式?,既减少了工作量,又更容易实现。

在此处输入图片描述

\documentclass{article}

\usepackage{aliascnt}
\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink,noabbrev]{cleveref}
\newaliascnt{inq}{equation}
\aliascntresetthe{inq}
\crefname{inq}{inequality}{inequalities}
\creflabelformat{inq}{#2\textup{(#1)}#3}

% Define an environment called "ineq". (Code lifted
% straight from code in 'latex.ltx' for "equation"
% environment!)
\makeatletter
\def\ineq{$$\refstepcounter{inq}}
\def\endineq{\eqno \hbox{\@eqnnum}$$\@ignoretrue}
\makeatother

\begin{document}
A first inequality:
\begin{ineq} \label{ineq:new}
1+1 \le 2.
\end{ineq}

A cross-reference to \cref{ineq:new}. For a change, an equation:
\begin{equation} \label{eq:pyth}
a^2+b^2=c^2.
\end{equation}

A second inequality, with abject apologies to Leonhard Euler:
\begin{ineq} \label{ineq:basel}
\sum_{k=1}^\infty\frac{1}{k^2}<2.
\end{ineq}

As \cref{ineq:new,ineq:basel,eq:pyth} fail to show, \dots
\end{document}

相关内容