在 reftex 中,\cite 前自动出现波浪符号 (~)

在 reftex 中,\cite 前自动出现波浪符号 (~)

这个问题和另一个帖子,我想C-c [插入~\cite而不是仅仅插入\cite。但是,其中给出的解决方案如下

(setq reftex-cite-format
  '((?\C-m . "~\\cite{%l}")
    (?t    . "\\cite{%l}")))

不知怎的,对我来说不起作用。

我尝试了邮件列表中的建议这里

(setq reftex-format-cite-function 
  '(lambda (key fmt)
     (let ((cite (replace-regexp-in-string "%l" key fmt)))
       (if (or (= ?~ (string-to-char fmt))
               (member (preceding-char) '(?\ ?\t ?\n ?~)))
           cite
         (concat "~" cite)))))

这对我来说确实有效,除了以下复杂情况,即当我已经有类似的东西时~\cite[xxx],我想插入另一个引文,比如yyy。假设光标放置在中~\cite[xxx(cursor here)],如果yyy使用插入C-c [,那么我会得到~\cite[xxx,~yyy],这肯定不能正确编译。

有什么办法可以实现在第一次调用时插入 ~C-c [并在第二次及以后的调用中省略 ~ 吗?非常感谢!


更新

恭喜我Tumbleweed通过这篇文章获得徽章!(╯‵□′)╯︵┻━┻

我尝试了以下调整邮件列表答案

(setq reftex-format-cite-function 
  '(lambda (key fmt)
     (let ((cite (replace-regexp-in-string "%l" key fmt)))
       (if (or (= ?~ (string-to-char fmt))
               (member (preceding-char) '(?\ ?\t ?\n ?~ ?{ ?,))
               (member (following-char) '(?} ))
     )
           cite
         (concat "~" cite)))))

到目前为止效果很好。看来考虑更多前面的字符并包括后面的字符会有所帮助。

相关内容