嵌套对齐环境之间的对齐

嵌套对齐环境之间的对齐

我有一个带有注释的方程式列表,如下所示:

\documentclass{scrartcl}
\usepackage{amsmath}
\begin{document}
\begin{align}
  aaaa &= 1  &&\text{for $X$} \\
  bbbb &= 1  &&\text{for $Y$} \\
  c    &= 1  &&\text{for $Z$} \\
  d    &= 12 &&\text{for $Z$}
\end{align}
\end{document}

渲染:方程组

由于最后两行有相同的注释,我想在那里添加一个括号并将注释放在括号旁边,如下所示:

\documentclass{scrartcl}
\usepackage{amsmath}
\begin{document}
\begin{align}
  \left. \begin{aligned}
    c &= 1 \\
    d &= 12 \\
  \end{aligned} \right\} &&\text{for $Z$}
\end{align}
\end{document}

渲染:最后两个方程式带有括号

将其插入原始代码中,我得到了类似这样的结果

\documentclass{scrartcl}
\usepackage{amsmath}
\begin{document}
\begin{align}
  aaaa &= 1  &&\text{for $X$} \\
  bbbb &= 1  &&\text{for $Y$} \\
  \left. \begin{aligned}
    c &= 1 \\
    d &= 12 \\
  \end{aligned} \right\}& &&\text{for $Z$}
\end{align}
\end{document}

渲染:带括号的组合方程式

不起作用的是等号的对齐:我只能将对齐环境内部的等号相互对齐,而不能将外部的等号对齐。

我还希望对齐环境将内容视为三行并按此编号。

这是对以下问题的后续问题:内对齐其中给出了没有行号的问题的解决方案;在 Q 中讨论了类似的问题:跨“对齐”方程块进行对齐—— 但是,该解决方案使用了数组环境,因此也不允许进行行编号。

提前致谢。

答案1

解决方案Barbara Beeton 指出的问题接近正确的想法。事实上,你可以通过将每个希望编号的对象放入其自己的 中来使用该解决方案aligned。然而,这需要相当多的工作,并且以下变体似乎运行良好:

\documentclass{scrartcl}
\usepackage{amsmath}

\newlength{\myleftlen}
\newcommand{\setmyleftlen}[1]{\settowidth{\myleftlen}{\( \displaystyle
#1\)}}
\newcommand{\backup}{\hskip-\myleftlen\mkern-7mu}

\begin{document}

\setmyleftlen{ddd}
\begin{align}
  aaaa &= 1  &&\text{for $X$} \\
  bbbb &= 1  &&\text{for $Y$} \\
  &\left.\backup\begin{aligned}
    c &= 1 \\
    ddd &= 12 \\
  \end{aligned} \right\} &&\text{for $Z$}
\end{align}

\end{document}

示例输出

在开始之前,您需要使用环境\setmyleftlen中最长的左侧进行调用。代码的作用是将块向左移动此量加上额外的。该量是猜测的,但似乎与 AMS 数学命令使用的一些其他值相符。以(数学单位)表示,它将很好地缩放到其他点大小。alignedalignaligned7mu7mumu

答案2

这是@AndrewSwann 答案的改进版本,如果将ddd示例中的替换为更大的东西并取消神奇的,则可以正确进行缩放7mu。我还添加了一个示例来演示如何嵌套它。

\documentclass[preview]{standalone}
\usepackage{amsmath}
\usepackage{calc}
\usepackage{xparse}
\newlength\mytemplena
\newlength\mytemplenb
\DeclareDocumentCommand\myalignalign{sm}
{
  \settowidth{\mytemplena}{$\displaystyle #2$}%
  \setlength\mytemplenb{\widthof{$\displaystyle=$}/2}%
  \hskip-\mytemplena%
  \hskip\IfBooleanTF#1{-\mytemplenb}{+\mytemplenb}%
}
\begin{document}
\begin{align}
  a &= 1\\
  bb &= 1\\
  \myalignalign{eeeeee} &\left.
    \myalignalign*{eeeeee}
    \begin{aligned}
      \myalignalign{dddd} &\left.
        \myalignalign*{dddd}
        \begin{aligned}
          ccc &= 1 \\
          dddd &= 123\\
        \end{aligned} \quad
      \right\} Z1,Z2\\
      eeeeee &= 12345678\\
    \end{aligned} \quad
  \right\} Z1,Z2,Z3
\end{align}
\end{document}

渲染

相关内容