在逗号和点之间切换小数点

在逗号和点之间切换小数点

您可能知道,在欧洲大陆的大部分地区,小数点是逗号而不是点。我正在写一篇非常巨大的文档,我想从一个点轻松地在它们之间切换,例如

\newif\comma
\commatrue

\ifcomma{
???
}

\pi = 3???14

我知道所有小数点都应该用其他东西代替,但该怎么替换呢?我正在为最优雅问题的解决方案。

答案1

以下示例在数学模式下设置数字。这样可以轻松“重新定义”逗号或点,以产生点或逗号。

句法:

  • \num{...}接受带有点或逗号的数字并根据开关输出数字\ifnumcomma
  • 如果\numcommatrue处于活动状态,则\num输出逗号,如果处于活动\numcommafalse状态,则输出点。

该定义可用于纯 TeX 和 LaTeX。示例包含纯 TeX 的测试部分:

\mathchardef\NumMathCodeDot=\mathcode`\. %
\mathchardef\NumMathCodeComma=315 % \mathord, not \mathpunct

\newif\ifnumcomma

\def\num#1{%
  \leavevmode
  \begingroup
    \ifnumcomma
      \mathcode`\.=\NumMathCodeComma
      \mathcode`\,=\NumMathCodeComma
    \else
      \mathcode`\.=\NumMathCodeDot
      \mathcode`\,=\NumMathCodeDot
    \fi
    \ifmmode
      #1%
    \else
      \mathsurround=0pt %
      $#1$%
    \fi
  \endgroup
}

% Testing (plain TeX)

\numcommatrue
\num{3.14} + \num{1,23}

\numcommafalse
\num{3.14} + \num{1,23}

\bye

结果

评论:

  • 数字的字体取自数学模式。
  • 如果siunitx有,就使用它,因为它功能更强大,可配置性更强。然后\num可以留在代码中,但定义来自siunitx。并\num在那里配置。

答案2

TeX 中的十进制数可以用句点或逗号输入:

\hsize=10,5cm

被理解为

\hsize=10.5cm

但是,这是关于根据语法规则的要求传递给 TeX 的十进制数。印刷数字是另一回事,因为 TeX 会打印你决定的任何内容。

所以如果你定义

\def\PI{3.14159}

\PI并在文档中输入,TeX 将忠实地输出

3.14159

为了确保整个文档的一致性,您必须以不同的方式输入数字:

\newif\ifcomma % starts as false
\def\cp{% comma or period
  \ifcomma{,}\else.\fi
}
\def\PI{3\cp14159}

The number $\PI$ is an approximation to $\pi$.

\commatrue

The number $\PI$ is an approximation to $\pi$.

\bye

在此处输入图片描述

如果您使用 LaTeX,则有几个可用选项;最好的是使用siunitx及其\num命令,它将根据您选择的选项排版其参数。

答案3

使用 siunitx:

\documentclass{article}
\usepackage[output-decimal-marker={.}]{siunitx}
\begin{document}
you can even use comma \num{123,45} or dot \num{123.45}
\end{document}

只需更改{.}{,}。您可能还想group-separator={.}在使用 时使​​用output-decimal-marker={,}。默认的组分隔符是一个细空格。

相关内容