PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : In Tabelle zentriert schreiben, aber dennoch Spaltenbreite vorgeben: wie?



Blizzi
06-03-2012, 08:22
Hallo.

Ich bin gerade dabei dabei eine Tabelle zu erstellen.
Funtioniert soweit auch alles gut. Einziges Problem an der Geschichte ist, dass ich die zwei Dinge "zentriert in Spalte" und "Vorgeben der Spaltenbreite" nicht miteinander kombiniert bekomme.

Hier das Minimalbeispiel


\documentclass[11pt,a4paper]{scrreprt}
\usepackage{array}


\begin{document}

\begin{table}[h]
\centering
\begin{tabular}{p{3.5cm}|p{1.75cm}|p{1.75cm}|p{1.7 5cm}|p{1.75cm}|p{1.75cm}|p{1.75cm}|}
\cline{2-7}
{} & \multicolumn{2}{c|}{\textbf{xxxxxxxxx}} & \multicolumn{2}{c|}{\textbf{yyyyyyyyyyy}} & \multicolumn{2}{c|}{\textbf{zzzzzzzzzzz}} \\
\hline
\multicolumn{1}{|l|}{\textbf{}} & \multicolumn{1}{c|}{\textbf{längs}} & \multicolumn{1}{c|}{\textbf{quer}} & \multicolumn{1}{c|}{\textbf{längs}} & \multicolumn{1}{c|}{\textbf{quer}} & \multicolumn{1}{c|}{\textbf{längs}} & \multicolumn{1}{c|}{\textbf{quer}} \\
\hline
\multicolumn{1}{|l|}{Kleinwagen} & \multicolumn{1}{c|}{30} & \multicolumn{1}{c|}{27} & \multicolumn{1}{c|}{16} & \multicolumn{1}{c|}{18} & \multicolumn{1}{c|}{20} & \multicolumn{1}{c|}{18} \\
\hline
\multicolumn{1}{|l|}{Kompaktwagen} & \multicolumn{1}{c|}{30} & \multicolumn{1}{c|}{36} & \multicolumn{1}{c|}{20} & \multicolumn{1}{c|}{21} & \multicolumn{1}{c|}{20} & \multicolumn{1}{c|}{21} \\
\hline
\multicolumn{1}{|l|}{Mittelklassewagen} & \multicolumn{1}{c|}{36} & \multicolumn{1}{c|}{36} & \multicolumn{1}{c|}{20} & \multicolumn{1}{c|}{21} & \multicolumn{1}{c|}{24} & \multicolumn{1}{c|}{21} \\
\hline
\multicolumn{1}{|l|}{obere Mittelklasse}& \multicolumn{1}{c|}{42} & \multicolumn{1}{c|}{40} & \multicolumn{1}{c|}{24} & \multicolumn{1}{c|}{24} & \multicolumn{1}{c|}{24} & \multicolumn{1}{c|}{24} \\
\hline
\multicolumn{1}{|l|}{Oberklasse} & \multicolumn{1}{c|}{42} & \multicolumn{1}{c|}{40} & \multicolumn{1}{c|}{30} & \multicolumn{1}{c|}{24} & \multicolumn{1}{c|}{30} & \multicolumn{1}{c|}{32} \\
\hline
\multicolumn{1}{|l|}{SUV} & \multicolumn{1}{c|}{42} & \multicolumn{1}{c|}{40} & \multicolumn{1}{c|}{25} & \multicolumn{1}{c|}{21} & \multicolumn{1}{c|}{30} & \multicolumn{1}{c|}{32} \\
\hline
\end{tabular}
\end{table}

\end{document}


Wie zu erkennen ist, wird die Spaltenbreite nicht wie eigentlich über über den befehl p{1.75cm} auf diese Breite festgelegt, sondern orientiert sich am "längsten" Wort in der Spalte und setzt die Breite darauf fest. Das hat wohl mit dem \multicolumn Befehl zu tun.

Wie kann ich meine Tabelle nun im Code verändern, dass die Spaltenbreite den Wert annimmt, den ich gerne möchte, der Text in der Zelle aber dennoch zentriert dargestellt wird?

