对对齐的表格列进行分组,并与多列和长标题相结合

对对齐的表格列进行分组,并与多列和长标题相结合

我想创建一个包含三对列的表格。这些列对应该能够根据不同列对之间的水平距离进行识别。每对列由一列绝对数字和一列相对数字(百分比)组成。绝对数字和相对数字都是整数,但位数不同,数字应该右对齐。基本上,我有这样的:

\documentclass{scrreprt}

\usepackage{booktabs}
\begin{document}
\begin{table}
    \centering
    \begin{tabular}{l@{\hskip 0.25in}
                    r@{\hskip 0.05in}r@{\hskip 0.25in}
                    r@{\hskip 0.05in}r@{\hskip 0.25in}
                    r@{\hskip 0.05in}r @{\hskip 0.25in}
                   }
    \toprule
    %   &  \multicolumn{2}{c}{Short} & \multicolumn{2}{c}{Short} & \multicolumn{2}{c}{LongLongLongLong}\\
    \midrule
    A&  777& (80\%)&265&(16\%)& 330&(80\%)\\
    B&  409& (72\%) &999&(64\%) &163&(57\%) \\
    C&  208&(100\%) &54&(100\%) &66&(100\%)\\
    D   &218& (90\%)&   98&(73\%)&84&(77\%)\\
    \bottomrule
    \end{tabular}
\end{table}
\end{document}

只要不显示标题,我想要的输出就与代码生成的输出基本相同。但是,如果显示标题,“短”标题不会在列对上居中,更糟糕的是,在“长长长长”标题的情况下,最后两列之间的空间会扩大。

我怎样才能让标题以列对为中心,并防止标题过长时分组列之间的空间被拉伸?例如,不依赖于使用单独的列来表示绝对数字和相对数字,但仍能满足我的要求的解决方案也是受欢迎的。

答案1

“短”标题看起来没有正确居中的原因在于指令

\multicolumn{2}{c}{Short}

将字符串置于定义为的两列的中心

@{\hskip 0.25in}r@{\hskip 0.05in}r

为了使“短”标题正确居中,您需要编写

\multicolumn{2}{@{}c@{\hskip0.25in}}{Short}

“LongLongLongLong”标题的问题在于它被分配了列类型c,这不允许换行。如果你想保持这对列的整体宽度,你可以必须允许在标题单元格中出现一个或多个换行符。在下面的代码中,我建议使用居中版本的列类型p

在此处输入图片描述

\documentclass{scrreprt}
\usepackage{booktabs,array,ragged2e}
\newcolumntype{C}[1]{>{\Centering\arraybackslash}p{#1}}
\begin{document}
\begin{table}
    \centering
    \begin{tabular}{ l *{3}{@{\hskip0.25in}r@{\hskip 0.05in}r} }
    \toprule
       & \multicolumn{2}{@{}c@{\hskip0.25in}}{Short} 
       & \multicolumn{2}{@{}c@{\hskip0.25in}}{Short} 
       & \multicolumn{2}{@{\,}C{1cm}}{LongLong\-LongLong}\\
    \midrule
    A&  535& (97\%)&265&(96\%)& 250&(90\%)\\
    B&  409& (72\%) &181&(64\%) &163&(57\%) \\
    C&  108&(100\%) &54&(100\%) &54&(100\%)\\
    D   &208& (93\%)&   98&(88\%)&84&(75\%)\\
    \bottomrule
    \end{tabular}
\end{table}
\end{document}

相关内容