使用 \cmidrule 时避免使用虚拟列

使用 \cmidrule 时避免使用虚拟列

我必须排版一个包含三个“主列”A、B 和 C 的表格,其中 B 和 C 分别包含两个和三个“子列”。

MWE 的输出

这是我的代码:

\documentclass{article}

\usepackage{lmodern}
\usepackage{siunitx}
\usepackage{booktabs}

\begin{document}

\begin{tabular}{S[table-format=1.0]cS[table-format=2.0]S[table-format=2.0]cS[table-format=1.0]S[table-format=1.0]S[table-format=1.0]}
\toprule
{A} && \multicolumn{2}{c}{B} && \multicolumn{3}{c}{C} \\
\cmidrule{3-4} \cmidrule{6-8}
&& {D} & {E} && {F} & {G} & {H} \\
\midrule
1 &&  8 &  9 && 1 & 2 & 1 \\
2 &&  9 & 10 && 1 & 1 & 2 \\
3 && 10 & 11 && 2 & 1 & 1 \\
\bottomrule
\end{tabular}

\end{document}

除了在“主列”A、B 和 C 之间使用虚拟列之外,有没有更好的方法来实现类似的结果?在我看来,“主列”之间的间距可以小一点。

答案1

除了对线条进行左右修剪外\cmidrule,您可能还想去除环境左侧和右侧边缘的“悬垂部分” 。当然,如果目标是创建清晰的画面,tabular这也是该软件包作者的一般建议。booktabs

在此处输入图片描述

\documentclass{article}
\usepackage{lmodern,siunitx,booktabs}

\begin{document}

\begin{center}
\begin{tabular}{@{} S[table-format=1.0] 
               *{2}{S[table-format=2.0]} 
               *{3}{S[table-format=1.0]} @{}}
\toprule
{A} & \multicolumn{2}{c}{B} & \multicolumn{3}{c@{}}{C} \\
% two-sided trimming of interior cmidrules, 
% one-sided trimming of exterior cmidrules
\cmidrule(lr){2-3} \cmidrule(l){4-6} 
& {D} & {E} & {F} & {G} & {H} \\
\midrule
1 &  8 &  9 & 1 & 2 & 1 \\
2 &  9 & 10 & 1 & 1 & 2 \\
3 & 10 & 11 & 2 & 1 & 1 \\
\bottomrule
\end{tabular}
\end{center}

\end{document}

答案2

根据以下评论埃格尔我自己可以轻松回答这个问题。

我得到了结果

MWE 的输出

通过使用以下代码。

\documentclass{article}

\usepackage{lmodern}
\usepackage{siunitx}
\usepackage{booktabs}

\setlength{\cmidrulekern}{.4em}

\begin{document}

\begin{tabular}{S[table-format=1.0]S[table-format=2.0]S[table-format=2.0]S[table-format=1.0]S[table-format=1.0]S[table-format=1.0]}
\toprule
{A} & \multicolumn{2}{c}{B} & \multicolumn{3}{c}{C} \\
\cmidrule(lr){2-3} \cmidrule(lr){4-6}
& {D} & {E} & {F} & {G} & {H} \\
\midrule
1 &  8 &  9 & 1 & 2 & 1 \\
2 &  9 & 10 & 1 & 1 & 2 \\
3 & 10 & 11 & 2 & 1 & 1 \\
\bottomrule
\end{tabular}

\end{document}

相关内容