PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabular letzte Spalte falsch formatiert!!!



ChristianS
31-07-2012, 09:36
Hallo,
ich schreibe meine Abschlussarbeit mit Latex und komme an einer Stelle einfach nicht weiter. Auch im Internet bin ich nicht fündig geworden, deswegen wende ich mich nun an euch mit der Hoffnung ihr könnt mir helfen.

Die letzte Spalte in meinen Tabellen ist nie vertikal zentriert. Ich habe euch mal ein Beispiel aus meinem Skript rausgesucht. Dieser Fehler tritt durch die Bank weg bei jeder Tabelle auf.

Latex Code:



\begin{figure}[htp]
\centering

\begin{footnotesize}
\begin{tabular}{|*{8}{m{0.1\textwidth}|}} %müsste eig 0.125 sein aber %passt so besser

\multicolumn{8}{c}{\large{Header}}\\
\hline
Byte 0 & Byte 1 & Byte 2 & Byte 3 & Byte 4 & Byte 5 & Byte 6 & Byte 7\\[1cm]
\hline
\multicolumn{2}{|l|}{Interface Version Major}&\multicolumn{2}{l|}{Interface Version Minor}&Priority&\multicolumn{2}{l|}{Command}&Reserve\\[1cm]
\hline

\end{tabular}
\end{footnotesize}
\caption{Der Header für die Kommunikation der Maschinenbots über UDP.}
\label{fig:mbheader}

\end{figure}


http://img5.fotos-hochladen.net/uploads/tabularfehler16rw2ejhfi.png (http://www.fotos-hochladen.net)

hakaze
31-07-2012, 10:30
Der Text verschiebt sich, weil der 1 cm hohe Zeilenumbruch nach dem letzten Textfeld mit eingefügt wird.

Ich würde es aber ganz ohne Tabelle mit dem darauf spezialisierten Paket bytefield (http://www.ctan.org/pkg/bytefield) machen:
\documentclass[paper=a4]{scrartcl}

\usepackage{bytefield}

\begin{document}
\begin{figure}[htp]
\centering
\begin{bytefield}[bitwidth=1.6cm,bitheight=1.6cm, boxformatting={\centering\footnotesize}]{8}
\bitbox[b]{8}{\Large Header} \\
\bitbox{1}{Byte 0} & \bitbox{1}{Byte 1} & \bitbox{1}{Byte 2} & \bitbox{1}{Byte 3} & \bitbox{1}{Byte 4} & \bitbox{1}{Byte 5} & \bitbox{1}{Byte 6} & \bitbox{1}{Byte 7} \\
\bitbox{2}{Interface Version Major} & \bitbox{2}{Interface Version Minor} & \bitbox{1}{Priority} & \bitbox{2}{Command} & \bitbox{1}{Reserve} \\
\end{bytefield}
\caption{Der Header für die Kommunikation der Maschinenbots über UDP.}
\label{fig:mbheader}
\end{figure}
\end{document}

rstuby
31-07-2012, 10:39
Dein Beispiel läuft bei mir nicht. Wenn ich so
\documentclass{scrreprt}

\begin{document}
\begin{table}[htp]
\centering
\footnotesize
\begin{tabular}{|*{8}{m{0.1\textwidth}|}} %müsste eig 0.125 sein aber %passt so besser
\multicolumn{8}{c}{\large{Header}}\\
\hline
Byte 0 & Byte 1 & Byte 2 & Byte 3 & Byte 4 & Byte 5 & Byte 6 & Byte 7\\[1cm]
\hline
\multicolumn{2}{|l|}{Interface Version Major}&\multicolumn{2}{l|}{Interface Version Minor}&Priority&\multicolumn{2}{l|}{Command}&Reserve\\[1cm]
\hline
\end{tabular}
\normalsize
\caption{Der Header für die Kommunikation der Maschinenbots über UDP.}
\label{fig:mbheader}

\end{table}
\end{document}

ein Minimalbeispiel daraus mache (ich schätze mal, du hast nur aus Versehen eine figure- anstatt table-Umgebung genommen und die Schriftgrößeneinstellung als Umgebung verwendet), bekomme ich die Fehlermeldung


illegal character in array arg. \begin{tabular}{|*{8}{m{0.1\textwidth}|}}

ChristianS
31-07-2012, 11:49
Hallo,
erstmal danke für die schnelle Antwort.

@hakaze: Das mit dem Bytefield kannte ich gar nicht funktioniret abre super. Sieht auch viel besser aus. Danke dafür.

@rstuby: Ich bin noch kein Profi im Umgang mit Latex. Ich kann dazu nur sagen: Bei mir hat das funktioniert. Vlt fehlen irgendwelche Bibliotheken oder so. Die Figure hab ich extra genommen weil der Header eine Abbildung sein soll und keine Tabelle und die schriftgröße habe ich geändert weil die Standardschriftgröße zu groß für die Felder des headers wär.

Danke an euch beide mein Problem hat sich geklärt
MfG
ChristianS

ChristianS
31-07-2012, 11:51
Eine Sache wäre da noch:
kann ich dem bytefield sagen er soll für die Breite jedes Feldes die \textwidth geteilt durch 8 nehmen damit es genau die textbreite ist? Und kann man den Reihen des Bytefield unterschiedliche Höhen geben?

rstuby
31-07-2012, 11:59
Hallo Christian!
Darum geht es ja gerade: Die Wahrscheinlichkeit, dass dir jemand helfen kann, ist immer größer, wenn du ein lauffähiges Minimalbeispiel angibst. Manchmal ist es mir bekannt oder recht einfach zu googeln, welches \usepackage noch gebraucht wird, in diesem Fall aber war ich überfragt und für dich ist es ja kein Problem, ein MB mit allen notwendigen Paketen zu erstellen. In deinem Originaldokument hast du sie ja sowieso, du musst nur diejenigen auskommentieren und am Ende löschen, die für das Beispiel nicht erforderlich sind (was du ausprobierst).

Das mit der Schriftgröße meinte ich ein bisschen anders. In meinem Beispiel habe ich die Schriftgröße ja auch umgeschaltet, aber mit \footnotesize und \normalsize und nicht mit \begin{footnotesize} und \end{footnotesize}, was bei dir zwar funktioniert, aber nicht so gedacht ist.

Leider kann ich dir bei deiner neuen Frage nicht helfen, da ich bytefield nicht kenne.

ChristianS
31-07-2012, 12:20
@rstuby: Ja du hast recht ich hätte die Abhängigkeiten mit angeben müssen. Mach ich dann nächstes mal. Jetzt hat mir ja das Bytefield schon die Frage beantwortet.

hakaze
31-07-2012, 13:10
Eine Sache wäre da noch:
kann ich dem bytefield sagen er soll für die Breite jedes Feldes die \textwidth geteilt durch 8 nehmen damit es genau die textbreite ist? Und kann man den Reihen des Bytefield unterschiedliche Höhen geben?Siehe die Paketanleitung (http://texdoc.net/texmf-dist/doc/latex/bytefield/bytefield.pdf) ;)

Für die Breite ist die Option bitwidth verantwortlich; da ginge auch
bitwidth=0.125\textwidth
Wie man einzelne Zeilen in der Höhe verändert, habe ich jetzt nicht parat. Mehrzeilige Einträge funktionieren laut Anleitung aber schon.