Longtable mit dynamischem Tabellenkopf Thema ist als GELÖST markiert

Tabellen und Grafiken erstellen und anordnen


KarlaK

Longtable mit dynamischem Tabellenkopf

Beitrag von KarlaK »

Hallo liebe Community!
Ich schreibe derzeit an meiner Dissertation mit Xelatex und habe in meinem Anhang eine Reihe sehr langer Tabellen, die teilweise untergliedert sind. Diese habe ich mit longtabu bzw longtable eingebunden. Das funktioniert soweit ganz gut. Das Problem ist nur, dass ich in longtable nur die Kopfzeile für die erste (\endfirsthead) und dann die Tabellenköpfe für alle weiteren Seiten (\endhead) festlegen kann. Ich müsste das für meine Tabellen aber dynamischer gestalten und zwar in der Art:

TABELLENKOPF 1
viele Werte
-- Seitenumbruch-- (hier müsste Kopf 1 erscheinen)
viele Werte
--Seitenumbruch-- (hier müsste Kopf 1 erscheinen)
viele Werte
TABELLENKOPF 2
viele Werte
-- Seitenumbruch-- (hier müsste Kopf 2 erscheinen)
viele Werte
--Seitenumbruch-- (hier müsste Kopf 2 erscheinen)
viele Werte

Ich würde halt gerne eine Art Marke setzen, damit Latex weiß, ok, ab hier muss ein anderer Tabellenkopf auf den Folgeseiten gesetzt werden. Etwa so, wie es bei supertabular möglich ist. Allerdings möchte ich supertabular nicht benutzen, da das Paket scheinbar Probleme mit den Seitenumbrüchen hat (bekomme teilweise halbleere Seiten ohne ersichtlichen Grund) und ich auch nicht die Gestaltungsmöglichkeiten wie in longtable/longtabu habe.

Hier mal ein kurzes Beispiel:
\documentclass[	11 pt]{scrbook}
\usepackage{fontspec}
\usepackage{array}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{multicol}
\usepackage{tabularx}
\usepackage[caption2, titles]{ccaption}
\usepackage{longtable}
\usepackage{tabu}
\usepackage{graphicx}
\usepackage{caption}	
\usepackage{amsmath, unicode-math}
\usepackage{nicefrac}
\usepackage{siunitx}

\begin{document}

\begin{longtabu}to\linewidth{XX|XX}
\caption{Tabellenbeschriftung.} \label{tab:test}\\
	\toprule[1pt] 
	\multicolumn{4}{c}{\textbf{Bindungslängen}}\\
	\midrule[1pt]
	\endfirsthead
	\caption*{Fortsetzunf von \tablename\ \thetable} \\
	\toprule[1pt]
	\multicolumn{4}{c}{\textbf{Bindungslängen}}\\
	\midrule[1pt]
	\endhead
	\midrule[0.5pt] \multicolumn{4}{r}{Fortsetzung auf folgender Seite.} \\
	\endfoot
	\endlastfoot
A--B & 2.457(6) &	C--D &	2.495(10) 	\\
eine & sehr & lange & Liste \\
\toprule[1pt]
	\multicolumn{4}{c}{\textbf{Bindungswinkel}}\\
	\midrule[1pt]
A--B--C & 30.9(6) &	C--D--E &	15.65(10) 	\\
eine & weitere & lange & Liste \\
\toprule[1pt]
	\multicolumn{4}{c}{\textbf{D...A-Abstände}}\\
	\midrule[1pt]
A...B & 2.457(6) &	C...D &	2.495(10) 	\\
eine & dritte & lange & Liste \\
\bottomrule[1pt]
\end{longtabu}
\end{document}

Für dieses Beispiel bräuchte ich 4 verschiedene Tabellenköpfe: (1) Für die erste Seite, (2) für die Seiten mit "Bindungslängen", (3) für die Seiten mit "Winkeln" und (4) für die weiteren Abstände. Natürlich könnte ich das alles in verschiedene Tabellen unterteilen, finde das aber für mich nicht sinnvoll und ist bei uns an der Uni auch nicht üblich.

