使用 siunitx 固定列宽并按小数对齐

使用 siunitx 固定列宽并按小数对齐

我有以下KableExtra使用 中的包生成的 Latex 表R。我现在要做的是使所有列具有相同/固定宽度并按小数对齐。第二个不支持,KableExtra因此我需要直接在 Latex 中执行此操作。该siunitx包似乎是此操作的不错选择,但我无法让它工作。

\documentclass[12pt,a4paper]{article}
\usepackage{geometry}
\usepackage{amsmath}
\usepackage{booktabs}
\usepackage{float}
\usepackage{siunitx}
\begin{document}

\begin{table}[H]
    \centering
    \begin{tabular}{ccccccccc}
        \toprule
        \multicolumn{1}{c}{ } & \multicolumn{4}{c}{Cumulative change} & \multicolumn{4}{c}{Marginal change} \\
        \cmidrule(lr){2-5} \cmidrule(lr){6-9}
        ${k}$ & ${(Cons.)}$ & ${Spread_t}$ & ${\overline{R}^2}$ & ${SEE}$ & ${(Cons.)}$ & ${Spread_t}$ & ${\overline{R}^2}$ & ${SEE}$\\
        \midrule
        $1$ & $1.76^{**}$ & $2.09^{**}$ & $0.18$ & $4.05$ & $1.76^{**}$ & $2.09^{**}$ & $0.18$ & $4.05$\\
        & $(0.56)$ & $(0.40)$ &  &  & $(0.56)$ & $(0.40)$ &  & \\
        $2$ & $1.73^{**}$ & $2.06^{**}$ & $0.28$ & $3.02$ & $1.78^{**}$ & $2.06^{**}$ & $0.17$ & $4.06$\\
        & $(0.39)$ & $(0.29)$ &  &  & $(0.52)$ & $(0.39)$ &  & \\
        $8$ & $2.65^{**}$ & $0.96^{**}$ & $0.18$ & $1.70$ & $ 4.21^{**}$ & $-0.59 $ & $0.00$ & $4.45$\\
        & $(0.26)$ & $(0.16)$ &  &  & $(0.64)$ & $(0.53)$ &  & \\
        $12$ & $3.31^{**}$ & $0.35^{*}$ & $0.04$ & $1.39$ & $ 4.52^{**}$ & $-0.93^{**}$ & $0.07$ & $2.66$\\
        & $(0.19)$ & $(0.14)$ &  &  & $(0.32)$ & $(0.30)$ &  & \\
        \bottomrule
        \multicolumn{9}{l}{\textit{Note: }}\\
        \multicolumn{9}{l}{Robust standard errors in parentheses.}\\
        \multicolumn{9}{l}{$^{*}$ $p < 0.05$, $^{**}$ $p < 0.01$ in a two-tailed test.}\\
    \end{tabular}
\end{table}

\end{document}

我尝试使用 来实现固定列宽*{9}{S[table-column-width = 2 cm],但是这给了我很多“!额外的},或忘记了$。”类型的错误。

为了对齐,我尝试做出一些事情以及其他答案和siunutx手册,但我遇到了一大堆错误和问题,例如我的重要星号消失了等等。我想将所有列居中,但按小数点对齐。前几列应按隐式小数点对齐。

谢谢!

答案1

使用S包中的列类型siunitx

在此处输入图片描述

(红线表示文本边框)

我还将使用threepartablex包来更简单地编写表格注释(...\tnote{**}而不是$...^{**}$)。它还\notetablenotes环境提供了命令:

\documentclass[12pt,a4paper]{article}
\usepackage{geometry}
\usepackage{amsmath}
\usepackage{booktabs}
\usepackage[referable]{threeparttablex} % <--- for \note, \source
\usepackage{siunitx}

\begin{document}

\begin{table}[htb]
    \centering
\begin{threeparttable}
    \caption{Table title}
    \label{tab:statistic}
\begin{tabular*}{\linewidth}{@{\hskip\tabcolsep\extracolsep{\fill}}
                c *{8}{S[table-format=1.2,
                         input-symbols={( )},
                         table-space-text-post={**}
                        ]}}
        \toprule
