
Я использую последнюю версию Aquamacs на MacOS (и мне интересно, почему все эти вопросы, связанные с 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 в буфер, пока я все еще в минибуфере, меня спрашивают о параметрах. Я пропустил этот вопрос, нажав RETеще раз. Теперь Emacs спрашивает (все еще в минибуфере) файл библиографии для использования. Я набрал 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"
. Быстрый тест в терминале/оболочке дает
<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».
EDIT: ~/lib/
в моем случае расширяется до /Users/tmjb/Library/
.
Далее я перемещаю курсор ниже \begin{document}
и начинаю вставлять \cite
-команду (снова обычным способом): C-cc(это сокращение для меня, как и C-c[). Пока я нахожусь в минибуфере, RefTeX просит меня вставить регулярное выражение. Я вставляю texstudio
, которое, как я знаю, существует в этом файле библиографии. После нажатия RETEmacs жалуется Sorry, no matches found
. Курсор покидает минибуфер и все еще ждет в главном буфере, но текст не вставляется, даже уже определенная команда \cite
.
-буфер *Message*
говорит:
Making completion list...
(?=Help)
Scanning bibliography database test.bib
Sorry, no matches found
Какого черта Emacs хочет сканировать test.bib
? Этот файл нигде не существует. Он также нигде не был определен (включая файл LaTeX и файлы конфигурации emacs)!
Что я упустил в своей конфигурации, так это то, что Emacs, сканирующий файл библиографии, мог завершить его имя.
ОБНОВЛЯТЬ
Как и предложил Араш Эсбати, я заменил его ~
на расширенный путь /Users/tmjb
, в конце концов я даже перезапустил свой emacs, и это сработало!
Я удалил \addbibliography{...}
записи в своем файле и заново ввел файлы библиографии, либо добавив одну большую \bibliography{tuc-thesis,latex-base,typographie,computer}
строку (каждый из перечисленных файлов был заполнен в минибуфере), а затем \addbibresource{}
снова по четыре. Я набрал, C-cC-nчтобы повторно отсканировать файл LaTeX. Затем я проверил файл auto. Удивительно, но он содержал только три из четырех файлов библиографии. Независимо от того, как я настроил свой файл, только те файлы библиографии, которые не были расположены в локальном каталоге, были перечислены в файле auto.
Я смог тогда вставить \cite{}
команду в главный файл. Это пока шаг в правильном направлении :-)
После успешной вставки a \cite
в главный файл я также смог вставить \cite
s в подфайлы.
Что все еще не работает правильно, так это то, что автозаполнение меток не работает для библиографий, которые не находятся в локальном каталоге. Но я думаю, что я могу жить с этим на данный момент!