biblatex:为什么@mvbook 不能作为容器工作(像@set 一样)?

biblatex:为什么@mvbook 不能作为容器工作(像@set 一样)?

最近我经常使用@set容器,偶然发现了这个问题:为什么像 这样的条目类型@mvbook不接受entryset = {...}这样的条目类型@set?对我来说,这是有道理的——一个书目条目作为一个容器,一个接一个地包含 这样的条目@set类型,类似于biblatex/biber“设置”的附加字段但可以选择提供扩展数据...

答案1

回答为什么如果不询问 Philipp Lehman,可能无法得出结论,但这里有一些想法。

对于标准样式@mvbook, /本质上与/@mvcollection相同。 /背后的想法是,如果在参考书目中提及整个作品而不是单独提及每个组成部分是有意义的,那么它可以用作多卷作品的“总条目”。如果有人经常引用像大英百科全书这样的多卷参考书目,那么只引用整个作品一次而不必将每卷分别添加到参考书目中可能会很有用。然后可以使用命令引用/的特定卷。注意,条目本身的数据通常并不引用其组成的“子”卷。这些条目类型是在v1.2 中与增强的数据继承方案一起引入的。@book@collection@mvbook@mvcollection\volcite@mvbook@mvcollection@mv...biblatex

@set条目是一些数字引用样式的概念(我相信主要来自化学和物理学),它允许将多个参考文献组合成一个父参考文献,因为假设这些参考文献要么总是一起引用,要么以某种方式相关,因此不仅在引用中将它们放在一起是有意义的,而且在参考书目条目中也是如此。该@set概念不假设集合条目的数据之间存在其他关系,也无法处理子条目数据之间的特殊关系(例如,所有条目都具有相同的作者集的情况)。biblatex只是合并了mcite包裹@set这里。及其字段的具体行为entryset在 Biber 中是硬编码的,无法使用 中的数据模型宏进行更改biblatex

目前,除 之外的类型@set尚未设置为使用entryset字段并类似地工作@set- 我认为主要是因为到目前为止没有人要求这样做。整个框架并未设置为处理entryset任意条目类型:大概这些子项不能仅使用每个条目的完整书目驱动程序来处理,而是必须实现对某些父子关系的非常复杂的处理。有些事情几乎确实如此,但不完全如此。

在 2.0 版中,biblatex添加了related可用于描述参考书目条目之间某些类型关系的功能。通常,这些关系以这样的方式实现:一个“父”条目具有related条目,然后与父条目一起显示。通常related条目不会以自己的权利出现在参考书目中,它们不能被引用(如果它们可以被引用,它们会与父条目分开出现在参考书目中)。只需很少的工作就可以完成related您想要的一切,除了设置引用之外。由于相关的子项本身不能被引用,因此您必须使用\volcite

你的biblatex/biber“设置”的附加字段从可能看起来像

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[babel,german=quotes]{csquotes}
\usepackage[doi=false,backend=biber,subentry,sorting=nyt,style=numeric-comp]{biblatex}


\renewbibmacro*{related:multivolume}[1]{%
  \entrydata*{#1}{%
    \printtext{%
      \printfield{volume}%
      \printfield{part}}%
    \setunit*{\addcolon\space}%
    \usebibmacro{title}%
    \ifboolexpr{
      test {\ifnamesequal{author}{savedauthor}}
      or
      test {\ifnameundef{author}}
    }
      {}
      {\usebibmacro{bytypestrg}{author}{author}%
       \setunit{\addspace}%
       \printnames[byauthor]{author}
       \newunit\newblock}%
    \ifboolexpr{
      test {\ifnamesequal{editor}{savededitor}}
      or
      test {\ifnameundef{editor}}
    }
      {}
      {\usebibmacro{byeditor+others}%
       \newunit\newblock}%
    \ifboolexpr{
      test {\iflistsequal{location}{savedlocation}}
      or
      test {\iflistundef{location}}
    }
      {}
      {\printlist{location}}%<- typo
    \ifboolexpr{
      test {\iflistsequal{publisher}{savedpublisher}}
      or
      test {\iflistundef{publisher}}
    }
      {\setunit*{\addcomma\space}}
      {\setunit*{\addcolon\space}%
       \printlist{publisher}%
       \setunit*{\addcomma\space}}%
  \printdate%
  \newunit\newblock
  \ifboolexpr{
    test {\iffieldsequal{isbn}{savedisbn}}
    or
    not togl {bbx:isbn}
  }
    {}
    {\printfield{isbn}}}}


\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@mvbook{A,
  author      = {René Goscinny and Albert Uderzo},
  sorttitle   = {Asterix und Obelix 00},
  sortyear    = {1959},
  maintitle   = {Asterix und Obelix},
  location    = {Paris},
  related     = {A:V1,A:V2,A:V3,A:V4,A:V5},
  relatedtype = {multivolume},
}
@Book{A:V1,
  crossref    = {A},
  volume      = {1},
  title       = {Asterix der Gallier},
  sorttitle   = {Asterix und Obelix 01},
  year        = {1959},
  publisher   = {Dargaud},
  options     = {dataonly},
}
@Book{A:V2,
  crossref    = {A},
  title       = {Asterix und Kleopatra},
  volume      = {2},
  sorttitle   = {Asterix und Obelix 02},
  year        = {1968},
  publisher   = {Dargaud},
  options     = {dataonly},
}
@Book{A:V3,
  crossref    = {A},
  title       = {Asterix als Gladiator},
  volume      = {3},
  sorttitle   = {Asterix und Obelix 03},
  year        = {1969},
  publisher   = {Dargaud},
  options     = {dataonly},
}
@Book{A:V4,
  crossref    = {A},
  title       = {Der Kampf der Häuptlinge},
  volume      = {4},
  msorttitle  = {Asterix und Obelix 04},
  year        = {1969},
  publisher   = {Dargaud},
  options     = {dataonly},
}
@Book{A:V5,
  crossref    = {A},
  title       = {Die goldene Sichel},
  volume      = {5},
  sorttitle   = {Asterix und Obelix 05},
  year        = {1970},
  publisher   = {Ehapa-Verlag},
  options     = {dataonly},
}
@Book{A:VX,
  crossref    = {A},
  title       = {Tour de France},
  volume      = {6},
  sorttitle   = {Asterix und Obelix 06},
  year        = {1970},
  publisher   = {Ehapa-Verlag},
  location    = {Berlin},
}
\end{filecontents}

\addbibresource{\jobname.bib}

\begin{document}
\volcite{1}{A}

\cite{A,A:VX}
\printbibliography
\end{document}

引用仅显示为“1”、“2”或“1, vol. 1”。参考书目看起来几乎符合要求。

相关内容