我有一张使用 规则的表格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
来booktabs
缩短它们的长度。但是,(可以理解)没有这样的\toprule
事情\bottomrule
问题
是否有一个解决方案,可以让
booktabs
不显示\toprule
并且\bottomrule
显示在“组”列中?(我只能想到编写自己的命令,例如\ctoprule
,它正在使用,\cmidrule
但所有规则\toprule
(例如厚度和空间)都适用。)有没有更好的解决方案来实现该分组而又坚持包装
booktabs
?
答案1
为什么不直接使用更粗的cmidrule
?据我所知,间距大致相同,并且可以调整。我还建议移除最右侧的侧轴承,并修剪 s 的左侧cmidrule
。您也可以考虑在组之间添加一个小空间,0.75ex
就足够了。
然而,根据书签手册第 5 节,书签和...一起长桌实现所有类型规则的修剪。维护者建议使用长桌对于表格,如果您需要可修剪toprule
和bottomrule
。我在下面的示例中实现了这一点。除非您设置第一列的固定宽度,或者有能力实现代码来读取 .aux 文件或测量第一列,否则修剪因子有点难以猜测。在上一个版本中,大批有了新的W
- 和w
-列,您可以在其中指定对齐方式和宽度。我使用了 4mm w
-列。然后,修剪因子应该是4mm+2\tabcolseps+0.75ex
(标准修剪因子参见手册第 4 页):
长桌
我从昨天开始改进了代码:
- 我已将第二个参数更改为
\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}
表格和修改的规则
\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 ,另一个基于,使用更简单的 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}