PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabelle Zellen zentrieren und am Dezimalkomma ausrichten



sailor79
21-05-2011, 11:20
Hallo zusammen,

ich arbeite mit Lyx 2.6.9 und würde gerne mit dem Paket numprint die Zellen, welche Zahlen beinhaltet, zentrieren (kein Problem) aber die Zahlen am Dezimalkomma ausrichten. Leider kriege ich das einfach nicht hin und scheitere vor allem daran, dass ich vor lauter Multicolums nicht weiß, wohin ich das N setzen soll. Anbei ein lauffähiges Minimalbeispiel sowie die zugehörige pdf mit jetzigem Status.

Vielleicht weiß jemand Rat.
Danke schonmal.
Gruß
sailor

\documentclass[a4paper,ngerman]{report}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\usepackage{numprint}
\usepackage{booktabs}

\begin{document}

\begin{table}[H]
\caption{\label{tab:Tabellexy}Tabellexy}
\footnotesize
\begin{tabular} {lcccccccr}
\toprule & Text & & & & text & & & \tabularnewline
\hline
Test & Text- & \multicolumn{3}{l}{zzgl. Text} & Text- & \multicolumn{3}{l}{zzgl. text}\tabularnewline
Text & Text & Text & Text & Text+ Text & Text &Text& Text & Text + Text\tabularnewline
\hline
Text & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 10\tabularnewline
Text & 5555 & 5555 & 5555,0 & 5555 & 5555 & 5555 & 5555 & 5555\tabularnewline
Text & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 10\tabularnewline
Text & 444 & 444 & 444,5 & 444 & 444 & 444 & 444 & 444\tabularnewline
Text & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\tabularnewline
Text & 0 & 1000 & 0 & 0 & 0 & 1000 & 0 & 0\tabularnewline
Text & 0 & 0 & 10000 & 0 & 0 & 0 & 10000 & 0\tabularnewline
Text & 10 & 10 & 10 & 1000 & 0 & 0 & 0 & 10000\tabularnewline
Text & 5 & 5 & 5 & 5 & 5,55 & 5 & 5 & 5\tabularnewline
\hline
Text & 4.444 & 5.555 & 66.666 & 77.777 & 88.888 & 9.999 & 10.000 & 11.000\tabularnewline\bottomrule %\tabularnewline

\end{tabular}

\end{table}

\end{document}

