按小数点将表格中的数字与数字和星号对齐

按小数点将表格中的数字与数字和星号对齐

我创建了下表,其中包含数字和星号。

桌子

现在我想按小数点对齐数字。我包含了包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 & -1.45^{***} & -7.44^{***} & 55.34 & .18  \\
    
  2. 在空间计算中将星星视为数字:

    \begin{longtable}[]{d{2.0}d{2.5}d{2.5}d{2.2}d{0.2}}
    
  3. 用于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}。因此,你会发现星号与相邻的列重叠:

D 柱上有重叠的星号

因此,您可以通过修改标题列来纠正这个问题:

\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$}}} \\

这是最终的输出:

D 柱带星号,无重叠

答案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}

相关内容