我有几张表,想在其中同时使用两个功能:
- multirowcell(来自 makecell 包)用于跨多行的单元格,在特定位置的文本中插入新行,以及
- 为我想要文本换行的一个或多个其他列指定固定宽度(并更好地控制整个表格的宽度)。
当将这些功能一起使用时,我希望多行单元格中的文本垂直居中。
当使用默认的表格列类型时,makecell 将自动垂直居中多行单元格文本。MWE 中的表 1 说明了此行为。
如果使用允许指定列宽的列类型,即使对于表中未使用多行单元格的列,MWE 中的表 2 也显示 makecell 无法成功将文本垂直居中在多行单元格中。在此示例中,我使用了自定义列类型,但使用时也会出现同样的问题,例如p{}
。
当表格中另一列具有指定的宽度导致该列中的文本换行时,有没有办法帮助 makecell 垂直居中文本?
我尝试使用\Gape[][]{}
,但即使深度校正的负值很大,文本也不会垂直居中。\vspace{}
在受影响单元格的文本上方插入 确实有效,但它需要猜测并检查每个受影响单元格的正确调整长度的近似值。不需要指定绝对长度校正的解决方案将是理想的,因为我有几张受影响的具有不同配置的表。
\documentclass{article}
\usepackage{makecell}
\usepackage{multirow}
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\begin{document}
Table 1
\begin{tabular}{|c|c|c|}
\hline
Column A & Column B & Column C \\
\hline
\multirowcell{4}{Some Somewhat\\Lengthy Text\\in a multirowcell} & Table Text & lorem ipsum dolor sit amet consectetur \\
\cline{2-3}
& \multirowcell{2}{A multirowcell\\More text} & adipiscing elit sed do elusmod tempur \\
\cline{3-3}
& & incididunt ut labore et dolore magna aliqua \\
\cline{2-3}
& Something & Whatever \\
\hline
\end{tabular}
Table 2
\begin{tabular}{|c|c|C{1.2in}|}
\hline
Column A & Column B & Column C \\
\hline
\multirowcell{4}{Some Somewhat\\Lengthy Text\\in a multirowcell} & Table Text & lorem ipsum dolor sit amet consectetur \\
\cline{2-3}
& \multirowcell{2}{A multirowcell\\More text} & adipiscing elit sed do elusmod tempur \\
\cline{3-3}
& & incididunt ut labore et dolore magna aliqua \\
\cline{2-3}
& Something & Whatever \\
\hline
\end{tabular}
\end{document}
答案1
\multirow
是为单行单元格设计的,因此你必须计算线,不属于行。另外,添加单元格的垂直填充可能会改变等效行数。此外,您还可以使用小数调整等效行数。
以下是此案例的代码:
\begin{tabular}{|c|c|C{1.2in}|}
\hline
Column A & Column B & Column C \\
\hline
\multirowcell{7}{Some Somewhat\\Lengthy Text\\in a multirowcell} & Table Text & lorem ipsum dolor sit amet consectetur \\
\cline{2-3}
& \multirowcell{2}{A multirowcell\\More text} & adipiscing elit sed do elusmod tempur \\
\cline{3-3}
& & incididunt ut labore et dolore magna aliqua \\
\cline{2-3}
& Something & Whatever \\
\hline
\end{tabular}
答案2
以下是您可以使用 做的{NiceTabular}
事情nicematrix
。
\documentclass{article}
\usepackage{nicematrix}
\usepackage{array}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\begin{document}
\NiceMatrixOptions{cell-space-limits=1mm}
\begin{NiceTabular}{ccC{1.2in}}[hvlines]
Column A & Column B & Column C \\
\Block{4-1}{Some Somewhat\\Lengthy Text\\ in a multirowcell} & Table Text & lorem ipsum dolor sit amet consectetur \\
& \Block{2-1}{A multirowcell\\More text} & adipiscing elit sed do elusmod tempur \\
& & incididunt ut labore et dolore magna aliqua \\
& Something & Whatever \\
\end{NiceTabular}
\end{document}
在 中,您有一个用于合并单元格的
{NiceTabular}
命令。您可以指定\Block
行以及列数。该密钥
hvlines
绘制了区块中除外的所有规则。