Aus verschiedenen Gründen muss ich innerhalb eines LaTeX-Dokuments mit Hilfe von Biblatex einen neuen Treiber mit neuen Feldern deklarieren.
Beispielsweise könnte folgender BibTeX-Eintrag angegeben werden:
\begin{filecontents}{\jobname.bib}
@aloa{chris,
fu = {Hawaii},
fubo = {Hawaiiboooo},
year = {2015}}
\end{filecontents}
Dann möchte ich im LaTeX-Dokument so etwas definieren wie:
\DeclareBibliographyDriver{aloa}{%
\newunit\newblock
\printfield{fu}%
\newunit\newblock
\printfield{fubo}%
\newunit\newblock
\printfield{year}%
\finentry}
Und dann möchte ich den Eintrag so zitieren, dass ich als Ausgabe im Literaturverzeichnis bekomme:
Hawaii Hawaiiboooo 2015
Ein Minimalbeispiel wäre etwa:
\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}
Ist es möglich, dies nur in der LaTeX-Datei zu tun (mit Bibtex und nicht mit Biber)?
Antwort1
Das Anlegen neuer Treiber und neuer Eingabefelder ist biblatex
auch ohne möglich biber
.
Wenn das Backend nicht ist biber
, biblatex
wird eine spezielle .bst
Datei biblatex.bst
zum Generieren der .bbl
Datei verwendet, daher muss geändert werden biblatex.bst
. So geht's:
1) Suchen Sie die biblatex.bst
Datei, erstellen Sie eine Kopie, benennen Sie die Kopie um (z. B. mybiblatex.bst
) und legen Sie die umbenannte Kopie an einer Stelle ab, wo bibtex
sie gefunden werden kann (eine einfache Lösung besteht darin, sie in denselben Ordner/dasselbe Verzeichnis wie die Latex-Datei zu legen).
2) Suchen Sie in der lokalen Kopie ENTRY
die Felder, die Sie hinzufügen möchten, und fügen Sie sie hinzu:
ENTRY {
entryset
...
fu
fubo
}
dies weist darauf hin bibtex
, dass fu
und Felder fubo
sind bibtex
.
3) Lokale Kopie suchen FUNCTION {output.fields.3}
und eine neue Funktion erstellen
FUNCTION {output.myfields} {
"fu" fu output:write:field
"fubo" fubo output:write:field
}
Diese Funktion gibt an bibtex
, wie das neue Feld zu behandeln ist. Für jede Zeile sind die ersten beiden Argumente die Namen der neuen Felder; für das dritte Argument können Sie verwenden output:write:<type>
, wobei je nach Datentyp des Eintrags <type>
eines der folgenden Elemente vorhanden ist : name
, field
, verb
, list
oder .year
4) Suchen Sie in der lokalen Kopie die Funktion FUNCTION {output:entry}
. Fügen Sie dieser Funktion hinzu output.myfields
, so dass es aussehen sollte wie
FUNCTION {output:entry}{
...
output.fields.3
output.myfields
output.compat.1
...
}
5) Fügen Sie für jeden neuen Treiber <driver>
die Zeile hinzu
FUNCTION {<driver>} { type$ output:entry }
im Beispiel sollte dies sein
FUNCTION {aloa} {type$ output:entry}
6) fügen Sie Ihrer Latexquelle Folgendes hinzu:
\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
Dies gibt an, was anstelle der Standardeinstellung bibtex
verwendet werden soll .mybiblatex.bst
biblatex.bst
Hier ist die Ausgabe auf dem MWE