如果您从 Google Books 获取 .bib 文件,那么不出所料,它的 URL 字段中会有一个指向 Google Books 的链接。在 .bib 文件中有这个链接很方便,所以我宁愿不将其从文件中删除,使用正则表达式很容易,但是我不想打印它。
有没有办法根据该字段的内容来抑制 URL 字段的打印?
或者,我似乎可以使用@book
类似的方法禁用 s 的URL 字段\AtEveryBibitem{\ifentrytype{book}{\clearfield{url}}{}}
,但我宁愿修复真正的问题并保留使用 URL 引用书籍的能力。
答案1
您可以\DeclareSourcemap
在序言中使用 来删除字段。这是一个完整的示例。(如果您有自己的文件中的 Google Books Bibs,您也可以使用\perdatasource
它来使其仅适用于该来源。请参阅文档中的第 4.5.2 节(动态修改数据)biblatex
!
\begin{filecontents}{\jobname.bib}
@book{bad,
title={With link we don't want},
url={http://books.google.se/books?id=SNeHkMXHcd8C},
}
@book{good,
title={With link we want},
url={http://tex.stackexchange.com/},
}
\end{filecontents}
\documentclass{article}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
\DeclareSourcemap{
\maps{
\map{
\step[fieldsource=url,
match=\regexp{/books\.google\.},
fieldset=url, null]
}
}
}
\begin{document}
\nocite{good, bad}
\printbibliography
\end{document}
答案2
为了完整起见,clstr 在注释中提出的替代方法是简单地通过在有问题的行前面加上//或% 来注释掉它们。我将在编辑器或终端中使用正则表达式来实现这一点(因为我的 .bib 中有 300 个条目):
sed -r 's/(url\ ?=\ ?\{[a-z:\/]*books\.google\.)/%\1/g oldrefs.bib >newrefs.bib