如何在其他字段为条件的情况下在 `defbibenvironment` 中使用 `\clearfield`?

如何在其他字段为条件的情况下在 `defbibenvironment` 中使用 `\clearfield`?

我正在尝试学习如何biblatex使用;定制参考书目\defbibenvironment,特别是尝试使参考书目尽可能紧凑。

我感兴趣的一个具体调整是删除该eprint字段,但仅针对那些也在期刊中发布的条目,即那些具有非空字段的条目journaltitle

有没有办法\clearfield在第四个参数中使用\defbibenvironment另一个字段的值(或存在)作为条件?

附言:我\defbinenvironment之所以建议这样做,是因为过去当我在一份文档中拥有多个不同风格的参考书目时,这种方法对我很有用。\defbinenvironment只要答案允许这样做,我很乐意不使用这种方法。

答案1

您可以使用 测试字段是否存在\iffieldundef{<field name>}{<true>}{<false>}。请记住知道三种不同类型的字段:普通字段、列表和名称列表。分别使用、和biblatex进行测试。您可以在文档中找到每个字段的“类型” 。\iffieldundef\iflistundef\ifnameundefbiblatex

通常人们不会删除字段\defbibenvironment(尽管这在技术上是可行的),更常见的习惯用法是

\AtEveryBibitem{%
  \iffieldundef{journaltitle}
    {}
    {\clearfield{eprint}}%
}

请注意\AtEveryBibitem仅适用于参考书目。如果您还需要影响引文(包括),您也\fullcite需要复制代码。\AtEveryCitekey

如果要删除某个字段,通常使用 Biber sourcemap 而不是 会更优雅\clearfield。这会在输入阶段清除该字段,这意味着该字段被完全忽略,而不仅仅是在游戏后期才“被遗忘”。

对于您的用例,我会假设一个条目有一个非空值,journaltitle当且仅当它是一个,@article这样我们就可以去

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear]{biblatex}

\DeclareSourcemap{
  \maps[datatype = bibtex]{
    \map{
      \pertype{article}
      \step[fieldset=eprint, null]
    }
  }
}

\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite{sigfridsson,baez/article,baez/online,wassenberg}

\printbibliography
\end{document}

如果您有@article不带journal/ 的s journaltitle(我个人认为这是错误的:@article只有当文章实际发表在期刊上时才是正确的选择),那么您也可以明确测试journal/ journaltitle(回想一下,前者是后者的遗留别名,我们需要先解决)

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=biber, style=authoryear]{biblatex}

\DeclareSourcemap{
  \maps[datatype = bibtex]{
    \map{
      \step[fieldsource=journal, fieldtarget=journaltitle]
      \step[fieldsource=journaltitle, final]
      \step[fieldset=eprint, null]
    }
  }
}

\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite{sigfridsson,baez/article,baez/online,wassenberg}

\printbibliography
\end{document}

相关内容