考虑以下示例。
\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}
问题
几年前,我编译了一些代码(上面的示例就是其中的一个片段),据我所知,这些代码并没有在冒号后产生空格。我不明白为什么会有空格。
如何删除冒号后的空格?
想法
我认为这可能是由于siunitx
v3,但我完全不确定。
答案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}