您可能知道,在欧洲大陆的大部分地区,小数点是逗号而不是点。我正在写一篇非常巨大的文档,我想从一个点轻松地在它们之间切换,例如
\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={,}
。默认的组分隔符是一个细空格。