siunitx 包似乎无法正确格式化虚数

siunitx 包似乎无法正确格式化虚数

如果我使用该siunitx包来生成一个虚数, \SI{120i}{\per\centi\meter} 那么它会在 120 之前放置一个 0(可能是期望包含实数的复数符号的一些产物)。

这看起来像是一个错误。此外,它把数字放在括号中,如果它是一个具有实部和虚部的复数,那么这是有意义的,但如果它本身只有一个虚部,那么就没有意义了。

我曾考虑过关闭解析,但是这可能会产生其他格式问题,例如,我喜欢将“i”变为斜体”,这可以通过选项进行设置,但如果关闭解析则不行。

答案1

对于那些等不及 CTAN 更新的人,以下方法应该有效

\documentclass{article}
\usepackage{siunitx}
\ExplSyntaxOn
\cs_set_protected:Npn \siunitx_number_in_complex:N #1 {
  \bool_set_false:N \l_siunitx_number_in_first_bool
  \bool_if:NTF \l_siunitx_number_in_complex_root_bool
    {
      \siunitx_number_in_parse_error:nn
        { duplicate-complex-root-token } { \token_to_str:N #1 }
    }
    {
      \cs_set_eq:NN \siunitx_number_in_check:n
        \siunitx_number_in_check_full:n
      \bool_set_true:N \l_siunitx_number_in_complex_root_bool
      \prop_put:Nnn \l_siunitx_number_in_prop { complex-root } {#1}
      \tl_if_empty:NF \l_siunitx_number_parsed_tl
        {
          \cs_set_eq:NN \siunitx_number_in_parse_loop:N
            \siunitx_number_in_parse_complex:N
        }
      \bool_if:NT \l_siunitx_number_in_decimal_bool
        {
          \bool_if:NF \l_siunitx_number_in_complex_bool
            {
              \prop_if_in:NnT \l_siunitx_number_in_prop
                { mantissa-uncertainty }
                {
                  \siunitx_number_in_complex_aux:nn
                    { mantissa-decimal } { complex-decimal }
                  \siunitx_number_in_complex_aux:nn
                    { mantissa-uncertainty } { complex-uncertainty }
                }
              \siunitx_number_in_complex_aux:nn { mantissa-integer }
                { complex-integer }
              \siunitx_number_in_complex_aux:nn
                { mantissa-decimal-marker } { complex-decimal-marker }
              \prop_del:Nn \l_siunitx_number_in_prop { mantissa }
              \prop_put:Nnn \l_siunitx_number_in_prop { complex }
                { true }
            }
        }
      \prop_if_in:NnF \l_siunitx_number_in_prop { mantissa }
        {
          \prop_if_in:NnT \l_siunitx_number_in_prop { mantissa-sign }
            {
              \siunitx_number_in_complex_aux:nn { mantissa-sign }
                { complex-sign }
            }
        }
      \bool_set_true:N \l_siunitx_number_in_complex_bool
      \bool_set_false:N \l_siunitx_number_in_first_bool
      \siunitx_number_in_init_part:n { complex }
      \prop_if_in:NnT \l_siunitx_number_in_prop
        { complex-decimal-marker }
        { \bool_set_true:N \l_siunitx_number_in_decimal_bool }
      \prop_if_in:NnTF \l_siunitx_number_in_prop
        { complex-sign }
        { \bool_set_true:N \l_siunitx_number_in_sign_bool }
        { \prop_del:Nn \l_siunitx_number_in_prop { mantissa } }
    }
}
\ExplSyntaxOff
\begin{document}
\SI{120i}{\per\centi\metre}
\end{document}

(抱歉,这里只有一行更改了,但是函数有点长!)

相关内容