So ordnen Sie Werte mit \DeclareSourcemap einem nicht leeren Feld zu

So ordnen Sie Werte mit \DeclareSourcemap einem nicht leeren Feld zu

Für meine Publikationsliste möchte ich mehrere Bibliographien generieren, die automatisch nach Publikationsstatus unterschieden werden. Als Publikationsstatus verwende ich das pubstateFeld 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 biblatexnur bei bestimmten Feldern funktionieren, bei denen pubstatenicht enthalten ist, möchte ich den Inhalt des pubstateFelds keywordsüber den \DeclareSourcemapBefehl in das Feld einblenden. Von dort aus könnte ich die Bibliographie nach diesem Feld filtern. Leider scheint es, egal ob ich die appendOption von verwende \DeclareSourcemapoder 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=keywordsund 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

overwriteDas 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, commadas 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 pubstatein das keywordsFeld 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, inpressund own, submitted.

Antwort2

Dies ist keine Lösung für die Frage, sondern für das Problem. Anstatt das inpressSchlüsselwort zum keywordBiblatex-Feld hinzuzufügen, kann man ein neues Bibcheck definieren und die checkOption von verwenden \printbibliography.

\defbibcheck{inpress}{
  \iffieldequalstr{pubstate}{inpress}{}{\skipentry}
}  

und dann

\printbibliography[check=inpress]

verwandte Informationen