MWE

MWE

Eu tenho uma tabela usando regras do booktabs. No entanto, tenho restrições de espaço vertical e não quero usar subcaptioncom 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 bigdelimcolchetes 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}

agrupando linhas de uma tabela

Porém, não quero que a coluna "grupo" seja capturada pelas linhas horizontais, não acho isso estético. Já usei o cmidrulecomando from booktabspara reduzir seu comprimento. No entanto, não existe (compreensivelmente) tal coisa para \toprulee\bottomrule

Pergunta

  1. É uma solução ter um booktabssem ter \toprulee \bottomruleaparecer 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.)

  2. Existe uma solução melhor para conseguir esse agrupamento seguindo o booktabspacote?

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 cmidrules. Você também pode considerar criar um pequeno espaço entre os grupos, 0.75exfoi 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 wcoluna 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:

  1. Alterei o segundo parâmetro para \ldelimpara {*}me livrar de duas Overfull hbox with 10.[...]ptmensagens de erro. Ainda fica uma Underfull vbox...mensagem, mas deixo-a por agora.
  2. Eu mudei \tabcolseppara 0.5emem vez de um número fixo de pontos.
  3. Aumentei a coluna da esquerda para 5 mme consequentemente o fator de correção para o toprulee bottomrule. Isso dá um pouco mais de ar no tabular.
  4. O fator de corte correto paracmidrule etc.. deveria ser \tabcolsep, não 0.75ex. Se preferir, você pode subtrair 1 ponto para que a linha não fique totalmente alinhada com o texto.

insira a descrição da imagem aqui

\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

insira a descrição da imagem aqui

\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 \cmidrules personalizados que imitam \toprulee \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 \BAhhlinepara 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}

insira a descrição da imagem aqui

informação relacionada