表格的多列 + makecell 行颜色无法填充宽度

表格的多列 + makecell 行颜色无法填充宽度

我正在创建一个表格。我需要一个单元格,该单元格 (1) 横跨 3 列,并且 (2) 里面有多行;我将指定换行的位置。另外,我希望包含该单元格的行被着色。因为我将在 beamer 中使用表格,所以我需要自己指定列的 (最大) 宽度(否则,表格将延伸到右边框之外)。虽然我从下面的工作示例中删除了,但我booktabs也将使用包,因此我更乐意使用不与之冲突的解决方案。

我选择p{0.2\textwidth}表格规范(如上所述,我想指定列的宽度)。这是我的尝试:

\documentclass{article}

\usepackage{colortbl}
\usepackage{makecell}

\begin{document}

\begin{table}[hb]
    \centering
    \begin{tabular}{c|p{0.2\textwidth}|p{0.2\textwidth}|p{0.2\textwidth}}
        column1 & column2 & column3 & column4 \\
        \hline
        \rowcolor[gray]{0.9} hi &  \multicolumn{3}{l}{ \makecell[l]{some lines \\ that may or may not be long\\  within}}\\
        another & line & is & here
    \end{tabular}
    \caption{multicolumn + makecell}
\end{table}

\end{document}

灰色没有填满整行

显然,灰色没有填满整行。

我还尝试使用0.6 \textwidth多列 (0.2+0.2+0.2) 说明符,部分希望它能够消除需要makecell但没有成功(可能是因为列之间的间距等):

\begin{table}[hb]
    \centering
    \begin{tabular}{c|p{0.2\textwidth}|p{0.2\textwidth}|p{0.2\textwidth}}
        column1 & column2 & column3 & column4 \\
        \hline
        \rowcolor[gray]{0.9} hi &  \multicolumn{3}{p{0.6\textwidth}}{ \makecell[l]{some lines \\ that may or may not be long\\  within}}\\
        another & line & is & here
    \end{tabular}
    \caption{multicolumn + makecell with p-specifier in multicolumn}
\end{table}

还是太短

我能让灰色填满整行吗?

答案1

(该答案基于我之前评论中提供的材料。)

让我们从OP的基本列规范开始:

\begin{tabular}{c|p{0.2\textwidth}|p{0.2\textwidth}|p{0.2\textwidth}}

OP 的问题是:第 2、3 和 4 列组合的可用宽度是多少?

