Seite 1 von 1

S-Spalte in Tabellen mit Paketen sunitx und array

Verfasst: Do 12. Feb 2015, 11:56
von Thomas1234
Hallo zusammen,
ich möchte gerne eine Tabelle erstellen, die die Zahlen mit Hilfe der im Paket siuntx bereitgestellten S-Spalte Zahlen schön am Komma ausrichtet und außerdem automatisch nach jeder Zahl eine Einheit, bzw. ein kurzer feststehender Text, eingefügt wird (Ich weiß, normalerweise gehören Einheiten in den Tabellenkopf, hier geht es aber um Rechnungen und da ist es eben üblich, dass das Euro-Zeichen nach jeder Zahl steht). Dazu möchte ich im Tabellenkopf die vom Paket array definierte Möglichkeit nutzen, nach jedem Eintrag in der Spalte etwas hinzuzufügen. Mein Ansatz lautet deshalb, die entsprechenden Spalten mit
S[table-space-text-post ={\,E},table-format=X.X]<{\,E}

zu definieren. Erklärung: "S" definiert eine S-Spalte, be der die Zahlen am Komma ausgerichtet sind, "table-space-text-post ={\,E}" reserviert Platz für die "Einheit" E, "table-format=X.X" reserviert Platz für die Ziffern und "<{\,E}" fügt die eigentliche Einheit ein.

Soweit funktioniert das auch. Aber: In der letzten Spalte (und nur in der letzten Spalte) wird die Einheit plötzlich weiter von der Zahl weggerückt. Das kann ich mir nicht erkären. Eine Lösung ist, dass ich in der letzten Spalte die Einheiten von Hand reinschreibe, aber das ist natürlich unpraktisch. Es zeigt mirr ber, dass das offensichtlich irgendwo am Zusammenspiel zwischen siunitx- und array- Paket liegt. Kann mir jemand erklären, was die Ursachen des Fehlers sind und ob man den beheben kann?

Minimalbeispiel:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{siunitx}
\usepackage{array}

\begin{document}
In Tabellenkopf integriert: Großer Abstand in letzter Spalte, alle anderen Spalten sind korrekt:

