Ich habe eine Tabelle, die Regeln aus verwendet booktabs
. Ich habe jedoch vertikale Platzbeschränkungen und möchte sie nicht subcaption
mit deren verwenden subtable
. Ich habe auch horizontale Platzbeschränkungen, daher sollte die Spalte für die Gruppe minimal sein.
Als ersten Ansatz verwende ich bigdelim
und Klammern zur Gruppierung.
MWE
Ein mögliches MWE sieht wie folgt aus:
\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}
Ich möchte jedoch nicht, dass die Spalte „Gruppe“ von den horizontalen Linien erfasst wird, das finde ich nicht ästhetisch. Ich habe den cmidrule
Befehl von booktabs
bereits verwendet, um ihre Länge zu reduzieren. Es gibt jedoch (verständlicherweise) kein solches für \toprule
und\bottomrule
Frage
Gibt es eine Lösung, um ein zu haben,
booktabs
ohne dass\toprule
es\bottomrule
in der Spalte „Gruppe“ angezeigt wird?(Mir fällt nur ein, für zB einen eigenen Befehl zu schreiben,\ctoprule
der verwendet, für den\cmidrule
aber alle Regeln von\toprule
zB Dicke und Leerzeichen gelten.)Gibt es eine bessere Lösung, diese Gruppierung zu erreichen, als sich an das
booktabs
Paket zu halten?
Antwort1
Warum nicht einfach ein dickeres verwenden cmidrule
? Soweit ich sehen kann, ist der Abstand ungefähr gleich und kann angepasst werden. Ich schlage auch vor, das Lager ganz rechts zu entfernen und die linke Seite des cmidrule
S zu kürzen. Sie können auch erwägen, einen kleinen Abstand zwischen den Gruppen hinzuzufügen, 0.75ex
das reicht.
Doch laut derBuchtabsHandbuch Abschnitt 5,Buchtabszusammen mitlanger Tischimplementiert das Trimmen aller Arten von Regeln. Der Betreuer schlägt vor,langer Tischfür Tabellen, wenn Sie trimmbare toprule
und benötigen bottomrule
. Ich habe dies in den folgenden Beispielen implementiert. Der Trimmfaktor ist ein wenig Rätselraten, es sei denn, Sie legen eine feste Breite der ersten Spalte fest oder verfügen über die Fähigkeit, Code zum Lesen der .aux-Datei oder zum Messen der ersten Spalte zu implementieren. In der letzten VersionAnordnunghabe neue W
- und w
-Spalten bekommen, in denen man Ausrichtung und Breite festlegen kann. Ich habe eine 4mm w
-Spalte verwendet. Der Trimmfaktor sollte dann lauten 4mm+2\tabcolseps+0.75ex
(Standard-Trimmfaktor siehe Handbuch S. 4):
langer Tisch
Ich habe den Code seit gestern verbessert:
- Ich habe den zweiten Parameter geändert,
\ldelim
um zwei Fehlermeldungen{*}
zu entfernen . Es bleibt immer noch eine Meldung, aber ich lasse sie vorerst stehen.Overfull hbox with 10.[...]pt
Underfull vbox...
\tabcolsep
Ich habe das0.5em
in anstelle einer festen Anzahl von Punkten geändert .- Ich habe die linke Spalte auf vergrößert
5 mm
und damit auch den Korrekturfaktor für dietoprule
undbottomrule
. Das bringt etwas mehr Luft in die Tabelle. - Der richtige Trimmfaktor für
cmidrule
usw. sollte sein\tabcolsep
, nicht0.75ex
. Wenn Sie möchten, können Sie 1pt abziehen, sodass die Linie nicht ganz bündig mit dem Text abschließt.
\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}
tabellarische und modifizierte 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}
Antwort2
Hier sind zwei Lösungen: eine basiert auf benutzerdefinierten \cmidrule
s, die \toprule
und nachahmen \bottomrule
, und eine andere basiert auf blkarray
, mit einem einfacheren System und nur 3 Spalten. Leider ist das letztere Paket nicht mit kompatibel booktabs
, also musste ich mit herumspielen, \BAhhline
um dickere Linien und den richtigen Abstand oben und unten zu erhalten.
\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}