类似于这问题是,有没有办法url
只显示那些没有的参考文献pages
?
在我的参考书目中,我有许多文章或评论,我保留了 url 字段,以便知道我从哪个网站获得了给定的 pdf,但 pdf 是定期发布的文章,因此它有页码,因此信息url
是多余的。不过,我也有一些 @article
来自常规在线期刊,因此不属于这种@online
类型,但没有我需要保留的页面url
。
简而言之,我不想消除网址全球或者按 bibtex 类型,而是使用一些 if-then 函数根据pages
字段是否为空来为我执行此操作。
编辑doi
:对于和字段,实现相同的操作也很好urldate
,即如果存在页码,也抑制这些字段。
解决方案如下这里可以这样做:
\documentclass{article}
\usepackage{filecontents}
\usepackage{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=pages,final]
\step[fieldset=url,null]
}
}
}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{test1,
author = {Antelope, Alfred},
year = {2010},
title = {A Title},
url = {www.url.com},
urldate = {2015-05-05},
journal = {Journal},
volume = {1},
number = {2},
pages = {3--15}
}
@article{test2,
author = {Bee, Ben},
year = {2011},
title = {Best Title},
url = {www.url.com},
urldate = {2015-05-05},
journal = {Journal},
volume = {1},
number = {2}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
...但它仍然总是打印urldate
,如果存在的话,还会打印doi
字段。也许有人知道更好的解决方案?
答案1
如果存在的话,您可以稍微扩展一下源映射,以删除doi
s 和。urldate
pages
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=pages,final]
\step[fieldset=url,null]
\step[fieldset=urldate,null]
\step[fieldset=doi,null]
}
}
}
使用标准biblatex
样式,您也可以使用
\renewbibmacro*{doi+eprint+url}{%
\iffieldundef{pages}
{\iftoggle{bbx:doi}
{\printfield{doi}}
{}%
\newunit\newblock
\iftoggle{bbx:eprint}
{\usebibmacro{eprint}}
{}%
\newunit\newblock
\iftoggle{bbx:url}
{\usebibmacro{url+urldate}}
{}}
{}}
对于biblatex-chicago
的authordate
修改是
\renewbibmacro*{bib+doi+url}{% 16th ed.
\iffieldundef{pages}
{\ifthenelse{\iffieldundef{urlyear}\AND\iffieldundef{urlmonth}}%
{}%
{\printurldate}% Date fix
\iffieldundef{addendum}%
{\newunit\newblock}%
{\newcunit\newblock}%
\iftoggle{cms@doionly}%
{\iffieldundef{doi}%
{}%
{\printfield{doi}%
\setunit*{\addperiod\addspace}\newblock%
\clearfield{url}}}%
{\ifboolexpr{%
togl {cms@doi}%
and
not test {\iffieldundef{doi}}%
}%
{\printfield{doi}%
\setunit*{\addperiod\addspace}\newblock}%
{}}%
\ifboolexpr{%
togl {cms@eprint}%
and
not test {\iffieldundef{eprint}}%
}%
{\usebibmacro{eprint}%
\setunit*{\addperiod\addspace}\newblock}%
{}%
\ifboolexpr{%
togl {cms@url}%
and
not test {\iffieldundef{url}}%
}%
{\printfield{url}}%
{}}
{}}%