我正在尝试在数组环境中使用子方程。具体来说,我正在尝试创建一个既包含常规编号方程又包含子方程的数组。我希望创建一个具有以下外观的数组:
A + B --> C + D (1.1)
E + F --> G + H (1.2)
I + J --> K + L (1.3a)
--> M + N (1.3b)
--> O + P (1.3c)
数组中的前两个反应(方程式)被定期编号,但最后三个代表分支,所以我想将它们标记为子方程式并能够这样引用它们。
有任何想法吗?
答案1
\tag
这是使用s 表示子方程的一种方法。
这amsmath
包裹提供\tag{<stuff>}
打印(<stuff>)
为方程标签的功能。此外,它不会增加方程计数器,因为不需要。
以下 MWE 利用了此行为,它\subeqn
为每个子方程提供了一个“标签”,并且应该与每个子方程一起使用。打印的标签是更新后的方程编号,并附加了子方程编号。引用按预期工作,因为标签被完整引用,就像常规标记/引用一样。
这种方法的优点是,由于无需切换环境,因此可以保持对齐。align
环境“子方程区域”内的边缘混乱可能是唯一的缺点。
\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\AtBeginEnvironment{align}{\setcounter{subeqn}{0}}% Reset subequation number at start of align
\newcounter{subeqn} \renewcommand{\thesubeqn}{\theequation\alph{subeqn}}%
\newcommand{\subeqn}{%
\refstepcounter{subeqn}% Step subequation number
\tag{\thesubeqn}% Label equation
}
\begin{document}
\begin{align}
A + B &\to C + D \\
E + F &\to G + H \label{eq:EFGH} \\
I + J &\to K + L \refstepcounter{equation}\subeqn \\
&\to M + N \subeqn \label{eq:MN}\\
&\to O + P \subeqn
\end{align}
The EFGH equation is \eqref{eq:EFGH} and the MN is equation~\eqref{eq:MN}.
\end{document}
这etoolbox
包裹用于在每个align
环境开始时重置子方程计数器,以保持一致性。否则,如果在后续环境中使用,子方程编号将恢复align
。
如果您需要避免使用该etoolbox
包,那么您可以使用以下序言:
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\newcounter{subeqn} \renewcommand{\thesubeqn}{\theequation\alph{subeqn}}%
\makeatletter
\@addtoreset{subeqn}{equation}
\makeatother
\newcommand{\subeqn}{%
\refstepcounter{subeqn}% Step subequation number
\tag{\thesubeqn}% Label equation
}
subeqn
每次计数器增加时都会重置计数器equation
。请注意,在这两种情况下,\refstepcounter{equation}
都需要 a 才能获得子方程的正确方程编号。
答案2
环境subequations
可用于让align
环境按您的需要标记第二组方程。要引用方程,请\label{eq:EFGH}
在方程末尾添加。然后,当您想要引用它们时,使用\eqref{eq:EFGH}
。任何文本都可以放在里面\label
,这里我添加了一个前缀eq:
,这样我就知道我引用的引用是一个方程。你应该使用\eqref
而不是\ref
这样方程的引用方式与标记的方式相同(即使用括号)。
另外,请记住,第一次处理时,方程引用将显示为(??)
。后续运行(不要删除第一次运行中的 .aux 文件)将显示实际方程编号。
这个解决方案需要做一些调整:
我添加了一个
\phantom{a}
以获取第一个对齐环境来调整方程式数字中的额外字符。该
AdjustSize
宏用于确保在第二组方程中我们利用左侧的空间与第一组方程中一样多,以使箭头对齐。添加
\vspace{-3\abovedisplayskip}
是为了消除两个方程部分之间添加的额外空间。
以下是代码
\documentclass[border=5pt,tightpage]{standalone}
\usepackage{calc}% Needed for the \widthof macro
\usepackage{amsmath}
\begin{document}
\newcommand*{\AdjustSize}[1]{\makebox[\widthof{\ensuremath{A+B}}][c]{#1}}%
%
\noindent
\begin{align}
A + B &\to C + D \phantom{a}\\
E + F &\to G + H \label{eq:EFGH}
\end{align}
\begin{subequations}\vspace{-3\abovedisplayskip}
\begin{align}
\AdjustSize{I + J}&\to K + L\\
&\to M + N \label{eq:MN}\\
&\to O + P
\end{align}
\end{subequations}
%
The EFGH equation is \eqref{eq:EFGH} and the MN is equation~\eqref{eq:MN}.
\end{document}
答案3
此外沃纳的回答,我建议定义以下命令:
\newcommand{\beginsubeqn}{\setcounter{subeqn}{0}\refstepcounter{equation}\subeqn}
这将使用法变得简洁如下:
\begin{align}
A + B &\to C + D \\
E + F &\to G + H \label{eq:EFGH} \\
I + J &\to K + L \beginsubeqn \\
&\to M + N \subeqn \label{eq:MN}\\
&\to O + P \subeqn
\end{align}
align
可以通过再次调用来在同一环境中启动新的主要编号\beginsubeqn
。答案也打包了这里。