我正在为引文样式语言 (CSL) 编写一个 Lua 引文处理器,位于https://github.com/zepinglee/citeproc-lua。它需要作为除 LuaTeX 之外的 LaTeX 引擎的外部执行程序运行。我对工作流程的设计有一个疑问:将输出信息直接写入.aux
文件是否安全?
传统的 BibTeX 工作流程通常需要运行三次 LaTeX 引擎才能确保引用标签正确。在第一遍中,将\citation
、\bibstyle
和\bibdata
命令写入.aux
文件。然后 BibTeX 读取文件并将s.aux
生成thebibliography
环境写入。在第二遍中,LaTeX 读取文件并且每个命令将引用标签写入。这是因为在某些样式中,引用标签会根据其在参考书目中的顺序重新分配(例如)。在最后的运行中,LaTeX 加载并输出正确的引用。\bibitem
.bbl
.bbl
\bibitem
\bibcite
.aux
plain.bst
.aux
如果参考文献处理器直接将引文标签写入.aux
文件,则可以节省 LaTeX 引擎的一次运行,并消除 BibTeX 工作流程中第二次运行的负担。但我不确定它是否有任何副作用。
答案1
.bbl
如果引文处理器旨在成为 BibTeX 在参考书目和 LaTeX 端引文实现(带有 文件)方面的替代品thebibliography
,我不会让处理器直接将 写入\bibcite
文件.aux
只是为了节省 LaTeX 运行。
在绝大多数设置中,这些.aux
条目可能都没问题,但这种方法剥夺了 LaTeX 方面动态操纵引用标签的手段,这在某些情况下可能会派上用场,例如
\documentclass{article}
\usepackage{bibtopicprefix}
\usepackage{hyperref}
\begin{filecontents}{\jobname-A.bib}
@book{elk,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\begin{filecontents}{\jobname-B.bib}
@book{belk,
author = {Bertranda Belk},
title = {A Theory on Other Sauruses},
year = {1973},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\begin{document}
Lorem \cite{elk,belk}.
\begin{btSect}{\jobname-A}
\renewcommand{\bibprefix}{A}
\btPrintAll
\end{btSect}
\begin{btSect}{\jobname-B}
\renewcommand{\bibprefix}{B}
\btPrintAll
\end{btSect}
\end{document}
在此示例中,前缀不会也不需要通过任何文件暴露给 BibTeX .aux
(BibTeX 无论如何也不会有处理它的接口)。前缀纯粹是在 LaTeX 端添加的。