如何使用 \DeclareSourcemap 將值映射到非空字段

如何使用 \DeclareSourcemap 將值映射到非空字段

對於我的出版物列表,我想產生幾個由出版狀態自動區分的參考書目。對於出版狀態,我使用該pubstate字段,並通過該keywords= {own}字段,我在參考書目數據庫中將它們標記為我自己的出版物(驚訝,是嗎?)。透過選項,參考書目僅限於我自己的出版物keyword = own

由於 的過濾功能biblatex僅適用於pubstate不在其中的某些特定字段,因此我想透過命令將pubstate字段的內容映射到字段中。從那裡我可以根據該字段過濾參考書目。不幸的是,無論我是否使用選項,似乎沒有任何內容寫入非空白欄位。如果我嘗試對應到一個空白欄位(註解以 開頭的行並取消註解下面的行),則該欄位隨後將包含所需的值。keywords\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分隔關鍵字的 ,因為上面的程式碼 make owninpress

下面的程式碼可能對您有用。它將所有內容附加到字段pubstatekeywords

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

上面的程式碼包含關鍵字:own, inpressown, submitted

答案2

這不是解決問題,而是解決問題。我們可以定義一個新的 bibcheck 並使用的選項,而不是將inpress關鍵字新增到biblatex 欄位。keywordcheck\printbibliography

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

進而

\printbibliography[check=inpress]

相關內容