我正在使用 Emacs 24.3.1 和 AUCTeX 11.87 用俄语输入数学文档。我正在使用russian-computer
输入法输入俄语。在数学分隔符内禁用此输入法会非常方便,例如,\( \)
这样在公式中我会自动切换到输入英语而无需按Ctrl- \。例如,我可以输入“Рассмотрим формулу \(\)”(“考虑公式 \(\)”),将点放在括号之间并开始输入\forall
。目前,我会输入\ащкфдд
,但我希望 Emacs 能够识别出我在公式中并关闭俄语输入法。
我怀疑这可以使用 AUCTeX 来完成post-self-insert-hook
,texmathp
但我不确定这是否是最优雅的方法。
这个问题是在堆栈溢出,但那里建议我也在这里询问。
答案1
相同的问题已发布到emacs.SE:
根据Emacs Lisp 手册overriding-local-map
如果设置了,每个输入法都应禁用按键翻译和转换。
我们应该能够依靠这一点来有条件quail
地禁用。
在 Emacs 24.4 及更高版本(使用新的建议机制)中,将其添加到您的初始化文件中:
(advice-add 'quail-input-method :around
(lambda (orig key)
"Disable quail-input-method in TeX and LaTeX formulas. Uses AUCTeX."
(if (and (eq major-mode 'latex-mode)
(fboundp 'texmathp)
(texmathp))
(let ((overriding-local-map t))
(funcall orig key))
(funcall orig key))))
请注意,我检查了当前主模式是否为latex-mode
;您可能需要进行调整。(我们必须检查主模式,因为一旦 AUCTeX 加载,texmathp
它就会绑定到所有缓冲区中,我们不想因为当前缓冲区中有美元符号而弄乱输入法。)
在旧版本 Emacs 中(在 Emacs 23.4.1 下测试)我们必须使用defadvice
:
(defadvice quail-input-method (around disable-quail-in-formulas activate)
"Disable quail-input-method in TeX and LaTeX formulas. Uses AUCTeX."
(if (and (eq major-mode 'latex-mode)
(fboundp 'texmathp)
(texmathp))
(let ((overriding-local-map t))
ad-do-it)
ad-do-it))