PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mehrzeiliger Tabellenfuß in longtable



Lektor
08-08-2009, 22:07
Liebe Latex-Gemeinde,

als Latex-Neuling hab ich viele Fragen, die ich mir fleißig selbst zu beantworten versuche. Aber folgendes Problem konnte ich trotz intensiver Recherche nicht lösen.
Ich habe eine longtable-Umgebung, in der im Tabellenfuß, wie in geisteswissenschaftlichen Texten üblich, eine Quellenangabe stehen soll. Diese ist jedoch zu lang für die Tabelle. Wenn ich also meine Quellenangabe schreibe, wird sie über die Tabellenbreite hinaus gesetzt und die Tabelle wird entsprechend ebf. zu breit. Deshalb benötige ich also eine zweite Zeile im Tabellenfuß. Alle mir bekannten Tabellenumbruchbefehle funktionieren nicht innerhalb des longtable-Anfangs. Ich hab mal folgendes Minimalbeispiel:

%Präambel
\documentclass[a4paper,11pt,titlepage]{scrbook}

\usepackage[ngerman] {babel}
\usepackage[ansinew]{inputenc}
%Mit T1 Fontencoding werden Worte mit Umlauten automatisch getrennt; auch nötig für Arial-Schriftart:
\usepackage[T1]{fontenc}
%Für Arial-Schrift:
\usepackage[scaled]{uarial}
\usepackage{longtable}
% Für top-, mid- und bottomrule
\usepackage{booktabs}

\newcommand{\f}{\textbf}

% Longtable-Definitionen
\setlength\LTleft{0pt}
\setlength\LTright{0pt}
\setlength\LTpre{5pt}
\setlength\LTpost{5pt}

\begin{document}

\chapter{Überschrift}
blabla blabla blabla blabla.
\begin{longtable}{@{}p{0.03\textwidth}p{0.66\textw idth}rr@{}}
\caption{Tabellenüberschrift soll oben stehen}\\
\toprule
\multicolumn{2}{c}{\f{erstes Feld über zwei Spalten}} &
\multicolumn{2}{c}{\f{2. Feld über 2. Spalten}}\\
\cmidrule(lr){3-4}
&
\multicolumn{1}{c}{} & %warum muss ich hier noch eine "Leerzeile" einfügen?
\multicolumn{1}{r}{\f{absolut}} &
\multicolumn{1}{r}{\f{in Prozent}}\\
\cmidrule(r){1-2}\cmidrule(lr){3-3}\cmidrule(l){4-4}
\endfirsthead
\multicolumn{2}{l}{\f{erstes Feld über zwei Spalten}} &
\multicolumn{1}{r}{\f{absolut}} &
\multicolumn{1}{r}{\f{in Prozent}}\\
\cmidrule(r){1-2}\cmidrule(lr){3-3}\cmidrule(l){4-4}
\endhead
\bottomrule
\multicolumn{4}{r}{\emph{Weiter auf der nächsten Seite}}
\endfoot
\bottomrule
\multicolumn{4}{l}{\small{Quelle: blabla blabla blabla blabla blabla blabla; blabla blabla blabla blabla blabla blabla blabla; hier ungefähr müsste ein Zeilenumbruch her blabla blabla}}
\endlastfoot
1 & Text der ersten, eigentlich schon zweiten Spalte, erste Zeile & 100000 & 0,1 \tabularnewline[1pt]
2 & Text der ersten, eigentlich schon zweiten Spalte, zweite Zeile & 10000 & 0,2 \tabularnewline[1pt]
\end{longtable}
\end{document}
Wenn ich vor \endlastfoot nur schreibe:
...
\endfoot
\bottomrule
\multicolumn{4}{l}{\small{Quelle: blabla blabla}}
\endlastfoot
sieht meine Tabelle so aus, wie sie soll.
Querformat ist keine Lösung, denn sonst haut die Tabelle ja soweit hin.

Habt Ihr eine Idee?

Vielen Dank im voraus und beste Grüße.

u_fischer
09-08-2009, 12:26
Der Spaltentyp "l" ist immer einzeilig. Wenn du Zeilenumbruch willst, musst du entweder den Typ "p" benutzen:


\multicolumn{4}{p{0.7\textwidth}}{\small{Quelle: blabla blabla blabla blabla blabla blabla; blabla blabla blabla blabla blabla blabla blabla; hier ungefähr müsste ein Zeilenumbruch her blabla blabla}}


oder manuell den Text auf mehrere \multicolumns verteilen.



&
\multicolumn{1}{c}{} & %warum muss ich hier noch eine "Leerzeile" einfügen?

Du musst keine Leerzeile sondern eine Leerzelle einfügen. Allerdings ist keine \multicolumn nötig, einfach && reicht auch.

Lektor
09-08-2009, 14:11
Vielen Dank Ulrike! Das hat mir sehr geholfen. Und auch die andere Unsicherheit mit der Leerzelle (!) ist nun bereinigt.

