Spacemacs插入cdlatex后latex模式无法补全圆括号,如何解决?

系统:macOS 10.15 emacs-mac 27.1,spacemacs最新版。 安装并调用cdlatex后,latex模式下输入圆括号(无法自动补全另一半,并且会报错:

Search failed: there is an unmatched expression somewhere or we are at the beginning/end of file.

相关代码:

dotspacemacs-configuration-layers
(
        (latex :variables
               latex-backend 'company-auctex
               latex-build-engine 'xetex
               latex-enable-magic t
               latex-enable-folding t)
)
dotspacemacs-additional-packages '(
                                  cdlatex
                                  )
(add-hook 'LaTeX-mode-hook 'turn-on-cdlatex)
(add-hook 'org-mode-hook 'turn-on-org-cdlatex)

org-mode下面一切正常。latex-mode则出现开头所描述的问题。截图如下:

我的smartparens相关配置全部默认,没有改动过。

尝试搜索解决方案,但相关讨论很少。有一个在很多地方都能看到的回答是:https://gitmemory.com/issue/cdominik/cdlatex/15/643754217 但经尝试无效。

请问有没有什么解决方案?

按照我之前用 Spacemacs 时的经验是建议不用 smartparens,改用 electric-pair-mode

试了一下。把smartparens放进excludedpackage里面,然后(electric-pair-mode t)。然而还是不会补全括号,只不过没有那一句报错信息了。而且smartparens的高亮功能我还挺喜欢的,不知道有没有办法兼顾一下。

问题已经解决。我参考了doom-emacs配置中如何避免此类问题的代码,在doom的latex layer里。注意doom里把各类函数都重新定义了,不能直接照抄,只是参考了一下思路。最后代码如下,供遇到同样问题的人参考:

(use-package cdlatex
    :hook (LaTeX-mode . cdlatex-mode)
    :hook (org-mode . org-cdlatex-mode)
    :config (define-key cdlatex-mode-map  "(" nil)
)

感谢所有的回复。

1 个赞

高亮功能应该是别的 packages 提供的,另外我记得 smarparens 和挺多 packages 冲突的,比如 hungry delete。

看了下当时配置就这两行:

(setq electric-pair-inhibit-predicate 'electric-pair-conservative-inhibit)
(electric-pair-mode t)

试了一下,确实可以,不过高亮功能就没了,应该可以有什么Highlight-paren之类的东西可以解决。也是一个可行的方案。

高亮括号应该是靠这两个插件呀?rainbow-delimiters 和 highlight-parentheses

很奇怪,我发现我昨天用你的代码可以匹配括号是因为我不小心把cdlatex给关了。开了之后又不行了(smartparens已经关掉了)。highlight-parentheses-mode是开启状态,但是没有效果。

抱歉,我很少用 tex,刚刚确认了下确实有这个问题,我有空看看。

update:

cdlatex 提供 PAIR INSERTION of (), [], {}, and $$,详见 README,可能把上述两个插件的功能覆盖了了。 可以看看这个变量:cdlatex-paired-parens