datatool e siunitx têm entendimento diferente de decimais e sua conversão

datatool e siunitx têm entendimento diferente de decimais e sua conversão

Esta é uma pergunta de acompanhamentoA conversão de decimal em localidade falha usando datatool em combinação com tabularray. Ou digamos assim: eu poderia ferver muito o problema.

O problema central é a compreensão diferente dos decimais por datatoole siunitx. Assim que uso o comando \DTLsumforkeysrecebo o ,para um marcador decimal, mas siunitxuso um dot. Portanto, não posso usar os dois juntos. Quando tento usar algumas conversões (por exemplo DTLdecimaltolocale, DTLsetnumberchars), também falho.

Acho que quando isso for resolvido, também poderei resolver o problema da pergunta mencionada acima.

Eu descobri que \sisetup{output-decimal-marker={,}}posso obter o ,for siunitxpara que os números datatoolpareçam siunitxiguais, mas a vírgula não deve ser o marcador decimal, ela deve representar o "marcador de milhares".

\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}

insira a descrição da imagem aqui

Responder1

Você precisa definir ,para ser tratado como um caractere de espaçamento (portanto ignorado) em vez de um marcador decimal

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

informação relacionada