Ich habe dieses Beispiel als Tabu-Tabelle wie folgt umgesetzt:

Open in writeLaTeX
\documentclass[12pt,a4paper,oneside,parskip]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage{tabu}

\begin{document}
\tabulinesep = 2mm
\begin{tabu} to \linewidth {X[p]|X[m]|X[b]}
  \hline text which is considerably longer than the width of the column  & 
  text which is considerably longer than the width of the column  & 
  text which is considerably longer than the width of the column\\
  \hline
\end{tabu}
\end{document}

Das Ergebnis sieht ähnlich wie in obigem Link aus. Hier die erste Frage: die in dem Link rot markierten Zeilen sind nicht 100% auf einer Höhe. Warum ist das so?

Nun möchte ich, dass statt dem Text nur "XXX" in der jeweiligen Spalte steht, in der ersten Spalte unten, dann mittig, dann oben. Außerdem soll die Zeilenhöhe genau 5cm hoch sein. Ich hab das so versucht:

Open in writeLaTeX
\documentclass[12pt,a4paper,oneside,parskip]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage{tabu}

\begin{document}
\tabulinesep = 2mm
\begin{tabu} to \linewidth {X[c,p]|X[c,m]|X[c,b]}
  \hline \rule{0pt}{5cm}XXX & XXX & XXX\\
  \hline
\end{tabu}
\end{document}

Die Zeilenhöhe passt, der Rest leider nicht. Woran liegt das?

(Ich muss dazu sagen, dass ich, trotz lesen diverser Artikel, die m,p,b-Ausrichtung in Tabellen nicht richtig verstehe.)

gefragt 10 Jan '15, 12:15

tom75's gravatar image

tom75
2.2k277984
Akzeptiert-Rate: 57%

2

Bezüglich p-, m- und b-Spalten: hilft Dir http://texwelt.de/wissen/fragen/840#842 ?

