Seite 1 von 1

Probleme mit siunitx, tabularx und vertikaler Ausrichtung

Verfasst: So 22. Jan 2012, 15:48
von hannes1985
Hallo allerseits,

mein Problem ist folgendes: Ich möchte mit tabularx (\textwidth) eine Tabelle erstellen, in der die Zahlen am Punkt, bzw. wenn vorhanden am Plus-Minuszeichen (\pm) ausgerichtet werden sollen. Dazu sollte die jeweilige Spalte zentriert werden (X-Spalte, bzw. C-Spalte, siehe Bsp.).
Desweiteren arbeite ich mit threeparttable für die "Fussnoten" und mit sinuitx für die Formatierung der Einheiten und für Plus-Minus-Markierung.
Die Verwendung des Spaltentyps S liefert einen Fehler.

Ich habe auch schon mir dcolumn und tabu gearbietet aber keine endgültige Lösung gefunden.
Meinen besten Lösungsansatz habe ich als zweite Tabelle im Minimalbeispiel angeführt. Das Problem in diesem Lösungsansatz ist aber die Probleme macht aber die Zentrierung.

\documentclass[pdftex,bibliography=totoc,listof=totoc,a4paper,11pt]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
  \newcolumntype{C}{>{\centering\arraybackslash}X}
\usepackage{threeparttable}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{microtype}

\usepackage{mdwlist}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{booktabs}
\usepackage{textcomp}
\usepackage{upgreek}
\usepackage[dvips]{graphicx,color}

