我有一个软件可以写数学表达式,让我在教学时打字速度更快。这个软件有一个 LaTeX 翻译工具,运行良好,但它可以随意添加括号。
regexp
为了纠正一些问题,我一直在使用 TeXstudio 的替换工具和正则表达式 ( ),最近我发现了如何删除表达式中的多余括号。所以我可以转换{{any}}
成{any}
。
我想要一个 TeXstudio 宏来执行所有替换,但是在为查找和替换语法的宏版本编写正确的代码时遇到了一些困难。
以下链接尽可能地帮助我创建宏。
- 如何在 TexStudio 中插入正则表达式的子匹配
- TeXstudio 宏中的正则表达式替换损坏
- TexStudio,如何搜索正则表达式到下一个}-括号
- https://www.w3schools.com/jsref/jsref_obj_regexp.asp
下图显示了有效的查找/替换语法和我尝试但没有成功的宏版本。
Find 语法{{([^\{\}]+)}}
也适用于{{([^\{\}]*)}}
。
我不知道\1
当“替换”中使用的“”部分进入宏时我该怎么做。
查找和替换执行的操作按预期工作。
但是当应用宏时,我得到了null
结果。我显然不知道正确的语法来正确地进行替换。
接下来是一个 MWE,这个 MWE 不需要执行。
\begin{equation}
{{1}} \frac{{a}}{{b}} \dfrac{{num}}{{den}}
{{a + b}}^{{c + d}}
{{m + n}
}
\end{equation}
我想要创建的脚本是:
%SCRIPT
options = "g"
scope = editor.document().cursor(0, 0, -1)
editor.replace(/\{\{[^\{\}]*\}\}/g,
options,scope,
/\{\\1\}/)
我也试过
editor.replace(/\{\{[^\{\}]*\}\}/g,
options,scope,
"{\\1}")
并且还有一些变化,例如/\{$1\}/
没有成功。
编辑
Find 语法中的正则表达式/\{\{[^\{\}]+\}\}/
(或*
代替+
)似乎工作正常,它会找到每个双括号。使用带有固定字符串的替换语法(例如)可以"{A}"
进行正确的替换,如下图所示。
答案1
我在 TeXstudio GitHub 的论坛上问了同样的问题:https://github.com/texstudio-org/texstudio/discussions/1884。
我重现了解决方案并在下面展示结果。
基本上,搜索语法中必须有括号(我漏掉了它们),并且不应该有范围可选参数。替换参数必须是替换数字前带有双反斜杠的字符串,即。"{\\1}"
因此,删除多余括号的宏是:
%SCRIPT
editor.replace(/{{([^\{\}]*)}}/, "g", "{\\1}")
下面的 gif 显示了结果。