\DeclareSourcemap を使用して空でないフィールドに値をマップする方法

\DeclareSourcemap を使用して空でないフィールドに値をマップする方法

出版物リスト用に、出版状況によって自動的に区別されるいくつかの参考文献を生成したいと考えています。出版状況にはフィールドを使用しpubstatekeywords= {own}フィールドによって、自分の出版物として参考文献データベースにマークしました (驚きですよね?)。オプションによって、参考文献は自分の出版物に制限されますkeyword = own

のフィルター機能は、が含まれないbiblatex特定のフィールドでのみ機能するため、 コマンドを使用してフィールドの内容を フィールドにマップします。そこから、そのフィールドに従って参考文献をフィルターできます。残念ながら、 のオプションを使用するかどうかに関係なく、空でないフィールドには何も書き込まれていないように見えます。代わりに空のフィールドにマップしようとすると ( で始まる行をコメント化し、その下の行をコメント解除する)、その後、フィールドには目的の値が含まれます。pubstatepubstatekeywords\DeclareSourcemapappend\DeclareSourcemapfieldset=keywords

\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}

もちろん、これをさまざまな方法で手動で実行することもできますが、期待どおりに動作しない理由を理解したいと思います。

答え1

問題は、overwriteマップ内で指定する必要があることです。これを試してください:

\DeclareSourcemap{
    \maps[datatype=bibtex]{
        \map[overwrite]{
            \step[fieldsource=pubstate, match={inpress},
                fieldset=keywords, fieldvalue={inpress}, append]
%               fieldset=note, fieldvalue={inpress}, append]
        }
    }
}

commaただし、上記のコードでは となるため、キーワードを区切る も追加する必要がありますowninpress

以下のコードが役に立つかもしれません。フィールドpubstateにすべてを追加しますkeywords

\DeclareSourcemap{
    \maps[datatype=bibtex]{
        \map[overwrite]{
            \step[fieldsource=pubstate,final]
            \step[fieldset=keywords, fieldvalue={,}, append]
            \step[fieldset=keywords, origfieldval, append]
        }
    }
}

上記のコードは、キーワード:own, inpressとで構成されますown, submitted

答え2

これは質問に対する解決策ではなく、問題に対する解決策です。biblatexフィールドinpressにキーワードを追加する代わりにkeyword、新しい bibcheck を定義して、checkオプションを使用することができます\printbibliography

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

その後

\printbibliography[check=inpress]

関連情報