我在 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{...}
thebibliography
reftex-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
应该可以正常工作而不会出现任何问题。