由于autonum
无法很好地配合cleveref
(自动编号选项也不mathtools
适合我),我正在寻找一个更简单的解决方案。如果方程式中有标签,我希望方程式会自动编号,否则则不会。我该如何实现这一点?
看在此处输入链接描述看看autonum
和的问题是什么cleveref
。
\documentclass{amsart}
\usepackage{cleveref}
\begin{document}
\begin{multline} \label{eq:one} % must have a number
z=a+b+c+d+e+f+g\\
+ h+i+j+k+\ell+m+n+o+p+q+r+s+t+u+v+w+x+y.
\end{multline}
\begin{multline} % must not have a number
z=a+b+c+d+e+f+g\\
+ h+i+j+k+\ell+m+n+o+p+q+r+s+t+u+v+w+x+y.
\end{multline}
\begin{gather} \label{eq:two} % must have a number
x=y
\end{gather}
\begin{gather} % must not have a number
x=y
\end{gather}
\end{document}
答案1
您误解了 的用途autonum
。确定方程式是否编号的不是它是否有\label{}
,而是它是否在任何一点被引用,换句话说 - 文档是否包含\ref{}
引用该方程式的 。如果加载 ,则还支持
该命令。\cref{}
cleveref
例如:
\documentclass{article}
\usepackage{amsmath,cleveref,autonum}
\begin{document}
\begin{multline}\label{eq:a}
z=a+b+c+d+e+f+g\\
+ h+i+j+k+\ell+m+n+o+p+q+r+s+t+u+v+w+x+y.
\end{multline}
\begin{multline}\label{eq:b}
z=a+b+c+d+e+f+g\\
+ h+i+j+k+\ell+m+n+o+p+q+r+s+t+u+v+w+x+y.
\end{multline}
\begin{gather}\label{eq:c}
x=y
\end{gather}
\begin{gather}\label{eq:d}
x=y
\end{gather}
We reference the first \verb|multline| environment, but not the second,
and the second \verb|gather| environment, but not the first.
Hence. only \cref{eq:a} and \cref{eq:d} will be numbered,
even though all equations are labelled.
\end{document}
如果您不想对方程式进行编号,并且知道自己永远不会引用它,那么您可以尽快使用带星号的环境形式。该autonum
包专门用于避免根据是否引用方程式而更改方程式本身。如果它依赖于添加或删除\label{}
,则该包将失去意义,因为添加或删除星号至少同样容易,而且可以说更容易。