按顶行对齐矩阵

按顶行对齐矩阵

我正在编写一个小数组,其元素是不同大小的矩阵,我希望它们按其顶行对齐。

事情是这样的:

\documenstyle{article}
\use{mathtools}
\begin{document}
\begin{array}{ccc}
I_2&I_3&I_4\\
\hline
\begin{bmatrix}
   1&0\\ 0&1
\end{bmatrix}
\begin{bmatrix}
   1&0&0\\ 0&1&0\\ 0&0&1
\end{bmatrix}
\begin{bmatrix}
   1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1
\end{bmatrix}
\end{array}
\end{document}

但矩阵是垂直居中的:

LaTeX 矩阵

我可以通过使用使矩阵按其顶行垂直对齐,raisebox但这很麻烦:

\documentclass{article}
\usepackage{mathtools}
\begin{document}
\[
  \begin{array}{ccc}
    I_2&I_3&I_4\\
    \hline
    \rule{0mm}{11mm}\raisebox{4mm}{\begin{bmatrix}
      1&0\\ 0&1
    \end{bmatrix}}
    &
    \raisebox{2mm}{\begin{bmatrix}
      1&0&0\\ 0&1&0\\ 0&0&1
    \end{bmatrix}}
    &
    \begin{bmatrix}
      1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1
    \end{bmatrix}
  \end{array}
\]
\end{document}

LaTeX 矩阵对齐

这就是我想要的效果 —— 但肯定有比反复试验更好的方法来获得这种对齐raisebox

答案1

使用包\belowbaseline的宏stackengine。它将把参数的顶部放置在基线下方给定距离处。该距离可以作为可选参数 ( \belowbaseline[<gap>]{...}) 给出,也可以通过 设置为默认可选参数\setstackgap{S}{<gap>}

有一个类似的\abovebaseline宏,用于将对象底部设置在相对于基线的给定垂直水平。

\documentclass{article}
\usepackage{mathtools,stackengine}
\begin{document}
\[
\begin{array}{ccc}
I_2&I_3&I_4\\
\hline
\belowbaseline[-3pt]{$\begin{bmatrix}
   1&0\\ 0&1
\end{bmatrix}$}
&
\belowbaseline[-3pt]{$\begin{bmatrix}
   1&0&0\\ 0&1&0\\ 0&0&1
\end{bmatrix}$}
&
\belowbaseline[-3pt]{$\begin{bmatrix}
   1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1
\end{bmatrix}$}
\end{array}
\]
\end{document}

在此处输入图片描述

请注意,如果(而不是默认的)有效,则可以消除参数$中的分隔符。\belowbaseline\stackMath\stackText

答案2

您可以使用delarray

\documentclass{article}
\usepackage{delarray,booktabs}

\begin{document}

\[
\begin{array}{ccc}
I_2&I_3&I_4\\
\midrule
\begin{array}[t]\lbrack{@{}cc@{}}\rbrack
   1&0\\ 0&1
\end{array}
&
\begin{array}[t]\lbrack{@{}ccc@{}}\rbrack
   1&0&0\\ 0&1&0\\ 0&0&1
\end{array}
&
\begin{array}[t]\lbrack{@{}cccc@{}}\rbrack
   1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1
\end{array}
\end{array}
\]

\end{document}

水平线的间距以\midrule从 开始为佳booktabs

在此处输入图片描述

答案3

您可以使用具有密钥{bNiceMatrix}的环境来执行此操作。nicematrixt

\documentclass{article}
\usepackage{nicematrix}
\begin{document}
$\begin{array}{ccc}
I_2&I_3&I_4\\
\hline
\rule{0pt}{10pt}
\begin{bNiceMatrix}[t]
   1&0\\ 0&1
\end{bNiceMatrix}
& 
\begin{bNiceMatrix}[t]
   1&0&0\\ 0&1&0\\ 0&0&1
\end{bNiceMatrix}
& 
\begin{bNiceMatrix}[t]
   1&0&0&0\\ 0&1&0&0\\ 0&0&1&0\\ 0&0&0&1
\end{bNiceMatrix}
\end{array}$
\end{document}

您需要多次编译(因为nicematrix在后台使用 PGF/Tikz 节点)。

上述代码的输出

相关内容