3列目がなぜこんなに広いのでしょうか?

3列目がなぜこんなに広いのでしょうか?
\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}

私の意図は、サブチャートの下、サブチャートの中央に「2 赤 1 青」を配置することです。しかし、なぜ 3 番目の列がこんなに広いのでしょうか?

答え1

コメントで述べたように、テーブル内の少なくとも 1 つの列は型tabularxでなければなりませんX。つまり、あなたの場合、テーブルはたとえば次のようになります。

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

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

ご覧のとおり、最初の表では 2 列目と 3 列目の幅は同じですが、最初の列の方が狭く、2 番目の表ではすべての列の幅が同じです。

clおよびr列内のセル コンテンツの最大幅の幅を持ちます。逆に、tabularxテーブルの幅を指定する必要があり、テーブル内の少なくとも 1 つの列幅は LaTeX によって計算される必要があります。この機能には、列 Xまたは列が派生します (セル コンテンツを中央揃え、左揃え、または右揃えにする)。これが有効になっていない場合、通常\hline\clineテーブルからはみ出します (そのため、これが発生しないのは幸運です)。

ただし、\multicolumnセルの内容が、またがる列の自然な幅の合計よりも広い場合、最後の列の幅はセルの幅によって決まる量だけ増加します\multicolumn。したがって、このようなことが起こらないように注意する必要があります (またがる列の幅を大きく定義します)。

tabularray私の意見では、パッケージを使用して、˙\multicolum` セルを最後の 2 列の下に中央に配置すると、テーブルがより見やすくなります。

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

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

補遺: 今のところ、Overleaf はパッケージ リポジトリを更新していないようです。近いうちに機能が改善されることを期待しています。それまでは、arrayおよび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}

コンパイル結果はパッケージの使用時と非常に似ていますtabularray

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

両方の表は、スタイルの比較のため、わずかに異なります。最初の表では、「2 赤 1 青」というテキストが 2 列目と 3 列目の下にありますが、2 番目の表では、3 列すべての下にあります。

答え2

最初にコメントします: サンプル テーブルの列はいずれもセル内で自動改行を必要としないと思われるため、環境を使用することは良い考えではないと思いますtabularx

あなたは尋ねました、

しかし、なぜ 3 列目はこんなに幅が広いのでしょうか?

まず用語について説明します。

  • lタイプ、c、または の列の合計幅は、r(a) 列内の最も幅の広いセルの「自然な」幅と (b) 2\tabcolsep(または環境が使用されている2\arraycolsep場合array) の合計です。パラメータ および\tabcolsepは、のような または環境が使用されている\arraycolsepかどうかに応じて、LaTeX が列の端に挿入する空白のパディングの量を決定します。tabulararray

  • 複数列tabularまたはarray環境の合計幅は、ほぼ定義により、個々の列の合計幅と、垂直方向の罫線(存在する場合)の合計幅の合計として与えられます。

環境tabularには次の 3 列のエントリも含まれています。

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

あなたが「発見」したように、この項目は環境の全体的な幅または合計幅を決定しますtabular。その幅は 3 つの個別の列幅の合計を超えるため、何かを犠牲にする必要があります。LaTeX が選択する解決策は、余分な幅を最後の列に割り当てることです。この選択は恣意的に思えるかもしれませんが、余分な幅を 3 つの列のそれぞれに均等に割り当てるなどの他の解決策も同様に恣意的です。

列 2 と 3 の幅を等しくしたいとお考えのようですね。この目標を達成するには、(a) の値\tabcolsep(または\arraycolseparray環境が使用されている場合は ) を増やす、および/または (b) 列幅を「自然な」幅よりも大きくする、という 2 つの選択肢があります。両方の可能性は、3 つの行を含む次のスクリーンショットに示されています。

  • 一番上の行は、初期設定を示しています。(コードの乱雑さを減らし、大量のシンボルを削除するために、 から 環境に$切り替えました)。明らかに、列 3 は列 2 よりもはるかに幅が広くなっています。tabulararray

  • 中央の行は、基本的な列タイプを\arraycolsep維持しながらの値を増やした場合の効果を示しています。 の既定値(これも 5pt) に 5pt を追加すると、目的を達成できます。 (余談: このアプローチが「機能」するのは、列 2 と 3 の自然な幅が、同じ幅を持つ項によって決定されるためです。)c\arraycolsep\frac

  • 下の行は、デフォルト値 を使用しながら、列 2 と 3 に固定の (使用可能な) 幅 14pt を設定した場合の効果を示しています (パッケージwによって提供される列タイプを使用)。列( は「中央」を表します)の幅が「十分に大きい」 (ここでは 14pt が適切と思われます) に選択されている限り、2 列目と 3 列目が均等な幅のテーブルが作成されます。array\arraycolsepwcc

どちらかのソリューションが常にもう一方よりも優れているのでしょうか? 一般的には、そうではありません。ただし、この特定のケースでは、最初のソリューション方法では列 1 の合計幅も増加しますが、2 番目のソリューション方法ではそうではないことに注意してください。最初の列の最大限のコンパクトさが重要な場合は、2 番目のソリューション方法を使用することをお勧めします。

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

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

関連情報