Se você obtiver um arquivo .bib do Google Books, não é surpresa que ele tenha um link para o Google Books no campo URL. É útil ter isso no arquivo .bib, então prefiro não removê-lo do arquivo, o que seria fácil usando regex, mas não quero que ele seja impresso.
Existe uma maneira de suprimir a impressão do campo URL com base no conteúdo desse campo?
Alternativamente, parece que eu poderia desabilitar o campo URL para @book
s com algo como \AtEveryBibitem{\ifentrytype{book}{\clearfield{url}}{}}
mas prefiro corrigir o problema real e manter a capacidade de citar livros com URLs .
Responder1
Você pode usar \DeclareSourcemap
no preâmbulo para remover campos. Aqui está um exemplo completo. (Se você tiver os babadores do Google Books em seus próprios arquivos, você também pode usar \perdatasource
para fazer com que isso se aplique apenas a essa fonte. Consulte a seção 4.5.2 (Modificação dinâmica de dados) na biblatex
documentação!
\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}
Responder2
Para completar, a abordagem alternativa estabelecida por clstr em um comentário é simplesmente comentar as linhas incorretas prefixando-as com // ou%. Eu usaria um regex para isso (já que tenho 300 entradas no meu .bib) no editor ou em um terminal:
sed -r 's/(url\ ?=\ ?\{[a-z:\/]*books\.google\.)/%\1/g oldrefs.bib >newrefs.bib