我有一個使用來自 的規則的表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}
但是,我不想讓“組”列被水平線捕獲,我認為這不美觀。我已經使用cmidrule
命令 frombooktabs
來減少它們的長度。然而,(可以理解)不存在這樣的東西\toprule
和\bottomrule
問題
他們是否有解決方案,可以在“組”列上
booktabs
不顯示\toprule
並顯示?\bottomrule
(我只能想到編寫自己的命令,例如\ctoprule
,它正在使用,\cmidrule
但 for 的所有規則\toprule
,例如厚度和空格,都適用。)是否有更好的解決方案來透過堅持包來實現分組
booktabs
?
答案1
為什麼不直接使用更厚的呢cmidrule
?據我所知,間距大致相同,並且可以調整。我還建議拆下最右側的軸承,並修剪 s 的左側cmidrule
。您也可以考慮在組之間添加一個小空間,0.75ex
就足夠了。
然而,根據書本標籤手冊第 5 節,書本標籤和...一起長桌實現所有類型規則的修剪。維護者建議使用長桌對於表格,如果您需要可修剪toprule
和bottomrule
.我已經在下面的範例中實現了這一點。修剪因子是一點猜測,除非您設定第一列的固定寬度,或者有能力實現程式碼來讀取 .aux 檔案或測量第一列。在上一個版本中,大批有了新的W
- 和w
- 列,您可以在其中指定對齊方式和寬度。我用的是 4mm 的w
柱子。調整係數應為4mm+2\tabcolseps+0.75ex
(標準調整係數請參考手冊第 4 頁):
長桌
從昨天開始我改進了程式碼:
- 我更改了 to 的第二個參數
\ldelim
以{*}
消除兩個Overfull hbox with 10.[...]pt
錯誤訊息。仍然有Underfull vbox...
留言,但我暫時留下。 - 我已將 改為 ,
\tabcolsep
而0.5em
不是固定數量的點。 - 我將左欄增加到 ,從而增加了和 的
5 mm
修正係數。這會在表格中留下更多的空氣。toprule
bottomrule
- 正確的微調係數為
cmidrule
ETC。應該是\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 ,另一種基於 s ,具有更簡單的 sy,tax,並且只有 3 列。不幸的是,後一個包與 不相容,所以我不得不嘗試以獲得更厚的規則以及頂部和底部的正確間距。\toprule
\bottomrule
blkarray
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}