如何使用 \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分隔关键字,因为上面的代码使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

这不是问题的解决方案,而是问题的解决方案。除了将关键字添加inpresskeywordbiblatex 字段之外,还可以定义新的 bibcheck 并使用check选项\printbibliography

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

进而

\printbibliography[check=inpress]

相关内容