我刚刚更新到 biblatex 3.14,\DeclareBibliographyAlias
似乎已经停止工作了。我用它来定义一个新的条目类型“重印”,以下 mwe 与 biblatex 3.12 和 3.13 一起工作:
\documentclass{article}
\begin{filecontents*}[overwrite]{\jobname.bib}
@reprint{foo,
author = {foo, P.~A.},
title = {foo},
year = {2000},
}
\end{filecontents*}
\usepackage{biblatex}
\addbibresource{\jobname.bib}
\DeclareBibliographyAlias{reprint}{customa}
\DeclareBibliographyDriver{reprint}{zzz}
\listfiles
\begin{document}
test
\cite{foo}
\printbibliography
\end{document}
使用 biblatex 2018/11/02 v3.12 输出:
使用 biblatex 2019/12/01 v3.14 输出:
答案1
Biber 3.14 对于未知条目类型的行为相当违反直觉,请参阅https://github.com/plk/biber/issues/299:对于未知类型,它将条目类型留空。在 Biber 的下一版本中,情况应该会再次好转,因为未知的空类型将按原样传递。
无论如何,我认为 MWE 中显示的代码从未得到官方支持。
首先,\DeclareBibliographyAlias{reprint}{customa}
如果后面跟着 , 就完全是多余的\DeclareBibliographyDriver{reprint}{...}
。\DeclareBibliographyAlias{reprint}{customa}
只是告诉@reprint
条目使用条目的书目驱动程序@customa
(不存在:@customa
返回到@misc
驱动程序)。但随后\DeclareBibliographyDriver{reprint}{...}
定义了一个 的驱动程序@reprint
。
其次,您只能正式使用数据模型中定义的条目类型。@reprint
未在数据模型中定义,因此使用它可能会导致未定义的行为。
如果要将@reprint
其用作条目类型,则需要将其添加到数据模型中。请参阅如何使用 BibLaTeX/Biber 创建全新的数据类型?
\documentclass{article}
\begin{filecontents}{reprint.dbx}
\DeclareDatamodelEntrytypes{reprint}
\DeclareDatamodelEntryfields[reprint]{
addendum,
author,
doi,
editor,
editortype,
eprint,
eprintclass,
eprinttype,
howpublished,
language,
location,
note,
organization,
pubstate,
subtitle,
title,
titleaddon,
type,
version}
\end{filecontents}
\usepackage[datamodel=reprint]{biblatex}
\DeclareBibliographyDriver{reprint}{zzz}
\begin{filecontents*}[overwrite]{\jobname.bib}
@reprint{foo,
author = {foo, P.~A.},
title = {foo},
year = {2000},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\cite{foo}
\printbibliography
\end{document}
对于一次性操作,您可以使用源映射重新映射@reprint
到@customa
,然后使用定义驱动程序\DeclareBibliographyDriver{customa}{...}
。
\documentclass{article}
\usepackage{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[typesource=reprint, typetarget=customa]
}
}
}
\DeclareBibliographyDriver{customa}{zzz}
\begin{filecontents*}[overwrite]{\jobname.bib}
@reprint{foo,
author = {foo, P.~A.},
title = {foo},
year = {2000},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\cite{foo}
\printbibliography
\end{document}
欲了解更多信息\DeclareBibliographyAlias
,请参阅Biblatex 中条目类型的别名到底是什么关系?别名条目类型的格式应该如何配置?。
我还应该指出,该代码在 3.12 版biblatex
(Biber 2.12)中有效,但在早期版本中无效,因为那些版本将未知类型重新映射到@misc
(参见https://github.com/plk/biber/issues/242)。