PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabellenspalten sauber aufteilen



roehrich
11-10-2012, 08:28
Hallo,

ich hab hier eine Tabelle die ich mir mehr oder weniger aus verschiedenen Anleitungen zusammengesucht hab und diese ist auch fast perfekt, jedoch stört mich ein kleines Detail.
Generiere ich mein Dokument wird alles richtig erstellt, was jedoch nicht passt ist die Breite der einzelnen Spalten in denen die "Bits" stehen, also Zeile 2 und 4.
Diese haben unterschiedliche Breiten und das stört optisch leider sehr.
Wie bekomme ich es hin dass Latex diese Spalten alle gleich breit macht?

Anbei die Tabelle die ich erstellt habe.


\begin{table}
\centering
\begin{tabular*}{0.8\textwidth}{@{\extracolsep\fil l}|c|c|c|c|c|c|c|c|@{}}
\hline
\multicolumn{8}{|c|}{Byte} \\
\hline
Bit 7&Bit 6&Bit 5&Bit 4&Bit 3&Bit 2&Bit 1&Bit 0\\
\hline
\multicolumn{2}{|c|}{Eintrag1} & \multicolumn{2}{c|}{Eintrag2} & \multicolumn{2}{c|}{Eintrag3} & \multicolumn{2}{c|}{Eintrag4} \\
%\hline
Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0\\
\hline
\end{tabular*}
\caption{Tabelle1}
\label{tbl:Tabelle1}
\end{table}

klops
11-10-2012, 08:44
Wenn ich Deinen Codeschnippsel zu einem lauffähigen Code erweitere:
\documentclass{scrartcl}

