![具有连续垂直线的多列表格](https://linux22.com/image/471995/%E5%85%B7%E6%9C%89%E8%BF%9E%E7%BB%AD%E5%9E%82%E7%9B%B4%E7%BA%BF%E7%9A%84%E5%A4%9A%E5%88%97%E8%A1%A8%E6%A0%BC.png)
我想在 latex 中创建这种类型的表格。我所做的如下
\begin{tabular}{c|ccccc|ccccc|ccccc}
\toprule
&&& Edge count &&&&& Wedge count &&&&& Triangle count &&\\
\hline
$p$ && \Romannum{1} & \Romannum{2} & \Romannum{3} &&& \Romannum{1} & \Romannum{2} & \Romannum{3} &&& \Romannum{1} & \Romannum{2} & \Romannum{3} &\\
\hline
$0.025$ && 0 & 0 & 0 &&& 0 & 3 & 1 &&& 0 & 1 & 2 &\\
$0.100$ && 2 & 0 & 1 &&& 0 & 0 & 0 &&& 1 & 0 & 1 &\\
$0.250$ && 2 & 1 & 0 &&& 1 & 2 & 0 &&& 0 & 0 & 0 &\\
\bottomrule
\end{tabular}
无法获取乳胶代码中每个数字下的括号数量。
答案1
您的表根据需要定义了更多列。例如:
\documentclass[margin=3mm]{standalone}
\usepackage{array, booktabs}
\usepackage[Most]{romannum}
\begin{document}
\begin{tabular}{c| *3{wc{2em}} | *3{wc{2em}} | *3{wc{2em}} }
\toprule
& \multicolumn{3}{c|}{Edge count}
& \multicolumn{3}{c|}{Wedge count}
& \multicolumn{3}{c}{Triangle count} \\
\cline{2-10}
$p$ & \Romannum{1}
& \Romannum{2}
& \Romannum{3}
& \Romannum{1}
& \Romannum{2}
& \Romannum{3}
& \Romannum{1}
& \Romannum{2}
& \Romannum{3} \\
\hline
0.025 & 0 & 0 & 0 & 0 & 3 & 1 & 0 & 1 & 2 \\
0.100 & 2 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 \\
0.250 & 2 & 1 & 0 & 1 & 2 & 0 & 0 & 0 & 0 \\
\bottomrule
\end{tabular}
\end{document}
重现了您的问题:
- 您应该知道,
booktabs
包中定义的规则不适用于具有垂直规则的表格(周围是小的垂直空间)。 - 可以通过重新定义
\toprule
、\midrule
和cmidrule
和来删除这些空格bottomrule
。 - 另一种可能性是使用
tablr
包tabularray
,它删除这些垂直空格:
\documentclass[margin=3mm]{standalone}
\usepackage{tabularray}
\UseTblrLibrary{booktabs}
\usepackage[Most]{romannum}
\begin{document}
\begin{tblr}{colspec={c| *3{Q[c,wd={2em}]} | *3{Q[c,wd={2em}]} | *3{Q[c,wd={2em}]} },
cell{1}{2,5,8} = {c=3}{}
}
\toprule
& Edge count
& & & Wedge count
& & Triangle count \\
\cmidrule{2-10}
$p$ & \Romannum{1}
& \Romannum{2}
& \Romannum{3}
& \Romannum{1}
& \Romannum{2}
& \Romannum{3}
& \Romannum{1}
& \Romannum{2}
& \Romannum{3} \\
\midrule
0.025 & 0 & 0 & 0 & 0 & 3 & 1 & 0 & 1 & 2 \\
0.100 & 2 & 0 & 1 & 0 & 0 & 0 & 1 & 0 & 1 \\
0.250 & 2 & 1 & 0 & 1 & 2 & 0 & 0 & 0 & 0 \\
\bottomrule
\end{tblr}
\end{document}
答案2
我认为完全去掉垂直线没什么问题。相反,我主张更多的使用booktabs
包的宏。而且,由于 9 个数据列似乎包含十进制数,因此将它们与小数点对齐会很有用;这可以借助包dcolumn
及其D
列类型来完成。
\documentclass{article}
\usepackage{booktabs,array,romannum}
\usepackage{dcolumn} % align numbers in 'D'-type columns on their decimal markers
\newcolumntype{d}[1]{D{.}{.}{#1}}
\newcommand\mc[1]{\multicolumn{1}{c}{#1}} % handy shortcut macro
\begin{document}
\begin{center}
\setlength\tabcolsep{0pt}
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}}
>{$}l<{$}
*{3}{*{2}{d{1.3}}d{1.4}} }
\toprule
p & \multicolumn{3}{c}{Edge count}
& \multicolumn{3}{c}{Wedge count}
& \multicolumn{3}{c}{Triangle count} \\
\cmidrule{2-4} \cmidrule{5-7} \cmidrule{8-10}
& \mc{\Romannum{1}} & \mc{\Romannum{2}} & \mc{\Romannum{3}}
& \mc{\Romannum{1}} & \mc{\Romannum{2}} & \mc{\Romannum{3}}
& \mc{\Romannum{1}} & \mc{\Romannum{2}} & \mc{\Romannum{3}} \\
\midrule
0.025 & 0.95 & 0.98 & 0.93 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.98 \\
&(0.137) &(0.273) &(0.278) & & & & & & (0.273)\\
0.100 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
0.25 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 & 0.00 \\
\bottomrule
\end{tabular*}
\end{center}
\end{document}