\multicolumn{1}{c}{ }
        & \multicolumn{4}{c}{Cumulative change}
            & \multicolumn{4}{c}{Marginal change}               \\
    \cmidrule(lr){2-5} \cmidrule(lr){6-9}
${k}$   & {(Cons.)} & {Spread$_t$}  & {$\overline{R}^2$}& {SEE}
        & {(Cons.)} & {Spread$_t$}  & {$\overline{R}^2$}& {SEE} \\
    \midrule
1       & 1.76\tnote{**}    & 2.09\tnote{**}    & 0.18  & 4.05
        & 1.76\tnote{**}    & 2.09\tnote{**}    & 0.18  & 4.05  \\
        & (0.56)            & (0.40)            &       &
        & (0.56)            & (0.40)            &       &       \\
2       & 1.73\tnote{**}    & 2.06\tnote{**}    & 0.28  & 3.02
        & 1.78\tnote{**}    & 2.06\tnote{**}    & 0.17  & 4.06  \\
        & (0.39)            & (0.29)            &       &
        & (0.52)            & (0.39)            &       &       \\
    \bottomrule
\end{tabular*}
    \begin{tablenotes}[para, flushleft]\footnotesize
    \note:   Robust standard errors in parentheses.\\
    \item[*]    $p < 0.05$,
    \item[**]   $p < 0.01$ in a two-tailed test.
    \end{tablenotes}
\end{threeparttable}
\end{table}

\end{document}

编辑: 我错过了所有列应具有相同宽度的要求。例如,可以通过使用tabularx表格环境来实现,其中列标题使用\mcx序言中定义的命令:

\newcommand\mcx[2]{\multicolumn{1}{>{\centering\arraybackslash}X}{#1}}

在我看来,这个要求并不能产生更好看的表格:

在此处输入图片描述

\documentclass[12pt,a4paper]{article}
\usepackage{geometry}
\usepackage{amsmath}
\usepackage{booktabs, tabularx}
\newcommand\mcx[1]{\multicolumn{1}{>{\centering\arraybackslash}X}{#1}}
\usepackage[referable]{threeparttablex} 
\usepackage{siunitx}

\begin{document}

\begin{table}[htb]
    \centering
    \sisetup{table-format=1.2, input-symbols={( )}}
\begin{threeparttable}
    \caption{Table title}
    \label{tab:statistic}
\begin{tabularx}{\linewidth}{@{\hskip\tabcolsep\extracolsep{\fill}}
                 >{\centering\arraybackslash}X 
                    *{2}{S[table-space-text-post={**}]}
                    *{2}{S}
                    *{2}{S[table-space-text-post={**}]}
                    *{2}{S}
                            }
        \toprule
\multicolumn{1}{c}{ }
        & \multicolumn{4}{c}{Cumulative change}
            & \multicolumn{4}{c}{Marginal change}               \\
    \cmidrule(lr){2-5} \cmidrule(lr){6-9}
${k}$   & \mcx{(Cons.)}         & \mcx{Spread$_t$}  
            & \mcx{$\overline{R}^2$}    & {SEE}
                & \mcx{(Cons.)}             & \mcx{Spread$_t$}  
                    & \mcx{$\overline{R}^2$}    & \mcx{SEE}     \\
    \midrule
1       & 1.76\tnote{**}    & 2.09\tnote{**}    & 0.18  & 4.05
        & 1.76\tnote{**}    & 2.09\tnote{**}    & 0.18  & 4.05  \\
        & (0.56)            & (0.40)            &       &
        & (0.56)            & (0.40)            &       &       \\
2       & 1.73\tnote{**}    & 2.06\tnote{**}    & 0.28  & 3.02
        & 1.78\tnote{**}    & 2.06\tnote{**}    & 0.17  & 4.06  \\
        & (0.39)            & (0.29)            &       &
        & (0.52)            & (0.39)            &       &       \\
    \bottomrule
\end{tabularx}
    \begin{tablenotes}[para, flushleft]\footnotesize
    \note   Robust standard errors in parentheses.\\
    \item[*]    $p < 0.05$,
    \item[**]   $p < 0.01$ in a two-tailed test.
    \end{tablenotes}
\end{threeparttable}
\end{table}

\end{document}

相关内容