Siuntix: Ausrichtung am Komma und feste Spaltenbreite

Tabellen und Grafiken erstellen und anordnen


Hanni

Siuntix: Ausrichtung am Komma und feste Spaltenbreite

Beitrag von Hanni »

Liebes Forum,

ich versuche meine Tabellen möglichst gleich breit zu gestalten und trotzdem eine Ausrichtung am Koma hinzubekommen. Wenn ich die Spaltenbreite vorgebe, gelingt mir aber nicht mehr die Ausrichtung. Was mache ich falsch? Ich habe zusätzlich unterschiedliche Anzahlen von Signifikanzsternen hinter den Werten und bin mir nicht sicher wie ich das definieren soll. Soweit ich weiß, kann ich ja eine verschieden Anzahl an Stellen vorgeben, richtig?

Vielen Dank!

Hanni

Hier ein Minimalbeispiel:
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,lmargin={2.5cm},rmargin={2.5cm},tmargin={3cm},bmargin = {3cm}]{geometry}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{ragged2e}
\usepackage{rotating}}
\usepackage{lscape}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{array}
\usepackage{siunitx}
\sisetup{input-symbols = ()}

\begin{document}
\begin{sidewaystable}
    \centering
    \caption{XYZ}
    \def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\sisetup{table-space-text-post = \sym{***}}
\begin{tabular}{L{5cm}L{1,9cm}L{1,9cm}L{1,9cm}L{1,9cm}L{1,9cm}L{1,9cm}L{1,9cm}L{1,9cm} SS[table-format=4.2---]SSSSSSSS}
      & {2007} & {2008} & {2009} & {2010} & {2011} & {2012} & {2013} & {2014} \\
\hline
Ergebnis &       &       &       &       &       &       &       &  \\
a & -25,51\sym{***} & -17,14\sym{***} & -26,95\sym{***} & -17,92\sym{***} & -25,00\sym{***} & -14,19\sym{***} & -65,98\sym{***} & -89,15\sym{***} \\
b & -19,13\sym{***} &  -24,98\sym{***} &  -90,50\sym{***} & -55,70\sym{***} &  {-66,07}\sym{***} & -54,80\sym{***} & -76,43 & -14,00\sym{*} \\
c &  {n.a.} &  -49,89 &  130,72 & -120,86 &  59,63 & -29,37 & 12,85 & -34,76 \\
d &  -21,79\sym{***} &  -27,71\sym{***} &  -79,04\sym{***} & -78,42\sym{***} &  -28,10\sym{***} & -55,47\sym{***} & -76,03 & -78,07 \\
e & {n.a.} &  -34,44\sym{***} &  -36,19\sym{**} & -45,28\sym{***} &  {-19,18} & -12,38\sym{***} & -15,67   & -57,98 \\
\bottomrule
\end{tabular}%
    \label{tab:XYZ}
\end{sidewaystable}

\end{document}

Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Beitrag von Rolli »

Liebe(r) Hanni,

Dein Minimalbeispiel compiliert nicht.

Clicke mal auf "Öffne im Overleaf" und schaue Dir alle Fehler an (es sind mehrere). So muss man raten, was Du meinst, und sieht Dein Problem nicht.

Also bitte: Dein Minimalbeispiel so ändern, dass es a) fehlerfrei compiliert und man b) Dein Problem erkennen kann.

Gruß vom Rolli

Gast

Beitrag von Gast »

siunitx kennt übrigens auch eine Option, um die Breite von S-Spalten festzulegen. Siehe dazu das [d]siunitx[/d]-Manual.

Hanni

aktualisierter Code

Beitrag von Hanni »

Lieber Rollli,

vielen Dank für deinen Kommentar. Leider kompiliert im Overleaf der Code nicht, welcher bei mir in Sharelatex funktioniert. Mir ist auch nicht aufgefallen, dass ein Paket fehlt. Was bisher funktioniert hat ist das:
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,lmargin={2.5cm},rmargin={2.5cm},tmargin={3cm},bmargin = {3cm}]{geometry}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{ragged2e}
\usepackage{rotating}
\usepackage{lscape}
\usepackage{setspace}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{array}
\usepackage{siunitx}
\sisetup{input-symbols = ()}

