使 booktabs 多列/多行适合模板;在一个示例中出现意外的溢出间距,在另一个示例中出现意外的居中

使 booktabs 多列/多行适合模板;在一个示例中出现意外的溢出间距,在另一个示例中出现意外的居中

我有一张包含多行和多列的表格,其中有一列名称较长,需要换行。但是,生成的表格留下了不需要的空格:

% \usepackage{amssymb}
% \usepackage{array}
% \newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
% \def\toprule{\specialrule{1.5pt}{0pt}{0pt}}
% \def\botrule{\toprule}
% \def\headerrule{\hline\hline}
% \def\midrule{\specialrule{0.5pt}{0pt}{0pt}}

\begin{table}
\centering
\begin{tabular}{C{2cm}|C{1cm}|C{1cm}|C{1cm}|C{2cm}|C{4cm}}
\toprule
Column A & \multicolumn{3}{c|}{Column B} & Column C is a very long name & Column D \\
\cline{2-4}
& B1 & B2 & B3 & &        \\
\headerrule
blah & \checkmark & \checkmark & \checkmark & blah & blah \\
\midrule
\multirow{2}{*}{blahs} & -- & \multirow{2}{*}{\checkmark} & -- 
& \multirow{2}{*}{blahs} 
& \checkmark\\ \cline{6-6} 
& & & & & -- \\ \cline{6-6} 
\midrule
blah & \checkmark & -- & \checkmark & blah & blah \\
\botrule
\end{tabular}
\end{table}

在此处输入图片描述

当我尝试指定单个多列时,它不遵守 2cm 限制(黄色突出显示),水平居中混乱(蓝色圆圈),并且产生不一致的垂直居中(红色圆圈)。我该如何解决这些问题?

在此处输入图片描述

\begin{tabular}{C{2cm}|C{1cm}|C{1cm}|C{1cm}|C{2cm}|C{4cm}}
\toprule
\multicolumn{1}{c|}{Column A} & \multicolumn{3}{c|}{Column B} 
& \multicolumn{1}{c|}{Column C is a very long name} 
& \multicolumn{1}{c}{Column D} \\
\cline{2-4}
& B1 & B2 & B3 & &        \\
\headerrule
blah & \checkmark & \checkmark & \checkmark & blah & blah \\
\midrule
\multirow{2}{*}{blahs} & -- & \multirow{2}{*}{\checkmark} & -- 
& \multirow{2}{*}{blahs} 
& \checkmark\\ \cline{6-6} 
& & & & & -- \\ \cline{6-6} 
\midrule
blah & \checkmark & -- & \checkmark & blah & blah \\
\botrule
\end{tabular}

编辑:使用 Booktabs 包寻找解决方案

答案1

  • 如果您考虑一下我对您上一个问题的回答,您就会避免您的问题。
  • 由于您没有提供完整的小文档,因此的定义C{...}未知。如果它基于p{...}列类型,则不应该发生这种情况。
  • multirow如果我的猜测正确的话,看起来两个表格是相同的,但是单元格的使用方式不同。

编辑:

  • 以下是表格的两个示例:
  • 首先:
    • 在表格序言中定义了水平线
    • 列宽属于X已定义的类型
  • 第二 :
    • 对于水平线,使用booktabs包中定义的规则,并将其插入表中,就像您在代码片段中所做的那样
    • 列的宽度是用长度定义的,就像代码片段中那样(而不是用C列(其定义未知)来Q定义列类型说明符,它是在tabularray
    • 列宽属于X具有定义宽度比率的类型
  • 除了显示的示例之外,您还可以对两个表进行某种组合。例如,在第一个表中使用第二个表中的列规范,反之亦然,在第二个表中使用第一个表中的列规范:
\documentclass{article}
\usepackage[margin=40mm,    % just gueesed
            showframe       % remove in real document
            ]{geometry}
\usepackage[skip=1ex, 
            font=sf, labelfont=bf,
            singlelinecheck=false]{caption}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\usepackage{dingbat}
\newcommand\cm{\checkmark}

\begin{document}
    \begin{table}[ht]
    \centering
\sffamily
\caption{CAPTION.}

%%%% first table
\begin{tblr}{hline{1,Z}=1pt, 
             hline{2,4-Z}=solid,
             hline{3} = {1}{-}{},
             hline{3} = {2}{-}{},
             vline{2-Y} = solid,
             colspec={X[2, c] *{3}{X[c]} X[2,c] X[4,c]},
             vspan=even
            }
\SetCell[r=2]{h}   Column A    
            & \SetCell[c=3]{c}  Column B    
                    &       &       & \SetCell[r=2]{h}   Column C is a very long name  
                                                & \SetCell[r=2]{h}   Column D  \\
            & B1    & B2    & B3    &           &           \\

blah        & \cm   & \cm   & \cm   & blah      & blah      \\
\SetCell[r=2]{m}   blah
            &   \SetCell[r=2]{m}   --
                    &   \SetCell[r=2]{m}  \cm
                            &   \SetCell[r=2]{m}  --
                                    &\SetCell[r=2]{m}  blah
                                                & \cm       \\
            &       &       &       &           & blah      \\
blah        & \cm   & --    & \cm   & blah      & blah      \\
\end{tblr}
    
%%%% second table
\bigskip
\begin{tblr}{vline{2-Y} = solid,
             colspec={Q[c, wd=2cm] *{3}{Q[c, wd=1cm]} Q[c, wd=2cm] Q[c, wd=4cm]},
             vspan=even
            }
    \toprule
\SetCell[r=2]{h}   Column A
            & \SetCell[c=3]{c}  Column B
                    &       &       & \SetCell[r=2]{h}   Column C is a very long name
                                                & \SetCell[r=2]{h}   Column D  \\
    \midrule
            & B1    & B2    & B3    &           &           \\
    \midrule
    \midrule
blah        & \cm   & \cm   & \cm   & blah      & blah      \\
    \midrule
\SetCell[r=2]{m}   blah
            &   \SetCell[r=2]{m}   --
                    &   \SetCell[r=2]{m}  \cm
                            &   \SetCell[r=2]{m}  --
                                    &\SetCell[r=2]{m}  blah
                                                & \cm       \\
    \midrule
            &       &       &       &           & blah      \\
    \midrule
blah        & \cm   & --    & \cm   & blah      & blah      \\
    \bottomrule
\end{tblr}
    \end{table}
\end{document}

在此处输入图片描述

相关内容