PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabellen: Eine Spalte definiert, alle anderen Seitefüllend??



Iowa
28-11-2005, 18:10
Hallo!
Lese mich schon den ganzen Tag durch die Foren und kann die Aussagen nicht richtig für meinen Fall anwenden. Wäre nett, wenn mir jemand helfen könnte.

Also ... ich möchte gern eine Tabelle mit 10 Zeilen und 5 Spalten erstellen.
Die erste Spalte soll genau so groß sein, dass der Text ungebrochen bleibt. Die anderen Spalten sollen jeweils die gleiche Größe bekommen aber seitenfüllend (also genau so, dass die Seitenränder eingehalten werden.)

dann wäre es noch schön, wenn der kürzere Text in den Spalte, die den Text nicht bricht (in dem Fall Hilden 1) auch in der Mitte der Zelle liegen würde.
Das dürfte auch auf kosten der zellenhöhe passieren. also alle Zellenhöhen gleich groß und dann die ungebrochenen texte in der zelle zentrieren.

Der Umbruch von "UP HRB Trotzhilden" ist auch nicht so ganz toll. Kann man das UP HRB nicht ein wenig zusammenziehen?


Hab das zur Zeit noch mit dem p{} befehl gelöst, scheint mir aber nicht so ganz treffend.

Mit folgendem Code sieht es zur Zeit wie auf dem Bild aus ...
http://iowa.cwsurf.de/php7_7/images/sonstiges/pegel.jpg


\begin{table}
\begin{center}
\begin{tabular}{|p{3,5cm}|p{2,5cm}|p{2,5cm}|p{2,5c m}|p{2,5cm}|}
\hline
Pegelname & UP Horsterflutgraben & Hilden 1 & UP HRB Trotzhilden & OP HRB Trotzhilden \\
\hline
Gewässer & Itterbach & Itterbach & Itterbach & Itterbach \\
\hline
Pegelnullpunkt & ent11 & 43,27 & ent13 & ent14 \\
\hline
Lage am Gewässer & links & links & rechts & ent19 \\
\hline
Einzugsgebietsgröße & ent21 & 30,82 & ent23 & ent24 \\
\hline
Rechtswert & ent26 & 256476 & ent28 & ent29 \\
\hline
Hochwert & ent31 & 566989 & ent33 & ent34 \\
\hline
Einrichtungsdatum & ent36 & 27.12.1965 & ent38 & ent39 \\
\hline
Betreiber & BRW & StUA Düsseldorf & BRW & BRW \\
\hline
Art & Lattenpegel & Lattenpegel & Lattenpegel & Lattenpegel \\
\hline
\end{tabular}
\end{center}
\caption{Pegelstammdaten}
\label{tab:pegel}
\end{table}

Joar, ich hoffe Ihr könnt mir helfen! Danke im voraus!

Iowa

Iowa
28-11-2005, 18:37
ok, hab das Problem fast gelöst ... zumindest das mit dem zentrieren. wäre trotzdem schön, wenn mir jemand sagen könnte, ob man mit dem restlichen seitenplatz die anderen spalten ausfüllen kann.


