当多行结构如下时,是否可以让 amsmath 自动以“子方程”样式对方程进行编号
\begin{align}
E &= m c^2 \\
c^2 &= a^2 + c^2
\end{align}
遇到了?
当需要引用一组方程时,明确使用子方程环境很有用。当使用它的唯一原因是样式要求时,连续方程应编号为 (13a)、(13b) 等,但是最好将其自动化。
此外,这在 LyX 中非常有用,因为使用 Subequations 模块会破坏实时预览的布局。
答案1
在我看来,这不是一个好主意。如果 LyX 无法应对subequation
,那么就不要使用它或要求其开发人员修复它。
无论如何,你可以这样做:
\documentclass{article}
\usepackage{amsmath}
\usepackage{etoolbox}
\makeatletter
\let\endalignnosub\endalign
\renewenvironment{align*}{\start@align\@ne\st@rredtrue\m@ne}{\endalignnosub}
\renewenvironment{alignat*}{\start@align\z@\st@rredtrue}{\endalignnosub}
\renewenvironment{xalignat*}{\start@align\@ne\st@rredtrue}{\endalignnosub}
\renewenvironment{flalign*}{\start@align\tw@\st@rredtrue\m@ne}{\endalignnosub}
\appto\endalign{\endsubequations}
\preto\align{\subequations}
\preto\alignat{\subequations}
\preto\xalignat{\subequations}
\preto\flalign{\subequations}
\let\endgathernosub\endgather
\renewenvironment{gather*}{\start@gather\st@rredtrue}{\endgathernosub}
\preto\gather{\subequations}
\appto\endgather{\endsubequations}
\makeatother
\begin{document}
\begin{align}
a &= b \\
c &= d
\end{align}
\begin{align*}
a &= b \\
c &= d
\end{align*}
\end{document}
有必要改变所有环境,因为它们依赖于\endalign
,所以不能仅仅改变它。
但别这么做,真的。