添加第二个 \multicolumn 时表格的奇怪行为

添加第二个 \multicolumn 时表格的奇怪行为

原始问题是关于将数字放在表格内并尝试像这样调整它们:

2

使用类似这样的代码:

\documentclass{article}
\usepackage{graphicx}
\usepackage{array}
\begin{document}
\begin{tabular}{|c|>{\centering\arraybackslash}p{17.5mm}|>{\centering\arraybackslash}p{17.5mm}|c|}
  \includegraphics[width=35mm]{example-image-a} &   \multicolumn{2}{c|}{\includegraphics[width=35mm]{example-image-b}} &  \includegraphics[width=35mm]{example-image-c} \\
\multicolumn{2}{|c}{\includegraphics[width=35mm]{example-image-a}} & \multicolumn{2}{|c|}{\includegraphics[width=35mm]{example-image-b}}
\end{tabular}
\end{document}

由于某种原因,给出了以下输出:

3

为什么会发生这种情况?

当然,还有更好的选择来放置这样的数字,链接问题中的答案就是其中之一。但尝试使用表格开发代码将有助于我们了解有关附加单元格的一些信息,如果将其与\multicolumn命令结合使用,将减少我们的列,这可能是意料之外的!

答案1

您应该知道w包中最近添加了列类型array:对于具有中心对齐的固定宽度的列(并且没有流动文本),您可以使用

w{c}{17.5mm}

