我对 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
\cline
booktabs
\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}
笔记:如果您不想缩写“观察”,您应该考虑重新组织表格并交换行和列。