WinEdt 中的活动字符串冲突

WinEdt 中的活动字符串冲突

我正在使用 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

在该文件中,然后重新加载脚本。

相关内容