我正在使用 WinEdt 10.2。我设计了两个活动字符串,它们执行以下工作。
如果 ? 是单个大写字母,则一个活动字符串会自动将“\c?}”更改为“\mathcal{?}”,如果 ? 不是单个大写字母,则不执行任何操作。
如果 ? 是单个大写字母,则另一个活动字符串会自动将“\f?}”更改为“\mathfrak{?}”,如果 ? 不是单个大写字母,则不执行任何操作。
两个活动字符串都可以找到。但是有一天,我发现存在冲突。当我输入“\chi{\fA}”时,我期望的是“\chi{\mathfrak{A}”,但是活动字符串没有被激活,因为它与第一个字符串匹配,并且 \c 和 } 之间的字符串有多个字母。
有没有办法避免这种冲突?
(我避免冲突的想法是将活动字符串更改为“\c{?}”和“\f{?}”。我想知道是否仍然有使用原始活动字符串“\c?}”和“\f?}”的解决方案。)
我还注意到,对于 WinEdt 中的活动字符串,问号 ? 代表字符串,而不是单个字母。我想知道是否有代表单个字母的通配符。
我不知道如何告诉 WinEdt 在 \c 后面的字符串长度超过 1 时禁用活动字符串“\c?}”。
答案1
问: 我想知道是否有解决方案仍然使用原始活动字符串“\c?}”和“\f?}”
A。不,没有解决方案。正如您已经注意到的,当您输入“}”时,会触发第一个遇到的活动字符串,即“\c?}”。
请注意,定义这样的活动字符串非常不安全,因为它也会触发“\cite{someone}”之类的内容。“\c{?}”和“\f{?}”要安全得多。
问:我还注意到,对于 WinEdt 中的活动字符串,问号 ? 代表字符串,而不是单个字母。我想知道是否有代表单个字母的通配符。
A。不可以。“?”是活动字符串定义中唯一允许的通配符,代表“一切”。
如果您只想拦截一个大写字母,您应该调用这样的宏:
// -*- ASCII:EDT -*-
PushTagsandRegisters;
LetReg(0,"%?");
FindInString('%!0','<$Upper$~$~[]$',-11,-11,11);
IfOK('CharLeft;Backspace(2);Ins("mathcal{%!0");');
PopTagsandRegisters;
End;
在我看来,为了达到您的目的,最好使用“缩写”而不是“活动字符串”。
也就是说,Abbreviations.ini
在
SUB="END_LIST"
"etc" -> "et cetera"
"\beg" -> "\begin"
END_LIST
和
SUB="END_LIST"
"\cA}" -> "\mathcal{A}"
...
"\cZ}" -> "\mathcal{Z}"
"\fA}" -> "\mathfrak{A}"
...
"\fZ}" -> "\mathfrak{Z}"
END_LIST
其中的点表示必须对每个大写字母重复此操作。
请注意,你必须更改
ENABLED=0
到
ENABLED=1
在该文件中,然后重新加载脚本。