在根据Slike 的适应症,我无法再打印仅包含我用 声明的类型的条目的参考书目\DeclareBibliographyAlias
。例如,考虑以下 MWE:
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\DeclareBibliographyAlias{course}{book}
\begin{filecontents}{\jobname.bib}
@book{martin,
author = {Martin, Andrew},
title = {History of Robots},
}
@course{olivaw,
author = {Olivaw, Daneel},
title = {How to manipulate humans and not die in the attempt},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography[title=Books, type=book]
\printbibliography[title=Courses, type=course]
\end{document}
日志文件在哪里txt.do/1fg2y,返回的输出为:
但显然应该是:
但是,当我仅传递一个\printbibliography
没有选项的命令时,它会重新识别我的@course
输入,因为输出是:
但它仍然发出警报:
没有适合条目类型 '' 的驱动程序。
关于可能重复的说明
这不是重复的kaba 的问题因为这个问题\DeclareBibliographyAlias
不是主要问题,也没有回答我在这里提出的问题。
答案1
这个问题的根本原因肯定与\DeclareBibliographyAlias 在 biblatex 3.14 中停止工作:Biber 2.14 为数据模型未知的类型生成一个空的条目类型字段。这可以说是一个错误,将在 Biber 2.15 中得到解决。请参阅https://github.com/plk/biber/issues/299。
在\DeclareBibliographyAlias 在 biblatex 3.14 中停止工作很明显,使用\DeclareBibliographyAlias
是多余的,而且很容易争辩说,对于数据模型中未声明的条目类型,以下使用\DeclareBibliographyDriver
不受支持。
这里的事情有点困难。在我们开始之前Biblatex 中条目类型的别名到底是什么关系?别名条目类型的格式应该如何配置?包含一些关于\DeclareBibliographyAlias
可以做什么和不能做什么的背景知识(它还解释了我们所说的“硬”和“软”别名的含义)。
本质上你是在打电话
\DeclareBibliographyAlias{<alias>}{<entrytype>}
<alias>
对于数据模型中未定义的条目类型。
人们可能会对这种支持使用方式进行争论\DeclareBibliographyAlias
,也可能会找到一些biblatex
可以读作支持任一论点的文档片段。
我可能倾向于同意那些观点,即这不受支持并且<alias>
需要\DeclareBibliographyAlias{<alias>}{<entrytype>}
首先使用数据模型进行声明,但绝对不值得为此而争吵。
事实眼下只有在数据模型中声明\DeclareBibliographyAlias{<alias>}{<entrytype>}
时才会起作用<alias>
,所以目前有两种方法可以让它再次起作用。
- 不要使用软别名,而是
\DeclareBibliographyAlias
使用 Biber 源图声明硬别名。 @course
在数据模型中声明。
解决方案 1在所有意图和目的上都将映射@course
到@book
,因此您将无法再轻松地进行筛选type
。您可以使用 来解决这个问题subtype
。
\documentclass{article}
\usepackage[backend=biber]{biblatex}
\DeclareBibliographyAlias{course}{book}
\DeclareSourcemap{
\maps{
\map{
\step[typesource=course, typetarget=book, final]
\step[fieldset=entrysubtype, fieldvalue=course]
}
}
}
\begin{filecontents}{\jobname.bib}
@book{martin,
author = {Martin, Andrew},
title = {History of Robots},
}
@course{olivaw,
author = {Olivaw, Daneel},
title = {How to manipulate humans and not die in the attempt},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography[title=Books, type=book, notsubtype=course]
\printbibliography[title=Courses, subtype=course]
\end{document}
解决方案 2涉及定义一个自定义.dbx
文件,使@course
知道biblatex
。由于您将其别名@course
为 ,因此@book
我刚刚将字段声明改为@book
我刚刚从中blx-dm.def(链接到 CTAN 上的当前版本)kpsewhich blx-dm.def
(您可以通过在命令行中输入来找到安装在您的机器上的文件的路径)。
\documentclass{article}
\begin{filecontents}{course.dbx}
\ProvidesFile{course.dbx}[2020/08/11 biblatex datamodel extension for @course type]
\DeclareDatamodelEntrytypes{course}
\DeclareDatamodelEntryfields[course]{
author,
addendum,
afterword,
annotator,
chapter,
commentator,
edition,
editor,
editora,
editorb,
editorc,
editortype,
editoratype,
editorbtype,
editorctype,
eid,
foreword,
introduction,
isbn,
language,
location,
maintitle,
maintitleaddon,
mainsubtitle,
note,
number,
origlanguage,
pages,
pagetotal,
part,
publisher,
pubstate,
series,
subtitle,
title,
titleaddon,
translator,
volume,
volumes}
\end{filecontents}
\usepackage[backend=biber, datamodel=course]{biblatex}
\DeclareBibliographyAlias{course}{book}
\begin{filecontents}{\jobname.bib}
@book{martin,
author = {Martin, Andrew},
title = {History of Robots},
}
@course{olivaw,
author = {Olivaw, Daneel},
title = {How to manipulate humans and not die in the attempt},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography[title=Books, type=book]
\printbibliography[title=Courses, type=course]
\end{document}
在这两种情况下你都会得到所需的输出