我希望使用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-family
。labelname
我们使用别名来做到这一点:
\DeclareNameAlias{default}{labelname}
但请注意,并非所有参考书目样式都使用default
参考书目中的名称格式。有些使用sortname
,因此您需要更改它。