TeXstudio:脚本可以读取其触发器吗?

TeXstudio:脚本可以读取其触发器吗?

我想编写一个带有触发器的宏#[a-z],该宏根据触发器中的字符写出相应的希腊字母。也就是说,触发器#a应该产生\alpha,触发器#b应该在编辑器中给出\beta,等等。

问题在于触发器在编写后立即被删除,因此脚本不知道是否使用了ab或其他字母。当然,我可以为每个希腊字母编写特定的宏,但这会轻易耗尽 40 个宏的限制(如果还使用大写字母)。我知道我可以将宏放在前十个宏下并使用快捷键Shift+F1或类似的东西,但这不太直观。

有人知道访问触发字母的方法吗?

编辑:我现在使用一种变通方法。如果将触发器和字母的顺序颠倒过来,问题就会消失。#a触发器现在通用为 ,而不是 。#书写a#将删除#并保留 ,a然后可以在脚本中使用它将其转换为\alpha。但是,这有点限制了我的打字风格,所以我仍然想知道问题的答案。

答案1

有一个全局变量triggerMatches。它是匹配你定义为触发器的正则表达式的结果。

triggerMatches是一个数组。它的第零个组件是与完整正则表达式的匹配。以下元素是与组的匹配(如果已定义组)。

例子:

触发器:#([az])

键入:#a

triggerMatches[0] == '#a'
triggerMatches[1] == 'a'

答案2

我想我可能会将经过测试的脚本包含在内,以便其他人可能会觉得它有用。我决定使用,triggerMatches[0]以便脚本也适用于未分组的触发器:

%SCRIPT
var strTrigger = 'abg';
var greek = new Array();
greek[0]  = 'alpha';
greek[1]  = 'beta';
greek[2]  = 'gamma';
idx = triggerMatches[0];
var pos = strTrigger.search(idx.slice(idx.length-1,idx.length));
if (pos != -1) {
  editor.write('\\ensuremath{\\'+greek[pos]+'}')};

当然,数组和字符串可以扩展以包含其他希腊字母。

答案3

这是我根据 Wolf 的回答得出的完整希腊宏。

触发器:`([Az])

%SCRIPT
var strTrigger = 'abgdezhqiklmnyprstfxwoABGDQLYWO';
var greek = new Array();
greek[0]  = 'alpha';greek[1]  = 'beta';greek[2]  = 'gamma';
greek[3]  = 'delta';greek[4]  = 'varepsilon';greek[5]  = 'zeta';
greek[6]  = 'eta';greek[7]  = 'theta';greek[8]  = 'iota';
greek[9]  = 'varkappa';greek[10]  = 'lambda';greek[11]  = 'mu';
greek[12]  = 'nu';greek[13]  = 'xi';greek[14]  = 'pi';
greek[15]  = 'rho';greek[16]  = 'sigma';greek[17]  = 'tau';
greek[18]  = 'phi';greek[19]  = 'chi';greek[20]  = 'psi';
greek[21]  = 'omega';greek[22]  = 'Alpha';greek[23]  = 'Beta';
greek[24]  = 'Gamma';greek[25]  = 'Delta';greek[26]  = 'Theta';
greek[27]  = 'Lambda';greek[28]  = 'Xi';greek[29]  = 'Psi';
greek[30]  = 'Omega';
idx = triggerMatches[0];
var pos = strTrigger.search(idx.slice(idx.length-1,idx.length));
if (pos != -1) {
editor.write('\\'+greek[pos])};

相关内容