PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zelle vertikal zentrieren in tabularx



trustee
15-05-2008, 14:06
Hallo zusammen,

es handelt sich um ein oft diskutiertes Problem, bislang habe ich jedoch noch keine Lösung gefunden: Ich möchte in einer tabularx-Tabelle einen Zelleinhalt vertikal zentrieren. Laut Doku lässt sich dies nicht über \newcolumntype erreichen, was letztlich auch logisch ist: Grundsätzlich entspricht eine X-Spalte p{}, ich hätte sie aber gerne als m{}, also vertikal zentriert. Dies lässt sich nicht über einen auf X basierenden newcolumntype erreichen. Die Doku empfiehlt daher: \renewcommand{\tabularxcolumn}[1]{m{#1}}.

Aber: Ich möchte meine X-Spalten nicht immer vertikal zentriert haben, sondern nur in speziellen Situationen. Wenn ich den renewcommand in der Präambel nutze, gilt die Umdefinition jedoch immer.

Ich freue mich auf Vorschläge!

Gruß
Sebastian

voss
15-05-2008, 15:43
es handelt sich um ein oft diskutiertes Problem, bislang habe ich jedoch noch keine Lösung gefunden: Ich möchte in einer tabularx-Tabelle einen Zelleinhalt vertikal zentrieren. Laut Doku lässt sich dies nicht über \newcolumntype erreichen, was letztlich auch logisch ist: Grundsätzlich entspricht eine X-Spalte p{}, ich hätte sie aber gerne als m{}, also vertikal zentriert. Dies lässt sich nicht über einen auf X basierenden newcolumntype erreichen. Die Doku empfiehlt daher: \renewcommand{\tabularxcolumn}[1]{m{#1}}.

Aber: Ich möchte meine X-Spalten nicht immer vertikal zentriert haben, sondern nur in speziellen Situationen. Wenn ich den renewcommand in der Präambel nutze, gilt die Umdefinition jedoch immer.


dann definierst du es nach einer Tabelle wieder um ...

Herbert

trustee
15-05-2008, 15:53
Grundsätzlich eine gute Idee, aber ich müsste den Befehl dann innerhalb von Tabellen um- und wieder zurückdefinieren, da sich mein Wunsch nach vertikaler Zentrierung auch auf einzelne Zellen bezieht. Und ein renewcommand innerhalb einer Tabelle liefert "missplaced \omit"-Fehlermeldungen. Wie kann ich Code innerhalb einer Tabelle bringen?

Sebastian

Stefan_K
16-05-2008, 01:49
Hallo Sebastian,

für spezielle Formatierung einzelner Zellen kannst Du \multicolumn (http://www.weinelt.de/latex/multicolumn.html) verwenden. Über eine einzige Spalte, als letzten Parameter für den Inhalt kannst Du eine \parbox angeben, dessen Inhalt Du vertikal zentrieren lässt.

Viele Grüße,

Stefan

trustee
19-05-2008, 13:29
Hallo Stefan,

vielen Dank für den Tipp, das hatte ich auch versucht. Das Problem ist jedoch, dass der Inhalt der parbox zwar vertikal zentriert werden kann, aber ja nicht die parbox in der Zelle selbst. Somit ist mein Problem damit nicht gelöst. Hier ein MB, wobei die Texte "ZZZ" vertikal zentriert werden sollen.



\documentclass{scrbook}
\usepackage{tabularx}
% Zeilenumbruch und linksbündig in tabularx:
\newcolumntype{V}{>{\raggedright\arraybackslash}X}
% Zeilenumbruch und zentriert in tabularx:
\newcolumntype{Z}{>{\centering\arraybackslash}X}
\usepackage{booktabs}
\begin{document}
\begin{table}
\begin{tabularx}{\linewidth}{VZZ}
\toprule
& \textbf{Head 1}: Unsicherheit A & Head 2: Unsicherheit B\\
\cmidrule(lr){1-3}
\textbf{Head 3}: Aktives Verhalten, Beeinflussung von Wahrscheinlichkeitsurteilen & \multicolumn{2}{c}{\textbf{ZZZ}}\\
\cmidrule(lr){1-3}
Head 4: Passives Verhalten, fixe Wahrscheinlichkeitsurteile & \multicolumn{2}{c}{ZZZ}\\
\bottomrule
\end{tabularx}
\end{table}
\end{document}


Die Parbox hilft dabei nicht, glaube ich. Oder irre ich mich? Mein Test führte nicht zu einer vertikalen Zentrierung.

Gruß
Sebastian

voss
19-05-2008, 14:51
Die Parbox hilft dabei nicht, glaube ich. Oder irre ich mich? Mein Test führte nicht zu einer vertikalen Zentrierung.



\documentclass{scrbook}
\usepackage{array,ragged2e,calc}
% Zeilenumbruch und linksbündig in tabularx:
\newcolumntype{V}{>{\RaggedRight}X}
% Zeilenumbruch und zentriert in tabularx:
\newcolumntype{P}{>{\RaggedRight}p{0.33\linewidth-2\tabcolsep}}
\newcolumntype{M}{>{\RaggedRight}m{0.33\linewidth-2\tabcolsep}}
\newcolumntype{C}{@{}>{\Centering}m{0.66\linewidth-2\tabcolsep}@{}}
\usepackage{booktabs}
\begin{document}

\begin{tabular}{@{}MPP@{}}\toprule
& \textbf{Head 1}: Unsicherheit A & Head 2: Unsicherheit B\\ \midrule
\textbf{Head 3}: Aktives Verhalten, Beeinflussung von Wahrscheinlichkeitsurteilen
& \multicolumn{2}{C}{\textbf{ZZZ}}\\\midrule
Head 4: Passives Verhalten, fixe Wahrscheinlichkeitsurteile
& \multicolumn{2}{C}{ZZZ}\\\bottomrule
\end{tabular}

\end{document}

Herbert

trustee
20-05-2008, 13:30
Wie von Herbert bekannt: eine wunderbare Lösung! So werde ich es machen - tabularx brauche ich bei gerade mal drei gleich großen Spalten tatsächlich nicht.

Vielen Dank!
Sebastian