括号围绕线条和对齐

括号围绕线条和对齐

我想制作一张这样的图片

在此处输入图片描述

不过,我希望逗号能够对齐。

通常我会用alignat这个,但我不知道如何将括号放在跨行以及n=1精确地放在行之间。

itemize这是使用和的MWE cases,但我不认为这是正确的方法

\documentclass{article}
\usepackage{amsmath}

\begin{document}

\begin{itemize}

\item[$n=1$]
$\begin{cases}
(a, b) \\
(cde, f)
\end{cases}$

\item[$n=2$]
$(g, h)$

\item[$n=3$]
$\begin{cases}
(ij, k) \\
(lmno, pq) \\
(rs, tuv)
\end{cases}$

\end{itemize}

\end{document}

答案1

您可以使用 来完成此操作blkarray,如果您希望它看起来像一个枚举,则可以使用fleqn 来自 的环境nccmath

\documentclass{article}
\usepackage{blkarray, bigstrut, booktabs, nccmath}
\usepackage[showframe]{geometry}

\begin{document}

\vspace*{1cm}
\begin{fleqn}
    \[ \begin{blockarray}{l>{(}r@{,{}}l<{)}}
\begin{block}{l\{>{(}r@{,{}}l<{)}}
\BAmultirow{30pt}{$ n = 1 $} & a & b \\
 & cde & f \\
\end{block}
\addlinespace[2ex]
 n =2 & g & h \\
\addlinespace[2ex]
\begin{block}{l\{>{(}r@{,{}}l<{)}}
\BAmultirow{30pt}{$ n = 3 $} & i j & k \\
 & lmno & pq \bigstrut[t]\\
  & rs & tuv \bigstrut[b]\\
\end{block}
    \end{blockarray} \]
\end{fleqn}

\end{document} 

在此处输入图片描述

答案2

您可以使用位置标记将内容逐个推到右侧。此功能由以下工具提供:zref模块savepos。它用于\zsaveposx{<label>}存储放置时的 x 坐标,并检索可用于计算的\zposx{<label>}x 坐标(以s点为单位):p

下面我定义了\setshifttarget{<label>}一个标记,所有其他标记将根据该标记\shiftright{<stuff>}对齐(水平)。您只需将其放置<label>在适当的位置(在您的例子中,我使用了lmno)。

在此处输入图片描述

\documentclass{article}

\usepackage{amsmath,zref-savepos}

\newcounter{str}
\newcommand{\shiftright}[1]{%
  \stepcounter{str}%
  \zsaveposx{str-\thestr}%
  \hspace{\dimexpr\zposx{\stshfttrgt}sp-\zposx{str-\thestr}sp}%
  \makebox[0pt][r]{$#1$}%
}
\newcommand{\setshifttarget}[1]{\def\stshfttrgt{#1}}

\begin{document}

\setshifttarget{lmno}
\begin{itemize}
  \item[$n=1$]
    $\begin{cases}
    \shiftright{(a}, b) \\
    \shiftright{(cde}, f)
    \end{cases}$

  \item[$n=2$]
    $\shiftright{(g}, h)$

  \item[$n=3$]
    $\begin{cases}
    \shiftright{(ij}, k) \\
    (lmno\zsaveposx{lmno}, pq) \\
    \shiftright{(rs}, tuv)
    \end{cases}$

\end{itemize}

\end{document}

由于zref使用\label-\ref系统,您必须对任何文档更改进行两次编译,以使标记位置稳定下来并获得所需的效果。

相关内容