Скрыть определенные URL-адреса в библиографии

Скрыть определенные URL-адреса в библиографии

Если вы получаете файл .bib из google books, неудивительно, что в поле URL есть ссылка на google books. Это удобно иметь в файле .bib, поэтому я бы предпочел не удалять его из файла, что было бы легко сделать с помощью regex, однако я не хочу, чтобы он печатался.

Есть ли способ запретить печать поля URL на основе содержимого этого поля?

В качестве альтернативы, похоже, я мог бы отключить поле URL для @books с помощью чего-то вроде , \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

Связанный контент