Alinhamento em ambientes alinhados aninhados

Alinhamento em ambientes alinhados aninhados

Eu tenho uma lista de equações com anotações como a abaixo:

\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}

Renderização: Conjunto de equações

Como as duas últimas linhas têm a mesma anotação, gostaria de adicionar uma chave e colocar a anotação ao lado da chave, assim:

\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}

Renderização: as duas últimas equações com colchetes

Conectar isso ao código original me dá algo parecido com

\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}

Renderização: as equações combinadas com uma chave

O que não funciona é o alinhamento dos sinais de igual: só consigo alinhar os que estão dentro do ambiente alinhado entre si, não os que estão fora.

Eu também gostaria que o ambiente de alinhamento tratasse o conteúdo como três linhas e o numerasse como tal.

Esta é uma pergunta de acompanhamento para Q:Alinhar dentro de alinharem que foi dada uma solução para o problema sem numeração de linhas; um problema semelhante foi discutido em Q:Alinhando blocos de equações 'alinhados'- a solução usou um ambiente de array e, portanto, também não permite numeração de linhas.

Desde já, obrigado.

Responder1

Osoluçãoà questão apontada por Barbara Beeton está próxima da ideia certa. Na verdade, você poderia usar essa solução colocando cada objeto que deseja numerar em seu próprio arquivo aligned. No entanto, isso é bastante trabalhoso e a seguinte variação parece funcionar bem o suficiente:

\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}

Exemplo de saída

Você precisará chamar \setmyleftlencom o lado esquerdo mais longo do seu alignedambiente antes de aligncomeçar. O que o código faz é mover o alignedbloco para a esquerda nesse valor mais um extra 7mu. O valor 7mufoi uma estimativa, mas parece corresponder a alguns outros valores usados ​​pelos comandos matemáticos do AMS. Sendo expresso em mu(unidades matemáticas), ele será bem dimensionado para outros tamanhos de pontos.

Responder2

Esta é uma versão melhorada da resposta de @AndrewSwann para escalar corretamente se substituirmos o ddddo exemplo por algo consideravelmente maior e acabarmos com o mágico 7mu. Adicionei um exemplo que mostra como aninhá-lo também.

\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}

Renderização

informação relacionada