在Emacs中设置RefTeX选项卡补全功能

8
我正在尝试让RefTeX与Tab自动补全功能配合使用。当我输入C-c [并选择所需引用类型时,会在minibuffer中出现提示。如果我知道要输入的bib key的开头,比如说Campbell2006,我想输入Camp Tab,然后得到唯一的完成结果Campbell2006。

我已经成功地在某些文档中设置了它,但我不明白为什么对于其他文档它无法正常工作。我注意到对于具有正确的Tab>自动补全的文档,以下行将添加到创建在auto子文件夹中的name_of_tex_file.el文件中:
(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 与参考文献平稳工作的逐步方法是什么,包括 Tab 完成?
编辑: 根据 Reftex 手册关于命令 reftex-citation 的条目,完成是可能的:

正则表达式使用扩展语法:&&' 被解释为 and。因此,aaaa&&bbb' 匹配同时包含 aaaa' 和bbb' 的条目。在输入正则表达式时,可以自动完成引用键。`=' 是匹配所有文件中所有条目的好正则表达式。

但它并没有提供如何使其工作的明确指导。
Kindahero 建议设置一个 bib 条目列表并使用 completing-read 命令。这听起来很合理,但我想自动生成此列表,因为它对我的某些文档有效。

只是一个提示。要能够使用TAB补全,您需要创建一个包含所有参考文献条目的列表,以便使用completing-read函数,默认情况下绑定到TAB键。 - kindahero
作为替代方案,您可以键入“=”,然后在选择缓冲区中搜索所需内容。 - xuhdev
对于有兴趣的人来说,https://user42.tuxfamily.org/ac-tex-ref/index.html 可能是一种替代方案。 - user17309340
1个回答

5

reftex-citation的文档有些令人困惑。它承诺对已知引用关键字进行自动补全,但我认为“已知”指的是在当前会话中之前使用过的关键字,而非适当参考书目中的所有关键字。您可以使用下面定义的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)))))

欢迎提出适当的钩子建议,以便自动实现此操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接