而不是笨拙的>{\centering\arraybackslash}{p{17.5mm}

现在回到你的问题。

第二列在两行中合并:首先与第三列合并,然后与前一列合并。因此,根据规则,表格的构建方式就好像从未指定过该列一样。这解释了您的输出。

您需要六个相等的列:

\documentclass{article}
\usepackage{graphicx}
\usepackage{array}
\begin{document}

\begin{tabular}{@{} *{6}{w{c}{17.5mm}} @{}}
  \multicolumn{2}{c}{\includegraphics[width=35mm]{example-image}} &
  \multicolumn{2}{c}{\includegraphics[width=35mm]{example-image}} &
  \multicolumn{2}{c}{\includegraphics[width=35mm]{example-image}} \\
  &
  \multicolumn{2}{c}{\includegraphics[width=35mm]{example-image}} &
  \multicolumn{2}{c}{\includegraphics[width=35mm]{example-image}} &
\end{tabular}

\end{document}

在此处输入图片描述

答案2

  1. 第一步...

    好的,我有 5 个数字,我需要 3 个在顶部,2 个在底部,我想控制它们的位置......表格对我来说似乎是一个很好的解决方案......

让我们想想:

上面三个:{ccc} 第一行正常居中,我将在\multicolumn第二行拆分单元格以共享空间...但是...

\begin{tabular}{ccc}
\include..&\include..&\include..\\
\multicolumn{2}{c}&\multicolumn{2}{c}
\end{tabular}

哦!写到第二行时\multicolumn我意识到它们变成了 4 列... 甚至没有编译...

看来我需要第四列:

咱们试试吧:

  1. 第二步...四列:

我将用以下内容拆分顶部中间的列\multicolumn

\begin{tabular}{cccc}
\include...&\multicolumn{2}{c}{\include...}&\include...\\ %Nice... Let's finish with the next row
\multicolumn{2}{c}{\include...}&\multicolumn{2}{c}{\include}
\end{tabular}

上行 4 下行 4... 完美!让我们编译

在此处输入图片描述

好像我数的不对。。。我们数一数吧。。。

  • 上面第 4 行单元格中间 2 个单元格已合并
  • 在第 2 行和第 2 个单元格下方......

为什么第二行的第一个单元格没有与第二个单元格合并?这应该使第四个数字像第五个一样居中显示在前两个列中...为什么?

我需要添加第五列吗?

让我们来看看:

\begin{tabular}{cccc}
1&2&3&4\\
\include...&\multicolumn{2}{c}{\include...}&\include...\\ %Nice... Let's finish with the next row
\multicolumn{2}{c}{\include...}&\multicolumn{2}{c}{\include}
\end{tabular}

在此处输入图片描述

第四幅图像在第二列之前停止...让我们想想...我需要 5 列吗?

  1. 第三步…在报告错误之前,让我们看看那里的垂直线?...但我应该这样做!

完整代码:

\documentclass{article}
\usepackage{graphicx}
\usepackage{xcolor}
\begin{document}
\begin{tabular}{|c|c|c|c|}
1&2&3&4\\
  \includegraphics[width=35mm]{example-image-a} &   \multicolumn{2}{c}{\includegraphics[width=35mm]{example-image-b}} &  \includegraphics[width=35mm]{example-image-c} \\
\multicolumn{2}{|c}{\includegraphics[width=35mm]{example-image-a}} & \multicolumn{2}{|c|}{\includegraphics[width=35mm]{example-image-b}}
\end{tabular}
\end{document}

在此处输入图片描述

他们需要错误报告...但是...

好的...我想我明白了:

第二列没有第三列的宽度...当然...那里不需要宽度...让我们添加一个宽度:

...好的,我将在两个中间列中添加居中 17.5 毫米:

\documentclass{article}
\usepackage{graphicx}
\usepackage{array}
\begin{document}
\begin{tabular}{|c|>{\centering\arraybackslash}p{17.5mm}|>{\centering\arraybackslash}p{17.5mm}|c|}
  \includegraphics[width=35mm]{example-image-a} &   \multicolumn{2}{c|}{\includegraphics[width=35mm]{example-image-b}} &  \includegraphics[width=35mm]{example-image-c} \\
\multicolumn{2}{|c}{\includegraphics[width=35mm]{example-image-a}} & \multicolumn{2}{|c|}{\includegraphics[width=35mm]{example-image-b}}
\end{tabular}
\end{document}

在此处输入图片描述

为什么是我???让我们在 stackexchange 上询问...我要离开这里!

  1. 没有更多步骤:一些解释:

让我们将 1&2&3&4 行添加回去:

\documentclass{article}
\usepackage{graphicx}
\usepackage{array}
\begin{document}
\begin{tabular}{|c|>{\centering\arraybackslash}p{17.5mm}|>{\centering\arraybackslash}p{17.5mm}|c|}
1&2&3&4\\
  \includegraphics[width=35mm]{example-image-a} &   \multicolumn{2}{c|}{\includegraphics[width=35mm]{example-image-b}} &  \includegraphics[width=35mm]{example-image-c} \\
\multicolumn{2}{|c}{\includegraphics[width=35mm]{example-image-a}} & \multicolumn{2}{|c|}{\includegraphics[width=35mm]{example-image-b}}
\end{tabular}
\end{document}

在此处输入图片描述

完美...但是发生了什么?

LaTeX 仅使用 3 列,因为每行所需的单元格最多为 3 个...因此,第一列是单列,而不是真正的多列...通过添加这些帮助数字...我们实际上很幸运并发现了发生了什么...

让我们通过一个更简单的例子来看一下:

\documentclass{article}
\usepackage{graphicx}
\usepackage{parskip}
\usepackage{array}
\setlength{\parskip}{0.5cm}

\begin{document} 


Just four columns:

\begin{tabular}{|c|c|c|c|}\hline
test&\multicolumn{2}{c|}{test}&test\\\hline
test&test&test&test\\\hline
\end{tabular}

\vspace{1cm}

If we decide to replace with a \verb|\multicolumn| the first two columns of the second row\ldots we can (inocently) imagine the above table to be like:

\begin{verbatim}
    | test |     test     | test |
    ----------------------------
    |     test     | test | test |
\end{verbatim}

BUT we get:

\begin{tabular}{|c|c|c|c|}\hline
test&\multicolumn{2}{c|}{test}&test\\\hline
\multicolumn{2}{|c|}{test}&test&test\\\hline
\end{tabular}

Because now the first \verb|multicolumn| makes the first row three columns size and the second places the ``\verb|multicolumned|'' cells as one cell under the first cell of the first row!
\end{document}

在此处输入图片描述

因此,在我们之前的“失败”案例中,我们可以:

添加一整行空单元格(但所有单元格)...

[-1em]然后用...删除行的多余垂直空间

此外,经过一些简单的想法,第二行单元格不应该居中,因为第一列和最后一列的额外宽度......可能是r一个l更好的选择......\tabcolsep固定的宽度会有所帮助......距离也相同(如\tabcolsep行之间):

\documentclass{article}
\usepackage{graphicx}
\usepackage{array}
\begin{document}
\setlength{\tabcolsep}{1mm}
\begin{tabular}{c>{\centering\arraybackslash}p{17.5mm}>{\centering\arraybackslash}p{17.5mm}c}
    &&&\\[-1em]
\includegraphics[width=35mm]{example-image-a} &   \multicolumn{2}{c}{\includegraphics[width=35mm]{example-image-b}} &  \includegraphics[width=35mm]{example-image-c} \\[1mm]
\multicolumn{2}{r}{\includegraphics[width=35mm]{example-image-a}} & \multicolumn{2}{l}{\includegraphics[width=35mm]{example-image-b}}
\end{tabular}
\end{document}

在此处输入图片描述

但为什么不把它做成一个更简单的表格(3列)呢?

\documentclass{article}
\usepackage{graphicx}
\begin{document}
\setlength{\tabcolsep}{1mm}
\begin{tabular}{ccc}
\includegraphics[width=35mm]{example-image-a}& \includegraphics[width=35mm]{example-image-b}&\includegraphics[width=35mm]{example-image-c}\\[1mm]
\multicolumn{3}{c}{\includegraphics[width=35mm]{example-image-a}\hspace{2mm}\includegraphics[width=35mm]{example-image-b}}
\end{tabular}
\end{document}

很好……很聪明!

@egreg 的回答更聪明!至少我发现了问题!

附言:我的“重复发帖”需要版主的注意……但我认为这是个例外,必须向本网站提供信息,因为第一个问题是关于放置数字的,我刚刚发现我在这里有一些在其他地方找不到的东西要说,而且很有用,而且与tabulars……\multicolumn如果两个帖子中的一个应该被删除,我想删除第一个帖子(我对原始问题的回答)会是一个更好的选择,因为这里对我来说似乎更有用。所以,请(审阅者)在标记为删除之前添加评论。

相关内容