\begin{document}
\begin{table}
\centering
\begin{tabular*}{0.8\textwidth}{@{\extracolsep\fil l}|c|c|c|c|c|c|c|c|@{}}
\hline
\multicolumn{8}{|c|}{Byte} \\
\hline
Bit 7&Bit 6&Bit 5&Bit 4&Bit 3&Bit 2&Bit 1&Bit 0\\
\hline
\multicolumn{2}{|c|}{Eintrag1} & \multicolumn{2}{c|}{Eintrag2} & \multicolumn{2}{c|}{Eintrag3} & \multicolumn{2}{c|}{Eintrag4} \\
%\hline
Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0\\
\hline
\end{tabular*}
\caption{Tabelle1}
\label{tbl:Tabelle1}
\end{table}
\end{document} kann ich das Problem nicht nachvollziehen. Also erkläre bitte etwas genauer Dein Problem bzw.mache ein vollständiges Minimalbeispiel (http://www.mrunix.de/forums/showthread.php?t=66921), das Dein Problem wirklich zeigt.

Mir ist übrigens auch nicht klar, warum Du an der Stelle tabular* statt tabular verwendest:
\documentclass{scrartcl}

\begin{document}
\begin{table}
\centering
\begin{tabular}{@{}|c|c|c|c|c|c|c|c|@{}}
\hline
\multicolumn{8}{|c|}{Byte} \\
\hline
Bit 7&Bit 6&Bit 5&Bit 4&Bit 3&Bit 2&Bit 1&Bit 0\\
\hline
\multicolumn{2}{|c|}{Eintrag1} & \multicolumn{2}{c|}{Eintrag2} & \multicolumn{2}{c|}{Eintrag3} & \multicolumn{2}{c|}{Eintrag4} \\
%\hline
Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0\\
\hline
\end{tabular}
\caption{Tabelle1}
\label{tbl:Tabelle1}
\end{table}
\end{document}

defcon
11-10-2012, 08:56
Ich kann jetzt auch nur raten, da alles ganz normal aussieht, daß Du vielleicht bei den Zellen "Eintragxy" unterschiedlich lange Texte drin hast.

Z.B. so:


\documentclass{scrartcl}

\begin{document}
\begin{table}
\centering
\begin{tabular}{@{}|c|c|c|c|c|c|c|c|@{}}
\hline
\multicolumn{8}{|c|}{Byte} \\
\hline
Bit 7&Bit 6&Bit 5&Bit 4&Bit 3&Bit 2&Bit 1&Bit 0\\
\hline
\multicolumn{2}{|c|}{Eintrag1} & \multicolumn{2}{c|}{Eintrag2} & \multicolumn{2}{c|}{Einasdfasdftasdfrag3} & \multicolumn{2}{c|}{Eintrag4} \\
%\hline
Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0\\
\hline
\end{tabular}
\caption{Tabelle1}
\label{tbl:Tabelle1}
\end{table}
\end{document}

Und dann paßt sich natürlich die Spaltenbreite dem Inhalt an.
Aber ne Lösung können wir ja finden, wenn wir wissen, ob das überhaupt das Problem ist.

hakaze
11-10-2012, 08:58
Der Vollständigkeit halber, sei noch auf das Paket bytefield (http://www.ctan.org/pkg/bytefield) hingewiesen, dass für die Erstellung solcher Bit/Byte-Schemata spezialisiert ist.

roehrich
11-10-2012, 09:19
tabular* verwende ich um die Tabelle etwas breiter zu machen, in den normalen Einstellungen war es mir zu gequetscht und da genau darüber eine wesentlich breitere Tabelle steht sieht es so optisch nicht so wild aus.

Ich hoffe das hier reicht als Beispiel:

\documentclass[oneside,pdftex,a4paper]{scrreprt} %Din A4 Artikel, Halbe Zeile Abstand nach Absatz
\usepackage[left=3cm,right=2.5cm,top=2cm,bottom=2cm,includehea dfoot]{geometry}%Seitenränder
\usepackage{array}
\usepackage[pdftex, pdfpagemode={UseOutlines}, bookmarks, colorlinks,linkcolor={blue}, citecolor={blue}, urlcolor={red}, pdfstartview={Fit},plainpages=false,pdfpagelabels]{hyperref}

\renewcommand{\familydefault}{\sfdefault} %Serifenlose Schrift als Standart

\begin{document}

\begin{table}
\centering
\begin{tabular*}{0.8\textwidth}{@{\extracolsep\fil l}|c|c|c|c|c|c|c|c|@{}}
\hline
\multicolumn{8}{|c|}{\textbf{Byte}}\\
\hline
Bit 7&Bit 6&Bit 5&Bit 4&Bit 3&Bit 2&Bit 1&Bit 0\\
\hline
\multicolumn{2}{|c|}{Eintrag1} & \multicolumn{2}{c|}{Eintrag2} & \multicolumn{2}{c|}{Eintrag3} & \multicolumn{2}{c|}{Eintrag4}\\
%\hline
Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0\\
\hline
\end{tabular*}
\caption{Tabelle1}
\label{tbl:Tabelle1}
\end{table}

\end{document}

Wenn ich das generiere kommt das angehängte Bild dabei heraus.
Man kann da schön sehen dass die Spalten in denen zB Bit 7 und Bit 6 steht unterschiedlich breit sind.

EDIT: Wenn ich das Ganze mit "tabular" statt "tabular*" mache passen die Abstände, dann ist mir die Tabelle aber wieder nicht breit genug :(

esdd
11-10-2012, 10:02
Hallo,

du kannst dafür das Paket tabularx nehmen:

\documentclass[parskip=half]{scrreprt} %Din A4 Artikel, Halbe Zeile Abstand nach Absatz
\usepackage[left=3cm,right=2.5cm,top=2cm,bottom=2cm,includehea dfoot]{geometry}%Seitenränder
\usepackage{array}
\usepackage{tabularx}
\usepackage{ragged2e}

\newcolumntype{C}{>{\Centering}X}

\begin{document}
\begin{table}
\centering
\begin{tabularx}{0.8\linewidth}{|*{8}{C|}}
\hline
\multicolumn{8}{|c|}{\textbf{Byte}}\\
\hline
Bit 7&Bit 6&Bit 5&Bit 4&Bit 3&Bit 2&Bit 1&Bit 0\\
\hline
\multicolumn{2}{|c|}{Eintrag1} & \multicolumn{2}{c|}{Eintrag2} & \multicolumn{2}{c|}{Eintrag3} & \multicolumn{2}{c|}{Eintrag4}\\
%\hline
Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0\\
\hline
\end{tabularx}
\caption{Tabelle1}
\label{tbl:Tabelle1}
\end{table}

\end{document}
oder das Paket tabu:

\documentclass{scrreprt} %Din A4 Artikel, Halbe Zeile Abstand nach Absatz
\usepackage[left=3cm,right=2.5cm,top=2cm,bottom=2cm,includehea dfoot]{geometry}%Seitenränder
\usepackage{tabu}

\begin{document}
\begin{table}
\centering
\begin{tabu} to 0.8\linewidth {|*{8}{X[c]|}}
\hline
\multicolumn{8}{|c|}{\textbf{Byte}}\\
\hline
Bit 7&Bit 6&Bit 5&Bit 4&Bit 3&Bit 2&Bit 1&Bit 0\\
\hline
\multicolumn{2}{|c|}{Eintrag1} & \multicolumn{2}{c|}{Eintrag2} & \multicolumn{2}{c|}{Eintrag3} & \multicolumn{2}{c|}{Eintrag4}\\
%\hline
Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0&Bit 1&Bit 0\\
\hline
\end{tabu}
\caption{Tabelle1}
\label{tbl:Tabelle1}
\end{table}

\end{document}
Gruß
Elke

roehrich
11-10-2012, 10:13
Vielen Dank Elke,

das Beispiel mit tabularx hat genau das gemacht was ich wollte :)

Nur eine Frage: Die Zeile "\newcolumntype{C}{>{\centering}X}", wozu ist die gut? Die wird doch eigentlich garnicht gebraucht oder?
Und verstehe ich den Rest richtig? Alle Felder die mit X markiert werden haben eine flexible Größe und der >{\centering} Part zentriert den Inhalt dann innerhalb des Felds?

esdd
11-10-2012, 10:49
Hallo,

das Beispiel mit tabularx habe ich verändert, so dass der newcolumntype jetzt auch verwendet wird.

Der verfügbare Platz wird gleichmäßig auf die X-Spalten verteilt. Sind noch andere Spaltentypen wie z.B. r oder p{...} angegeben wird nur der restliche Platz verteilt.

>{...} stammt aus dem array Paket und sorgt dafür, dass der Code in der Klammer vor dem Beginn der folgenden Spalte ausgeführt wird, d.h. >{\Centering} zentriert den Inhalt der folgenden Spalte.

Gruß
Elke

roehrich
11-10-2012, 10:56
Ok, verstanden :)

Danke nochmal für die Erläuterung.

defcon
11-10-2012, 11:54
Aber schau dir für die zukunft mal das von hakaze vorgeschlagene Paket bytefield (http://www.ctan.org/pkg/bytefield) mal an, das ist echt genial. Hab´s heute auch das erste mal gesehen.