更新

更新

背景

当使用压缩的作者/年份样式(例如)时authoryear-compbiblatex如果两个作者的姓氏相同,则会使用首字母消除姓名歧义。可以使用选项关闭此消歧功能,以便输出引文中的首字母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}

MWE 输出

相关内容