Выровняйте десятичный разделитель с разделителем тысяч с помощью siunitx

Выровняйте десятичный разделитель с разделителем тысяч с помощью siunitx

Моя таблица состоит из двух групп строк. Первая группа содержит большие значения (X,XXX). Вторая группа содержит меньшие значения (0.XXX). Siunitx выравнивает все числа на основе положения десятичного маркера. Результат некрасивый: некоторые числа выровнены очень сильно по левому краю, а другие — очень сильно по правому краю.

Можно ли выровнять числа так, чтобы десятичные разделители (в малых значениях) были выровнены с разделителями тысяч (в больших значениях)?

Вот пример таблицы. Второй и третий столбцы показывают текущую ситуацию. Последние два столбца — пример того, как я хотел бы, чтобы выглядели данные (отредактировано с помощью Photoshop).

Пример

Если четкого решения не существует, то хакерское решение тоже будет кстати.

Я уже придумал способ изменить десятичный разделитель в таблице: если бы я мог использовать запятую в качестве десятичного разделителя для первой группы строк, все было бы хорошо. Однако я не смог заставить это работать (с моими скромными знаниями LaTeX).

Код, используемый для таблицы:

\documentclass{article}

\usepackage{booktabs}
\usepackage{siunitx}

\sisetup{group-separator={,},group-minimum-digits={3},output-decimal-marker={.}}

\begin{document}
\begin{tabular}{@{}p{2.3cm}SSp{0.3cm}SS@{}}

\toprule
& \multicolumn{2}{c}{Without Threshold Selector} && \multicolumn{2}{c}{With Threshold Selector}\\
\cmidrule{2-3} \cmidrule{5-6}
& \multicolumn{1}{p{2.3cm}}{\centering{Naive Bayes}} & \multicolumn{1}{p{2.3cm}}{\centering{Logistic}} && \multicolumn{1}{p{2.3cm}}{\centering{Naive Bayes}} & \multicolumn{1}{p{2.3cm}}{\centering{Logistic}}\\
\midrule

True positives  & 2791  & 1831  && 3126     & 3547\\
False positives & 2924  & 995   && 3853     & 3483\\
True negatives  & 36998 & 38927 && 36069    & 36439\\
False negatives & 2498  & 3458  && 2163     & 1742\\

\addlinespace

Sensitivity     & 0.528 & 0.346 && 0.591    & 0.671\\
Precision       & 0.488 & 0.648 && 0.448    & 0.505\\

\bottomrule

\end{tabular}
\end{document}

решение1

Хотя я бы не рекомендовал эту форму отображения, она, безусловно, выполнима. Вместо использования siunitxя бы, вероятно, выбрал решение «низкого уровня», основанное в некоторой степени на том, как dcolumnвыполняется выравнивание. Стратегия здесь — гибридный подход. Во-первых, содержимое ячейки захватывается с помощью collcell(что делает во многом то же самое, siunitxчто и на первом этапе). Предполагается, что собранный материал является либо десятичным, либо целым числом, и .поэтому выполняется быстрая проверка. Для десятичных чисел допускается одна цифра заполнения в начале, и число набирается «как есть». Для целых чисел есть жестко запрограммированная проверка для добавления a, ,и число выгружается в вывод. Выполнение всего в поле фиксированной ширины позволяет выполнить выравнивание:

\documentclass{article}
\usepackage{array}
\usepackage{booktabs}
\usepackage{collcell}
\newlength\mylength
\AtBeginDocument{\settowidth\mylength{$12.345$}}
\newcolumntype{M}{>{\collectcell\multialign}l<{\endcollectcell}}
\makeatletter
\newcommand*\multialign[1]{%
  \setbox0=\hbox to \mylength{%
    \hfil
    $
      \in@{.}{#1}%
      \ifin@
        \settowidth\mylength{$0$}%
        \hspace{\mylength}%
        \expandafter\@firstofone
      \else
        \expandafter\multialignint
      \fi
        {#1}%
    $%
  }%
  \hfil\box0\hfil
}
\newcommand*\multialignint[1]{%
  \multialignintauxi#1\empty\empty\empty\empty\relax\stop
}
\newcommand*\multialignintauxi{}
\def\multialignintauxi#1#2#3#4#5#6\stop{%
 \ifx#4\empty % Three or fewer digits
   #1#2#3%
 \else
  \ifx#5\empty % Four digits
    #1\mathord,#2#3#4%
  \else % Five digits
    #1#2\mathord,#3#4#5%
  \fi
 \fi
}
\makeatother
\begin{document}
\begin{tabular}{@{}p{2.3cm}MMp{0.3cm}MM@{}}

\toprule
& \multicolumn{2}{c}{Without Threshold Selector} && \multicolumn{2}{c}{With Threshold Selector}\\
\cmidrule{2-3} \cmidrule{5-6}
& \multicolumn{1}{p{2.3cm}}{\centering{Naive Bayes}} & \multicolumn{1}{p{2.3cm}}{\centering{Logistic}} && \multicolumn{1}{p{2.3cm}}{\centering{Naive Bayes}} & \multicolumn{1}{p{2.3cm}}{\centering{Logistic}}\\
\midrule

True positives  & 2791  & 1831  && 3126     & 3547\\
False positives & 2924  & 995   && 3853     & 3483\\
True negatives  & 36998 & 38927 && 36069    & 36439\\
False negatives & 2498  & 3458  && 2163     & 1742\\

\addlinespace

Sensitivity     & 0.528 & 0.346 && 0.591    & 0.671\\
Precision       & 0.488 & 0.648 && 0.448    & 0.505\\

\bottomrule
\end{tabular}
\end{document}

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