如何在 TexStudio 中使用宏用环境替换命令?

如何在 TexStudio 中使用宏用环境替换命令?

我的文档有很多命令,例如

\solution{
...
}

现在,我想用以下命令替换所有这些命令

\begin{solution}
...
\end{solution}

有没有办法用宏来做到这一点?

答案1

正则表达式本身就是一门艺术。不幸的是,有些编辑器在使用它们时会遇到问题。例如,TeXstudio 在处理多行搜索时会遇到一些困难,如这个答案。我花了一些时间来认识并了解这个限制。

因此,我将提出三种解决方案。

第一个解决方案

使用https://regexr.com/

这个网站对测试正则表达式很有帮助,比 TeXstudio 好一点。将文本复制到其中Text,插入搜索和替换语法,然后复制结果。

您正在寻找的语法是:\\solution\{((.|\n)+?)\},并且替换语法是:\begin{solution}$1\end{solution}

基础文本和结果如下所示

\solution{
  ABC
  BCD
  CDE
}

\solution{
  D
  E 
}

\solution{
  F
}

在此处输入图片描述

警告:我不知道这个语法是否适用于任何事物在您的宏中。我将其设置为在找到时停止}

第二种解决方案

用 进行搜索F3,用 进行替换F4

第一步是Shortcuts在 TeXstudio 中进行一些配置。我建议将、和F4组合起来。这样您就可以尽可能快地搜索和替换 ,而无需替换不需要的文本。ReplaceShift+F4Replace PrevCtrl+Shift+F4Replace AllF3F4

在此处输入图片描述

在此解决方案中,您将进行两组搜索。首先,\solution{搜索\begin{solution}。此替换可能可以使用Ctrl+Shift+F4

在此处输入图片描述

第二组是寻找}并替换。这显然是此解决方案的主要缺点。如果不实际搜索行并记录,则\end{solution}很难找到}与之前的完全匹配的单个。\solution{打开关闭一路走来。因此,F3F4技巧让你自动进行搜索并手动替换。

在此处输入图片描述

在此处输入图片描述

编辑:如果先搜索并替换,}然后\solution{

第三种解决方案

好吧,这可能不是一个优雅的解决方案,但让我们欺骗利用我们已有的工具

假设}你的文件中只有关闭你的\solution{,在这种情况下欺骗是先替换它们,然后再替换\solution{。对于混合了许多内容的文件,这可能不是一个好的解决方案,但它是如何regex通过将问题拆分成小块来避免复杂语法的一个很好的例子。

既然你要求 TeXstudio 宏,我们就使用它吧。语法是

%SCRIPT
editor.replace(/\}/,"g","\\end{solution}")
editor.replace(/\\solution\{/,"g","\\begin{solution}")

其中%SCRIPT是必需的,并且/.../用于regex表达,尽管在我们的例子中并非绝对必要。还要注意 double,\\因为我们需要一个\用于LaTeX命令,第一个是为了识别第二个。

在此处输入图片描述

,它就像一个魔咒,一个廉价而欺骗性的魔咒,但却是一个魔咒。

结论

瞄准第一个解决方案,学习如何使用第二个解决方案来处理特殊情况,将第三个解决方案放在口袋中以备不时之需。

答案2

在 TeXStudio 中,使用正则表达式替换选项由于某种原因不支持新行匹配。

因此我想出了一个技巧,将文档中的所有文本作为字符串抓取,然后对其应用正则表达式,这样新行也会匹配。

这是一个可以解决您的问题的宏。请注意,它也支持任何嵌套的花括号。

%SCRIPT
regexParsed = editor.text().replace(/\\solution{([^}{]*({.*})*[^}{]*)}/gm, '\\begin{solution}$1\\end{solution}').replace(/\r/g, '');
editor.setText(regexParsed)

在此处输入图片描述

相关内容