Hallo,

Einleitung: Ich erstelle automatisch Tabellen mit Hilfe von c#. Die Daten lese ich aus einer Xml-Datei. Da meine Tabellen automatisch erstellt werden (in 3er Blöcken / Spalten) musste ich die Tabelle genau so programmieren. Multicolumn ist für mich zwingend notwendig! Motel & $\sigma$ & \multicolumn{1}{|S|}{4.96665663}& 135.15 & 30.29 \\ \hline Der Tabellen Header mit "S" und "|" muss genau so aussehen wie ich es programmiert habe.

Jetzt zu meiner Frage:

Warum ändert sich die Spaltenbreite je nach Inhalt? Kann ich das mit irgendeinen Befehl sperren, ohne die Grundstruktur der Tabelle zu ändern? Danke.

Open in Online-Editor
\documentclass[paper=landscape]{scrartcl}
\usepackage{lscape}
\usepackage{booktabs}
\usepackage[copy-decimal-marker]{siunitx}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\begin{tabular}{L{6.6cm} L{1.2 cm}
S[table-column-width=1.15cm]|S[table-column-width=1.15cm]|S[table-column-width=1.15cm]} \hline
 Motel                    & $\sigma$ & \multicolumn{1}{|S|}{4.96665663}& 135.15 & 30.29 \\ \hline
 Motel                    &   $\sigma$ & \multicolumn{1}{|S|}{.53} & -147.73 & -25.44 \\ \hline
Motel                     &  $\sigma$ & \multicolumn{1}{|S|}{-9.27} & -0.01 & 1.28  \\ 
\end{tabular}
\bigskip

\begin{tabular}{L{6.6cm} L{1.2 cm}
S[table-column-width=1.15cm]|S[table-column-width=1.15cm]|S[table-column-width=1.15cm]} \hline
Haus                      & $\sigma$ & \multicolumn{1}{|S|}{4}& 135.15 & 30.29 \\ \hline
Passwort                  &   $\sigma$ & \multicolumn{1}{|S|}{1} & -147.73 & -25.44 \\ \hline
Motel                     &  $\sigma$ & \multicolumn{1}{|S|}{7} & -0.01 & 1.28  \\ 
\end{tabular}

\end{document}

gefragt 21 Mär '16, 10:47

Lutz's gravatar image

Lutz
1646
Akzeptiert-Rate: 0%

bearbeitet 26 Mär '16, 14:12

saputello's gravatar image

saputello
11.1k174365

2

\multicolumn{1}{|S[table-column-width=1.15cm]|}{4.96665663}. Du musst auch hier die gewünschte Breite eingeben, die aus dem Header wird einfach ignoriert. Bei der Breite von 1.15cm verhagelt es zwar den ganzen Inhalt (weil breiter als 1.15cm), aber dafür stimmt die Breite immer.

