我正在尝试为单元格包含图像或文本的表格实现良好的垂直对齐,但我对adjustbox
与的交互感到困惑multirow
。
MWE 如下,其中使用\adjustbox{valign=c}{\imma}
而不是\imma
可以与文本非多行单元格实现良好对齐。如果没有它,则\multirow{2}*{\imma} gets good alignment with the various
\imma`,但文本单元格将底部对齐。
由于该表主要包含图形和简短文本,所以问题基本上是如何使所有单元格垂直居中?(最好不要影响通过、、、... 列类型的水平r
对齐。)l
c
\documentclass{article}
\usepackage{booktabs}
\usepackage{adjustbox}
\usepackage{multirow}
\begin{document}
\newcommand{\imma}{\includegraphics[height=1cm,width=3cm]{example-image-a}}
\begin{tabular}{@{}lcllc@{}}
\toprule
\multirow{2}*{0} & c2f & \multirow{2}*{\imma} & \imma & \multirow{2}*{\imma} \\
\cmidrule(lr){2-2}
\cmidrule{4-4}
& f2c & & \imma & \\
\midrule
\multirow{2}*{1} & c2f & \imma & \imma & \multirow{2}*{\imma} \\
\cmidrule(l){2-4}
& f2c & \imma & \imma & \\
\midrule
\multirow{2}*{2} & c2c & \adjustbox{valign=c}{\imma} & & \adjustbox{valign=c}{\multirow{2}*{\imma}} \\
\cmidrule(l){2-3}
& f2f & \adjustbox{valign=c}{\imma} & & \\
\bottomrule
\end{tabular}
\end{document}
答案1
这里有一个需要理解的基本概念:当你希望将内容垂直居中对齐时,你需要调整锚点。作为一个具体的例子,考虑垂直对齐这两个元素:
x \includegraphics[height=1cm,width=3cm]{example-image}
上面的两个项目都与基线对齐(垂直)。直观地讲,人们会希望设置垂直对齐,以便x
它位于图像的垂直中心,例如
\adjustbox{valign=c}{x} \includegraphics[height=1cm,width=3cm]{example-image}
然而,这并没有产生预期的结果。相反,你应该将图像的锚点调整到其中心(感谢\usepackage[export]{adjustbox}
):
x \includegraphics[height=1cm,width=3cm,valign=c]{example-image}
事实上,最好使用
\adjustbox{valign=c}{x} \includegraphics[height=1cm,width=3cm,valign=c]{example-image}
(但这并非总是必要的,并且可能取决于两个元素)。
考虑到这一点,这里有一个稍微不同的方法来构建相同的表格,而无需multirow
:
\documentclass{article}
\usepackage{booktabs}
\usepackage[export]{adjustbox}
\begin{document}
\newcommand{\img}{\includegraphics[height=1cm,width=3cm,valign=c]{example-image}}
\begin{tabular}{ @{} l *{4}{@{} c } @{} }
\toprule
\adjustbox{valign=c}{0~} & \begin{tabular}{ c }
\vphantom{\img}c2f \\
\midrule
\vphantom{\img}f2c
\end{tabular} & \img & \begin{tabular}{ c }
\img \\
\midrule
\img
\end{tabular} & ~\img \\
\midrule
\adjustbox{valign=c}{1~} & \multicolumn{3}{@{} c @{}}{\begin{tabular}{ *{3}{c} }
c2f & \img & \img \\
\midrule
f2c & \img & \img
\end{tabular}} & ~\img \\
\midrule
\adjustbox{valign=c}{2~} & \multicolumn{2}{@{} c @{}}{\begin{tabular}{ *{2}{c} }
c2f & \img \\
\midrule
f2c & \img
\end{tabular}} & & ~\img \\
\bottomrule
\end{tabular}
\end{document}