我使用的 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}
$