我在尝试对齐单行和多行时遇到问题bmatrices
:
\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
x = &\begin{bmatrix} 1&2&3 \end{bmatrix}\\
y = &\begin{bmatrix} 1&2&3\\3&2&1 \end{bmatrix}\\
z = &\begin{bmatrix} 1&2&3\\3&2&1\\4&4&4 \end{bmatrix}
\end{align*}
\end{document}
我猜解决办法是强制使用与线数最多的矩阵相同的矩阵跟踪,但是该怎么做呢?
上面的例子导致了对问题的错误解释。我想要的是在每个括号的开头进行对齐:
\documentclass[12pt]{article}
\usepackage{amsmath}
\begin{document}
\begin{align*}
x = &\begin{bmatrix} 1&2&3&6&5 \end{bmatrix}\\
y = &\begin{bmatrix} 1&2&3\\3&2&1 \end{bmatrix}\\
z = &\begin{bmatrix} 1&2&3&4\\3&2&4&1\\5&4&4&4 \end{bmatrix}
\end{align*}
\end{document}
并且答案不再有效:
答案1
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{calc}
\newlength\lone
\newcommand\fitto[2]{%
\setlength\lone{\widthof{$#1$}}%
\makebox[\lone][c]{$#2$}%
}
\begin{document}
\def\x{\begin{bmatrix} 1&2&3\\3&2&1\\4&4&4 \end{bmatrix}}
\begin{align*}
x = &\fitto{\x}{\begin{bmatrix} 1&2&3 \end{bmatrix}}\\
y = &\fitto{\x}{\begin{bmatrix} 1&2&3\\3&2&1 \end{bmatrix}}\\
z = &\fitto{\x}{\x}
\end{align*}
\end{document}
答案2
遗憾的是,没有简单的方法可以覆盖align
-like 环境的对齐方式。它们始终(正确地)遵循r
右-l
左 (R&L) 对齐方式。您可以使用不同的前导码 ( align@preamble
) 来更改此对齐方式:
\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\makeatletter
\newenvironment{rcalign*}{%
\def\align@preamble{%
&\hfil
\strut@
\setboxz@h{\@lign$\m@th\displaystyle{####}$}%
\ifmeasuring@\savefieldlength@\fi
\set@field
\tabskip\z@skip
&\hfil\setboxz@h{\@lign$\m@th\displaystyle{{}####}$}%
\ifmeasuring@\savefieldlength@\fi
\set@field
\hfil
\tabskip\alignsep@
}%
\start@align\@ne\st@rredtrue\m@ne%
}
{\endalign}
\makeatother
\begin{document}
\begin{align*}
x = &\begin{bmatrix} 1&2&3 \end{bmatrix} \\
y = &\begin{bmatrix} 1&2&3\\3&2&1 \end{bmatrix} \\
z = &\begin{bmatrix} 1&2&3\\3&2&1\\4&4&4 \end{bmatrix}
\end{align*}
\begin{rcalign*}
x = &\begin{bmatrix} 1&2&3 \end{bmatrix} \\
y = &\begin{bmatrix} 1&2&3\\3&2&1 \end{bmatrix} \\
z = &\begin{bmatrix} 1&2&3\\3&2&1\\4&4&4 \end{bmatrix}
\end{rcalign*}
\end{document}
rcalign*
上述示例定义了具有r
右对齐(R&C)的环境c
。这仅在您将运算符与 R 列(左侧)一起使用时才有效,并且肯定不会在 C 列(右侧)中包含除这些矩阵之外的任何内容。
答案3
其他方式:
(已更新)(根据 egreg 的建议添加了变体)(分两步完成...)
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{array}
\begin{document}
\begin{equation*}\tabcolsep0pt
\begin{tabular}{>{$\displaystyle}c<{$}>{$\displaystyle}c<{$}}
x = {} &\begin{bmatrix} 1&2&3 \end{bmatrix}\\
\noalign{\vskip\jot}
y = {} &\begin{bmatrix} 1&2&3\\3&2&1 \end{bmatrix}\\
\noalign{\vskip\jot}
z = {} &\begin{bmatrix} 1&2&3\\3&2&1\\4&4&4 \end{bmatrix}
\end{tabular}
\end{equation*}
% former proposal
% \begin{equation*}
% \begin{matrix}
% x & = &\begin{bmatrix} 1&2&3 \end{bmatrix}\\
% \noalign{\vskip\jot}
% y & = &\begin{bmatrix} 1&2&3\\3&2&1 \end{bmatrix}\\
% \noalign{\vskip\jot}
% z & = &\begin{bmatrix} 1&2&3\\3&2&1\\4&4&4 \end{bmatrix}
% \end{matrix}
% \end{equation*}
\end{document}
(我不确定它们是否\displaystyle
有用;在本例中没有用,但在其他情况下也许有用)
注释掉的代码给出:
现在,egreg 的表格列规范如下(我忘记了这是消除列间干扰的更好方法)。我还从、等中@{}
删除了 ,并添加了最后一个矩阵,使其正常排版以比较间距。{}
x={}
y={}
\begin{equation*}
\begin{tabular}{@{}>{$\displaystyle}r<{$}@{}>{$\displaystyle{}}c<{$}@{}}
x = &\begin{bmatrix} 1&2&3 \end{bmatrix}\\
\noalign{\vskip\jot}
y = &\begin{bmatrix} 1&2&3\\3&2&1 \end{bmatrix}\\
\noalign{\vskip\jot}
z = &\begin{bmatrix} 1&2&3\\3&2&1\\4&4&4 \end{bmatrix}
\end{tabular}
\end{equation*}
\begin{equation*}
z = \begin{bmatrix} 1&2&3\\3&2&1\\4&4&4 \end{bmatrix}
\end{equation*}
我还没有将=
标志移到 建议的位置egreg
。它在这里:
\begin{equation*}
\begin{tabular}{@{}>{$\displaystyle}r<{$}@{}>{$\displaystyle{}}c<{$}@{}}
x &=\begin{bmatrix} 1&2&3 \end{bmatrix}\\
\noalign{\vskip\jot}
y &=\begin{bmatrix} 1&2&3\\3&2&1 \end{bmatrix}\\
\noalign{\vskip\jot}
z &=\begin{bmatrix} 1&2&3\\3&2&1\\4&4&4 \end{bmatrix}
\end{tabular}
\end{equation*}
答案4
使用包nicamatrix
,您将获得一个密钥delimiters/max-width
。当此密钥生效时,nicematrix
({pNiceMatrix}
、{bNiceMatrix}
等)环境的所有分隔符都以等于此类分隔符的最大宽度的宽度绘制。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
{\NiceMatrixOptions{delimiters/max-width}
\begin{align*}
x & =
\begin{bNiceMatrix}
1 & 2 & 3 \\
\end{bNiceMatrix} \\
y & =
\begin{bNiceMatrix}
1 & 2 & 3 \\
3 & 2 & 1
\end{bNiceMatrix} \\
z & =
\begin{bNiceMatrix}
1 & 2 & 3 \\
3 & 2 & 1 \\
4 & 4 & 4
\end{bNiceMatrix}
\end{align*}}
\end{document}