
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 \DeclareSourcemap
sind \DeclareFieldFormat
gescheitert.
Verweise:
- Wie kann ich mit BibLaTeX/Biber völlig neue Datentypen erstellen?
- Wie fügt man das Dateifeld auf magische Weise zu jedem Eintrag in einer Bib-Datei hinzu?
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 biblatex
bereitgestellten „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 biblatex
Datenmodell kopieren. Dies bedeutet, dass Sie Ihren benutzerdefinierten Namen in Ihrer .bib
Datei 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}
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?.