我在表格环境中将不同格式和文本的数字对齐时遇到了很多麻烦。经过大量研究,我只能得到以下结果:
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*{...}
以获得自然宽度。