有关的:在多个对齐环境中对齐等号
我有 4 个需要操作的方程。每个方程都应位于其自己的子方程环境中(即,操作步骤不应接收新的方程编号,而应接收 a)、b)、...。
我希望这 4 个操作块彼此对齐。上面的相关答案通过将所有内容植入一个大的对齐环境中来实现这一点。但是,我得到的是连续的数字作为标签(1、2、3、4......而不是 1.a 1.b ... 2.a 2.b ....)
示例(彼此不一致):
\begin{subequations}
\begin{align}
R_1&=(a+b)^2 - 2ab\\
&=a^2+2ab + b^2 - 2ab\\
&=a^2+b^2
\end{align}
\end{subequations}
\begin{subequations}
\begin{align}
R_2&=(a+b)(a-b)\\
&=a^2 + ab - ab + b^2\\
&=a^2 + b^2
\end{align}
\end{subequations}
我尝试在 align 环境中嵌套多个子方程,但结果却打印方程(斜体逐字)而不是我的实际公式。我还尝试将所有内容放入一个子方程环境中,并使用来操纵方程编号,addtocounter
但这只会影响此后的方程。
答案1
\stepsubequation
这是应该可以执行您想要的操作的命令。我还添加了hyperref
它以表明它在这种情况下也可以工作,但对于这项工作来说不是必需的。
可以\stepsubequation
接收作为可选参数的标签,用于引用以下一组子方程,类似于\label{foo}
在之后添加\begin{subequations}
。
\documentclass{article}
\usepackage{amsmath}
\usepackage{hyperref}
\makeatletter
\newcommand{\stepsubequation}[1][]{%
\ifmeasuring@
\else
\refstepcounter{parentequation}%
\protected@xdef\theparentequation{\arabic{parentequation}}%
\ifdefined\theHparentequation
\protected@xdef\theHparentequation{\arabic{parentequation}}%
\fi
\setcounter{equation}{0}%
\if\relax\detokenize{#1}\relax\else
\edef\@currentlabel{\theparentequation}%
\ltx@label{#1}%
\fi
\fi
}
\makeatother
\begin{document}
\begin{subequations}
\begin{align}
R_1&=(a+b)^2 - 2ab \label{a}\\
&=a^2+2ab + b^2 - 2ab \label{b}\\
&=a^2+b^2 \\
\stepsubequation[foo]
R_2&=(a+b)(a-b) \label{c}\\
&=a^2 + ab - ab + b^2 \\
&=a^2 + b^2
\end{align}
\end{subequations}
\begin{equation}
\text{this should have number 3}
\end{equation}
\eqref{a} -- \eqref{b} -- \eqref{c} -- \eqref{foo}
\end{document}
如果执行\counterwithin
或\numberwithin
到等操作equation
,可以执行以下操作。
\documentclass{book}
\usepackage{amsmath}
\usepackage{xpatch}
\usepackage{hyperref}
\counterwithin{equation}{chapter}
\makeatletter
\AtBeginDocument{%
\NewCommandCopy{\standardtheequation}{\theequation}%
\xpatchcmd{\standardtheequation}{equation}{parentequation}{}{}%
}
\newcommand{\stepsubequation}[1][]{%
\ifmeasuring@\else
\refstepcounter{parentequation}%
\protected@xdef\theparentequation{\standardtheequation}%
\ifdefined\theHparentequation
\protected@xdef\theHparentequation{\standardtheequation}%
\fi
\setcounter{equation}{0}%
\if\relax\detokenize{#1}\relax\else
\edef\@currentlabel{\theparentequation}%
\ltx@label{#1}%
\fi
\fi
}
\makeatother
\begin{document}
\chapter{Experiment}
\begin{subequations}
\begin{align}
R_1&=(a+b)^2 - 2ab \label{a}\\
&=a^2+2ab + b^2 - 2ab \label{b}\\
&=a^2+b^2 \\
\stepsubequation[foo]
R_2&=(a+b)(a-b) \label{c}\\
&=a^2 + ab - ab + b^2 \\
&=a^2 + b^2
\end{align}
\end{subequations}
\begin{equation}
\text{this should have number 3}
\end{equation}
\eqref{a} -- \eqref{b} -- \eqref{c} -- \eqref{foo}
\end{document}
答案2
或者@egreg的答案是,你可以让两个方程的大小相同
\documentclass{report}
\usepackage{mathtools}
\usepackage{kantlipsum}
\counterwithin{equation}{chapter}
\begin{document}
\chapter{Chapter title}
\kant[1][1]
\begin{subequations}
\begin{align}
R_1&=(a+b)^2 - 2ab\\
&=a^2+2ab + b^2 - 2ab\\
&=a^2+b^2
\end{align}
\end{subequations}
\begin{subequations}
\begin{align}
R_2&=
\mathrlap{(a+b)(a-b)} % Overwrites empty space
\phantom{a^2+2ab + b^2 - 2ab} % allocates empty space
\\
&=a^2 + ab - ab + b^2\\
&=a^2 + b^2
\end{align}
\end{subequations}
\kant[1][2]
\end{document}