(21 Mär '16, 11:35) Henri

Inwiefern ist \multicolumn für Dich zwingend notwendig? Lässt man das weg, dann erhält man nämlich genau dasselbe Ergebnis, wie wenn man bei jedem \multicolumn die Spaltendeklaration aus dem Kopf wiederholt. Das \multicolumn nützt dann also gar nicht. Deshalb lässt man es besser weg. Weitere Anmerkungen in meiner Antwort.

(23 Mär '16, 09:14) saputello

danke für diesen support

(29 Mär '16, 13:16) Lutz

Die Tabellen sind mit einer expliziten Spaltenbreite von 1,15 cm für die Zahlenspalten nicht vernünftig darstellbar, da beispielsweise die Zahl 4.96665663 nicht in diese Breite passt. Erzwingt man also die Breite, beispielsweise mit \multicolumn{1}{S[table-column-width=1.15cm]|}{4.96665663}, so ragt die Zahl in die Nachbarspalte(n). Dadurch wird die Tabelle unlesbar und damit unnütz. Erzwingt man die Breite nicht, sondern verwendet wie im Beispiel \multicolumn{1}{S|}{4.96665663}, so wird die Spaltenbreite an die für die Zahl notwendige Breite angepasst, wobei der Dezimalpunkt entsprechend der Voreinstellung von S (in der Mitte der Spalte) positioniert wird. Eine einheitliche Breite über mehrere Tabellen ist dann nicht mehr möglich.

Es gibt nun mehrere Möglichkeiten, das Problem zu lösen. Zunächst einmal ist es sinnvoll, die ganzen \multicolumn wegzulassen. Verwendet man sie, sollte man daran denken, dass bei \multicolumn die vertikale Linie (außer der Linie vor der allerersten Spalte) grundsätzlich nur rechts von der Spaltendeklaration anzugeben ist. Die linke Linie kommt hingegen entweder von einer \multicolumn-Anweisung des linken Spaltennachbarn oder aus der Kopfdeklaration. Links angegebene | können in \multicolumn zu falsch platzierten Linien führen. Im Beispiel sind sie auch nicht notwendig. Verwendet man \multicolumn, so ist außerdem zu beachten, dass die Angabe dann die Kopfdeklaration überschreibt. Bei S-Spalten bedeutet das insbesondere, dass Breitenangaben aus dem Kopf ggf. zu wiederholen sind.

Die erste Möglichkeit, feste Spaltenbreiten über mehrere Tabellen zu erhalten ist, das Zahlenformat so zu wählen, dass es für alle Einträge passt:

Open in Online-Editor
\documentclass[paper=landscape,DIV=20]{scrartcl}
\usepackage[copy-decimal-marker]{siunitx}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\begin{tabular}{L{6.6cm}L{1.2cm}
S[table-format=2.8]|S[table-format=4.2]|S[table-format=3.2]} \hline
 motel                    & $\sigma$ & 4.96665663 & 135.15 & 30.29 \\ \hline
 motel                    &   $\sigma$ & .53 & -147.73 & -25.44 \\ \hline
motel                     &  $\sigma$ & -9.27 & -0.01 & 1.28  \\ 
\end{tabular}
\bigskip

\begin{tabular}{L{6.6cm}L{1.2cm}
S[table-format=2.8]|S[table-format=4.2]|S[table-format=3.2]} \hline
Haus                      & $\sigma$ & 4 & 135.15 & 30.29 \\ \hline
Passwort                  &   $\sigma$ & 1 & -147.73 & -25.44 \\ \hline
Motel                     &  $\sigma$ & 7 & -0.01 & 1.28  \\ 
\end{tabular}

\end{document}

Zahlenformat vorgegeben

Wie man sieht, ist hier \multicolumn überflüssig. Wollte man es verwenden, müsste man auch hier beispielsweise \multicolumn{1}{S[table-format=2.8]|}{4.96665663} schreiben.

Die zweite Möglichkeit besteht darin, siunitx die Zahlen runden zu lassen, damit sie in die vorgegebene Spaltenbreite passen:

Open in Online-Editor
\documentclass[paper=landscape,DIV=20]{scrartcl}
\usepackage[copy-decimal-marker]{siunitx}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\sisetup{round-mode=places,round-precision=2}
\begin{tabular}{L{6.6cm}L{1.2cm}
S[table-column-width=1.15cm]|S[table-column-width=1.15cm]|S[table-column-width=1.15cm]} \hline
 motel                    & $\sigma$ & 4.96665663 & 135.15 & 30.29 \\ \hline
 motel                    &   $\sigma$ & .53 & -147.73 & -25.44 \\ \hline
motel                     &  $\sigma$ & -9.27 & -0.01 & 1.28  \\ 
\end{tabular}
\bigskip

\begin{tabular}{L{6.6cm}L{1.2cm}
S[table-column-width=1.15cm]|S[table-column-width=1.15cm]|S[table-column-width=1.15cm]} \hline
Haus                      & $\sigma$ & 4 & 135.15 & 30.29 \\ \hline
Passwort                  &   $\sigma$ & 1 & -147.73 & -25.44 \\ \hline
Motel                     &  $\sigma$ & 7 & -0.01 & 1.28  \\ 
\end{tabular}

\end{document}

Da aber bereits Zahlen wie -147.73 nicht sauber in die angegebene Spaltenbreite passen, ist in diesem Fall die Ausrichtung der Dezimalpunkte nicht sauber:

mit Rundung

Besteht man auf die Verwendung von \muticolumn bei jedem Eintrag, so ist auch in diesem Fall, die Breite zu wiederholen, also beispielsweise \multicolumn{1}{S[table-column-width=1.15cm]|}{4.96665663} zu verwenden. Da ich die Rundung mit \sisetup angegeben habe, wird sie für die Zahl übernommen. Hätte ich sie im Tabellenkopf als Spalteneingenschaft angegeben, so wäre sie ebenfalls im zweiten Argument von \multicolumn zu wiederholen.

Um die Ausrichtung zu korrigieren, müsste man mit breiteren Spalten arbeiten:

Open in Online-Editor
\documentclass[paper=landscape,DIV=20]{scrartcl}
\usepackage[copy-decimal-marker]{siunitx}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\sisetup{round-mode=places,round-precision=2}%,table-format=4.2}
\begin{tabular}{L{6.6cm}L{1.2cm}
S[table-column-width=1.75cm]|S[table-column-width=1.75cm]|S[table-column-width=1.75cm]} \hline
 motel                    & $\sigma$ & 4.96665663 & 135.15 & 30.29 \\ \hline
 motel                    &   $\sigma$ & .53 & -147.73 & -25.44 \\ \hline
motel                     &  $\sigma$ & -9.27 & -0.01 & 1.28  \\ 
\end{tabular}
\bigskip

\begin{tabular}{L{6.6cm}L{1.2cm}
S[table-column-width=1.75cm]|S[table-column-width=1.75cm]|S[table-column-width=1.75cm]} \hline
Haus                      & $\sigma$ & 4 & 135.15 & 30.29 \\ \hline
Passwort                  &   $\sigma$ & 1 & -147.73 & -25.44 \\ \hline
Motel                     &  $\sigma$ & 7 & -0.01 & 1.28  \\ 
\end{tabular}

\end{document}

Rundung und breitere Spalten

Alternativ kann man auch hier ein passendes table-format verwenden:

Open in Online-Editor
\documentclass[paper=landscape,DIV=20]{scrartcl}
\usepackage[copy-decimal-marker]{siunitx}
\newcolumntype{L}[1]{>{\raggedright\let\newline\\\arraybackslash\hspace{0pt}}m{#1}}
\begin{document}
\sisetup{round-mode=places,round-precision=2,table-format=4.2}
\begin{tabular}{L{6.6cm}L{1.2cm}S|S|S} \hline
 motel                    & $\sigma$ & 4.96665663 & 135.15 & 30.29 \\ \hline
 motel                    &   $\sigma$ & .53 & -147.73 & -25.44 \\ \hline
motel                     &  $\sigma$ & -9.27 & -0.01 & 1.28  \\ 
\end{tabular}
\bigskip

\begin{tabular}{L{6.6cm}L{1.2cm}S|S|S} \hline
Haus                      & $\sigma$ & 4 & 135.15 & 30.29 \\ \hline
Passwort                  &   $\sigma$ & 1 & -147.73 & -25.44 \\ \hline
Motel                     &  $\sigma$ & 7 & -0.01 & 1.28  \\ 
\end{tabular}

\end{document}

Rundung und Zahlenformat

Da in diesem Beispiel Rundung und Zahlenformat mit \sisetup gesetzt wurden, kann man auch unbesorgt für alle Zahleneinträge \multicolumn{1}{S|}{…} verwenden. Sinnvoll ist das jedoch nicht.

Permanenter link

beantwortet 22 Mär '16, 08:23

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 23 Mär '16, 09:12

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×256
×34
×11
×9

gestellte Frage: 21 Mär '16, 10:47

Frage wurde gesehen: 9,723 Mal

zuletzt geändert: 29 Mär '16, 13:16