筛选器

筛选器

我正在努力创建混合类型的参考书目。

我在一些网站上发现(像这样这是法语,抱歉),可以这样做:

\printbibliography[type=book,article]

但它会产生错误。

你能帮我吗?

答案1

过滤选项type仅接受一个值,而不能接受用逗号连接的多个值。(在问题的代码示例中,type=book,article将被解析为两个不同的选项。一个选项type=book,过滤书籍,另一个选项称为article,它不存在,因此会引发错误。但即使像type={book,article},可以解决这个问题的方法也无法按预期工作。)

多个更高级别的过滤器选项\printbibliographytypekeyword及其category版本not...)始终通过逻辑

因此不可能写类似的东西

\printbibliography[type=article, type=book]

过滤@article或者 @book秒。

筛选器

对于更复杂的过滤规则通常使用过滤器定义为\defbibfilter。这使我们能够将几个更高级别的检查与逻辑连接词组合在一起不是或者

@book或 的过滤器@article定义如下

\defbibfilter{bookorarticle}{%
  \type{book} \or \type{article}
}

并用作

\printbibliography[filter=bookorarticle, title={Books and Articles}]

总共

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

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

\defbibfilter{bookorarticle}{%
  \type{book} \or \type{article}
}

\defbibfilter{notbookorarticle}{%
  \not \( \type{book} \or \type{article} \)
}

\addbibresource{biblatex-examples.bib}


\begin{document}
\cite{sigfridsson,worman,geer,nussbaum}
\printbibliography[filter=bookorarticle, title={Books and Articles}]
\printbibliography[filter=notbookorarticle, title={The Rest}]
\end{document}

检查

对于可以执行任意代码的更复杂的过滤器,可以定义查看,但\defbibcheck在这里这样做有点过头了。检查没有过滤器的语法糖,因此代码乍一看可能有点令人生畏。与上述相同的测试将编码为

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

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

\defbibcheck{bookorarticle}{%
  \ifentrytype{book}
    {}
    {\ifentrytype{article}
       {}
       {\skipentry}}}

\defbibcheck{notbookorarticle}{%
  \ifentrytype{book}
    {\skipentry}
    {\ifentrytype{article}
       {\skipentry}
       {}}}

\addbibresource{biblatex-examples.bib}


\begin{document}
\cite{sigfridsson,worman,geer,nussbaum}
\printbibliography[check=bookorarticle, title={Books and Articles}]
\printbibliography[check=notbookorarticle, title={The Rest}]
\end{document}

多个nottype

最后,你可以简单地使用几个nottypes (它们用一个) 来剔除除@book和之外的所有类型@article。当然,这需要您了解所有可能的其他条目类型,或者至少了解您使用过的所有条目类型。

在我目前使用的例子中,这非常简单,因为唯一的其他类型是@thesis,但一般来说事情会变得相当长。

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

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

\addbibresource{biblatex-examples.bib}


\begin{document}
\cite{sigfridsson,worman,geer,nussbaum}
\printbibliography[nottype=thesis, nottype=inbook,
                   nottype=incollection, nottype=online,
                   nottype=misc]
\end{document}

答案2

我找到了一个解决办法。

我用了nottype=misc, nottype=...

nottype可以多次使用type,而不是,显然......

相关内容