Richten Sie den Dezimaltrenner mit siunitx am Tausendertrennzeichen aus

Richten Sie den Dezimaltrenner mit siunitx am Tausendertrennzeichen aus

Meine Tabelle besteht aus zwei Zeilengruppen. Die erste Gruppe enthält große Werte (X,XXX). Die zweite Gruppe enthält kleinere Werte (0,XXX). Siunitx richtet alle Zahlen anhand der Position des Dezimaltrennzeichens aus. Das Ergebnis ist nicht schön: Einige Zahlen sind sehr weit links ausgerichtet, während andere sehr weit rechts ausgerichtet sind.

Ist es möglich, die Zahlen so auszurichten, dass die Dezimaltrennzeichen (der kleinen Werte) mit den Tausendertrennzeichen (der großen Werte) ausgerichtet sind?

Hier ist ein Beispiel für die Tabelle. Die zweite und dritte Spalte zeigen die aktuelle Situation. Die letzten beiden Spalten sind ein Beispiel dafür, wie die Daten aussehen sollen (mit Photoshop bearbeitet).

Beispiel

Wenn es keine saubere Lösung gibt, ist auch eine Hack-Lösung willkommen.

Ich habe mir bereits überlegt, wie ich das Dezimaltrennzeichen in der Tabelle ändern könnte: Wenn ich für die erste Gruppe von Zeilen ein Komma als Dezimaltrennzeichen verwenden könnte, wäre alles in Ordnung. Allerdings habe ich das (mit meinen geringen LaTeX-Kenntnissen) nicht zum Laufen gebracht.

Für die Tabelle verwendeter Code:

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

Antwort1

Obwohl ich diese Anzeigeform nicht empfehlen würde, ist sie durchaus machbar. Anstatt zu verwenden, siunitxwürde ich wahrscheinlich eine „Low-Level“-Lösung wählen, die in gewissem Maße darauf basiert, wie dcolumndie Ausrichtung erfolgt. Die Strategie hier ist ein hybrider Ansatz. Zuerst wird der Zellinhalt mithilfe von erfasst collcell(was im Wesentlichen dasselbe bewirkt wie siunitxim ersten Schritt). Es wird angenommen, dass das erfasste Material entweder eine Dezimalzahl oder eine Ganzzahl ist, und .daher wird eine schnelle Prüfung auf durchgeführt. Bei Dezimalzahlen wird am Anfang eine Ziffer als Auffüllung zugelassen und die Zahl wird „so wie sie ist“ gesetzt. Bei Ganzzahlen gibt es eine fest codierte Prüfung zum Hinzufügen von a ,und die Zahl wird in die Ausgabe übertragen. Wenn alles in einem Feld mit fester Breite ausgeführt wird, ist die Ausrichtung möglich:

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

verwandte Informationen