Für meine Publikationsliste möchte ich mehrere Bibliographien generieren, die automatisch nach Publikationsstatus unterschieden werden. Als Publikationsstatus verwende ich das pubstate
Feld und durch das keywords= {own}
Feld habe ich sie in meiner Bibliographiedatenbank als meine eigenen Publikationen gekennzeichnet (Überraschung, oder?). Die Bibliographien werden durch die Optionen auf meine eigenen Publikationen beschränkt keyword = own
.
Da die Filterfunktionen von biblatex
nur bei bestimmten Feldern funktionieren, bei denen pubstate
nicht enthalten ist, möchte ich den Inhalt des pubstate
Felds keywords
über den \DeclareSourcemap
Befehl in das Feld einblenden. Von dort aus könnte ich die Bibliographie nach diesem Feld filtern. Leider scheint es, egal ob ich die append
Option von verwende \DeclareSourcemap
oder nicht, so, als ob in ein Feld, das nicht leer ist, nichts geschrieben wird. Wenn ich stattdessen versuche, in ein leeres Feld einzublenden (die Zeile, die mit beginnt, auskommentieren fieldset=keywords
und die Zeile darunter auskommentieren), enthält das Feld anschließend den gewünschten Wert.
\begin{filecontents}{\jobname.bib}
@article{inpress,
author = {A. Uthor},
title = {Yay, they accepted my article},
keywords = {own},
pubstate = {inpress},
year = {2014},
journal = {Journal of Universal Acceptance}
}
@article{submitted,
author = {A. Uthor},
title = {Look, I've written a nice manuscript, would you publish it? Pleeease?},
keywords = {own},
pubstate = {submitted},
year = {2014},
journal = {Journal of Doubtful Acceptance}
}
\end{filecontents}
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=pubstate, match={inpress},
fieldset=keywords, fieldvalue={inpress}, append]
% fieldset=note, fieldvalue={inpress}, append]
}
}
}
\listfiles
\begin{document}
\nocite{*}
\printbibliography[keyword=inpress, title = {Articles in press}]
\printbibliography[keyword=own, title = {Submitted articles}]
\end{document}
Natürlich könnte ich das auf verschiedene Weise manuell machen, aber ich würde gerne verstehen, warum es nicht so funktioniert, wie ich es erwarte.
Antwort1
overwrite
Das Problem ist, dass Sie dies in der Karte angeben müssen . Versuchen Sie Folgendes:
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=pubstate, match={inpress},
fieldset=keywords, fieldvalue={inpress}, append]
% fieldset=note, fieldvalue={inpress}, append]
}
}
}
ABER Sie müssen auch das hinzufügen, comma
das die Schlüsselwörter trennt, weil der obige Code Folgendes bewirkt owninpress
:
Möglicherweise ist der folgende Code für Sie hilfreich. Er hängt alles pubstate
in das keywords
Feld ein.
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=pubstate,final]
\step[fieldset=keywords, fieldvalue={,}, append]
\step[fieldset=keywords, origfieldval, append]
}
}
}
Der obige Code enthält die Schlüsselwörter: own, inpress
und own, submitted
.
Antwort2
Dies ist keine Lösung für die Frage, sondern für das Problem. Anstatt das inpress
Schlüsselwort zum keyword
Biblatex-Feld hinzuzufügen, kann man ein neues Bibcheck definieren und die check
Option von verwenden \printbibliography
.
\defbibcheck{inpress}{
\iffieldequalstr{pubstate}{inpress}{}{\skipentry}
}
und dann
\printbibliography[check=inpress]