BibLaTeX:如何检查某个类别是否非空?

BibLaTeX:如何检查某个类别是否非空?

我想问如何检查某个类别是否为非 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}

Sigfridsson 和 Ryde 1998;Nussbaum 1978;Geer 1985//FFT//然后遵循两个参考书目

相关内容