\begin{document}
\begin{sidewaystable}
    \centering
    \caption{XYZ}
    \def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\sisetup{table-space-text-post = \sym{***}}
\begin{tabular}{l*{4}{S[table-align-text-post=false]}}\\
\hline
      & 2007 & 2008 & 2009 & 2010 & 2011 & 2012 & 2013 & 2014 \\
      \hline
a & -25,51\sym{***} & -17,14\sym{***} & -26,95\sym{***} & -17,92\sym{***} & -25,00\sym{***} & -14,19\sym{***} & -65,98\sym{***} & -89,15\sym{***} \\
b & -19,13\sym{***} &  -24,98\sym{***} &  -90,50\sym{***} & -55,70\sym{***} &  {-66,07}\sym{***} & -54,80\sym{***} & -76,43 & -14,00\sym{*} \\
c &  {n.a.} &  -49,89 &  130,72 & -120,86 &  59,63 & -29,37 & 12,85 & -34,76 \\
d &  -21,79\sym{***} &  -27,71\sym{***} &  -79,04\sym{***} & -78,42\sym{***} &  -28,10\sym{***} & -55,47\sym{***} & -76,03 & -78,07 \\
e & {n.a.} &  -34,44\sym{***} &  -36,19\sym{**} & -45,28\sym{***} &  {-19,18} & -12,38\sym{***} & -15,67   & -57,98 \\
\bottomrule
\end{tabular}%
    \label{tab:XYZ}
\end{sidewaystable}

\end{document}
Dort kann ich aber keine feste Spaltenbreite festlegen.

Was ich stattdessen dann versucht habe ist erst mit {L{p{1,9cm}S[table-column-width=1,9cm]} als Tabular-Argument die Breite für jede Spalte festzuschreiben. Das ging auch, nur war dann der Inhalt nicht mehr ausgerichtet.

Ich hoffe ihr könnt meiner Darstellung einigermaßen folgen.

Viele Grüße

Hanni

Rolli
Forum-Guru
Forum-Guru
Beiträge: 382
Registriert: Mi 15. Feb 2017, 08:50
Wohnort: Mittelfranken

Beitrag von Rolli »

... das compiliert leider immer noch nicht. Du hast die Tabelle mit 4 Spalten angelegt, willst dann aber 9 Spalten dargestellt bekommen ???

Gruß vom Rolli

Hanni

Beitrag von Hanni »

Copy-paste Fehler, entschuldige.
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,lmargin={2.5cm},rmargin={2.5cm},tmargin={3cm},bmargin = {3cm}]{geometry}
\usepackage{amssymb}
\usepackage{amsthm}
\usepackage{amsmath}
\usepackage{ragged2e}
\usepackage{rotating}
\usepackage{lscape}
\usepackage{setspace}
\usepackage{tabularx}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{array}
\usepackage{siunitx}
\sisetup{input-symbols = ()}

\begin{document}
\begin{sidewaystable}
    \centering
    \caption{XYZ}
    \def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\sisetup{table-space-text-post = \sym{***}}
\begin{tabular}{l*{9}{S[table-align-text-post=false]}}\\
\hline
      & 2007 & 2008 & 2009 & 2010 & 2011 & 2012 & 2013 & 2014 \\
      \hline
a & -25,51\sym{***} & -17,14\sym{***} & -26,95\sym{***} & -17,92\sym{***} & -25,00\sym{***} & -14,19\sym{***} & -65,98\sym{***} & -89,15\sym{***} \\
b & -19,13\sym{***} &  -24,98\sym{***} &  -90,50\sym{***} & -55,70\sym{***} &  {-66,07}\sym{***} & -54,80\sym{***} & -76,43 & -14,00\sym{*} \\
c &  {n.a.} &  -49,89 &  130,72 & -120,86 &  59,63 & -29,37 & 12,85 & -34,76 \\
d &  -21,79\sym{***} &  -27,71\sym{***} &  -79,04\sym{***} & -78,42\sym{***} &  -28,10\sym{***} & -55,47\sym{***} & -76,03 & -78,07 \\
e & {n.a.} &  -34,44\sym{***} &  -36,19\sym{**} & -45,28\sym{***} &  {-19,18} & -12,38\sym{***} & -15,67   & -57,98 \\
\bottomrule
\end{tabular}%
    \label{tab:XYZ}
\end{sidewaystable}