\usepackage[format=hang, labelfont={sf,bf}, textfont=sf]{caption,subcaption}   % Schriftart bei Bild und Tabellenunterschriften
  \captionsetup{singlelinecheck=off}
  \DeclareCaptionLabelSeparator{klammerzu}{) } %definiert "`klammerzu"' als neuen Caption label separator (labelsep)
  \DeclareCaptionLabelFormat{klamzu}{\bothIfFirst{#1}{ }#2)} %definiert ein Labelformat mit klammer zu, 
  \captionsetup[sub]{singlelinecheck=true, labelfont={normalsize,sf}, textfont={normalsize,sf}, labelformat=simple}

\usepackage{float}
\usepackage{setspace}
\usepackage{siunitx}
\usepackage{dcolumn}

\setcounter{secnumdepth}{5}
\newcommand{\sub}{\textsubscript}
\newcommand{\super}{\textsuperscript}

\begin{document}

\begin{table}[H]
        \centering
	\captionabove{Ausgangslage: gute Aufteilung und Zentrierung, aber keine vertikale Ausrichtung.}
	\label{tab:NIPU}
\begin{threeparttable}
\begin{tabularx}{\textwidth}{lCCCC}\toprule
 & T\sub{m} [\si{\degreeCelsius}] & \multicolumn{1}{c}{E-Modul [\si{MPa}]} & \multicolumn{1}{c}{Festigkeit [\si{MPa}]} & \multicolumn{1}{c}{$\epsilon$\sub{Bruch} [\si{\percent}]} \\ \midrule
Material 1\tnote{1} & 51.2    &                                                                   & \num[separate-uncertainty]{666.6(11)}        & \num[separate-uncertainty]{44(8)}\\
Material 2\tnote{1} & 54.1      &                                                                   & \num[separate-uncertainty]{5.5(22)}        & \num[separate-uncertainty]{777(8)}\\
Material 3\tnote{2} & 1.33      & \num[separate-uncertainty]{33(44)}       & \num[separate-uncertainty]{44.0(11)}            & \num[separate-uncertainty]{333(11)}\\
Material 4\tnote{2} & 100.4    & \num[separate-uncertainty]{2222(22)}   & \num[separate-uncertainty]{22(11)}            & \num[separate-uncertainty]{1(0)}\\ \bottomrule
\end{tabularx}
\begin{tablenotes}\footnotesize 
\item [1] Notiz 1
\item [2] Notiz 2
\end{tablenotes}
\end{threeparttable}
\end{table}

\begin{table}[H]
\caption{Lösungsansatz: Probleme mit Zentrierung und Aufteilung.}
\begin{threeparttable}
\begin{tabularx}{\textwidth}{lD{,}{.}{5}D{,}{\pm}{5}D{,}{\pm}{5}D{,}{\pm}{5}}\toprule
 & \multicolumn{1}{C}{T\sub{m} [\si{\degreeCelsius}]} & \multicolumn{1}{C}{E-Modul [\si{MPa}]} & \multicolumn{1}{C}{Festigkeit [\si{MPa}]} &
\multicolumn{1}{C}{$\epsilon$\sub{Bruch} [\si{\percent}]} \\ \midrule
Material 1\tnote{1}  & 51,2   &           & 666.6,1.1    &44,8\\
Material 2\tnote{1} & 54,1   &           & 5.5,2.2    & 777,8\\
Material 3\tnote{2} & 1,33   & 33,44     & 44.0,1.1       & 333,11\\
Material 4\tnote{2} & 100,4   &  2222,22  & 22,11       & 1,0\\ \bottomrule
\end{tabularx}
\begin{tablenotes}\footnotesize 
 \item [1] Notiz 1
\item [2] Notiz 2
\end{tablenotes}
\end{threeparttable}
\end{table} 

\end{document}

Hat jemand eine Idee, wie ich die vertikale Ausrichtung bei Beibehaltung der Tabellenformatierung hinbekomme?

Vielen Dank schonmal.

Gruß Hannes

Hilfreiches Paket

Verfasst: So 22. Jan 2012, 16:12
von localghost
Sieh dir für diesen Fall das Paket tabu an. Lass dich nicht von der schlecht gestalteten Anleitung abschrecken. Es ist dort erklärt.


Thorsten

Fortschritte

Verfasst: So 22. Jan 2012, 19:08
von hannes1985
OK, so weit bin ich nun gekommen nach intensiver Studie der Manuals von tabu und siunitx:
 
\documentclass[pdftex,bibliography=totoc,listof=totoc,a4paper,11pt]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
  \newcolumntype{C}{>{\centering\arraybackslash}X}
\usepackage{threeparttable}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{microtype}

\usepackage{mdwlist}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{booktabs}
\usepackage{textcomp}
\usepackage{upgreek}
\usepackage[dvips]{graphicx,color}

\usepackage[format=hang, labelfont={sf,bf}, textfont=sf]{caption,subcaption}   % Schriftart bei Bild und Tabellenunterschriften
  \captionsetup{singlelinecheck=off}
  \DeclareCaptionLabelSeparator{klammerzu}{) } %definiert "`klammerzu"' als neuen Caption label separator (labelsep)
  \DeclareCaptionLabelFormat{klamzu}{\bothIfFirst{#1}{ }#2)} %definiert ein Labelformat mit klammer zu, 
  \captionsetup[sub]{singlelinecheck=true, labelfont={normalsize,sf}, textfont={normalsize,sf}, labelformat=simple}

\usepackage{float}
\usepackage{setspace}
\usepackage{siunitx}
\usepackage{dcolumn}

\setcounter{secnumdepth}{5}
\newcommand{\sub}{\textsubscript}
\newcommand{\super}{\textsuperscript}

\usepackage{tabu}

  \newcolumntype Z{X[c]{S[group-four-digits=true,separate-uncertainty=true,table-align-uncertainty,separate-uncertainty]}} % Einstellungen zu siunitx
    \tabucolumn Z

\begin{document}

\begin{table}[H]
        \centering
	\captionabove{Ausgangslage: gute Aufteilung und Zentrierung, aber keine vertikale Ausrichtung.}
	\label{tab:NIPU}
\begin{threeparttable}
\begin{tabularx}{\textwidth}{lCCCC}\toprule
 & T\sub{m} [\si{\degreeCelsius}] & \multicolumn{1}{c}{E-Modul [\si{MPa}]} & \multicolumn{1}{c}{Festigkeit [\si{MPa}]} & \multicolumn{1}{c}{$\epsilon$\sub{Bruch} [\si{\percent}]} \\ \midrule


Material 1\tnote{1} & 51.2    &                                                                   & \num[separate-uncertainty]{666.6(11)}        & \num[separate-uncertainty]{44(8)}\\
Material 2\tnote{1} & 54.1      &                                                                   & \num[separate-uncertainty]{5.5(22)}        & \num[separate-uncertainty]{777(8)}\\
Material 3\tnote{2} & 1.33      & \num[separate-uncertainty]{33(44)}       & \num[separate-uncertainty]{44.0(11)}            & \num[separate-uncertainty]{333(11)}\\
Material 4\tnote{2} & 100.4    & \num[separate-uncertainty]{2222(22)}   & \num[separate-uncertainty]{22(11)}            & \num[separate-uncertainty]{1(0)}\\ \bottomrule
\end{tabularx}
\begin{tablenotes}\footnotesize 
\item [1] Notiz 1
\item [2] Notiz 2
\end{tablenotes}
\end{threeparttable}
\end{table}

\begin{table}[H]
\caption{Lösungsansatz: Probleme mit Zentrierung und Aufteilung.}
\begin{threeparttable}
\begin{tabularx}{\textwidth}{lD{,}{.}{5}D{,}{\pm}{5}D{,}{\pm}{5}D{,}{\pm}{5}}\toprule
 & \multicolumn{1}{C}{T\sub{m} [\si{\degreeCelsius}]} & \multicolumn{1}{C}{E-Modul [\si{MPa}]} & \multicolumn{1}{C}{Festigkeit [\si{MPa}]} &
\multicolumn{1}{C}{$\epsilon$\sub{Bruch} [\si{\percent}]} \\ \midrule
Material 1\tnote{1}  & 51,2   &           & 666.6,1.1    &44,8\\
Material 2\tnote{1} & 54,1   &           & 5.5,2.2    & 777,8\\
Material 3\tnote{2} & 1,33   & 33,44     & 44.0,1.1       & 333,11\\
Material 4\tnote{2} & 100,4   &  2222,22  & 22,11       & 1,0\\ \bottomrule
\end{tabularx}
\begin{tablenotes}\footnotesize 
 \item [1] Notiz 1
\item [2] Notiz 2
\end{tablenotes}
\end{threeparttable}
\end{table} 

\begin{table}[H]
    \caption{Tabelle mit tabu. Zentrierung noch nicht perfekt und Ausrichtung bei mehreren Zeichen falsch.}\label{tab:blabla}
    \centering
      \begin{tabu}{lZZZZ}\toprule    
    & \multicolumn{1}{c}{T\sub{m} [\si{\degreeCelsius}]} &  \multicolumn{1}{c}{E-Modul [\si{MPa}]} &  \multicolumn{1}{c}{Festigkeit [\si{MPa}]} &  \multicolumn{1}{c}{$\epsilon$\sub{Bruch} [\si{\percent}]} \\ \midrule
        Material 1 & 51,2   &             {-}            & 666,6\pm1,1           &  44\pm8               \\
        Material 2 & 54,1   &              {-}       & 5,5\pm2,2               & 777\pm8               \\
        Material 3 & 1.33   & 33\pm44        & 44\pm11             & 333\pm11             \\
        Material 4 & 100.4 & 2222\pm22    & 22\pm11                  & 1\pm2                 \\ \bottomrule
      \end{tabu}
  \end{table}


\end{document}

Problematisch ist weiterhin noch die vertikale Ausrichtung wenn ein Punkt und \pm in einer Zelle auftauchen. Die Ausrichtung findet momentan nicht am \pm-Zeichen statt. Zudem schein mir die Zentrierung irgendwie seltsam verschoben zu sein im Vergleich zum tabularx Paket (Tabbel 1).

Weiter bin ich leider nicht gekommen. Das tabu-Manual ist leider alles andere als Übersichtlich meiner Ansicht nach. Kennst sich jemand da vielleicht besser aus?

Gruß Hannes

Verfasst: So 22. Jan 2012, 20:13
von cgnieder
siunitx bringt eigentlich einige Möglichkeiten zur Ausrichtung mit. Dazu verwendet man die Option table-format.
\documentclass{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{booktabs,mathtools,siunitx}
\usepackage[format=hang, labelfont={sf,bf}, textfont=sf]{caption}
\begin{document}

\begin{table}
 \caption{Beispiel 1}\label{tab:1}
 \centering\sisetup{separate-uncertainty}
 \begin{tabular}{lS[table-format=3.2]S[table-format=4(2)]S[table-format=3.1(2)]S[table-format=3(2)]}\toprule
             & {$T_m$ in \si{\celsius}} &  {E-Modul in \si{MPa}} & {Festigkeit in \si{MPa}} & {$\epsilon_{\text{Bruch}}$ in \si{\percent}} \\ \midrule
  Material 1 & 51.2                     & {-}                    & 666.6(11)                &  44(8) \\
  Material 2 & 54.1                     & {-}                    & 5.5(22)                  & 777(8) \\
  Material 3 & 1.33                     & 33(44)                 & 44(11)                   & 333(11) \\
  Material 4 & 100.4                    & 2222(22)               & 22(11)                   & 1(2) \\ \bottomrule
 \end{tabular}
\end{table}

\end{document}

Verfasst: So 22. Jan 2012, 20:49
von hannes1985
Vielen Dank für den Tip.

Habe es jetzt soweit hinbekommen mit Hilfe von table-format.
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{booktabs}
\usepackage{textcomp}
\usepackage{upgreek}
\usepackage[dvips]{graphicx,color}

\usepackage[format=hang, labelfont={sf,bf}, textfont=sf]{caption,subcaption}   % Schriftart bei Bild und Tabellenunterschriften
  \captionsetup{singlelinecheck=off}
  \DeclareCaptionLabelSeparator{klammerzu}{) } %definiert "`klammerzu"' als neuen Caption label separator (labelsep)
  \DeclareCaptionLabelFormat{klamzu}{\bothIfFirst{#1}{ }#2)} %definiert ein Labelformat mit klammer zu, 
  \captionsetup[sub]{singlelinecheck=true, labelfont={normalsize,sf}, textfont={normalsize,sf}, labelformat=simple}

\usepackage{float}
\usepackage{setspace}
\usepackage{siunitx}
\usepackage{dcolumn}

\setcounter{secnumdepth}{5}
\newcommand{\sub}{\textsubscript}
\newcommand{\super}{\textsuperscript}

\usepackage{tabu}

  \newcolumntype Z{X[c]{S[group-four-digits=true,separate-uncertainty=true,table-align-uncertainty,separate-uncertainty,table-format=3.2]}}
  \newcolumntype Y{X[c]{S[group-four-digits=true,separate-uncertainty=true,table-align-uncertainty,separate-uncertainty,table-format=4(2)]}}
  \newcolumntype U{X[c]{S[group-four-digits=true,separate-uncertainty=true,table-align-uncertainty,separate-uncertainty,table-format=3.1(2)]}}
  \newcolumntype I{X[c]{S[group-four-digits=true,separate-uncertainty=true,table-align-uncertainty,separate-uncertainty,table-format=3(2)]}}
    	\tabucolumn Z
	\tabucolumn Y
	\tabucolumn U
	\tabucolumn I

\begin{document}

\begin{table}[H]
        \centering
	\captionabove{Ausgangslage: gute Aufteilung und Zentrierung, aber keine vertikale Ausrichtung.}
	\label{tab:NIPU}
\begin{threeparttable}
\begin{tabularx}{\textwidth}{lCCCC}\toprule
 & T\sub{m} [\si{\degreeCelsius}] & \multicolumn{1}{c}{E-Modul [\si{MPa}]} & \multicolumn{1}{c}{Festigkeit [\si{MPa}]} & \multicolumn{1}{c}{$\epsilon$\sub{Bruch} [\si{\percent}]} \\ \midrule


Material 1\tnote{1} & 51.2    &                                                                   & \num[separate-uncertainty]{666.6(11)}        & \num[separate-uncertainty]{44(8)}\\
Material 2\tnote{1} & 54.1      &                                                                   & \num[separate-uncertainty]{5.5(22)}        & \num[separate-uncertainty]{777(8)}\\
Material 3\tnote{2} & 1.33      & \num[separate-uncertainty]{33(44)}       & \num[separate-uncertainty]{44.0(11)}            & \num[separate-uncertainty]{333(11)}\\
Material 4\tnote{2} & 100.4    & \num[separate-uncertainty]{2222(22)}   & \num[separate-uncertainty]{22(11)}            & \num[separate-uncertainty]{1(0)}\\ \bottomrule
\end{tabularx}
\begin{tablenotes}\footnotesize 
\item [1] Notiz 1
\item [2] Notiz 2
\end{tablenotes}
\end{threeparttable}
\end{table}


%\sisetup{separate-uncertainty}

\begin{table}[H]
    \caption{Fast schon perfekt.}\label{tab:blabla}
    \centering
      \begin{tabu}{lZYUI}\toprule    
    & \multicolumn{1}{c}{T\sub{m} [\si{\degreeCelsius}]} &  \multicolumn{1}{c}{E-Modul [\si{MPa}]} &  \multicolumn{1}{c}{Festigkeit [\si{MPa}]} &  \multicolumn{1}{c}{$\epsilon$\sub{Bruch} [\si{\percent}]} \\ \midrule
        Material 1 & 51,2   &             {-}            & 666,6\pm1,1           &  44\pm8               \\
        Material 2 & 54,1   &              {-}       & 5,5\pm2,2               & 777\pm8               \\
        Material 3 & 1.33   & 33\pm44        & 44\pm11             & 333\pm11             \\
        Material 4 & 100.4 & 2222\pm22    & 22\pm11                  & 1\pm2                 \\ \bottomrule
      \end{tabu}
  \end{table}

\end{document}
Sieht soweit auch ganz gut aus. Da ich die Tabellenbreite auf die Textbreite anpassen muss (Einheitlichkeit) bin ich auf tabu angewiesen. D.h. ich muss die neu definierten Spaltentypen verwenden. Ich habe für jedes table-format einen eigenen Typ definiert. Geht das auch anders? So, dass ich bei der Spalte einfach noch das Argument editieren muss? Und damit nur einen einzigen Typ in der Präamble habe?

Gruß Hannes

Verfasst: So 22. Jan 2012, 20:56
von cgnieder
hannes1985 hat geschrieben: Ich habe für jedes table-format einen eigenen Typ definiert. Geht das auch anders? So, dass ich bei der Spalte einfach noch das Argument editieren muss? Und damit nur einen einzigen Typ in der Präamble habe?
Ich fürchte nicht, soweit ich weiß. :(

Verfasst: So 22. Jan 2012, 21:08
von hannes1985
Hmm naja. Dann aber auf jeden Fall vielen Dank für die Hilfe.

Sollte es dabei bleiben, kann ich mit der jetzigen Lösung gut leben.

Gruß Hannes

Verfasst: Mo 23. Jan 2012, 10:16
von hannes1985
Hey,

ein letztes Problem ist noch geblieben: Ist es möglich die Ausrichtung so zu gestalten, dass die Ausrichtung vertikal am \pm-Zeichen ist und die Zahlen rechts vom \pm-Zeichen rechtsbündig sind und nicht auf Zifferstelle übereinander stehen?

Gruß Hannes
\documentclass[pdftex,bibliography=totoc,listof=totoc,a4paper,11pt]{scrartcl}

\usepackage[ngerman]{babel}
\usepackage[utf8]{inputenc}
\usepackage{tabularx}
  \newcolumntype{C}{>{\centering\arraybackslash}X}
\usepackage{threeparttable}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{microtype}
\usepackage{threeparttablex}

\usepackage{mdwlist}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{booktabs}
\usepackage{textcomp}
\usepackage{upgreek}
\usepackage[dvips]{graphicx,color}

\usepackage[format=hang, labelfont={sf,bf}, textfont=sf]{caption,subcaption}   % Schriftart bei Bild und Tabellenunterschriften
  \captionsetup{singlelinecheck=off}
  \DeclareCaptionLabelSeparator{klammerzu}{) } %definiert "`klammerzu"' als neuen Caption label separator (labelsep)
  \DeclareCaptionLabelFormat{klamzu}{\bothIfFirst{#1}{ }#2)} %definiert ein Labelformat mit klammer zu, 
  \captionsetup[sub]{singlelinecheck=true, labelfont={normalsize,sf}, textfont={normalsize,sf}, labelformat=simple}

\usepackage{float}
\usepackage{setspace}
\usepackage{siunitx}
\usepackage{dcolumn}

\setcounter{secnumdepth}{5}
\newcommand{\sub}{\textsubscript}
\newcommand{\super}{\textsuperscript}

\usepackage{tabu}

  \newcolumntype Z{X[c]{S[group-four-digits=true,separate-uncertainty=true,table-align-uncertainty,separate-uncertainty,table-format=3.2]}}
  \newcolumntype Y{X[c]{S[group-four-digits=true,separate-uncertainty=true,table-align-uncertainty,separate-uncertainty,table-format=4(2)]}}
  \newcolumntype U{X[c]{S[group-four-digits=true,separate-uncertainty=true,table-align-uncertainty,separate-uncertainty,table-format=3.1(2)]}}
  \newcolumntype I{X[c]{S[group-four-digits=true,separate-uncertainty=true,table-align-uncertainty,separate-uncertainty,table-format=3(2)]}}
    	\tabucolumn Z
	\tabucolumn Y
	\tabucolumn U
	\tabucolumn I

\begin{document}

\begin{table}[H]
        \centering
	\captionabove{Ausgangslage: gute Aufteilung und Zentrierung, aber keine vertikale Ausrichtung.}
	\label{tab:NIPU}
\begin{threeparttable}
\begin{tabularx}{\textwidth}{lCCCC}\toprule
 & T\sub{m} [\si{\degreeCelsius}] & \multicolumn{1}{c}{E-Modul [\si{MPa}]} & \multicolumn{1}{c}{Festigkeit [\si{MPa}]} & \multicolumn{1}{c}{$\epsilon$\sub{Bruch} [\si{\percent}]} \\ \midrule


Material 1\tnote{1} & 51.2    &                                                                   & \num[separate-uncertainty]{666.6(11)}        & \num[separate-uncertainty]{44(8)}\\
Material 2\tnote{1} & 54.1      &                                                                   & \num[separate-uncertainty]{5.5(22)}        & \num[separate-uncertainty]{777(8)}\\
Material 3\tnote{2} & 1.33      & \num[separate-uncertainty]{33(44)}       & \num[separate-uncertainty]{44.0(11)}            & \num[separate-uncertainty]{333(11)}\\
Material 4\tnote{2} & 100.4    & \num[separate-uncertainty]{2222(22)}   & \num[separate-uncertainty]{22(11)}            & \num[separate-uncertainty]{1(0)}\\ \bottomrule
\end{tabularx}
\begin{tablenotes}\footnotesize 
\item [1] Notiz 1
\item [2] Notiz 2
\end{tablenotes}
\end{threeparttable}
\end{table}


%\sisetup{separate-uncertainty}

\begin{table}[H]
    \caption{Fast schon perfekt.}\label{tab:blabla}
    \centering
\begin{ThreePartTable}
      \begin{tabu}{lZYUI}\toprule    
    & \multicolumn{1}{c}{T\sub{m} [\si{\degreeCelsius}]} &  \multicolumn{1}{c}{E-Modul [\si{MPa}]} &  \multicolumn{1}{c}{Festigkeit [\si{MPa}]} &  \multicolumn{1}{c}{$\epsilon$\sub{Bruch} [\si{\percent}]} \\ \midrule
        Material 1\tnote{1} & 51,2   &             {-}            & 666,6\pm1,1           &  44\pm8               \\
        Material 2 & 54,1   &              {-}       & 5,5\pm2,2               & 777\pm8               \\
        Material 3 & 1.33   & 33\pm44        & 44\pm11             & 333\pm11             \\
        Material 4 & 100.4 & 2222\pm22    & 22\pm11                  & 1\pm2                 \\ \bottomrule
      \end{tabu}
\end{ThreePartTable}
\begin{tablenotes}\footnotesize 
\item[1] Prognose 2003 
\end{tablenotes}
  \end{table}

\end{document}