Ich hoffe, es ist nicht vermessen, gleich noch drei weitere Wehwehchen loszuwerden (mal abgesehen davon, dass die Spaltendefinition in der longtable-Anweisung sicherlich noch perfektionioniert werden könnte!?).

%Präambel
\documentclass[a4paper,11pt,titlepage]{scrbook}
\usepackage[ngerman] {babel}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[scaled]{uarial}
\usepackage{longtable}
\usepackage{booktabs}

\newcommand{\f}{\textbf}

\setlength\LTleft{0pt}
\setlength\LTright{0pt}
\setlength\LTpre{5pt}
\setlength\LTpost{5pt}

\begin{document}

\chapter{Überschrift}
blabla blabla blabla blabla.
\begin{longtable}{@{}p{0.03\textwidth}p{0.66\textw idth}rr@{}}
\caption{Tabellenüberschrift soll oben stehen}\\
\toprule
\multicolumn{2}{l}{\f{erstes Feld über zwei Spalten}} &
\multicolumn{2}{c}{\f{2. Feld über 2. Spalten}}\\
\cmidrule(lr){3-4}
&&
\multicolumn{1}{r}{\f{absolut}} &
\multicolumn{1}{r}{\f{in Prozent}}\\
\cmidrule(r){1-2}\cmidrule(lr){3-3}\cmidrule(l){4-4}
\endfirsthead
\multicolumn{2}{l}{\f{erstes Feld über zwei Spalten}} &
\multicolumn{1}{r}{\f{absolut}} &
\multicolumn{1}{r}{\f{in Prozent}}\\
\cmidrule(r){1-2}\cmidrule(lr){3-3}\cmidrule(l){4-4}
\endhead
\bottomrule
\multicolumn{4}{r}{\emph{Weiter auf der nächsten Seite}}
\endfoot
\bottomrule
\multicolumn{4}{p{1\textwidth}}{\small{Quelle: blabla blabla blabla blabla blabla blabla; blabla blabla blabla blabla blabla blabla blabla; hier ungefähr müsste ein Zeilenumbruch her blabla blabla}}
\endlastfoot
1 & Text der ersten, eigentlich schon zweiten Spalte, erste Zeile & 100000 & 0,1 \tabularnewline[1pt]
2 & Text der ersten, eigentlich schon zweiten Spalte, zweite Zeile & 10000 & 0,2 \tabularnewline[1pt]
\end{longtable}
\end{document}

1. Ich hätte gerne die Beschriftung der beiden ersten Spalten ("erstes Feld über zwie Spalten") wirklich komplett links ausgerichtet und nicht leicht eingerückt, wie es bis jetzt gesetzt wird.
2. Das gilt auch für die Quellenangabe im Tabellenfuß.
3. Es wäre zudem schön, wenn ich die zweite Zeile im Tabellenfuß soweit einrücken könnte wie den Text hinter "Quelle: " in der ersten Zeile.

Kann mir jemand eins oder mehrere Probleme lösen helfen?

Vielen Dank und Gruß.
Jan

u_fischer
09-08-2009, 14:48
Den Abstand vor einer Zelle kannst du mit @{} in der Spaltendeklaration unterdrücken. Wegen des Einzuges würde ich wahrscheinlich einfach eine innere tabelle benutzen:
\multicolum ...{\begin{tabular}[t]{lp{irgendwas}Quelle &blablab\end{tabular}}

Lektor
09-08-2009, 18:04
Hab ganz vielen Dank, es hat wieder sehr gut hingehauen. Ich wusste nicht, dass man @{} neben der Tabellen- auch in der Spaltendeklaration verwenden kann. Und auch die Tabelle in der Tabelle erfüllt meine Wünsche!

Leider bin ich immer noch nicht bei meiner perfekten Tabelle angekommen:
1. Warum bekomme ich mit
\begin{longtable}{@{}p{0.03\textwidth}@{}p{0.77\te xtwidth}p{0.1\textwidth}p{0.1\textwidth}@{}} die Tabelle nicht auf eine Textbreite? Die Breitenangaben ergeben doch insgesamt 1!? Muss ich da die Spaltenabstände noch abziehen, und wenn ja, wie groß sind sie, also wieviel Prozent nehmen sie ein?
Auch wenn ich statt 0.77\textwidth 0.67\textwidth oder
\begin{longtable}{@{}p{0.03\textwidth}@{}p{0.67\te xtwidth}rr@{}} eingebe, ist die Tabelle insgesamt ein ganz klein wenig breiter als der Fließtext.
Außerdem weiß ich nicht, wie ich die Spalten rechts ausrichten kann, wenn ich mit dem Parameter p eine bestimmte Breite definiere; in diesem Fall wird die Spalte immer linksbündig gesetzt. Die beiden rechten Spalten sollen also a) gleich breit, b) maximal so breit wie der breiteste Spalteneintrag in der gesamten Tabelle sein und c) die Seiten- bzw. Textbreite insgesamt exakt ausfüllen.

