PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zentrieren von \SIrange in einer Tabelle



DirtyHarry
03-01-2014, 14:59
Hallo Forum,

Nach über sechsstündigem Scheitern möchte ich euch hier mein aktuelles Problem vorstellen. Ich möchte eine Tabelle erzeugen, in der eine lineare Parametrisierung für bestimmte Temperaturbereiche aufgelistet wird.
Konkret stelle ich mir das so vor:



Temperaturbereich alpha
0 - 90 1,2
>90 - 100 1,22
>100 - 200 1,5


Die Werte der linken Spalte sollen dabei am "-" zentriert werden. Leider bekomme ich das mit dem Paket siunitx und den mitgelieferten S-Spalten und dem \SIrange bzw. \numrange Befehl einfach nicht hin.

Das Internet hat mir schon geraten, anstelle von \SIrange in einer Tabelle ohnehin besser zwei eigene Spalten zu verwenden, aber das will mir einfach nicht so richtig gefallen. Selbst dann ist die ordentliche Gestaltung nicht einfach:



\documentclass[
11pt,
a4paper,
titlepage,
onecolumn,
oneside,
]{scrbook}

\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[USenglish, ngerman]{babel}

\usepackage{upgreek}
\usepackage{multirow}
\usepackage{booktabs}
\usepackage{bigstrut}

\usepackage[
per-mode=reciprocal,
output-decimal-marker={,},
range-phrase={\ bis\ },
list-separator={,\,},
list-pair-separator={\ und\ },
list-final-separator={\ und\ }
]{siunitx}

\begin{document}

\begin{table}[htb]
\centering
\caption{Abschnittweise definierter Parameter $\upalpha$.}
\sisetup{
table-text-alignment = center
}
\begin{tabular}{
S[table-format = >3, table-number-alignment = left] %table-number-alignment = left ist sinnlos?
%S[table-format = >3, table-number-alignment = center]
S[table-format = 3, table-number-alignment = left]
S[table-format = 1.2, table-number-alignment = center]
}
\toprule
\multicolumn{2}{c}{Temperatur / \SI{}{\celsius}} & \bigstrut[t] \\
\cmidrule{1-2}
{von} & {bis} & {$\upalpha$} \tabularnewline %\bigstrut[b] \\ funktioniert nach \tabularnewline nicht mehr
{von} & {bis} & { $\upalpha$ } \bigstrut[b] \\ %alpha mit Leerzeichen,
{von} & {bis} & {$\upalpha$} \bigstrut[b] \\ %alpha "ganz normal" -> wird in Spalte nicht korrekt zentriert
{von} & {bis} & \multicolumn{1}{c}{$\upalpha$} \bigstrut[b] \\
\multicolumn{1}{r}{von} & \multicolumn{1}{l}{bis} & \multicolumn{1}{c}{$\upalpha$} \bigstrut[b] \\
\midrule
0 & 90 & 1,2 \bigstrut[t] \\
> 90 & 100 & 1,22 \\
> 100 & 200 & 1,5 \bigstrut[b] \\
\bottomrule
\end{tabular}
\label{tab:label}
\end{table}

\end{document}

sieht auch mies aus.

Mittlerweile hab ich es aufgegeben und komme damit über die Runden:


\begin{table}[htb]
\centering
\caption{Abschnittweise definierter Parameter $\upalpha$.}
\sisetup{
table-text-alignment = center
}
\begin{tabular}{
S[table-format = >5,
table-align-comparator = false,
table-align-text-pre = false,
table-align-text-post = false,
table-number-alignment = left
]
S[table-format = 1.2]
}
\toprule
\multicolumn{1}{c}{Temperatur / \SI{}{\celsius}} & \multicolumn{1}{c}{$\upalpha$} \bigstrut[b] \\
\midrule
0{ -- 90} & 1,2 \bigstrut[t] \\
> 90{ -- 100} & 1,22 \\
> 100{ -- 200} & 1,5 \bigstrut[b] \\
\bottomrule
\end{tabular}
\label{tab:label}
\end{table}

