使用 cleveref 引用一对子方程为 (1a,b)

使用 cleveref 引用一对子方程为 (1a,b)

如果我有子方程 (1a) 和 (1b),那么当我使用它们引用时,\cref我希望它们被排版为 (1a,b),但默认情况下它们显示为 (1a) 和 (1b)。我该如何更改这种情况?

梅威瑟:

\documentclass{article}

\usepackage{amsmath}
\usepackage[hidelinks]{hyperref}
\usepackage[compress]{cleveref}
\crefrangelabelformat{equation}{(#3#1#4--#5\crefstripprefix{#1}#2#6)}

\begin{document}

\begin{subequations}
\begin{align}
    a&=b    \label{eqn:1a}\\
    c&=d    \label{eqn:1b}\\
    e&=f    \label{eqn:1c}
\end{align}
\end{subequations}

\begin{equation}
    x=y     \label{eqn:2}
\end{equation}

Reference to the trio of equations works correctly as a range: `\cref{eqn:1a,eqn:1b,eqn:1c}', 
but reference to a pair yields `\cref{eqn:1a,eqn:1b}' when I want `eqs. (1a,b)'. In addition, 
I would like `\cref{eqn:1a,eqn:1b,eqn:2}' to appear as 'eqs. (1a,b) and (2)'.
\end{document}

答案1

cleveref软件包提供了一个名为 的低级宏\crefrangelabelformat,但没有提供一个名为 的宏\crefpairlabelformat。因此,正如您所发现的,\cref{eqn:1a,eqn:1b}使用简单的连词“and”。

除了联系cleveref软件包的作者和维护者并要求他为您创建一个宏之外\crefpairlabelformat,您还可以(几乎用短划线代替逗号)在交叉引用一对(子)方程式时通过键入以下内容来获得所需的输出格式

\crefrange{eqn:1a}{eqn:1b} 

同样地,您可以输入\crefrange{eqn:1a}{eqn:1b} and \labelcref{eqn:2}来获得eqs. (1a--b) and (2)

相关内容