ctansearch
06-03-2012, 10:46
\documentclass[11pt,a4paper]{scrreprt}
\usepackage{array,tabularx}
\usepackage[ngerman]{babel}
\newcommand{\bcec}[1]{ \begin{center}#1 \end{center}}
\begin{document}
\begin{table}[h]
\begin{tabular}[c]{|p{3.5cm}|p{1.75cm}|p{1.75cm}|p{1.75cm}|p{1.75cm} |p{1.75cm}|p{1.75cm}|}
\hline \bcec{2345}&\bcec{2345}&\bcec{2345}&\bcec{2345}&\bcec{9 000 000 000}&\bcec{2345}&\bcec{2345} \\ \hline
\bcec{2345 } &\bcec{2345}&\bcec{2345}&\bcec{2345}&\bcec{2345}&\bcec{2345}&\bcec{2345 }\\\hline
\bcec{2345} &\bcec{2345}&\bcec{2345}&\bcec{2345}&\bcec{1234}&\bcec{2345}&\bcec{2345} \\ \hline
\end{tabular}
\end{table}
\end{document}

Steffen1187
06-03-2012, 10:50
Servus,

zunächst einmal solltest du für deinen Quellcode die # - Taste oben verwendne und nicht den PHP Code, sonst sind beim Rauskopieren alle \ weg und nix geht ;)


Ansonten glaube ich deinen Fehler gefunden zu haben:
du benutzt die multicolumn Funktion.
multicolumn{2}{c|}{textbf{xxxxxxxxx}}
das heißt du gibst hierfür das Format c an. c hat jedoch keine Vorgabe für die Spaltenbreite...

wenn du hier c nun wieder durch p{1.75} ersetzt (siehe Beispiel) hast du die Breite konstant


\documentclass[11pt,a4paper]{scrreprt}
\usepackage{array}


\begin{document}

\begin{table}[h]
\centering
\begin{tabular}{p{3.5cm}|p{1.75cm}|p{1.75cm}|p{1.7 5cm}|p{1.75cm}|p{1.75cm}|p{1.75cm}|}
\cline{2-7}
{} & \multicolumn{2}{p{1.75cm}|}{\textbf{xxxxxxxxx}} & \multicolumn{2}{p{1.75cm}|}{\textbf{yyyyyyyyyyy}} & \multicolumn{2}{p{1.75cm}|}{\textbf{zzzzzzzzzzz}} \\
\hline
\multicolumn{1}{|l|}{\textbf{}} & \multicolumn{1}{c|}{\textbf{längs}} & \multicolumn{1}{c|}{\textbf{quer}} & \multicolumn{1}{c|}{\textbf{längs}} & \multicolumn{1}{c|}{\textbf{quer}} & \multicolumn{1}{c|}{\textbf{längs}} & \multicolumn{1}{c|}{\textbf{quer}} \\
\hline
\multicolumn{1}{|l|}{Kleinwagen} & \multicolumn{1}{c|}{30} & \multicolumn{1}{c|}{27} & \multicolumn{1}{c|}{16} & \multicolumn{1}{c|}{18} & \multicolumn{1}{c|}{20} & \multicolumn{1}{c|}{18} \\
\hline
\multicolumn{1}{|l|}{Kompaktwagen} & \multicolumn{1}{c|}{30} & \multicolumn{1}{c|}{36} & \multicolumn{1}{c|}{20} & \multicolumn{1}{c|}{21} & \multicolumn{1}{c|}{20} & \multicolumn{1}{c|}{21} \\
\hline
\multicolumn{1}{|l|}{Mittelklassewagen} & \multicolumn{1}{c|}{36} & \multicolumn{1}{c|}{36} & \multicolumn{1}{c|}{20} & \multicolumn{1}{c|}{21} & \multicolumn{1}{c|}{24} & \multicolumn{1}{c|}{21} \\
\hline
\multicolumn{1}{|l|}{obere Mittelklasse}& \multicolumn{1}{c|}{42} & \multicolumn{1}{c|}{40} & \multicolumn{1}{c|}{24} & \multicolumn{1}{c|}{24} & \multicolumn{1}{c|}{24} & \multicolumn{1}{c|}{24} \\
\hline
\multicolumn{1}{|l|}{Oberklasse} & \multicolumn{1}{c|}{42} & \multicolumn{1}{c|}{40} & \multicolumn{1}{c|}{30} & \multicolumn{1}{c|}{24} & \multicolumn{1}{c|}{30} & \multicolumn{1}{c|}{32} \\
\hline
\multicolumn{1}{|l|}{SUV} & \multicolumn{1}{c|}{42} & \multicolumn{1}{c|}{40} & \multicolumn{1}{c|}{25} & \multicolumn{1}{c|}{21} & \multicolumn{1}{c|}{30} & \multicolumn{1}{c|}{32} \\
\hline
\end{tabular}
\end{table}

\end{document}


Allerdings bricht er irgendwie auch nicht um

vielleicht konnte ich dir n bisschen helfen

u_fischer
06-03-2012, 11:39
Nimm \centering - entweder in der jeweiligen Zelle oder (mit array) mit >{\centering} in der Tabellendeklaration für die ganze Spalte. Beende Tabellenzeilen dann mit \tabularnewline, Zeilen in der Zelle kannst du mit \\ beenden.

Ich rate davon ab, die center-Umgebung zu benutzen.


\documentclass{article}
\usepackage{array}
\begin{document}

\begin{tabular}{|p{1.75cm}|>{\centering}p{1.75cm}|}
Spalte 1 \\links & Spalte 2 \\ a\\abc \tabularnewline
\centering mitte\\mittig & cd \\ cde
\end{tabular}



\end{document}

ctansearch
06-03-2012, 13:38
Der einzige Unterschied bei center ist doch nur der zusätzliche Abstand zu den Tabellenlinien, was meistens wesentlich besser aussieht als die gedrängte Umgebung bei centering. \\ und \tabularnewline funktionieren beide.
Und, wenn man Tabellen ohne vertikale Linien benutzt, ist es sinnvoll, die Zeilen durch einen Abstand voneinander zu trennen. Den Abstand kann man durch ein einfaches \vskip selbst bestimmen.
Oder gibt es da noch andere Probleme mit center? Bei horizontalen Linien muss man den Abstand so einstellen, daß diese nicht in den Text geraten.


\documentclass[11pt,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage{array,tabularx}
\usepackage[ngerman]{babel}
\newcommand{\bcec}[1]{\begin{center}\vskip -16pt #1 \vskip -16pt \end{center}}
\begin{document}
\begin{table}[h]
\begin{tabular}[c]{|p{3.5cm}|p{1.75cm}|p{1.75cm}|p{1.75cm}|p{1.75cm} |p{1.75cm}p{1.75cm}|}
\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder ?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder ?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder ?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder ?}&\bcec{9 000 000 000}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder ?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder ?} \tabularnewline
\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder ? }
&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder
?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder
?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder
?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder
?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder
?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder ? }\\
\hline
\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder ?}
&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder
?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder
?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch , oder
?}&\bcec{1234}&\bcec{Was hier zentriert werden soll ist doch völlig logisch
, oder ?}&\bcec{Was hier zentriert werden soll ist doch völlig logisch ,
oder ?} \tabularnewline\hline
\end{tabular}
\end{table}
\end{document}

