AUCTeX+RefTeX 编译参考书目而无需明确提供 bib 文件路径

AUCTeX+RefTeX 编译参考书目而无需明确提供 bib 文件路径

我在 Emacs 25.1.1 中将 AUCTeX 与 RefTeX 一起使用。我的问题是如何让 AUCTeX 编译参考书目,而不必在每个文件中明确提供\bibliographystyle和。\bibliography

例如,我在 .emacs 中启用了以下选项

(require 'reftex)
(setq reftex-mode t)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t)
(setq reftex-default-bibliography '("/path-to/refLib.bib"))

正如我所料,当我执行C-c [RefTeX 时,它能够识别并插入引文。下面是一个简单的 LaTeX 文件示例,其中file1.tex包含来自 RefTeX 默认 bib 文件的一个引文。

\documentclass[12pt]{article}
\usepackage{hyperref}
\tolerance=1000
\usepackage[margin=1in]{geometry}
\usepackage{enumitem}
\setlist[enumerate,itemize]{noitemsep,nolistsep,leftmargin=*}
\date{}
\title{Testing Bib}
\hypersetup{
  pdfkeywords={},
  pdfsubject={},
  pdfcreator={Emacs 25.1.1 (Org mode 8.2.10)}}
\begin{document}

\maketitle
\section{Testing Bib Once}
\label{sec-1}
SCHEDULED \textit{<2017-03-31 Fri 11:03>}
\subsection{Modeling Updates}
\label{sec-1-1}
\begin{itemize}
This is a bibliography test \cite{hohenberg_inhomogeneous_1964}
\end{itemize}
% Emacs 25.1.1 (Org mode 8.2.10)
\end{document}

LaTeX 编译通过C-c C-c LaTeX。但是当我执行时,C-c C-c BibTeX它会抛出一个错误,如下所示

I found no \bibdata command---while reading file file1.aux
I found no \bibstyle command---while reading file file1.aux

当 AUCTeX+RefTeX 能够找到要插入的引用时,我不确定在没有明确指定 BiBTeX 文件的情况下编译时会出现什么问题。

答案1

RefTeX 手册说:

用户选项:reftex-默认书目

如果未指定,则应使用 BibTeX 数据库文件列表。当从既没有语句也没有环境reftex-citation的文档中调用时,RefTeX 将改为扫描这些文件。旨在用于 非 LaTeX 文件。将沿着 BIBINPUTS 或 TEXBIB 路径搜索文件。\bibliography{...}thebibliographyreftex-citation

我认为你滥用了这个变量,因为它是为非 LaTeX 文件设计的。你可以尝试使用文件局部变量在命令行中将信息传递给编译器,例如:

%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% TeX-command-extra-options: "do-something-in-document"
%%% End:

但我不确定这是否值得付出努力。

答案2

Emacs、AUCTeX 和 RefTeX 只是您使用的工具,用于准备 LaTeX 输入文件,然后通过 LaTeX(在您的情况下是 BibTeX)进行编译。Emacs/AUCTeX 建议您按正确的顺序使用正确的编译器。

请始终牢记,LaTeX 对 Emacs 及其魔法一无所知。尽管您的定义(setq reftex-default-bibliography '("/path-to/refLib.bib"))适用于 Emacs,但 LaTeX 无法猜测它应该使用哪个书目文件。而且,除非您在 tex 文件中定义它,否则 BibTeX 不知道要使用哪种书目样式。

你必须添加

\bibliographystyle{plain} % or any style you prefer

放入 LaTeX 输入文件的序言中,

\bibliography{/path-to/refLib}  % don't add the file name extension ".bib" here

进入文档部分(即输入文件的 \begin{document}和之间)。这是唯一的解决方案。\end{document}

/path-to/如果您的 TeXsystem 中已经定义了路径,那么也许您可以避免使用文件名的目录部分。在 TeXLive 上,您可以尝试kpsewhich bib refLib.bib。如果可以在标准路径中找到参考书目文件,kpsewhich将打印出可以找到该文件的完整路径。如果是这样,您不需要插入完整路径。只需输入参考书目文件的名称refLib就足够了。

另一方面:如果你将这两行添加到 LaTeX 输入文件中,Emacs 反过来应该检查该文件,因此应该自己知道参考书目文件,即使你没有通过键入在 .emacs 文件中定义它(setq reftex-default-bibliography '("/path-to/refLib.bib"))。通过 Emacs/AUCTeX 或 RefTeX 插入\cite应该可以正常工作而不会出现任何问题。

相关内容