AUCTeX:局部变量中的自定义 biber 命令

AUCTeX:局部变量中的自定义 biber 命令

我想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: 

尽管如此,调用biberBibTeX(通过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 给出的答案更简单的方法:

  1. 自定义变量TeX-command-list
  2. 将条目的命令字段更改Biber为您希望 AUCTeX 调用的方式biber。在我的例子中,我--validate-datamodel在后面添加了biber
  3. 按下Apply and Save按钮。

相关内容