S-Spalte in Tabellen mit Paketen sunitx und array

Antwort erstellen


Diese Frage dient dazu, das automatisierte Versenden von Formularen durch Spam-Bots zu verhindern.
Smilies
:D :) :( :o :shock: :? 8) :lol: :-x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:

BBCode ist eingeschaltet
[img] ist eingeschaltet
[flash] ist ausgeschaltet
[url] ist eingeschaltet
Smilies sind eingeschaltet

Die letzten Beiträge des Themas

Ich habe die Datenschutzerklärung gelesen und bin damit einverstanden.

   

Wenn du eine Datei oder mehrere Dateien anhängen möchtest, gib die Details unten ein.

Ansicht erweitern Die letzten Beiträge des Themas: S-Spalte in Tabellen mit Paketen sunitx und array

von Thomas1234 » Do 12. Feb 2015, 15:42

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

von esdd » Do 12. Feb 2015, 13:10

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) 1219 mal betrachtet

S-Spalte in Tabellen mit Paketen sunitx und array

von Thomas1234 » Do 12. Feb 2015, 11:56

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

Nach oben