选择以 $ 开头并以 $ 结尾的字符串

选择以 $ 开头并以 $ 结尾的字符串

我使用的 LaTeX 编辑器 TeXStudio 允许自定义脚本宏。我对 JAVASCRIPT 没什么经验,但我读过以下文章后,确实写了一个脚本:TeXstudio:用户手册为我提供 JAVASCRIPT 命令列表。

我的示例(原始)脚本仅使用用户手册中的命令

%SCRIPT
txt = cursor.selectedText()
editor.write("{")
ln = cursor.lineNumber()
cn = cursor.columnNumber()
editor.write(txt+"}")
cursor.moveTo(ln,cn);
cursor.movePosition(1,cursorEnums.Left)

上述脚本假定光标选择了某个字符串。然后,它用“{”“}”将其括起来,并将光标留在所需位置。

我对类似(逆)脚本感兴趣,其中光标位于 $ $ 之间,并且能够选择 $ 和 $ 之间的所有内容。

就像 Ctrl+W 选择整个单词一样,我想创建一个脚本(将映射到某些快捷方式),选择 $ 和 $ 之间的整个数学环境。

答案1

此脚本假设(i) 你的光标已经位于数学环境内$..$,并且 (ii) 整个$...$内容位于一行内(这个条件可以放宽,但我认为会使代码更脆弱)。

笔记:它失败(不检查)以下情况:

There are $x$ apples| and $y$ oranges.

光标停留在 上的位置|,结果被apples and选中。这可以改进,但需要多做一些工作。上次我检查时,没有“检查光标是否在数学环境中”的功能。因此,可能需要$从行首开始计数 的数量,检查计数是偶数还是奇数等等。(但即使这样也并非万无一失。。)


%SCRIPT

// grab the line the cursor is on
var ln = cursor.lineNumber();
var tl = editor.text(ln);

// get text before and after cursor
var beforeText = tl.substr(0, cursor.columnNumber());
var afterText = tl.substr(cursor.columnNumber(), tl.length);

// search for last $ before cursor, and first $ after cursor
var op = beforeText.lastIndexOf('\$');
var cl = afterText.indexOf('\$');
if (op>=0 && cl>=0){
    // match found, select everything between the $$
    cursor.selectColumns(op+1, cl+cursor.columnNumber())
}

在 gif 中,当我让光标停留一会儿时,我正在使用默认的Shift+激活宏。F1

在此处输入图片描述

测试用例:

% Test 1: Standard test
There are $x$ apples and $y$ oranges.
A longer expression might be $ \alpha + \beta = \gamma $

% Test 2: $$ across lines (fails) -- condition can be relaxed
$
x + y = \sqrt{2}
$   

相关内容