Benutzerdefiniertes Feld in BibLaTeX

Benutzerdefiniertes Feld in BibLaTeX

Ich möchte ein optionales benutzerdefiniertes Feld in meinen .bib-Einträgen zulassen. Ich brauche diese Felder nicht als Teil der Bibliographie, möchte aber darauf zugreifen können über

\citefield{<entry-key>}{<custom-field-name>}

Die Antwort finden Sie wahrscheinlich irgendwo in den unten aufgeführten Referenzen, aber meine ersten Anpassungsversuche \DeclareSourcemapsind \DeclareFieldFormatgescheitert.

Verweise:

Code:

\begin{filecontents}{mybib.bib}
@book{knuth1984texbook,
  title={The texbook},
  author={Knuth, D.E. and Knuth, A.D. and Bibby, D. and American Mathematical Society and Addison-Wesley Publishing Company and Addison-Wesley},
  isbn={9780201134483},
  lccn={85030845},
  series={Computers \& typesetting},
  url={https://books.google.com/books?id=hEYuAQAAIAAJ},
  year={1984},
  publisher={Addison-Wesley},
  myFieldA={Useful Book},
  myFieldB={on Shelf 4},
}
@book{goossens1994latex,
  title={The LaTeX Companion},
  author={Goossens, M. and Mittelbach, F. and Samarin, A.},
  isbn={9780201541991},
  lccn={lc93023150},
  series={Addison-Wesley series on tools and techniques for computer typesetting},
  url={https://books.google.com/books?id=54A3MuBzIrEC},
  year={1994},
  publisher={Addison-Wesley},
  myFieldA={Also Useful Book},
  myFieldB={on Shelf 5},
}
\end{filecontents}

%% -----------------

\documentclass{article}
\usepackage{biblatex}
\addbibresource{mybib.bib}

\begin{document}
    This should print ``Also Useful Book'':
    \citefield{goossens1994latex}{myFieldA}
\end{document}

Antwort1

Vorausgesetzt, Sie benötigen nur wenige Felder und sind bereit, die Markup-Semantik ein wenig zu opfern (für die Zitate), können Sie die biblatexbereitgestellten „benutzerdefinierten Felder“ verwenden (die Standardstile verwenden sie nicht, aber wenn Sie ein nicht standardmäßiges Feld verwenden, müssen Sie möglicherweise prüfen, ob es wirklich „leer“ ist).

Da Sie in den Kommentaren erwähnt haben, dass Sie einen benutzerdefinierten Namen für Ihr Feld möchten, können Sie dies erreichen, indem Sie mithilfe einer SourceMap den Wert aus Ihrem benutzerdefinierten Feld in eines der verfügbaren Felder im biblatexDatenmodell kopieren. Dies bedeutet, dass Sie Ihren benutzerdefinierten Namen in Ihrer .bibDatei haben können, aber beim tatsächlichen Zitieren müssen Sie dennoch ein Feld biblatex„kennen“.

Das könnte ungefähr so ​​aussehen:

\begin{filecontents}[overwrite]{mybib.bib}
@book{knuth1984texbook,
  title={The texbook},
  author={Knuth, D.E. and Knuth, A.D. and Bibby, D. and American Mathematical Society and Addison-Wesley Publishing Company and Addison-Wesley},
  isbn={9780201134483},
  lccn={85030845},
  series={Computers \& typesetting},
  url={https://books.google.com/books?id=hEYuAQAAIAAJ},
  year={1984},
  publisher={Addison-Wesley},
  myFieldA={Useful Book},
  myFieldB={on Shelf 4},
}
@book{goossens1994latex,
  title={The LaTeX Companion},
  author={Goossens, M. and Mittelbach, F. and Samarin, A.},
  isbn={9780201541991},
  lccn={lc93023150},
  series={Addison-Wesley series on tools and techniques for computer typesetting},
  url={https://books.google.com/books?id=54A3MuBzIrEC},
  year={1994},
  publisher={Addison-Wesley},
  myFieldA={Also Useful Book},
  myFieldB={on Shelf 5},
}
\end{filecontents}

%% -----------------

\documentclass{article}
\usepackage{biblatex}
\addbibresource{mybib.bib}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=myFieldA]
      \step[fieldset=usera, origfieldval]
      \step[fieldsource=myFieldB]
      \step[fieldset=userb, origfieldval]
    }
  }
}

\begin{document}
This should print ``Also Useful Book'':
\citefield{goossens1994latex}{usera}

This should print ``on Shelf 5'':
\citefield{goossens1994latex}{userb}
\end{document}

Bildbeschreibung hier eingeben

Der Vorteil dieses Ansatzes besteht darin, dass Sie das Datenmodell nicht erweitern müssen, sodass es einfacher ist. Wenn Sie Ihren benutzerdefinierten Feldnamen jedoch wirklich auf beiden Seiten verwenden müssen, besteht meines Wissens nach die einzige Möglichkeit darin, das Datenmodell zu erweitern, um Ihr Feld einzuschließen. In diesem Fall ist die kanonische Antwort die von @moewe unter:Wie kann ich mit BibLaTeX/Biber völlig neue Datentypen erstellen?.

verwandte Informationen