使用 AUCTeX 禁用 Emacs 中数学公式的输入法

使用 AUCTeX 禁用 Emacs 中数学公式的输入法

我正在使用 Emacs 24.3.1 和 AUCTeX 11.87 用俄语输入数学文档。我正在使用russian-computer输入法输入俄语。在数学分隔符内禁用此输入法会非常方便,例如,\( \)这样在公式中我会自动切换到输入英语而无需按Ctrl- \。例如,我可以输入“Рассмотрим формулу \(\)”(“考虑公式 \(\)”),将点放在括号之间并开始输入\forall。目前,我会输入\ащкфдд,但我希望 Emacs 能够识别出我在公式中并关闭俄语输入法。

我怀疑这可以使用 AUCTeX 来完成post-self-insert-hooktexmathp但我不确定这是否是最优雅的方法。

这个问题是在堆栈溢出,但那里建议我也在这里询问。

答案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))

相关内容