带有括号、文本、小数和整数的表格中的数字对齐和间距

带有括号、文本、小数和整数的表格中的数字对齐和间距

我在表格环境中将不同格式和文本的数字对齐时遇到了很多麻烦。经过大量研究,我只能得到以下结果:

在此处输入图片描述

X 到 Z 行和 Fstat 未正确居中(我尝试过 table-number-alignment=center,但没有成功)。此外,每列的空间不均等,CC 列中的星号已超出表格范围。我该如何解决这些问题?

我的代码发布如下。请注意,它们目前已设置为我的估算按小数对齐,并且括号正确显示(这也是我想要的)。

先感谢您!

\documentclass[12pt,letterpaper,fleqn]{article}

\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{parse-numbers=false}

\begin{document}

\begin{table}[h]
\centering\small
\begin{tabular}{l *{5}S[table-format=-1.3]}
\midrule\midrule
& \multicolumn{1}{c}{AA} & \multicolumn{1}{c}{AA} & \multicolumn{1}{c}{AA} & \multicolumn{1}{c}{BB} & \multicolumn{1}{c}{CC} \\
& \multicolumn{1}{c}{(1)} & \multicolumn{1}{c}{(2)} & \multicolumn{1}{c}{(3)} & \multicolumn{1}{c}{(4)} & \multicolumn{1}{c}{(5)} \\
\midrule
X & -0.333^{***} & -0.222^{***} & -0.776^{***} & -0.333^{***} & -0.662^{***} \\ 
  & (0.003) & (0.002) & (0.026) & (0.048) & (0.001) \\ 
Y & & -0.004 & & \\ 
  & & (0.008) & & \\ 
Z & 0.111 & 0.122 & 0.123 & 0.122 & 0.133 \\ 

Obs & \multicolumn{1}{c}{$55,000$} & \multicolumn{1}{c}{$56,000$} & \multicolumn{1}{c}{$56,000$} & \multicolumn{1}{c}{$56,000$} & \multicolumn{1}{c}{$56,000$} \\ 
FE & & & \multicolumn{1}{c}{Yes} & \multicolumn{1}{c}{Yes} & \multicolumn{1}{c}{Yes} \\
Fstat & & 0.225 & 0.221 & 0.222 & 0.220 \\
\midrule\midrule
\end{tabular}
\end{table}


\end{document}

答案1

您需要使用括号括住所有重复的列说明符:*{5}{S[...]}不要*{5}S[...]将选项应用于每一列。这导致的答案看起来非常类似于Mico 的

\documentclass[12pt,letterpaper,fleqn]{article}

\usepackage{booktabs}
\usepackage{siunitx}
\sisetup{parse-numbers = false}

\begin{document}

\begin{table}[h]
\centering
\begin{tabular}{@{}l *{5}{S[table-format = +1.5]}@{}}
\toprule
& \multicolumn{1}{c}{AA} & \multicolumn{1}{c}{AA} & \multicolumn{1}{c}{AA} & \multicolumn{1}{c}{BB} & \multicolumn{1}{c}{CC} \\
& \multicolumn{1}{c}{(1)} & \multicolumn{1}{c}{(2)} & \multicolumn{1}{c}{(3)} & \multicolumn{1}{c}{(4)} & \multicolumn{1}{c}{(5)} \\
\midrule
X & -0.333^{***} & -0.222^{***} & -0.776^{***} & -0.333^{***} & -0.662^{***} \\ 
  & (0.003) & (0.002) & (0.026) & (0.048) & (0.001) \\ 
Y & & -0.004 & & \\ 
  & & (0.008) & & \\ 
Z & 0.111 & 0.122 & 0.123 & 0.122 & 0.133 \\ 

Obs & \multicolumn{1}{c}{$55,000$} & \multicolumn{1}{c}{$56,000$} & \multicolumn{1}{c}{$56,000$} & \multicolumn{1}{c}{$56,000$} & \multicolumn{1}{c}{$56,000$} \\ 
FE & & & \multicolumn{1}{c}{Yes} & \multicolumn{1}{c}{Yes} & \multicolumn{1}{c}{Yes} \\
Fstat & & 0.225 & 0.221 & 0.222 & 0.220 \\
\bottomrule
\end{tabular}
\end{table}

