Biblatex:使用新字段声明新驱动程序

Biblatex:使用新字段声明新驱动程序

由于多种原因,我需要在 biblatex 的帮助下在 LaTeX 文档中声明一个具有新字段的新驱动程序。

例如,可以给出以下 BibTeX 条目:

\begin{filecontents}{\jobname.bib}
    @aloa{chris,
        fu = {Hawaii},
        fubo = {Hawaiiboooo},
        year = {2015}}
\end{filecontents}

然后我想在 LaTeX 文档中定义类似以下内容:

\DeclareBibliographyDriver{aloa}{%
    \newunit\newblock
    \printfield{fu}%
    \newunit\newblock
    \printfield{fubo}%
    \newunit\newblock
    \printfield{year}%
    \finentry}

然后我想以这样的方式引用该条目,以便在参考列表中得到输出:

夏威夷 Hawaiiboooo 2015

一个简单的例子如下:

\documentclass{article}

\begin{filecontents}{\jobname.bib}
    @aloa{chris,
        fu = {Hawaii},
        fubo = {Hawaiiboooo},
        year = {2015}}
\end{filecontents}

\usepackage[backend=bibtex8]{biblatex}

\DeclareBibliographyDriver{aloa}{%
    \newunit\newblock
    \printfield{fu}%
    \newunit\newblock
    \printfield{fubo}%
    \newunit\newblock
    \printfield{year}%
    \finentry}

\bibliography{\jobname.bib}

\begin{document}
    \nocite{chris}
    \printbibliography
\end{document}

是否可以仅在 LaTeX 文件中执行此操作(使用 bibtex 而不是 biber)?

答案1

biblatex即使没有,也可以创建新的驱动程序和新的输入字段biber

当后端不是 时biberbiblatex会使用特殊.bst文件biblatex.bst来生成.bbl文件,因此必须修改biblatex.bst。 以下是流程:

1)找到biblatex.bst并复制它并重命名该副本(即mybiblatex.bst),然后将重命名的副本放在bibtex可以找到它的地方(一个简单的解决方案是将其放在与 latex 文件相同的文件夹/目录中)。

2)在本地副本中找到ENTRY并添加您想要添加的字段:

ENTRY {
  entryset 
  ...
  fu
  fubo
}

这表明bibtexfufubo字段bibtex

3)定位到本地副本FUNCTION {output.fields.3}并创建一个新函数

FUNCTION {output.myfields} {
  "fu"    fu    output:write:field
  "fubo"  fubo  output:write:field
}

此函数指示如何处理新字段。对于每一行,bibtex前两个参数是新字段的名称;对于第三个参数,可以使用output:write:<type>,其中<type>name、、或之一,具体取决于条目的数据类型。fieldverblistyear

4) 在本地复制函数中找到FUNCTION {output:entry}。添加到此函数output.myfields,因此它应该看起来像

FUNCTION {output:entry}{
  ...
  output.fields.3
  output.myfields
  output.compat.1
  ...
}

5)为每个新驱动程序<driver>添加以下行

FUNCTION {<driver>} { type$ output:entry }

在示例中,这应该是

FUNCTION {aloa} {type$ output:entry}

6) 将以下内容添加到您的乳胶源中:

\makeatletter
\def\blx@auxinit@bibtex#1{%
  \blx@auxwrite\blx@auxout@bibtex
    {\def\do##1{,\blx@stripbib{##1}}}
    {\ifx\blx@auxout@bibtex\@mainaux
     \else
       \blx@msg@aux
     \fi
     \string\bibstyle{mybiblatex}\blx@nl
     \string\bibdata{%
       \blx@ctrlfile@bibtex\blxauxsuffix
       \ifx#1\@empty
       \else
         \dolistloop#1%
       \fi}\blx@nl
     \string\citation{biblatex-control}}}
\makeatother

这是为了告诉bibtex使用mybiblatex.bst而不是默认的biblatex.bst

这是 MWE 上的输出

在此处输入图片描述

相关内容