如何将 $...$ 转换为 \(...\)

如何将 $...$ 转换为 \(...\)

因此根据 为什么 \[ ... \] 比 $$ ... $$ 更可取?对于数学模式来说,\( 和 \) 是否比美元符号更可取? 我应该使用\(...\)而不是$...$\[...\]而不是 $$...$$

但是,如果我的文档中已经多次使用了美元符号,该怎么办?我该如何转换它们?简单的查找和替换不起作用,因为:

  1. 它不关心 $$ 是开始还是结束;并且
  2. 我在文中使用美元符号(指代货币)。

有人对此有好的建议吗?

答案1

这在很大程度上取决于您使用的编辑器及其提供的功能,因此我怀疑不会有一个答案;但是,如果您的编辑器具有良好的正则表达式支持,那么这应该非常容易。

以下是如何匹配$...$

/\s\$(.|\n)+?\$/g

类似地,匹配$$...$$

/\s\$\$(.|\n)+?\$\$/g

这将无法匹配美元符号,因为它们必须用转义符转义,\$而上述模式要求美元符号前有任何空白字符(空格、制表符或换行符)。您可以看到一个很好的可视化效果这里这里分别。

如果您的编辑器支持sPerl 的标志,那么您可以简化(.|\n)+?.+?就像.匹配新行一样。

最后,将其与替换结合起来,你会得到:

s/(\s)\$(.+?)\$/\1\(\2\)/sg

请注意,我没有转义某些字符,因为这将取决于正则表达式的特定实现。特别是,组括号可能需要\(...\),并且替换中的+?反斜杠可能也需要转义,具体取决于您使用的正则表达式实现。

如果您在命令行中并且有 Perl,那么以下两个命令应该可以解决问题:

perl -077pi.bak -e 's/(\s)\$\$(.+?)\$\$/\1\\[\2\\]/sg' document.tex
perl -077pi.bak -e 's/(\s)\$(.+?)\$/\1\\(\2\\)/sg' document.tex

请注意,这将不是匹配文件最开始的任何内容;不过,我认为这不会是一个大问题,因为文件的开头通常是一个注释,或者至少是\documentclass

答案2

单一$是可以的,并且支持内联数学的语法,甚至$$对于显示数学也大多没问题。它们的样式不好,但大多数时候(如果您不使用fleqn),它们会给出与相同的输出,因此\[..\]您可以在编辑公式时将其更改$$\[作为常规编辑的一部分,如果您对正则表达式替换没有信心,则无需对文档进行全局编辑,如果正则表达式错误,这可能会弊大于利。因此,请尝试继续使用,但不要因为文档中已有内容\[而失眠:-)$$

相关内容