Por que a terceira coluna é tão larga?

Por que a terceira coluna é tão larga?
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
\usepackage{caption}



\begin{document}


\begin{center}
\begin{tabularx}{100pt}{c|c|c|}
\multicolumn{1}{c}{ } &\multicolumn{1}{c}{$r$} &\multicolumn{1}{c}{$b$} \\ \cline{2-3}
$r$ & $\frac{4}{9}$ & $\frac{2}{9}$  \\ \cline{2-3}
$b$ & $\frac{2}{9}$ & $\frac{1}{9}$   \\ \cline{2-3} \multicolumn{3}{c}{2 red 1 blue}
\end{tabularx}\hskip 1.7cm 
\begin{tabularx}{100pt}{c|c|c|}
\multicolumn{1}{c}{ } &\multicolumn{1}{c}{$r$} &\multicolumn{1}{c}{$b$} \\ \cline{2-3}
$r$ & $\frac{1}{9}$ & $\frac{2}{9}$  \\ \cline{2-3}
$b$ & $\frac{2}{9}$ & $\frac{4}{9}$   \\ \cline{2-3} \multicolumn{3}{c}{2 blue 1 red}
\end{tabularx}
\end{center}

\end{document}

Minha intenção é colocar “2 vermelho 1 azul” abaixo do subgráfico e no meio do subgráfico. Mas por que a terceira coluna é tão larga?

Responder1

Como eu disse no comentário, pelo menos uma coluna nas tabularxtabelas precisava ser do Xtipo. Isso significa que no seu caso a tabela deve ser, por exemplo:

