我希望有一个方程,其中序列的每个下一个元素都位于新行上,并与前一个元素对齐,但在多个级别上。这就像 Lisp 代码中的对齐,但是以数学符号表示,而不是代码列表。
如果我使用align
,它对一个级别来说很好,但是,如果我将它用于更多级别,其他级别将在第一级别对齐的最长行的末尾对齐。如果我aligned
对每个其他级别的对齐实例都使用 ,它会起作用,但很快就会变得混乱。最后有一个演示。
如何轻松对齐嵌套序列的元素?这意味着不会有太多样板代码,例如每个对齐实例的环境。我想象弹性制表位会很好用,但我还没有在 LATEX 中找到并实现它们。
\documentclass{minimal}
\usepackage[paperwidth=5cm, paperheight=7cm]{geometry}
\usepackage{amsmath}
\begin{document}
\begin{align*}
A = ( \ & \mathrm{stuff}, \\
& \begin{aligned}
( \ & z, \\
& \begin{aligned}
( \ & 1, \\
& 2 \ ),
\end{aligned} \\
& a, \\
& b \ ),
\end{aligned} \\
& \mathrm{stuff2} \ )
\end{align*}
\end{document}
答案1
可以通过以下方式NiceArray
实现alignat*
\documentclass{book}
\usepackage{amsmath}
\usepackage{nicematrix}
\begin{document}
\begin{minipage}[t]{2.5cm}
with \verb|NiceArray|
$\setlength{\arraycolsep}{0mm}
\begin{NiceArray}[t]{l l l l l l}
1 & & & & &
\\
& 2 & & & &
\\
& & 3 & & &
\\
& & & 4 & &
\\
& & & & 5 &
\\
& & & & & 6
\end{NiceArray}$
\end{minipage}%
\hspace*{0.5cm}%
\begin{minipage}[t]{2.5cm}
with \verb|alignat*|
\vspace*{-1.75\baselineskip}
\begin{alignat*}{6}
1 & & & & &
\\
& 2 & & & &
\\
& & 3 & & &
\\
& & & 4 & &
\\
& & & & 5 &
\\
& & & & & 6
\end{alignat*}
\end{minipage}
\end{document}
答案2
我更喜欢这个解决方案:nath 包提供\wall
,它确保每一行都从其位置开始,除非它被其他行覆盖\wall
或被取消\return
,因此\wall
和\return
可以嵌套。
\usepackage{nath}
…
\[
A = ( \ \wall \mathrm{stuff}, \\
( \ \wall z, \\
( \ \wall 1, \\
2 \ ), \return \\
a, \\
b \ ), \return \\
\mathrm{stuff2} \ ) \\
\]