PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Abstände zwischen Tabellenzeilen



Xenara
08-06-2010, 09:14
Hi zusammen,

ich habe versucht, eine Tabelle mit vertikal zentrierten Zellen zu basteln, wobei zusätzlich zwischen einigen Zeilen ein grösserer Abstand sein soll.

Das vertikale Zentrieren geht ja mit m{...} aus dem array-Paket. Nur, wenn die letztes Spalte so definiert ist, funktioniert der zusätzliche Zeilenabstand mit \\[...] nicht mehr richtig:

\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{array}

\begin{document}

\begin{tabular}{m{4cm}m{5cm}}
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text \\[3cm]
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text \\
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text
\end{tabular}

\end{document}


Mit \vspace*{3cm} hats auch nicht funktioniert. Kann man die Zentrierung irgendwie "löschen" vor dem Ende der Zeile?

Weiss jemand eine Lösung dafür?

Viele Grüsse,
Xenara

voss
08-06-2010, 09:18
ich habe versucht, eine Tabelle mit vertikal zentrierten Zellen zu basteln, wobei zusätzlich zwischen einigen Zeilen ein grösserer Abstand sein soll.

Das vertikale Zentrieren geht ja mit m{...} aus dem array-Paket. Nur, wenn die letztes Spalte so definiert ist, funktioniert der zusätzliche Zeilenabstand mit \\[...] nicht mehr richtig:

Weiss jemand eine Lösung dafür?


die letzte Spalte nicht als m, sondern als p definieren.

\begin{tabular}{m{4cm}p{5cm}}

Herbert

Xenara
08-06-2010, 09:55
die letzte Spalte nicht als m, sondern als p definieren.

Dann stimmt aber die Ausrichtung nicht mehr, wenn nur die letzte Spalte mehrzeilig ist:

\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{array}

\begin{document}

\subsection*{1. Tabelle}
\begin{tabular}{m{4cm}p{5cm}}
Text & Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. \\[3cm]
Text & Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. \\
Text & Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. \\
Text & Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. \\
\end{tabular}

\subsection*{2. Tabelle}
\begin{tabular}{m{4cm}p{5cm}}
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text \\[3cm]
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text \\
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text \\
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text \\
\end{tabular}

\end{document}


Gibt es wirklich keine Möglichkeit, die vertikale Zentrierung wieder auszuschalten, sobald die Zeile/letzte Zelle beendet wird? Das wäre sehr schade, wenn man die prima Zelldefinitionen nur unter Einschränkungen nutzen kann.

tral
08-06-2010, 10:02
Einfach den Abstand in eine extra Zeile packen?



\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{array}

\begin{document}

\begin{tabular}{m{4cm}m{5cm}}
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. &
Text \\

\\[3cm]

Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text \\
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text
\end{tabular}

\end{document}


Christian.

Xenara
08-06-2010, 10:09
@tral: Das funktioniert zwar soweit, aber es sind ja dann keine echten 3cm Abstand, sondern 3cm + Zeilenhöhe. Wenn man den Abstand in verschiedenen Tabellen verwenden will, muss man das dann wieder irgendwie abziehen.

u_fischer
08-06-2010, 10:22
Der Abstand wird durch eine unsichtbare \rule erzeugt, die in der m-Spalte landet und diese dadurch vergrößert. (b-Spalten hätten das gleiche Problem).

Wenn du keine vertikalen Linien benutzt, kannst du \@xargarraycr umdefinieren oder direkt \\\noalign{\vskip3cm} benutzen (die Linien bekommen dadurch Löcher). Wenn du Linien benutzt, ist der beste Weg wohl eine leere Spalte am Ende.

Ich weiß nicht, ob man in array.sty irgendwie so umschreiben kann, dass das Problem verschwindet, aber zumindest ein Hinweis in der Doku wäre nicht schlecht. Du kannst ja einen entsprechenden Bug-Report machen.


\documentclass[parskip]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}

\usepackage{array}

\begin{document}
\begin{tabular}{m{4cm}|m{5cm}|}
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text\newline abc \\[3cm]
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text\newline abc \\
\end{tabular}

\begin{tabular}{m{4cm}|m{5cm}|@{}l@{}}
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text\newline abc &\\[3cm]
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text\newline abc \\
\end{tabular}


\bigskip
\makeatletter
\def\@xargarraycr#1{\cr\noalign{\vskip #1}}
\makeatother

\begin{tabular}{m{4cm}|m{5cm}|}
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text\newline abc \\[3cm]
Längerer Text über mehrere Zeilen der in der Zelle umbrochen wird. & Text\newline abc \\
\end{tabular}

\end{document}

Xenara
08-06-2010, 10:38
Suuuuuuper! Vielen vielen Dank für die umfangreiche Erklärung und Lösung! :)
Vertikale Linien verwende ich sowieso nicht, daher funktioniert \noalign{\vskip...} prima.

Bugreport ist eine gute Idee, hab sowas nur noch nie gemacht... Funktioniert das über diese Seite? http://www.latex-project.org/bugs-upload.html