\documentclass{article}
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\NewExpandableDocumentCommand\mcc{O{1}m}%
                                 {\multicolumn{#1}{c}{#2}}

\begin{document}
    \begin{center}
\begin{tabularx}{100pt}{c | C|C|}
\mcc{}  & \mcc{$r$}     & \mcc{$b$}     \\
    \cline{2-3}
$r$     & $\frac{4}{9}$ & $\frac{2}{9}$ \\
    \cline{2-3}
$b$     & $\frac{2}{9}$ & $\frac{1}{9}$ \\
    \cline{2-3}
\mcc[3]{2 red 1 blue}
\end{tabularx}
    \hskip 21mm
\begin{tabularx}{100pt}{C | C|C|}
\mcc{}  & \mcc{$r$}     & \mcc{$b$}     \\
    \cline{2-3}
$r$     & $\frac{4}{9}$ & $\frac{2}{9}$ \\
    \cline{2-3}
$b$     & $\frac{2}{9}$ & $\frac{1}{9}$ \\
    \cline{2-3}
\mcc[3]{2 red 1 blue}
\end{tabularx}
    \end{center}
\end{document}

insira a descrição da imagem aqui

Como você pode ver, na primeira tabela a segunda e a terceira colunas têm largura igual, mas com a primeira mais estreita, na segunda tabela todas as colunas têm largura igual.

Columns ce tem a largura máxima do conteúdo das células na coluna l. rAo contrário, tabularxvocê deve prescrever a largura da tabela e pelo menos a largura de uma coluna na tabela deve ser calculada pelo LaTeX. Esta funcionalidade possui colunas Xou colunas derivadas dela (para centralizar, alinhar o conteúdo da célula à esquerda ou à direita). Se isso não estiver ativado, geralmente \hlinefica \clinesaliente da mesa (então você tem sorte que isso não aconteça nos seus casos).

No entanto, quando você tem \multicolumncélulas cujo conteúdo é mais largo que a soma da largura natural das colunas estendidas, a largura da última coluna é aumentada na quantidade ditada pela largura da \multicolumncélula. Conseqüentemente, você deve cuidar para que isso não aconteça (defina uma largura maior das colunas estendidas).

Na minha opinião, suas tabelas ficarão melhores se você usar tabularraypackage e centralizar a célula ˙\multicolum` abaixo das duas últimas colunas:

\documentclass{article}
\usepackage{tabularray}

\begin{document}
    \begin{center}
\begin{tblr}{hline{2-Y}={2-Z}{solid},
             vline{2-Z}={2-Y}{solid}, 
             colspec={c *{2}{Q[c,wd=2em,mode=math]}},  
             row{Z} = {mode=text},
             rowsep=3pt
             }
    &       r       &   b           \\ 
r   & \frac{4}{9}   & \frac{2}{9}   \\ 
b   & \frac{2}{9}   & \frac{1}{9}   \\ 
    & \SetCell[c=2]{c}    2 red 1 blue 
\end{tblr}
    \hskip 21mm
\begin{tblr}{hline{2-Y}={2-Z}{solid},
             vline{2-Z}={2-Y}{solid},
             colspec={c *{2}{Q[c,wd=2em,mode=math]}},
             row{Z} = {mode=text},
             rowsep=3pt
             }
    &       r       &   b           \\
r   & \frac{4}{9}   & \frac{2}{9}   \\
b   & \frac{2}{9}   & \frac{1}{9}   \\
    & \SetCell[c=2]{c}  2 red 1 blue
\end{tblr}
    \end{center}
\end{document}

insira a descrição da imagem aqui

Termo aditivo: Parece que até agora o Overleaf ainda não atualizou seu repositório de pacotes. Esperançosamente, isso funcionará em recursos próximos. Até que você possa usar a abordagem "clássica" usando pacotes arraye makecell:

\documentclass{article}
\usepackage{array, makecell}
\NewExpandableDocumentCommand\mcc{O{1}m}%
                                 {\multicolumn{#1}{c}{#2}}

\begin{document}
    \begin{center}
    \setcellgapes{3pt}
    \makegapedcells
\begin{tabular}{c | *{2}{>{$}w{c}{2em}<{$} |}}
\mcc{}  & \mcc{$r$}     & \mcc{$b$}     \\
    \cline{2-3}
r       & \frac{4}{9}   & \frac{2}{9}   \\
    \cline{2-3}
b       & \frac{2}{9}   & \frac{1}{9}   \\
    \cline{2-3}
\mcc{}  & \mcc[2]{2 red 1 blue}
\end{tabular}
    \hskip 21mm
\begin{tabular}{c | *{2}{>{$}w{c}{2em}<{$} |}}
\mcc{}  & \mcc{$r$}     & \mcc{$b$}     \\
    \cline{2-3}
r       & \frac{4}{9}   & \frac{2}{9}   \\
    \cline{2-3}
b       & \frac{2}{9}   & \frac{1}{9}   \\
    \cline{2-3}
\mcc[3]{2 red 1 blue}
\end{tabular}
    \end{center}
\end{document}

O resultado da compilação é muito semelhante ao uso do tabularraypacote.

insira a descrição da imagem aqui

Ambas as tabelas, para fins de comparação de estilo, diferem ligeiramente. Na primeira, o texto “2 vermelho 1 azul” está abaixo da segunda e terceira colunas e, na segunda, está abaixo das três colunas.

Responder2

Um comentário inicial: como nenhuma das colunas em suas tabelas de amostra parece exigir quebra automática de linha nas células, não acho uma boa ideia usar um tabularxambiente.

Você perguntou,

Mas por que a terceira coluna é tão larga?

Primeiro alguma terminologia:

  • A largura total de uma coluna do tipo l, c, ou ré a soma de (a) a largura "natural" da célula mais larga na coluna e (b) 2\tabcolsep(ou 2\arraycolsepse um arrayambiente estiver em uso). Os parâmetros \tabcolsepdeterminam \arraycolsepa quantidade de preenchimento de espaços em branco que o LaTeX insere nas bordas da coluna, dependendo se um ambiente tabularsemelhante ou semelhante arrayestá em uso.

  • A largura total de uma multicoluna tabularou arrayambiente é dada, quase por definição, como a soma das larguras totais das colunas individuais, mais a largura combinada de quaisquer regras verticais (se presentes).

Seus tabularambientes também contêm a seguinte entrada de três colunas:

\multicolumn{3}{c}{2 red 1 blue}

Como você “descobriu”, este item determina a largura geral ou total do tabularambiente. Como sua largura excede a soma das três larguras de colunas individuais, algo tem que acontecer. A solução escolhida pelo LaTeX é alocar o excesso de largura para a coluna final. Embora esta escolha possa parecer arbitrária, qualquer outra solução - como alocar o excesso de largura em partes iguais para cada uma das três colunas - seria igualmente arbitrária.

Presumo que você deseja que as larguras das colunas 2 e 3 sejam iguais. Duas opções permitem atingir seu objetivo: (a) aumentar o valor de \tabcolsep(ou \arraycolsep, se um arrayambiente estiver em uso) e/ou (b) aumentar as larguras das colunas além de suas larguras "naturais". Ambas as possibilidades são ilustradas na captura de tela a seguir, que contém três linhas.

  • A linha superior ilustra sua configuração inicial. (Para reduzir a confusão de código e me livrar de muitos $símbolos, mudei tabularpara arrayambientes). Claramente, a coluna 3 é muito mais larga que a coluna 2.

  • A linha do meio ilustra o efeito de aumentar o valor de \arraycolsep, mantendo o ctipo de coluna básico. Adicionar 5pt ao valor padrão de \arraycolsep(que também é 5pt) dá conta do recado. (Além disso: esta abordagem "funciona" porque as larguras naturais das colunas 2 e 3 são determinadas pelos \fractermos, que têm larguras iguais.)

  • A linha inferior ilustra o efeito de definir uma largura fixa (utilizável) de 14pt para as colunas 2 e 3 (empregando o wtipo de coluna, que é fornecido pelo arraypacote), enquanto se utiliza o valor padrão de \arraycolsep. Contanto que as larguras das colunas wc(onde csignifica "centro") sejam escolhidas "grandes o suficiente" - aqui, 14pt parece certo - você terminará com uma tabela cujas 2ª e 3ª colunas são igualmente largas.

Uma solução é sempre melhor que a outra? Em geral, não. Porém, para o caso específico em questão, observe que o primeiro método de solução também acaba aumentando a largura total da coluna 1, enquanto este não é o caso do segundo. Se a compacidade máxima da primeira coluna for importante para você, você pode preferir empregar o segundo método de solução.

insira a descrição da imagem aqui

\documentclass{article}
\usepackage{array} % for 'w' column type and \extrarowheight macro
\setlength\extrarowheight{2pt}
\newcommand\mc[1]{\multicolumn{1}{c}{#1}} % handy shortcut macro

\begin{document}

Initial setup
\[
\begin{array}{ c | c | c | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{4}{9} & \frac{2}{9}   \\ \cline{2-3}
b & \frac{2}{9} & \frac{1}{9}   \\ \cline{2-3} 
\multicolumn{3}{>{$}c<{$}}{2 red 1 blue}
\end{array}
\hskip 1.7cm 
\begin{array}{ c | c | c | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{1}{9} & \frac{2}{9}   \\ \cline{2-3}
b & \frac{2}{9} & \frac{4}{9}   \\ \cline{2-3} 
\multicolumn{3}{>{$}c<{$}}{2 blue 1 red}
\end{array}
\]

\bigskip
Solution 1: Increase \texttt{\string\arraycolsep} or \texttt{\string\tabcolsep}
\[
\addtolength{\arraycolsep}{5pt} % default value: 5pt
\begin{array}{ c | c | c | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{4}{9} & \frac{2}{9}   \\ \cline{2-3}
b & \frac{2}{9} & \frac{1}{9}   \\ \cline{2-3} 
\multicolumn{3}{>{$}c<{$}}{2 red 1 blue}
\end{array}
\hskip 1.7cm 
\begin{array}{ c | c | c | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{1}{9} & \frac{2}{9}   \\ \cline{2-3}
b & \frac{2}{9} & \frac{4}{9}   \\ \cline{2-3} 
\multicolumn{3}{>{$}c<{$}}{2 blue 1 red}
\end{array}
\]

\bigskip
Solution 2: Increase usable column widths
\[
\begin{array}{ c |wc{14pt} | wc{14pt} | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{4}{9} & \frac{2}{9}   \\ \cline{2-3}
b & \frac{2}{9} & \frac{1}{9}   \\ \cline{2-3} 
\multicolumn{3}{>{$}c<{$}}{2 red 1 blue}
\end{array}
\hskip 1.7cm 
\begin{array}{ c |wc{14pt} | wc{14pt} | }
\mc{} & \mc{r} & \mc{b} \\ \cline{2-3}
r & \frac{1}{9} & \frac{2}{9}   \\ \cline{2-3}
b & \frac{2}{9} & \frac{4}{9}   \\ \cline{2-3} 
\multicolumn{3}{>{$}c<{$}}{2 blue 1 red}
\end{array}
\]
\end{document}

informação relacionada