\end{document}

Gast

Beitrag von Gast »

Erzwingen kann man eine Spaltenbreite, wie bereits oben erwähnt, per Option:
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,lmargin={2.5cm},rmargin={2.5cm},tmargin={3cm},bmargin = {3cm}]{geometry}
\usepackage{rotating}
\usepackage{booktabs}
\usepackage{array}
\usepackage{siunitx}
\sisetup{input-symbols = ()}

\begin{document}
\begin{sidewaystable}
    \centering
    \caption{XYZ}
    \def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\sisetup{table-space-text-post = \sym{***}}
\begin{tabular}{l*{8}{S[table-align-text-post=false,table-column-width=1.9cm]}}\\
\hline
      & 2007 & 2008 & 2009 & 2010 & 2011 & 2012 & 2013 & 2014 \\
      \hline
a & -25,51\sym{***} & -17,14\sym{***} & -26,95\sym{***} & -17,92\sym{***} & -25,00\sym{***} & -14,19\sym{***} & -65,98\sym{***} & -89,15\sym{***} \\
b & -19,13\sym{***} &  -24,98\sym{***} &  -90,50\sym{***} & -55,70\sym{***} &  {-66,07}\sym{***} & -54,80\sym{***} & -76,43 & -14,00\sym{*} \\
c &  {n.a.} &  -49,89 &  130,72 & -120,86 &  59,63 & -29,37 & 12,85 & -34,76 \\
d &  -21,79\sym{***} &  -27,71\sym{***} &  -79,04\sym{***} & -78,42\sym{***} &  -28,10\sym{***} & -55,47\sym{***} & -76,03 & -78,07 \\
e & {n.a.} &  -34,44\sym{***} &  -36,19\sym{**} & -45,28\sym{***} &  {-19,18} & -12,38\sym{***} & -15,67   & -57,98 \\
\bottomrule
\end{tabular}%
    \label{tab:XYZ}
\end{sidewaystable}

\end{document}
Natürlich sind für die verwendeten 8-Zahlenspalten auch 8 ſ-Spalten zu deklarieren und nicht nur 4. Alles überflüssige habe ich zwecks Übersichtlichkeit gemäß Minimalbeispiel-Anleitung aus der Dokumentpräambel rausgeworfen.

Ein Problem ergibt sich hier aus den Zahlen, die Du in geschweifte Klammern gesetzt hast, beispielsweise {-66.07}. Diese werden nämlich nicht als Zahl, sondern als Text behandelt! Die störenden Klammen sollten also entfernt werden. Ich vermute außerdem, dass die Ausgabe für Deutsch mit Komma erfolgen soll, also wäre es sinnvoll locale=DE zu setzen. Man landet dann bei:
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,lmargin={2.5cm},rmargin={2.5cm},tmargin={3cm},bmargin = {3cm}]{geometry}
\usepackage{rotating}
\usepackage{booktabs}
\usepackage{array}
\usepackage{siunitx}
\sisetup{locale=DE}

\begin{document}
\begin{sidewaystable}
    \centering
    \caption{XYZ}
    \def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\sisetup{table-space-text-post = \sym{***}}
\begin{tabular}{l*{8}{S[table-align-text-post=false,table-column-width=1.9cm]}}\\
\hline
      & 2007 & 2008 & 2009 & 2010 & 2011 & 2012 & 2013 & 2014 \\
      \hline
a & -25,51\sym{***} & -17,14\sym{***} & -26,95\sym{***} & -17,92\sym{***} & -25,00\sym{***} & -14,19\sym{***} & -65,98\sym{***} & -89,15\sym{***} \\
b & -19,13\sym{***} &  -24,98\sym{***} &  -90,50\sym{***} & -55,70\sym{***} &  -66,07\sym{***} & -54,80\sym{***} & -76,43 & -14,00\sym{*} \\
c &  {n.a.} &  -49,89 &  130,72 & -120,86 &  59,63 & -29,37 & 12,85 & -34,76 \\
d &  -21,79\sym{***} &  -27,71\sym{***} &  -79,04\sym{***} & -78,42\sym{***} &  -28,10\sym{***} & -55,47\sym{***} & -76,03 & -78,07 \\
e & {n.a.} &  -34,44\sym{***} &  -36,19\sym{**} & -45,28\sym{***} &  -19,18 & -12,38\sym{***} & -15,67   & -57,98 \\
\bottomrule
\end{tabular}%
    \label{tab:XYZ}
