Discussion:
Lokal Dezimalpunkt durch Komma ersetzen
(zu alt für eine Antwort)
Alex M.
2011-12-20 11:23:32 UTC
Permalink
Hallo,

ich habe in meinem (deutschen) Dokument alle Vorkommen von
Dezimalpunkten durch Kommas ersetzt,
indem ich vor \begin{document} den Punkt umdefiniert habe:
http://www.freak-search.com/de/thread/95039/dezimalkomma

Minimalbeispiel:
---------------------------------------------------------
\documentclass{article}

\mathcode`.="8000
\begingroup
\catcode`.=\active
\gdef.{{,}}
\endgroup

\begin{document}
\vspace{1.0cm} % Fehler "Illegal unit of measure (pt insertet).",
% falls \begingroup und \endgroup auskommentiert
$1.2$
\end{document}
---------------------------------------------------------

Wie kann ich aber vorgehen, wenn ich die Umdefinition in einem
Abschnitt des Dokuments "rückgängig" machen will? Ich hatte vermutet,
ich könnte einfach gdef durch def ersetzen und an der passenden Stelle
im Dokument nochmal aufrufen.
Das setzt natürlich voraus, dass \begingroup und \endgroup
verschwinden, da die Umdefinition sonst nur lokal zwischen diesen
wäre. Wenn ich aber die zwei Zeilen auskommentiere, dann funktionieren
Befehle wie \vspace{1.0cm} nicht mehr (offensichtlich wird auch hier .
durch {,} ersetzt...).

Hat da jemand einen Tip?

Alex
Heiko Oberdiek
2011-12-20 12:47:54 UTC
Permalink
Post by Alex M.
---------------------------------------------------------
\documentclass{article}
\mathcode`.="8000
\begingroup
\catcode`.=\active
\gdef.{{,}}
\endgroup
\begin{document}
\vspace{1.0cm} % Fehler "Illegal unit of measure (pt insertet).",
% falls \begingroup und \endgroup auskommentiert
$1.2$
\end{document}
---------------------------------------------------------
Wie kann ich aber vorgehen, wenn ich die Umdefinition in einem
Abschnitt des Dokuments "rückgängig" machen will?
Beispielsweise kann man einen Schalter einbauen, der dann vom
aktiven Punkt abgefragt wird und dann je nach Schalterstellung
ein Comma oder einen Punkt ausgibt.

\documentclass{article}

\mathchardef\MathDot=\mathcode`\.
\newif\ifMathDotComma
\mathcode`.="8000
\begingroup
\catcode`.=\active
\gdef.{\ifMathDotComma{,}\else\MathDot\fi}
\endgroup
\MathDotCommatrue

\begin{document}
\vspace{1.0cm}

$1.2$

\MathDotCommafalse
$1.2$
\end{document}
--
Heiko Oberdiek
Alex M.
2011-12-20 16:29:25 UTC
Permalink
Danke, das funktioniert einwandfrei!

Kannst du mir trotzdem erklären, warum die Definition ohne \begingroup
und \endgroup auch auf Längenangaben wirkt, mit aber nicht. Die LaTeX-
Makros sind mir irgendwie immer noch ein Buch mit sieben Siegeln. Wenn
ich den Code richtig verstehe, dann bedeutet er:

--------------------------------------------------------------

\mathchardef\MathDot=\mathcode`\. % \MathDot = ursprünglicher Punkt
\newif\ifMathDotComma % neuer Switch "MathDotComma"
\mathcode`.="8000 % Punkt im Mathemodus aktiv
\begingroup
\catcode`.=\active % warum wirkt das jetzt nur im Mathemodus
% aber nicht auf Text-Punkt?
\gdef.{\ifMathDotComma{,}\else\MathDot\fi} % wenn MathDotComma = false
% dann ursprünglicher Punkt
\endgroup

--------------------------------------------------------------

