Tabularx:将垂直表格标题居中(旋转、多列)

Tabularx:将垂直表格标题居中(旋转、多列)

我想让我的垂直表格标题(“行”)居中。

表格如下所示

在此处输入图片描述

它是用该代码创建的:

\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} 

在此处输入图片描述

相关内容