我想问如何检查某个类别是否为非 epmty。有一个书目数据库和许多已定义的 biblatex 类别。我\printbibliography{category=XYZ}
只需要(以循环方式)针对至少有一个项目属于的类别发出。有类似的东西吗\ifcategoryempty{}
?
答案1
没有内置的\ifcategoryempty
,但如果您知道类别是如何实现的,则很容易定义一个。在内部,类别只是一个名为的列表,blx@catg@<category name>
其中包含属于该类别的所有条目键。因此,检查类别是否为空与检查列表是否为空一样简单。
如果要打印至少有一个条目的所有类别,可以使用\bibbycategory
。它将循环遍历所有已定义的类别(按声明顺序),并为每个非空类别打印参考书目。确保为每个类别定义参考书目标题,这样就biblatex
知道要将什么作为标题。
MWE 显示\ifcategoryempty
和\bibbycategory
。
\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, backend=biber]{biblatex}
\DeclareBibliographyCategory{twoentries}
\DeclareBibliographyCategory{oneentry}
\DeclareBibliographyCategory{noentries}
\addtocategory{twoentries}{sigfridsson}
\addtocategory{twoentries}{nussbaum}
\addtocategory{oneentry}{geer}
\defbibheading{twoentries}{\section*{A First Category}}
\defbibheading{oneentry}{\section*{A Second Category}}
\defbibheading{noentries}{\section*{Nothing to see here}}
\newcommand*{\ifcategoryempty}[1]{\ifcsvoid{blx@catg@#1}}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson,nussbaum,geer}
\ifcategoryempty{twoentries}{T}{F}
\ifcategoryempty{oneentry}{T}{F}
\ifcategoryempty{noentries}{T}{F}
\bibbycategory
\end{document}