排版多位数字时进行数字分组

排版多位数字时进行数字分组

我很清楚这个siunitx软件包,但据我所知,它不足以完成这项任务。

在十进制表示法中,有许多惯例,例如使用.,作为小数点,以及使用空格.,作为组分隔符。该软件包可以很好地处理它们,并且还可以使它们可配置,这很有帮助。但是...

它不允许定义不同于最常规的三人组大小。乍一看似乎没问题,但仔细一看这张桌子在维基百科上,人们可以看到人们实际上可能需要一些灵活性。

除此之外,小数点后的数字也一直使用那个神奇的数字 3。这是我个人关心的部分,第一部分的 3 其实对我来说还行(暂时),我之所以提到它只是因为它与问题密切相关。

根据这个问题/答案,现行的惯例是,小数点后的数字甚至是 5 位一组。

那么,有没有办法siunitx将这个 3 改为其他数字,甚至将小数点两边的数字改为不同的数字?如果没有,如何才能将 3 分为一组放在左边,将 5 分为一组放在右边?

有没有办法让我手动提及组限制以供siunitx查看和考虑(也许通过启用开关),就像我提到小数点一样?举个例子:

\num[flick]{123 456.12345 67890}

生产:

在此处输入图片描述

在这里,据称空格字符应该被解释为我希望看到每个组分隔符的位置,这些组分隔符保留为默认的细空格(?),这要归功于flick我一直在寻找的那个选项。

抱歉,我问了一个类似建议的问题。

答案1

发现一些代码siunitx.sty

\cs_new_protected:Npn \__siunitx_number_format_group_decimal_aux:NNNN
  #1#2#3#4 {
  \tl_if_empty:nTF {#2}
    { \tl_put_right:Nn \l__siunitx_tmpb_tl {#1} }
    {
      \tl_if_empty:nTF {#3}
        { \tl_put_right:Nn \l__siunitx_tmpb_tl { #1 #2 } }
        {
          \tl_put_right:Nn \l__siunitx_tmpb_tl { #1 #2 #3 }
          \tl_if_empty:nF {#4}
            {
              \tl_put_right:NV \l__siunitx_tmpb_tl \l__siunitx_group_sep_tl
              \__siunitx_number_format_group_decimal_aux:NNNN #4
            }
        }
    }
}

现在你可以看到它是如何工作的:每次希尼奇遇到小数部分,比如 3. 14159265,它会尝试读取四个参数。在这种情况下,

  • 它将获得14159265。因此它插入一个\l__siunitx_group_sep_tl并保存141,到 中\l__siunitx_tmpb_tl
  • 接下来59265变成5,,,9265\l__siunitx_tmpb_tl变成141,592,
  • 最后65变成65,空,空。所以它在这里停止并\l__siunitx_tmpb_tl返回141,592,65

所以?

似乎即使解释3这种处理很难被循环取代。如果你想要不同的分组大小,可以尝试这样做

\cs_new_protected:Npn \__siunitx_number_format_group_decimal_aux:NNNNNNN
 #1#2#3#4#5#6#7 {
  {}
  {
    {}
    {
      {}
      { 
        {}
        {
          {}
          {
            {
            }
          }
        }
      }
    }
  }

相关内容