biblatex 如何检查相同的注释者、介绍的作者等?

biblatex 如何检查相同的注释者、介绍的作者等?

Biblatex 能够检查姓名是否出现在不同的字段中,并能够调整显示的参考资料。例如,如果翻译和注释是由同一个人完成的,biblatex 会创建一个参考资料,用字符串(例如)将两个数据统一起来Trans. and annot. by [person X]。如果我没记错的话,这是在 bibmacro translator+othersstrg(在 biblatex.def 中定义)中使用检查两个姓名是否相等的宏来实现的ifnamesequal

不幸的是,如果字段相等annotator,则introduction不会进行检查。我怎样才能让 biblatex 不会在以下 MWE 中两次显示 Michel García 这个名字?即如何强制 biblatex 检查这两个字段是否相等?

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}

\usepackage[style=verbose-trad2]{biblatex}
\addbibresource{stack.bib}
\begin{document}
\cite{repertorio1972}

\printbibliography
\end{document}

这是书目条目:

@Book{repertorio1972,
title =        {Repertorio de príncipes de España},
year =         1972,
annotator =    {García, Michel},
introduction = {García, Michel},
publisher =    {CSIC},
location =     {Jaén}
}

答案1

这些检查实际上是通过书目宏完成的。组合字符串在本地化模块(文件)中定义lbx。默认定义是说明性的,而不是详尽的;它们没有考虑到注释、介绍、评论、前言和后记作者的所有类型的重叠。但是,您可以修改相关宏以biblatex.def实现所需的输出。例如:

\NewBibliographyString{withannotatorin}
\DefineBibliographyStrings{english}{%
  withannotatorin = {with annots\adddot and intro\adddot}}

\newbibmacro*{withannotatorin}{%
  \ifboolexpr{ test {\ifnameundef{annotator}} or test {\ifnameundef{introduction}}
    or not test {\ifnamesequal{annotator}{introduction}} }
    {}
    {\bibstring{withannotatorin}%
     \setunit{\addspace}%
     \printnames[withannotator]{annotator}%
     \clearname{annotator}%
     \clearname{introduction}}}

\renewbibmacro*{withothers}{%
  \usebibmacro{withcommentator}%
  \clearname{commentator}%
  \newunit
  \usebibmacro{withannotatorin}%
  \usebibmacro{withannotator}%
  \clearname{annotator}%
  \newunit
  \usebibmacro{withintroduction}%
  \clearname{introduction}%
  \newunit
  \usebibmacro{withforeword}%
  \clearname{foreword}%
  \newunit
  \usebibmacro{withafterword}%
  \clearname{afterword}}

相关内容