BibLateX/Biber 错误地对作者姓氏中带有连字符的条目进行排序

BibLateX/Biber 错误地对作者姓氏中带有连字符的条目进行排序

更新2

我现在终于明白,这种行为确实是一个需要根据需要进行修改的功能。非常感谢@moewe 在这方面对我的教育。我现在已将他的/她的答案设置为接受的答案,因为它比之前的答案更完整。总之,Biber 允许您微调排序行为。请查看此问题的已接受答案以获取更多详细信息和指示。

更新 1

根据 Biber 文档第 22 页,我可以在一定程度上证实 Benedikt 和 Werner 的解释。连字符前的字符似乎被视为前缀。但这里更有趣的是 - 这仅在以下情况下发生:连字符前恰好两个字符。我通过尝试 1 个字符(A-Masri, D-Masri)、2 个字符(Al-Masri, Ax-Masri)和 3 个字符(Ala-Masri)确认了这一点。对于 1 个字符和 3 个字符的试验,排序工作正常。在我看来,引擎代码没有真正实用的修复方法。因此,我(目前)向其他面临此问题的人建议依靠sortname解决方法。


原始帖子

我观察到我的书目条目排序(按作者姓名)的行为不正确。我有一个条目,其主要作者的姓氏(排序键)包含连字符。这似乎导致引擎丢弃连字符之前的所有内容作为键的一部分。

以下是 MWE:

\documentclass{article}

\begin{filecontents}{references.bib}
@inproceedings{maleshkova2010investigating,
  title={Investigating web apis on the world wide web},
  author={Maleshkova, Maria and Pedrinaci, Carlos and Domingue, John},
  booktitle={Web Services (ECOWS), 2010 IEEE 8th European Conference on},
  pages={107--114},
  year={2010},
  organization={IEEE}
}

@inproceedings{al2007wsce,
  title={WSCE: A crawler engine for large-scale discovery of web services},
  author={Al-Masri, Eyhab and Mahmoud, Qusay H.},  % Notice the name here
  booktitle={Web Services, 2007. ICWS 2007. IEEE International Conference on},
  pages={1104--1111},
  year={2007},
  organization={IEEE}
}
\end{filecontents}

\usepackage[backend=biber,style=authoryear,sorting=nyt]{biblatex}
\addbibresource{references.bib}
\nocite{*}

% ========= %

\begin{document}

\printbibliography

\end{document}

这会导致以下(不正确的)输出:

按姓氏排序不正确

我发现删除连字符可以Al-Masri纠正排序。因此似乎用连字符引擎认为名称是Masri,这是不正确的。

这是错误还是功能?如果是前者,该如何修复?如果是后者,我该如何解决?

答案1

正如您在编辑的问题中指出的那样,这不是一个错误,而是一个功能(但对我们来说幸运的是,它是一个可以控制和定制的功能)。

Biber 允许对异常进行排序以及在创建首字母时出现异常。这些异常可以分别用\DeclareNosort{}和声明\DeclareNoinit{}

如果不存在命令,Biber 将默认

\DeclareNosort{
  % strip prefixes like 'al-' when sorting names
  \nosort{type_names}{\regexp{\A\p{L}{2}\p{Pd}}}
  % strip diacritics when sorting names
  \nosort{type_names}{\regexp{[\x{2bf}\x{2018}]}}
}

\DeclareNoinit{
  % strip lowercase prefixes like 'al-' when generating initials from names
  \noinit{\regexp{\b\p{Ll}{2}\p{Pd}}}
  % strip diacritics when generating initials from names
  \noinit{\regexp{[\x{2bf}\x{2018}]}}
}

正如注释中解释的那样,第一行将删除al-/Al-前缀(正则表达式匹配字符串开头的两个字母,后跟一个标点符号),因此我们可以删除这些行来获得

\DeclareNosort{
  % strip diacritics when sorting names
  \nosort{type_names}{\regexp{[\x{2bf}\x{2018}]}}
}

\DeclareNoinit{
  % strip diacritics when generating initials from names
  \noinit{\regexp{[\x{2bf}\x{2018}]}}
}

这将按预期对列表进行排序,因为“al-”/“Al-”前缀不再被忽略,此外它们也将被视为首字母,如果您不想要这样,只需将命令\DeclareNoinit{}全部省略即可。

另请参阅 §4.5.6控制姓名首字母生成和第 4.5.7 节微调排序,第 164-166 页biblatex文档

如果你不想在写文档时将此行放在序言中,你可以考虑biblatex.cfg使用 Biber 配置文件(有关更多信息,请参阅Biber 文档, §3.1选项和配置文件,第 9 页)

平均能量损失

\documentclass{article}
\begin{filecontents}{\jobname.bib}
@inproceedings{maleshkova2010investigating,
  title={Investigating web apis on the world wide web},
  author={Maleshkova, Maria and Pedrinaci, Carlos and Domingue, John},
  booktitle={Web Services (ECOWS), 2010 IEEE 8th European Conference on},
  pages={107--114},
  year={2010},
  organization={IEEE}
}

@inproceedings{al2007wsce,
  title={WSCE: A crawler engine for large-scale discovery of web services},
  author={Al-Masri, Eyhab and Mahmoud, Qusay H.},  % Notice the name here
  booktitle={Web Services, 2007. ICWS 2007. IEEE International Conference on},
  pages={1104--1111},
  year={2007},
  organization={IEEE}
}
\end{filecontents}

\usepackage[backend=biber,style=authoryear,sorting=nyt]{biblatex}
\addbibresource{\jobname.bib}
\nocite{*}

\DeclareNosort{
  % strip diacritics when sorting names
  \nosort{type_names}{\regexp{[\x{2bf}\x{2018}]}}
}

\DeclareNoinit{
  % strip diacritics when generating initials from names
  \noinit{\regexp{[\x{2bf}\x{2018}]}}
}

\begin{document}
  \printbibliography
\end{document}

在此处输入图片描述

答案2

作为一种解释,我只能想象,biber或者biblatex将名称中的“al”部分视为某种名称前缀,类似于荷兰名称中的“de”。

我确信我还记得还有一个更全局的选项,但我现在没有时间去弄清楚。作为单一名称的简单解决方法,您可以为相应的项目提供一个sortname字段。尝试以下条目:

@inproceedings{al2007wsce,
  title={WSCE: A crawler engine for large-scale discovery of web services},
  author={Al-Masri, Eyhab and Mahmoud, Qusay H.},
  booktitle={Web Services, 2007. ICWS 2007. IEEE International Conference on},
  pages={1104--1111},
  year={2007},
  organization={IEEE},
  sortname = {Almasri}, % This field will be used for sorting
}

相关内容