datatool и siunitx по-разному понимают десятичные дроби и их преобразование

datatool и siunitx по-разному понимают десятичные дроби и их преобразование

Это дополнительный вопрос по темеПреобразование десятичных чисел в локальные значения не удается с помощью datatool в сочетании с tabularray. Или скажем так: я мог бы варить, решая эту проблему много раз.

Основная проблема заключается в разном понимании десятичных дробей datatoolи siunitx. Как только я использую команду, \DTLsumforkeysя получаю ,для десятичного маркера, но siunitxиспользует dot. Поэтому я не могу использовать оба вместе. Когда я пытаюсь использовать некоторые преобразования (например DTLdecimaltolocale, DTLsetnumberchars), я также терплю неудачу.

Думаю, когда это будет решено, я смогу решить и проблему, указанную выше.

Я обнаружил, что с помощью оператора for \sisetup{output-decimal-marker={,}}можно получить числа, которые выглядят одинаково, но запятая не должна быть десятичным разделителем, она должна представлять «тысячный разделитель».,siunitxdatatoolsiunitx

\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={,}}

Связанный контент