u_fischer
06-03-2012, 14:28
Der einzige Unterschied bei center ist doch nur der zusätzliche Abstand zu den Tabellenlinien, was meistens wesentlich besser aussieht als die gedrängte Umgebung bei centering.

Der Abstand zu den Tabellenlinien ist doch der Gleiche wie bei p-Spalten, oder c-Spalten, oder l-Spalten. Gelegentlich center zu benutzen, hilft dir doch bei den anderen Spaltentypen nicht. Wenn er dich stört, ändere \extrarowheight.

Abgesehen davon, bekommst du mit center Problem mit der Ausrichtung zu anderen Spalten:


\documentclass{article}
\usepackage{array,lipsum}
\begin{document}

\begin{tabular}{|l|p{8cm}|}
links &\begin{center} \lipsum[1] \end{center} \tabularnewline
\end{tabular}


\begin{tabular}{|l|>{\centering}p{8cm}|}
links & \lipsum[1]\tabularnewline
\end{tabular}


\end{document}

Ich halte es auch für keine gute Idee, einen Befehl mit Argument zu definieren, um die Umgebung zu verstecken: Damit ist es nicht mehr möglich, Dinge wie \verb in der Zelle zu benutzen.

Und als Letztes: Du solltest nicht einfach so \vskip benutzen. Hier ein Beispiel zur Warnung:


\documentclass{article}
\newcommand{\bcec}[1]{\begin{center}\vskip -16pt #1 \vskip -16pt \end{center}}
\begin{document}
\begin{tabular}{p{8cm}}
\bcec{plus ist ein Zeichen}
\end{tabular}
\end{document}

ctansearch
06-03-2012, 15:01
Bei den Tabellenlinien hatte ich die horizontalen gemeint, bei den vertikalen macht es keinen Unterschied.
\vskip kann man klammern, auch das geht,

aber Argument zwei zieht...keine gute Idee...

Blizzi
07-03-2012, 08:25
Vielen Dank für diese Anregungen.

Das erste von ctansearch vorgeschlagene Beispiel entspricht so ziemlich genau dessen, was ich mir so vorgestellt habe.

ctansearch
07-03-2012, 09:28
Das gleiche geht mit \centering statt \begin{center} auch, musst halt dann \tabularnewline benutzen alles andere mußt Du dann ausprobieren.