tabularx/siunitx 表:整数列未正确对齐

tabularx/siunitx 表:整数列未正确对齐

我改编了最近在 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}

当表格呈现时,我们会看到:

  1. 标题为 n 的列(包含整数)是右对齐的,而不是按小数点对齐。

  2. AGE 和 BDI 标题下的子标题平均值和标准差稍微向左移动。

我看了一篇类似的 t.SE 帖子:

如何让 siunitx 正确地将整数列置于中心

但那里的建议并没有改善我的表格对齐。

昨天我花了点时间尝试调整表格以解决这些问题,但并没有真正解决它们。这很可能是我对 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*}

在此处输入图片描述

相关内容