Suprimir ciertas URL en la bibliografía

Suprimir ciertas URL en la bibliografía

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 @books 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 \DeclareSourcemapen 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 \perdatasourcepara que esto se aplique solo a esa fuente. Consulte la sección 4.5.2 (Modificación dinámica de datos) en la biblatexdocumentació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

información relacionada