以下示例排版了五个tabular
环境。这五个环境tabulars
共享相同的定义,
\begin{tabular} { | p{1.67cm} | p{1.67cm} | p{1.67cm} | p{8.0cm} |}
但是,五个表格的整体宽度差别很大,这取决于不同\multicolumn
语句的使用方式。有人能解释一下为什么会发生这种情况吗?
\documentclass[preview,border=100pt]{standalone}
\setlength{\tabcolsep}{0.2cm}
\begin{document}
\begin{tabular} { | p{1.67cm} | p{1.67cm} | p{1.67cm} | p{8.0cm} |}\hline
\multicolumn{4}{|c|}{ HEAD}\\\hline\hline
\multicolumn{2}{|c|}{A}& C & D\\\hline
A & B & C & D\\\hline
\end{tabular}
\bigskip
\begin{tabular} { | p{1.67cm} | p{1.67cm} | p{1.67cm} | p{8.0cm} |}\hline
\multicolumn{4}{|c|}{ HEAD}\\\hline\hline
\multicolumn{2}{|c|}{A}& C & D\\\hline
\multicolumn{1}{|c|}{A} & \multicolumn{1}{|c|}{B} & \multicolumn{1}{|c|}{C} & \multicolumn{1}{|c|}{D} \\\hline
\end{tabular}
\bigskip
\begin{tabular} { | p{1.67cm} | p{1.67cm} | p{1.67cm} | p{8.0cm} |}\hline
\multicolumn{4}{|c|}{ HEAD}\\\hline\hline
\multicolumn{2}{|c|}{A}& C & D\\\hline
\end{tabular}
\bigskip
\begin{tabular} { | p{1.67cm} | p{1.67cm} | p{1.67cm} | p{8.0cm} |}\hline
\multicolumn{4}{|c|}{ HEAD}\\\hline\hline
\multicolumn{3}{|c|}{A} & D\\\hline
\end{tabular}
\bigskip
\begin{tabular} { | p{1.67cm} | p{1.67cm} | p{1.67cm} | p{8.0cm} |}\hline
\multicolumn{4}{|c|}{ HEAD}\\\hline\hline
\multicolumn{4}{|c|}{A}\\\hline
\end{tabular}
\end{document}
答案1
如果每个单元格都由 重新指定,\multicolumn
则表格中的原始列规范将完全不使用。所有示例都是这种情况,因此唯一有效的列规范是c
将使用每列中单元格文本的自然宽度。
答案2
理解正在发生的事情的关键是充分理解\multicolumn
指令采用三个参数这一事实的含义:
参数 1:指令适用的列数。此数字可以小到 ,
1
大到n
,其中n
是表格环境中的总列数。参数 2:列类型(注意“类型”一词的单数形式)用于组合列。重要的是要意识到此列类型完全覆盖通过 指定的基础列类型(或多种类型)
\begin{tabular}{...}
。特别是,\multicolumn{1}{c}{...}
覆盖当前列的基本列类型并将其替换为c
。参数 3:组合列的内容。
为了完整起见,我还要指出,虽然p
列类型具有固定宽度,但类型为l
和的列没有c
r
事前固定宽度。相反,它们的宽度将与其所包含的材料的宽度相同。
让我们将其应用于这五个tabular
环境中的每一个。首先,一张图片(对您的代码进行了稍微修改,主要是为了方便交叉引用)用于确定五种不同的宽度:
在第一个表格(带标题
HEAD1
)中,四列中的每一列都有单元格,但没有\multicolumn
语句。因此,每个单元格的整体宽度由相关p
列类型的宽度决定(前三列为 1.67 厘米,最后一列为 8 厘米)。在第二个表格中,第 1 列和第 2 列中的材料始终包含
\multicolumn
语句。在两个数据行中,语句c
都使用了列类型\multicolumn
。因此,LaTeX 永远不会将“底层”p
列类型应用于前两列中的任何一列。这就是为什么第二个表格的宽度小于第一个表格的宽度的原因。请注意,前两列的宽度分别由底层字母(
A
和B
)的宽度加上给出2\tabcolsep
;因此,前两列的组合宽度是字母A
和的宽度B
加上4\tabcolsep
加上的宽度之和\arrayrulewidth
。在第三个表格中,只有三个“有效”列,因为前两列没有单独的单元格。因此,有效第一列的宽度等于字母和的宽度之
A
和B
加上2\tabcolsep
。第四个表格包含只有两个列。前三列的底层
p
列类型从未使用过。只有第四列的底层“p”类型才有用。第五个也是最后一个表格实际上包含只有一个列,其列类型为
c
。请注意,四种底层p
列类型从未使用过。这就是为什么第五种tabular
比前四种要窄得多。
最主要的是,它\multicolumn
非常强大;事实上,它比人们最初认为的要强大得多。特别是,重要的是要意识到,第二个参数中指定的列类型\multicolumn
完全覆盖了底层列类型。
\documentclass[preview,border=100pt]{standalone}
\setlength{\tabcolsep}{0.2cm}
%%\usepackage{array}
\begin{document}
\begin{tabular}{|p{1.67cm}|p{1.67cm}|p{1.67cm}|p{8.0cm} |}
\hline
\multicolumn{4}{|c|}{HEAD1}\\
\hline\hline
\multicolumn{2}{|c|}{AB} & C & D\\
\hline
A & B & C & D\\ % all four underlying column types get used in this row
\hline
\end{tabular}
\bigskip
\begin{tabular}{|p{1.67cm}|p{1.67cm}|p{1.67cm}|p{8.0cm}|}
\hline
\multicolumn{4}{|c|}{HEAD2}\\
\hline\hline
\multicolumn{2}{|c|}{AB} & C & D\\ % "p" column type is used only in columns 3 and 4
\hline
\multicolumn{1}{|c|}{A} & \multicolumn{1}{|c|}{B} &
\multicolumn{1}{|c|}{C} & \multicolumn{1}{|c|}{D} \\
\hline
\end{tabular}
\bigskip
\begin{tabular}{|p{1.67cm}|p{1.67cm}|p{1.67cm}|p{8.0cm}|}
\hline
\multicolumn{4}{|c|}{HEAD3}\\
\hline\hline
\multicolumn{2}{|c|}{AB} & C & D\\
\hline
\end{tabular}
\bigskip
\begin{tabular}{|p{1.67cm}|p{1.67cm}|p{1.67cm}|p{8.0cm}|}
\hline
\multicolumn{4}{|c|}{HEAD4}\\
\hline\hline
\multicolumn{3}{|c|}{ABC} & D\\ % "p" column type is used only in column 4
\hline
\end{tabular}
\bigskip
\begin{tabular}{|p{1.67cm}|p{1.67cm}|p{1.67cm}|p{8.0cm}|}
\hline
\multicolumn{4}{|c|}{HEAD5}\\
\hline\hline
\multicolumn{4}{|c|}{ABCD}\\ % "p" column type isn't used anywhere
\hline
\end{tabular}
\end{document}