如何使用 booktabs 手动制作表格

如何使用 booktabs 手动制作表格

我对 LaTex 的使用还很陌生,希望有人能帮我使用booktabs格式化功能制作这张表格。我使用R并希望使用xtables包来生成它。但是,我无法处理列跨度问题。

这就是我尝试手动插入\multicolumn命令的原因。

以下是代码:

\documentclass{article}

\usepackage{booktabs}
\usepackage{multirow}
\begin{document}


 \begin{table}[ht]
\centering
\begin{tabular}{@{\extracolsep{4pt}}llccccccc}
\toprule   
{} & {} & {Observations} & \multicolumn{3}{c}{Median}  & \multicolumn{3}{c}{SD}\\
 \cline{3-3} 
 \cline{4-6} 
 \cline{7-9} 
 Year & Group & N & V1 & V2 & V3 & V1 & V2 & V3 \\ 
   \hline
   \multirow{2}{*}{2012}
  & Control & 2 & 0.052 & 0.294 & 0.115 & 0.304 & 0.619 & 0.611 \\ 
  & Treat & 2 & 0.511 & 0.083 & 0.123 & 0.573 & 0.541 & 0.734 \\ 
  \multirow{2}{*}{2016}
  & Control & 3 & 0.320 & 0.344 & 0.382 & 0.382 & 0.494 & 0.477 \\ 
  & Treat & 3 & 0.378 & 0.296 & 0.123 & 0.386 & 0.668 & 0.732 \\ 
 \hline
\end{tabular}
\caption{Mean by Year and Group} 
\end{table}
\end{document}

但是,我觉得这个表格的格式不太好,不符合booktabs标准,是吗?如何手动制作一个具有相同设计但格式更好的表格?

谢谢

答案1

该表的主要问题在于您没有使用规则,而是使用了标准表格规则(和)和规则( )booktabs的混合。\hline\clinebooktabs\toprule

booktabs用版本(\midrule\cmidrule和)替换这些规则\bottomrule可以获得所需的良好格式。

我删除了这些multirow东西。这不会给您的表格添加任何内容;只需将年份放在该年份的行对的第一行就非常清楚了。一般来说,我会完全避免使用multirow。它有其用途,但通常用于具有方框单元格的表格。对于标准研究表格来说,它几乎从来都不合适。

PS 我希望数据是编造的!你的 N 真的很小……:)

\documentclass{article}

\usepackage{booktabs}
\begin{document}


 \begin{table}[ht]
\centering
\begin{tabular}{@{\extracolsep{4pt}}llccccccc}
\toprule   
{} & {} & {Observations} & \multicolumn{3}{c}{Median}  & \multicolumn{3}{c}{SD}\\
 \cmidrule{3-3} 
 \cmidrule{4-6} 
 \cmidrule{7-9} 
 Year & Group & N & V1 & V2 & V3 & V1 & V2 & V3 \\ 
\midrule
2012  & Control & 2 & 0.052 & 0.294 & 0.115 & 0.304 & 0.619 & 0.611 \\ 
  & Treat & 2 & 0.511 & 0.083 & 0.123 & 0.573 & 0.541 & 0.734 \\ 
2016  & Control & 3 & 0.320 & 0.344 & 0.382 & 0.382 & 0.494 & 0.477 \\ 
  & Treat & 3 & 0.378 & 0.296 & 0.123 & 0.386 & 0.668 & 0.732 \\ 
\bottomrule
\end{tabular}
\caption{Mean by Year and Group} 
\end{table}
\end{document}

代码输出

关于排版数值数据的一些评论

在排版数字数据时,使用c列类型确实不是最佳方案。通常我们希望数字数据以某种方式对齐,这样如果数字大小不同,它们就可以正确排列。

对于小数数据,小数点对齐是正常的。对于非小数数据,简单的右对齐就可以了。

要对齐小数点,您可以使用siunitx包或dcolumn包。siunitx它具有许多自动格式化数字数据的奇特功能,包括对大数字进行数字分组。它还提供了正确排版 SI 单位的方法。该dcolumn包专为小数点对齐而设计。下面是一个示例来向您展示差异。

\documentclass{article}
\usepackage{booktabs}
\usepackage{dcolumn}
\usepackage{siunitx}

% Shorthand for multicolumn
\newcommand\mc[1]{\multicolumn{1}{c}{#1}}
\begin{document}
\begin{tabular}{ccrD{.}{.}{2.3}S}
\toprule
Center & Center & \mc{right} & \mc{D-column} & \mc{S-column}  \\
\midrule
1 & 32.6 & 1 & 32.6 & 32.6  \\
10 & 335.434 & 10 & 335.434 & 335.434  \\
100 & 0.99 & 100 & 0.99 & 0.99  \\
5 & 1 & 5 & 1 & 1  \\
\bottomrule
\end{tabular}
\end{document}

样本输出

答案2

首先,您的所有规则都应该用完成booktabs,因为它会给您的表格规则添加一些填充(基本乳胶中的表格行通常太紧)。

其次,表格标题应该多于表格,因为表格可能会跨页,读者不必翻页就能知道表格的内容。为此,标题很有用,当标题在表格上方时,package基本 Latex 会忘记交换\abovecaptionskip和的值。\belowdisplayskip

第三,我会Observations用缩写来代替,因为我发现如果列头这么宽,那么单个数字的列会很难看。

第四,我将为表格末尾的两组 3 列设置较小的列间距。此外,(lr)`\cmidrules 参数在这里很有用,可以改善表格的整体外观。

\documentclass{article}
\usepackage{array, multirow, caption, booktabs}

\begin{document}

 \begin{table}[ht]
\centering\setlength\extrarowheight{2pt}
\caption{Mean by Year and Group}
\begin{tabular}{@{\extracolsep{4pt}}llc*{2}{c@{\enspace}c@{\enspace}c}}
\toprule
{} & {} & {Obsv\textsuperscript{ns}} & \multicolumn{3}{c}{Median} & \multicolumn{3}{c}{SD}\\
 \cmidrule(lr){3-3}
 \cmidrule{4-6}
 \cmidrule(lr){7-9}
 Year & Group & N & V1 & V2 & V3 & V1 & V2 & V3 \\
   \midrule
   \multirow{2}{*}{2012}
  & Control & 2 & 0.052 & 0.294 & 0.115 & 0.304 & 0.619 & 0.611 \\
  & Treat & 2 & 0.511 & 0.083 & 0.123 & 0.573 & 0.541 & 0.734 \\
\addlinespace
  \multirow{2}{*}{2016}
  & Control & 3 & 0.320 & 0.344 & 0.382 & 0.382 & 0.494 & 0.477 \\
  & Treat & 3 & 0.378 & 0.296 & 0.123 & 0.386 & 0.668 & 0.732 \\
 \bottomrule
\end{tabular}
\end{table}

\end{document} 

在此处输入图片描述

笔记:如果您不想缩写“观察”,您应该考虑重新组织表格并交换行和列。

相关内容