PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : longtable dynamischer Kopf / Suptertabular Umbruch Problem



Mothman
27-09-2012, 11:51
Hallo,

fast alle Probleme mit LaTeX konnte ich bisher erfolgreich durch Stöbern im Internet lösen, jetzt habe ich eins, zu dem ich bisher keine Lösung gefunden habe:

Vorgeschichte:
Ich habe ein Drucksystem, dass mit Hilfe einer Scriptsprache dynamisch LaTeX-Code generiert und als PDF anzeigt. Unter anderem habe ich da ein Druckmodul für Rechnungen, das im Prinzip aus einem Dinbrief (\documentclass{dinbrief}) besteht, in dem sich als Inhalt eine longtable mit den einzelnen Rechnungspositionen befindet. Bis dahin funktioniert alles einwandfrei, jetzt sollte allerdings ein Übertrag (Zwischensumme am Anfang jeder Seite) dazu kommen, also brauche ich dazu entweder dynamische Kopf-/Fußzeilen in der longtable oder ich fange irgendwie den Seitenumbruch ab und baue den Übertrag mit Hilfe von AddToShipoutPicture-Graffel oder so etwas in der Art ein.

Lösungsversuche:
- Das mit dem Abfangen des Seitenumbruches habe ich versucht, aber das hat nicht konsequent funktioniert, darum habe ich das erstmal wieder verworfen und die Methode mit den dynamischen Kopf-/Fußzeilen versucht.

- Da die longtable keine dynamischen Kopf-/Fußzeilen beherrscht, habe ich das mit der Supertabular probiert, die für meinen Fall eigentlich optimal wäre, wenn sie die Seitenumbrüche genau so gut hin bekäme wie die longtable, was aber halt nicht der Fall ist.


Mein unmittelbares Problem ist nun, dass die Supertabular manchmal erst auf der zweiten Seite anfängt und auf der ersten Seite dann extrem viel Platz lässt. Das lässt sich zum Teil mit Hilfe von \shrinkheight gut beheben, aber da der Inhalt der einzelnen Tabellenzeilen dynamisch ist, kann ich das \shrinkheight nicht zuverlässig benutzen, da es in manchen Situationen dann trotz \shrinkheight wieder zu dem Phänomen kommt, dass die Tabelle erst auf der zweiten Seite anfängt oder auf einer Seite weniger Inhalt ist, als drauf gepasst hätte.

