![筛选器](https://linux22.com/image/404566/%E7%AD%9B%E9%80%89%E5%99%A8.png)
我正在努力创建混合类型的参考书目。
我在一些网站上发现(像这样这是法语,抱歉),可以这样做:
\printbibliography[type=book,article]
但它会产生错误。
你能帮我吗?
答案1
过滤选项type
仅接受一个值,而不能接受用逗号连接的多个值。(在问题的代码示例中,type=book,article
将被解析为两个不同的选项。一个选项type=book,
过滤书籍,另一个选项称为article
,它不存在,因此会引发错误。但即使像type={book,article},
可以解决这个问题的方法也无法按预期工作。)
多个更高级别的过滤器选项\printbibliography
(type
、keyword
及其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
最后,你可以简单地使用几个nottype
s (它们用一个和) 来剔除除@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
,而不是,显然......