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能夠找到它的地方(一個簡單的解決方案是放在乳膠文件的同一資料夾/目錄中)。

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如何處理新欄位。對於每一行,前兩個參數是新欄位的名稱;對於第三個參數,您可以使用 use ,output:write:<type>其中<type>namefieldverb或之一,具體取決於條目的資料類型。listyear

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 上的輸出

在此輸入影像描述

相關內容