Если вы получаете файл .bib из google books, неудивительно, что в поле URL есть ссылка на google books. Это удобно иметь в файле .bib, поэтому я бы предпочел не удалять его из файла, что было бы легко сделать с помощью regex, однако я не хочу, чтобы он печатался.
Есть ли способ запретить печать поля URL на основе содержимого этого поля?
В качестве альтернативы, похоже, я мог бы отключить поле URL для @book
s с помощью чего-то вроде , \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 в комментарии, заключается в том, чтобы просто закомментировать проблемные строки, добавив к ним префикс // или %. Я бы использовал для этого регулярное выражение (так как у меня 300 записей в моем .bib) либо в редакторе, либо из терминала:
sed -r 's/(url\ ?=\ ?\{[a-z:\/]*books\.google\.)/%\1/g oldrefs.bib >newrefs.bib