PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zeilenabstände in longtable-Umgebung



DieterH
24-01-2010, 08:22
Hallo,

in einer mit „longtable“ erzeugten Tabelle gibt es („logische“) Zeilen, die nur aus einer einzigen „körperlichen“ Zeile („Zusatzzeile“) bestehen, andere wiederum bestehen aus mehr als einer körperlichen Zeile. Die logischen Zeilen sollen von einander durch einen größeren Zeilenabstand (\tabularnewline[\lenGROSS]) getrennt werden als eine Zusatzzeile von ihrer vorangehenden (\tabularnewline[\lenKLEIN]). Die beiden vertikalen Abstände sollen im gesetzten Text einen angenehmen optischen Eindruck bewirken und dem Leser die Struktur der Zeilen vermitteln.

Wie die beigefügte PDF-Datei zeigt, funktioniert das nicht wie gewünscht. Besteht die logische Zeile nur aus einer einzigen körperlichen, ist ihr Abstand zur nächsten richtig. Das gleiche gilt auch für eine logische Zeile, die aus einer KURZEN Zusatzzeile besteht; allerdings sollte die Zusatzzeile näher an der vorangehenden Zeile gesetzt sein (\lenKLEIN).

Weist die logische Zeile eine LANGE Zusatzzeile auf, ist der Abstand zur nächst folgenden logischen Zeile klein, trotz \tabularnewline[\lenGROSS]. Legt bei \multicolumn die Ursache des Problems? \multicolumn lässt nur drei Parameter zu.

Fragen:
1. Mit welchen Angaben werden die Zeilenabstände wie gewünscht gesetzt?
2. Die in der ersten Frage angesprochene optische Trennung der Zeilen untereinander möchte ich ergänzen durch wechselweises Einfärben (weiß – hellgrau). Wie kann ich eine GANZE Zeile einfärben? Zum Hintergrund dieser Frage: Die zu erstellende Tabelle erzeuge ich durch ein Skript as einer CSV-Datei. Ich möchte nach Möglichkeit sicherstellen, dass der erzeugte LaTeX-Quellcode mit den Anweisungen für das wechselweise Einfärbe halbwegs „lesbar“ bleibt.
3. Gibt es weitere „sinnvolle“ Verfahren zur Abgrenzung der Zeilen untereinander?

Im konkreten Fall wird der „lange“ Text in \multicolumn NICHT so lang sein wie der durch \blindtext erzeugte.

Vielen Dank im voraus.
Gruß
Dieter

voss
24-01-2010, 12:03
\documentclass{scrbook}
%
\usepackage{ucs}% % Allow Unicode
\usepackage[utf8x]{inputenc}% % Umlaute in der Eingabe
\usepackage[T1]{fontenc}% % Umlaute in der Ausgabe
\usepackage[ngerman]{babel}% % Sprachenpaket

