S-Spalte in Tabellen mit Paketen sunitx und array

Tabellen und Grafiken erstellen und anordnen


Thomas1234

S-Spalte in Tabellen mit Paketen sunitx und array

Beitrag 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

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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
Dateianhänge
gl_tabse.PNG
gl_tabse.PNG (16.07 KiB) 1218 mal betrachtet

Thomas1234

Beitrag 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

Antworten