Die liebste Lösung für das Problem wäre mir, wenn es eine Möglichkeit gäbe, der longtable beizubringen die Kopf- und Fußzeile dynamisch zu ändern, so wie das in der Supertabular möglich ist.
Ich bin bereits auf Lösungen gestoßen, in der analog zu \endfirsthead noch \endsecondhead eingeführt wurde, um drei verschiedene Kopfzeilen realisieren zu können, was mir aber auch nicht wirklich weiter hilft, weil es vorkommen kann, dass ich 30-40 verschiedene Kopfzeilen brauche.
(siehe dazu das (http://tex.stackexchange.com/questions/39657/three-different-captions-longtable))

Ich weiß, dass in der longtable Boxen für die Kopf- und Fußzeilen benutzt werden (\LT@head, \LT@firsthead, \LT@foot und \LT@lastfoot), habe aber noch keine Möglichkeit gefunden diese Boxen innerhalb der Tabelle zu manipulieren, da ich von Plain-TeX nicht viel Ahnung habe. Ich habe dahingehend auch schon Lösungsansätze gesehen, in der die output-Funktion (\LT@output) der longtable umgeschrieben wurde, das hat mich aber bisher noch zu keiner benutzbaren Lösung geführt.
(siehe dazu das (https://groups.google.com/forum/?hl=en&fromgroups=#topic/de.comp.text.tex/Eksyh4TZoho) und das (https://groups.google.com/forum/?hl=en&fromgroups=#searchin/de.comp.text.tex/longtable$20lt@head/de.comp.text.tex/6pQv60BWNfE/i11SY4WB0w0J))

Was ich also letztlich brauche, ist eine Kombination aus longtable und Supertabular, die dynamische Kopf-/Fußzeilen beherrscht und ordentlich umbricht, ich würde mich sehr freuen, wenn mir da irgendwer weiterhelfen könnte.
Alternativ wäre mir auch eine Lösung recht, mit der ich der Supertabular beibringen kann, zuverlässige Seitenumbrüche zu machen.

Hier noch ein paar Keywords für die Suchmaschinen:
dynamische Kopfzeile Fußzeile, supertabular, longtable, Rechnung Zwischensumme Übertrag

Diesen Thread habe ich hier (http://www.golatex.de/longtable-dynamischer-kopf-suptertabular-umbruch-problem-t9579.html) ebenfalls im goLatex-Forum eröffnet.

Folgendes Minimalbeispiel zeigt, dass die Supertabular ohne das \shrinkheight nicht zuverlässig die Seite umbricht:


\documentclass[10pt]{article}

\usepackage{supertabular}
\usepackage{blindtext}
\usepackage{array} % fuer newcolumntype
\usepackage{eso-pic} % fuer den Seitenrahmen

% fuer die farbig hinterlegten Tabellenzeilen
\usepackage{colortbl}
\usepackage{xcolor}

\newcolumntype{C}[1]{>{\centering\arraybackslash}p{\dimexpr #1 - 2\tabcolsep}}
\newcommand{\myPageFrame}{\AddToShipoutPicture{\At TextLowerLeft{\framebox(\LenToUnit{\textwidth},\Le nToUnit{\textheight}){}}}}
\myPageFrame{}

\parindent0pt
%################################################# ##########


\begin{document}
\blindtext{}\blindtext{}\newline{}
{\Large\textbf{Nach dieser Zeile sollte die Tabelle anfangen}}\newline{}
\begin{supertabular}{C{0.25\textwidth}C{0.25\textw idth}C{0.25\textwidth}C{0.25\textwidth}}
1 & Test & Test & \begin{tabular}[t]{ll}
Test & 1 \\
Test & 2 \\
Test & 3 \\
Test & 4 \\
\end{tabular} \\ %\shrinkheight{6cm}

\rowcolor{lightgray} 2 & Test & Test & \begin{tabular}[t]{ll}
Test & 1 \\
Test & 2 \\
Test & 3 \\
Test & 4 \\
\end{tabular} \\

3 & Test & Test & \begin{tabular}[t]{ll}
Test & 1 \\
Test & 2 \\
Test & 3 \\
Test & 4 \\
\end{tabular} \\

\rowcolor{lightgray} 4 & Test & Test & \begin{tabular}[t]{ll}
Test & 1 \\
Test & 2 \\
Test & 3 \\
Test & 4 \\
\end{tabular} \\

5 & Test & Test & \begin{tabular}[t]{ll}
Test & 1 \\
Test & 2 \\
Test & 3 \\
Test & 4 \\
\end{tabular} \\

\rowcolor{lightgray} 6 & Test & Test & \begin{tabular}[t]{ll}
Test & 1 \\
Test & 2 \\
Test & 3 \\
Test & 4 \\
\end{tabular} \\

7 & Test & Test & \begin{tabular}[t]{ll}
Test & 1 \\
Test & 2 \\
Test & 3 \\
Test & 4 \\
\end{tabular} \\

\end{supertabular}

\end{document}

u_fischer
27-09-2012, 12:01
Die liebste Lösung für das Problem wäre mir, wenn es eine Möglichkeit gäbe, der longtable beizubringen die Kopf- und Fußzeile dynamisch zu ändern,

Im Prinzip geistert dazu der sog. "longtable hack" rum, der hier seinen Ursprung hatte:

https://groups.google.com/forum/?hl=de&fromgroups=#!msg/de.comp.text.tex/Eksyh4TZoho/oCs0qcthcWgJ

(wobei ich heutzutage kein Postscript sondern die entsprechenden pdf-Primitiven für das Speichern der Positionen nehmen würde).