Biber:根据作者姓名使用现有关键词过滤书目

Biber:根据作者姓名使用现有关键词过滤书目

应使用 biber 的功能创建仅包含特定作者条目的参考书目sourcemap。答案https://tex.stackexchange.com/a/65145/99345演示了如何通过向每个匹配条目添加特定关键字来实现这一点。这对我来说也有效,只要没有关键字仍存在于匹配的 bib 条目中。因此,以下示例生成仅包含一个条目而不是两个条目的参考列表。

仅包含一个条目的参考文献列表 参考文献列表

删除第二个条目中的现有关键字foo会使两个条目都出现在列表中,正如预期的那样。

\begin{filecontents}{\jobname.bib}
@book{first, author = {Doe, John}, title = {First}}
@book{second, author = {Doe, John}, title = {Second}, keywords = {foo}}
\end{filecontents}

\documentclass{article}
\usepackage[backend=biber]{biblatex}
\addbibresource{\jobname.bib}

\DeclareSourcemap{
    \maps[datatype=bibtex, overwrite]{
        \map{
            \step[fieldsource=author, match=Doe, final]
            \step[fieldset=keywords, fieldvalue=doe, append]
        }
    }
}

\begin{document}
\nocite{*}
\printbibliography[keyword=doe]
\end{document}

overwrite设置和属性后append,我认为现有的关键字也可以通过这种方式进行修改。如何实现预期的行为?

答案1

keyword字段是一个逗号分隔的列表。如果您只是像获得一样附加doe到列表,但当然您想要,所以您需要附加(如果字段为空,这可能会留下一个空条目,您甚至可能会收到警告,但您可以忽略它)。然后您可以使用keya,keybkeya,keybdoekeya,keyb,doe,doekeyword

\DeclareSourcemap{
    \maps[datatype=bibtex, overwrite]{
        \map{
            \step[fieldsource=author, match=Doe, final]
            \step[fieldset=keywords, fieldvalue={,doe}, append]
        }
    }
}

相关内容