siunitx,输入符号 = {(-)},四位数字组,组分隔符={,}

siunitx,输入符号 = {(-)},四位数字组,组分隔符={,}

请考虑以下 mwe:

\documentclass[margin=3mm]{standalone}
\usepackage{siunitx}
    \sisetup{input-symbols = {( - )},
             table-space-text-post=***,
             group-digits=integer,
             group-four-digits,
             group-separator={,}
             }

\begin{document}
\begin{tabular}{S[table-format=5.5]}
    \hline
  123.45678     \\
 1234.5678      \\
  (12.345)      \\
 (123.45)       \\
    \hline
\end{tabular}
\end{document}

这使:

在此处输入图片描述

如您所见,前三行的结果符合预期,但最后两行不应该出现逗号。我错过了什么还是这是错误?

编辑: 最新siunitx版本 v2.7n,最后修订于 2018-04-27(自 2018.05.03 开始​​可用miktex)包含软件包作者的修复约瑟夫·赖特在下面他的回答中给出了以下结果:

在此处输入图片描述

这次更新是朝着完整解决所提出问题迈出的重要一步。显然区分输入符号(和数字是一个(非常)困难的问题。

答案1

问题是,符号输入在内部被存储为\ensuremath{<thing>},看起来像字符间距。作为临时修复,添加

\ExplSyntaxOn
\cs_set_protected:Npn \__siunitx_number_in_parse_mantissa:N #1 {
  \tl_if_in:NnTF \l__siunitx_input_digit_tl {#1}
    { \__siunitx_number_in_digit:n {#1} }
    {
      \tl_if_in:NnTF \l__siunitx_input_decimal_tl {#1}
        { \__siunitx_number_in_decimal:N #1 }
        {
          \tl_if_in:NnTF \l__siunitx_input_sign_tl {#1}
            { \__siunitx_number_in_sign:N #1 }
            {
              \tl_if_in:NnTF \l__siunitx_input_symbol_tl {#1}
                {
                  \prop_put:Nnn \l__siunitx_number_in_prop { symbolic }
                    { true }
                  \__siunitx_number_in_digit:n {#1}
                }
                {
                  \tl_if_in:NnF \l__siunitx_input_ignore_tl {#1}
                    { \__siunitx_number_in_parse_more:N #1 }
                }
            }
        }
    }
}
\ExplSyntaxOff

我很快就会调整主代码。

相关内容