МВЭ

МВЭ

У меня есть таблица, использующая правила из booktabs. Однако у меня есть ограничения по вертикальному пространству, и я не хочу использовать subcaptionих с subtable. У меня также есть ограничения по горизонтальному пространству, поэтому столбец для группы должен быть минимальным.

В качестве первого подхода я использую bigdelimскобки и скобки для группировки.

МВЭ

Возможный вариант MWE выглядит следующим образом:

\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}

группировка строк таблицы

Однако я не хочу, чтобы столбец "group" был захвачен горизонтальными линиями, я не думаю, что это эстетично. Я использовал команду cmidrulefrom, booktabsчтобы уменьшить их длину. Однако (понятно) нет такого для \topruleand\bottomrule

Вопрос

  1. Есть ли решение иметь booktabsбез \topruleи \bottomruleпоказывать в столбце «группа»?(Я могу придумать только свою собственную команду для, например \ctoprule, , которая использует \cmidrule, но все правила из \toprulefor , например, толщина и пробелы, применяются.)

  2. Есть ли лучшее решение для достижения этой группировки, придерживаясь пакета booktabs?

решение1

Почему бы просто не использовать более толстый cmidrule? Насколько я могу судить, интервалы примерно одинаковы, и их можно регулировать. Я также предлагаю удалить правый боковой подшипник и обрезать левую сторону s cmidrule. Вы также можете подумать о добавлении небольшого промежутка между группами, 0.75exэтого было бы достаточно.

Однако, по даннымзакладкируководство раздел 5,закладкивместе сдлинный столреализует обрезку всех типов правил. Сопровождающий предлагает использоватьдлинный столдля табличных, если вам нужны обрезаемые topruleи bottomrule. Я реализовал это в примерах ниже. Фактор обрезки — это немного догадок, если только вы не задали фиксированную ширину первого столбца или не обладаете навыками реализации кода для чтения .aux-файла или измерения первого столбца. В последней версии,множествополучил новые W- и w-колонки, где можно указать выравнивание и ширину. Я использовал 4-миллиметровую w-колонку. Тогда коэффициент обрезки должен быть 4mm+2\tabcolseps+0.75ex(стандартный коэффициент обрезки см. в руководстве на стр. 4):

длинный стол

Со вчерашнего дня я улучшил код:

  1. Я изменил второй параметр на, \ldelimчтобы {*}избавиться от двух Overfull hbox with 10.[...]ptсообщений об ошибках. Оно все еще осталось сообщением Underfull vbox..., но я оставлю его пока.
  2. Я изменил « \tabcolsepна» 0.5emвместо фиксированного числа точек.
  3. Я увеличил левый столбец до 5 mmи, следовательно, поправочный коэффициент для topruleи bottomrule. Это дает немного больше воздуха в таблице.
  4. Правильный фактор обрезки дляcmidrule и т. д.. должно быть \tabcolsep, а не 0.75ex. Если хотите, можете вычесть 1pt, чтобы линия не была полностью вровень с текстом.

введите описание изображения здесь

\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

введите описание изображения здесь

\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}

решение2

Вот два решения: одно основано на настроенных \cmidrules, которые имитируют \topruleи \bottomrule, а другое основано на blkarray, с более простым sy,tax и всего 3 столбцами. К сожалению, последний пакет несовместим с booktabs, поэтому мне пришлось поиграться с \BAhhline, чтобы получить более толстые линии и правильные интервалы сверху и снизу.

\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}

введите описание изображения здесь

Связанный контент