Alinhe o marcador decimal com o separador de milhares usando siunitx

Alinhe o marcador decimal com o separador de milhares usando siunitx

Minha tabela consiste em dois grupos de linhas. O primeiro grupo contém valores grandes (X,XXX). O segundo grupo contém valores menores (0,XXX). Siunitx alinha todos os números com base na posição do marcador decimal. O resultado não é bonito: alguns números estão alinhados muito à esquerda, enquanto outros estão muito à direita.

É possível alinhar os números de forma que os marcadores decimais (dos valores pequenos) fiquem alinhados com os separadores de milhares (dos valores grandes)?

Aqui está um exemplo da tabela. A segunda e terceira colunas mostram a situação atual. As duas últimas colunas são um exemplo de como gostaria que os dados aparecessem (editados no Photoshop).

Exemplo

Se não existir uma solução elegante, uma solução hacky também seria bem-vinda.

Já pensei em uma forma de alterar o marcador decimal dentro da tabela: se eu pudesse ter uma vírgula como marcador decimal para o primeiro grupo de linhas, ficaria tudo bem. No entanto, não consegui fazer isso funcionar (com meu pouco conhecimento de LaTeX).

Código usado para a tabela:

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

Responder1

Embora eu não recomende este formulário de exibição, certamente é viável. Em vez de usar, siunitxprovavelmente optaria por uma solução de 'baixo nível' baseada, até certo ponto, em como dcolumnfunciona o alinhamento. A estratégia aqui é uma abordagem híbrida. Primeiro, o conteúdo da célula é capturado usando collcell(que faz o mesmo que siunitxno primeiro estágio). Presume-se que o material coletado seja um número decimal ou inteiro e, .portanto, é feita uma verificação rápida. Para decimais, um dígito de preenchimento é permitido na frente e o número é digitado 'como está'. Para números inteiros, há uma verificação codificada para adicionar a ,e o número é despejado na saída. Fazer tudo em uma caixa de largura fixa permite o alinhamento:

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

informação relacionada