Probleme mit longtable Umgebung

Tabellen und Grafiken erstellen und anordnen


Gast

Probleme mit longtable Umgebung

Beitrag von Gast »

%
\documentclass[a4paper]{article}
\usepackage{lipsum}
\usepackage{longtable,array}
\usepackage{tabularx, booktabs,ragged2e} % für Tabellen
\newcolumntype{L}{>{\RaggedRight\arraybackslash}X}
\newlength\mylength\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}

\usepackage{lipsum}

\begin{document}

\lipsum

\setlength\mylength{\dimexpr\textwidth-5\arrayrulewidth-8\tabcolsep}
%\centering
\begin{longtable}{p{.4\mylength}C{.2\mylength}C{.2\mylength}C{.2\mylength}}
\caption{Table caption}\\
\toprule
Model & R$^2$ (HG + RT) & R$^2$ (RT) & R$^2$ (HG)\\
\midrule
 $(a) \, \, 6.02 \cdot 10^6 \cdot d_p^{-1.62}$ & 0.925 & 0.925 & 0.922\\
$(b) \, \, 5.20 \cdot 10^6 \cdot d_p^{-1.62} \cdot GMR^{0.15}$ & 0.966 & 0.977 & 0.946\\
$(c) \, \, 4.16 \cdot 10^6 \cdot d_p^{-1.57} \cdot GMR^{0.16}$ & 0.972 & 0.975 & 0.966\\
\midrule
\multicolumn{4}{l}{Hier soll ein Zellenumbruch erfolgen, damit der Text ueber zwei Zeilen innerhalb der verbundenen Spalte angezeigt wird.}\\                
\bottomrule             
\end{longtable}

\end{document}


Hallo zusammen,

ich habe zwei Probleme mit meiner Tabelle. Siehe MMB. Mir ist wichtig, dass meine Tabelle bündig mit dem Text ist. Funktioniert soweit gut. Außerdem ist mir wichtig, dass die erste Spalte mit den Formeln linksbündig ist und die restlichen drei Spalten zentriert sind. Das funktioniert auch soweit. Nun zu meinen Problemen: Ich habe Schwierigkeiten, wenn ich "(a)" vor die Formel schreibe. Momentan sind "(a)", "(b)", "(c)" in die Formel eingebunden/integriert. Obwohl es funktioniert, finde ich das suboptimal und würde auch sicherlich niemanden auffallen. Ich hätte aber gerne "(a)", "(b)", "(c)" vor der Formel stehen. Das funktioniert für die Zeilen mit den Formeln "b" und "c". Allerdings nicht für "(a)". Ich verstehe einfach nicht warum und bekomme es nicht kompiliert sofern das "(a)" vor der Gleichung steht...

Das zweite Problem besteht in der verbundenen unteren Zeile. Ich benötige hier einen Zeilenumbruch, da ich ansonsten nicht genügend Platz für meine Legende habe. Kann ich das irgendwie mit "p{}" realisieren?

Vielen Dank im Voraus!

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2456
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Beitrag von Bartman »

\documentclass[a4paper]{article}
\usepackage{lipsum}
\usepackage{longtable}
\usepackage{tabularx}% lädt array
\usepackage{booktabs, ragged2e}
\usepackage{showframe}

\newlength\mylength

\newcolumntype{L}{>{\RaggedRight}X}% \arraybackslash wird bei diesem Befehl nicht gebraucht 
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}

\begin{document}
\lipsum

\setlength\mylength{\dimexpr\textwidth-5\arrayrulewidth-8\tabcolsep}
%\centering
\begin{longtable}{>{\RaggedRight}p{.4\mylength}C{.2\mylength}C{.2\mylength}C{.2\mylength}}
\caption{Table caption}\\
\toprule
Model & R$^2$ (HG + RT) & R$^2$ (RT) & R$^2$ (HG)\\
\midrule
{(a)} $6.02 \cdot 10^6 \cdot d_p^{-1.62}$ & 0.925 & 0.925 & 0.922\\
(b) $5.20 \cdot 10^6 \cdot d_p^{-1.62} \cdot GMR^{0.15}$ & 0.966 & 0.977 & 0.946\\
(c) $4.16 \cdot 10^6 \cdot d_p^{-1.57} \cdot GMR^{0.16}$ & 0.972 & 0.975 & 0.966\\
\midrule
\multicolumn{4}{p{\textwidth}}{Hier soll ein Zellenumbruch erfolgen, damit der Text ueber zwei Zeilen innerhalb der verbundenen Spalte angezeigt wird.}\\                
\bottomrule            
\end{longtable}
\end{document} 
Mir ist gerade nicht bekannt, warum (a) hier in einer Gruppe stehen muss, aber Du bekommst so keine Fehlermeldung mehr. Bei einer eigenen Spalte für die drei Buchstaben ist die gleiche Maßnahme nötig.

