我正在创建一个表格。我需要一个单元格,该单元格 (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
\rowcolor
colortbl
\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
兼容。beamer
booktabs
答案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}