The underlying cause of the problem here is definitely the same as in \DeclareBibliographyAlias stopped working in biblatex 3.14: Biber 2.14 produces an empty entry type field for types not known to the data model. That is arguably a bug and will be resolved in Biber 2.15. See https://github.com/plk/biber/issues/299.
In \DeclareBibliographyAlias stopped working in biblatex 3.14 it was pretty clear that the use of \DeclareBibliographyAlias was superfluous and it could easily be argued that the following use of \DeclareBibliographyDriver for an entry type not declared in the data model is not supported.
Here, things are a bit more difficult. Before we start What exactly is the relationship Biblatex refers to as an alias of an entry type? And how should the formatting of aliased entry types be configured? contains some background about what \DeclareBibliographyAlias does and does not do (it also explains what we mean with 'hard' and 'soft' aliases).
Essentially you are calling
\DeclareBibliographyAlias{<alias>}{<entrytype>}
for an entry type <alias> that is not defined in the data model.
One could probably argue for and against this being supported use of \DeclareBibliographyAlias and it is probably possible to find bits and pieces of the biblatex documentation that can be read as supporting either argument.
I'd probably be inclined to side with those saying that this isn't supported use and that the <alias> in \DeclareBibliographyAlias{<alias>}{<entrytype>} needs to be declared with the data model first, but it definitely is not worth starting a fight about this.
The matter of the fact at the moment is that \DeclareBibliographyAlias{<alias>}{<entrytype>} will only work if <alias> is declared in the data model, so currently there are two ways to make things work again.
- Instead of the soft alias from
\DeclareBibliographyAlias declare a hard alias with a Biber sourcemap.
- Declare
@course in the data model.
Solution 1 will map @course to @book for all intents and purposes, so you wouldn't be able to filter by type easily any more. You could work around that using 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}
Solution 2 involves defining a custom .dbx file that makes @course know to biblatex. Since you alias @course to @book I just took the field declarations for @book from blx-dm.def (link to the current version on CTAN) (you can find the path of the file installed on your machine by typing kpsewhich blx-dm.def in the command line).
\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}
In both cases you get the desired output
