Wenn Sie eine BIB-Datei von Google Books erhalten, enthält diese, wenig überraschend, einen Link zu Google Books im URL-Feld. Es ist praktisch, diesen in der BIB-Datei zu haben, daher möchte ich ihn lieber nicht aus der Datei entfernen, was mit regulären Ausdrücken einfach wäre, aber ich möchte ihn nicht drucken.
Gibt es eine Möglichkeit, das Drucken des URL-Felds basierend auf dem Inhalt dieses Felds zu unterdrücken?
@book
Alternativ sieht es so aus, als könnte ich das URL-Feld für s mit etwas wie deaktivieren, \AtEveryBibitem{\ifentrytype{book}{\clearfield{url}}{}}
aber ich würde lieber das eigentliche Problem beheben und die Möglichkeit behalten, Bücher mit URLs zu zitieren.
Antwort1
Sie können \DeclareSourcemap
in der Präambel verwenden, um Felder zu entfernen. Hier ist ein vollständiges Beispiel. (Wenn Sie die Google Books-Bibs in einer oder mehreren eigenen Dateien haben, können Sie auch verwenden, \perdatasource
um dies nur auf diese Quelle anzuwenden. Siehe Abschnitt 4.5.2 (Dynamische Änderung von Daten) in der biblatex
Dokumentation!
\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}
Antwort2
Der Vollständigkeit halber sei erwähnt, dass der alternative Ansatz, den clstr in einem Kommentar vorschlägt, einfach darin besteht, die fehlerhaften Zeilen auszukommentieren, indem man ihnen // oder % voranstellt. Ich würde hierfür (da ich 300 Einträge in meiner .bib-Datei habe) entweder im Editor oder von einem Terminal aus einen regulären Ausdruck verwenden:
sed -r 's/(url\ ?=\ ?\{[a-z:\/]*books\.google\.)/%\1/g oldrefs.bib >newrefs.bib