(10 Jan '15, 14:59) cgnieder

Ich hatte diesen Beitrag gestern zig Mal gelesen aber vieles davon leider nicht verstanden.

(10 Jan '15, 18:38) tom75
1

Jede Tabellenzeile hat nur eine Tabellenzeilen-Grundlinie. Auf dieser Tabellenzeilen-Grundlinie wird die erste Grundlinie des Inhalts der p-Spalte gesetzt. Das gleiche gilt für die letzte Grundlinie des Inhalts der b-Spalte. Deshalb sind die beiden wirklich immer auf einer Höhe.

Der Inhalt der m-Spalte wird dagegen vertikal mittig an der Tabellengrundzeile ausgerichtet. Haben die erste und die letzte Zeile dort eine unterschiedliche Höhe, dann ist die mittlere Zeile nicht genau in der vertikalen Mitte des Inhalts und steht deshalb nicht direkt auf der Tabellenzeilen-Grundlinie.

(10 Jan '15, 19:19) esdd

@esdd Ich hab deine Antwort zu Teilfrage 1 verstanden, dazu aber noch einer Rückfrage (siehe dort). Danke nochmal für die Erklärung hier, so wird mir das nun langsam klar.

Ich hatte/hab nur Verständnisprobleme mit dem verlinkten Beitrag, dort wird erst von p, b, c-Spalten gesprochen, dann von t und m und unten von t, r und c Spalten. Ich bin da noch zu wenig drin in der Sache als dass ich das nachvollziehen kann.

(10 Jan '15, 19:39) tom75
2

@tom75 Es wird dort die Äquivalenz von m-, b- und p-Spalten zu c, b und t ausgerichteten \parbox-Anweisungen aufgegriffen und auch erklärt, die auch explizit in der array-Anleitung für die Erklärung der Spalten aufgeführt ist. Das wird gemacht, weil eben m-, b- und p-Spalten letztlich nicht anderes als \parboxen mit entsprechenden Ausrichtungsoptionen sind. Man muss also nicht Tabellen für sich und Boxen für sich verstehen, man muss nur einmal Boxen verstehen und kann das dann genauso für Tabellen, Grafiken, einzelne Zeilen etc. anwenden.

(10 Jan '15, 19:56) saputello

Das sind eigentlich zwei verschiedene Fragen, wobei die erste eher ein Duplikat zu anderen Fragen ist.

Antwort zu Teilfrage 1

Die Wirkungsweise der p, m und b Spalten hat @saputello ausführlich unter Wie kann ich innerhalb einer Tabellenzelle vertikal zentrieren? erklärt.

In Deinem ersten Beispiel haben die erste und die letzte Zeile des Inhaltes der m-Spalte eine unterschiedliche Gesamthöhe, weshalb sich die mittlere Zeile nicht genau in deren vertikaler Mitte befindet. Das kannst Du ändern, in dem Du am Anfang und am Ende dieser Tabellenzelle ein \strut einfügst, dass bei tabu-Zellen fehlt. Siehe dazu auch Tabelle mit tabu: Warum verrutschen die Zelleninhalte?

Open in writeLaTeX
\documentclass[12pt,a4paper,oneside,parskip]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage{tabu}

\begin{document}
\tabulinesep = 2mm
\begin{tabu} to \linewidth {X[p]|X[m]|X[b]}
  \hline text which is considerably longer than the width of the column  & 
  \strut text which is considerably longer than the width of the column\strut  & 
  text which is considerably longer than the width of the column\\
  \hline
\end{tabu}
\end{document}

alt text

Antwort zu Teilfrage 2

In Deinem zweiten Beispiel befinden sich die erste Zeile der p-Spalte und die letzte Zeile der b-Spalte wieder auf der gleichen Tabellenzeilen-Grundlinie. Allerdings ist die erste Zeile der p-Spalte durch die \rule eben 5cm hoch. Der Inhalt der m Spalte wird dann vertikal an der der an der Grundlinienzeile zentriert. Ersetze in Deinem Beispiel XXX durch ppp und Du wirst sehen, dass diese in der m-Spalte weiter oben stehen als in der b-Spalte.

Da Du die Zeilenhöhe mit 5cm vorgeben möchtest, kannst Du das gewünschte aber durch eine minipage oder \parbox mit der Höhe 5cm und entsprechender innerer Ausrichtung in den einzelnen Zellen erreichen.

Open in writeLaTeX
\documentclass[12pt,parskip]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{fontenc}
\usepackage{tabu}

\newcommand\mycell[3]{%
  \parbox[c][#1][#2]{\linewidth}{\centering#3}}

\begin{document}
\tabulinesep = 2mm
\begin{tabu} to \linewidth {X|X|X}
  \hline 
    \mycell{5cm}{b}{XXX} &
    \mycell{5cm}{c}{XXX} &
    \mycell{5cm}{t}{XXX}\\
  \hline
\end{tabu}
\end{document}

alt text

Permanenter link

beantwortet 10 Jan '15, 14:59

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 11 Jan '15, 12:29

3

Dass bei tabu's Zellen das \strut fehlt, ist übrigens ein bekannter Bug (ein bekanntes Feature?): http://tex.stackexchange.com/a/21571/

(10 Jan '15, 15:17) cgnieder
1

Und hier hatten wir das Thema auch schon: Tabelle mit tabu: Warum verrutschen die Zelleninhalte?

(10 Jan '15, 15:29) esdd

@saputello Den zweiten Teil der Doppelfrage hatten wir noch nicht, oder? Die bisher angegebenen Links beziehen sich alle auf den ersten Teil. Ach und Danke für das Korrigieren der Formatierung oben - ich habe das auch gesehen, aber nicht hinbekommen.

(10 Jan '15, 15:51) esdd

@esdd Ach, da gibt es noch eine versteckte weitere Frage: Wie kann man einer Tabellenzeile eine bestimmte Höhe geben? Das hatte ich übersehen. OK. Dann hat die Frage ihre Berechtigung, sollte aber vielleicht auch irgendwie real zu finden sein. Ich dachte, es ginge nur um das Verrutschen und den Unterschied zwischen m, p, und b. Gegen die Extra-1000-Punkte war die Korrektur der Formatierung nur eine Kleinigkeit. ;)

(10 Jan '15, 15:57) saputello

@esdd Zunächst mal vielen Dank für die Antwort!

Ich hab mich bisher mit Antwort 1 beschäftigt und dazu Rückfragen: Woher weiß man im Voraus, dass die erste und letzte Zeile nicht gleich hoch sind? (Mir ist das übrigens nur zufällig aufgefallen, nicht beim ersten Hinsehen.)

Oder muss man das \strut immer am Anfang und Ende einer m-Spalte stellen?

Was passiert, wenn man z.B. mehrere Zeilen unterschiedlicher Höhe hat, z.B. 5?

(10 Jan '15, 19:44) tom75
1

@tom75 In Deinem 1.Beispiel hat die letzte Zeile in der m-Spalte keine Unterlänge, da keine Buchstaben mit Unterlänge (wie p oder g) drin vorkommen. Wenn Du sicher gehen möchtest, dass bei ungerader Zeilenanzahl die Grundlinie der mittleren Zeile auf der Tabellenzeilen-Grundlinie landet, dann füge die beiden \strut ein.

(11 Jan '15, 01:27) esdd
1

@tom75 Bei normalem Text brauchst Du Dir um die Höhe der Zeilen zwischen der ersten und der letzten Zeile keine Gedanken zu machen. Der Abstand zwischen den Grundlinien der einzelnen Zeilen ist dann gleich und damit auch die Höhe und Tiefe dieser Zeilen.

(11 Jan '15, 01:29) esdd

@Clemens Danke für den Link. Dann müsste man analog dazu in meinem Fall

\begin{tabu} to \linewidth {X[p]|>{\strut}X[m]<{\strut}|X[b]}

schreiben, oder?

(11 Jan '15, 10:26) tom75

@esdd Warum verwendest du am Anfang der Zeile \strut{} und am Ende nur \strut?

Antwort 2: Vielen Dank, das ist perfekt!

(11 Jan '15, 10:27) tom75
1

@tom75 Die Klammern sind an der Stelle nicht nötig. Ich werde sie in dem Beispiel durch ein Leerzeichen ersetzen. Es gibt aber Situationen, in denen sie notwendig sind. Schau Dir mal das Ergebnis an, wenn Du in einem Dokument Das\strut Bespiel oder das\strut{} Beispiel als Text einfügst. Eine Erklärung findest Du in der Antwort auf Warum verschwindet der Leerraum nach selbst definierten Befehlen?

(11 Jan '15, 12:28) esdd

@esdd Alles klar und danke für den Hinweis auf die Sache mit dem Leerraum. Dein Link ist glaube ich kaputt, aber ich hab den Artikel trotzdem gefunden: http://texwelt.de/wissen/fragen/17/warum-verschwindet-der-leerraum-nach-selbst-definierten-befehlen

(11 Jan '15, 20:39) tom75
Ergebnis 5 von 11 show 6 more comments
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×256
×69
×15
×9

gestellte Frage: 10 Jan '15, 12:15

Frage wurde gesehen: 12,314 Mal

zuletzt geändert: 11 Jan '15, 20:39