我正在尝试在 7 列表格中创建多列。
\documentclass{article}
\begin{document}
\begin{tabular}{|l|l|l|l|l|l|l|}
\hline
& \multicolumn{6}{c|}{Parameters}\\
\hline
We don't care * & \multicolumn{2}{l|}{cause it's a test} & \multicolumn{2}{l|}{cause it's a test} & \multicolumn{2}{l|}{cause it's a test}\\
\hline
Punctuation ? & \multicolumn{3}{c|}{yes+} & empty & empty & empty \\ %& \multicolumn{3}{c|}{no}\\
\hline
\end{tabular}
\end{document}
“是”单元格不起作用,我有一个小单元格(1 列)和紧跟其后的大“空”。最后两个空单元格没问题。
答案1
当您有跨越每一行的列时,底层\halign
基元基本上会从计算中删除该列:
\documentclass{article}
\begin{document}
\begin{tabular}{|l|l|l|l|l|l|l|}
\hline
& \multicolumn{6}{c|}{Parameters}\\
\hline
We don't care * & \multicolumn{2}{l|}{cause it's a test} & \multicolumn{2}{l|}{cause it's a test} & \multicolumn{2}{l|}{cause it's a test}\\
\hline
Punctuation ? & \multicolumn{3}{c|}{yes+} & empty & empty & empty \\ %& \multicolumn{3}{c|}{no}\\
\hline
1&2&3&4&5&6&7
\end{tabular}
\end{document}
答案2
问题在于,在表格中,编译器不会单独使用所有列来计算它们。这就是为什么@david-carlisle 的答案是,只要他添加一行,所有单元格都单独使用,布局就会改变。
如果您想要对表格有更多的控制权,您可以使用一个允许您设置表格宽度的环境,例如tabu
或tabularx
。但即使在那里,如果没有帮助,环境也不知道该做什么。
\documentclass[a4paper,12pt]{standalone}
\usepackage{tabu}
\begin{document}
\begin{tabu}{|l|X|X|X|X|X|X|}
\hline
& \multicolumn{6}{c|}{Parameters}\\
\hline
We don't care * & \multicolumn{2}{l|}{cause it's a test} & \multicolumn{2}{l|}{cause it's a test} & \multicolumn{2}{l|}{cause it's a test}\\
\hline
Punctuation ? & \multicolumn{3}{c|}{yes+} & empty & empty & empty \\ %& \multicolumn{3}{c|}{no}\\
\hline
\end{tabu}
\end{document}
会给你
该tabu
包为您提供了\tabuphantomline
可以正确计算单元格宽度而无需打印任何内容的功能:
\documentclass[a4paper,12pt]{standalone}
\usepackage{tabu}
\begin{document}
\begin{tabu}{|l|X|X|X|X|X|X|}
\hline
\tabuphantomline
& \multicolumn{6}{c|}{Parameters}\\
\hline
We don't care * & \multicolumn{2}{l|}{cause it's a test} & \multicolumn{2}{l|}{cause it's a test} & \multicolumn{2}{l|}{cause it's a test}\\
\hline
Punctuation ? & \multicolumn{3}{c|}{yes+} & empty & empty & empty \\ %& \multicolumn{3}{c|}{no}\\
\hline
\end{tabu}
\end{document}
然后它会给你一些可能更接近你所期望的东西:
tabu
并tabularx
添加X
计算列宽的列类型,以便所有X
单元格具有相同的尺寸(尽管乘数也是可能的)。因此,对于您的示例,将最后 6 列作为X
列可能有意义。
答案3
该示例抛出错误的原因tabular
是其基本设置过度指定:它总共设置为 7 列,但这两行分别只包含 4 列和 5 列。深入挖掘后,人们很快发现,尽管第一列和最后两列是由您提供的设置唯一标识,第 2 列至第 5 列为不是。目前自由度太多;你发现 LaTeX 无法对如何你希望将列分组为多列。
可以通过添加“简单”的行来验证这一点,例如
a & b & c & d & e & f & g\\
以你的例子来说。
附录-- 在我发布这个答案后,我注意到 David Carlisle 已经给出了答案。它包含更精确的信息,说明 LaTeX 如何处理我所说的自由度过大问题,这个问题导致基本设置无法识别。