我正在尝试使RefTeX的Tab补全功能有效。当键入C-c [并选择引用类型时,我会在迷你缓冲区中出现提示。当我知道我想输入的围兜 key 的开头时,例如Campbell2006,我想输入Camp Tab并获取Campbell2006 [唯一的完成]。

我已经设法为某些文档设置了它,但是我不完全理解为什么它对它们有用,而对其他文件不起作用。我注意到,对于具有正确Tab>补全的文档,将以下行添加到name_of_tex_file.el子文件夹中创建的auto文件中:

(TeX-add-style-hook "name_of_tex_file"
(lambda ()
(LaTeX-add-bibliographies
"absolute_path_to_bib")))

我想我通过在文件末尾添加%%% reftex-default-bibliography: absolute_path_to_bib来获得此结果,但这有点麻烦,尤其是在多台计算机上编辑同一文件时。

请注意,RefTeX之所以有效,是因为当我键入C-c [Camp Ret时,我得到了Campbell2006条目的列表(有时有点奇怪)。

我试图设置%BIBINPUTS%环境变量没有成功。
似乎需要添加(setq reftex-bibpath-environment-variables '("c:/path_to_bib_file/"))才能使C-c [Camp Ret方法生效。
它具有与在文件末尾添加%%% reftex-default-bibliography:相同的缺陷,并且没有提供Tab补全。

我在指定文件时尝试了///\\\的各种组合作为文件分隔符,但我不知道确切该使用哪个(我在Windows环境中使用emacs)。这个问题可能就这么简单,但是由于有很多尝试失败的参数,因此请确定问题出在哪里。

有什么逐步方法可以使RefTeX与书目(包括制表符补全)一起顺利工作?

编辑:
根据Reftex手册中有关reftex-citation命令的完成,可以完成:



但是,它并未提供有关如何使其工作的精确指导。

Kindahero建议设置围兜条目列表,并使用completing-read命令。这听起来很明智,但是我想自动生成此列表,并且似乎可行,因为它可以与我的某些文档一起使用。

最佳答案

reftex-citation的文档有点困惑。它保证完成对已知引文键的操作,但我相信“已知”是指此 session 之前使用的键,而不是相应引用书目中的所有键。您可以使用下面定义的LaTeX-add-all-bibitems-from-bibtex命令来加载书目中的所有键:

(defun get-bibtex-keys (file)
  (with-current-buffer (find-file-noselect file)
    (mapcar 'car (bibtex-parse-keys))))

(defun LaTeX-add-all-bibitems-from-bibtex ()
  (interactive)
  (mapc 'LaTeX-add-bibitems
        (apply 'append
               (mapcar 'get-bibtex-keys (reftex-get-bibfile-list)))))

欢迎使用适当的钩子(Hook)来自动实现此操作的建议。

关于emacs - 在emacs中设置RefTeX Tab补全,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9682592/

10-10 05:24