Schweinebacke
23-05-2011, 07:40
Schau Dir mal die Anleitung zum Paket tabu (http://www.ctan.org/pkg/tabu) an. Dort insbesondere Abschnitt 6.1 für die Nummern.

BTW: Sooo viele \multicolumn hast Du gar nicht. Unübersichtlich ist das eher, weil die Tabelle so viele Spalten hat. Fang mit einer einfacheren Tabelle an, bei der die Spaltenüberschriften nicht über mehrere Spalten gehen.

Disclaimer: Dieser Hinweis berücksichtigt nicht die Anforderung einer LyX-Lösung und enthält keine vollständige Lösung, sondern nur allgemeine Hinweise!

defcon
23-05-2011, 08:46
Gib statt c/l/r für die Ausrichtung in der Spalte an:



\usepackage{dcolumn}

...
\begin{tabular}{D{.}{,}{x.y}}


Das D richtet die Spalte nach dem Dezimalkomma aus.
1. Klammer: Das Zeichen, nach dem ausgerichtet wird; wenn also in deinem Text ein Punkt steht
2. Klammer: Das Zeichen, das dann ausgegeben wird, also im pdf-Dokument steht; kann also auch ein Punkt sein
3. Klammer: x=Anzahl freier Stellen vor der Trennung ; y=Anzahl freier Stellen nach der Trennung. Das ist für den Fall, daß du sehr unterschiedlich lange zahlen hast. Du kannst statt {x.y} auch {-1} eingeben, dann ist die Stellenzahl frei und wird automatisch die längste Zahl genommen...


Wenn Du dann auch noch mit dir darüber einig wirst, ob du . oder , benutzen willst, funktioniert es auch immer:
(Nachteil: Die Tabelle wird extrem breit...)



\documentclass[a4paper,ngerman]{report}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\usepackage{numprint}
\usepackage{booktabs}
\usepackage{dcolumn}
\begin{document}

\begin{table}[H]
\caption{\label{tab:Tabellexy}Tabellexy}
\footnotesize
\begin{tabular} {l D{.}{.}{-1} D{.}{.}{-1} D{.}{.}{-1} D{.}{.}{-1} D{.}{.}{-1} D{.}{.}{-1} D{.}{.}{-1} r}
\toprule & Text & & & & text & & & \tabularnewline
\hline
Test & Text- & \multicolumn{3}{l}{zzgl. Text} & Text- & \multicolumn{3}{l}{zzgl. text}\tabularnewline
Text & Text & Text & Text & Text+ Text & Text &Text& Text & Text + Text\tabularnewline
\hline
Text & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 10\tabularnewline
Text & 5555 & 5555 & 5555.0 & 5555 & 5555 & 5555 & 5555 & 5555\tabularnewline
Text & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 10\tabularnewline
Text & 444 & 444 & 444.5 & 444 & 444 & 444 & 444 & 444\tabularnewline
Text & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\tabularnewline
Text & 0 & 1000 & 0 & 0 & 0 & 1000 & 0 & 0\tabularnewline
Text & 0 & 0 & 10000 & 0 & 0 & 0 & 10000 & 0\tabularnewline
Text & 10 & 10 & 10 & 1000 & 0 & 0 & 0 & 10000\tabularnewline
Text & 5 & 5 & 5 & 5 & 5,55 & 5 & 5 & 5\tabularnewline
\hline
Text & 4.444 & 5.555 & 66.666 & 77.777 & 88.888 & 9.999 & 10.000 & 11.000\tabularnewline\bottomrule %\tabularnewline

\end{tabular}

\end{table}

\end{document}

hakaze
23-05-2011, 14:32
Ich habe sehr gute Erfahrungen mit der S-Spalte aus dem siunitx (http://www.ctan.org/pkg/siunitx)-Paket gemacht. Schau dir mal die Doku dazu an... das Paket lässt eigentlich kaum Wünsche offen.

sailor79
23-05-2011, 20:33
Hallo zusammen,
danke für eure Tips.

@Schweinebacke: Danke, leider habe ich keine Zeit mehr alle Tabellen neu zu programmieren.

@defcon: Danke. Hat funktioniert, leider aber nicht zentriert. Keine Ahnung was ich da falsch mache.

@hakaze: Auch Dankeschön ;-) War bisher die für mich einfachste Lösung, die ich auch gerne nutzten würde. Leider habe ich aber das Problem in siunitx, dass ich zwar mit

\usepackage[%per=slash,
decimalsymbol=comma,
loctolang={DE:ngerman,UK:english},
]{siunitx}
die Kommas und damit Ausrichtung erkannt bekomme, aber keine Punkte (die in meiner DA leider vorgeschrieben sind) als Tausender-Trennzeichen hinbekomme, z.b: 1.234.234,00

Hat hier jemand einen Tip, dass das Skript Punkte ignoriert?

Gruß

defcon
24-05-2011, 06:45
Was willst Du denn zentriert haben?
Der Zahlenblock als solcher sollte eigentlich zentriert sein.
Wenn Du den Dezimalpunkt zentriert haben willst, mußt Du die Anzahl freier Stellen vor und nach dem Punkt fest definieren und gleich groß machen. Dann müsste das auch gehen. Nur wird damit deine Spalte wahrscheinlich noch breiter als sie eh schon ist.




Code:

\usepackage[%per=slash,
decimalsymbol=comma,
loctolang={DE:ngerman,UK:english},
]{siunitx}

die Kommas und damit Ausrichtung erkannt bekomme, aber keine Punkte (die in meiner DA leider vorgeschrieben sind) als Tausender-Trennzeichen hinbekomme, z.b: 1.234.234,00

Hat hier jemand einen Tip, dass das Skript Punkte ignoriert?

Ich verstehe die Frage nicht... Du willst doch nach dem Komma ausrichten, oder? Das müßte doch genau so funktionieren.
Was willst Du jetzt mit den Punkten/Was ist das Problem? (Du kannst ja nicht gleichzeitig nach Punkten und Kommata ausrichten wollen...)

sailor79
24-05-2011, 06:52
Moin defcon.
Ich möchte nach dem Komma innerhalb des Zahlenblocks ausrichten und den ganzen Block (inkl. der Spaltenüberschrift) innerhalb der Spalten(Zelle) zentrieren.
Mit siunuix wurde war nach dem Komma ausgerichtet, alles war aber rechtsbündig. Zusätzlich habe ich Tausender-Trennzeichen (als Punkt), mit welchem das paket nicht umgehen kann, es wertet diese als Komma. Es soll sie aber ignorieren, oder vlt. kann man es auch einstellen.

z.B. 1.234,34 gibt einen Fehler (weil er zwei Kommata erkennt=
1.234 (tausendzweihudnertvierundreißig) erkennt er als 1,234 und richtet demnach auch aus. Leider kann darf ich auf die Tausender-Trennzeichen NICHT verzichten.

Muss leider jetzt los.

Gruß
sailor

defcon
24-05-2011, 07:23
Funktioniert mit meiner Variante alles automatisch.

Wenn Du -1 für die Anzahl freier Stellen eingibst, wird das Dezimalkomma in die Mitte der Spalte gerückt.
Und wenn Du D{,}{,}{-1} wählst, richtet Latex nach Komma aus und ignoriert die Punkte (sprich schreibt sie einfach hin, ohne danach ausrichten zu wollen)

Hier noch mal der Code dazu (ich habe die ersten Spalten mal mit senkrechten Stricher versehen, um die Ausrichtung besser zu sehen.
Das einzig unschöne dabei ist, daß sämtlicher Text in der Überschrift vor das Dezimalkomma gesetzt wird und nicht zentriert ist. Aber das geht bestimmt auch irgendwie...



\documentclass[a4paper,ngerman]{report}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\usepackage{numprint}
\usepackage{booktabs}
\usepackage{dcolumn}
\begin{document}

\begin{table}[H]
\caption{\label{tab:Tabellexy}Tabellexy}
\footnotesize
\begin{tabular} {l|D{,}{,}{-1}|D{.}{.}{-1}|D{.}{.}{-1} D{.}{.}{-1} D{.}{.}{-1} D{.}{.}{-1} D{.}{.}{-1} r}
\toprule & Text & & & & text & & & \tabularnewline
\hline
Test & Text- & \multicolumn{3}{l}{zzgl. Text} & Text- & \multicolumn{3}{l}{zzgl. text}\tabularnewline
Text & Text & Text & Text & Text+ Text & Text &Text& Text & Text + Text\tabularnewline
\hline
Text & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 10\tabularnewline
Text & 5.555 & 5555 & 5555.0 & 5555 & 5555 & 5555 & 5555 & 5555\tabularnewline
Text & 10 & 10 & 10 & 10 & 10 & 10 & 10 & 10\tabularnewline
Text & 4.444 & 444 & 444.5 & 444 & 444 & 444 & 444 & 444\tabularnewline
Text & 1 & 1 & 1 & 1 & 1 & 1 & 1 & 1\tabularnewline
Text & 0 & 1000 & 0 & 0 & 0 & 1000 & 0 & 0\tabularnewline
Text & 0 & 0 & 10000 & 0 & 0 & 0 & 10000 & 0\tabularnewline
Text & 10,55 & 10 & 10 & 1000 & 0 & 0 & 0 & 10000\tabularnewline
Text & 5 & 5 & 5 & 5 & 5,55 & 5 & 5 & 5\tabularnewline
\hline
Text & 4.444 & 5.555 & 66.666 & 77.777 & 88.888 & 9.999 & 10.000 & 11.000\tabularnewline\bottomrule %\tabularnewline

\end{tabular}

\end{table}

\end{document}


Schau mal hier (http://users.aims.ac.za/~kcolville/dcolumn.pdf) in der Dokumentation von dcolumn...

bei siunitx kenn ich mich halt nicht aus...

hakaze
25-05-2011, 10:14
Hallo zusammen,
danke für eure Tips.

@hakaze: Auch Dankeschön ;-) War bisher die für mich einfachste Lösung, die ich auch gerne nutzten würde. Leider habe ich aber das Problem in siunitx, dass ich zwar mit

\usepackage[%per=slash,
decimalsymbol=comma,
loctolang={DE:ngerman,UK:english},
]{siunitx}
die Kommas und damit Ausrichtung erkannt bekomme, aber keine Punkte (die in meiner DA leider vorgeschrieben sind) als Tausender-Trennzeichen hinbekomme, z.b: 1.234.234,00

Hat hier jemand einen Tip, dass das Skript Punkte ignoriert?

Gruß
Ich denke, du musst dann auch den group-separator als option setzen:

group-separator = {.}