仅显示一个参考的 URL

仅显示一个参考的 URL

我在用biblatex

就像我使用 zotero 检索参考文献的元数据一样,我的 .bib 文件中有很多 URL。在大多数情况下,我不希望打印 URL(因为它只是显示该书的出版商网页的 URL)。因此,我使用以下行url=false

\usepackage[style=authoryear-comp,
     hyperref,
     backend=biber,
     isbn=false,
     doi=false,
     url=false,
     date=year]{biblatex}

然而,在某些情况下,url 很重要:例如,如果我引用一篇没有实际发布者的在线文章。

我怎样才能告诉 biblatex 打印某些参考文献的 URL(明确指明),而不删除参考文献中的所有(无用的)URL 而只保留有用的 URL?

答案1

biblatex动态告知打印谁的 URL,请尝试以下操作。

为了实现此目的,您一定不传递url=falsebiblatex

我们定义了一个新类别(这些可以非常轻松地动态处理并通过中的输入.tex而不是.bib文件中的输入)needsurl:。

\DeclareBibliographyCategory{needsurl}

我们还重新定义了 URL 宏,以便仅当条目属于该类别时才打印 URL needsurl

% this is basically the standard macro from `biblatex.def`,
% augmented with the logic for `needsurl`
\renewbibmacro*{url+urldate}{%
  \ifcategory{needsurl}
    {\printfield{url}%
     \iffieldundef{urlyear}
       {}
       {\setunit*{\addspace}%
        \printurldate}}
    {}}

然后有一个简短的命令来指示biblatex某个条目需要显示其 URL。

\newcommand{\entryneedsurl}[1]{\addtocategory{needsurl}{#1}}

您可以在文档中的任何位置使用它,但请记住,它\entryneedsurl不会打印任何内容,它只会告诉您biblatex如果条目出现在参考书目中则打印 URL。

它的用法正如您期望的那样,如果您希望条目markey显示其 URL,只需\entryneedsurl{markey}在文档中的任何位置发出即可。

\entryneedsurl也可以将其合并到某些宏中\cite,这样您就可以拥有一个\citebiburl可以执行所有操作的宏\cite,但将条目添加到类别中needsurl

数学家协会

\documentclass[UKenglish]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{lmodern}
\usepackage[style=authoryear-comp, hyperref, backend=biber, isbn=false, doi=false, date=year]{biblatex}

\addbibresource{biblatex-examples.bib}

\DeclareBibliographyCategory{needsurl}
\newcommand{\entryneedsurl}[1]{\addtocategory{needsurl}{#1}}
\renewbibmacro*{url+urldate}{%
  \ifcategory{needsurl}
    {\printfield{url}%
     \iffieldundef{urlyear}
       {}
       {\setunit*{\addspace}%
        \printurldate}}
    {}}

\begin{document}
  A\entryneedsurl{markey}B
  \cite{markey,ctan}
  \printbibliography
\end{document}

产量 MWE 输出

相关内容