表中的 siunitx:意外间距

表中的 siunitx:意外间距

考虑以下示例。

\documentclass{article}

\usepackage{booktabs}
\usepackage{siunitx}

\makeatletter
\newcommand*\numtablerange[1][]{%
  \kernel@ifnextchar[{\numtable@range{#1}}{\numtable@range{#1}[#1]}}
  \def\numtable@range#1[#2]#3#4{%
    \numtablerange@boxme{\expandafter\tablenum\expandafter[\numtablerange@lopt,#1]{#3}}--%
    \numtablerange@boxme{\expandafter\tablenum\expandafter[\numtablerange@ropt,#2]{#4}}%
  }
\newcolumntype{T}[3]{>{\def\numtablerange@lopt{#1}\def\numtablerange@ropt{#2}}#3}
\newcommand*\numtablerange@boxme[1]{{\sbox0{#1}\usebox0}}
\makeatletter

\begin{document}

\begin{table}
  \begin{tabular}{
    T{table-format = 2.2, output-decimal-marker = {:}}
     {table-format = 2.2, output-decimal-marker = {:}}
     {c}
  }
   \toprule
    {Tidsrum}                    \\
   \midrule
    \numtablerange{ 9.00}{10.00} \\
    \numtablerange{10.00}{11.00} \\
   \bottomrule
  \end{tabular}
\end{table}

\end{document}

输出

问题

几年前,我编译了一些代码(上面的示例就是其中的一个片段),据我所知,这些代码并没有在冒号后产生空格。我不明白为什么会有空格。

如何删除冒号后的空格?

想法

我认为这可能是由于siunitxv3,但我完全不确定。

答案1

我建议明确标记您希望将标记视为\mathord: 的位置output-decimal-marker = \mathord{:}。这在 v2 和 v3 中都有效,并且具有保留使用无法保留的语义信息的优点{...}。这在例如切换到文本模式时很有用,其中 没有特殊含义,并且在适当的情况下可以使用文本模式等效项{...}替换来保留重要信息。\mathord

您看到变化的原因相当技术性,并且只会在表格对齐中显示。在 v2 中,表格单元格是通过分别格式化数字的每个部分来构建的。这相当慢,意味着需要与“正常”数字分开执行此操作,从而导致一些极端情况错误。对于 v3,我从中获得了一个想法pgfplotstable:使用每个部分之间的标记进行格式化以进行对齐。对于普通数字,标记为空,没有任何不同。对于对齐,标记用于拆分数字的各个部分,这意味着对齐速度更快,并且不使用不同的格式化路径。

如果我们一次性匹配整个分隔参数,TeX 就会删除括号,从而出现问题:

\def\foo#1X#2X#3\stop{\showtokens{#2}}
\foo stuffX{content}X\stop
\foo stuffX{content} X\stop

这意味着整个数字部分周围的一个额外的括号将被删除:通常不是问题,但如果您使用{X}not\mathord{X}来制作符号 mathord,则会出现问题。我可以更改表格设置以避免这种情况,但随后我将回到较慢的设置(有很多我必须涵盖的数字的部分)。

如果您不想使用\mathord,可以使用一组额外的括号来解决这个问题。或者,您可以在括号内添加一些空格,这将在数学模式下被忽略,但也可以防止括号被剥离。

答案2

也许您的代码中有一些我不明白的地方,但是为什么这个简单的代码我不明白呢?

\documentclass{article}

\usepackage{booktabs}
\usepackage{siunitx}

\begin{document}

\begin{table}
\sisetup{ output-decimal-marker = \mathord{:}, range-phrase=\,--}
  \begin{tabular}{c}
   \toprule
    {Tidsrum} \\
   \midrule
    \hphantom{0}\numrange{9.00}{10.00} \\
    \numrange{10.00}{11.00} \\
   \bottomrule
  \end{tabular}
\end{table}

\end{document}

在此处输入图片描述

相关内容