PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zum 216. Mal Tabelleeäääää



polynom
25-01-2006, 19:04
Hallo ihr,

ja es ist mal wieder ein Tabellenproblem!!!
Und ich muss sagen, dass mir (bisher) nichts mehr Sorgen bereitet, als die Gestaltung von Tabellen. Nun weiß ich auch, dass es immer nur an „Kleinigkeiten“ liegt. Doch vor lauter Bäumen seh ich hier keinen Wald.
Also, gebt mir einen Tipp. Bitte…..

Wie ihr sehen könnt, handelt es sich um Zellen, die teilweise viel Text haben. Am liebsten hätte ich gerne alles horizontal und vertikal zentriert. Bei wenig Text funktioniert es übrigens.

Hier mein Code:
\usepackage{tabularx}
\newcolumntype{Z}{>{\centering\arraybackslash}X}
\usepackage{array}
.
.
.
\begin{table}[H]
\centering
\caption{Arbeits- und Zeitplan Arbeits- und Zeitplan Arbeits- und Zeitplan
Arbeits- und Zeitplan }
\label{tab:_planplan}
\begin{tabularx}{\textwidth}{ZZZZ}
\toprule
\textbf{1./2. Quartal} & \textbf{3./4. Quartal} & \textbf{5./6. Quartal} & \textbf{7./8. Quartal} \\
\midrule
\multicolumn{1}{Z}{Aufbau Aufbau Aufbau Aufbau Aufbau Aufbau Aufbau } & \multicolumn{2}{Z}{Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung } & \multicolumn{1}{Z}{ Übertragung Übertragung Übertragung Übertragung Übertragung Übertragung} \\
\cmidrule {1-4}
\multicolumn{1}{Z}{Konstruktion Konstruktion Konstruktion Konstruktion } & \multicolumn{1}{Z}{Anpassung Anpassung Anpassung } & \multicolumn{2}{Z}{Mathematische Mathematische Mathematische } \\
\cmidrule {1-4}
\multicolumn{2}{c}{Text Text Text Text Text } & \multicolumn{2}{c}{Zusammenfassung Zusammenfassung } \\
\bottomrule
\end{tabularx}
\end{table}


Wenn ich nun bei „Kultivierung“ statt Z ein c nehme, dann schießt er übers Blatt hinaus.
Wie es aussehen soll, habe ich mal als pdf.Datei dabei.

Vielen Dank
polynom