\usepackage{blindtext}
\usepackage{longtable}
\usepackage{array,ragged2e}
%
\newlength{\lenA}
\newlength{\lenB}
\newlength{\lenC}
\newlength{\lenGROSS}
\newlength{\lenKLEIN}
%
\setlength{\lenA}{4cm}
\setlength{\lenB}{5cm}
\setlength{\lenC}{6cm}
\setlength{\lenGROSS}{0.60em}
\setlength{\lenKLEIN}{0.18em}
%
\def\xstrut{\rule[-2\lenGROSS]{0pt}{3\lenGROSS}}
\newcolumntype{P}[1]{>{\RaggedRight}p{#1}}
%
\begin{document}
%
\begin{longtable}[c]{rp{\lenA}p{\lenB}p{\lenC}}
15 & Zeile 1 & Spalte 3 & Spalte 4 \tabularnewline[\lenGROSS]
%
16 & Zeile 2 & Spalte 3 & Spalte 4 \tabularnewline[\lenKLEIN]
16 & Zusatz & \multicolumn{2}{P{\dimexpr\lenA+\lenB+\tabcolsep}} {kurzer Text}\xstrut \tabularnewline[\lenGROSS]
%
17 & Zeile 3 & Spalte 3 & Spalte 4 \tabularnewline[\lenKLEIN]
17 & Zusatz & \multicolumn{2}{P{\dimexpr\lenA+\lenB+\tabcolsep}} {\blindtext\xstrut} \tabularnewline[\lenGROSS]
%
18 & Zeile 4 & Spalte 3 & Spalte 4 \tabularnewline[\lenKLEIN]
18 & Zusatz & \multicolumn{2}{P{\dimexpr\lenA+\lenB+\tabcolsep}} {\blindtext\newline\blindtext\xstrut} \tabularnewline[\lenGROSS]
%
38 & Zeile 5 & Spalte 3 & Spalte 4 \tabularnewline[\lenGROSS]
\end{longtable}
\end{document}


Herbert

DieterH
24-01-2010, 19:36
Herbert,

vielen Dank!
Funktioniert wie gewünscht.

Darf ich noch auf Frage 2 zurückkommen: Einfärben einer ganzen Tabellenzeile.

Gruss
Dieter

mechanicus
24-01-2010, 19:39
Darf ich noch auf Frage 2 zurückkommen: Einfärben einer ganzen Tabellenzeile.

http://ftp.gwdg.de/pub/ctan/macros/latex/contrib/xcolor/xcolor.pdf

Gruß
Marco

voss
24-01-2010, 21:31
http://ftp.gwdg.de/pub/ctan/macros/latex/contrib/xcolor/xcolor.pdf


bessere URL: http://mirror.ctan.org/macros/latex/contrib/xcolor/xcolor.pdf

ist extra unter Mühen so eingerichtet worden.

Herbert

DieterH
24-01-2010, 23:05
Hallo,

In Weiterführung meines ursprünglichen Beispiels färbe ich die Zeilen abwechselnd ein. Unter "Zeile" soll die "logische" Zeile verstanden sein, nicht die körperliche.

Das abwechselnde Einfärben erfolgt durch Setzen von "\rowcolor{lightgray}" vor allen körperlichen Zeilen der betreffenden logischen Zeilen.

Wie eingangs erwähnt, arbeite ich auch mit "\multicolumn". Hier werden nur Teile einer Zeile eingefärbt (siehe die generierte PDF-Datei aus MB).

Wie erreiche ich das Einfärben der ganzen Zeile, auch wenn diese im LaTeX-Quellcode "\multicolumn" enthält?



\documentclass{scrbook}
%
\usepackage{ucs}% % Allow Unicode
\usepackage[utf8x]{inputenc}% % Umlaute in der Eingabe
\usepackage[T1]{fontenc}% % Umlaute in der Ausgabe
\usepackage[ngerman]{babel}% % Sprachenpaket

\usepackage{blindtext}
\usepackage{longtable}
\usepackage[table,rgb]{xcolor}
\usepackage{array,ragged2e}
%
\newlength{\lenA}
\newlength{\lenB}
\newlength{\lenC}
\newlength{\lenGROSS}
\newlength{\lenKLEIN}
%
\setlength{\lenA}{4cm}
\setlength{\lenB}{5cm}
\setlength{\lenC}{6cm}
\setlength{\lenGROSS}{0.60em}
\setlength{\lenKLEIN}{0.18em}
%
\def\xstrut{\rule[-2\lenGROSS]{0pt}{3\lenGROSS}}
\newcolumntype{P}[1]{>{\RaggedRight}p{#1}}
%
\begin{document}
%
\begin{longtable}[c]{rp{\lenA}p{\lenB}p{\lenC}}
\rowcolor{lightgray}
15 & Zeile 1 & Spalte 3 & Spalte 4 \tabularnewline[\lenGROSS]
%
16 & Zeile 2 & Spalte 3 & Spalte 4 \tabularnewline[\lenKLEIN]
16 & Zusatz & \multicolumn{2}{P{\dimexpr\lenA+\lenB+\tabcolsep}} {kurzer Text}\xstrut \tabularnewline[\lenGROSS]
%
\rowcolor{lightgray}
17 & Zeile 3 & Spalte 3 & Spalte 4 \tabularnewline[\lenKLEIN]
\rowcolor{lightgray}
17 & Zusatz & \multicolumn{2}{P{\dimexpr\lenA+\lenB+\tabcolsep}} {\blindtext\xstrut} \tabularnewline[\lenGROSS]
%
18 & Zeile 4 & Spalte 3 & Spalte 4 \tabularnewline[\lenKLEIN]
18 & Zusatz & \multicolumn{2}{P{\dimexpr\lenA+\lenB+\tabcolsep}} {\blindtext\newline\blindtext\xstrut} \tabularnewline[\lenGROSS]
%
\rowcolor{lightgray}
38 & Zeile 5 & Spalte 3 & Spalte 4 \tabularnewline[\lenGROSS]
\end{longtable}
\end{document}

DieterH
27-01-2010, 14:04
Hallo,

gibt es wirklich keine Lösung zu meinem Problem (Einfärben einer Zeile funktioniert nicht richtig, wenn \multicolumn in der Zeile auftaucht).

Gruss
Dieter

voss
27-01-2010, 14:13
gibt es wirklich keine Lösung zu meinem Problem (Einfärben einer Zeile funktioniert nicht richtig, wenn \multicolumn in der Zeile auftaucht).



\documentclass{scrbook}
%
\usepackage{ucs}% % Allow Unicode
\usepackage[utf8x]{inputenc}% % Umlaute in der Eingabe
\usepackage[T1]{fontenc}% % Umlaute in der Ausgabe
\usepackage[ngerman]{babel}% % Sprachenpaket

\usepackage{blindtext}
\usepackage{longtable}
\usepackage[table,rgb]{xcolor}
\usepackage{array,ragged2e}
%
\newlength{\lenA}
\newlength{\lenB}
\newlength{\lenC}
\newlength{\lenGROSS}
\newlength{\lenKLEIN}
%
\setlength{\lenA}{4cm}
\setlength{\lenB}{5cm}
\setlength{\lenC}{6cm}
\setlength{\lenGROSS}{0.60em}
\setlength{\lenKLEIN}{0.18em}
%
\def\xstrut{\rule[-2\lenGROSS]{0pt}{3\lenGROSS}}
\newcolumntype{P}[1]{>{\RaggedRight}p{#1}}
%
\begin{document}
%
\begin{longtable}{rp{\lenA}p{\lenB}p{\lenC}}
\rowcolor{lightgray}
15 & Zeile 1 & Spalte 3 & Spalte 4 \tabularnewline[\lenGROSS]
%
16 & Zeile 2 & Spalte 3 & Spalte 4 \tabularnewline[\lenKLEIN]
16 & Zusatz & \multicolumn{2}{P{\dimexpr\lenA+\lenB+\tabcolsep}} {kurzer Text}\xstrut \tabularnewline[\lenGROSS]
%
\rowcolor{lightgray}
17 & Zeile 3 & Spalte 3 & Spalte 4 \tabularnewline[\lenKLEIN]
\rowcolor{lightgray}
17 & Zusatz & \multicolumn{2}{>{\cellcolor{lightgray}}P{\dimexpr\lenB+\lenC+2\tab colsep}}{%
\blindtext\xstrut} \tabularnewline[\lenGROSS]
%
18 & Zeile 4 & Spalte 3 & Spalte 4 \tabularnewline[\lenKLEIN]
18 & Zusatz & \multicolumn{2}{P{\dimexpr\lenB+\lenC+\tabcolsep}} {\blindtext\newline\blindtext\xstrut} \tabularnewline[\lenGROSS]
%
\rowcolor{lightgray}
38 & Zeile 5 & Spalte 3 & Spalte 4 \tabularnewline[\lenGROSS]
\end{longtable}
\end{document}

DieterH
27-01-2010, 14:49
Danke!

Gruss
Dieter