\end{sidewaystable}

\end{document}
Auch hier gibt es noch Fehler in der Formatierung, die daraus resultieren dürften, dass die 1.9cm für einen zentrierten Punkt einfach zu wenig sind. Also fügen wir noch ein passendes Zahlenformat hinzu:
\documentclass[12pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[a4paper,lmargin={2.5cm},rmargin={2.5cm},tmargin={3cm},bmargin = {3cm}]{geometry}
\usepackage{rotating}
\usepackage{booktabs}
\usepackage{array}
\usepackage{siunitx}
\sisetup{locale=DE}

\begin{document}
\begin{sidewaystable}
    \centering
    \caption{XYZ}
    \def\sym#1{\ifmmode^{#1}\else\(^{#1}\)\fi}
\sisetup{table-space-text-post = \sym{***}}
\begin{tabular}{l*{8}{S[table-align-text-post=false,table-column-width=1.9cm,table-format=4.2]}}\\
\hline
      & 2007 & 2008 & 2009 & 2010 & 2011 & 2012 & 2013 & 2014 \\
      \hline
a & -25,51\sym{***} & -17,14\sym{***} & -26,95\sym{***} & -17,92\sym{***} & -25,00\sym{***} & -14,19\sym{***} & -65,98\sym{***} & -89,15\sym{***} \\
b & -19,13\sym{***} &  -24,98\sym{***} &  -90,50\sym{***} & -55,70\sym{***} &  -66,07\sym{***} & -54,80\sym{***} & -76,43 & -14,00\sym{*} \\
c &  {n.a.} &  -49,89 &  130,72 & -120,86 &  59,63 & -29,37 & 12,85 & -34,76 \\
d &  -21,79\sym{***} &  -27,71\sym{***} &  -79,04\sym{***} & -78,42\sym{***} &  -28,10\sym{***} & -55,47\sym{***} & -76,03 & -78,07 \\
e & {n.a.} &  -34,44\sym{***} &  -36,19\sym{**} & -45,28\sym{***} &  -19,18 & -12,38\sym{***} & -15,67   & -57,98 \\
\bottomrule
\end{tabular}%
    \label{tab:XYZ}
\end{sidewaystable}

\end{document}
Jetzt werden vier Stellen vor dem Komma und zwei danach reserviert. Das Komma ist nicht mehr in der Spaltenmitte. Die Formatierung ist einheitlich.

Hanni

Beitrag von Hanni »

Super, vielen Dank, das hat mir schon sehr weitergeholfen:)
Was muss ich denn tun, wenn ich die Breite der ersten Spalte auch anpassen möchte? Kann ich einfach L{p{5cm}} vor die {l*{8}{S[table-align-text-post=false,table-column-width=1.9cm]}} setzen oder muss ich da noch etwas anderes beachten?

Ich hatte gehofft, die Klammern kann ich drin lassen. Die hat mir excel2latex automatisch gesetzt und es sind doch recht viele um sie manuell anzupassen, aber da muss ich dann wohl durch.

Gast

Beitrag von Gast »

Da ich nicht weiß, wie bei Dir der Spaltentyp L deklariert ist, kann ich Dir nicht sagen, ob das so geht. Aber natürlich kann man eine normale p-Spalte mit der gewünschten Breite verwenden. Solange der Text darin einzeilig ist, ist er ja automatisch linksbündig. Soll mehrzeiliger Text linksbündig (satt im Blocksatz) gesetzt werden, kann man mit \raggedright oder Paket ragged2e arbeiten. Am besten dann zusammen mit array, um die Anweisung bereits in die Deklaration der Spalten per >-Operator einzubauen. Siehe dazu die [d]array[/d]-Anleitung. Dergleichen ist übrigens üblicherweise auch in einer guten LaTeX-Einführung erklärt. Es gibt auch Spezialliteratur zu Tabellen mit LaTeX. Siehe beispielsweise: http://www.dante.de/index/Literatur.html

Hanni

Vielen Dank!

Beitrag von Hanni »

Vielen Dank für die hilfreichen Kommentare, jetzt funktioniert alles.
Schönen Sonntag noch!

Antworten