我在用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=false
给biblatex
。
我们定义了一个新类别(这些可以非常轻松地动态处理并通过中的输入.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}
产量