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

时间:2014-08-07 13:09:43

标签: emacs auctex

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

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

1 个答案:

答案 0 :(得分:0)

我在http://lists.gnu.org/archive/html/help-gnu-emacs/2009-08/msg00200.html找到了问题的解决方案。代码几乎按预期工作。但缺点是,人们无法从例如英语转换为英语。俄语以外的数学分隔符。

此功能完成工作:在英语和您当前的输入法之间切换。

(defun LaTeX-dynamic-input-method-toggle-maybe ()
  (when (or (and current-input-method
             (texmathp))
        (and (not current-input-method)
             (not (texmathp))))
    (toggle-input-method)))

"定义次要模式,因此这种行为可以很方便 启用/禁用。次要模式将上述功能放在上面 `post-command-hook',以便调用上面的函数 每当你做某事时(例如移动点)。"

(define-minor-mode LaTeX-dynamic-input-method
  "Dynamically disable input-method in math-mode."
   nil nil nil
  (if LaTeX-dynamic-input-method
      (add-hook 'post-command-hook 'LaTeX-dynamic-input-method-toggle-maybe nil t)
    (remove-hook 'post-command-hook 'LaTeX-dynamic-input-method-toggle-maybe t)))

在LaTeX模式下启用模式。

(add-hook 'LaTeX-mode-hook 'LaTeX-dynamic-input-method)