如何在数学模式中将点转换为逗号?

如何在数学模式中将点转换为逗号?

为了学习物理,我必须做各种实验报告。通常我只是使用 或 Mathematica 处理所有数据pythongnuplot然后将其复制到我的 TeX 文档中。不幸的是,所有这些应用程序都使用.(点)作为小数分隔符。因为我在德国学习,所以德国标准规定我必须使用,(逗号)作为小数分隔符。在大多数情况下,实验室的主管都会宽容,但其中一位主管告诉我要重做整个实验报告。现在我不想搜索所有 15 页来将所有点替换为逗号。我可以使用正则表达式但这仍然意味着编辑整个文件。

答案1

或许,仅仅改变数学代码.而不是将活动项全局定义.为逗号,这种做法的干扰性更小。

\mathcode`\.=\mathcode`\,

定义.,(如在自我回答中)如果你想要 . 成为 mathord 所以它后面不会跟着一个细小的空格那么你可以使用

\DeclareMathSymbol{.}{\mathord}{letters}{"3B}

答案2

无论是否处于数学模式,我都会

  • 对于任何数字文字,总是使用\numfrom ,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{.},或者自己定义一个宏。

相关内容