多行“bmatrices”之间的对齐问题

多行“bmatrices”之间的对齐问题

我在尝试对齐单行和多行时遇到问题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}

上述代码的输出

相关内容