datatool 和 siunitx 对小数及其转换的理解不同

datatool 和 siunitx 对小数及其转换的理解不同

这是一个后续问题使用 datatool 和 tabularray 结合将十进制转换为语言环境失败。或者让我们这样说:我可以解决很多问题。

datatool核心问题是对和 的小数理解不同siunitx。我一使用命令,\DTLsumforkeys就得到了,作为小数标记的 ,但siunitx使用了dot。因此我不能同时使用两者。当我尝试使用某些转换(例如DTLdecimaltolocale)时DTLsetnumberchars,我也会失败。

我想,当这个问题解决了之后,我也可以解决上面提到的问题了。

我发现\sisetup{output-decimal-marker={,}}我可以得到,for siunitx,所以数字datatoolsiunitx看起来相同,但逗号不应该是小数点标记,它应该代表“千位标记”。

\documentclass[parskip=full]{scrartcl}
\begin{filecontents}{test.csv}
category,fundingYear1,fundingYear2,fundingYear3,fundingYear4,fundingYear5,fundingYear6,fundingYear7
Staff,4111,4222,4333,4444,4555,4666,4777
Direct project costs,7,6,5,4,3,2,1
Instrumentation,6111,6222,6333,6444,6555,6666,6777
\end{filecontents}

\usepackage{datatool,siunitx}


\DTLloaddb{ScienceCommunication}{test.csv}

\begin{document}
\DTLsumforkeys{ScienceCommunication}{%
      fundingYear1,%
      fundingYear2,%
      fundingYear3,%
      fundingYear4,%
      fundingYear5,%
      fundingYear6,%
      fundingYear7%
    }{\ScienceCommunication}

datatool: \ScienceCommunication\\
siunitx: \num{\ScienceCommunication}

conversion with datatool:\\
- \verb|DTLdecimaltolocale|:
\DTLdecimaltolocale{\ScienceCommunication}{\ScienceCommunicationOne}
\ScienceCommunicationOne


- \verb|\DTLsetnumberchars{.}{,}|:
\DTLsetnumberchars{.}{,}
\ScienceCommunication

- \verb|\DTLsetnumberchars{,}{.}|:
\DTLsetnumberchars{,}{.}
\ScienceCommunication

\end{document}

在此处输入图片描述

答案1

您需要设置,为被视为空格字符(因此被忽略)而不是小数点标记

\sisetup{input-decimal-markers ={.}, input-ignore={,}}

相关内容