biblatex 阅读风格 - 如何删除没有注释的条目?

biblatex 阅读风格 - 如何删除没有注释的条目?

这是一个 MWE,我以为它只会删除没有annotationAKAannote字段的条目。但实际上它删除了全部的条目。

以下是 biblatex 手册第 78 页上的文档内容:

如果notfield使用,则仅当 ⟨入口字段⟩ 不存在。

如果entrynull设置了,则处理将\map立即终止,并且不会创建当前条目。就好像它在数据源中不存在一样。显然,您应该使用先前的映射步骤选择要应用此操作的条目。

通过将这些步骤合并为一个步骤,我认为我将首先测试注释字段是否已设置,然后,如果没有,则删除该条目。有没有办法实现这一点。

\documentclass{article}

\usepackage[style=reading,
            entryhead=true,
            entrykey=false,
            natbib,
            hyperref=false,
            url=false,
            doi=false,
            %style=apa,
            sorting=nyt,
            isbn=false,
            %backref=true,
            firstinits=true,
            minnames=13,
            maxnames=35,
            minbibnames=10,
            maxbibnames=100,
            parentracker=true,
            defernumbers=true,
            backend=biber]{biblatex}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
     \step[notfield=annotation,entrynull=true]
    }
  }
}

\begin{filecontents}{\jobname.bib}
@inproceedings{ABCDFG,
  annote = {This is a very nice paper.},
  author = {GGPB},
  booktitle = {BOEUS},
  keywords = {clipping},
  title = {NOAP},
  volume = {0},
  year = {2005},
}
@inproceedings{XXXXXX,
  author = {PQR},
  booktitle = {BBC},
  keywords = {LLM},
  title = {ARP},
  year = {2010},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}

\nocite{*}

\printbibliography

\end{document}

答案1

数据映射发生在非常早期的阶段,此时annote字段仍被调用annote但尚未(从到 的annotation重命名也发生在源映射中,但该映射是在用户定义的s 之后执行的)。所以你需要。annoteannotation\DeclareSourcemapnotfield=annote

此外,似乎entrynull只有在其自身中使用时才可以安全地工作\step。文档中的所有示例都这样使用它。

如果您认为这\step[notfield=annotation,entrynull=true]应该可行(并且从文档文本中我发现没有令人信服的论据表明它不应该可行),请在 Biber 错误跟踪器上打开一个问题:https://github.com/plk/biber/issues

编辑:Biber bugracker 上有关于此问题的讨论https://github.com/plk/biber/issues/238. 因此,biblatex文档已被修改强调notfield应该\stepfinal

为了捕获没有并将它们置零的条目,annoteannotation建议

\documentclass{article}
\usepackage[style=reading, backend=biber]{biblatex}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
     \step[notfield=annote, final]
     \step[notfield=annotation, final]
     \step[entrynull]
    }
  }
}

\begin{filecontents}{\jobname.bib}
@inproceedings{ABCDFG,
  annote    = {This is a very nice paper.},
  author    = {GGPB},
  booktitle = {BOEUS},
  keywords  = {clipping},
  title     = {NOAP},
  volume    = {0},
  year      = {2005},
}
@inproceedings{XXXXXX,
  author    = {PQR},
  booktitle = {BBC},
  keywords  = {LLM},
  title     = {ARP},
  year      = {2010},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

参考书目中仅出现 <code>ABCDFG</code>(带有 <code>annote</code>),不存在 <code>XXXXXX</code>(不带 <code>annote</code>)

相关内容