Ausrichten von Zahlen in gruppierten Tabularx-Spalten

Ausrichten von Zahlen in gruppierten Tabularx-Spalten

Ich versuche, eine Tabelle mit Tabularx zu formatieren, siehe unten.

Tisch

Der Tabelleninhalt spielt keine Rolle, ich habe dort einfach ein paar zufällige Zahlen eingefügt. Wie Sie sehen, habe ich versucht, die vier Kategorien (Apple, ...) und eine Gesamtkategorie (Spalten 2-4) in Blöcke von drei Spalten zu gruppieren, indem ich benutzerdefinierte Spaltentypen verwendet und Spaltentrennzeichen geändert habe.

Ich habe einige Zeit damit verbracht, die cmidrules unter den Kategorien richtig auszurichten, aber ich denke, sie passen jetzt richtig zu den Spaltengruppen. Die folgenden zwei Probleme bleiben bestehen:

  • Ich habe einen neuen Spaltentyp zum Zentrieren des Spalteninhalts eingeführt, aber anscheinend ist immer noch alles linksbündig.
  • Ich muss möglicherweise negative Werte in der letzten Zeile mit den ausschließlich positiven Zahlen in den oberen Zeilen ausrichten. Das bedeutet also, dass ich die Spalten sowieso nicht zentrieren möchte, sondern sie rechtsbündig ausrichten muss. Ich habe auch über siunitx-Spaltentypen gelesen, konnte sie aber nicht erfolgreich in meine Tabelle integrieren.

Ich habe ein MWE angehängt. Vielen Dank im Voraus für Ihre Hilfe!

\documentclass[11pt]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[scaled=1]{uarial}
\renewcommand{\familydefault}{\sfdefault}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{array}
\usepackage{booktabs}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{siunitx}

\begin{document}

\newcommand{\ap}[1]{AP\textsubscript{#1}}
\newcommand{\apavg}[0]{AP\textsubscript{\(\varnothing\)}}

\begin{figure}[!htbp]
  \centering
  \tiny
  \newcolumntype{C}{>{\centering\arraybackslash}X} % centered X-column
  \newcolumntype{B}{*{3}{C}} % block of 3 columns
  \newcolumntype{d}{@{\hspace{3\tabcolsep}}} % 150% spacing
  \begin{tabularx}{\textwidth}{c d B d B d B d B d B @{\hspace{2\tabcolsep}}}
    \toprule
    \multirow{2}[3]{*}{Model} & \multirow{2}[3]{*}{\ap{50}} & \multirow{2}[3]{*}{\ap{75}} & \multirow{2}[3]{*}{\apavg} & \multicolumn{3}{@{}cd}{Apple} & \multicolumn{3}{@{}cd}{Banana} & \multicolumn{3}{@{}cd}{Potato} & \multicolumn{3}{@{}c}{Orange} \\ \cmidrule(r{2\tabcolsep}){5-7} \cmidrule(r{2\tabcolsep}){8-10} \cmidrule(r{2\tabcolsep}){11-13} \cmidrule(r{\tabcolsep}){14-16}
    &  &  &  & \ap{50} & \ap{75} & \apavg & \ap{50} & \ap{75} & \apavg & \ap{50} & \ap{75} & \apavg & \ap{50} & \ap{75} & \apavg \\
    \midrule
    Baseline & \num{0.100} & \num{0.460} & \num{0.810} & \num{0.210} & \num{0.450} & \num{0.520} & \num{0.880} & \num{0.020} & \num{0.080} & \num{0.240} & \num{0.080} & \num{0.600} & \num{0.050} & \num{0.990} & \num{0.030} \\
    Improved & \num{0.200} & \num{0.360} & \num{0.860} & \num{0.390} & \num{0.400} & \num{0.600} & \num{0.900} & \num{0.020} & \num{0.080} & \num{0.200} & \num{0.080} & \num{0.600} & \num{0.100} & \num{0.990} & \num{0.100} \\
    \(\Delta\) & \num{0.100} & \num{-0.100} & \num{0.050} & \num{0.180} & \num{-0.050} & \num{0.080} & \num{0.020} & \num{0.000} & \num{0.000} & \num{-0.040} & \num{0.000} & \num{0.000} & \num{0.050} & \num{0.000} & \num{0.070} \\
    \bottomrule
  \end{tabularx}
\end{figure}

\end{document}

Antwort1

Mein Hauptvorschlag wäre, eine tabular*Umgebung anstelle einer tabularxUmgebung zu verwenden. Ich sage dies, weil eine der Hauptfunktionen des XSpaltentyps – der automatische Zeilenumbruch von Zellinhalten – für die vorliegende Tabelle nicht relevant zu sein scheint.

SIch würde den Spaltentyp anstelle des Spaltentyps X(oder C) für die 15 Datenspalten verwenden und die Zahlen nicht in \numAnweisungen einschließen. Schließlich würde ich das tabellarische Material in eine tableUmgebung einschließen,nichtin einer figureUmgebung.

Bildbeschreibung hier eingeben

\documentclass[11pt]{scrreprt}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[scaled=1]{helvet} % I don't seem to have 'uarial' package
\renewcommand{\familydefault}{\sfdefault}
\usepackage{array,amssymb,booktabs,siunitx}

\newcommand{\ap}[1]{AP\textsubscript{#1}}
\newcommand{\apavg}[0]{AP\textsubscript{\(\!\varnothing\)}}

\begin{document}

\begin{table}[!htbp] % <-- 'table', not 'figure'
\setlength\tabcolsep{0pt}
\tiny
\begin{tabular*}{\textwidth}{@{\extracolsep{\fill}} % <-- use 'tabular*'
                   l *{15}{S[table-format=1.3]} }
    \toprule
    Model & &&&
    \multicolumn{3}{c}{Apple}  & \multicolumn{3}{c}{Banana} & 
    \multicolumn{3}{c}{Potato} & \multicolumn{3}{c}{Orange} \\ 
    \cmidrule{5-7} \cmidrule{8-10} \cmidrule{11-13} \cmidrule{14-16}
    & {\ap{50}} & {\ap{75}} & {\apavg} 
    & {\ap{50}} & {\ap{75}} & {\apavg} & {\ap{50}} & {\ap{75}} & {\apavg} 
    & {\ap{50}} & {\ap{75}} & {\apavg} & {\ap{50}} & {\ap{75}} & {\apavg} \\
    \midrule
    Baseline & 0.100 & 0.460 & 0.810 & 0.210 & 0.450 & 0.520 & 0.880 & 0.020 & 0.080 & 0.240 & 0.080 & 0.600 & 0.050 & 0.990 & 0.030\\
    Improved & 0.200 & 0.360 & 0.860 & 0.390 & 0.400 & 0.600 & 0.900 & 0.020 & 0.080 & 0.200 & 0.080 & 0.600 & 0.100 & 0.990 & 0.100\\
    Diff. & 0.100 & -0.100 & 0.050 & 0.180 & -0.050 & 0.080 & 0.020 & 0.000 & 0.000 & -0.040 & 0.000 & 0.000 & 0.050 & 0.000 & 0.070\\
    \bottomrule
\end{tabular*}
\end{table}
\end{document}

verwandte Informationen