
Ich versuche, eine Tabelle mit Tabularx zu formatieren, siehe unten.
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 tabularx
Umgebung zu verwenden. Ich sage dies, weil eine der Hauptfunktionen des X
Spaltentyps – der automatische Zeilenumbruch von Zellinhalten – für die vorliegende Tabelle nicht relevant zu sein scheint.
S
Ich würde den Spaltentyp anstelle des Spaltentyps X
(oder C
) für die 15 Datenspalten verwenden und die Zahlen nicht in \num
Anweisungen einschließen. Schließlich würde ich das tabellarische Material in eine table
Umgebung einschließen,nichtin einer figure
Umgebung.
\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}