\DeclareBibliographyAlias 在 biblatex 3.14 中停止工作

\DeclareBibliographyAlias 在 biblatex 3.14 中停止工作

我刚刚更新到 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)。

相关内容