![AUCTeX:局部变量中的自定义 biber 命令](https://linux22.com/image/364645/AUCTeX%EF%BC%9A%E5%B1%80%E9%83%A8%E5%8F%98%E9%87%8F%E4%B8%AD%E7%9A%84%E8%87%AA%E5%AE%9A%E4%B9%89%20biber%20%E5%91%BD%E4%BB%A4.png)
我想biber
通过 AuCTeX 的局部变量设置自定义命令。请考虑以下示例:
\documentclass{article}
\begin{document}
hello world
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% LaTeX-command: "pdflatex -synctex=-1 -aux-directory auto %s"
%%% BibTeX-command: "biber --bblsafechars ./auto/%s.bcf"
%%% End:
当我打开它时,emacs 警告我有关“危险”命令重新定义。 确实LaTeX-command
被重新定义,但BibTeX
一个没有。
我认为它与预设命令有关:在 Custumize Auctex -> TeX 命令 -> TeX 命令列表中,我有
%`%l%(mode)%' %t
对于 LaTeX,但是
bibtex %s
适用于 BibTeX。但我不太理解第一个命令的语法,所以我不知道如何更改第二个命令。
更新
我尝试了各种其他局部变量,因此此时我的文件如下所示:
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\begin{document}
hello world
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% LaTeX-command: "pdflatex -synctex=-1 -aux-directory auto %s"
%%% TeX-run-Biber: "biber --bblsafechars ./auto/%s"
%%% TeX-run-BibTeX: "biber --bblsafechars ./auto/%s"
%%% biber-command: "biber --bblsafechars ./auto/%s"
%%% BibTeX-command: "biber --bblsafechars ./auto/%s"
%%% TeX-command-Biber: "biber --bblsafechars ./auto/%s"
%%% LaTeX-biblatex-use-Biber:t
%%% End:
尽管如此,调用biber
或BibTeX
(通过C-c C-c
) 都会运行不带选项的命令(bblsafechars
和目录都将被忽略)。打开时,emacs 仍会警告我有关不安全或有风险的选项。
大概我对 emacs 如何选择实际命令字符串有些不明白,但我似乎无法真正找到原因。
答案1
AUCTeX 没有直接接口来向Biber
中的条目添加参数TeX-command-list
。因此,您必须操作变量本身。您希望将更改保留在文件本地,因此您必须执行额外的步骤。
我建议你编写一个函数并在你的初始化文件中放入类似这样的内容:
(eval-after-load "tex"
'(defun my/biber-command-with-args ()
"Replace Biber command in `TeX-command-list' with args."
(make-local-variable 'TeX-command-list)
(setq my/TeX-command-list (copy-alist TeX-command-list))
(setq my/TeX-command-list
(assq-delete-all
(car (assoc "Biber" my/TeX-command-list))
my/TeX-command-list))
(add-to-list 'my/TeX-command-list
'("Biber" "biber --bblsafechars ./auto/%s.bcf"
TeX-run-Biber nil t
:help "Run Biber with args")
t)
(setq TeX-command-list my/TeX-command-list)))
现在您可以使用文件局部变量激活该函数,如下所示:
\documentclass{article}
\begin{document}
hello world
\end{document}
%%% Local Variables:
%%% mode: latex
%%% TeX-master: t
%%% LaTeX-biblatex-use-Biber: t
%%% eval: (my/biber-command-with-args)
%%% End:
答案2
我无法在计算机上运行 biber,所以我的回答只是建议。无论如何,看起来没有定义的 Biber 命令。我阅读了 AucTeX 文档并尝试了C-h k C-c C-c
。从我读到的内容来看:
要将 biber 作为默认命令,您应该添加
%%%LaTeX-biblatex-使用-Biber:t
我会尝试设置
TeX-run-Biber
命令,但我对本地配置不太熟悉。也许%%%TeX-run-Biber:“biber --bblsafechars ./auto/%s.bcf”
会有帮助吗?
答案3
从 Emacs 29.1(也可能是更早版本)开始,有一种比使用@arash-esbati 给出的答案更简单的方法:
- 自定义变量
TeX-command-list
- 将条目的命令字段更改
Biber
为您希望 AUCTeX 调用的方式biber
。在我的例子中,我--validate-datamodel
在后面添加了biber
。 - 按下
Apply and Save
按钮。