我想让我的垂直表格标题(“行”)居中。
表格如下所示
它是用该代码创建的:
\documentclass{scrreprt}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{rotating}
\usepackage{makecell}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\renewcommand\theadfont{\bfseries}
\begin{document}
\begin{table}[ht]
\centering
\begin{tabularx}{.3\textwidth}{@{}Y|*{4}{Y}@{}}
\toprule
\multicolumn{2}{c}{} & \multicolumn{3}{c@{}}{\thead{Columns}} \\
\cmidrule(l){3-5}
\multicolumn{2}{c}{} & \thead{X} & \thead{Y} & \thead{Z} \\
\multirow{4}{*}{\rotatebox[origin=c]{90}{\thead{Rows}}}
& \thead{A} & ax & ay & az \\
& \thead{B} & bx & by & bz \\
& \thead{C} & cx & cy & cz \\
& \thead{D} & dx & dy & dz \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
我知道\multirow
有这个选项[<vmove>]
,有了它,我可以尝试使用一些随机值来让它看起来几乎居中。例如,使用这条线\multirow{4}{*}[-.81em]{\rotatebox[origin=c]{90}{\thead{Rows}}}
。
但这并不准确,而且每次我添加或删除一行时,我都必须为垂直对齐找到一个新的值。这不可能是正确的解决方案。
将多行表格标题居中的正确方法是什么?提前谢谢您!
答案1
和nicematrix
:
\documentclass{scrreprt}
\usepackage{booktabs}
\usepackage{makecell}
\renewcommand\theadfont{\bfseries}
\usepackage{nicematrix}
\begin{document}
\begin{table}[ht]
\centering
\begin{NiceTabular}{@{}wc{\dimexpr 0.0666\textwidth-2\tabcolsep} !{\vrule}*{4}{wc{\dimexpr 0.0666\textwidth-2\tabcolsep}}@{}}
\toprule
\multicolumn{2}{c}{} & \Block{1-3}{\thead{Columns}} \\
\cmidrule(l){3-5}
\multicolumn{2}{c}{} & \thead{X} & \thead{Y} & \thead{Z} \\
\Block{4-1}{\rotate\thead{Rows}}& \thead{A} & ax & ay & az \\
& \thead{B} & bx & by & bz \\
& \thead{C} & cx & cy & cz \\
& \thead{D} & dx & dy & dz \\
\bottomrule
\end{NiceTabular}
\end{table}
\end{document}
答案2
也许更简单,您可以使用非整数行数。以下是可能的代码,其中我\multirow
在最后一行插入了负数行数:
\documentclass{scrreprt}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{rotating}
\usepackage{makecell}
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\renewcommand\theadfont{\bfseries}
\begin{document}
\begin{table}[ht]
\centering
\begin{tabularx}{.3\textwidth}{@{}Y|*{4}{Y}@{}}
\toprule
\multicolumn{2}{c}{} & \multicolumn{3}{c@{}}{\thead{Columns}} \\
\cmidrule(l){3-5}
\multicolumn{2}{c}{} & \thead{X} & \thead{Y} & \thead{Z} \\
& \thead{A} & ax & ay & az \\
& \thead{B} & bx & by & bz \\
& \thead{C} & cx & cy & cz \\
\multirow{-5.45}{*}{\rotatebox[origin=c]{90}{\thead{Rows}}}
& \thead{D} & dx & dy & dz \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}