Außerdem ist Deine erste Spalte nicht linksbündig ausgerichtet, sondern auf Blocksatz eingestellt.

Stattdessen könntest Du auch mit xltabular arbeiten und threeparttablex für die Legende verwenden.

Gast

Beitrag von Gast »

Vielen Dank Bartman!

Funktioniert soweit alles wie ich es mir vorstelle. Allerdings ist die Tabelle nun nicht mehr bündig mit meinem Text bzw. ragt auf der rechten Seite ein wenig heraus. Hast du noch eine Idee wie ich das beheben kann?

Das mit dem (a) und der Gruppe nehme ich dann einfach so mal hin ohne genau zu verstehen warum das so ist. Ich danke dir für die Lösungsvorschlag.

Beste Grüße!

Gast

Beitrag von Gast »

Für die \multicolumn{4}{p{\textwidth}} muss eine ähnliche Berechnung wie für \mylength stattfinden (oder der Leerraum unterbunden werden). Sonst sorgt die dafür, dass die Tabelle zu breit ist.

Das (a) muss in geschweifte Klammern, da \midrule ähnlich wie \cmdirule ein Argument in runden Klammern akzeptiert und das (a) sonst als Trim-Argument liest. Siehe auch https://tex.stackexchange.com/q/228755/35864

Ich würde dazu raten, GMR im Mathemodus nicht als GMR zu setzen sondern als \mathit{GMR} oder \mathrm{GMR} am besten definiert man dazu einen eigenen Befehl.

Dann würde ich noch die (a), (b), (c)-Nummerierung in eine eigene Spalte setzen.
\documentclass[a4paper]{article}
\usepackage{lipsum}
\usepackage{longtable}
\usepackage{tabularx}% lädt array
\usepackage{booktabs, ragged2e}
\usepackage{showframe}
\newlength\mylength

\newcolumntype{L}{>{\RaggedRight}X}% \arraybackslash wird bei diesem Befehl nicht gebraucht
\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}

\newcommand*{\GMR}{\mathrm{GMR}}
\newcommand*{\Rsq}{\mathrm{R}^2}

\begin{document}
\lipsum

\setlength\mylength{\dimexpr\textwidth-10\tabcolsep}
\centering
\begin{longtable}{>{\RaggedRight}p{.02\mylength}>{\RaggedRight}p{.42\mylength}*{3}{C{.186\mylength}}}
\caption{Table caption}\\
\toprule
\multicolumn{2}{>{\RaggedRight}p{.44\mylength}}{Model} & $\Rsq$ (HG + RT) & $\Rsq$ (RT) & $\Rsq$ (HG)\\
\midrule\relax
(a) & $6.02 \cdot 10^6 \cdot d_p^{-1.62}$ & 0.925 & 0.925 & 0.922\\
(b) & $5.20 \cdot 10^6 \cdot d_p^{-1.62} \cdot \GMR^{0.15}$ & 0.966 & 0.977 & 0.946\\
(c) & $4.16 \cdot 10^6 \cdot d_p^{-1.57} \cdot \GMR^{0.16}$ & 0.972 & 0.975 & 0.966\\
\midrule
\multicolumn{5}{p{\dimexpr\textwidth-2\tabcolsep}}{Hier soll ein Zellenumbruch erfolgen, damit der Text über zwei Zeilen innerhalb der verbundenen Spalte angezeigt wird.}\\
\bottomrule
\end{longtable}
\end{document}
Für Tabellen mit vielen Zahlen empfehle ich meist siunitx und die S-Spalte das habe ich jetzt nicht versucht einzubauen, aber vielleicht ist es ja was für die nächste Tabelle.

Benutzeravatar
u_fischer
Forum-Meister
Forum-Meister
Beiträge: 4266
Registriert: Do 22. Nov 2012, 11:09
Kontaktdaten:

Beitrag von u_fischer »

Bartman hat geschrieben: Mir ist gerade nicht bekannt, warum (a) hier in einer Gruppe stehen muss,
Weil wie die Dokumentation von booktabs sagt, "within a longtable, you can use the optional left and right trimming commands, which normally only work for
\cmidrules, with \toprule, \midrule and \bottomrule".

D.h. \midrule(rl) ist erlaubt und verkürzt die Linien. Das heißt aber auch, dass \midrule schaut, ob eine Klammer folgt, und (a) bringt es aus dem Tritt. Alles was, die beiden trennt hilft: \midrule\relax, \midrule{}.

Gast

Beitrag von Gast »

Vielen Dank an euch alle. Es funktioniert jetzt einwandfrei und ich habe viel gelernt. Tolles Forum!

Antworten