我想制作一张这样的图片
不过,我希望逗号能够对齐。
通常我会用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
系统,您必须对任何文档更改进行两次编译,以使标记位置稳定下来并获得所需的效果。