Странное поведение таблицы при добавлении второго \multicolumn

Странное поведение таблицы при добавлении второго \multicolumn

Theисходный вопросзаключается в размещении цифр в таблице и попытке отрегулировать их следующим образом:

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 были сверху и две снизу, я хочу контролировать их размещение... Мне кажется, что таблица будет хорошим решением...

Давай подумаем:

Три сверху: {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's ответумнее!!! По крайней мере я нашел проблему!

PS: Мой "двойной пост" требует внимания модератора... но я думаю, что это исключение и я должен предложить его этому сайту, поскольку первый вопрос был о размещении фигур, и я только что обнаружил, что мне есть что сказать здесь, чего не нашли больше нигде, и это полезно и о tabulars... \multicolumnЕсли один из двух постов следует удалить, я полагаю, что удаление первого (мой ответ на исходный вопрос) будет лучшим выбором, потому что он кажется мне более полезным. Поэтому, пожалуйста (рецензенты), добавьте комментарий, прежде чем помечать для удаления.

Связанный контент