我想垂直对齐几个表格单元格,其中一个单元格包含array
。考虑以下 MWE:
\documentclass{article}
\usepackage{graphicx}
\usepackage{array}
\begin{document}
\begin{tabular}{*{5}{m{0.2\textwidth}}}
Some text &
\includegraphics[width=15mm]{example-grid-100x100pt} &
\(\left(\begin{array}{cc}
1 & 0 \\
0 & 1
\end{array}\right)\) &
\((1,0,1,0)\) &
\rule{15mm}{15mm}
\end{tabular}
\end{document}
得出的结果是(我添加了绿色参考线):
文本、图像、简单的内联数学和规则都正确垂直对齐,但被array
向下推。相反,我期望的是以下内容:
为什么数组没有垂直居中? 修复此问题最简单的方法是什么?
答案1
问题出在你的\rule
(它的基线在哪里?)。如果你将它封装在某个框中,你可以为其定义基线,例如借助\valign
来自的宏\adjustbox
,对第二列中的图像执行相同的操作,那么列类型中所有表格元素的p
基线都将垂直居中:
\documentclass{article}
\usepackage[export]{adjustbox} % also load graphicx package
\usepackage{array}
\begin{document}
\noindent%
\begin{tabular}{*{5}{>{\centering\arraybackslash}p{\dimexpr0.2\textwidth-2\tabcolsep}}}
Some text &
\includegraphics[width=15mm,valign=c]{example-grid-100x100pt} &
\(\left(\begin{array}{cc}
1 & 0 \\
0 & 1
\end{array}\right)\) & \((1,0,1,0)\) & \adjustbox{valign=c}{\rule{15mm}{15mm}}
\end{tabular}
\end{document}
(红线表示文字边框)
如您所见,我还更改了表格可容纳文本区域的列宽。