设置 biblatex 辅助文件名

设置 biblatex 辅助文件名

我正在使用biblatexrefsection=chapter这将导致辅助文件根据此模式命名,假设调用book.tex一本n章节书的源文件:

book1-blx.aux
book2-blx.aux
...
bookn-blx.aux

有没有钩子可以改变这个名字?我需要将辅助文件与其对应的章节关联起来(这些文件在其他流程中使用)例如:

book_chaplabel-blx.aux

我认为我可以在命令里面添加一个钩子include,这样我就可以获取章节文件名,但我不知道在哪里将它连接到生成的辅助文件名。

为了清晰起见,进行编辑:

尝试用章节名称代替整数可能不是解决问题的正确方法。最主要的是我需要一种方法将辅助文件与其所属章节关联起来。我必须对每个章节的 bbl 文件和辅助文件进行后处理。后处理后的文件用于不同的工作流程(epub/docbook 生成)。

答案1

辅助文件名的数字部分对应于参考节计数器(与 返回的值相同\therefsection)。文件名后缀(-blx)对应于\blxauxsuffix。这可以\renewcommand在前言中用 重新定义。文件名前缀被硬编码为\jobname

您可以修补biblatex内部结构以添加章节文件名,但这些需要在序言中定义。因此挂钩为时\include已晚。一种解决方法是在序言中指定章节文件名的有序列表。

以下是用章节文件名替换参考章节编号的示例。章节文件名\blxauxprefix以逗号分隔的列表形式传递给新命令。

\documentclass{report}
\usepackage[backend=bibtex,refsection=chapter]{biblatex}

\makeatletter

\def\blxauxprefix#1{%
  \defcounter{listcount}{0}%
  \def\do##1{\stepcounter{listcount}\csgdef{blxauxprefix:\the\c@listcount}{-##1}}%
  \docsvlist{#1}}

\patchcmd{\blx@refsection@bibtex}
  {\jobname\the\c@refsection\blxauxsuffix}
  {\jobname\csuse{blxauxprefix:\the\c@refsection}\blxauxsuffix}{}{}

\patchcmd{\blx@bblfile@bibtex}
  {\jobname\the\c@refsection\blxauxsuffix}
  {\jobname\csuse{blxauxprefix:\the\c@refsection}\blxauxsuffix}{}{}

\apptocmd{\include}
  {\ifcsstring{blxauxprefix:\the\c@refsection}{#1}{}
     {\blx@warning{%
        'aux' file prefix does not match \MessageBreak
        '\@backslashchar include' filename #1}}}{}{}

\makeatother

\blxauxprefix{chap1,chap2}

\begin{filecontents}{chap1.tex}
\chapter{First chapter}
\cite{ctan}
\end{filecontents}

\begin{filecontents}{chap2.tex}
\chapter{Second chapter}
\cite{companion,knuth:ct}
\end{filecontents}

\addbibresource{biblatex-examples.bib}

\defbibheading{subbibliography}{\section*{%
  \ifnumgreater{\therefsection}{0}
    {References for Chapter \ref{refsection:\therefsection}}
    {References before chapters}}}

\begin{document}
\cite{markey}
\include{chap1}
\include{chap2}
\printbibheading
\bibbysection[heading=subbibliography]
\end{document}

相关内容