我正在编写一个小数组,其元素是不同大小的矩阵,我希望它们按其顶行对齐。
事情是这样的:
\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}
但矩阵是垂直居中的:
我可以通过使用使矩阵按其顶行垂直对齐,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}
这就是我想要的效果 —— 但肯定有比反复试验更好的方法来获得这种对齐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}
的环境来执行此操作。nicematrix
t
\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 节点)。