我有一张表格,其中第二列(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}
其结果为:
@{(}
用 替换列之间的默认间距(
。