多列 tabularx 单元格宽度错误

多列 tabularx 单元格宽度错误

我正在尝试创建一个具有固定列宽的表格。由于大多数行的单元格数量不同(LCM 为 12),我定义了一个 12 列宽的表格,并在其中添加了所需大小的多列。问题是,只有 6 个双列字段的大小计算正确。12 列标题和 4 个三列字段是错误的。

最小示例(包括颜色,以使问题更加明显):

\documentclass[a4paper,12pt]{book}
\usepackage[table]{xcolor}
\usepackage{tabularx}

\begin{document}

\rowcolors{1}{green}{red}
\newcommand{\mc}[2]{\multicolumn{#1}{|>{\setlength{\hsize}{#1\hsize} }X|}{#2}}
\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|X|X|X|X|X|X|}
\mc{12}{Caption 1} \\
\mc{2}{Field 1.1} & \mc{2}{Field 1.2} & \mc{2}{Field 1.3} & \mc{2}{Field 1.4} & \mc{2}{Field 1.5} & \mc{2}{Field 1.6} \\
\mc{12}{Caption 2} \\
\mc{3}{Field 2.1} & \mc{3}{Field 2.2} & \mc{3}{Field 2.3} & \mc{3}{Field 2.4} \\
\end{tabularx}

\end{document}

这是从哪里来的,我怎样才能让它正常工作?对于单元格数量不同的问题,也欢迎使用不同的方法,但每行单元格的宽度对于所有行单元格都必须保持不变。

答案1

文档tabularx指出:

不要使用\multicolumn跨越任何X列的条目。

与大多数规则一样,如果您知道自己在做什么,就可以打破这些规则。

因此,让我们尝试以某种方式规避这些限制。让我们定义一个新的命令

\newcommand{\mcc}[2]{\multicolumn{#1}{|l|}{#2}}

并按如下方式修改您的 MWE:

\documentclass[a4paper,12pt]{book}
\usepackage[table]{xcolor}
\usepackage{tabularx}

\begin{document}

\rowcolors{1}{green}{red}
\newcommand{\mc}[2]{\multicolumn{#1}{|>{\setlength{\hsize}{#1\hsize}}X|}{#2}}
\newcommand{\mcc}[2]{\multicolumn{#1}{|l|}{#2}}
\begin{tabularx}{\textwidth}{|X|X|X|X|X|X|X|X|X|X|X|X|}
\mcc{12}{Caption 1} \\
\mc{2}{Field 1.1} & \mc{2}{Field 1.2} & \mc{2}{Field 1.3} & \mc{2}{Field 1.4} & \mc{2}{Field 1.5} & \mc{2}{Field 1.6} \\
\mcc{12}{Caption 2} \\
\mc{3}{Field 2.1} & \mcc{3}{Field 2.2} & \mc{3}{Field 2.3} & \mcc{3}{Field 2.4} \\
\end{tabularx}

\end{document} 

结果:

在此处输入图片描述

答案2

我现在能够自己开发一个可行的解决方案。虽然不完美,但可以达到预期效果。基本上,我只是在底部放了一个空行,这会强制将列设置为特定宽度,多列可以引用该宽度。

[编辑] 将空行的行高更改为~零,但在不同环境下可能与 -5mm 的值不同 [/编辑]

\documentclass[a4paper,12pt]{book}
\usepackage[table]{xcolor}
\usepackage{tabularx}

\begin{document}

\rowcolors{1}{green}{red}
\newcommand{\mc}[2]{\multicolumn{#1}{|c|}{#2}}
\begin{tabularx}{\textwidth}{XXXXXXXXXXXX}
\showrowcolors
\mc{12}{Caption 1} \\
\mc{2}{Field 1.1} & \mc{2}{Field 1.2} & \mc{2}{Field 1.3} & \mc{2}{Field 1.4} & \mc{2}{Field 1.5} & \mc{2}{Field 1.6} \\
\mc{12}{Caption 2} \\
\mc{3}{Field 2.1} & \mc{3}{Field 2.2} & \mc{3}{Field 2.3} & \mc{3}{Field 2.4} \\
\hiderowcolors &&&&&&&&&&&\\[-5mm]
\end{tabularx}

\end{document}

答案3

{NiceTabularX}nicematrix,您可以创建跨列的块(使用命令\BlockX

\documentclass[a4paper,12pt]{book}
\usepackage{xcolor}
\usepackage{nicematrix}

\begin{document}

\begin{NiceTabularX}{\textwidth}{XXXXXXXXXXXX}[vlines]
\Block{1-*}{Caption 1} \\
\Block{1-2}{Field 1.1} && \Block{1-2}{Field 1.2} && \Block{1-2}{Field 1.3} && \Block{1-2}{Field 1.4} && \Block{1-2}{Field 1.5} && \Block{1-2}{Field 1.6} &\\*
\Block{1-*}{Caption 2} \\
\Block{1-3}{Field 2.1} &&& \Block{1-3}{Field 2.2} &&& \Block{1-3}{Field 2.3} &&& \Block{1-3}{Field 2.4} \\
\end{NiceTabularX}

\end{document}

上述代码的输出

相关内容