有人能解释为什么使用 \multicolumn 会改变四列表格环境的宽度吗?

有人能解释为什么使用 \multicolumn 会改变四列表格环境的宽度吗?

以下示例排版了五个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和的列没有cr事前固定宽度。相反,它们的宽度将与其所包含的材料的宽度相同。

让我们将其应用于这五个tabular环境中的每一个。首先,一张图片(对您的代码进行了稍微修改,主要是为了方便交叉引用)用于确定五种不同的宽度:

在此处输入图片描述

  • 在第一个表格(带标题HEAD1)中,四列中的每一列都有单元格,但没有\multicolumn语句。因此,每个单元格的整体宽度由相关p列类型的宽度决定(前三列为 1.67 厘米,最后一列为 8 厘米)。

  • 在第二个表格中,第 1 列和第 2 列中的材料始终包含\multicolumn语句。在两个数据行中,语句c都使用了列类型\multicolumn。因此,LaTeX 永远不会将“底层”p列类型应用于前两列中的任何一列。这就是为什么第二个表格的宽度小于第一个表格的宽度的原因。

    请注意,前两列的宽度分别由底层字母(AB)的宽度加上给出2\tabcolsep;因此,前两列的组合宽度是字母A和的宽度B加上4\tabcolsep加上的宽度之和\arrayrulewidth

  • 在第三个表格中,只有三个“有效”列,因为前两列没有单独的单元格。因此,有效第一列的宽度等于字母和的宽度之AB加上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}

相关内容