![Biblatex 使用 loadfiles 时删除没有注释字段的条目](https://linux22.com/image/445986/Biblatex%20%E4%BD%BF%E7%94%A8%20loadfiles%20%E6%97%B6%E5%88%A0%E9%99%A4%E6%B2%A1%E6%9C%89%E6%B3%A8%E9%87%8A%E5%AD%97%E6%AE%B5%E7%9A%84%E6%9D%A1%E7%9B%AE.png)
我正在使用 Biblatex,并想删除注释字段为空的条目。此处描述的解决方案有效:biblatex 阅读风格 - 如何删除没有注释的条目?。但是当使用“loadfiles”作为注释的外部存储时,它不起作用。有人能告诉我如何在使用“loadfiles”选项时让它工作吗?
答案1
如果您想检查选项annotation
加载的文件loadfiles
,您不能使用 Biber 源映射,因为 Biber 没有界面来检查这些文件是否存在。
不过,您可以定义 bibcheck 来查找文件。下面的 bibcheck 会显示条目,看它是否有字段annotation
,或者是否找到了注释文件loadfiles
。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=reading]{biblatex}
\defbibcheck{hasannotation}{%
\iffieldundef{annotation}
{\IfFileExists{\bibannotationprefix\thefield{entrykey}.tex}
{}
{\skipentry}}
{}%
}
\begin{filecontents}{\jobname.bib}
@book{elk,
author = {Anne Elk},
title = {A Theory on Brontosauruses},
year = {1972},
publisher = {Monthy \& Co.},
location = {London},
annotation = {This is an inline annotation},
}
@book{belk,
author = {Anne Belk},
title = {A Theory on Triceratops},
year = {1973},
publisher = {Monthy \& Co.},
location = {London},
}
@book{celk,
author = {Anne Clk},
title = {A Theory on Pterodactylus},
year = {1974},
publisher = {Monthy \& Co.},
location = {London},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{filecontents}{bibannotation-belk.tex}
This is a file annotation.
\end{filecontents}
\begin{document}
Lorem \autocite{elk,belk,celk}
\printbibliography[check=hasannotation]
\end{document}
请注意,bibcheck 比 Biber sourcemap 弱,因为 Biber sourcemap 会从所有 Biber 处理中丢弃条目。bibcheck 只会隐藏相关参考书目中的条目。标签唯一性和其他功能仍将适用于隐藏的条目。