Si obtiene un archivo .bib de Google Books, como era de esperar, tendrá un enlace a Google Books en el campo URL. Es útil tener esto en el archivo .bib, por lo que prefiero no eliminarlo del archivo, lo cual sería fácil usando expresiones regulares, sin embargo, no quiero que se imprima.
¿Existe alguna forma de suprimir la impresión del campo URL según el contenido de ese campo?
Alternativamente, parece que podría desactivar el campo URL para @book
s con algo como \AtEveryBibitem{\ifentrytype{book}{\clearfield{url}}{}}
pero prefiero solucionar el problema real y conservar la capacidad de citar libros con URL.
Respuesta1
Puede utilizar \DeclareSourcemap
en el preámbulo para eliminar campos. Aquí tienes un ejemplo completo. (Si tiene los bibs de Google Books en sus propios archivos, también puede usarlos \perdatasource
para que esto se aplique solo a esa fuente. Consulte la sección 4.5.2 (Modificación dinámica de datos) en la biblatex
documentación.
\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}
Respuesta2
Para completar, el enfoque alternativo establecido por clstr en un comentario es simplemente comentar las líneas ofensivas anteponiéndolas con // o %. Usaría una expresión regular para esto (ya que tengo 300 entradas en mi .bib) ya sea en el editor o desde una terminal:
sed -r 's/(url\ ?=\ ?\{[a-z:\/]*books\.google\.)/%\1/g oldrefs.bib >newrefs.bib