\newcolumntype{C}[1]{>{\centering}m{#1}}
\begin{table}
\begin{center}
\begin{tabular}{|C{2cm}|C{2cm}|C{2cm}|C{2cm}|c|}
\hline
Pegelname & UP Horsterflutgraben & Hilden 1 & UP HRB Trotzhilden & OP HRB Trotzhilden \\
\hline
Gewässer & Itterbach & Itterbach & Itterbach & Itterbach \\
\hline
Pegelnullpunkt & ent11 & 43,27 & ent13 & ent14 \\
\hline
Lage am Gewässer & links & links & rechts & ent19 \\
\hline
Einzugsgebietsgröße & ent21 & 30,82 & ent23 & ent24 \\
\hline
Rechtswert & ent26 & 256476 & ent28 & ent29 \\
\hline
Hochwert & ent31 & 566989 & ent33 & ent34 \\
\hline
Einrichtungsdatum & ent36 & 27.12.1965 & ent38 & ent39 \\
\hline
Betreiber & BRW & StUA Düsseldorf & BRW & BRW \\
\hline
Art & Lattenpegel & Lattenpegel & Lattenpegel & Lattenpegel \\
\hline
\end{tabular}
\end{center}
\caption{Pegelstammdaten}
\label{tab:pegel}
\end{table}

erzeugt folgendes ergebnis:
http://iowa.cwsurf.de/php7_7/images/sonstiges/pegel2.jpg

allerdings kann ich das nur bis zur 4ten spalte machen. wenn ich das auch für die 5te mach schmiert der mir ab!


Kapitel 4.
! Misplaced \noalign.
\hline ->\noalign
{\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...
l.153 \hline

?
! Emergency stop.
\hline ->\noalign
{\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet...
l.153 \hline

Und in der ersten Spalte macht er den Umbruch auch nicht richtig ...

ach ... und was macht eigentlich das [1] in dem \newcolumntype ????

countbela666
28-11-2005, 20:38
Hi Iowa,

zuerst zu deinen Fragen/Problemen:

allerdings kann ich das nur bis zur 4ten spalte machen. wenn ich das auch für die 5te mach schmiert der mir ab!Ist ein Problem mit der Umdefinition des Zeilenumbruchs durch das array-Paket. Kann mittels zusätzlichem \arraybackslash umgangen werden (s.u.)

was macht eigentlich das [1] in dem \newcolumntype ?zeigt an, dass der Befehl/Spaltentyp einen Parameter übergeben bekommt, nämlich die Spaltenbreite, die innerhalb des Makros mit #1 referenziert und m{...} übergeben wird.

Dann mal ein Lösungsansatz. Hast du dir das in etwa so vorgestellt?

\documentclass{article}
\usepackage[ansinew]{inputenc}
\usepackage{tabularx}
\begin{document}
\newlength{\colwidth}
\settowidth{\colwidth}{Einzugsgebietsgröße}
\newcolumntype{F}[1]{>{\centering\arraybackslash}m{#1}}
\renewcommand{\tabularxcolumn}[1]{m{#1}}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\begin{table}
\centering
\begin{tabularx}{\textwidth}{|F{\colwidth}|C|C|C|C |}
\hline
Pegelname & UP Horsterflutgraben & Hilden 1 & UP HRB Trotzhilden & OP HRB Trotzhilden \\
\hline
Gewässer & Itterbach & Itterbach & Itterbach & Itterbach \\
\hline
Pegelnullpunkt & ent11 & 43,27 & ent13 & ent14 \\
\hline
Lage am Gewässer & links & links & rechts & ent19 \\
\hline
Einzugsgebietsgröße & ent21 & 30,82 & ent23 & ent24 \\
\hline
Rechtswert & ent26 & 256476 & ent28 & ent29 \\
\hline
Hochwert & ent31 & 566989 & ent33 & ent34 \\
\hline
Einrichtungsdatum & ent36 & 27.12.1965 & ent38 & ent39 \\
\hline
Betreiber & BRW & StUA Düsseldorf & BRW & BRW \\
\hline
Art & Lattenpegel & Lattenpegel & Lattenpegel & Lattenpegel \\
\hline
\end{tabularx}
\caption{Pegelstammdaten}
\label{tab:pegel}
\end{table}
\end{document}Die Breite der ersten Spalte wird mit \settowidth{\colwidth}{blabla} gesetzt, d.h. das Maß \colwidth erhält die Länge des übergebenen Wortes, also dem längsten, das du in die Spalte schreiben willst; in diesem Fall "Einzugsgebietsgröße". Die Länge wird dem neuen Spaltentyp F übergeben (im Prinzip dein neuer Typ C um \arraybackslash erweitert).

Die Tabelle ist jetzt eine tabularx der Breite \textwidth, die von Hause aus den Spaltentyp X mitbringt, der den übrigen Platz auf der Seite auf alle Spalten diesen Typs aufteilt. Diesen Typ hab ich mit \renewcommand{\tabularxcolumn} umdefiniert, damit der auf m{...} und nicht auf p{...} zeigt und somit auch die vertikale Zentrierung vornimmt. Diesen umdefinierten Typ hab ich wiederum für den neuen Spaltentyp C genutzt, der dann auch die horizontale Zentrierung gewährleistet. Eigentlich ganz einfach, oder? :D

Grüße,
Marcel

rais
28-11-2005, 22:48
Hi Marcel,
warum nimmst Du nicht einfach "c" statt "F{\colwidth}" ?
MfG,

countbela666
28-11-2005, 23:01
Hehe, hast recht. Ich dachte, mit c würde der Text nur horizontal und nicht vertikal zentriert.

Grüße,
Marcel

Iowa
28-11-2005, 23:08
danke schonmal für die antworten ... werde es morgen ausprobieren ! big thx!

countbela666
28-11-2005, 23:13
Gern geschehen. Und um es noch einmal klarzustellen:

\newlength{\colwidth}
\settowidth{\colwidth}{Einzugsgebietsgröße}
\newcolumntype{F}[1]{>{\centering\arraybackslash}m{#1}}Das kannst du dir alles sparen und, wie Rainer schon angemerkt hat, F{\colwidth} durch c ersetzen.

Iowa
29-11-2005, 10:01
Klasse!
Klappt hervorragend. Werde mir aber auch nochmal "Satz von Tabellen" ansehen ... solche "Blocktabellen" sind ja wohl verpönt ...

also ... ich fass nochmal zusammen:

mit \renewcommand{\tabularxcolumn}[1]{m{#1}} hast du dem standard X der tabularx eine neue, nämlich in vertikaler richtung zentrierte bedeutung gegeben.

mit \newcolumntype{C}{>{\centering\arraybackslash}X} definiere ich nun meine zellen neu. nämlich horizontal zentriert, vertikal (durch X) und hab den richtigen Zeilenumbruch mit arraybackslash.

was mich jetzt noch interessiert ist: wieso brauche ich nicht beide packete? also
\usepackage{tabularx} und
\usepackage{array}

ich dachte die umdefination des umbruchs ist eine sache von dem arraypacket? und wenn das so ist, wirkt sich das nur bei tabellen und mathe aus oder auch auf text?

und noch eine frage: wieso stellt tex die tabelle auf eine neue seite, obwohl noch genug platz auf der vorherigen ist?

countbela666
29-11-2005, 18:37
wieso brauche ich nicht beide packete?Weil tabularx Makros aus dem array-Paket benötigt und dieses bereits intern über \RequirePackage lädt.


wirkt sich das nur bei tabellen und mathe aus oder auch auf text?Sollte sich nur auf die "Überladung" von \\ auf \tabularnewline, also den Umbruch innerhalb von Tabellen und nicht auf \newline für Fließtext auswirken.


wieso stellt tex die tabelle auf eine neue seite, obwohl noch genug platz auf der vorherigen ist?Aus irgendwelchen Gründen ist LaTeX scheinbar der Meinung, dass eben _nicht_ genug Platz für eine Gleitumgebung auf dieser Seite ist. Warum? K.A.

Grüße,
Marcel

Iowa
30-11-2005, 07:57
ich hab aber nur ne überschrift und 3 zeilen text auf der seite ... da muss genug platz sein!!!

countbela666
30-11-2005, 12:51
dann poste ein Minimalbeispiel, das den Fehler reproduziert.

Iowa
01-12-2005, 14:18
mh, ok ... ich habs ;-)

grund war wohl das stichwort "gleitobjekt"
mit einem

\begin{table}[h] %h = hier

hat das dann funktioniert ... juchu!