我正在尝试创建一个具有固定列宽的表格。由于大多数行的单元格数量不同(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
,您可以创建跨列的块(使用命令\Block
)X
。
\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}