我正在尝试使用下括号/上括号来表示某些术语在对齐环境中的来源。我希望下括号/上括号的工作方式是来自一行中的一个术语,并清楚地将下一行中的某些术语括起来,表明下一行中的术语来自上一行中的术语。例如,设是没有大于的部分$p(n,k)$
的分区数,并且。然后:$n$
$k$
$p(0,k) = 1$
\begin{align*}
p(6,3) &= [p(3,3)] + \langle p(4,2) \rangle + p(5,1) \\
&= [p(0,3) + p(1,2) + p(2,1)] + \langle p(2,2) + p(3,1) \rangle + p(5,1)
\end{align*}
我想要一个$[p(0,3) + p(1,2) + p(2,1)]$
指向 的上方过度支撑$[p(3,3)]$
,以及一个$\langle p(2,2) + p(3,1) \rangle$
指向 的上方过度支撑$\langle p(4,2) \rangle$
。
答案1
使用array
很简单。我给出了两个版本,一个没有箭头,一个有箭头。一些局部定义有助于使代码更紧凑,因此在 的参数中array
我们不需要使用@{}
来抑制列间空间,而是使用C
(>{{}}c<{{}}
这会增加空原子,以便在要插入的二元关系或操作周围形成自动空间)。
\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\begin{document}
\begin{equation*}
\setlength{\arraycolsep}{0pt}
\newcolumntype{C}{>{{}}c<{{}}}
\renewcommand{\arraystretch}{1.2}
\begin{array}{c C c C c C c}
p(6,3) &=& [p(3,3)] &+& \langle p(4,2)\rangle &+& p(5,1) \\
&=& \overbrace{\,[p(0,3)+p(1,2)+p(2,1)]\,}
&+& \overbrace{\langle p(2,2)+p(3,1)\rangle}
&+& p(5,1)
\end{array}
\end{equation*}
\begin{equation*}
\setlength{\arraycolsep}{0pt}
\newcolumntype{C}{>{{}}c<{{}}}
\begin{array}{c C c C c C c}
p(6,3) &=& [p(3,3)] &+& \langle p(4,2)\rangle &+& p(5,1) \\
&& \uparrow && \uparrow \\
&=& \overbrace{\,[p(0,3)+p(1,2)+p(2,1)]\,}
&+& \overbrace{\langle p(2,2)+p(3,1)\rangle}
&+& p(5,1)
\end{array}
\end{equation*}
\end{document}
在第二种情况下(带箭头),增加行距会产生不利影响。
我\,
在第一个对象的两侧添加了,\overbrace
以避免大括号与方括号发生冲突,并且与尖括号相比产生更统一的外观。
您可以在包中使用左对齐和不对称括号abraces
。
\documentclass{article}
\usepackage{amsmath}
\usepackage{array}
\usepackage{abraces}
\begin{document}
\begin{equation*}
\setlength{\arraycolsep}{0pt}
\newcolumntype{C}{>{{}}c<{{}}}
\renewcommand{\arraystretch}{1.2}
\begin{array}{c C l C l C c}
p(6,3) &=& \,[p(3,3)] &+& \langle p(4,2)\rangle &+& p(5,1) \\
&=& \aoverbrace[L1U9R]{\,[p(0,3)+p(1,2)+p(2,1)]\,}
&+& \aoverbrace[L1U6R]{\langle p(2,2)+p(3,1)\rangle}
&+& p(5,1)
\end{array}
\end{equation*}
\end{document}
然而,这些参数必须“用眼睛”计算。
答案2
像这样吗?
\documentclass{article}
\usepackage{amsmath} % for \overbrace macro and align* environment
\newlength\lenA
\newlength\lenB
\newcommand\mybox[2]{\parbox{#1}{\centering$\displaystyle #2$}}
\begin{document}
\newcommand\termA{{\overbrace{[p(0,3) + p(1,2) + p(2,1)]}^{\uparrow}}}
\newcommand\termB{{\overbrace{\langle p(2,2) + p(3,1) \rangle}^{\uparrow}}}
\settowidth\lenA{$\displaystyle\termA$}
\settowidth\lenB{$\displaystyle\termB$}
\begin{align*}
p(6,3) &= \mybox{\lenA}{[p(3,3)]} + \mybox{\lenB}{\langle p(4,2) \rangle} + p(5,1) \\
&= \termA + \termB + p(5,1)
\end{align*}
\end{document}
答案3
另一种方式,使用alignat*
和eqparbox
:
\documentclass{article}
\usepackage{amsmath}
\usepackage{eqparbox}
\newcommand{\eqmathbox}[2][M]{\eqmakebox[#1]{$\displaystyle#2$}}
\begin{document}
\begin{alignat*}{3}
p(6,3) &= \eqmathbox{[p (3,3)] } & & +\eqmathbox[m]{ \langle p (4,2) \rangle} & & + p(5,1) \\
&={} \overbrace{\eqmathbox{\bigl[p(0,3) + p(1,2) + p(2,1)\bigr]}}^{\uparrow} & & + \overbrace{\eqmathbox[m]{\bigl\langle p(2,2) + p(3,1) \bigr\rangle}}^{\uparrow}{} & & + p(5,1)
\end{alignat*}
\end{document}