Emacs,更改默认的reftex引文

时间:2010-09-02 13:32:39

标签: emacs latex

我想在使用reftex时修改emacs的行为,这样在按下'Cc ['并选择引用格式后,出现的默认正则表达式会给我一个我上次使用的引用(正常行为)是默认为光标前的单词,很少使用)。我经常连续多次引用相同的来源,特别是在单张纸上做笔记时,所以这是保存一些按键的好方法,这就是我们所有人都使用emacs,对吧:) p>

我知道一点点口齿不清,所以我希望我最终会找到一种方法来做到这一点,但我觉得值得四处询问是否有其他人先做过,没有意义。 - 发明轮子。 (如果你确实想要这个功能,但也不知道如何实现它,请告诉我,当我完成它时,我会给你发一封电子邮件。)

由于

2 个答案:

答案 0 :(得分:1)

加载reftex后重新加载reftex-get-bibkey-default(例如在你的AUCTeX模式挂钩中)应该这样做。最简单的是:

   (defun reftex-get-bibkey-default () (car reftex-cite-regexp-hist) )

然而,如果您的历史记录为空,这将破坏默认行为并且不会返回任何内容,在这种情况下保持reftex的“前一个单词点”行为然后使用历史记录,您可以通过这种方式重新定义它:

(defun reftex-get-bibkey-default () (if reftex-cite-regexp-hist
                                            (car reftex-cite-regexp-hist)
                                          (let* ((macro (reftex-what-macro 1)))
                                            (save-excursion
                                              (if (and macro (string-match "cite" (car macro)))
                                                  (goto-char (cdr macro)))
                                              (skip-chars-backward "^a-zA-Z0-9")
                                              (reftex-this-word)))
                                          )
    )

答案 1 :(得分:1)

(警告:这是我写的第一个超过3行的elisp代码,它可能是可怕的代码。但它似乎有效。但是对风格或最佳实践的任何评论都会受到最高的评价。 )

我已经解决了!只需将以下代码添加到.emacs,它的行为就像我希望的那样。如果您之前没有引用任何内容,则表现正常,否则默认引用是最后使用的。

(defvar reftex-last-citation nil)

(defadvice reftex-citation (after reftex-citation-and-remember-citation activate)
  "Save last citation to 'reftex-last-citation after running 'reftex-citation"
  (setq reftex-last-citation ad-return-value))

(defadvice reftex-get-bibkey-default (around reftex-just-return-last-citation activate)
  "If there is a 'reftex-last-citation then just return that instead of running 'reftex-get-bibkey-default"
  (if reftex-last-citation
      (setq ad-return-value reftex-last-citation)
    ad-do-it))

感谢Mortimer的帮助,没有你的起点,我从未到过这里!

(只是想知道,你的解决方案没有使用defadvice有什么理由吗?正如我上面暗示的那样,elisp对我来说都是新手,所以了解最好的做法是有用的的东西。)