
\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}
Mi intención es poner "2 rojos 1 azul" debajo del subgráfico y en el medio del subgráfico. Pero ¿por qué la tercera columna es tan ancha?
Respuesta1
Como dije en el comentario, al menos una columna en tabularx
las tablas tenía que ser de X
tipo. Esto significa que, en su caso, la tabla debería ser, por ejemplo:
\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}
Como puede ver, en la primera tabla la segunda y tercera columna tienen el mismo ancho pero la primera es más estrecha, en la segunda tabla todas las columnas tienen el mismo ancho.
Columns c
y tiene el ancho más ancho del contenido de las celdas en la columna l
. r
Por el contrario, tabularx
debe prescribir el ancho de la tabla y LaTeX debe calcular al menos el ancho de una columna en la tabla. Esta funcionalidad tiene columnas X
o columnas derivadas de ella (para centrar, alinear a la izquierda o a la derecha el contenido de la celda). Si esto no está habilitado, generalmente \hline
sobresale \cline
de la mesa (así que tienes suerte de que esto no suceda en tus casos).
Sin embargo, cuando tiene \multicolumn
celdas cuyo contenido es más ancho que la suma de las columnas de ancho natural, el ancho de la última columna aumenta en la cantidad dictada por el ancho de la \multicolumn
celda. En consecuencia, debería preocuparse de que eso no suceda (defina un ancho mayor de las columnas distribuidas).
En mi opinión, sus tablas serán mejor si usa tabularray
el paquete y centra la celda ˙\multicolum` debajo de las dos últimas columnas:
\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}
Apéndice:
Parece que hasta ahora Overleaf todavía no actualiza su repositorio de paquetes. Con suerte, esto funcionará en funciones cercanas. Hasta entonces puede utilizar el enfoque "clásico" mediante el uso de array
y makecell
paquetes:
\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}
El resultado de la compilación es muy similar al del uso del tabularray
paquete.
Ambas tablas, a efectos de comparación de estilos, difieren ligeramente. En la primera, el texto "2 rojo 1 azul" está debajo de la segunda y tercera columnas, y en la segunda, está debajo de las tres columnas.
Respuesta2
Un comentario inicial: dado que ninguna de las columnas de sus tablas de muestra parece requerir un salto de línea automático dentro de las celdas, no creo que sea una buena idea utilizar un tabularx
entorno.
Tu preguntaste,
Pero ¿por qué la tercera columna es tan ancha?
Primero algo de terminología:
El ancho total de una columna de tipo
l
,c
or
es la suma de (a) el ancho "natural" de la celda más ancha de la columna y (b)2\tabcolsep
(o si se está utilizando2\arraycolsep
un entorno).array
Los parámetros\tabcolsep
y\arraycolsep
determinan la cantidad de relleno de espacios en blanco que LaTeX inserta en los bordes de la columna, dependiendo de si se está utilizando un entornotabular
similar o uno .array
tabular
El ancho total de un entorno o varias columnasarray
se proporciona, casi por definición, como la suma de los anchos totales de las columnas individuales, más el ancho combinado de cualquier regla vertical (si está presente).
Sus tabular
entornos también contienen la siguiente entrada de 3 columnas:
\multicolumn{3}{c}{2 red 1 blue}
Como habrás "descubierto", este elemento determina el ancho global o total del tabular
entorno. Dado que su ancho excede la suma de los anchos de las tres columnas individuales, algo tiene que ceder. La solución que elige LaTeX es asignar el ancho sobrante a la columna final. Si bien esta elección puede parecer arbitraria, cualquier otra solución (como asignar el ancho sobrante en partes iguales a cada una de las 3 columnas) sería igualmente arbitraria.
Supongo que desea que los anchos de las columnas 2 y 3 sean iguales. Dos opciones le permiten lograr su objetivo: (a) aumentar el valor de \tabcolsep
(o \arraycolsep
, si array
se está utilizando un entorno) y/o (b) aumentar los anchos de las columnas más allá de sus anchos "naturales". Ambas posibilidades se ilustran en la siguiente captura de pantalla, que contiene tres filas.
La fila superior ilustra su configuración inicial. (Para reducir el desorden de códigos y deshacerme de muchísimos
$
símbolos, cambié detabular
entornosarray
). Claramente, la columna 3 es mucho más ancha que la columna 2.La fila del medio ilustra el efecto de aumentar el valor de
\arraycolsep
mientras se mantiene el tipo de columna básicoc
. Agregar 5 puntos al valor predeterminado de\arraycolsep
(que también es 5 puntos) hace el trabajo. (Aparte: este enfoque "funciona" porque los anchos naturales de las columnas 2 y 3 están determinados por los\frac
términos, que resultan tener anchos iguales).La fila inferior ilustra el efecto de establecer un ancho fijo (utilizable) de 14 puntos para las columnas 2 y 3 (empleando el
w
tipo de columna proporcionado por elarray
paquete), mientras se usa el valor predeterminado de\arraycolsep
. Siempre que los anchos de las columnaswc
(dondec
significa "centro") se elijan "lo suficientemente grandes" (aquí, 14 puntos parece correcto), terminará con una tabla cuyas columnas segunda y tercera son igualmente anchas.
¿Es siempre una solución mejor que la otra? En general, no. Sin embargo, para el caso específico que nos ocupa, observe que el primer método de solución también termina aumentando el ancho total de la columna 1, mientras que este no es el caso para el segundo. Si para usted es importante la máxima compacidad de la primera columna, es posible que prefiera emplear el segundo método de solución.
\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}