PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : vertikal zentrierter Tabelleninhalt - letze-Spalte-Bug



kermit_frosch
06-04-2008, 13:12
Mit frischem Account hoffe ich, dass mir geholfen werden kann...

ich habe eine Tabelle erstellt deren Spalteninhalt vertikalt zentriert sein soll. (array-package; spaltentyp m{})
Kurios erscheint mir allerdings das die letzte Spalte sich dennoch nicht an den m-Spaltentyp zu halten scheint... Füge ich eine weitere "Pseudospalte" dahinter ein, so ist der Inhalt der nun vorletzen Spalte in der Tat vertikal zentriert...

hier eine der besagten Tabellen



\begin{table}[htbp]
\caption{pin assignment of the 8 pin DIN connector}
\begin{center}
\begin{tabular}{|>{\centering}m{1.2cm}|m{1.6cm}|m{2.0cm}|m{5.0cm}|}
\hline
pin & color & at encoder & description \\[6pt] \hline
1 & ------ & ---------- & $\langle empty \rangle$ \\[6pt] \hline
2 & yellow & 8 (gray) & Encoder channel B \\[6pt] \hline
3 & white & 7 (violet) & Encoder channel $\overline{B}$ \\[6pt] \hline
4 & blue & 6 (blue) & Encoder channel A \\[6pt] \hline
5 & green & 5 (green) & Encoder channel $\overline{A}$ \\[6pt] \hline
6 & ------ & ---------- & $\langle empty \rangle$ \\[6pt] \hline
7 & red & 2 (red) & Encoder power supply (+5V) \\[6pt] \hline
8 & black & 3 (orange) & GND \\[6pt] \hline
\end{tabular}
\end{center}
\label{encoder pins}
\end{table}
Ich zweifel mal nicht am array-package und bin für jeden hinweis dankbar

localghost
06-04-2008, 14:03
Mit frischem Account hoffe ich, dass mir geholfen werden kann [...]
Verstehe ich nicht. Vielleicht kannst Du das mal erklären. Eine altes Thema kann auch wieder hervorgekramt werden.