Ich habe bei meiner Suche schon einen "Hack" gefunden, der sich auf Summen im Tabellenfuß beschäftigt: Link Leider verstehe ich davon nichts und weiß nicht, wie ich das auf den Kopf übertragen kann.

Ich würde mich freuen, wenn mir hier jemand helfen könnte!


KarlaK

Beitrag von KarlaK »

Das Beispiel aus dem Link funktioniert. Die Lösung ist einfacher als ich erwartet hatte. Ich werde es morgen auf meine eigenen Tabellen übertragen.
Vielen Dank! :)

KarlaK

Beitrag von KarlaK »

Ich habe jetzt versucht, das auf meine Tabellen zu übertragen. Das funktioniert auch soweit, wenn ich nur zwei Tabellenköpfe habe. Nun wollte ich noch einen dritten einrichten und habe dazu analog wie in dem Link (mit LTheadsave und restoreLThead) eine neue Box und Befehle (LTnewheadsave und restoreLTnewhead) definiert.
Leider funktioniert das nicht. Es nimmt immer nur einen der beiden neuen Tabellenköpfe an, und zwar den, der zuletzt aufgerufen wird (in meinem MWE wäre das LTnewhead, der aber auch schon ab \restoreLThead statt erst ab \restoreLTnewhead erscheint). Wo liegt mein Fehler?
\documentclass[11 pt]{scrbook}
\usepackage{fontspec}
\usepackage{array}
\usepackage{booktabs}
\usepackage{multirow}
\usepackage{multicol}
\usepackage{tabularx}
\usepackage[caption2, titles]{ccaption}
\usepackage{longtable}
\usepackage{tabu}
\usepackage{graphicx}
\usepackage{caption}  
\usepackage{amsmath, unicode-math}
\usepackage{siunitx}

\begin{document}

\newbox\LTheadsave
\newbox\LTnewheadsave
\makeatletter
   \newcommand\saveLThead{\noalign{\global\setbox\LTheadsave\copy\LT@head}}
   \newcommand\restoreLThead{\noalign{\global\setbox\LT@head\copy\LTheadsave}}
   \newcommand\saveLTnewhead{\noalign{\global\setbox\LTnewheadsave\copy\LT@head}}
   \newcommand\restoreLTnewhead{\noalign{\global\setbox\LT@head\copy\LTnewheadsave}}
\makeatother
\setcounter{LTchunksize}{2}

\begin{longtabu}to\linewidth{XX|XX}
   \caption{Tabellenbeschriftung.} \label{tab:test}\\
   \toprule[1pt]
   \multicolumn{4}{c}{\textbf{Bindungslängen}}\\
   \midrule[1pt]
\endfirsthead
   \caption*{Fortsetzung von \tablename\ \thetable} \\
   \toprule[1pt]
   \multicolumn{4}{c}{\textbf{Bindungswinkel}}\\
   \midrule[1pt]
\endhead\saveLThead
   \toprule[1pt]
   \multicolumn{4}{c}{\textbf{D...A-Abstände}}\\
   \midrule[1pt]
\endhead\saveLTnewhead
   \toprule[1pt]
   \multicolumn{4}{c}{\textbf{Bindungslängen}}\\
   \midrule[1pt]
\endhead
   \midrule[0.5pt] \multicolumn{4}{r}{Fortsetzung auf folgender Seite.} \\
\endfoot
\endlastfoot
   A--B & 2.457(6) &   C--D &   2.495(10)    \\
   eine & sehr & lange & Liste \\
   \toprule[1pt]
   \multicolumn{4}{c}{\textbf{Bindungswinkel}}\\
   \midrule[1pt]
   A--B--C & 30.9(6) &   C--D--E &   15.65(10)    \\ \restoreLThead
   eine & weitere & lange & Liste \\
   \toprule[1pt]
   \multicolumn{4}{c}{\textbf{D...A-Abstände}}\\
   \midrule[1pt]
   A...B & 2.457(6) &   C...D &   2.495(10)    \\ \restoreLTnewhead
   eine & dritte & lange & Liste \\
   \bottomrule[1pt]
\end{longtabu}

\end{document}

Antworten