我创建了下表,其中包含数字和星号。
现在我想按小数点对齐数字。我包含了包dcolumn
并定义了一种新的列类型:\newcolumntype{d}[1]{D{.}{.}{#1}}
。
然后我替换了{ccccc}
并{d{2.0}d{1.2}d{2.2}d{2.3}d{1.2}}
最终得到了以下代码:
\documentclass{article}
%tables
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{dcolumn} %align numbers by decimal point
\newcolumntype{d}[1]{D{.}{.}{#1}}
\begin{document}
\begin{longtable}[]{d{2.0}d{1.2}d{2.2}d{2.3}d{1.2}}
\caption{} \label{}\\
\toprule
\textbf{ Item } & \textbf{ \textit{b} } & \textbf{ \textit{t} } & \textbf{ \textit{F} } & \textbf{ \textit{R$^2$} }\\
\midrule
\endfirsthead
\toprule
\textbf{ Item } & \textbf{ \textit{b} } & \textbf{ \textit{t} } & \textbf{ \textit{F} } & \textbf{ \textit{R$^2$} }\\
\midrule
\endhead
\bottomrule
\endfoot
\endlastfoot
1 & -1.45$^{***}$ & -7.44$^{***}$ & 55.34 & .18 \\
11 & -.86$^{*}$ & -2.09$^{*}$ & 4.36 & .01 \\
12 & -1.79$^{***}$ & -3.80$^{***}$ & 14.47 & .05 \\
13 & -.56 & -1.34 & 1.80 & .00 \\
61 & -1.79$^{***}$ & -5.85$^{***}$ & 34.20 & .12 \\
62 & -1.00$^{**}$ & -3.17$^{**}$ & 10.05 & .04 \\
63 & -.27 & -.65 & .43 & .00 \\
64 & -.37 & -.97 & .94 & .00 \\
65 & -.34 & -.85 & .73 & .00 \\
66 & 1.05$^{**}$ & 2.70$^{**}$ & 7.30 & .02 \\
67 & -1.12$^{**}$ & -2.90$^{**}$ & 8.40 & .03 \\
72 & -.41 & -1.20 & 1.43 & .00 \\
73 & -.27 & -.82 & .67 & .00 \\
74 & 2.05$^{***}$ & 4.99$^{***}$ & 24.88 & .09 \\
75 & 1.61$^{***}$ & 4.41$^{***}$ & 19.46 & .07 \\
76 & .29 & .91 & .83 & .00 \\
\bottomrule
\end{longtable}
\end{document}
但是当我运行代码时出现以下错误:
! Missing $ inserted.
<inserted text>
$
l.24 1 & -1.45$^
{***}$ & -7.44$^{***}$ & 55.34 & .18 \\
显然dcolumns
不喜欢星号的数学代码。我遗漏了什么?有没有更好的方法来添加星号?
我也尝试过siunitx
,但遇到了更多麻烦(例如,它还将数字格式化为 .00 -> 0.00,并且列标题未正确居中)。我想这个包对于我的用例来说有点过于强大了。
答案1
方法siunitx
如下
\documentclass{article}
%tables
\usepackage{booktabs}
\usepackage{longtable}
\usepackage{siunitx} %align numbers by decimal point
\begin{document}
\sisetup{table-format = -1.2}
\begin{longtable}[]{S[table-format=2.0]SSSS[table-format = 0.2]}
\caption{} \label{}\\
\toprule
{\textbf{Item}} & {\textbf{\textit{b}}} & {\textbf{\textit{t}}} & {\textbf{\textit{F}}} & {\textbf{\textit{R$^2$}}}\\
\midrule
\endfirsthead
\toprule
{\textbf{Item}} & {\textbf{\textit{b}}} & {\textbf{\textit{t}}} & {\textbf{\textit{F}}} & {\textbf{\textit{R$^2$}}}\\
\midrule
\endhead
\bottomrule
\endfoot
\endlastfoot
1 & -1.45{$^{***}$} & -7.44{$^{***}$} & 55.34 & .18 \\
11 & -.86{$^{*}$} & -2.09{$^{*}$} & 4.36 & .01 \\
12 & -1.79{$^{***}$} & -3.80{$^{***}$} & 14.47 & .05 \\
13 & -.56 & -1.34 & 1.80 & .00 \\
61 & -1.79{$^{***}$} & -5.85{$^{***}$} & 34.20 & .12 \\
62 & -1.00{$^{**}$} & -3.17{$^{**}$} & 10.05 & .04 \\
63 & -.27 & -.65 & .43 & .00 \\
64 & -.37 & -.97 & .94 & .00 \\
65 & -.34 & -.85 & .73 & .00 \\
66 & 1.05{$^{**}$} & 2.70{$^{**}$} & 7.30 & .02 \\
67 & -1.12{$^{**}$} & -2.90{$^{**}$} & 8.40 & .03 \\
72 & -.41 & -1.20 & 1.43 & .00 \\
73 & -.27 & -.82 & .67 & .00 \\
74 & 2.05{$^{***}$} & 4.99{$^{***}$} & 24.88 & .09 \\
75 & 1.61{$^{***}$} & 4.41{$^{***}$} & 19.46 & .07 \\
76 & .29 & .91 & .83 & .00 \\
\bottomrule
\end{longtable}
\end{document}
这需要对表中的数据定位进行一些修改,并适当应用选项table-format
。如果您希望最后一列不添加前导零,请设置add-integer-zero = false
。
答案2
该dcolumn
包已经使用数学模式来排版其数字。这将为您提供正确的减号等。因此,$
上标实际上被解释为离开数学模式。
我建议按照以下方式修复该文档:
去掉
$
星星周围的所有东西,例如1 & -1.45^{***} & -7.44^{***} & 55.34 & .18 \\
在空间计算中将星星视为数字:
\begin{longtable}[]{d{2.0}d{2.5}d{2.5}d{2.2}d{0.2}}
用于
multicolumn
为您的标题指定不同的格式:\multicolumn{1}{c}{\textbf{Item}} & \multicolumn{1}{c}{\textbf{b}} & \multicolumn{1}{c}{\textbf{t}} & \multicolumn{1}{c}{\textbf{F}} & \multicolumn{1}{c}{\textbf{R$^2$}} \\
结果如下:
答案3
你可以把所有的星星放在一个\mbox{...}
:
...
1 & -1.45\mbox{$^{***}$} & -7.44\mbox{$^{***}$} & 55.34 & .18 \\
11 & -.86\mbox{$^{*}$} & -2.09\mbox{$^{*}$} & 4.36 & .01 \\
12 & -1.79\mbox{$^{***}$} & -3.80\mbox{$^{***}$} & 14.47 & .05 \\
13 & -.56 & -1.34 & 1.80 & .00 \\
61 & -1.79\mbox{$^{***}$} & -5.85\mbox{$^{***}$} & 34.20 & .12 \\
62 & -1.00\mbox{$^{**}$} & -3.17\mbox{$^{**}$} & 10.05 & .04 \\
63 & -.27 & -.65 & .43 & .00 \\
64 & -.37 & -.97 & .94 & .00 \\
65 & -.34 & -.85 & .73 & .00 \\
66 & 1.05\mbox{$^{**}$} & 2.70\mbox{$^{**}$} & 7.30 & .02 \\
67 & -1.12\mbox{$^{**}$} & -2.90\mbox{$^{**}$} & 8.40 & .03 \\
72 & -.41 & -1.20 & 1.43 & .00 \\
73 & -.27 & -.82 & .67 & .00 \\
74 & 2.05\mbox{$^{***}$} & 4.99\mbox{$^{***}$} & 24.88 & .09 \\
75 & 1.61\mbox{$^{***}$} & 4.41\mbox{$^{***}$} & 19.46 & .07 \\
76 & .29 & .91 & .83 & .00 \\
...
但是,列宽是根据列规范来保持的d{X.Y}
。因此,你会发现星号与相邻的列重叠:
因此,您可以通过修改标题列来纠正这个问题:
\multicolumn{1}{c}{\textbf{Item}} &
\multicolumn{1}{p{4em}}{\centering\textbf{\textit{b}}} &
\multicolumn{1}{p{4em}}{\centering\textbf{\textit{t}}} &
\multicolumn{1}{c}{\textbf{\textit{F}}} &
\multicolumn{1}{c}{\textbf{\textit{R$^2$}}} \\
这是最终的输出:
答案4
有类似的需求,需要将比值比与小数点处的星号对齐 + 括号中的标准误差。siunitx
似乎效果最好。
我有很多这样的表格,因此,我正在寻找一种解决方案,可以一次性处理所有星号,而不是一个接一个地处理。
我是一个新手,不得不花几个小时在这上面,所以我希望这可以为别人节省时间:
\documentclass{article}
\usepackage{siunitx}% align by decimal, asterisks and parentheses
\sisetup{
input-symbols=(),
group-digits=false,
table-align-text-post=false,
explicit-sign
}
\begin{document}
\begin{table}[ht]
\begin{tabular}
{l % column with left aligned cells
*{2}{S[table-format = 1.5]}}% 2 columns, formatted with 1 digit before "."
% and 5 digits after "." space for ***.
\hline
\multicolumn{1}{c}{Variables}&
\multicolumn{1}{c}{Model 1}&
\multicolumn{1}{c}{Model 2} \\
\hline
Var$1$ & 1.45*** & 1.44 \\
& (0.01) & (0.81) \\
Var$2$ & 111.79*** & 3.80** \\
& (0.74) & (0.08) \\
\hline
\multicolumn{3}{l}{ ***p$<$0.01, **p$<$0.05} \\
\end{tabular}
\end{table}
\end{document}