\begin{tabular}{|S[table-space-text-post ={\,E},table-format=4.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|}
\hline
4564.45  & 45.1  & 45.1 \\
4564.45  & 4.1   & 4.1  \\
45.4     & 45.13 & 45.13\\
45.45    & 45.1  & 45.1 \\
\hline
\end{tabular}\\

Mit einer leeren Spalte am Ende ist der Abstand korrekt, aber unschön und mit \emph{hline} geht das gar nicht:

\begin{tabular}{|S[table-space-text-post ={\,E},table-format=4.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|c}
\hline
4564.45  & 45.1  & 45.1  &\\
4564.45  & 4.1   & 4.1   &\\
45.4     & 45.13 & 45.13 &\\
45.45    & 45.1  & 45.1  &\\
\hline
\end{tabular}\\


Von Hand in jede Zeile geschrieben: Korrekter Abstand, aber aufwändig:

\begin{tabular}{|S[table-space-text-post ={\,E},table-format=4.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]|}
\hline
4564.45  & 45.1  & 45.1\,E\\
4564.45  & 4.1   & 4.1\,E\\
45.4     & 45.13 & 45.13\,E\\
45.45    & 45.1  & 45.1\,E\\
\hline
\end{tabular}
\end{document}
Vielen Dank für eure Hilfe

Verfasst: Do 12. Feb 2015, 13:10
von esdd
Mir ist jetzt nicht klar, warum sich die letzte Spalte anders verhält. Aber Du kannst im ersten Beispiel die Tabellendefinition wie folgt ändern:
\begin{tabular}{|S[table-space-text-post ={\,E},table-format=4.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|
S[table-format=2.2]<{\,E}|}
Im zweiten Beispiel erreichst Du das gewünschte Ergebnis mit
\begin{tabular}{|S[table-space-text-post ={\,E},table-format=4.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|@{}c@{}}
Du kannst aber auch
\begin{tabular}{|S[table-format=4.2]@{\,E\hspace*{\tabcolsep}}|
S[table-format=2.2]@{\,E\hspace*{\tabcolsep}}|
S[table-format=2.2]@{\,E\hspace*{\tabcolsep}}|}
nutzen. Oder noch besser Dir eine neue Spaltenform definieren:
\newcolumntype{U}[2]{S[table-format=#1]@{#2\hspace*{\tabcolsep}}}
und dann das folgende verwenden:
\begin{tabular}{|U{4.2}{\,E}|*{2}{U{2.2}{\,E}|}}
Alle vier Varianten:
\documentclass{scrartcl}
\usepackage{siunitx}
\usepackage{array}
\newcolumntype{U}[2]{S[table-format=#1]@{#2\hspace*{\tabcolsep}}}

\begin{document}
\begin{tabular}{|S[table-space-text-post ={\,E},table-format=4.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|
S[table-format=2.2]<{\,E}|}
\hline
4564.45  & 45.1  & 45.1 \\
4564.45  & 4.1   & 4.1  \\
45.4     & 45.13 & 45.13\\
45.45    & 45.1  & 45.1 \\
\hline
\end{tabular}

\bigskip
\begin{tabular}{|S[table-space-text-post ={\,E},table-format=4.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|@{}c@{}}
\hline
4564.45  & 45.1  & 45.1  &\\
4564.45  & 4.1   & 4.1   &\\
45.4     & 45.13 & 45.13 &\\
45.45    & 45.1  & 45.1  &\\
\hline
\end{tabular}

\bigskip
\begin{tabular}{|S[table-format=4.2]@{\,E\hspace*{\tabcolsep}}|
S[table-format=2.2]@{\,E\hspace*{\tabcolsep}}|
S[table-format=2.2]@{\,E\hspace*{\tabcolsep}}|}
\hline
4564.45  & 45.1  & 45.1 \\
4564.45  & 4.1   & 4.1  \\
45.4     & 45.13 & 45.13\\
45.45    & 45.1  & 45.1 \\
\hline
\end{tabular}

\bigskip
\begin{tabular}{|U{4.2}{\,E}|*{2}{U{2.2}{\,E}|}}
\hline
4564.45  & 45.1  & 45.1 \\
4564.45  & 4.1   & 4.1  \\
45.4     & 45.13 & 45.13\\
45.45    & 45.1  & 45.1 \\
\hline
\end{tabular}
\end{document}
Gruß
Elke

Bild

Verfasst: Do 12. Feb 2015, 15:42
von Thomas1234
Hallo,

zunächst mal vielen dank für deine Antwort. Die Spaltendefinition mit Hilfe von \newcolumn auszulagern, habe ich bereits in ähnlicher Weise durchgeführt wie du. Im Minimalbeispiel habe ich das der übersichtlichekti halber rausgelassen, aber ich hätte das natürlich zumindest erwähnen sollen.

Die Einheit als "Spaltentrenner" zu verwenden ist in der Tat eine interessante Idee, die ich mir merken werde.

Nun wird ein bisschen peinlich für mich: Nachdem ich auf dieses offensichtliche Fehlverhalten gestoßen bin, habe ich mir gedacht, dass ich das vielleicht auch an die Paket-ERsteller von siunitx schreiben sollte. Leider hat erst das mich darauf gebracht, das in der Dokumentation dieses Paketes am Ende evtl. noch bereits bekannte Fehler beschrieben werden und ich deshalb zuerst dort nachschauen sollte (Zuvor hab ich immmer nu in der Beschreibung der Tabellen-Optionen gesucht). Und siehe da: Im Abschnitt 7.13 ist tatsächlich dieser Fehler inklusive Lösungsvorschlag aufgeführt: Man solld ie Tabellenzeilen statt mit "\\" mit der Tex-Direktive "\cr" beenden. Also:
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{siunitx}
\usepackage{array}

\begin{document}
In Tabellenkopf integriert: Großer Abstand in letzter Spalte, alle anderen Spalten sind korrekt:

\begin{tabular}{|S[table-space-text-post ={\,E},table-format=4.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|
S[table-space-text-post ={\,E},table-format=2.2]<{\,E}|}
\hline
4564.45  & 45.1  & 45.1 \cr
4564.45  & 4.1   & 4.1  \cr
45.4     & 45.13 & 45.13\cr
45.45    & 45.1  & 45.1 \cr
\hline
\end{tabular}
\end{document}
Dann funktioniert alles wunderbar.

Ich möchte mich vielmals dafür entschuldigen, dass ich auf diese offensichtliche Möglichkeit der Fehlerbeschreibung nicht sofort gekommen bin und mich vielmals für deine Hilfe und deinen Aufwand bedanken.

Viele Grüße

Thomas