siunitx 表小数位的不确定性

siunitx 表小数位的不确定性

我有一张表格,其中第二列(B)中的值表示为平均值,旁边的括号中是标准差,在同一列中:

\documentclass{article}

\usepackage{siunitx}

\begin{document}

\begin{tabular}{S[table-format=1]S[table-format=4(3.1)]} 
\hline
{A} & {B} \\
\hline
1 & 1176(156.7) \\
2 & 150(20.1) \\
3 & 456(11.1) \\
3 & 24(52.1) \\
\hline
\end{tabular}

\end{document}

当我运行这个时我得到:Package siunitx Error: Invalid number '4(3.1)'.

当我将其更改为时table-format=4(3),我得到:Package siunitx Error: Invalid number '1176(156.7)'.

当我将第一行更改为时1176(156),该值按预期打印,但我需要小数。

当我将第一行更改为时1176.0(156.1),它被打印为“1176.0(1561)”,这不是我想要的。

我怎样才能将平均值打印为整数,并将标准差打印在括号中并带有第一位小数?

我正在使用 siunitx 2021-07-26 v3.0.23

答案1

这是 中的一个错误siunitx,将在 v3.0.24 中修复。目前,请尝试

\ExplSyntaxOn
\cs_gset_protected:Npn \__siunitx_number_parse_uncert_marker:nNw
  #1#2#3 \q_recursion_tail \q_recursion_stop
  {
    \int_compare:nNnTF { \tl_count:n {#3} - 1 } = { \tl_count:n {#1} }
      {
        \str_if_eq:eeTF
          { \exp_not:V \l__siunitx_number_partial_tl }
          { \prg_replicate:nn { \tl_count:N \l__siunitx_number_partial_tl } { 0 } }
          {
            \__siunitx_number_parse_uncert:NNNN
              #2 \c_false_bool
          }
          {
            \__siunitx_number_parse_uncert:NNNN
              #2 \c_true_bool
          }
            \__siunitx_number_parse_uncert_auxii:NN
      }
      { \exp_after:wN \__siunitx_number_parse_uncert_marker_auxii:nnnN #2 #2 }
    #3 \q_recursion_tail \q_recursion_stop
  }
\cs_new_protected:Npn \__siunitx_number_parse_uncert_marker_auxii:nnnN #1#2#3#4
  {
    \tl_set:Nn #4 { {#1} {#2} { #3 0 } }
    \__siunitx_number_parse_uncert:NNNN #4 \c_true_bool
      \__siunitx_number_parse_uncert_auxii:NN
  }
\ExplSyntaxOff

答案2

按照该软件包的术语siunitx,括号中的数字被视为不确定性成分——绝对不是标准差。就手头的材料而言,看起来最好将标准差显示在与均值不同的列中,并相应地标记列标题,然后删除 std.dev 项周围的括号。

在此处输入图片描述

\documentclass{article}
\usepackage{siunitx}   % for 'S' column type
\usepackage{booktabs}  % replacements for "\hline"

\begin{document}
\begin{table}[ht!]
\caption{Descriptive statistics\strut} % provide a suitable caption
\centering
\begin{tabular}{ l S[table-format=4.0] S[table-format=3.1] } 
\toprule
Variable & {Mean} & {Std.Dev}\\
\midrule
1 & 1176 & 156.7 \\
2 & 150 & 20.1 \\
3 & 456 & 11.1 \\
4 & 24 & 52.1 \\
\bottomrule
\end{tabular}
\end{table}
\end{document}

答案3

根据@Mico的建议,我选择将标准差放在单独的列中。但是,为了保持我想要的样式,我做了以下事情:

\documentclass{article}

\usepackage{siunitx}

\begin{document}

\begin{tabular}{S[table-format=1] S[table-format=4.0] @{(} S[table-format=3.1] @{)}} 
\hline
{A} & \multicolumn{2}{c}{B} \\
\hline
1 & 1176 & 156.7 \\
2 & 150 & 20.1 \\
3 & 456 & 11.1 \\
3 & 24 & 52.1 \\
\hline
\end{tabular}

\end{document}

其结果为:

带有多列和括号的表格

@{(}用 替换列之间的默认间距(

相关内容