出版物リスト用に、出版状況によって自動的に区別されるいくつかの参考文献を生成したいと考えています。出版状況にはフィールドを使用しpubstate
、keywords= {own}
フィールドによって、自分の出版物として参考文献データベースにマークしました (驚きですよね?)。オプションによって、参考文献は自分の出版物に制限されますkeyword = own
。
のフィルター機能は、が含まれないbiblatex
特定のフィールドでのみ機能するため、 コマンドを使用してフィールドの内容を フィールドにマップします。そこから、そのフィールドに従って参考文献をフィルターできます。残念ながら、 のオプションを使用するかどうかに関係なく、空でないフィールドには何も書き込まれていないように見えます。代わりに空のフィールドにマップしようとすると ( で始まる行をコメント化し、その下の行をコメント解除する)、その後、フィールドには目的の値が含まれます。pubstate
pubstate
keywords
\DeclareSourcemap
append
\DeclareSourcemap
fieldset=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]