如何限制 TexStudio 宏脚本仅在文本/正常模式下工作?

如何限制 TexStudio 宏脚本仅在文本/正常模式下工作?

我知道您可以(?highlighted-as:numbers,math-delimiter,math-keyword)在触发器之前编写,而 TexStudio 将仅在数学模式下执行宏。我已经在“脚本类型”和“普通类型”中测试过,并且它按预期正常工作。我忘记在哪里读到过(?highlighted-as:normal)在普通/文本模式类型中以类似的方式工作,即如果在触发器之前编写,它将限制/限制宏的范围为仅普通/文本模式。我试图在脚本中实现这一点,但它不起作用。它基本上在数学和普通/文本模式下运行 Javascript,这不是我想要的。

我一直在尝试做的事情的例子:

Name: foobar replacement
Trigger (?highlighted-as:normal) foo 
type: script
%SCRIPT
replace = {' foo ':' bar '}
trigger=triggerMatches
if (trigger in replace) {trigger=replace[trigger]}
editor.write(trigger)

此脚本将在数学和正常模式下运行。我需要它仅在文本/正常模式下运行。我做错了什么?当然,我可以不使用脚本类型,只使用正常类型进行每次替换,但逐个为每个替换编写宏将非常繁琐。有没有办法告诉 TexStudio 仅在正常模式下执行此脚本?或者有没有办法在编写脚本时获取当前模式(无论是数学/正常文本,真/假?),然后编写 IF 语句以在一种模式下执行一组特定的命令,在另一种模式下执行一组不同的命令?

如果这些问题对你们中的某些人来说很简单或“基础”,我很抱歉。我是 LaTeX 和 TexStudio 的新手,我只是想在 TexStudio 中编写一些脚本,让我的生活更轻松一些,目前没有打算像专业人士一样深入研究 LaTeX 并使用\ifmmode等等。非常感谢!

答案1

我还没有找到一种“直接”的方式来做到这一点,但我找到了一种使用 RegEx 完成此类任务的方法。好消息是 TexStudio 在其“触发器”中使用 javascript 正则表达式,这允许我构建一个触发器,该触发器只能在满足我的 RegEx 条件时执行。一个实际的例子是,我希望在常规“文本”模式下将双倍空格“ ”解释为行尾,因此输入“ ”并将光标移动到下一行,而我希望在 LaTeX 枚举环境中将. \\相同的双倍空格“ ”解释为“ ”,然后将光标移动到“ ”括号内的下一行。 这是我在 TexStudio 中执行的操作: 宏用于环境中的新项目如果行以 名称开头:next itm 触发器: 类型:普通 LaTeX 内容description\\\item[]


description\item

(?<=^\\item.* )


\\
\item[%|]

如果行“不”以“ \item”开头(即它是常规文本),则使用换行符
宏 名称:换行符
触发器:(?<=^[^\\item].* )
类型:普通
LaTeX 内容请注意,如果您想让触发器只是空格键上的双制表符,则
. \\
%|

“ ”后面的双空格非常重要。如果您不想将其用作枚举环境,则可能需要删除括号。限制:您需要明确排除所有使用双空格触发器来表示换行符以外的其他含义的情况。请随时纠正我或这个答案。我绝不是像你们中的一些人一样的“专家”。如果有人想让我解释我在这里使用的正则表达式触发器,我很乐意解释。.*\item[%|]\item %|description

相关内容