将数学区域中经常使用的 Tex-Literals ($ 和 $$) 替换为 \( 或 \) 和 \

将数学区域中经常使用的 Tex-Literals ($ 和 $$) 替换为 \( 或 \) 和 \

是否有编辑器或 IDE(或脚本)用于替换 TeX 命令$并将$$数学区域打开和关闭到相应的 LaTeX 命令\(\)\[\]
我确信有一个工具 - 我正在寻找。我认为这将产生更易读的代码。简单的搜索和替换不会做到这一点 - 但使用正则表达式,这应该不是问题。我只是不想再发明轮子了。

答案1

尽管我喜欢安德鲁的回答,因为该脚本显然处理的内容比(我调用的)旧的好一些sed,但我会添加我的评论作为答案。

sed -r 's/\$\$([^\$]+)\$\$/\\[\1\\]/g' | sed -r 's/\$([^\$]+)\$/\\(\1\\)/g'

$$...$$基本上,它首先用 替换每个出现的\[...\],然后用 替换每个出现的$...$\(...\)正如 Seamus 指出的那样,当您使用替代数学模式构造时,它会中断,并且正如 OP 指出的那样,$评论中的不平衡 也会中断它。处理诸如此类的事情\text将极其困难。我认为您几乎必须实现一半的 TeX 编译器才能涵盖这些情况。

答案2

搜索让我本网站我发现:

DeBuck - 从 LaTeX 文档中删除美元符号

\( ... \)这是一个 Perl 脚本,它用或替换 LaTeX 文档中的美元符号\[ ... \]。只要没有隐藏的宏,并且 LaTeX 文件正确,它就能完成一项合理的工作。

我还在一个晦涩难懂的在此网站上回答

答案3

如果你的编辑器有很好的正则表达式支持,那么你可以很容易地用它来替换$...$\(...\)$$...$$)/

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

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

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

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

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

该组合+?会执行您通常期望的操作+(即匹配前一个字符的一个或多个实例),但会将?行为从贪婪修改为惰性。不同之处在于贪婪方法将找到最长的匹配字符串,而惰性方法将匹配最小的字符串。下面这个例子可能最清楚:

Input string:       | Greedy match:       | Lazy match:
$lorem$ipsum$dolor$ | $lorem$ipsum$dolor$ | $lorem$, $dolor$

如果您的编辑器支持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

答案4

迈克尔·夏普开发了一个python名为“dedollar”的脚本。包含该脚本、Apple Script 和文档的存档可在以下位置找到:

https://mjsharpe.github.io/tex-software/Files/dedollar.zip

据作者介绍,该软件的版本为 1.0,发布于低功率激光功率放大器

引用手册:

这是一个python脚本,其目的是将.tex使用$..$内联数学和$$..$$显示数学的文件转换为相应的形式\(..\)\[..\]很可能有更强大的程序可以做到这一点,但我找不到。

一些注意事项:

  • 没有任何程序能够处理任意.tex文件——有太多巧妙的技巧(和聪明的人)让它无法预料。
  • 此程序处理逐字设置verbverbatim和。添加其他此类Verbatim环境lstlisting并不困难。
  • 假设环境verbatimVerbatimlstlisting不在它们开始的同一行上结束,并且在任何一行上只有一个这样的环境开始。
  • 它唯一能理解的注释是那些跟在未转义的 后面的注释%。其他注释环境(如 comment 和 原语)则不会被处理,如果它们包含的内容扰乱了或 的\iffalse..\fi奇偶校验,则会导致问题。$$$
  • 该程序尚不适用于除 8 位 ascii 扩展之外的编码。

注意:$用于计算图片坐标的 (感谢calc库)TikZ不应被 替换\(...\)。但是,本页提供的所有解决方案都弄乱了以下示例:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
  \draw (0, 0) node (y1) {$\bullet$};
  \draw [->] (y1) to ($(y1)-(3, 0)$);
\end{tikzpicture}
\end{document}

这可能说明了夏普的观点,即

没有任何程序能够处理任意.tex文件——有太多巧妙的技巧(和聪明的人)让它无法预料。

相关内容