为了学习物理,我必须做各种实验报告。通常我只是使用 或 Mathematica 处理所有数据python
,gnuplot
然后将其复制到我的 TeX 文档中。不幸的是,所有这些应用程序都使用.
(点)作为小数分隔符。因为我在德国学习,所以德国标准规定我必须使用,
(逗号)作为小数分隔符。在大多数情况下,实验室的主管都会宽容,但其中一位主管告诉我要重做整个实验报告。现在我不想搜索所有 15 页来将所有点替换为逗号。我可以使用正则表达式但这仍然意味着编辑整个文件。
答案1
或许,仅仅改变数学代码.
而不是将活动项全局定义.
为逗号,这种做法的干扰性更小。
\mathcode`\.=\mathcode`\,
定义.
为,
(如在自我回答中)如果你想要 . 成为 mathord 所以它后面不会跟着一个细小的空格那么你可以使用
\DeclareMathSymbol{.}{\mathord}{letters}{"3B}
答案2
无论是否处于数学模式,我都会
- 对于任何数字文字,总是使用
\num
from ,siunitx
- 总是
.
在十进制文字中用作小数标记, - 但稍后在序言中设置全局设置来指定渲染输出的小数标记。
\documentclass{article}
\usepackage{siunitx}
\sisetup{
%output-decimal-marker={,}% just uncomment if you want to use comma as the decimal marker!
}
\begin{document}
$\num{3.14}$ is not the value of $\pi$, \num{2.718281828} is not the value of $e$.
\end{document}
这种机制使您的文档可移植!
答案3
诀窍
\mathcode`\.="8000
{\catcode`\.=\active
\gdef.{,}}
解释
但是这有什么用呢?我会试着解释一下上面的代码在做什么。如果我错了,请纠正我。
\mathcode`\.="8000
在数学模式下使逗号“活跃”,即每次编译器运行到逗号时,都会执行代码而不是排版逗号。{\catcode`\.=\active \gdef.{,}}
是在开始时执行的代码,其中\catcode`\.=\active
使.
活跃,然后定义\gdef.{,}
哪个用 替换.
。,
就是这样!
请记住,现在.
数学模式中的 EVERY 都被替换为,
。我提供的代码并不关心.
您编写的 是否是句号的小数分隔符。如果您想输入句号,请考虑使用\text{.}
,或者自己定义一个宏。