\DeclareBibliographyAlias 不起作用

\DeclareBibliographyAlias 不起作用

在根据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>,所以目前有两种方法可以让它再次起作用。

  1. 不要使用软别名,而是\DeclareBibliographyAlias使用 Biber 源图声明硬别名。
  2. @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}

在这两种情况下你都会得到所需的输出

两个书目,每个书目有一个条目:一个是书籍,一个是课程。

相关内容