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