我想使用 创建两个单独的参考文献列表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}