我想复制此图中的表格但不复制第二列:
但问题是我无法找出如何在每两列之间留出水平空间(N=2、N=3 ... 等)。我也无法找出如何在第一行和第二行之间留出垂直空间(N=2 和 Avg. Pos ... 等),因为文本太靠近上线了。
这是我的版本和代码:
\begin{table}[h]
\begin{tabular}{@{}lrrrrrr@{}}
\toprule
& \multicolumn{2}{c}{N = 2} & \multicolumn{2}{c}{N = 3} & \multicolumn{2}{c}{N = 4} \\ \cline{2-3} \cline{4-5} \cline{6-7}
Network Name & \multicolumn{1}{c}{Avg. Pos.} & \multicolumn{1}{c}{Avg. Neg.} & \multicolumn{1}{c}{Avg. Pos.} & \multicolumn{1}{c}{Avg. Neg.} & \multicolumn{1}{c}{Avg. Pos.} & \multicolumn{1}{c}{Avg. Neg.} \\ \midrule
X & 4895 & 135639 & 77 & 109622 & 5 & 16360 \\
Y & 5426 & 183685 & 196 & 204801 & 9 & 39977 \\
Z & 8959 & 80669 & 38 & 109362 & 4 & 43329 \\ \bottomrule
\end{tabular}
\end{table}
答案1
对于第一项,使用\cmidrule(lr){2-3}
,注意(lr)
。有关详细信息,请参阅booktabs
手册。对于第二项,使用一些strut
类似
\newcommand*{\mystrut}{\rule{0pt}{2.5ex}}
2.5ex
按照你想要的方式改变。
\documentclass{article}
\usepackage{booktabs}
\newcommand*{\mystrut}{\rule{0pt}{2.5ex}}
\begin{document}
\begin{table}[h]
\begin{tabular}{@{}lrrrrrr@{}}
\toprule
& \multicolumn{2}{c}{N = 2} & \multicolumn{2}{c}{N = 3} & \multicolumn{2}{c}{N = 4} \\ \cmidrule(lr){2-3} \cmidrule(lr){4-5} \cmidrule(lr){6-7}
\mystrut Network Name & \multicolumn{1}{c}{Avg. Pos.} & \multicolumn{1}{c}{Avg. Neg.} & \multicolumn{1}{c}{Avg. Pos.} & \multicolumn{1}{c}{Avg. Neg.} & \multicolumn{1}{c}{Avg. Pos.} & \multicolumn{1}{c}{Avg. Neg.} \\ \midrule
X & 4895 & 135639 & 77 & 109622 & 5 & 16360 \\
Y & 5426 & 183685 & 196 & 204801 & 9 & 39977 \\
Z & 8959 & 80669 & 38 & 109362 & 4 & 43329 \\ \bottomrule
\end{tabular}
\end{table}
\end{document}
答案2
一种解决方案是使用booktabs
, makecell
(允许在单元格中换行)和 siunitx
居中右对齐的数字,以及\extrarowheight
更好的垂直间距:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{lmodern}
\usepackage{array, booktabs, makecell}
\setlength\extrarowheight{2pt}
\usepackage{siunitx}
\sisetup{table-format=6.0}
\begin{document}
\begin{table}[h]
\begin{tabular}{@{}ccSS[table-format=3.0]ScS[table-format=5.0]@{}}
\toprule
& \multicolumn{2}{c}{N = 2} & \multicolumn{2}{c}{N = 3} & \multicolumn{2}{c}{N = 4} \\
\cmidrule(lr){2-3} \cmidrule(lr){4-5} \cmidrule(lr){6-7}
\makecell{ Network\\ Name} &\multicolumn{1}{c}{Avg. Pos.} & \multicolumn{1}{c}{Avg. Neg.} & \multicolumn{1}{c}{Avg. Pos.} & \multicolumn{1}{c}{Avg. Neg.} & \multicolumn{1}{c}{Avg. Pos.} & \multicolumn{1}{c}{Avg. Neg.} \\
\cmidrule[\lightrulewidth](lr){1-1}\cmidrule[\lightrulewidth](lr){2-3}\cmidrule[\lightrulewidth](lr){4-5}\cmidrule[\lightrulewidth](lr){6-7}
X & 4895 & 135639 & 77 & 109622 & 5 & 16360 \\
Y & 5426 & 183685 & 196 & 204801 & 9 & 39977 \\
Z & 8959 & 80669 & 38 & 109362 & 4 & 43329 \\ \bottomrule
\end{tabular}
\end{table}
\end{document}
答案3
tabular*
这是一个使用而不是 环境的解决方案tabular
。这确保表格将适合 的指定宽度\textblock
。使用这种方法,对 创建的线条进行显式修剪\cmidrule
就没有必要了。使用\cmidrule
而不是\cline
将自动提供您希望获得的额外垂直分隔。
为了使此表适合文本块,必须在“Avg. Pos.”和“Avg. Neg.”字符串中引入换行符。我还建议您使用一种可自动将数字对齐到其(隐含的)小数点的列类型;包d
的类型就是这样一种列类型dcolumn
。(包S
的列类型siunitx
也可以。)
\documentclass{article}
\usepackage{booktabs}
\newcommand\mc[1]{\multicolumn{1}{c}{#1}} % two handy shortcut macros
\newcommand\MC[1]{\multicolumn{1}{c@{}}{#1}}
\usepackage{dcolumn} % decimal marker alignment functions
\newcolumntype{d}[1]{D{.}{.}{#1}}
\begin{document}
\begin{table}
\begin{tabular*}{\textwidth}{@{} l @{\extracolsep{\fill}}
d{4.0}d{6.0} d{3.0}d{6.0} d{1.0}d{5.0} @{}}
\toprule
Network Name
& \multicolumn{2}{c}{$N = 2$}
& \multicolumn{2}{c}{$N = 3$}
& \multicolumn{2}{c@{}}{$N = 4$}\\
\cmidrule{2-3} \cmidrule{4-5} \cmidrule{6-7}
& \mc{Avg.} & \mc{Avg.} & \mc{Avg.} & \mc{Avg.} & \mc{Avg.} & \MC{Avg.} \\
& \mc{Pos.} & \mc{Neg.} & \mc{Pos.} & \mc{Neg.} & \mc{Pos.} & \MC{Neg.} \\
\midrule
X & 4895 & 135639 & 77 & 109622 & 5 & 16360 \\
Y & 5426 & 183685 & 196 & 204801 & 9 & 39977 \\
Z & 8959 & 80669 & 38 & 109362 & 4 & 43329 \\
\bottomrule
\end{tabular*}
\end{table}
\end{document}