wenn ich mir allerdings deinen Code aus dem Thread von 2009
(https://groups.google.com/group/de.comp.text.tex/tree/browse_frm/
thread/ca65b2a715036142/b13896ac502c19b5?hl=de&rnum=1&q=Dezimalkomma
+2009&_done=%2Fgroup%2Fde.comp.text.tex%2Fbrowse_frm%2Fthread
%2Fca65b2a715036142%2F1cb2f6b8c26a0599%3Fhl%3Dde%26lnk%3Dgst%26q
%3DDezimalkomma%2B2009%26#doc_9456817cff2ecc41)
anschaue (wo der Punkt nur ersetzt wurde, wenn eine Ziffer darauf
folgt), verstehe ich fast nur Bahnhof...
Insbesondere: bedeutet eigentlich das "@" in den Makronamen?

Alex
Philipp Stephani
2011-12-20 17:52:31 UTC
Permalink
Post by Alex M.
Danke, das funktioniert einwandfrei!
Kannst du mir trotzdem erklären, warum die Definition ohne \begingroup
und \endgroup auch auf Längenangaben wirkt, mit aber nicht.
Die Catcode-Änderung wird durch das Gruppenende lokal gehalten. Der
Punkt ist also nach wie vor ein ganz normaler Punkt. Im Mathematikmodus
schaut TeX allerdings nicht nur auf den Catcode, sondern auch auf den
Mathcode. Wenn dieser 8000h ist, wird das Zeichen behandelt, als wäre
es aktiv; in diesem Fall wird es als Makro expandiert. \gdef ist nötig,
damit es seine Bedeutung außerhalb der Gruppe beibehält.
@ hat normalerweise den Catcode "other", kann also nicht in Makronamen
verwendet werden. Deshalb wird es benutzt, um interne Makros zu
definieren, die nur in Paketen und Klassen (wo @ den Catcode "letter"
hat) sowie nach \makeatletter direkt verwendet werden können. Andere
Konventionen für Zeichen für interne Makros sind ?, ! und : (ConTeXt)
oder _ und : (LaTeX 3).
--
Change “LookInSig” to “tcalveu” to answer by mail.
Heiko Oberdiek
2011-12-20 18:13:31 UTC
Permalink
Post by Alex M.
Danke, das funktioniert einwandfrei!
Kannst du mir trotzdem erklären, warum die Definition ohne \begingroup
und \endgroup auch auf Längenangaben wirkt, mit aber nicht.
Du machst den Punkt aktiv, um den aktiven Punkt definieren
zu können. Ohne Gruppe bleibt der Punkt aktiv egal ob Mathe-Modus
oder nicht. Mit Gruppe bleibt nur die Definition erhalten wegen
\*g*def und die Definition schlägt im Mathemodus zu, wenn der
Punkt hier aktiv wird wegen \mathcode`.="8000.
--
Heiko Oberdiek
Alex M.
2011-12-20 20:30:21 UTC
Permalink
Danke für die Erklärungen, jetzt leuchtet es mir ein.

Alex
Oliver Jennrich
2011-12-20 20:04:06 UTC
Permalink
Post by Alex M.
Hat da jemand einen Tip?
Ja, aber einen vollkommen anderen: Das SIunitx-Paket benutzen und Zahlen
via \num{} auszeichnen, dann kann man über die locale-option einstellen,
ob man Punkt oder Komma verwenden müochte.
--
Space - The final frontier
Alex M.
2011-12-20 20:46:21 UTC
Permalink
Post by Oliver Jennrich
Ja, aber einen vollkommen anderen: Das SIunitx-Paket benutzen und Zahlen
via \num{} auszeichnen, dann kann man über die locale-option einstellen,
ob man Punkt oder Komma verwenden müochte.
Danke für den Tip, aber ich finde dass Paket ehrlich gesagt
unpraktisch (zumindest wenn ich jede Zahl als Parameter schreiben muss
-- geschweifte Klammern sind auf der deutschen Tastatur so schlecht zu
erreichen...).

Alex
Oliver Jennrich
2011-12-20 20:53:58 UTC
Permalink
Post by Alex M.
Post by Oliver Jennrich
Ja, aber einen vollkommen anderen: Das SIunitx-Paket benutzen und Zahlen
via \num{} auszeichnen, dann kann man über die locale-option einstellen,
ob man Punkt oder Komma verwenden müochte.
Danke für den Tip, aber ich finde dass Paket ehrlich gesagt
unpraktisch (zumindest wenn ich jede Zahl als Parameter schreiben muss
-- geschweifte Klammern sind auf der deutschen Tastatur so schlecht zu
erreichen...).
Das ist ein generelles Problem bei der Verwendung von (La)TeX. Um
geschweifte Klammern kommt man da kaum herum.
--
Space - The final frontier
Philipp Stephani
2011-12-20 23:17:28 UTC
Permalink
Post by Alex M.
Post by Oliver Jennrich
Ja, aber einen vollkommen anderen: Das SIunitx-Paket benutzen und Zahlen
via \num{} auszeichnen, dann kann man über die locale-option einstellen,
ob man Punkt oder Komma verwenden müochte.
Danke für den Tip, aber ich finde dass Paket ehrlich gesagt
unpraktisch (zumindest wenn ich jede Zahl als Parameter schreiben muss
-- geschweifte Klammern sind auf der deutschen Tastatur so schlecht zu
erreichen...).
Für LaTeX (und generell für jede Art der Programmierung) bietet es sich
an, entweder ein englisches Tastaturlayout zu verwenden oder das
deutsche Layout zu modifizieren. Ich habe beispielsweise ü, ö und ä
durch \, { und } ersetzt.
--
Change “LookInSig” to “tcalveu” to answer by mail.
Christian H. Kuhn
2011-12-21 00:33:08 UTC
Permalink
Post by Philipp Stephani
Post by Alex M.
Danke für den Tip, aber ich finde dass Paket ehrlich gesagt
unpraktisch (zumindest wenn ich jede Zahl als Parameter schreiben muss
-- geschweifte Klammern sind auf der deutschen Tastatur so schlecht zu
erreichen...).
Für LaTeX (und generell für jede Art der Programmierung) bietet es sich
an, entweder ein englisches Tastaturlayout zu verwenden oder das
deutsche Layout zu modifizieren. Ich habe beispielsweise ü, ö und ä
durch \, { und } ersetzt.
Ich hab mich fürs Neo2-Layout entschieden, wo ich - nach einer
zugegebenermaßen steilen Lernkurve - jetzt problemlosen Zugriff auf alle
Sonderzeichen habe, ohne die Umlaute zu verlieren.
Alex M.
2011-12-21 10:29:14 UTC
Permalink
Post by Philipp Stephani
Für LaTeX (und generell für jede Art der Programmierung) bietet es sich
an, entweder ein englisches Tastaturlayout zu verwenden oder das
deutsche Layout zu modifizieren.  Ich habe beispielsweise ü, ö und ä
durch \, { und } ersetzt.
Dazu benutze ich ä,ö und ü zu oft... (dann lieber auf den Ziffernblock
ummappen - den benutze ich bisher eigentlich nie). Mit einem komplett
neuem Tastaturlayout (wie das von Christian vorgeschlagene Neo2) würde
ich wahrscheinlich nicht zurecht kommen (insbesondere nicht, wenn es
doch nicht immer vorhanden ist...) - und ob ich nun "Alt Gr+Taste"
oder "Mod3+Taste" drücke macht glaub ich keinen so großen
unterschied...

Alex
Philipp Stephani
2011-12-21 21:14:38 UTC
Permalink
Post by Alex M.
Post by Philipp Stephani
Für LaTeX (und generell für jede Art der Programmierung) bietet es sich
an, entweder ein englisches Tastaturlayout zu verwenden oder das
deutsche Layout zu modifizieren.  Ich habe beispielsweise ü, ö und ä
durch \, { und } ersetzt.
Dazu benutze ich ä,ö und ü zu oft...
Bist du dir da sicher? Ich habe gerade eine Statistik über ein größeres
deutschsprachiges LaTeX-Dokument laufen lassen. Das Ergebnis ist recht
eindeutig:

1. (U+0020, Zs): 84495 (12.3 %)
2. e (U+0065, Ll): 64178 ( 9.3 %)
3. n (U+006E, Ll): 37882 ( 5.5 %)
4. i (U+0069, Ll): 37730 ( 5.5 %)
5. \ (U+005C, Po): 36216 ( 5.3 %)

14. (U+000A, Cc): 15419 ( 2.2 %)

16. { (U+007B, Ps): 14836 ( 2.2 %)
17. } (U+007D, Pe): 14836 ( 2.2 %)

25. $ (U+0024, Sc): 7294 ( 1.1 %)

27. _ (U+005F, Pc): 5089 ( 0.7 %)

29. , (U+002C, Po): 4086 ( 0.6 %)

31. ^ (U+005E, Sk): 3746 ( 0.5 %)
32. ) (U+0029, Pe): 3466 ( 0.5 %)
33. ( (U+0028, Ps): 3465 ( 0.5 %)

36. = (U+003D, Sm): 3333 ( 0.5 %)
37. - (U+002D, Pd): 3296 ( 0.5 %)
38. % (U+0025, Po): 3023 ( 0.4 %)

41. . (U+002E, Po): 2428 ( 0.4 %)

51. + (U+002B, Sm): 1511 ( 0.2 %)

56. ä (U+00E4, Ll): 1207 ( 0.2 %)

64. ü (U+00FC, Ll): 869 ( 0.1 %)

74. ö (U+00F6, Ll): 383 ( 0.1 %)

Selbst der häufigste Umlaut ist um eine Größenordnung seltener als die
geschweiften Klammern. Die häufigsten Zeichen sollten logischerweise
ohne Vorschalttasten erreichbar sein. Bei mir ist das für die Top 31
lediglich beim Dollarzeichen nicht der Fall.

Allerdings muss daszugesagt werden, dass das untersuchte Dokument sehr
mathematiklastig ist. Es ist durchaus möglich, dass die Statistik für
reine Textdokumente ganz anders aussieht. Ich würde das aber ebenfalls
vorher prüfen, bevor ich mich für ein Tastaturlayout entscheiden würde.
--
Philipp Stephani
Loading...