将多个子方程相互对齐

将多个子方程相互对齐

有关的:在多个对齐环境中对齐等号

我有 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}

在此处输入图片描述

相关内容