У меня есть таблица, использующая правила из 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" был захвачен горизонтальными линиями, я не думаю, что это эстетично. Я использовал команду cmidrule
from, booktabs
чтобы уменьшить их длину. Однако (понятно) нет такого для \toprule
and\bottomrule
Вопрос
Есть ли решение иметь
booktabs
без\toprule
и\bottomrule
показывать в столбце «группа»?(Я могу придумать только свою собственную команду для, например\ctoprule
, , которая использует\cmidrule
, но все правила из\toprule
for , например, толщина и пробелы, применяются.)Есть ли лучшее решение для достижения этой группировки, придерживаясь пакета
booktabs
?
решение1
Почему бы просто не использовать более толстый cmidrule
? Насколько я могу судить, интервалы примерно одинаковы, и их можно регулировать. Я также предлагаю удалить правый боковой подшипник и обрезать левую сторону s cmidrule
. Вы также можете подумать о добавлении небольшого промежутка между группами, 0.75ex
этого было бы достаточно.
Однако, по даннымзакладкируководство раздел 5,закладкивместе сдлинный столреализует обрезку всех типов правил. Сопровождающий предлагает использоватьдлинный столдля табличных, если вам нужны обрезаемые toprule
и bottomrule
. Я реализовал это в примерах ниже. Фактор обрезки — это немного догадок, если только вы не задали фиксированную ширину первого столбца или не обладаете навыками реализации кода для чтения .aux-файла или измерения первого столбца. В последней версии,множествополучил новые W
- и w
-колонки, где можно указать выравнивание и ширину. Я использовал 4-миллиметровую w
-колонку. Тогда коэффициент обрезки должен быть 4mm+2\tabcolseps+0.75ex
(стандартный коэффициент обрезки см. в руководстве на стр. 4):
длинный стол
Со вчерашнего дня я улучшил код:
- Я изменил второй параметр на,
\ldelim
чтобы{*}
избавиться от двухOverfull hbox with 10.[...]pt
сообщений об ошибках. Оно все еще осталось сообщениемUnderfull vbox...
, но я оставлю его пока. - Я изменил «
\tabcolsep
на»0.5em
вместо фиксированного числа точек. - Я увеличил левый столбец до
5 mm
и, следовательно, поправочный коэффициент дляtoprule
иbottomrule
. Это дает немного больше воздуха в таблице. - Правильный фактор обрезки для
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
Вот два решения: одно основано на настроенных \cmidrule
s, которые имитируют \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}