![排版多位数字时进行数字分组](https://linux22.com/image/304932/%E6%8E%92%E7%89%88%E5%A4%9A%E4%BD%8D%E6%95%B0%E5%AD%97%E6%97%B6%E8%BF%9B%E8%A1%8C%E6%95%B0%E5%AD%97%E5%88%86%E7%BB%84.png)
我很清楚这个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
,它会尝试读取四个参数。在这种情况下,
- 它将获得
1
、4
、1
和59265
。因此它插入一个\l__siunitx_group_sep_tl
并保存141,
到 中\l__siunitx_tmpb_tl
。 - 接下来
59265
变成5
,,,9
和2
;65
和\l__siunitx_tmpb_tl
变成141,592,
。 - 最后
65
变成6
,5
,空,空。所以它在这里停止并\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 {
{}
{
{}
{
{}
{
{}
{
{}
{
{
}
}
}
}
}
}