biblatex 仅在没有页码时引用 URL

biblatex 仅在没有页码时引用 URL

类似于问题是,有没有办法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

如果存在的话,您可以稍微扩展一下源映射,以删除dois 和。urldatepages

\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-chicagoauthordate修改是

\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}}%
       {}}
    {}}%

相关内容