[...] Ich zweifel mal nicht am array-package und bin für jeden hinweis dankbar
Dazu besteht auch kein Grund. Du setzt nur die vorhandenen Möglichkeiten falsch ein. Wenn Du einer Zeile noch zusätzliche Höhe verschaffen willst, gibt es dafür einen passenderen Befehl aus array (http://dante.ctan.org/CTAN/help/Catalogue/entries/array.html).

\begin{table}[!ht]
\centering
\setlength{\extrarowheight}{3pt} % Für globale Änderung in den Vorspann einfügen
\caption{pin assignment of the 8 pin DIN connector}\label{tab:encoder-pins}
\begin{tabular}{|>{\centering}m{1.2cm}|m{1.6cm}|m{2.0cm}|m{5.0cm}|}\ hline
pin & color & at encoder & description \\ \hline
1 & ------ & ---------- & $\langle empty \rangle$ \\ \hline
2 & yellow & 8 (gray) & Encoder channel B \\ \hline
3 & white & 7 (violet) & Encoder channel $\overline{B}$ \\ \hline
4 & blue & 6 (blue) & Encoder channel A \\ \hline
5 & green & 5 (green) & Encoder channel $\overline{A}$ \\ \hline
6 & ------ & ---------- & $\langle empty \rangle$ \\ \hline
7 & red & 2 (red) & Encoder power supply (+5V) \\ \hline
8 & black & 3 (orange) & GND \\ \hline
\end{tabular}
\end{table}
Ursache waren die 6pt zusätzlicher Abstand nach unten hinter dem Zeilenumbruch. Der wirkt sich nachträglich nur auf die letzte Spalte aus und schiebt deren Inhalte nach oben. Nützliche Hinweise zum Satz von Tabellen gibt es in tabsatz (http://dante.ctan.org/CTAN/help/Catalogue/entries/tabsatz.html).


MfG
Thorsten¹

kermit_frosch
06-04-2008, 14:43
Verstehe ich nicht. Vielleicht kannst Du das mal erklären. Eine altes Thema kann auch wieder hervorgekramt werden.

huch, hab ich mich dumm ausgegrückt: ich bin neu im forum, deswegen der frische account...

danke für den hinweis mit \extrarowheight - allerdings fügt der befehl wohl "platz nach oben" hinzu - sodass der inhalt trotz m{} nicht mehr zentriert ist.
verblüffenderweise ist sogar der inhalt einer b{}-spalte mittiger als der einer m{}-spalte...

gibts denn nicht 'ne möglichkeit die zellenhöhe explizit festzulegen?

danke für deine hilfe, kermit

localghost
06-04-2008, 15:45
[...] danke für den hinweis mit \extrarowheight - allerdings fügt der befehl wohl "platz nach oben" hinzu - sodass der inhalt trotz m{} nicht mehr zentriert ist.
verblüffenderweise ist sogar der inhalt einer b{}-spalte mittiger als der einer m{}-spalte [...]
Das kann ich so nicht nachvollziehen. Bei mir läuft das fehlerfrei. Der Befehl erhöht die Zeile übrigens nicht nur nach oben. Vielleicht kannst Du das beschriebene Verhalten mal mit einem lauffähigen Minimalbeispiel (http://www.minimalbeispiel.de) erläutern.

voss
06-04-2008, 16:20
Das kann ich so nicht nachvollziehen. Bei mir läuft das fehlerfrei. Der Befehl erhöht die Zeile übrigens nicht nur nach oben. Vielleicht kannst Du das beschriebene Verhalten mal mit einem lauffähigen Minimalbeispiel (http://www.minimalbeispiel.de) erläutern.

\extrarowheight erhöht nur nach oben

Herbert

voss
06-04-2008, 16:22
huch, hab ich mich dumm ausgegrückt: ich bin neu im forum, deswegen der frische account...

danke für den hinweis mit \extrarowheight - allerdings fügt der befehl wohl "platz nach oben" hinzu - sodass der inhalt trotz m{} nicht mehr zentriert ist.
verblüffenderweise ist sogar der inhalt einer b{}-spalte mittiger als der einer m{}-spalte...

gibts denn nicht 'ne möglichkeit die zellenhöhe explizit festzulegen?


kann man mit einer unsichtbaren linie, was du aber hier nicht brauchst:


\documentclass[12pt,a4paper]{article}
\usepackage[T1]{fontenc}

\usepackage{ragged2e,array}

\begin{document}
\begin{table}[!ht]
\centering
\def\arraystretch{1.3}
\caption{pin assignment of the 8 pin DIN connector}\label{tab:encoder-pins}
\medskip
\begin{tabular}{@{}>{\centering}m{1.2cm} m{1.6cm} m{2.0cm} >{\RaggedRight}m{5.0cm}@{}}\hline
\emph{pin} & \emph{color} & \emph{at encoder} & \emph{description}\\ \hline
1 & --- & --- & $\langle empty \rangle$ \\
2 & yellow & 8 (gray) & Encoder channel B \\
3 & white & 7 (violet) & Encoder channel $\overline{B}$ \\
4 & blue & 6 (blue) & Encoder channel A \\
5 & green & 5 (green) & Encoder channel $\overline{A}$ \\
6 & --- & --- & $\langle empty \rangle$ \\
7 & red & 2 (red) & Encoder power supply (+5V) \\
8 & black & 3 (orange) & GND \\ \hline
\end{tabular}
\end{table}

\end{document}

Ich finde Tabellen mit wenigen Linien besser lesbar.

Herbert

kermit_frosch
06-04-2008, 19:14
Das kann ich so nicht nachvollziehen. Bei mir läuft das fehlerfrei. Der Befehl erhöht die Zeile übrigens nicht nur nach oben. Vielleicht kannst Du das beschriebene Verhalten mal mit einem lauffähigen Minimalbeispiel (http://www.minimalbeispiel.de) erläutern.



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

\begin{document}
\begin{table}[!ht]
\centering
\setlength{\extrarowheight}{20pt}
\caption{pin assignment of the 8 pin DIN connector}
\begin{tabular}{|m{2cm}|b{2.6cm}|p{5.0cm}|} \hline
m-spalte & b-spalte & p-spalte \\ \hline
1 & ------ & $\langle empty \rangle$ \\ \hline
2 & yellow & Encoder channel B \\ \hline
3 & white & Encoder channel $\overline{B}$ \\ \hline
\end{tabular}
\end{table}
\end{document}


bei mir ist die m-spalte fast auf der grundlinie, während die inhalte der b- und p-spalte je um 10pt nach oben verschoben sind... bei mir bleibt halt irgendwie der m-spaltentyp unberücksichtigt
sieht das minimalbeispiel bei dir korrekt aus?

@voss: danke für das layout - ich hab mich bis jetzt noch nicht so viel mit tabellen beschäfitgen müssen... Dein design gefällt mir.

localghost
06-04-2008, 19:24
\extrarowheight erhöht nur nach oben

Herbert
Wir wir daraus lernen, hilft dir dieser Befehl nicht weiter. Also mache es so, wie Herbert es vorschlägt.

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

\begin{document}
\begin{table}[!ht]
\centering
\renewcommand{\arraystretch}{1.3}
\caption{pin assignment of the 8 pin DIN connector}
\begin{tabular}{|m{2cm}|b{2.6cm}|p{5.0cm}|} \hline
m-spalte & b-spalte & p-spalte \\ \hline
1 & ------ & $\langle empty \rangle$ \\ \hline
2 & yellow & Encoder channel B \\ \hline
3 & white & Encoder channel $\overline{B}$ \\ \hline
\end{tabular}
\end{table}
\end{document}

kermit_frosch
06-04-2008, 19:30
mensch, klar... irgendwie ist heut' nicht mein tag...
schön, wen mal einer mit abstand auf die sache guckt...
das posten hier hat sich echt gelohnt! danke an euch!

localghost
06-04-2008, 19:40
Und auch das hilft nicht viel. Man kann es mit der Streckung ja mal etwas übertreiben.

\renewcommand{\arraystretch}{2}
Auch hier wird die erste Spalte von der Formatierung ausgespart. Die anderen Spalten sind schön vertikal zentriert, wie übrigens bei meiner Version auch.

voss
07-04-2008, 08:50
Und auch das hilft nicht viel. Man kann es mit der Streckung ja mal etwas übertreiben.

\renewcommand{\arraystretch}{2}
Auch hier wird die erste Spalte von der Formatierung ausgespart. Die anderen Spalten sind schön vertikal zentriert, wie übrigens bei meiner Version auch.

\arraystretch bezieht sich auf die Basislinie der Zeile und nicht die Mitte der Zeichen.
Und m,b und p-Spalten zu mischen ist zudem unglücklich. Aber es gibt andere
Möglichkeiten.


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

\begin{document}
\begin{tabular}{m{2cm}m{2.6cm} m{5.0cm}} \hline
m-spalte & m-spalte & m-spalte \\ \hline
1 & --- & $\langle empty \rangle$ \\ \hline
2 & yellow und noch etwas mehr & Encoder channel B \\ \hline
3 & white und noch mehr & Encoder channel $\overline{B}$ \\ \hline
\end{tabular}

\bigskip
\begin{tabular}{>{\rule[-2ex]{0pt}{5ex}}m{2cm}m{2.6cm} m{5.0cm}} \hline
m-spalte & m-spalte & m-spalte \\ \hline
1 & --- & $\langle empty \rangle$ \\ \hline
2 & yellow und noch etwas mehr & Encoder channel B \\ \hline
3 & white und noch mehr & Encoder channel $\overline{B}$ \\ \hline
\end{tabular}

\end{document}

Herbert