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}

そして、参考文献リストに次のように出力されるようにエントリを引用したいと思います。

ハワイ ハワイブー 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 ファイルのみで (biber ではなく bibtex を使用して) 実行することは可能ですか?

答え1

biblatexがなくても、新しいドライバーと新しいエントリ フィールドを作成することも可能ですbiber

バックエンドが でない場合はbiberbiblatexは特別な.bstファイルを使用して ファイルbiblatex.bstを生成するため.bbl、 を変更する必要がありますbiblatex.bst。手順は次のとおりです。

1)biblatex.bstそれを探してコピーし、コピーの名前を変更して (つまり、mybiblatex.bst)、名前を変更したコピーを が見つけられる場所に置きますbibtex(簡単な解決策は、LaTeX ファイルと同じフォルダー/ディレクトリに置くことです)。

2) ローカル コピーでENTRY、追加するフィールドを見つけて追加します。

ENTRY {
  entryset 
  ...
  fu
  fubo
}

これは、 と がフィールドであるbibtex ことを示します。fufubobibtex

3) ローカルコピーを見つけてFUNCTION {output.fields.3}新しい関数を作成する

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

この関数は、bibtex新しいフィールドの処理方法を指示します。各行の最初の 2 つの引数は新しいフィールドの名前です。3 番目の引数には を使用します。ここで、 はoutput:write:<type>エントリのデータ型に応じて 、、、のいずれ<type>かになります。namefieldverblistyear

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.bstbiblatex.bst

MWEの出力は次の通りです

ここに画像の説明を入力してください

関連情報