Comportamento estranho do tabular quando um segundo \multicolumn é adicionado

Comportamento estranho do tabular quando um segundo \multicolumn é adicionado

Opergunta originaltrata-se de colocar figuras dentro de uma tabela e tentar ajustá-las assim:

2

com um código semelhante a este:

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

Isso, por algum motivo, fornece esta saída:

3

Por que isso acontece?

Claro que existem opções melhores para colocar as figuras dessa forma e a resposta na pergunta vinculada é uma delas. Mas tentar desenvolver o código com o tabular vai ajudar a entender algumas coisas sobre a célula adicional que se for usada em combinação com \multicolumno comando vai reduzir nossas colunas e isso pode ser inesperado!

Responder1

Você deve estar ciente da recente adição do wtipo de coluna no pacote array: para colunas de largura fixa com alinhamento central (e sem texto corrido), você pode usar

w{c}{17.5mm}

em vez do desajeitado >{\centering\arraybackslash}{p{17.5mm}.

Agora, de volta ao seu problema.

A segunda coluna é mesclada em ambas as linhas: primeiro com a terceira coluna, depois com a coluna principal. Portanto, por regra, a tabela é construída como se aquela coluna nunca tivesse sido especificada. Isso explica sua saída.

Você quer seis colunas iguais:

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

insira a descrição da imagem aqui

Responder2

  1. Primeiro passo...

    Ok, tenho 5 figuras e preciso de 3 em cima e duas em baixo, quero controlar a colocação delas... Uma tabela me parece uma boa solução...

Vamos pensar:

Três em cima: {ccc} Primeira linha normal centralizada e dividirei as células \multicolumnna segunda para compartilhar o espaço... Mas...

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

Oh! escrevendo o segundo \multicolumnpercebi que viraram 4 colunas... Nem compilando...

Parece que preciso de uma quarta coluna:

Vamos tentar:

  1. Segundo passo...quatro colunas:

Vou dividir as colunas intermediárias superiores com \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 na linha de cima 4 na próxima... perfeito! Vamos compilar

insira a descrição da imagem aqui

Parece que não contei corretamente... Vamos contar...

  • Acima da linha 4, células do meio 2 mescladas
  • Abaixo das linhas 2 e 2 células...

Por que a primeira célula da segunda linha não se funde com a segunda? Isso deve resultar na quarta figura centralizada nas duas primeiras colunas como a quinta... Por quê?

Preciso adicionar uma quinta coluna?

Vamos ver:

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

insira a descrição da imagem aqui

A quarta imagem para antes da 2ª coluna... Vamos pensar... Preciso de 5 colunas?

  1. Terceiro passo...Vamos ver as linhas verticais aí? antes de relatar um bug... Mas eu deveria!

Código completo:

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

insira a descrição da imagem aqui

Eles precisam do relatório do bug... Mas...

Ok... acho que entendi:

A segunda coluna não tem a largura da terceira... Claro... Não é necessária largura aí... Vamos adicionar uma largura:

... Ok, adicionarei 17,5 mm centralizados em ambas as colunas do meio:

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

insira a descrição da imagem aqui

Por que eu???Vamos perguntar no stackexchange... estou fora daqui!

  1. Não há mais etapas: alguma explicação:

Vamos adicionar a linha 1&2&3&4 lá atrás:

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

insira a descrição da imagem aqui

Perfeito... Mas o que aconteceu?

O LaTeX usou apenas 3 colunas já que o máximo de células necessárias eram 3 por linha... Então, a primeira coluna era uma única coluna e não realmente uma multicoluna... Ao adicionar esses números de ajuda... na verdade temos sorte e descobri o que aconteceu...

Vejamos em um exemplo mais simples:

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

insira a descrição da imagem aqui

Portanto, no nosso caso anterior de "falha", podemos:

adicione uma linha completa com células vazias (mas todas as células)...

Em seguida, remova o espaço vertical extra da linha com [-1em]...

Além disso, com algumas reflexões simples, as células da segunda linha não devem ser centralizadas devido à largura extra da primeira e da última coluna... Pode ser re lé uma escolha melhor... e uma \tabcolseplargura fixa ajudaria... a mesma distância também (como \tabcolsepentre linhas):

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

insira a descrição da imagem aqui

Mas por que não fiz isso em uma tabela mais simples (de 3 colunas)?

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

Legal... Inteligente!

MasResposta de @egregé mais inteligente!!! Pelo menos encontrei o problema!

PS: Meu "post duplo" precisa da atenção do moderador... mas acho que é uma exceção e tenho a oferecer para esse site já que a primeira pergunta foi sobre colocação de figuras e acabei de descobrir que tenho algo a dizer aqui que não tinha encontrado em outro lugar e é útil tabularscom \multicolumn... Se uma das duas postagens for excluída, suponho que excluir a primeira (minha resposta à pergunta original) seria uma escolha melhor porque aqui parece mais útil para mim. Portanto, por favor (revisores) adicionem um comentário antes de sinalizar para exclusão.

informação relacionada