我必须排版一个包含三个“主列”A、B 和 C 的表格,其中 B 和 C 分别包含两个和三个“子列”。
这是我的代码:
\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
根据以下评论埃格尔我自己可以轻松回答这个问题。
我得到了结果
通过使用以下代码。
\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}