[求助] emacs-rime 在 org 中输入 latex 自动切换英文有问题

使用了 rime-predicate-org-latex-mode-p ,行内公式自动切换为英文正常,行间公式要先输入第一个中文词后才会自动切换。输入中文的效果像下面这样

\begin{equation}
 输入yicivswfhbclhvzidsqxhr 
\end{equation}

emacs中rime的配置文件如下

(use-package rime
    :custom
    (default-input-method "rime")
    :config
    ;; rime-disable-predicates 是编辑代码时自动切换中英文的配置:如果在代码中,只有在注释和字符串里才可以输入中文。在别的场景中如 markdown,输入字母为大写或当前的中文字符之后有空格会自动切换为英文模式。此外,在一行的开头和以字母开头的英文字符串之后也会自动切换为英文模式
    (setq rime-disable-predicates 
          '(
            ;; rime-predicate-prog-in-code-p
            ;; rime-predicate-punctuation-line-begin-p
            ;; rime-predicate-space-after-cc-p
            ;; rime-predicate-current-uppercase-letter-p
            ;; rime-predicate-after-alphabet-char-p
            ;; rime-predicate-tex-math-or-command-p
            rime-predicate-org-latex-mode-p))
    (setq mode-line-mule-info '((:eval (rime-lighter))))
    (setq rime-show-candidate 'posframe)
    :bind
    ("M-j" . 'rime-inline-ascii) ;; 临时强制开启输入中文
    ("S-SPC"   . 'toggle-input-method)) ;; 按 Shift + 空格 切换到 rime

这是因为org-inside-latex-fragment-p 里面用 paragraph-start 跳转到段首来检测,

\begin{equation}
A
\end{equation}

这样A点就会被认为是段首。所以返回的是 nil

方案一:

参考 [O] [bug?] org-inside-latex-fragment-p broken?

方案二:

如果用 auctex 的话,可以用 (texmathp)

(defun +rime-predicate-org-latex-mode-p ()
  "If cursor is inside an org-mode's LaTeX fragment, macro or its arguments."
  (and (derived-mode-p  'org-mode)
       (or (texmathp)
           (org-inside-latex-macro-p))))
1 个赞

+rime-predicate-org-latex-mode-p 这个函数我试了下,似乎也不行啊。