我如何告诉 biblatex 根据 URL 和 URLDATE 过滤条目?

我如何告诉 biblatex 根据 URL 和 URLDATE 过滤条目?

我想使用 创建两个单独的参考文献列表biblatex。第一个应包含文献参考,第二个应包含在线参考。我的标准是 BibTeX 文件中任何同时包含 aUrl和 a 的条目Urldate都应为在线来源。因此,我定义了一个“bibcheck”,如下所示:

\documentclass{article}

\usepackage[style=verbose]{biblatex}

\defbibcheck{online}{%
  \ifboolexpr{ 
    not test {\iffieldundef{Url}} and not test {\iffieldundef{Urldate}}
  }{% Entry has both url and urldate -> it's a web source  
  }{%
    \skipentry
  }
}

\defbibcheck{hasurl}{%
  \iffieldundef{Url}{\skipentry}{}%
}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@misc{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
  url = {http://www.google.com/},
  urldate = {2012-06-21}
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
  url = {http://www.google.com/}
}
@misc{C03,
  author = {Cuthor, C.},
  year = {2001},
  title = {Charlie},
  urldate = {2012-06-21}
}
@misc{D04,
  author = {Duthor, D.},
  year = {2001},
  title = {Delta}
}
\end{filecontents}

\addbibresource{\jobname.bib}

\nocite{*}

\begin{document}

\printbibliography[check=online]
\printbibliography[check=hasurl]

\end{document}

但是,这不起作用,因为似乎在 bibcheck“例程”中既没有设置Url也没有设置——即使它们在参考列表中正确打印。我尝试使用Urldate输出字段的值,但它只返回一个空字符串。Url\thefield{url}

我如何根据Url和进行过滤Urldate

答案1

您的示例的问题在于“URLDATE”不是字段。如果您查看手册,所有“*DATE”字段都被后端拆分成其组件,因此如果您将“urldate”更改为“urlyear”,它就可以正常工作。

另一种方法是使用 biber 的 sourcemapping 功能:

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=url]
      \step[fieldsource=urldate]
      \step[fieldset=keywords, fieldvalue={online}]
    }
  }
}

这将为所有包含 URL 和 URLDATE 的内容添加关键字“online”,然后您可以使用该关键字进行 bib 过滤。由于 URLDATE 是后端数据模型的一部分,因此您可以在其中使用它。

答案2

对字段的测试urldate,因为biblatex仅使用文件中定义的字段.bbl。但是,为什么不将这些条目定义为类型呢online?然后您可以测试\ifentrytype(我biber在我的示例中使用了):

\documentclass{article}

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

\defbibcheck{online}{\ifentrytype{online}{}{\skipentry}}
\defbibcheck{hasurl}{\iffieldundef{url}{\skipentry}{}}
\defbibcheck{hasurldate}{\iffieldundef{urlyear}{\skipentry}{}}

\usepackage{filecontents}

\begin{filecontents*}{\jobname.bib}
@online{A01,
  author = {Author, A.},
  year = {2001},
  title = {Alpha},
  urldate = {2012-06-21},
  url = {http://www.google.com/},
}
@misc{B02,
  author = {Buthor, B.},
  year = {2002},
  title = {Bravo},
  url = {http://www.google.com/}
}
@misc{C03,
  author = {Cuthor, C.},
  year = {2001},
  title = {Charlie},
  urldate = {2012-06-21},
}
@misc{D04,
  author = {Duthor, D.},
  year = {2001},
  title = {Delta},
}
\end{filecontents*}

\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}

\printbibliography[check=online]
\printbibliography[check=hasurl]
\printbibliography[check=hasurldate]
\printbibliography

\end{document}

在此处输入图片描述

相关内容