该表有 4 列;我们感兴趣的是第 2 列至第 4 列。在确定 LaTeX 表中组合列的所需宽度时,区分列的可用宽度和它的总宽度

  • 对于p-type 列,可用的宽度在其参数中说明——此处0.2\textwidth为第 2 列至第 4 列。

  • 一列全部的width 是可用宽度和 LaTeX 在列两侧插入的空白填充(如果有)的总和。空白填充量由参数 控制\tabcolsep。在我熟悉的大多数文档类中,此参数的默认值为6pt

  • 就这样全部的宽度每个第 2、3 和 4 列0.2\textwidth+2\tabcolsep的宽度为 。要获取合并2 至 4 列的集合,必须考虑到它们由内部垂直规则分隔,其宽度由参数 控制\arrayrulewidth;此参数的默认值为0.4pt。因此,2 至 4 列组合的总宽度为 3*(0.2\textwidth+2\tabcolsep)+2*\arrayrulewidth,即0.6\textwidth+6\tabcolsep+2\arrayrulewidth

  • 最后,可用的合并列的宽度必须考虑到 LaTeX\tabcolsep在合并列的两侧留出了 的空白。2\tabcolsep从 中减去0.6\textwidth+6\tabcolsep+2\arrayrulewidth可得到0.6\textwidth+4\tabcolsep+2\arrayrulewidth所需的长度。因此,您可以这样写

    \multicolumn{3}{p{\dimexpr0.6\textwidth+4\tabcolsep+2\arrayrulewidth\relax}{...}
    

其中\dimexpr\relax是 TeX 的(虽然不太优雅)用于“动态”执行尺寸计算的工具。

补充说明:您提到您希望使用该booktabs软件包的工具。太好了。您很可能已经知道该软件包基本上使用户无法使用垂直规则。因此,请确保在列宽计算中booktabs省去涉及的数量。\arrayrulewidth

在此处输入图片描述

\documentclass{article} % or some other suitable document class
\usepackage{booktabs}
\usepackage{xcolor} 
\usepackage{colortbl} % for '\rowcolor' command
\usepackage{makecell}

\begin{document}
\hrule % just to illustrate width of textblock
\begin{table}[hb]
\centering
\begin{tabular}{c|p{0.2\textwidth}|p{0.2\textwidth}|p{0.2\textwidth}}
column1 & column2 & column3 & column4 \\
\hline
\rowcolor[gray]{0.9} 
hi & \multicolumn{3}{p{\dimexpr0.6\textwidth+4\tabcolsep+2\arrayrulewidth\relax}}{%
     \makecell[l]{some lines \\ 
                  that may or may not be long\\  
                  within}}\\
\hline
another & line & is & here \\
\hline
\end{tabular}
\caption{multicolumn + makecell with p-specifier in multicolumn}
\end{table}
\hrule
\end{document}

答案2

该软件包是一个提供(除其他外)与经典环境(软件包)类似的nicematrix环境但具有附加功能的软件包。{NiceTabular}{tabular}array

在下面的代码中,我已经{tabular}用一个环境(带有允许类似于包的命令的{NiceTabular}键)替换了你的环境。colortbl-like\rowcolor\rowcolorcolortbl

\documentclass{article}
\usepackage{makecell}
\usepackage{nicematrix}

\begin{document}

\begin{table}[hb]
    \centering
    \begin{NiceTabular}{c|p{0.2\textwidth}|p{0.2\textwidth}|p{0.2\textwidth}}[colortbl-like]
        column1 & column2 & column3 & column4 \\
        \hline
        \rowcolor[gray]{0.9} hi &  \multicolumn{3}{l}{ \makecell[l]{some lines \\ that may or may not be long\\  within}}\\
        another & line & is & here
    \end{NiceTabular}
    \caption{multicolumn + makecell}
\end{table}

\end{document}

您需要多次编译。

上述代码的输出

您可以直接获得预期的输出,因为彩色面板是由 PGF/Tikz 使用由 构建的 PGF/Tikz 节点绘制的nicematrix

但是,在您的示例中nicematrix,使用 是没有意义的,makecell因为提供了执行该作业的nicematrix命令。\Block

\documentclass{article}
\usepackage{nicematrix}

\begin{document}

\begin{table}[hb]
    \centering
    \begin{NiceTabular}{c|p{0.2\textwidth}|p{0.2\textwidth}|p{0.2\textwidth}}[colortbl-like]
        column1 & column2 & column3 & column4 \\
        \hline
        \rowcolor[gray]{0.9} hi &  \Block[l]{1-3}{some lines \\ that may or may not be long\\  within}\\
        another & line & is & here
    \end{NiceTabular}
    \caption{multicolumn + makecell}
\end{table}

\end{document}

第二段代码的输出

该包与和nicematrix兼容。beamerbooktabs

答案3

通过使用该tabularray包,MWE 变得简单而简短:

\documentclass{beamer}
\setbeamertemplate{caption}[numbered]

\usepackage{xcolor}
\usepackage{tabularray}

\begin{document}
    \begin{table}[hb]
    \centering
\begin{tblr}{hline{2-Y} = solid, vline{2-Y} = solid,
             colspec = {c *{3}{X[l]}
             hspan = minimal            
             }
column 1    & column 2  & column 3  & column 4  \\
\SetRow{bg=gray!30}
hi          &   \SetCell[c=3]{l} {some lines \\ 
                                 that may or may not be long\\  
                                 within}   
                        &           &       \\
another     & line      & is        & here
    \end{tblr}
\caption{Table design by using of the \texttt{tabularray} package.}
    \end{table}
\end{document}

在此处输入图片描述

相关内容