
Estoy intentando formatear una tabla con tabularx, ver más abajo.
El contenido de la tabla no importa, sólo pongo algunos números aleatorios allí. Como puede ver, intenté agrupar las cuatro categorías (Apple,...) y una total (columnas 2-4) en bloques de tres columnas usando tipos de columnas personalizados y modificando separadores de columnas.
Pasé bastante tiempo intentando alinear correctamente las cmidrules debajo de las categorías, pero creo que ahora coinciden correctamente con los grupos de columnas. Quedan los siguientes dos problemas:
- Introduje un nuevo tipo de columna para centrar el contenido de la columna, pero aparentemente todo sigue alineado a la izquierda.
- Necesito alinear los valores posiblemente negativos en la última fila con los números exclusivamente positivos en las filas superiores. Supongo que esto significa que no quiero centrar las columnas de todos modos, sino que necesito que estén justificadas a la derecha. También leí sobre los tipos de columnas de siunitx, pero no pude integrarlas correctamente en mi tabla.
He adjuntado un MWE. ¡Gracias por tu ayuda de antemano!
\documentclass[11pt]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[scaled=1]{uarial}
\renewcommand{\familydefault}{\sfdefault}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{array}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{siunitx}
\begin{document}
\newcommand{\ap}[1]{AP\textsubscript{#1}}
\newcommand{\apavg}[0]{AP\textsubscript{\(\varnothing\)}}
\begin{figure}[!htbp]
\centering
\tiny
\newcolumntype{C}{>{\centering\arraybackslash}X} % centered X-column
\newcolumntype{B}{*{3}{C}} % block of 3 columns
\newcolumntype{d}{@{\hspace{3\tabcolsep}}} % 150% spacing
\begin{tabularx}{\textwidth}{c d B d B d B d B d B @{\hspace{2\tabcolsep}}}
\toprule
\multirow{2}[3]{*}{Model} & \multirow{2}[3]{*}{\ap{50}} & \multirow{2}[3]{*}{\ap{75}} & \multirow{2}[3]{*}{\apavg} & \multicolumn{3}{@{}cd}{Apple} & \multicolumn{3}{@{}cd}{Banana} & \multicolumn{3}{@{}cd}{Potato} & \multicolumn{3}{@{}c}{Orange} \\ \cmidrule(r{2\tabcolsep}){5-7} \cmidrule(r{2\tabcolsep}){8-10} \cmidrule(r{2\tabcolsep}){11-13} \cmidrule(r{\tabcolsep}){14-16}
& & & & \ap{50} & \ap{75} & \apavg & \ap{50} & \ap{75} & \apavg & \ap{50} & \ap{75} & \apavg & \ap{50} & \ap{75} & \apavg \\
\midrule
Baseline & \num{0.100} & \num{0.460} & \num{0.810} & \num{0.210} & \num{0.450} & \num{0.520} & \num{0.880} & \num{0.020} & \num{0.080} & \num{0.240} & \num{0.080} & \num{0.600} & \num{0.050} & \num{0.990} & \num{0.030} \\
Improved & \num{0.200} & \num{0.360} & \num{0.860} & \num{0.390} & \num{0.400} & \num{0.600} & \num{0.900} & \num{0.020} & \num{0.080} & \num{0.200} & \num{0.080} & \num{0.600} & \num{0.100} & \num{0.990} & \num{0.100} \\
\(\Delta\) & \num{0.100} & \num{-0.100} & \num{0.050} & \num{0.180} & \num{-0.050} & \num{0.080} & \num{0.020} & \num{0.000} & \num{0.000} & \num{-0.040} & \num{0.000} & \num{0.000} & \num{0.050} & \num{0.000} & \num{0.070} \\
\bottomrule
\end{tabularx}
\end{figure}
\end{document}
Respuesta1
Mi principal sugerencia sería utilizar un tabular*
entorno en lugar de un tabularx
entorno. Digo esto porque una de las características principales del X
tipo de columna (el salto de línea automático del contenido de la celda) no parece ser relevante para la tabla que nos ocupa.
Usaría el S
tipo de columna en lugar del tipo de columna X
(o C
) para las 15 columnas de datos y no incluiría los números en \num
las declaraciones. Finalmente, encerraría el material tabular en un table
entorno,noen un figure
ambiente.
\documentclass[11pt]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[scaled=1]{helvet} % I don't seem to have 'uarial' package
\renewcommand{\familydefault}{\sfdefault}
\usepackage{array,amssymb,booktabs,siunitx}
\newcommand{\ap}[1]{AP\textsubscript{#1}}
\newcommand{\apavg}[0]{AP\textsubscript{\(\!\varnothing\)}}
\begin{document}
\begin{table}[!htbp] % <-- 'table', not 'figure'
\setlength\tabcolsep{0pt}
\tiny
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} % <-- use 'tabular*'
l *{15}{S[table-format=1.3]} }
\toprule
Model & &&&
\multicolumn{3}{c}{Apple} & \multicolumn{3}{c}{Banana} &
\multicolumn{3}{c}{Potato} & \multicolumn{3}{c}{Orange} \\
\cmidrule{5-7} \cmidrule{8-10} \cmidrule{11-13} \cmidrule{14-16}
& {\ap{50}} & {\ap{75}} & {\apavg}
& {\ap{50}} & {\ap{75}} & {\apavg} & {\ap{50}} & {\ap{75}} & {\apavg}
& {\ap{50}} & {\ap{75}} & {\apavg} & {\ap{50}} & {\ap{75}} & {\apavg} \\
\midrule
Baseline & 0.100 & 0.460 & 0.810 & 0.210 & 0.450 & 0.520 & 0.880 & 0.020 & 0.080 & 0.240 & 0.080 & 0.600 & 0.050 & 0.990 & 0.030\\
Improved & 0.200 & 0.360 & 0.860 & 0.390 & 0.400 & 0.600 & 0.900 & 0.020 & 0.080 & 0.200 & 0.080 & 0.600 & 0.100 & 0.990 & 0.100\\
Diff. & 0.100 & -0.100 & 0.050 & 0.180 & -0.050 & 0.080 & 0.020 & 0.000 & 0.000 & -0.040 & 0.000 & 0.000 & 0.050 & 0.000 & 0.070\\
\bottomrule
\end{tabular*}
\end{table}
\end{document}