2. Im Tabellenkopf der ersten Seite meiner longtable-Umgebung stehen ja "absolut" und "in Prozent" quasi als zweite Zeile der Tabelle (s. den Code weiter oben in diesem Thread). Hier hätte ich gerne einen etwas kleineren Abstand zwischen den midrule-Linien oben und unten und dem Tabellentext, also "absolut" und "in Prozent". Ich habe sie nun schon \small gesetzt, aber da könnte noch mehr Platz eingespart werden. (Übrigens: Gibt es eine Größe zwischen \small und \tiny?)

3. Am Ende soll eine "Gesamt"-Zeile in zwei bottomrule-Linien eingefasst sein. Das funktioniert auch so weit, bloß liegt der Text nicht in der Mitte der beiden Linien, sondern leicht nach oben versetzt. Was kann ich da machen?

4. und letztens: Wie kann ich den Abstand der beiden Zeilen der Quellenangabe (innere Tabelle) im Tabellenfuß ansprechen, also ich hätte ihn gern etwas kleiner?

Ich hoffe, niemanden zu beleidigen, weil die Lösungen so einfach sind. Meine Recherchen haben mich leider nicht weitergeführt, möglicherweise sind die Problemchen doch eine Spur zu speziell!?

Jedenfalls bin ich jedem, der antwortet, sehr dankbar, natürlich auch und besonders Dir, Ulrike.

Gruß
Jan

u_fischer
09-08-2009, 18:55
Der Abstand zwischen Spalten ist -- falls du ihn nicht mit @{} unterdrückst --
2x\tabcolsep + \arrayrulewidth (falls eine Linie da ist, und du array.sty benutzt):


\documentclass[a4paper,11pt,titlepage]{scrbook}

\usepackage[ngerman] {babel}
\usepackage[ansinew]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{array}
\arrayrulewidth=1cm
\tabcolsep=2cm
\begin{document}
x\begin{tabular}{l|l}
a & b
\end{tabular}y
\end{document}

Die Größe der Zeilen richtet sich nach der Schriftgröße, die zu Beginn der Tabelle aktiv ist. In der Tabelle kannst du den Abstand nur vergrößern aber nicht verkleinern. Zwischen \small + \tiny liegt \footnotesize.

Lies mal die Dokumentationen von array, tabularx, ltxtable und diese FAQ:

http://www.tex.ac.uk/cgi-bin/texfaq2html?label=fixwidtab
http://www.tex.ac.uk/cgi-bin/texfaq2html?label=varwidcol

Lektor
10-08-2009, 00:22
Nochmals danke.
Also mein 1. Problem ist nicht zuletzt dank Deiner Hilfe gelöst.
Es war tatsächlich der Spaltenabstand: Indem ich \tabcolsep=0mm gesetzt habe, konnte ich mit
\begin{longtable}{@{}p{0.04\textwidth}@{}p{0.72\te xtwidth}
>{\RaggedLeft}p{0.12\textwidth}>{\RaggedLeft}p{0.12\textwidth}@{}} meine 100 % Textbreite ausfüllen und ansprechen, wie es die Breiten der einzelnen Spalten in der Tabelle vorgegeben haben. Allerdings, wie zu sehen ist, nur manuell. Aber zumindest sind sie so unabhängig vom Satzspiegel; wenn ich diesen ändere, müsste die Tabelle auf Textbreite bleiben.

Die Probleme 2 bis 4 harren noch einer Lösung. Ich habe aber (natürlich) noch nicht alle Dokumentationen und FAQs durch (als Latex-Neuling ist dies mitunter auch recht enervierend, da viele Begriffe einfach mal noch unbekannt sind - nichtsdestotrotz hat mich das Latex-Virus voll erwischt).

Falls also noch jemand Tips hat ...
Ansonsten dokumentiere ich meine Lösungen, sobald ich sie gefunden habe.

Gute Nacht allerseits.
Jan

u_fischer
10-08-2009, 09:24
Wie ich schon sagte: Der Zeilenabstand wird durch die Schriftgröße (bzw dem zu ihr gehörenden Zeilenabstand vor der Tabelle bestimmt). Wenn du in kleiner haben willst, kannst du vor der Tabelle eine kleinere Schriftgröße wählen, oder du benutzt \\[-Xpt] (gelegentlich schwierig bei Linien). Größer bekommst du die Zeilen durch unsichtbare "Stützbalken" (\rule)


\listfiles
\documentclass[10pt,parskip]{scrartcl}

\begin{document}
\begin{tabular}{l}\hline
a\\ b\\\hline
\end{tabular}
\begin{tabular}{l}\hline
a\\[-3pt] b\\\hline
\end{tabular}
\begingroup
\footnotesize
\begin{tabular}{l}\hline
a\\b\\\hline
\end{tabular}
\begin{tabular}{l}\hline
\normalsize a\\\normalsize b\\\hline
\end{tabular}
\begin{tabular}{l}\hline
\rule[-0.5cm]{0pt}{1cm}c\\\hline b\\\hline
\end{tabular}
\endgroup
\end{document}