Eu tenho uma tabela usando regras do booktabs
. No entanto, tenho restrições de espaço vertical e não quero usar subcaption
com seus arquivos subtable
. Também tenho restrições de espaço horizontal, portanto a coluna do grupo deve ser mínima.
Como primeira abordagem, uso bigdelim
colchetes e para agrupamento.
MWE
Um possível MWE se parece com o seguinte:
\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}
Porém, não quero que a coluna "grupo" seja capturada pelas linhas horizontais, não acho isso estético. Já usei o cmidrule
comando from booktabs
para reduzir seu comprimento. No entanto, não existe (compreensivelmente) tal coisa para \toprule
e\bottomrule
Pergunta
É uma solução ter um
booktabs
sem ter\toprule
e\bottomrule
aparecer na coluna "grupo"?(Só consigo pensar em escrever meu próprio comando para, por exemplo\ctoprule
, que está usando\cmidrule
, mas todas as regras de\toprule
, por exemplo, espessura e espaços, se aplicam.)Existe uma solução melhor para conseguir esse agrupamento seguindo o
booktabs
pacote?
Responder1
Por que não usar apenas um mais grosso cmidrule
? Pelo que posso ver, o espaçamento é aproximadamente o mesmo e pode ser ajustado. Também sugiro remover o rolamento do lado direito e aparar o lado esquerdo do cmidrule
s. Você também pode considerar criar um pequeno espaço entre os grupos, 0.75ex
foi o suficiente.
Contudo, de acordo com oguias de livrosseção manual 5,guias de livrosjunto comMesa compridaimplementa o corte de todos os tipos de regras. O mantenedor sugere usarMesa compridapara tabulares, se você precisar de arquivos aparáveis toprule
e bottomrule
. Eu implementei isso nos exemplos abaixo. O fator de corte é um pouco complicado, a menos que você defina uma largura fixa para a primeira coluna ou tenha habilidade para implementar código para ler o arquivo .aux ou medir a primeira coluna. Na última versão,variedadetem novas colunas W
- e w
-, onde você pode especificar o alinhamento e a largura. Eu usei uma w
coluna de 4 mm. O fator de corte deve então ser 4mm+2\tabcolseps+0.75ex
(fator de corte padrão, consulte o manual, p. 4):
Mesa comprida
Melhorei o código desde ontem:
- Alterei o segundo parâmetro para
\ldelim
para{*}
me livrar de duasOverfull hbox with 10.[...]pt
mensagens de erro. Ainda fica umaUnderfull vbox...
mensagem, mas deixo-a por agora. - Eu mudei
\tabcolsep
para0.5em
em vez de um número fixo de pontos. - Aumentei a coluna da esquerda para
5 mm
e consequentemente o fator de correção para otoprule
ebottomrule
. Isso dá um pouco mais de ar no tabular. - O fator de corte correto para
cmidrule
etc.. deveria ser\tabcolsep
, não0.75ex
. Se preferir, você pode subtrair 1 ponto para que a linha não fique totalmente alinhada com o 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 e 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}
Responder2
Aqui estão duas soluções: uma baseada em \cmidrule
s personalizados que imitam \toprule
e \bottomrule
, e outra baseada em blkarray
, com um sy,tax mais simples e apenas 3 colunas. Infelizmente, o último pacote não é compatível com booktabs
, então tive que brincar \BAhhline
para obter regras mais grossas e o espaçamento correto na 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}