我正在尝试编写一个宏,将子方程的标签以紧凑的形式放在括号中。例如,如果我有
\begin{subequations}
\begin{align}
y - ax &= b \label{subeq1}\\
x^2 + y^2 &= r^2 \label{subeq2}
\end{align}
\end{subequations}
两个方程被标记为 (1a) 和 (1b),那么我希望能够输入\ref{subeq1,subeq2}
并得到 (1a,b)。同样,如果我有三个子方程,比如 (2a)、(2b) 和 (2c),标签subeq3
分别为subeq4
和subeq5
,那么我希望能够输入\ref{subeq3,subeq4,subeq5}
并得到 (2a--c)。我希望这适用于任意数量的子方程。
答案1
我有一个解决方案,虽然不是你想要的,但它提供了更紧凑的标签。我将使用的代码是:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{subequations}\label{eq:subeqns}
\begin{align}
y - ax &= b \label{eq:subeq1}\\
x^2 + y^2 &= r^2 \label{eq:subeq2}
\end{align}
\end{subequations}
\end{document}
我将整个集合称为\eqref{eq:subeqns}
得到(1)
,将个体称为\eqref{eq:subeq1}
或\eqref{eq:subeq2}
得到(1a)
或(1b)
。
答案2
这不完全是您想要的但很接近。
笔记:
- 最新版本(V0.18)尚未在 CTAN 上发布,但可以从Toby Cubitt 的网站. 虽然在这个特定的例子中似乎没有什么区别。
代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{cleveref}% load last
\crefname{equation}{equation}{equations}
\Crefname{equation}{Equation}{Equations}% For beginning \Cref
\crefrangelabelformat{equation}{(#3#1#4--#5#2#6)}
\crefmultiformat{equation}{equations (#2#1#3}{, #2#1#3)}{#2#1#3}{#2#1#3}
\Crefmultiformat{equation}{Equations (#2#1#3}{, #2#1#3)}{#2#1#3}{#2#1#3}
\begin{document}
\begin{subequations}
\begin{align}
y - ax &= b \label{eq:subeq1}\\
x^2 + y^2 &= r^2 \label{eq:subeq2}\\
x^2 + y^2 &= r^2 \label{eq:subeq3}\\
x^2 + y^2 &= r^2 \label{eq:subeq5}
\end{align}
\end{subequations}
\noindent
For the case where the label is part of a sentence:\par
Once referenced: \cref{eq:subeq1}\par
Two referenced: \cref{eq:subeq1,eq:subeq2}\par
Three referenced: \cref{eq:subeq1,eq:subeq2,eq:subeq3}\par
\bigskip
\noindent
For the case where the labels beign a sentence:\par
\Cref{eq:subeq1} is one equations.\par
\Cref{eq:subeq1,eq:subeq2} are two equations.\par
\Cref{eq:subeq1,eq:subeq2,eq:subeq3} are three equations.
\end{document}