PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabularx - Am Komma ausrichten



Onyag
12-09-2009, 12:10
Hallo,

ich habe eine Frage, die ich mir auf Grundlage einer Suche in diesem und anderen Foren leider nicht selbst beantworten kann. Ist es möglich (bzw. wie ist es möglich), eine Tabelle mit tabularx zu erzeugen, in der Werte am Komma ausgerichtet werden? Ich weiß, dass es dcolumn gibt, aber dazu wird ja ein eigener Spaltentyp definiert. Diesen "kann" ich jedoch nicht verwenden, wenn ich meine Tabelle mit Tabularx respektive einem Tabularx-Spaltentyp verwende. Oder sehe ich das falsch?

Im Folgenden ein Minimalbeispiel meiner bisherigen Tabelle:


\documentclass{scrreprt}
\usepackage{booktabs}
\usepackage{tabularx}
\newcolumntype{C}{>{\centering\arraybackslash}X}
\usepackage[skip=0pt,labelfont=it,nooneline,small]{caption}
\begin{document}
\begin{table}[!ht]
\captionabove{Überschrift}
\centering
\footnotesize
\begin{tabularx}{\textwidth}{p{4cm}CCCC}
\toprule
& {\textbf{Text}} & \multicolumn{3}{c}{\textbf{Text}}\\
& \emph{Text} & \emph{Text} & \emph{Text} & \emph{Text}\\
\midrule \addlinespace
Text & 2,93 (0,82) & 3,18 (0,77) & 3,17 (0,78) & 3,19 (0,76) \\ \
Text & 15,20 (5,81) & 11,85 (5,89) & 12,08 (5,89) & 10,90 (5,84) \\ \addlinespace
\bottomrule
\multicolumn{5}{l}{\tiny\textit{Quelle:} Platzhalter}
\end{tabularx}
\end{table}

\end{document}

bobmalaria
12-09-2009, 15:55
hi,

dein ansatz ist doch soweit in ordnung. verwende eventuell das paket siunitx und dessen spaltentyp S. überschreibe die kopfzeile mit einer einspaltigen mlticolumn \multicolumn{1}{X}{Kopfzeile}. aber in einer tabelle mit werten finde ich den X spaltentyp sowieso unnötig. werte sind eben so breit wie sie sein müssen. in der multicolumn kann man dann auch nit p-spalten arbeiten.

gruss

Onyag
12-09-2009, 16:42
Vielen Dank für Deine Hilfe.

In dem Minimalbeispiel ist der Unterschied nicht sehr groß, ja. Aber in einer Tabelle mit ca. 20 Zeilen und größeren Unterschieden (z.B. "0,3" und "-1000,0") sieht das Ganze doch schon etwas anders aus, oder? ;)

siunitx habe ich mir (vorher schon) kurz angeguckt, wenn ich es richtig verstanden habe definiert das Paket doch ebenfalls einen neuen Spaltentyp, was ja nicht ist, was ich will.


in einer tabelle mit werten finde ich den X spaltentyp sowieso unnötig. werte sind eben so breit wie sie sein müssen. in der multicolumn kann man dann auch nit p-spalten arbeiten.

Aus dem Minimalbeispiel wird es nicht deutlich, aber in jeder Spalte stehen letztlich zeilenweise vergleichbare Werte (z.B. ist die Spalte 2 "Deutsch" und die Spalte 3 "Ausländisch" und in den Zeilen stehen bestimmte prozentuale Werte für irgendwelche Merkmale, die in Spalte eins aufgelistet werden). Da wäre es doch schon nett, wenn die Spalten gleich groß wären, ohne dass ich "rechnen" muss, wie groß einzelne Spalten sein sollen. Oder ist das dann eh zu kompliziert gedacht?

edico
13-09-2009, 17:28
Das Beispiel stellt mögliche (weiter zu entwickelnde - sprich: auf die eigenen Bedürfnisse anzupassende) Ansätze dar. AFAIK können tabularx und dcolumn nicht 'verquickt' werden: d-Spalte basiert auf p-Spalte.
Insofern können Lösungen in der Kombination aus X- und d-Spalten mit tabularx oder tabular* liegen:



