按 \printbibliograhy 上的 bibkey 列表进行过滤

按 \printbibliograhy 上的 bibkey 列表进行过滤

我目前正在使用它biblatex来创建文档。我想知道是否可以仅使用 bibkeys 来拆分参考书目。

我们的想法是利用

\printbibliography[title=Primal,key={KEY1,KEY2}]
\printbibliography[title=Complementary,notkey={KEY1,KEY2}]

KEY1KEY2在此指定与参考文献相关的 bibkeys。我知道我可以使用参考文献中的关键字进行过滤,但如果可能的话,我想避免这样做。

答案1

按输入键过滤的方法非常不具语义性,也许可以找到一种更优雅的解决方案,即基于关键字、输入类型或其他固定标准,而不是任意输入键。但这并不是说,在某些情况下,按输入键拆分或分组不是最佳或最明智的解决方案。

一个相当优雅的解决方案是使用类别。书目类别旨在从文档内部动态地对条目进行分类/分组.tex,而不是在(更静态的).bib数据中(这才keywords是正确的方法)。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\DeclareBibliographyCategory{keys}
\addtocategory{keys}{sigfridsson,nussbaum}

\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson,worman,nussbaum,geer}
\printbibliography[category=keys]
\printbibliography[notcategory=keys]
\end{document}

两个参考书目,每个参考书目有两个条目:第一个是 <code>nussbaum</code> 和 <code>sigfridsson</code>,第二个是 <code>geer</code> 和 <code>worman</code>


不太优雅的蛮力方法是使用 bibchecks,随着列表的增长,它会变得有点混乱,但可以更容易地与其他类型的测试相结合。

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}

\defbibcheck{keys}{%
  \iffieldequalstr{entrykey}{sigfridsson}
    {}
    {\iffieldequalstr{entrykey}{nussbaum}
       {}
       {\skipentry}}}

\defbibcheck{notkeys}{%
  \iffieldequalstr{entrykey}{sigfridsson}
    {\skipentry}
    {\iffieldequalstr{entrykey}{nussbaum}
       {\skipentry}
       {}}}

\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{sigfridsson,worman,nussbaum,geer}
\printbibliography[check=keys]
\printbibliography[check=notkeys]
\end{document}

输出将是相同的。

相关内容