У меня есть список уравнений с аннотациями, как показано ниже:
\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}