我正在使用代码,
\documentclass{article}
\usepackage{multirow}
\begin{document}
\begin{table}
\begin{tabular}{|l|l|l|l|l|l|l|}
\hline
\multirow{2}{*}{Dataset} &
\multicolumn{2}{c}{A} &
\multicolumn{2}{c}{B} &
\multicolumn{2}{c|}{C} \\
& O.B.R & A.R & O.B.R & A.R & O.B.R & A.R \\
\hline
D1 & 2.1\% & 2.1\% & 2.1\% & 2.1\% & 2.1\% & 2.1\% \\
\hline
D2 & 11.6\% & 11.6\% & 11.6\% & 11.6\% & 11.6\% & 11.6\% \\
\hline
D3 & 5.5\% & 5.5\% & 5.5\% & 5.5\% & 5.5\% & 5.5\% \\
\hline
\end{tabular}
\end{table}
\end{document}
现在我如何显示标题 A、B、C 周围的边框?
答案1
我不会采用视觉上不美观且过时的表格设计,其中包含大量垂直和水平线,而是采用更加开放的设计或“外观”,其特点是 (a) 完全没有垂直线,并且 (b) 水平线较少但间距适当。为了实现这种外观,加载包booktabs
并使用其宏\toprule
、\midrule
、\cmidrule
和会有所帮助\bottomrule
。
以下屏幕截图将“关闭”(“监狱窗口”)和“打开”的外观与一对“之前”和“之后”表格进行比较和对比。(“之前”表格修复了您在查询中发现的格式问题,并且还提供了指令\cline
。)
\documentclass{article}
\usepackage{booktabs,multirow}
\begin{document}
\begin{table}
\centering
\caption{Before\strut}
\begin{tabular}{|l|l|l|l|l|l|l|}
\hline
\multirow{2}{*}{Dataset} &
\multicolumn{2}{c|}{A} &
\multicolumn{2}{c|}{B} &
\multicolumn{2}{c|}{C} \\
\cline{2-7}
& O.B.R & A.R & O.B.R & A.R & O.B.R & A.R \\
\hline
D1 & 2.1\% & 2.1\% & 2.1\% & 2.1\% & 2.1\% & 2.1\% \\
\hline
D2 & 11.6\% & 11.6\% & 11.6\% & 11.6\% & 11.6\% & 11.6\% \\
\hline
D3 & 5.5\% & 5.5\% & 5.5\% & 5.5\% & 5.5\% & 5.5\% \\
\hline
\end{tabular}
\bigskip
\caption{After\strut}
\begin{tabular}{@{} l *{6}{r} @{}}
\toprule
Dataset &
\multicolumn{2}{c}{A} &
\multicolumn{2}{c}{B} &
\multicolumn{2}{c@{}}{C} \\
\cmidrule(lr){2-3} \cmidrule(lr){4-5} \cmidrule(l){6-7}
& O.B.R & A.R & O.B.R & A.R & O.B.R & A.R \\
\midrule
D1 & 2.1\% & 2.1\% & 2.1\% & 2.1\% & 2.1\% & 2.1\% \\
D2 & 11.6\% & 11.6\% & 11.6\% & 11.6\% & 11.6\% & 11.6\% \\
D3 & 5.5\% & 5.5\% & 5.5\% & 5.5\% & 5.5\% & 5.5\% \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
附录回答 OP 关于允许在标题单元格中换行的后续问题:有几种方法可以实现此目标。我能想到的最简单的方法是使用环境tabularx
并使用(居中版本的)列类型作为 6 个标题单元格。对于数据单元格,我建议在小数点标记上对齐。这反过来可以通过包及其列类型X
来实现。当然,我仍然会选择开放和诱人的“外观”。dcolumn
D
\documentclass{article}
\usepackage{booktabs,tabularx,ragged2e,dcolumn}
\newcolumntype{d}[1]{D..{#1}} % align numbers on decimal markers
\newcolumntype{C}{>{\Centering}X} % centered version of 'X' col. type
\newcommand\mC[1]{\multicolumn{1}{C}{#1}} % handy shortcut macro
\begin{document}
\begin{table}
\caption{Line-breaking allowed in header cells\strut}
\begin{tabularx}{\textwidth}{@{} l *{6}{d{2.2}} @{}}
\toprule
Dataset &
\multicolumn{2}{c}{A} & \multicolumn{2}{c}{B} &
\multicolumn{2}{c@{}}{C} \\
\cmidrule(lr){2-3} \cmidrule(lr){4-5} \cmidrule(l){6-7}
& \mC{O.B.R} & \mC{A.R} & \mC{O.B.R} & \mC{A.R}
& \mC{O.B.R} & \multicolumn{1}{C@{}}{A.R} \\
\midrule
D1 & 2.1\% & 2.1\% & 2.1\% & 2.1\% & 2.1\% & 2.1\% \\
D2 & 11.6\% & 11.6\% & 11.6\% & 11.6\% & 11.6\% & 11.6\% \\
D3 & 5.5\% & 5.5\% & 5.5\% & 5.5\% & 5.5\% & 5.5\% \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
答案2
这里有一个经过改进的解决方案:数字与列类型在小数点上对齐S
,来自siunitx
:
\documentclass{article}
\usepackage{multirow}
\usepackage{siunitx}
\begin{document}
\begin{table}
\sisetup{table-format=2.1, table-space-text-post= \%}
\setlength{\extrarowheight}{2pt}
\begin{tabular}{|c|*{6}{S|}}
\hline
\multirow{2}{*}{Dataset} &
\multicolumn{2}{c|}{A} &
\multicolumn{2}{c|}{B} &
\multicolumn{2}{c|}{C} \\
\cline{2-7}
& {O.B.R} & {A.R} & {O.B.R} & {A.R} & {O.B.R} & {A.R} \\
\hline
D1 & 2.1\% & 2.1\% & 2.1\% & 2.1\% & 2.1\% & 2.1\% \\
\hline
D2 & 11.6\% & 11.6\% & 11.6\% & 11.6\% & 11.6\% & 11.6\% \\
\hline
D3 & 5.5\% & 5.5\% & 5.5\% & 5.5\% & 5.5\% & 5.5\% \\
\hline
\end{tabular}
\end{table}
\end{document}
答案3
在{NiceTabular}
中nicematrix
,您可以按键hvlines
绘制块中除此以外的所有规则……并且块(合并单元格的矩形)是使用命令创建的\Block
(水平和垂直)。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\begin{table}
\setlength{\extrarowheight}{2pt}
\begin{NiceTabular}{c*{6}{r}}[hvlines]
\Block{2-1}{Dataset} &
\Block{1-2}{A} & &
\Block{1-2}{B} & &
\Block{1-2}{C} \\
& {O.B.R} & \Block[c]{1-1}{A.R} & {O.B.R} & \Block[c]{1-1}{A.R} & {O.B.R} & \Block[c]{1-1}{A.R} \\
D1 & 2.1 \%& 2.1 \%& 2.1 \%& 2.1 \%& 2.1 \%& 2.1 \%\\
D2 & 11.6 \%& 11.6 \%& 11.6 \%& 11.6 \%& 11.6 \%& 11.6 \%\\
D3 & 5.5 \%& 5.5 \%& 5.5 \%& 5.5 \%& 5.5 \%& 5.5 \%\\
\end{NiceTabular}
\end{table}
\end{document}