Biblatex 中条目类型的别名到底是什么关系?别名条目类型的格式应该如何配置?

Biblatex 中条目类型的别名到底是什么关系?别名条目类型的格式应该如何配置?

根据 Biblatex 的手册,标准样式将@review其视为@article

对其他一些作品的评论。这是该@article类型的更具体变体。标准样式会将此条目类型视为 的别名@article

这让我以为这两种输入方式应该采用相同的格式。然而,事实似乎并非如此:

\begin{filecontents}{\jobname.bib}
@article{article,
  author    =   {Mouse, A.},
  title     =   {A Tall Tail},
  journal   =   {Tales to Nibble By},
  pages     =   {1--9},
  volume    =   31,
  number    =   4,
  year      =   1989,
}
@review{review,
  author    =   {Vole, Adrian},
  title     =   {Review of \emph{Great Grasses}, by A. N. Other-Mouse},
  journal   =   {Tales to Nibble By},
  pages     =   {23--4},
  volume    =   32,
  number    =   2,
  year      =   1990
}
\end{filecontents}

\documentclass{article}
\usepackage{biblatex}
\bibliography{\jobname}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

啮齿类动物参考文献

请注意两个区别:

  • 标题@review用斜体表示;@article标题是引用的。

  • vol.包含在@review案件中但不是@article案件。

.bbx然而,包含该字符串的唯一标准文件reviewstandard.bbx包含以下行的文件:

\DeclareBibliographyAlias{review}{article}

此外,在我看来,.sty.def文件等中没有明显的东西可以解释这些差异。这里有一些提及review,但大多是以字符串形式出现的,例如reviewof等,我认为它们不负责格式化条目类型为@review

Biblatex 中条目类型的关系到底是什么alias?别名条目类型的格式应该如何配置?

答案1

根据biblatex文档,第 126 页,\DeclareBibliographyAlias{alias}{type}内容如下:

如果书目驱动程序涵盖多种条目类型,则可以使用此命令定义别名,其中entrytype是已定义驱动程序的名称。

当您使用\DeclareBibliographyAlias{alias}{type}内部发生的情况(参见biblatex2.sty)是

\newrobustcmd*{\DeclareBibliographyAlias}[2]{%
  \csedef{blx@bbx@#1}{%
    \expandafter\noexpand\csname blx@bbx@#2\endcsname}}

因此\blx@bbx@alias只需扩展为\blx@bbx@type。该命令\blx@bbx@<type>用于打印参考书目列表(及相关内容)并“调用”通过 声明的驱动程序\DeclareBibliographyDriver{type}

对于所有其他目的,biblatex仍然知道实际的入口类型。只是驾驶员被重新安排了路线。

您注意到的差异是由于不同的\DeclareFieldFormat指令造成的。@article得到特殊处理,即

\DeclareFieldFormat
  [article,inbook,incollection,inproceedings,patent,thesis,unpublished]
  {title}{\mkbibquote{#1\isdot}}
\DeclareFieldFormat[article,periodical]{volume}{#1}% volume of a journal

@review没有,并默认为标准

\DeclareFieldFormat{title}{\mkbibemph{#1}}
\DeclareFieldFormat{volume}{\bibstring{volume}~#1}% volume of a book

格式化代码遍布整个biblatex2.sty。它主要包含对 的调用\blx@getformat,分解为对表单定义主机的切换abx@#2@\blx@imc@thefield{entrytype}@#4(此处#2是字段“id”和#4字段名称)。在这里我们可以看到实际的条目类型用于格式化。

总而言之,\DeclareBibliographyAlias它实际上只是一个用于参考书目目的别名,实际上用途更少:仅用于驱动程序,格式化仍然使用通常的(非别名)类型完成。


对于完整别名,Biber 源映射(如中定义的源映射)biblatex.def可能更合适(摘自 的代码biblatex.def

\DeclareDriverSourcemap[datatype=bibtex]{
  \map{
    \step[typesource=conference, typetarget=inproceedings]
    \step[typesource=electronic, typetarget=online]
    \step[typesource=www,        typetarget=online]
  }
}

答案2

moewe 给出了很好的答案我将其作为一个简单的脚注附加到其中,但我认为添加有关我现在针对该类型进行具体配置的方式的详细信息可能会很有用@review

在我的 中,我添加了以下几行来配置和字段biblatex.cfg的格式。遵循的格式;遵循的格式:volumetitlevolume@articletitle@suppperiodical

\DeclareFieldFormat[review]{volume}{#1}
\DeclareFieldFormat[review]{title}{#1}

因为我也有in:宏的自定义配置@article(来自这里),我还调整了这段代码:

% https://tex.stackexchange.com/a/10686/
\renewbibmacro{in:}{%
  \ifentrytype{article}{}{%
    \ifentrytype{review}{}{% apply to @review entries, too
      \printtext{\bibstring{in}\intitlepunct}%
    }%
  }%
}

对于有问题的 MWE(缺少修改in:),这将产生:

修订的啮齿类动物参考文献

\begin{filecontents}{\jobname.bib}
@article{article,
  author    =   {Mouse, A.},
  title     =   {A Tall Tail},
  journal   =   {Tales to Nibble By},
  pages     =   {1--9},
  volume    =   31,
  number    =   4,
  year      =   1989,
}
@review{review,
  author    =   {Vole, Adrian},
  title     =   {Review of \emph{Great Grasses}, by A. N. Other-Mouse},
  journal   =   {Tales to Nibble By},
  pages     =   {23--4},
  volume    =   32,
  number    =   2,
  year      =   1990
}
\end{filecontents}

\documentclass{article}
\usepackage{biblatex}
\DeclareFieldFormat[review]{volume}{#1}
\DeclareFieldFormat[review]{title}{#1}
\bibliography{\jobname}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

我不确定这是否是格式化评论标题的最佳方式。(我知道这取决于风格。)但书籍类型格式和文章类型格式似乎都不太合适。

相关内容