Tengo una tabla que usa reglas de booktabs
. Sin embargo, tengo limitaciones de espacio vertical y no quiero usarlo subcaption
con sus archivos subtable
. También tengo limitaciones de espacio horizontal, por lo que la columna del grupo debe ser mínima.
Como primer enfoque, uso bigdelim
corchetes y para agrupar.
MWE
Una posible MWE se parece a la siguiente:
\documentclass{article}
\usepackage{booktabs, bigdelim, rotating}
\begin{document}
\begin{table}[htbp]
\begin{tabular}{llcc}
\toprule
& header1 & header 2 & header 3 \\
\cmidrule{2-4}
\ldelim\{{4}{4mm}[\parbox{4mm}{\rotatebox[origin=c]{90}{group1}}] & 1 & a & g \\
& 2 & b & h \\
& 3 & c & i \\
& 3 & c & i \\
\ldelim\{{6}{4mm}[\parbox{4mm}{\rotatebox[origin=c]{90}{group2}}] & 4 & d & j \\
& 5 & e & k \\
& 6 & f & l \\
& 7 & g & m \\
& 8 & h & n \\
& 9 & i & o \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
Sin embargo, no quiero que la columna "grupo" quede capturada por las líneas horizontales, no creo que sea estético. Ya utilicé el cmidrule
comando from booktabs
para reducir su longitud. Sin embargo, (comprensiblemente) no existe tal cosa para \toprule
y\bottomrule
Pregunta
¿Es una solución tener un
booktabs
sin tenerlo\toprule
y\bottomrule
mostrarlo en la columna "grupo"?(Solo puedo pensar en escribir mi propio comando para, por ejemplo\ctoprule
, que está usando\cmidrule
, pero se aplican todas las reglas de\toprule
, por ejemplo, grosor y espacios).¿Existe una solución mejor para lograr esa agrupación apegándose al
booktabs
paquete?
Respuesta1
¿Por qué no utilizar uno más grueso cmidrule
? Por lo que puedo ver, el espaciado es aproximadamente el mismo y se puede ajustar. También sugiero quitar el cojinete del lado derecho y recortar el lado izquierdo del cmidrule
s. También puedes considerar agregar un pequeño espacio entre los grupos, 0.75ex
fue suficiente.
Sin embargo, según elpestañasmanual sección 5,pestañasJuntos conmesa largaimplementa recorte de todo tipo de reglas. El mantenedor sugiere usarmesa largaPara tabulares si necesita recortables toprule
y bottomrule
. He implementado esto en los ejemplos siguientes. El factor de recorte es un poco de conjetura, a menos que establezca un ancho fijo para la primera columna o tenga la habilidad de implementar código para leer el archivo .aux o medir la primera columna. En la última versión,formaciónObtuve nuevas columnas W
y w
, donde puede especificar la alineación y el ancho. He utilizado una w
columna de 4 mm. El factor de recorte debería ser entonces 4mm+2\tabcolseps+0.75ex
(factor de recorte estándar, consulte el manual p. 4):
mesa larga
He mejorado el código desde ayer:
- Cambié el segundo parámetro de
\ldelim
to{*}
para deshacerme de dosOverfull hbox with 10.[...]pt
mensajes de error. Todavía queda unUnderfull vbox...
mensaje, pero lo dejo por ahora. - He cambiado el
\tabcolsep
punto a0.5em
en lugar de un número fijo. - Aumenté la columna de la izquierda
5 mm
y, en consecuencia, el factor de corrección paratoprule
ybottomrule
. Esto da un poco más de aire en el tabular. - El factor de recorte correcto para
cmidrule
etc.. debería serlo\tabcolsep
, no0.75ex
. Si lo prefieres, puedes restar 1 punto para que la línea no quede completamente alineada con el texto.
\documentclass{article}
\usepackage{booktabs, bigdelim, rotating, longtable, array}
\setlength{\tabcolsep}{0.5em} % As recommended by James Felici ‘The Complete Manual of Typography’
\begin{document}
%\begin{table}[htbp]
\begin{longtable}[l]{w{l}{5mm}lcc@{}}
\toprule(l{\dimexpr(5mm+3\tabcolsep)})
& header1 & header 2 & header 3
\endfirsthead
\cmidrule(l{\tabcolsep}){2-4}
\ldelim\{{4}{*}[\parbox{4mm}{\rotatebox[origin=c]{90}{group1}}] & 1 & a & g \\
& 2 & b & h \\
& 3 & c & i \\
& 3 & c & i \\\addlinespace[0.75ex]
\ldelim\{{6}{*}[\parbox{4mm}{\rotatebox[origin=c]{90}{group2}}] & 4 & d & j \\
& 5 & e & k \\
& 6 & f & l \\
& 7 & g & m \\
& 8 & h & n \\
& 9 & i & o \\
\bottomrule(l{\dimexpr(5mm+3\tabcolsep)})
\end{longtable}
%\end{table}
\end{document}
cmidrule tabular y modificado
\documentclass{article}
\usepackage{booktabs, bigdelim, rotating}
\begin{document}
\begin{table}[htbp]
\begin{tabular}{llcc@{}}
\cmidrule[\heavyrulewidth](l){2-4}
& header1 & header 2 & header 3 \\
\cmidrule(l){2-4}
\ldelim\{{4}{4mm}[\parbox{4mm}{\rotatebox[origin=c]{90}{group1}}] & 1 & a & g \\
& 2 & b & h \\
& 3 & c & i \\
& 3 & c & i \\\addlinespace[0.75ex]
\ldelim\{{6}{4mm}[\parbox{4mm}{\rotatebox[origin=c]{90}{group2}}] & 4 & d & j \\
& 5 & e & k \\
& 6 & f & l \\
& 7 & g & m \\
& 8 & h & n \\
& 9 & i & o \\
\cmidrule[\heavyrulewidth](l){2-4}
\end{tabular}
\end{table}
\end{document}
Respuesta2
Aquí hay dos soluciones: una basada en \cmidrule
mensajes personalizados que imitan \toprule
y \bottomrule
y otra basada en blkarray
, con un sistema, impuestos más simple y solo 3 columnas. Desafortunadamente, este último paquete no es compatible con booktabs
, así que tuve que jugar \BAhhline
para obtener reglas más gruesas y el espaciado correcto en la parte superior e inferior.
\documentclass{article}
\usepackage{booktabs, bigdelim, rotating}%{
\newcommand{\mytoprule}{\noalign{\vskip -\aboverulesep}\cmidrule[\heavyrulewidth]{2-4}}
\newcommand{\mybottomrule}{\cmidrule[\heavyrulewidth]{2-4}\noalign{\vskip -\belowrulesep}}
\usepackage{blkarray, hhline}
\begin{document}
\begin{table}[htbp]
\centering
\begin{tabular}{llcc}
\mytoprule
& header1 & header 2 & header 3 \\
\cmidrule{2-4}
\ldelim\{{4}{4mm}[\parbox{4mm}{\rotatebox[origin=c]{90}{group1}}] & 1 & a & g \\
& 2 & b & h \\
& 3 & c & i \\
& 3 & c & i \\
\addlinespace[0.5ex]
\ldelim\{{6}{4mm}[\parbox{4mm}{\rotatebox[origin=c]{90}{group2}}] & 4 & d & j \\
& 5 & e & k \\
& 6 & f & l \\
& 7 & g & m \\
& 8 & h & n \\
& 9 & i & o \\
\mybottomrule
\end{tabular}
\end{table}
\begin{table}[htbp]
\centering
\doublerulesep =0.05pt
\begin{blockarray}{lcc}
\hhline{===}
\BAnoalign{\vskip -5.3ex}
header1 & header 2 & header 3 \\
\BAhline
\begin{block}{\Left{\rotatebox[origin=c]{90}{group1}\,}{\{\,}lcc}
1 & a & g \\
2 & b & h \\
3 & c & i \\
3 & c & i \\
\end{block}
\begin{block}{\Left{\rotatebox[origin=c]{90}{group2}\,}{\{\,}lcc}%
4 & d & j \\
5 & e & k \\
6 & f & l \\
7 & g & m \\
8 & h & n \\
9 & i & o \\%\
\end{block}
\BAnoalign{\vskip -5.3ex}
\hhline{===}
\end{blockarray}
\end{table}
\end{document}