對於我的出版物列表,我想產生幾個由出版狀態自動區分的參考書目。對於出版狀態,我使用該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
分隔關鍵字的 ,因為上面的程式碼 make 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
這不是解決問題,而是解決問題。我們可以定義一個新的 bibcheck 並使用的選項,而不是將inpress
關鍵字新增到biblatex 欄位。keyword
check
\printbibliography
\defbibcheck{inpress}{
\iffieldequalstr{pubstate}{inpress}{}{\skipentry}
}
進而
\printbibliography[check=inpress]