我无法使表格的多行垂直居中(它只能水平居中):
\def\arraystretch{1.5}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{table}[t]
\caption{Caption.}
\label{table:label}
\begin{tabularx}{\columnwidth}{| Y | Y | X | X |}
\hline
& OA & Acc & Time [minutes] \\
\hline
\multirow{2}{*}{\hfil A} & \multirow{2}{*}{100\%} & 100\% & x \\
\cline{3-4}
& & 100\% & y \\
\hline
\multirow{2}{*}{B} & & 100\% & 100\% \\
\cline{3-3}
& - & Urban areas: 100\% & \\
\hline
\end{tabularx}
\end{table}
答案1
对于 来说,重要的multirow
不是它必须包含的行数,而是 的数量 n lines
。对于段落模式中的单元格(如p,m, b
或 ) ,这些值可能有所不同X
。更改 的值\arraystretch
也会使等效行的计算更加复杂。如果我没记错的话,从 2.0 版开始,多行 接受带有小数的行数,这使得微调内容的垂直位置更加容易。在这里,我应该取n=3
,但n=2.8
结果更好。
无关:我用更正确的尾字符替换了最后一个 \multirow 中的连字符(这里不相关)。我还加载了caption
标题和表格之间的适当间距。
\documentclass{article}
\usepackage{ragged2e}
\usepackage{multirow, tabularx, caption}
\captionsetup{skip=6pt}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{document}
\def\arraystretch{1.5}
\begin{table}[t]
\caption{Caption.}
\label{table:label}
\begin{tabularx}{\columnwidth}{| Y | Y | *{2}{ >{\RaggedRight\arraybackslash}X |}}
\hline
& OA & Acc & Time [minutes] \\
\hline
\multirow{2}{*}{A} & \multirow{2}{*}{100\,\%} & 100\,\% & x \\
\cline{3-4}
& & 100\% & y \\
\hline
\multirow{2.8}{*}{ B} &\multirow{2.8}{*}{–} & 100\,\% & 100\,\% \\
\cline{3-3}
& & Urban areas: 100\,\% & \\
\hline
\end{tabularx}
\end{table}
\end{document}
答案2
multirow
当通过重新定义更改默认行距时,无法正确预测高度\arraystretch
。在这种情况下,您需要multirow
通过将选项传递[-6pt]
给multirow
命令来手动调整单元格内容的垂直位置。
\renewcommand\arraystretch{1.5}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{table}[t]
\caption{Caption.}
\label{table:label}
\begin{tabularx}{\columnwidth}{| Y | Y | X | X |}
\hline
& OA & Acc & Time [minutes] \\
\hline
\multirow{2}{*}{A} & \multirow{2}{*}{100\%} & 100\% & x \\
\cline{3-4}
& & 100\% & y \\
\hline
\multirow{2}{*}[-6pt]{B} & & 100\% & 100\% \\ % ---> [-6pt]
\cline{3-3}
& - & Urban areas: 100\% & \\
\hline
\end{tabularx}
\end{table}