如何在表格的多列和多行单元格中显示边框?

如何在表格的多列和多行单元格中显示边框?

我正在使用代码,

\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来实现。当然,我仍然会选择开放和诱人的“外观”。dcolumnD

在此处输入图片描述

\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} 

上述代码的输出

相关内容