
Mi tabla consta de dos grupos de filas. El primer grupo contiene valores grandes (X,XXX). El segundo grupo contiene valores más pequeños (0,XXX). Siunitx alinea todos los números en función de la posición del marcador decimal. El resultado no es bonito: algunos números están alineados muy a la izquierda, mientras que otros están muy a la derecha.
¿Es posible alinear los números de modo que los marcadores decimales (de los valores pequeños) estén alineados con los separadores de miles (de los valores grandes)?
A continuación se muestra un ejemplo de la tabla. La segunda y tercera columnas muestran la situación actual. Las dos últimas columnas son un ejemplo de cómo me gustaría que aparecieran los datos (editados con Photoshop).
Si no existe una solución clara, una solución ingeniosa también sería bienvenida.
Ya pensé en una forma de cambiar el marcador decimal dentro de la tabla: si pudiera tener una coma como marcador decimal para el primer grupo de filas, todo estaría bien. Sin embargo, no pude hacer que eso funcionara (con mi poco conocimiento de LaTeX).
Código utilizado para la tabla:
\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}
Respuesta1
Si bien no recomendaría esta forma de visualización, ciertamente es factible. En lugar de usar, siunitx
probablemente optaría por una solución de "bajo nivel" basada hasta cierto punto en cómo dcolumn
funciona la alineación. La estrategia aquí es un enfoque híbrido. Primero, se captura el contenido de la celda usando collcell
(que hace lo mismo que siunitx
en la primera etapa). Se supone que el material recopilado es un número decimal o entero y, .
por lo tanto, se realiza una verificación rápida. Para los decimales, se permite un dígito de relleno al frente y el número se escribe "tal cual". Para los números enteros, hay una verificación codificada para agregar a ,
y el número se volca en la salida. Hacer todo en un cuadro de ancho fijo permite la alineación:
\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}