如果需要,修改表格以拉伸第一列而不是最后一列

如果需要,修改表格以拉伸第一列而不是最后一列

似乎如果列的总宽度不够,则tabular拉伸最后的列。在下图中,请注意最后一列由于标题较宽而被拉伸。

在此处输入图片描述

问题:

有没有一种简单的方法可以改变此默认设置以延长第一的列来代替?

笔记:

  • 这些表格是自动生成的,最多可以有 18 列。因此,l*{17}{c}表格规范。
  • 解决这个问题的一个方法是指定第一列的宽度,但我觉得肯定有更好的方法。我不希望第一列的宽度超过需要的宽度。

代码:

\documentclass{article}
\usepackage{booktabs}

\def\NumberOfColumns{4}%

\newcommand*{\BuildTable}[1]{%
    %% #1 = Title
    \begin{tabular}{l*{17}{c}}
        \toprule
        \multicolumn{\NumberOfColumns}{c}{{#1}} \\
        \cmidrule(lr){1-4}
        Heading & 0 & 1 & 2 \\
        \cmidrule(lr){1-1}
        \cmidrule(lr){2-2}
        \cmidrule(lr){3-3}
        \cmidrule(lr){4-4}
        Label & a & b & c \\
        Label & a & b & c \\
        Label & a & b & c \\
        \bottomrule
    \end{tabular}%
}%

\begin{document}
\BuildTable{Narrow Title}
\quad
\BuildTable{Some Title That is Wide}
\end{document}

答案1

如果您愿意使用包tblr中的环境,您可以指定均匀拉伸所有列的tabularray选项。hspan=even

输出

\documentclass{article}
\usepackage{booktabs}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}

\def\NumberOfColumns{4}%

\begin{document}

    normal \verb|tblr| \smallskip
    
    \begin{tblr}{colspec={l*{3}{c}}}
        \toprule
        \SetCell[c=\NumberOfColumns]{c} Some Title That is Wide \\
        \cmidrule[lr]{1-4}
        Heading & 0 & 1 & 2 \\
        \cmidrule[lr]{1-1}
        \cmidrule[lr]{2-2}
        \cmidrule[lr]{3-3}
        \cmidrule[lr]{4-4}
        Label & a & b & c \\
        Label & a & b & c \\
        Label & a & b & c \\
        \bottomrule
    \end{tblr}
    \bigskip
    
    with \verb|hspan=even| \smallskip
    
    \begin{tblr}{colspec={l*{3}{c}},hspan=even}
        \toprule
        \SetCell[c=\NumberOfColumns]{c} Some Title That is Wide \\
        \cmidrule[lr]{1-4}
        Heading & 0 & 1 & 2 \\
        \cmidrule[lr]{1-1}
        \cmidrule[lr]{2-2}
        \cmidrule[lr]{3-3}
        \cmidrule[lr]{4-4}
        Label & a & b & c \\
        Label & a & b & c \\
        Label & a & b & c \\
        \bottomrule
    \end{tblr}

    \bigskip
    
    with \verb|booktabs| spacing \smallskip
    
    \begin{booktabs}{colspec={l*{3}{c}},hspan=even}
        \toprule
        \SetCell[c=\NumberOfColumns]{c} Some Title That is Wide \\
        \cmidrule[lr]{1-4}
        Heading & 0 & 1 & 2 \\
        \cmidrule[lr]{1-1}
        \cmidrule[lr]{2-2}
        \cmidrule[lr]{3-3}
        \cmidrule[lr]{4-4}
        Label & a & b & c \\
        Label & a & b & c \\
        Label & a & b & c \\
        \bottomrule
    \end{booktabs}
\end{document}

tblr环境默认具有更多垂直间距。如果您想要保留间距booktabs,请使用包booktabs提供的环境,其间距tabularray行为与常规行为相同。tabular

相关内容