如果您從 google 圖書獲得 .bib 文件,不出所料,它的 URL 欄位中有一個指向 google 圖書的連結。這在 .bib 檔案中很方便,所以我不想將其從檔案中刪除,使用正規表示式很容易,但我不希望它列印。
有沒有辦法根據 URL 欄位的內容禁止列印該欄位?
或者,看起來我可以使用@book
類似的方法禁用 s 的URL 字段\AtEveryBibitem{\ifentrytype{book}{\clearfield{url}}{}}
,但我寧願解決真正的問題並保留使用 URL 引用書籍的能力。
答案1
您可以\DeclareSourcemap
在序言中使用來刪除欄位。這是一個完整的例子。 (如果您在自己的文件中擁有Google圖書書目,您也可以使用\perdatasource
它使其僅適用於該來源。請參閱biblatex
文件中的第 4.5.2 節(資料的動態修改)!
\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 在註解中提出的替代方法是透過在有問題的行前面加上 // 或 % 來註解它們。我會在編輯器或終端機中使用正規表示式(因為我的 .bib 中有 300 個條目):
sed -r 's/(url\ ?=\ ?\{[a-z:\/]*books\.google\.)/%\1/g oldrefs.bib >newrefs.bib