edico
26-01-2006, 11:03
... ja, das stimmt, wobei Tabellen schon ihre Besonderheiten haben. Der Ansatz war schon sehr gut.
Aber ein Minimalbeispiel hättest du ruhig machen können ...
So sollte es wohl sein:
...
\documentclass{article}
\usepackage{multirow,tabularx,booktabs}
\begin{document}
\the\textwidth \ldots hier steht ein unverf{\"a}nglicher text, der nichts bessagt, was keiner merkt, und still vor sich hin d{\"a}mmert, bis die zeile vollgeschrieben steht \ldots
\noindent
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{tabularx}{\textwidth}{p{2.5cm}p{2.5cm}p{2.5 cm}p{2.5cm}}
\toprule
\textbf{1./2. Quartal} &
\textbf{3./4. Quartal} &
\textbf{5./6. Quartal} &
\textbf{7./8. Quartal} \\
\midrule
\multicolumn{1}{c}{Aufbau } &
\multicolumn{2}{X}{Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung} &
\multicolumn{1}{c}{{\"U}bertragung } \\
\midrule
\multicolumn{1}{c}{Aufbau } &
\multicolumn{2}{Y}{Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung} &
\multicolumn{1}{c}{{\"U}bertragung } \\
\multicolumn{1}{c}{Konstruktion } &
\multicolumn{1}{c}{Anpassung } &
\multicolumn{2}{Y}{Mathematische Mathematische Mathematische Mathematische } \\
\midrule
\multicolumn{2}{c}{Text } &
\multicolumn{2}{c}{Zusammenfassung } \\
\bottomrule
\end{tabularx}
\end{document}
...
edico

polynom
26-01-2006, 13:03
Hi edico,

hab dein Beispiel mal eingegeben und in meinem eigentlichen Dokument läuft es nicht. Liegt evtl an KOMA?

Mit dem Minimalbeispiel hattest du schon recht. Ist mir erst hinter her aufgefallen....

also hier:
\RequirePackage{fix-cm}
\documentclass[oneside,normalheadings,fleqn]{scrartcl}
\usepackage[left=4cm,right=3cm,top=3cm,bottom=3cm]{geometry}
\usepackage{booktabs,tabularx}
\newcolumntype{Z}{>{\centering\arraybackslash}X}
\usepackage{array}
\usepackage{multirow}
\begin{document}
\begin{table}[H]
\centering
\caption{Arbeits- und Zeitplan Arbeits- und Zeitplan Arbeits- und Zeitplan
Arbeits- und Zeitplan }
\label{tab:_planplan}
\begin{tabularx}{\textwidth}{ZZZZ}
\toprule
\textbf{1./2. Quartal} & \textbf{3./4. Quartal} & \textbf{5./6. Quartal} & \textbf{7./8. Quartal} \\
\midrule
\multicolumn{1}{Z}{Aufbau Aufbau Aufbau Aufbau Aufbau Aufbau Aufbau } & \multicolumn{2}{Z}{Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung } & \multicolumn{1}{Z}{ Übertragung Übertragung Übertragung Übertragung Übertragung Übertragung} \\
\cmidrule {1-4}
\multicolumn{1}{Z}{Konstruktion Konstruktion Konstruktion Konstruktion } & \multicolumn{1}{Z}{Anpassung Anpassung Anpassung } & \multicolumn{2}{Z}{Mathematische Mathematische Mathematische } \\
\cmidrule {1-4}
\multicolumn{2}{c}{Text Text Text Text Text } & \multicolumn{2}{c}{Zusammenfassung Zusammenfassung } \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}

Wenn ich deinen Vorschlag als neues Doku mache, dann erhalte ich genau das, was ich auf keinen Fall will!
Diese Lösung hatte ich schon und finde sie echt unelegant (ist nicht persönlich gemeint). Und wenn das der einzige Weg in Latex ist, dann kriegt es ganz schön viele Minuspunkte von mir. Dann wär ich richtig enttäuscht.
Als zweites gibst du ne feste Spaltenbreite an. So etwas wollte ich ebenfalls vermeiden. Ich meine, wenn es schon sowas wie \textwidth gibt, wieso muss man das dann mit ner festen Spaltenbreite umgehen?

Vielleicht hast du ja noch nen Tipp.

Und ein Aufruf an alle, die sich mit Latex auskennen: Programmiert doch endlich mal ein Tool, mit dem man ganz handlich ne schicke Tabelle erzeugen kann!!! so etwa wie LaTable oder dieses xl2latex, nur mit viel viel mehr möglichkeiten.
Okay, das war es erst mal meinerseits :D

rais
26-01-2006, 13:41
Moin moin,
wie wär's mit einem Kompromiß?
Das ist zwar gebastelt, aber es ist ja nicht der einzige Ansatz, den man hier verfolgen kann...


\documentclass{scrartcl}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{booktabs}
\usepackage{tabularx}
\newcolumntype{C}[1]{>{\centering\arraybackslash}m{#1}}
\newlength{\myclen}
\newlength{\mydclen}
\setlength{\myclen}{-8\tabcolsep}
\addtolength{\myclen}{\textwidth}
\setlength{\mydclen}{0.5\myclen}
\addtolength{\mydclen}{3\tabcolsep}
\begin{document}
\begin{table}
\centering
\caption{Arbeits- und Zeitplan Arbeits- und Zeitplan Arbeits- und Zeitplan
Arbeits- und Zeitplan }
\label{tab:_planplan}
\begin{tabular}{C{0.25\myclen}C{0.25\myclen}C{0.25 \myclen}C{0.25\myclen}}
\toprule
\textbf{1./2. Quartal} & \textbf{3./4. Quartal} & \textbf{5./6. Quartal} & \textbf{7./8. Quartal} \\
\midrule
Aufbau Aufbau Aufbau Aufbau Aufbau Aufbau Aufbau & \multicolumn{2}{C{\mydclen}}{Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung} & Übertragung Übertragung Übertragung Übertragung Übertragung Übertragung \\
\midrule
Konstruktion Konstruktion Konstruktion Konstruktion & Anpassung Anpassung Anpassung & \multicolumn{2}{C{\mydclen}}{Mathematische Mathematische Mathematische } \\
\midrule
\multicolumn{2}{c}{Text Text Text Text Text } & \multicolumn{2}{c}{Zusammenfassung Zusammenfassung } \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
fix-cm (muß es wirklich _vor_ der Dokumentklasse geladen werden?) hab' ich nicht und brauch' ich wohl auch nicht...

Dein Problem scheint jedenfalls zu sein, daß Du versuchst, innerhalb einer tabularx-Umgebung erneut eine Spalte Z zu definieren - das wird wohl ohne Schachtelung zweier tabularx-Umgebungen dann nicht hinhauen - da kannst Du aber selbst mit rumspielen.
Und was genau sollte \multicolumn{1}{Z}{..} bewirken? Die Spalte wurde doch schon als Z in Deinem Beispiel definiert :confused:
Genauso undurchsichtig war mir die Verwendung von \cmidrule{1-4} - tut's da nicht auch ein \cmidrule ?
Wobei: das Ergebnis hier in der Zeile mit der Zusammenfassung dürfte eher zufällig richtig ausgegeben werden, also vielleicht auch da lieber {C{\mydclen}} statt {c} als Spaltendeklaration.

Übrigens ist das das erste Mal, daß ich von mehr als vier Quartalen höre;)
MfG,

polynom
26-01-2006, 14:26
Hallo rais,
erst einmal herzlichen Glückwunsch, zur Lösung meines Problems.
Es klappt!
Ich weiss zwar nicht, was du da gemacht hast, doch es funktioniert und sieht genau so aus, wie es sein soll.

Was meinst du mit der Schachtelung in tabularx? Ich find das echt verwirrend. Die einen sagen immer: probier doch tabularx. Das ist die Lösung aller Probleme. Und die anderen sagen wieder ganz was anderes.

"Und was genau sollte \multicolumn{1}{Z}{..} bewirken? Die Spalte wurde doch schon als Z in Deinem Beispiel definiert"
Ich versteh deinen Satz nicht....
In tabularx hatte ich irgendwann extra diese Spalte Z neu definiert, weil ich die Einträge in zentriert haben wollte. Wenn ich mich recht erinnere, habe ich diese Lösung irgendwo gefunden. Und prinzipiell geht das ja auch.

"Verwendung von \cmidrule{1-4} - tut's da nicht auch ein \cmidrule"
Na mag sein, hatte ich noch nie probiert.

Von mydclen hab ich noch nie gehört. Wo gib't denn sowas?

fix-cm muss VOR allem anderen geladen werden! is so.

Und das mit den Quartalen.... naja, man kann ja einen Zeitraum von 2 jahren in 4 Halbjahre einteilen und genauso in 8 Quartale. Ist alles ne Frage der Betrachtung.:p

Vielen Dank

rais
26-01-2006, 17:43
Hallo rais,
erst einmal herzlichen Glückwunsch, zur Lösung meines Problems.
Es klappt!
Ich weiss zwar nicht, was du da gemacht hast, doch es funktioniert und sieht genau so aus, wie es sein soll.

*g*

Was meinst du mit der Schachtelung in tabularx? Ich find das echt verwirrend. Die einen sagen immer: probier doch tabularx. Das ist die Lösung aller Probleme. Und die anderen sagen wieder ganz was anderes.

Nun, auf der einen Seite sah es so aus, als ob die Z-Spalte innen (also die Spalten, die Du mit \multicolumn deklariert hast) trotz allem nur dieselbe Breite zugewiesen bekommen haben wie die äußeren (also die Z von der tabularx-Umgebung selbst), was besonders bei den Spalten aufgefallen ist, wo Du zwei zusammengezogen hast.
Da ich selbst bisher mit tabularx nur sehr wenig gemacht hab (in meinem Beispiel nutze ich es nur dazu, array zu laden und \arraybackslash zu definieren), versuche ich meist zunächst andere Möglichkeiten auszuschöpfen... ins Besondere, da ich lieber mit m{} als mit p{} arbeite ('X' von tabularx baut ja auch auf den Spaltentyp p{} auf).

Mit schachteln meinte ich etwas in der Art:
\begin{tabularx}{\textwidth}{ZZZ}
bla blubb & {\begin{tabularx}{?}{Z}
innere Tabelle\\
\end{tabularx}} & etwa so\\
\end{tabularx}
- also quasi ganz ohne multicolumn; aber wie gesagt, mit tabularx hab ich noch nicht viel gemacht, das könntest Du aber auch ausprobieren (wenn Dir mein Beispiel nicht schon zugesagt hätte...)


"Und was genau sollte \multicolumn{1}{Z}{..} bewirken? Die Spalte wurde doch schon als Z in Deinem Beispiel definiert"
Ich versteh deinen Satz nicht....
In tabularx hatte ich irgendwann extra diese Spalte Z neu definiert, weil ich die Einträge in zentriert haben wollte. Wenn ich mich recht erinnere, habe ich diese Lösung irgendwo gefunden. Und prinzipiell geht das ja auch.

Zum Einen: Z ist hier eine Spaltendefinition, die auf 'X', also die Breite variabler Länge des tabularx-Pakets aufbaut. Läßt sich eine so definierte Spalte innerhalb einer multicolumn Definition überhaupt aufrufen - und das auch noch _ohne_ vorzugeben, wie breit sie denn expandieren darf (was bei einer tabularx-Umgebung ja mit angegeben wird, in Deinem Beispiel über \textwidth für alle 4 Z) ? Allein durch den expandierbaren Wert für diesen Spaltentyp dürfte er eigentlich nur in Verbindung mit \begin{tabularx}{_breite_}{Z} einsetzbar sein (sonst hätte man sich tabularx als Umgebung ja auch sparen können: dann hätt's ja auch schon die normale tabular-Umgebung dafür getan, oder?)
Zum Anderen: was ich eigentlich nicht verstanden hab: warum multicolumn für _eine_ Spalte ? Die war doch schon nur so breit mit Umbruch (und eben zentrisch...)


"Verwendung von \cmidrule{1-4} - tut's da nicht auch ein \cmidrule"
Na mag sein, hatte ich noch nie probiert.

Na ja, in diesem Fall hattest Du halt vier Spalten und nutzt \cmidrule{1-4} dazu, auf alle vier Spalten zu expandieren - \midrule wird sowieso so lang wie die gesamte Tabelle breit ist


Von mydclen hab ich noch nie gehört. Wo gib't denn sowas?

Na hier:)


\newlength{\mydclen}

ich weiß, ich war schon immer sparsam mit den Buchstaben, wenn es um Variablen ging:p
\mydclen steht für "my double column length" und wird in meiner Präambel aus "\myclen" abgeleitet...hmm, letzterer hätte vielleicht besser \mytlen geheißen, aber was solls ("\myclen" stand für "my column length", gibt hier aber die Breite der gesamten Tabelle - bezogen auf die Textbreite an, aber ohne die Spaltenabstände, d.h. vier Spalten mit 0.25\myclen ergibt dann eine Tabelle mit Textbreite)


fix-cm muss VOR allem anderen geladen werden! is so.

Aha. Aber wie Du siehst, geht's auch ohne ;)


Und das mit den Quartalen.... naja, man kann ja einen Zeitraum von 2 jahren in 4 Halbjahre einteilen und genauso in 8 Quartale. Ist alles ne Frage der Betrachtung.:p

Ja, schon klar, ich betrachte halt ein Quartal als Teil eines Ganzen, entsprechend gibt's bei mir nur vier davon - genauso, wie's bei mir nur zwei Hälften gibt - hier eben auf das Jahr bezogen: QI/2005 versteht man ja, QVII/2005, da wird's schon seltsam; interessant wird's dann bei größeren Abständen, die dann ja genauso zulässig sein müssten:
QCXXXIII/1972 dürfte etwa dieses Quartal erwischen:D
MfG,

countbela666
26-01-2006, 17:48
Moin,

muss auch mal meinen Senf dazugeben. Hab da auch eine Lösung (?) zurechtgebastelt (ist mit dem Umdefinieren von \hsize ebenfalls Pfuscherei, aber vielleicht weniger Schreibaufwand):

\documentclass{article}
\usepackage{tabularx,booktabs}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcolumntype{Z}{>{\centering\arraybackslash}X}
\begin{document}
\begin{table}[H]
\centering
\caption{Arbeits- und Zeitplan Arbeits- und Zeitplan Arbeits- und Zeitplan
Arbeits- und Zeitplan }
\label{tab:_planplan}
\begin{tabularx}{\textwidth}{ZZZZ}
\toprule
\textbf{1./2. Quartal} & \textbf{3./4. Quartal} & \textbf{5./6. Quartal} & \textbf{7./8. Quartal} \\
\midrule
Aufbau Aufbau Aufbau Aufbau Aufbau Aufbau Aufbau & \multicolumn{2}{>{\hsize=2.5\hsize}Z}{Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung Kultivierung } & Übertragung Übertragung Übertragung Übertragung Übertragung Übertragung \\
\cmidrule {1-4}
Konstruktion Konstruktion Konstruktion Konstruktion & Anpassung Anpassung Anpassung & \multicolumn{2}{>{\hsize=2.5\hsize}Z}{Mathematische Mathematische Mathematische } \\
\cmidrule {1-4}
\multicolumn{2}{c}{Text Text Text Text Text } & \multicolumn{2}{c}{Zusammenfassung Zusammenfassung } \\
\bottomrule
\end{tabularx}
\end{table}
\end{document}Grüße,
Marcel

PS.: Problem bei der ganzen Sache ist, dass in dieser Tabelle gegen eine wichtige Regel von tabularx verstoßen wird:

Do not use multicolumn which cross any X columnDa innerhalb der multicolumn zwei X-Spalten zu einer zusammengefasst werden, erhält die entstehende Zelle nur so viel Platz wie eine ursprüngliche X-Zelle. Das versuche ich mit der Umdefinition der \hsize auszugleichen (hsize * 2.5 weil scheinbar noch andere Werte eingerechnet werden, die ebenfalls noch zu verdoppeln wären, deren Namen ich aber nicht kenne).

polynom
27-01-2006, 14:04
hallo ihr beiden,

@ rais:
Ich finde den Befehl \textwidth nun mal sehr praktisch. Wenn sich mal was ändert an der Seitenbreite/Rändern, dann muss man hinterher nicht an den Werten rumfummeln. Deswegen versuche ich immer gleich alles damit abzuhandeln. Bei tabular kann ich kein textwidth verwenden, zumindest meckert er immer bei mir. Vielleicht gibt's da ja doch was.
Ich muss aber auch mal zugeben, dass dieser ganze Tabellenkram bei mir immer ein Herantasten ist und nicht wirklich aus gezielten, fundierten Befehlen besteht. Deshalb mag da durchaus die ein oder andere verwirrende Lösung dabei sein. Eine ultimative Anweisung zu allen Tabellen-Problemen hab ich noch nicht gefunden.

@ countbela666:
na deine Lösung klapt ja auch wunderbar! Schön.
Und das mit dem Hinweis auf den Verstoß bei tabularx ist ja auch mal ein super Tipp. Dann ist natürlich klar, dass der das so nicht macht.

Trotzdem befürchte ich, dass noch die ein oder andere Horror-Tabelle in meinem Leben auf mich zukommt :rolleyes:
Macht aber nix.
Vielen Dank
poly

rais
28-01-2006, 02:30
hallo ihr beiden,

@ rais:
Ich finde den Befehl \textwidth nun mal sehr praktisch. Wenn sich mal was ändert an der Seitenbreite/Rändern, dann muss man hinterher nicht an den Werten rumfummeln. Deswegen versuche ich immer gleich alles damit abzuhandeln. Bei tabular kann ich kein textwidth verwenden, zumindest meckert er immer bei mir. Vielleicht gibt's da ja doch was.
Ich muss aber auch mal zugeben, dass dieser ganze Tabellenkram bei mir immer ein Herantasten ist und nicht wirklich aus gezielten, fundierten Befehlen besteht. Deshalb mag da durchaus die ein oder andere verwirrende Lösung dabei sein. Eine ultimative Anweisung zu allen Tabellen-Problemen hab ich noch nicht gefunden.

Ähh, hast Du Dir mein Beispiel mal etwas genauer angeschaut? Ich mein' nix gegen Marcel's Künste im Umgang mit Tabellen (und weniger Schreibaufwand ist's ja bei seiner Lösung ja auch noch), aber bei dem von mir vorgestelltem Beispiel wird die Tabelle ebenfalls an die verwendete Textbreite angepaßt - wenn man denn die Textbreite definiert, _bevor_ die Längendeklarationen erfolgen... alles in Allem, die von mir definierten Längen sind beide abhängig von \textwidth - deswegen verstehe ich Deinen Einwand nicht so ganz...
Aber keine Angst vor "Horror-Tabellen" - dieses Forum ist ja auch dafür noch da.:D
MfG,

countbela666
28-01-2006, 12:15
Ich mein' nix gegen Marcel's Künste im Umgang mit Tabellen...Nich doch, nich doch; ich werd ja noch ganz rot. Ist doch auch bloß aus einem Buch bzw. dem Usenet abgeschrieben... ;)

rais
28-01-2006, 23:00
Nich doch, nich doch; ich werd ja noch ganz rot. Ist doch auch bloß aus einem Buch bzw. dem Usenet abgeschrieben... ;)
Oh, sorry, in Verlegenheit wollte ich Dich natürlich nicht bringen.
Nichsdestotrotz scheinst Du eine umfangreiche, wie soll ich's nennen - "gewußt-wo-Datenbank" vielleicht? - zu besitzen :D


Das versuche ich mit der Umdefinition der \hsize auszugleichen (hsize * 2.5 weil scheinbar noch andere Werte eingerechnet werden, die ebenfalls noch zu verdoppeln wären, deren Namen ich aber nicht kenne).
Ich kannte \hsize bisher nur im Zusammenhang mit Absätzen, aber wenn ich mal davon ausgehe, daß \hsize vor Deiner Umrechnung so breit wie eine Spalte ist, dann könnte man eigentlich davon ausgehen, daß Dir nach einfacher Verdopplung der Spaltenabstand noch fehlt:
[tabcolsep +] linke Spalte + tabcolsep [|] tabcolsep + rechte Spalte [+ tabcolsep]
Oder wie mußte man sich das mit dem Separator vorstellen?

Und evtl. müsste dann noch \arrayrulewidth berücksichtigt werden - kA, ob der Platz freigehalten wird, oder nicht (letzterer dürfte aber kaum ins Gewicht fallen).

D.h. dann war

\setlength{\mydclen}{0.5\myclen}
\addtolength{\mydclen}{3\tabcolsep}
wohl auch schon falsch und hätte besser
\setlength{\mydclen}{0.5\myclen}
\addtolength{\mydclen}{2\tabcolsep}
\addtolength{\mydclen}{\arrayrulewidth}
gelautet.

MfG,