我在 MacOS 上使用最新的 Aquamacs(我想知道为什么所有这些与 emacs 相关的问题都发布在 tex.stackexchange.com 上而不是 emacs.stackexchange.com 上)。
我希望我已经正确配置了我的 Emacs。至少,这是相关的定义.emacs
:
(setq reftex-extra-bindings t)
(require 'reftex)
(add-hook 'LaTeX-mode-hook 'turn-on-reftex)
(setq reftex-plug-into-AUCTeX t)
(require 'bibtex)
(bibtex-set-dialect 'biblatex)
(setq LaTeX-biblatex-use-Biber t)
(setq TeX-command-BibTeX "Biber")
(setq reftex-bibliography-commands
'("bibliography" "nobibliography" "addbibresource"))
(setq reftex-bibpath-environment-variables
'(".:~/lib/texmf/bibtex/bib//:/usr/local/texlive/texmf-local/bibtex/bib//:/usr/local/texlive/2018/texmf-dist/bibtex/bib//"))
; (reftex-use-external-file-finders t)
(setq reftex-external-file-finders
'(("tex" . "kpsewhich -format=.tex %f")
("bib" . "kpsewhich -format=.bib %f")))
Emacs 毫无怨言地启动了。
接下来,我将这个 MWE(只是为了完整......)设置为文件test.tex
:
\documentclass{scrbook}
\usepackage[T1]{fontenc}
\usepackage[backend=biber,style=numeric]{biblatex}
\addbibresource{computer.bib}
\begin{document}
% Waiting to insert \cite{} here
\end{document}
\addbibresource{computer.bib}
我以通常的方式添加了该行: C-cRET addbi
TABRET。此时,通过按下TAB,Emacs 完成命令\addbibresource
并将此 LaTeX 命令插入缓冲区,而仍在 Minibuffer 中,系统会询问我选项。我RET再次按下 跳过了该问题。现在 Emacs 询问(仍在 minibuffer 中)要使用的参考书目文件。我输入com
TAB,然后 Emacs 再次完成完整文件名computer.bib
,我通过 插入了该文件名RET。
我怀疑,Emacs 知道它的存在~/lib/texmf/bibtex/bib/JB/computer.bib
,因此能够完成它的文件名,因为我定义了reftex-bibpath-environment-variables
(如上所示)。
Emacs 还被指示自动扫描 LaTeX 文件。因此,此时自动生成的文件auto/test.el
显示:
(TeX-add-style-hook
"test"
(lambda ()
(TeX-add-to-alist 'LaTeX-provided-package-options
'(("fontenc" "T1") ("biblatex" "backend=biber" "style=numeric")))
(add-to-list 'LaTeX-verbatim-environments-local "semiverbatim")
(add-to-list 'LaTeX-verbatim-environments-local "minted")
(add-to-list 'LaTeX-verbatim-environments-local "Verbatim")
(add-to-list 'LaTeX-verbatim-environments-local "Verbatim*")
(add-to-list 'LaTeX-verbatim-environments-local "BVerbatim")
(add-to-list 'LaTeX-verbatim-environments-local "BVerbatim*")
(add-to-list 'LaTeX-verbatim-environments-local "LVerbatim")
(add-to-list 'LaTeX-verbatim-environments-local "LVerbatim*")
(add-to-list 'LaTeX-verbatim-environments-local "SaveVerbatim")
(add-to-list 'LaTeX-verbatim-environments-local "VerbatimOut")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "hyperref")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "hyperimage")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "hyperbaseurl")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "nolinkurl")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "path")
(add-to-list 'LaTeX-verbatim-macros-with-braces-local "url")
(add-to-list 'LaTeX-verbatim-macros-with-delims-local "path")
(add-to-list 'LaTeX-verbatim-macros-with-delims-local "Verb")
(add-to-list 'LaTeX-verbatim-macros-with-delims-local "url")
(TeX-run-style-hooks
"latex2e"
"scrbook"
"scrbook10"
"fontenc"
"biblatex")
(LaTeX-add-bibliographies
"computer"))
:latex)
我很幸运,倒数第二个条目显示了正确的参考书目文件"computer"
。在终端/shell 中进行快速测试可得到
<funnyprompt>:~$ kpsewhich bib computer.bib
/Users/tmjb/Library/texmf/bibtex/bib/JB/computer.bib
<funnyprompt>:~$ grep texstudio `kpsewhich bib computer.bib`
@Online{texstudio,
url = {http://texstudio.sourceforge.net/manual/current/usermanual_en.html},
这应该证明该文件存在并且包含具有所需键“texstudio”的条目。
编辑:~/lib/
在我的例子中扩展为/Users/tmjb/Library/
。
接下来我将光标移到下方\begin{document}
并开始插入\cite
-命令(同样以通常的方式):(C-cc这对我来说是一种快捷方式,与 相同C-c[)。在迷你缓冲区中,RefTeX 要求我插入正则表达式。我插入texstudio
,我碰巧知道它存在于给定的参考书目文件中。按下 后,RETEmacs 发出抱怨Sorry, no matches found
。光标离开迷你缓冲区并仍在主缓冲区中等待,但没有插入任何文本,甚至没有插入已经定义的命令\cite
。
-buffer*Message*
说:
Making completion list...
(?=Help)
Scanning bibliography database test.bib
Sorry, no matches found
Emacs 为什么要扫描test.bib
?这个文件根本不存在。它也没有在任何地方定义(包括 LaTeX 文件和 emacs 配置文件)!
我的配置中遗漏了什么,让 Emacs 扫描参考书目文件,它能够完成其文件名。
更新
按照 Arash Esbati 的建议,我~
用扩展路径进行了替换/Users/tmjb
,最后我甚至重新启动了 emacs,它就起作用了!
我删除了\addbibliography{...}
文件中的条目,然后重新输入了参考书目文件,要么添加一\bibliography{tuc-thesis,latex-base,typographie,computer}
大行(每个列出的文件都在迷你缓冲区中完成),然后\addbibresource{}
再添加四行。我键入C-cC-n以重新扫描 LaTeX 文件。然后我检查了自动文件。令人惊讶的是,它只包含四个参考书目文件中的三个。无论我如何设置我的文件,只有那些不在本地目录中的参考书目文件才会列在自动文件中。
然后我就能够\cite{}
在主文件中插入一个命令了。到目前为止,这是朝着正确方向迈出的一步 :-)
成功将 a 插入\cite
主文件后,我还能够将\cite
s 插入子文件。
仍然无法正常运行的是,对于不在本地目录中的参考书目,标签的自动完成功能不起作用。但我认为,我暂时可以忍受这一点!