2番目の\multicolumnが追加されたときのtabularの奇妙な動作

2番目の\multicolumnが追加されたときのtabularの奇妙な動作

元の質問表の中に数字を配置し、次のように調整してみることです。

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

なぜこのようなことが起こるのでしょうか?

もちろん、このように数字を配置するためのより良いオプションがあり、リンクされた質問の回答はその 1 つです。ただし、表形式でコードを開発しようとすると、\multicolumnコマンドと組み合わせて使用​​される追加のセルについていくつかのことを理解するのに役立ちます。これにより、列が減り、予期しない結果が発生する可能性があります。

答え1

wパッケージに最近追加された列タイプに注意してくださいarray。中央揃えの固定幅の列(フローテキストなし)の場合は、次のように使用できます。

w{c}{17.5mm}

不器用なの代わりに>{\centering\arraybackslash}{p{17.5mm}

さて、あなたの問題に戻りましょう。

2 番目の列は両方の行で結合されます。最初に 3 番目の列と結合され、次に先頭の列と結合されます。したがって、規則により、テーブルは、その列が最初から指定されていなかったかのように構築されます。これが出力の理由です。

6 つの等しい列が必要です:

\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 つ必要なので、それらの配置を制御したいのですが... 表形式がよい解決策のように思えます...

考えましょう:

上部の 3 つ:最初の行は通常の中央に配置され、 2 行目ではスペースを共有するために{ccc} セルを分割します... ただし...\multicolumn

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

あ!書いてて\multicolumn気づいたら4列になってた…コンパイルすらしてない…

4番目の列が必要のようです:

やってみよう:

  1. 第二段階...4つの列:

上部の中央の列を次のように分割します\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 セル目の下に...

なぜ 2 行目の最初のセルが 2 行目と結合しないのですか? これにより、5 列目と同様に 4 番目の数字が最初の 2 列の中央に配置されるはずです... なぜですか?

5番目の列を追加する必要がありますか?

見てみましょう:

\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}

ここに画像の説明を入力してください

4 番目の画像は 2 列目の前で停止します... 考えてみましょう... 5 列必要ですか?

  1. 3番目のステップ...バグを報告する前に、縦線を見てみましょう... でも、見るべきです!

完全なコード:

\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}

ここに画像の説明を入力してください

バグレポートが必要なのですが... しかし...

わかりました... わかったと思います:

2 番目の列には 3 番目の列の幅がありません... もちろん... そこには幅は必要ありません... 幅を追加しましょう:

... 中央の列の両方に中央揃えで 17.5 mm を追加します。

\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 では、必要なセルの最大数が 1 行あたり 3 個であるため、3 列のみを使用しました... したがって、最初の列は 1 列であり、実際には複数列ではありませんでした... これらのヘルプ番号を追加することで... 私たちは実際に幸運にも、何が起こったのかを知ることができました...

もっと簡単な例で見てみましょう:

\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]...

また、いくつかの単純な考え方では、最初の列と最後の列の幅が広いため、2 行目のセルは中央に配置しないでください... おそらくrlより良い選択です...\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 の回答もっと賢いですね!!! 少なくとも問題を見つけました!

PS: 私の「二重投稿」にはモデレーターの注意が必要です...しかし、これは例外だと思いますので、このサイトに提案しなければなりません。最初の質問はフィギュアの配置に関するもので、他のどこにも見つからなかった、役に立つ内容の投稿がここにあることに気付きましたtabulars... \multicolumn2 つの投稿のうち 1 つを削除する必要があるとしたら、最初の投稿 (元の質問に対する私の回答) を削除するのがより良い選択だと思います。なぜなら、こちらの方が私にとっては役に立つように思えるからです。ですから、(レビュー担当者は) 削除のフラグを立てる前にコメントを追加してください。

関連情報