删除参考书目中的名字

删除参考书目中的名字

我希望使用DeclareNameFormat标准 biblatex 样式的所有代码,但我不想在参考书目中写名字或首字母。是否可以清空常量\namepartgiven \AtEveryBibitem?我想这应该可以解决问题,对吧?如何清除(例如)姓名列表的部分内容?我知道如何清除字段,但不知道如何清除作者姓名的部分内容。

这是一个糟糕的解决方案,例如:

\DeclareNameFormat{author}{\namepartfamily}

因为我失去了“et al.”和所有默认引用样式的智能。

答案1

biblatex已经有一个名为 的名称格式labelname可以实现这一点。如果您使用它,它还允许根据选项消除歧义uniquename。只需将其添加到您的序言中:

\DeclareNameAlias{default}{labelname}

如果您不想在接下来的 MWE 中使用首字母缩写词,那么请忽略该uniquename=init选项。

\documentclass{article}
\begin{filecontents}[overwrite]{\jobname.bib}
@book{a,
  author = {Doe, Jane and Doe, John},
  title = {A Title},
  date = {2021}
}
@book{b,
  author = {Doe, Barry and Doe, Sheila},
  title = {Another Title},
  date = {2021}
}
@book{c,
  author = {Author, An and Writer, Another},
  title = {Yet Another Title},
  date = {2021}
}
\end{filecontents}
\usepackage[uniquename=init]{biblatex}
\addbibresource{\jobname.bib}
\DeclareNameAlias{default}{labelname}
\begin{document}
\nocite{*}
\printbibliography
\end{document}

输出

附录:为什么这会起作用?

biblatex创建一个名为 的引文特殊字段labelname。通常,这只是姓氏,但如果我们需要消除歧义,也可以包括名字或首字母。为了打印此字段,我们需要一种只打印姓氏的姓名格式。此姓名格式定义为biblatex.def

\DeclareNameFormat{labelname}{%
  \ifcase\value{uniquename}%
    \usebibmacro{name:family}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  \or
    \ifuseprefix
      {\usebibmacro{name:given-family}
        {\namepartfamily}
        {\namepartgiveni}
        {\namepartprefix}
        {\namepartsuffixi}}
      {\usebibmacro{name:given-family}
        {\namepartfamily}
        {\namepartgiveni}
        {\namepartprefixi}
        {\namepartsuffixi}}%
  \or
    \usebibmacro{name:given-family}
      {\namepartfamily}
      {\namepartgiven}
      {\namepartprefix}
      {\namepartsuffix}%
  \fi
  \usebibmacro{name:andothers}}

这种格式有消歧义逻辑。但如果不需要消歧义,则调用宏name:family(也在 中定义biblatex.def)仅打印姓氏。

现在我们需要做的就是告诉biblatex在参考书目中打印名称时使用这种格式。最简单、最通用的方法是将默认的名称打印方式从 更改为given-familylabelname我们使用别名来做到这一点:

\DeclareNameAlias{default}{labelname}

但请注意,并非所有参考书目样式都使用default参考书目中的名称格式。有些使用sortname,因此您需要更改它。

相关内容