\end{document}

parse-numbers = false设置时,siunitx使用与对齐相同的方法dcolumn。因此主要问题是确保它知道要留出多少位数字的空间。)

答案2

在您的测试文档中,该包的唯一用途siunitx似乎是其S列类型,用于将列中的数字按小数点对齐。(否则,为什么要发出指令\sisetup{parse-numbers=false}?)如果是这种情况,您可以通过使用该包大大简化文档设置dcolumn,该包的唯一工作是 - 您猜对了 - 帮助将列中的数字按小数点对齐。

哦,请使用\toprule\bottomrule代替\midrule\midrule

在此处输入图片描述

\documentclass[12pt,letterpaper,fleqn]{article}
\usepackage{booktabs}

\usepackage{dcolumn}
\newcolumntype{d}[1]{D..{#1}}

\newcommand\mc[1]{\multicolumn{1}{c}{#1}} % handy shortcut macro
\begin{document}

\begin{table}[h]
\centering  %\small  % "\small" doesn't seem necessary
\begin{tabular}{@{} l *{5}{d{2.5}} @{}}
\toprule
& \mc{AA}  & \mc{AA}  & \mc{AA}  & \mc{BB}  & \mc{CC} \\
& \mc{(1)} & \mc{(2)} & \mc{(3)} & \mc{(4)} & \mc{(5)} \\
\midrule
X & -0.333^{***} & -0.222^{***} & -0.776^{***} & -0.333^{***} & -0.662^{***} \\ 
  & (0.003) & (0.002) & (0.026) & (0.048) & (0.001) \\ 
Y & & -0.004  & & \\ 
  & & (0.008) & & \\ 
Z & 0.111 & 0.122 & 0.123 & 0.122 & 0.133 \\ 

Obs & \mc{$55{,}000$} & \mc{$56{,}000$} & \mc{$56{,}000$} & \mc{$56{,}000$} & \mc{$56{,}000$} \\ 
FE & & & \mc{Yes} & \mc{Yes} & \mc{Yes} \\
F-stat & & 0.225 & 0.221 & 0.222 & 0.220 \\
\bottomrule
\end{tabular}
\end{table}

\end{document}

答案3

不同的siunitx实现:底部的数字不需要在小数点处对齐。

\documentclass[12pt,letterpaper,fleqn]{article}

\usepackage{booktabs}
\usepackage{siunitx}

\NewDocumentCommand{\snote}{sm}{%
  \IfBooleanTF{#1}
    {\ensuremath{^{#2}}}
    {\makebox[0pt][l]{$^{#2}$}}%
}

\begin{document}

\begin{table}[h]
\centering

\sisetup{
  table-align-text-post=false,
  table-space-text-pre={x(},
  table-space-text-post={)x},
  input-symbols={()},
  group-separator={,},
}
\setlength{\tabcolsep}{0pt}

\begin{tabular*}{\textwidth}{
  @{\extracolsep{\fill}}
  l
  *{5}{S[table-format = -2.4]}
%  @{\quad}
}
\toprule
& {AA} & {AA} & {AA} & {BB} & {CC} \\
& {(1)} & {(2)} & {(3)} & {(4)} & {(5)} \\
\midrule
X & -0.333\snote{***} & -0.222\snote{***} & -0.776\snote{***} & -0.333\snote{***} & -0.662\snote{***} \\ 
  & (0.003) & (0.002) & (0.026) & (0.048) & (0.001) \\ 
Y & & -0.004 & & \\ 
  & & (0.008) & & \\ 
Z & 0.111 & 0.122 & 0.123 & 0.122 & 0.133 \\ 
\midrule
Obs & \num{55000} & \num{56000} & \num{56000} & \num{56000} & \num{56000} \\ 
FE & & & {Yes} & {Yes} & {Yes} \\
Fstat & & \num{0.225} & \num{0.221} & \num{0.222} & \num{0.220} \\
\bottomrule
\end{tabular*}

\end{table}

\end{document}

用于\snote{...}获取零空间,\snote*{...}以获得自然宽度。

在此处输入图片描述

相关内容