背景
当使用压缩的作者/年份样式(例如)时authoryear-comp
,biblatex
如果两个作者的姓氏相同,则会使用首字母消除姓名歧义。可以使用选项关闭此消歧功能,以便输出引文中的首字母uniquename=false
。这可以抑制首字母,但无法进一步压缩两个姓名。
当然,这种行为是有道理的,因为biblatex/biber
无法分辨两个名字略有不同的作者是同一个人。但人类可以。
问题
有没有办法biblatex/biber
将两个不相同的名称视为相同的名称以进行压缩?如果有,怎么做?
基本原理
为了避免“不要这样做”的评论,有相当合理的理由想要这样做。作者的名字在出版作品中出现的方式有时非常不一致,有时名字缩写,有时不缩写,有时中间有首字母,有时没有。因此,允许某种名称“别名”会很有用,它可以告诉biblatex/biber
将名称的所有实例视为相同的,以便进行uniquename
压缩。规范化.bib
文件中的名称并不是一个真正的选择,因为这样它们将与实际发布的名称不匹配。
平均能量损失
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{Smith2000,
Author = {Smith, John},
Title = {Some dubious results},
Journal = {A Great Journal},
Year = {2000},
Volume = {1},
Number = {1}
}
@article{Smith2001,
Author = {Smith, John A.},
Title = {Some more dubious results},
Journal = {A Great Journal},
Year = {2001},
Volume = {1},
Number = {1}
}
\end{filecontents*}
\usepackage[style=authoryear-comp,uniquename=false]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\parencite{Smith2000,Smith2001}
\printbibliography
\end{document}
MWE 的输出
期望输出
我只想更改压缩的引文标注,而不是更改参考书目输出本身。
答案1
值得庆幸的是,这个功能已经存在。请参阅\DeclareLabelname
手册biblatex
。您可以使用shortauthor
字段指定“Smith”作为labelname
,它们将按您的需要压缩。
更新
你也可以使用源映射,这样你就不需要调整你的bib
。像这样:
\DeclareSourcemap{
\maps{
% Smith, John A.
\map{
\step[fieldsource=author, match={Smith, John}, final]
\step[fieldset=shortauthor, fieldvalue={Smith, John A.}]
}
\map{
\step[fieldsource=author, match={Smith, J. A.}, final]
\step[fieldset=shortauthor, fieldvalue={Smith, John A.}]
}
% Doe, Jane B.
\map{
\step[fieldsource=editor, match={Doe, Jane}, final]
\step[fieldset=shorteditor, fieldvalue={Doe, Jane B.}]
}
\map{
\step[fieldsource=editor, match={Doe, J. B}, final]
\step[fieldset=shorteditor, fieldvalue={Doe, Jane B.}]
}
}
}
原始 MWE
\documentclass{article}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@article{Smith2000,
Author = {Smith, John},
ShortAuthor = {Smith},
Title = {Some dubious results},
Journal = {A Great Journal},
Year = {2000},
Volume = {1},
Number = {1}
}
@article{Smith2001,
Author = {Smith, John A.},
ShortAuthor = {Smith},
Title = {Some more dubious results},
Journal = {A Great Journal},
Year = {2001},
Volume = {1},
Number = {1}
}
\end{filecontents*}
\usepackage[style=authoryear-comp,uniquename=false]{biblatex}
\addbibresource{\jobname.bib}
\begin{document}
\parencite{Smith2000,Smith2001}
\printbibliography
\end{document}