amsmath 环境的自动“子方程”?

amsmath 环境的自动“子方程”?

当多行结构如下时,是否可以让 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,所以不能仅仅改变它。

但别这么做,真的。

在此处输入图片描述

相关内容