
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).
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, siunitx
provavelmente optaria por uma solução de 'baixo nível' baseada, até certo ponto, em como dcolumn
funciona 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 siunitx
no 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}