Выравнивание по вложенным выровненным средам

Выравнивание по вложенным выровненным средам

У меня есть список уравнений с аннотациями, как показано ниже:

\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:Выровнять внутри выравниватьв котором было дано решение задачи без нумерации строк; похожая задача обсуждалась в Q:Выравнивание по «выровненным» блокам уравнений-- однако решение использовало среду массива и, таким образом, также не допускало нумерации строк afaict.

Заранее спасибо.

решение1

Theрешениена вопрос, указанный Барбарой Битон, близок к правильной идее. Фактически, вы могли бы использовать это решение, помещая каждый объект, который вы хотите пронумеровать, в свой собственный 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с самой длинной левой стороной в вашей alignedсреде до alignначала. Код перемещает alignedблок влево на эту величину плюс дополнительный 7mu. Величина 7muбыла догадкой, но, похоже, соответствует некоторым другим значениям, используемым математическими командами AMS. Будучи выраженным в mu(математических единицах), он будет хорошо масштабироваться для других размеров точек.

решение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}

рендеринг

Связанный контент