我改编了最近在 t.SE 上建议的表格格式,除了两个问题外,效果很好。MWE 如下。
\usepackage{array}
\usepackage{dcolumn}
\usepackage{tabularx}
\usepackage{booktabs}
\newcolumntype{d}[1]{D{.}{.}{#1}}
\usepackage{siunitx}
\begin{document}
\begin{table}
\begin{tabularx}{\textwidth}{p{2.5cm}X S[table-format=3,table-column-width=8mm]
*{6}{S[table-format=2.2,table-column-width=15mm]}
}
\toprule
\multicolumn{2}{c}{} &\multicolumn{2}{c}{AGE} & \multicolumn{2}{c}{BDI} & \multicolumn{2}{c}{STAIG} \\
\cmidrule(lr){3-4}\cmidrule(lr){5-6}\cmidrule(lr){7-8}
\multicolumn{1}{c}{GROUP} & \multicolumn{1}{c}{n} & \multicolumn{1}{c}{mean} & \multicolumn{1}{c}{sd} & \multicolumn{1}{c}{mean} & \multicolumn{1}{c}{sd} & \multicolumn{1}{c}{mean} & \multicolumn{1}{c}{sd} \\
\midrule
\addlinespace
\multicolumn{1}{c}{females} & \multicolumn{5}{c}{} \\
\addlinespace
\multicolumn{1}{c}{(NS)} & 97 & 46.22 & 11.83 & 20.82 & 10.93 & 55.27 & 11.42 \\
\multicolumn{1}{c}{(DW)} & 47 & 41.55 & 11.07 & 24.30 & 9.74 & 60.02 & 10.69 \\
\multicolumn{1}{c}{(SI)} & 124 & 39.53 & 11.73 & 27.21 & 9.77 & 60.77 & 8.64 \\
\multicolumn{1}{c}{(NVA)} & 58 & 40.44 & 11.72 & 25.90 & 11.88 & 58.55 & 11.50 \\
\multicolumn{1}{c}{(VA)} & 40 & 39.88 & 11.47 & 28.38 & 11.76 & 57.83 & 11.19 \\
\bottomrule
\end{tabularx}
\end{table}
当表格呈现时,我们会看到:
标题为 n 的列(包含整数)是右对齐的,而不是按小数点对齐。
AGE 和 BDI 标题下的子标题平均值和标准差稍微向左移动。
我看了一篇类似的 t.SE 帖子:
但那里的建议并没有改善我的表格对齐。
昨天我花了点时间尝试调整表格以解决这些问题,但并没有真正解决它们。这很可能是我对 tabularx 和 siunitx 的使用缺乏了解,但有人能建议解决方案吗?
编辑:编辑现有代码(参见egreg的回答)如下解决了空白问题。
\begin{tabular}{
>{\centering}c
S[table-format=3]
*{6}{S[table-format=2.2]}
答案1
你指定得过多了:说明列宽通常是不必要的;你也有p{2.5cm}X
这意味着二列说明符。
如果您希望第一列占据所有可用空间,请使用X
;来获取居中的条目>{\centering}X
。
\documentclass{article}
\usepackage{array}
\usepackage{tabularx}
\usepackage{booktabs}
\usepackage{siunitx}
\begin{document}
\begin{table}
\begin{tabularx}{\textwidth}{
>{\centering}X
S[table-format=3]
*{6}{S[table-format=2.2]}
}
\toprule
& & \multicolumn{2}{c}{AGE} & \multicolumn{2}{c}{BDI} & \multicolumn{2}{c}{STAIG} \\
\cmidrule(lr){3-4}\cmidrule(lr){5-6}\cmidrule(lr){7-8}
\multicolumn{1}{c}{GROUP} & $n$ & {mean} & {sd} & {mean} & {sd} & {mean} & {sd} \\
\midrule
\addlinespace
females & \\
\addlinespace
(NS) & 97 & 46.22 & 11.83 & 20.82 & 10.93 & 55.27 & 11.42 \\
(DW) & 47 & 41.55 & 11.07 & 24.30 & 9.74 & 60.02 & 10.69 \\
(SI) & 124 & 39.53 & 11.73 & 27.21 & 9.77 & 60.77 & 8.64 \\
(NVA) & 58 & 40.44 & 11.72 & 25.90 & 11.88 & 58.55 & 11.50 \\
(VA) & 40 & 39.88 & 11.47 & 28.38 & 11.76 & 57.83 & 11.19 \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}
同样,tabular
多余的空间位于表格之外:表格没有必要与页块一样宽。
\documentclass{article}
\usepackage{booktabs}
\usepackage{siunitx}
\usepackage{lipsum} % just for the example
\begin{document}
\lipsum[2]
\begin{table}[htp]
\centering
\caption{Some caption to the table}
\medskip
\begin{tabular}{
c
S[table-format=3]
*{6}{S[table-format=2.2]}
}
\toprule
& & \multicolumn{2}{c}{AGE} & \multicolumn{2}{c}{BDI} & \multicolumn{2}{c}{STAIG} \\
\cmidrule(lr){3-4}\cmidrule(lr){5-6}\cmidrule(lr){7-8}
\multicolumn{1}{c}{GROUP} & $n$ & {mean} & {sd} & {mean} & {sd} & {mean} & {sd} \\
\midrule
\addlinespace
females & \\
\addlinespace
(NS) & 97 & 46.22 & 11.83 & 20.82 & 10.93 & 55.27 & 11.42 \\
(DW) & 47 & 41.55 & 11.07 & 24.30 & 9.74 & 60.02 & 10.69 \\
(SI) & 124 & 39.53 & 11.73 & 27.21 & 9.77 & 60.77 & 8.64 \\
(NVA) & 58 & 40.44 & 11.72 & 25.90 & 11.88 & 58.55 & 11.50 \\
(VA) & 40 & 39.88 & 11.47 & 28.38 & 11.76 & 57.83 & 11.19 \\
\bottomrule
\end{tabular}
\end{table}
\lipsum[3]
\end{document}
这个tabular*
特定的表格看起来并不糟糕,但只是因为它的自然宽度并不比文本宽度短那么多。
\begin{tabular*}{\textwidth}{
@{\extracolsep{\fill}}
c
S[table-format=3]
*{6}{S[table-format=2.2]}
}
[...]
\end{tabular*}