PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \addto\extrasngerman{\pgfplotsset{/pgf/number format/use comma}}



Magger
07-09-2012, 12:17
Ich habe einen kleinen Fehler festgestellt, dessen Ursache zu finden mich reichlich Nerven gekostet hat.

Folgendes Minimalbeispiel


\documentclass{article}

\usepackage[ngerman]{babel}

\usepackage[latin9]{inputenc}

\usepackage[T1]{fontenc}

\usepackage{tikz}

\usepackage{pgfplots}
\pgfplotsset{compat=newest}

\pgfplotsset{/pgf/number format/use comma}
\pgfplotsset{/pgf/number format/.cd,1000 sep={\,}}

\begin{document}

\begin{figure}
\centering
\begin{tikzpicture}
\begin{axis}
\addplot+[domain=1:1000]{cos(deg(x*2*pi/1000))};
\end{axis}
\end{tikzpicture}
\end{figure}

\end{document}

funktioniert ganz perfekt.

Ändert man allerdings die Zeile


\pgfplotsset{/pgf/number format/use comma}

in


\addto\extrasngerman{\pgfplotsset{/pgf/number format/use comma}}

so bekommt man zwar immernoch ein Komma als Dezimaltrenner, allerdings wieder einen Punkt statt ein halbes Leerzeichen als Tausendertrennzeichen.

Woran liegt das?

u_fischer
07-09-2012, 13:48
"use comma" ist ein Stil der mehrere Dinge tut, u.a. setzt es auch den "1000 sep". Wenn du "use comma" innerhalb von \extrasngerman setzt, wird es zu Beginn des Dokuments (und an allen anderen Stellen wo du zu ngerman wechselst) ausgeführt und überschreibt damit deine "1000 sep" Einstellung.

Du musst also entweder statt "use comma" "set decimal separator" benutzen, oder "1000 sep" auch in \extrasngerman hineinnehmen.

Ich hoffe aber, dass du nicht zweierlei Einstellungen für Zahlen in einem Dokument benutzt. Das dürfte Leser sehr verwirren.

Magger
08-09-2012, 19:05
Danke für die Erklärung. Das macht mir einiges klarer.

Magger
09-09-2012, 21:06
Ich habe es jetzt mal ausprobiert und die Zeile


\addto\extrasngerman{\pgfplotsset{/pgf/number format/use comma}}

durch


\addto\extrasngerman{\pgfplotsset{/pgf/number format/.cd,dec sep={,}}}

ersetzt. Leider funktioniert es trotzdem nicht. Statt eines Kommas erscheint gar kein Dezimaltrenner.

Ich habe mich dann mal ein bisschen durch die pgfmathfloat.code.tex gelesen und folgendes ausprobiert:

Die Variante

\addto\extrasngerman{\pgfplotsset{/pgf/number format/set decimal separator={{{,}}}}} funktioniert. Warum eigentlich? Das man zusätzlich zwei geschweifte Klammern braucht, um ein Komma zu erzeugen, scheint nirgendwo dokumentiert zu sein.

Die Variante

\addto\extrasngerman{\pgfplotsset{/pgf/number format/dec sep={{{,}}}}} funktioniert dagegen nicht. Warum eigentlich nicht? Laut dem pgfplotstable-manual sollte 'dec sep' und 'set decimal separator' eigentlich genau das Gleiche machen.

Feuersaenger
11-09-2012, 21:12
Hi Magger,

ich denke, ich kann Dir was an Antworten - und sogar Fehlerbehebungen - beisteuern:

1. Das
dec sep={,} nicht funktioniert ist tatsaechlich ein bug in TikZ. Ich habe das soeben behoben und in die entwicklerversion von TikZ eingespielt. Danke fuer den Bericht - und sorry fuer die nerverei :-(

Das 'dec sep' ist nichts anderes als
set decimal separator={#1} . dummerweise fehlten die Klammern um das Argument ... und da Kommata eine spezielle bedeutung fuer key-value prozessierung haben, ging dieses Argument unter :-/

Das ist jetzt behoben.

2. Warum drei Klammerpaare nur fuer ein Komma? Nun:

Das erste Klammerpaar brauchst Du, damit das Komma nicht von dem key-value-prozessor interpretiert wird.

Das reicht auch VOELLIG aus.

Aber: Du kannst ja mal


\pgfplotsset{/pgf/number format/set decimal separator={,}}

\pgfmathprintnumber{1.123}

$1,12$

$1{,}12$
bei Dir ausprobieren. Das Komma hat irgendwelche speziellen Spacing mechanismen in TeX - im Math mode wird danach leerer Platz eingefuegt. Beim Zahlformatieren will man das nicht, darum das naechste paar Klammern. Das dritte paar Klammern ist nun leider auch ein Artefakt des key-value prozessors: der entfernt ein paar waehrend er untersucht, welchen Typ der key hat. Das ist in der Tat doof, nur leider nicht leicht zu umgehen.

Mit liebem Gruss

Christian

Magger
12-09-2012, 12:08
Hallo Christian,

vielen Dank für deine Bemühungen und Fehlerbehebungen. Ich warte dann auf das nächste Update.

Noch ein Kommentar, der nur noch indirekt zum eigentlichen Thema gehört:

Ich würde es begrüßen, den Stil "use comma" und "use period" so abzuändern, dass stets ein halbes oder gar kein Leerzeichen als Tausendertrennzeichen verwendet wird. In jedem Fall sollte kein Komma und kein Punkt als Tausendertrennzeichen verwendet werden.

Das entspricht dann den Vorschlägen und Regelungen des internationalen Maß- und Gewichtsbüros (BIPM).

Siehe dazu:

http://de.wikipedia.org/wiki/Internationales_Einheitensystem#Dezimaltrennzeiche n_und_Tausendertrennzeichen

oder direkt

http://www.bipm.org/utils/common/pdf/si_brochure_8.pdf (Abschnitt 5.3.4 auf Seite 139)

Viele Grüße, Mathias

Feuersaenger
15-09-2012, 21:10
Hallo Mathias,

danke fuer den Hinweis... klingt sinnvoll. Leider ist die jetzige Einstellung numal in der "grossen weiten Welt" gelandet. Ich fuerchte, da laesst sich ohne einen Aufschrei nichts mehr dran machen.

Ich koennte hoechstens einen *weiteren* Style hinzufuegen, der das tut. Das machts nur nicht uebersichtlicher...

Mit liebem Gruss

Christian

Magger
20-09-2012, 10:45
Ich würde es bei der nächsten "Major Revision" ändern, die Änderung mit einer entsprechenden Begründung dokumentieren und den möglichen Aufschrei riskieren.

Lieber ein Ende mit Schrecken, als ein Schrecken ohne Ende.

Ist aber nur meine persönliche Meinung.