禁止参考书目中的某些 URL

禁止参考书目中的某些 URL

如果您从 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

相关内容