Das hab ich hier gefunden:
Link (http://tex.stackexchange.com/questions/35911/why-does-num-not-work-in-situnitxs-s-columns)

Der Trick ist, dass man nur einen Teil von siunitx ausrichten lässt und den Rest des anzugebenden Werteintervalls in {}-Klammern setzt, wodurch es als Text interpretiert wird. Ich erreiche eine ungefähre Zentrierung unter der Überschrift aber nur dann, wenn ich die Spalte als S[table-format = >5] deklariere (obwohl ich keine 5-stelligen Zahlen eintrage), damit links von den Werten mehr Platz freigelassen wird.

Ihr merkt schon, das tut weh, und geht eigentlich ganz weit am Sinn von TeX vorbei.

Hat jemand von euch eine Idee, wie man das eleganter lösen könnte?
Vielen Dank auf jeden Fall an alle, die sich hier mal Zeit nehmen und sich das ansehen.

PS:
So Spezialitäten wie


\multicolumn{1}{c}{$\upalpha$}

damit ein griechischer Buchstabe korrekt in einer Überschriftszeile zentriert wird, sind dann noch das Salz in der Suppe wenn ohnehin schon Panik herrscht... :mad:

hakaze
04-01-2014, 09:53
Für eine einfache Zentrierung von nicht-numerischen Inhalten in S-Spalten genügt einfache Klammerung (statt multicolumn):


\begin{table}[htb]
\centering
\caption{Abschnittweise definierter Parameter $\upalpha$.}
\sisetup{
table-text-alignment = center
}
\begin{tabular}{
S[table-format = >5,
table-align-comparator = false,
table-align-text-pre = false,
table-align-text-post = false,
table-number-alignment = left
]
S[table-format = 1.2]
}
\toprule
{Temperatur / \si{\celsius}} & {$\upalpha$} \\
\midrule
0{ -- 90} & 1,2 \\
> 90{ -- 100} & 1,22 \\
> 100{ -- 200} & 1,5 \\
\bottomrule
\end{tabular}
\label{tab:label}
\end{table}

DirtyHarry
04-01-2014, 10:47
Das hab ich natürlich zuerst auch versucht!
In meinem Beispiel oben sind mehrere Varianten abgebildet.
{$\upalpha$}, { $\upalpha$ } und auch die Variante mit \multicolumn{1}{c}{$\upalpha$}.

Bei mir sehen alle Varianten unterschiedlich aus, und zentriert wird nur wenn ich es mit \multicolumn löse.

Aber damit hab ich mich schon abgefunden.
Was mich mehr zwickt, ist dass ich einfach keinen Weg finde die Zentrierung der \SIrange bzw. \numrange am Trennsymbol ("-") zu orientieren. Bei einem so umfangreichen Paket wie siuntix kann ich kaum daran glauben, dass es diese Möglichkeit nicht gibt. Ich glaub es scheitert eher in der korrekten Ausführung... :rolleyes:

hakaze
04-01-2014, 11:56
Wenn du in deiner ersten Tabelle mal alle bigstrut-Befehle rausnimmst, werden auch alle Alphas (mit und ohne Leerzeichen bzw. multicolumn) richtig ausgerichtet.

Zur Ausrichtung von siranges: das ist sicherlich nicht so einfach. Da muss effektiv dreimal ausrichten: 1. am Bereichstrenner (--), 2. am Dezimalzeichen der ersten Zahl und 3. am Dezimaltrenner der zweiten Zahl. Das macht die Sache kompliziert und auch nicht immer sinnvoll (siehe auch diese Diskussion um die Ausrichtung von komplexen Zahlen (http://tex.stackexchange.com/q/83598/17198)).

Ich finde die Aufteilung in zwei Spalten (ohne sirange) noch am besten. Außerdem kannst du über die Definition des Spaltentrenners (@) auch einen entsprechenden Bereichstrenner einfügen:

\begin{table}[htb]
\centering
\caption{Abschnittweise definierter Parameter $\upalpha$.}
\sisetup{
table-text-alignment = center
}
\begin{tabular}{
S[table-format = >5, % Platz für 5 Ziffern reservieren
table-align-comparator = false,
table-align-text-pre = false,
table-align-text-post = false]
@{~--~}% -- als Spaltentrenner
S[table-format = 3, table-number-alignment = left]
S[table-format = 1.2, table-number-alignment = center]
}
\toprule
\multicolumn{2}{c}{Temperatur / \si{\celsius}} & {$\upalpha$} \\
\midrule
0 & 90 & 1,2 \\
> 90 & 100 & 1,22 \\
> 100 & 200 & 1,5 \\
\bottomrule
\end{tabular}
\label{tab:label}
\end{table}

DirtyHarry
04-01-2014, 14:09
Vielen Dank für deine Version mit dem Spaltentrenner - das sieht wirklich gut aus!

Mir wurde einmal angeraten \bigstrut zu verwenden, und mittlerweile finde ich auch dass es das Erscheinungsbild der Tabellen bessert. Insofern kann bzw möchte ich eigentlich jetzt nicht bei ein, zwei Tabellen darauf verzichten. Aber es ist auch gut zu wissen, dass \bigstrut die Wurzel des \multicolumn-Übels war!

Nochmal vielen Dank und liebe Grüße!