\listfiles
\documentclass[paper=a5,landscape,pagesize,DIV21,10pt]{scrartcl}
\pagestyle{empty}

\usepackage{tabularx}
\usepackage{array,booktabs,calc}
\usepackage{dcolumn}

%% \newcolumntype{C}{>{\centering\arraybackslash}X}
\newcolumntype{L}[1]{>{\raggedright\arraybackslash}p{#1}}
%% \newcolumntype{Z}[1]{>{\centering\arraybackslash}p{#1}}
%\newcolumntype{d}{D{,}{,}{4.10}}
\newcolumntype{d}{D{,}{,}{6.9}}
\newcolumntype{e}{D{,}{,}{4.10}}
\newcolumntype{,}[1]{D{,}{,}{#1}}
\newcolumntype{y}{D{.}{.}{-1}}

\usepackage[skip=0pt,labelfont=it,nooneline,small]{caption}

\def\ler{\hphantom{0}} % Nicht-aufgefuellte Nachkommastelle


\begin{document}
\title{tabularx und tabular* mit dcolumn}
\author{Edico}
\date{}
\maketitle

\begin{abstract}
``Is there a way to combine the features of -dcolumn- and -tabularx- or -
tabular*-? The problem is to have tables of linewidth in which the columns
spread themselves out evenly across the width of the table while at the same
time being able to do decimal alignment on certain columns.

It seems to me that -tabularx- won't work, because the columns must be
specified as type X, which doesn't align on the decimal point.''

\verb|!!! Extra alignment tab has been changed to \cr| --- \par
the occurrence of the error when you're using alignment instructions
in a 'p' column: somit keine X-Spalte erlaubt !
(s. auch http://www.tex.ac.uk/cgi-bin/texfaq2html?label=altabcr)
\end{abstract}

\newpage
\section{tbx}

\begin{table}[!ht]
\captionabove{ \texttt{Xdddd (mit d=6.9)} }
\centering
\small%footnotesize
\begin{tabularx}{\textwidth}{Xdddd}
\toprule
& \multicolumn{1}{c}{\textbf{Text}}
& \multicolumn{3}{c}{\textbf{Text}}\\\cmidrule{3-5}
& \multicolumn{1}{c}{\emph{Text}}
& \multicolumn{1}{c}{\emph{Text}}
& \multicolumn{1}{c}{\emph{Text}}
& \multicolumn{1}{c}{\emph{Text}}\\
\midrule
\addlinespace
ein langfliessender Text
&2,93\ (0,82) &3,18\ (0,77) &3,17\ler\ler\ (0,78) &3,19\ler\ (0,76)\\
Text
&1500,20\ (5,81) &-11,85\ (5,89) &12,0876\ (5,89) &-100,908\ (5,84)\\
ein noch l\"anger fliessender Text
&45678,45\ (5,81) &-1111,5\ler\ (5,89) &12,0876\ (5,89) &-1,234\ (5,84)\\
kein Text, aber ein Wort
&23,91\ (0,82) &2003,18\ (0,77) &167,17\ler\ler\ (0,78) &3,19\ler\ (0,76)\\
ein wahnsinnig fliessender und umbrechender Text
&-21005,33\ (5,81) &-101,0\ler\ (5,89) &12,0876\ (5,89) &120,908\ (5,84)\\
nur ein Text
&122,39\ (0,82) &3,18\ (0,77) &2323,17\ler\ler\ (0,78) &3,19\ler\ (0,76)\\
\addlinespace
\bottomrule
\multicolumn{5}{l}{\tiny\textit{Quelle:} Platzhalter}
\end{tabularx}
\end{table}

%%% -----------------------------------------------------------------------

\begin{table}[!h]
\captionabove{ \texttt{X\*\{4\}\{,\{5.9\}\} }}
\centering
\small%\footnotesize
% \begin{tabularx}{\textwidth}{ X,{4.10,{4.10},{4.10},{4.10} }
\begin{tabularx}{\textwidth}{ X*{4}{,{5.9}} }
\toprule
& \multicolumn{1}{c}{\textbf{Text}}
& \multicolumn{3}{c}{\textbf{Text}}\\
& \multicolumn{1}{c}{\emph{Text}}
& \multicolumn{1}{c}{\emph{Text}}
& \multicolumn{1}{c}{\emph{Text}}
& \multicolumn{1}{c}{\emph{Text}}\\
\midrule \addlinespace
ein langfliessender Text
&2,93\ (0,82) &3,18\ (0,77) &3,17\ler\ler\ (0,78) &3,19\ler\ (0,76)\\
Text
&1500,20\ (5,81) &-11,85\ (5,89) &12,0876\ (5,89) &-100,908\ (5,84)\\
ein noch l\"anger fliessender Text
&45678,45\ (5,81) &-1111,5\ler\ (5,89) &12,0876\ (5,89) &-1,234\ (5,84)\\
kein Text, aber ein Wort
&23,91\ (0,82) &2003,18\ (0,77) &167,17\ler\ler\ (0,78) &3,19\ler\ (0,76)\\
ein wahnsinnig fliessender und umbrechender Text
&-21005,33\ (5,81) &-101,0\ler\ (5,89) &12,0876\ (5,89) &120,908\ (5,84)\\
nur ein Text
&122,39\ (0,82) &3,18\ (0,77) &2323,17\ler\ler\ (0,78) &3,19\ler\ (0,76)\\
\addlinespace
\bottomrule
\multicolumn{5}{l}{\tiny\textit{Quelle:} Platzhalter}
\end{tabularx}
\end{table}

%%% -----------------------------------------------------------------------

\newpage
\section{tbl*}

\begin{table}[!h]
\captionabove{ \texttt{L\{.2\textbackslash linewidth\}eeee (mit e=4.10)} }
\centering
\small%\footnotesize
\begin{tabular*}{\textwidth}{L{.2\linewidth}eeee}
% >>>>>>>> start master-zeile <<<<<<<<<
\multicolumn{1}{p{0.2\textwidth-2\tabcolsep}}{\mbox{}}&
\multicolumn{1}{p{0.2\textwidth-2\tabcolsep}}{\mbox{}}&
\multicolumn{1}{p{0.2\textwidth-2\tabcolsep}}{\mbox{}}&
\multicolumn{1}{p{0.2\textwidth-2\tabcolsep}}{\mbox{}}&
\multicolumn{1}{p{0.2\textwidth-2\tabcolsep}}{\mbox{}}\\[-\topskip]
% >>>>>>>> ende master-zeile <<<<<<<<<<
\toprule
%\multicolumn{1}{c}{}
&
\multicolumn{1}{c}{\textbf{Text}} &
\multicolumn{3}{c}{\textbf{Text}} \\
\multicolumn{1}{c}{} &
\multicolumn{1}{c}{\emph{Text}} &
\multicolumn{1}{c}{\emph{Text}} &
\multicolumn{1}{c}{\emph{Text}} &
\multicolumn{1}{c}{\emph{Text}} \\
\midrule \addlinespace
ein langfliessender Text
&2,93\ (0,82) &3,18\ (0,77) &3,17\ler\ler\ (0,78) &3,19\ler\ (0,76)\\
Text
&1500,20\ (5,81) &-11,85\ (5,89) &12,0876\ (5,89) &-100,908\ (5,84)\\
ein noch l\"anger fliessender Text
&45678,45\ (5,81) &-1111,5\ler\ (5,89) &12,0876\ (5,89) &-1,234\ (5,84)\\
kein Text, aber ein Wort
&23,91\ (0,82) &2003,18\ (0,77) &167,17\ler\ler\ (0,78) &3,19\ler\ (0,76)\\
ein wahnsinnig fliessender und umbrechender Text
&-21005,33\ (5,81) &-101,0\ler\ (5,89) &12,0876\ (5,89) &120,908\ (5,84)\\
nur ein Text
&122,39\ (0,82) &3,18\ (0,77) &2323,17\ler\ler\ (0,78) &3,19\ler\ (0,76)\\
\addlinespace
\bottomrule
\multicolumn{5}{l}{\tiny\textit{Quelle:} Platzhalter}
\end{tabular*}
\end{table}

\end{document}


edico