![对来自各种来源的名字进行规范化](https://linux22.com/image/461435/%E5%AF%B9%E6%9D%A5%E8%87%AA%E5%90%84%E7%A7%8D%E6%9D%A5%E6%BA%90%E7%9A%84%E5%90%8D%E5%AD%97%E8%BF%9B%E8%A1%8C%E8%A7%84%E8%8C%83%E5%8C%96.png)
我从许多地方检索(并接收)书目来源。因此,它们并不总是使用相同的标准来设置。具体来说,当涉及到姓,有很多变化。例如,这些都代表同一个人:
- Arthur Noland 作者
- Arthur N. 作者
- 一位作家
- 一位作家
biblatex
设法将前三个视为相同的作者,但似乎无法确定最后一个作者(出于某种原因,A.N.
与带空格的 - 相比,不带空格的 - 被视为单个名字A. N.
)。假设这些都是“A. N. 作者”,我如何才能让biblatex
所有这些条目都看到这一点?
\documentclass{article}
\usepackage[
backend = biber,
style = numeric,
sorting = nyt,
giveninits = true
]{biblatex}
\begin{filecontents*}[overwrite]{references.bib}
@article{articleA,
author = {Arthur Noland Author},
title = {Article title},
journal = {Some Journal},
year = {2000},
pages = {1-10}
}
@article{articleB,
author = {Arthur N. Author},
title = {Another article title},
journal = {Some New Journal},
year = {2001},
pages = {11-20}
}
@article{articleC,
author = {A. N. Author},
title = {Yet another article title},
journal = {Some Fancy Journal},
year = {2002},
pages = {21-30}
}
@article{articleD,
author = {A.N. Author},
title = {Completely different article title},
journal = {Really FaNCy Journal},
year = {2003},
pages = {31-40}
}
\end{filecontents*}
\addbibresource{references.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
由于名字格式不同,这也会影响排序。使用giveninits = true
,如何强制使用此格式而不是原始名字进行排序?
答案1
Biber 和 BibTeX 都将其解析A.N.
为单个单词(给定)名称。这意味着当生成姓名首字母时,我们只会得到“A”。因此,我认为A.N. Author
在这种情况下这只是错误的输入。它应该是A. N. Author
。
在 /LaTeX 方面,几乎没有好的方法来处理这个问题biblatex
,因为后端已经完成了名称解析,我们只能得到错误的名称解释。可以尝试使用 Biber 源映射动态修复此问题,但由于 RegExp 无法跟踪括号级别,因此可能会干扰无空格首字母的合法使用。此外,RegExp 不考虑宏转义和类似的构造。
\documentclass{article}
\usepackage[
backend = biber,
style = numeric,
sorting = nyt,
giveninits = true
]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[foreach=setnames]{
\step[fieldsource=\regexp{$MAPLOOP},
match=\regexp{([[:upper:]]+)\.([[:upper:]]+)\.},
replace={$1. $2.}]
}
}
}
\begin{filecontents*}{\jobname.bib}
@article{articleA,
author = {Arthur Noland Author},
title = {Article title},
journal = {Some Journal},
year = {2000},
pages = {1-10},
}
@article{articleB,
author = {Arthur N. Author},
title = {Another article title},
journal = {Some New Journal},
year = {2001},
pages = {11-20},
}
@article{articleC,
author = {A. N. Author},
title = {Yet another article title},
journal = {Some Fancy Journal},
year = {2002},
pages = {21-30},
}
@article{articleD,
author = {A.N. Author},
title = {Completely different article title},
journal = {Really FaNCy Journal},
year = {2003},
pages = {31-40},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
我认为这里最好的解决方案是在输入端修复此问题并A.N. Author
给出
A. N. Author
这不是问题的重点,但说 biblatex 将问题中显示的前三种形式视为同一作者并不完全正确。如果您查看 中的名称哈希.bbl
,您会发现它们是不同的。只是使用您的设置 ( giveninits=true,
)biblatex
以相同的方式输出这三个不同的名称。
BibTeXbiblatex
使很多事情变得更容易,但他们还没有找到或建立一种方法来处理同一作者在出版物中可能以各种形式给出其姓名这一事实。您仍然必须在提供与来源完全相同的姓名和将同一个人的姓名“规范化”为整个数据库中的一种格式之间取得平衡。