The icomma package for L^{A}TEX 2ε

Walter Schmidt^{∗}

(v2.0 – 2002/03/10)

With ordinary L^{A}TEX, the comma cannot be used as a decimal separator in math mode, because it is treated as a punctuation character and L^{A}TEX adds some extra space after it. This can be overcome by defining an ‘intelligent’ comma, which ‘recognizes’, whether it is used as a decimal separator or as a punctuation character.

An appropriate definition was given in [1] and [2]. However, it relied on the particular encoding of the CM fonts, so it would not always work with alternative math fonts such as Euler. The package icomma provides an enhanced variant of this ‘intelligent’ comma. It can be used with the default CM math fonts as well as with alterative math font sets.

After loading of the package, the comma will be typeset as a punctuation character, if the next input character is a space; otherwise the comma is treated as a decimal separator. Thus, a decimal number is to be entered as, for instance,

     1,234

whereas the mathematical expression (x, y) is to be written with a space after the comma:

     (x,␣y)

Bugs and problems

In case the ‘intelligent comma’ is used together with the dcolumn package, a comma to be printed as the decimal separator in a column of type D is to be specified as {\mathord\mathcomma}, rather than {,}, since the latter leads to an error. For instance:

     \begin{tabular}{... D{,}{\mathord\mathcomma}{2} ...}

Note that specifying the comma as the related input character works as usual.

Generally, since the icomma package makes the comma ‘active’, further problems are not unlikely.

The package code

At \begin{document}, we memorize the \mathcode of the ‘punctuation’ comma, in the \mathcomma macro, and we make the comma in math mode active:

∗was@VR-Web.de

1 ⟨∗package⟩

 2 \AtBeginDocument{%
 3 \mathchardef\mathcomma\mathcode`\,%
 4 \mathcode`\,="8000 %
 5 }

The active comma checks the next input character. If this is a space , the active comma simply returns the saved \mathcomma; otherwise, \mathord\mathcomma is returned, so that no space will be added:

 6 {\catcode`,=\active
 7 \gdef,{\futurelet\@let@token\sm@rtcomma}
 8 }
 9 \def\sm@rtcomma{%
10 \ifx\@let@token\@sptoken \else
11 \ifx\@let@token\space \else
12  \mathord\fi\fi \mathcomma}

13 ⟨/package⟩

The next line of code prevents DocStrip from adding the character table to the generated package:

14 \endinput

Credits

Special thanks to Bernd Raichle for fixing the deficiencies of version 1.

References

[1] Richard Hirsch. Dezimalkomma beim TEXsatz in deutsch. Die TEXnische Komödie 1/1994 (July 1994), 42–45.

[2] Peter Schmitt. Dezimalkomma beim TEXsatz in deutsch. Die TEXnische Komödie 4/1997 (Feb. 1998), 50.