使用该authoryear-comp
样式,我经常引用姓氏相同的不同作者。biblatex
包选项
backend=biber,style=authoryear-comp,firstinits=true,uniquename=init
通过在这些引文中添加作者姓名首字母来消除歧义。问题是,我还引用了一些多产的作者,他们并不一直使用中间名或用连字符连接他们的名字和中间名。
例如在下面的文档中我得到引用:
J.-P. Doe 2005;J. Doe 2006;JP Doe 2007;JP Doe 和 Jones 2008;J.-P. Doe 和 M. Smith 2009;M. Smith 和 Jones 2011;A. Smith 和 J. Smith 2011
但这里实际上只有一个 Doe。参考文献列表中 Doe 的名字不一致是可以接受的,因为它们准确反映了书目数据。但我更希望引用如下:
Doe 2005、2006、2007;Doe 和 Jones 2008;Doe 和 M. Smith 2009;M. Smith 和 Jones 2011;A. Smith 和 J. Smith 2011
有没有简单的方法来定义作者/编辑者姓名别名?该shortauthor
字段提供了一种方法,但理想情况下,我想避免对bib
文件进行持续编辑。
\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[backend=biber,style=authoryear-comp,firstinits=true,uniquename=init,sorting=none]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@Book{hyphen,
author = {Doe, John-Paul},
title = {A book by John-Paul Doe},
publisher = {Publisher},
year = {2005}}
@Book{nomiddle,
author = {Doe, John},
title = {Another book by John-Paul Doe},
publisher = {Publisher},
year = {2006}}
@Book{nohyphen,
author = {Doe, John Paul},
title = {Yet another book by John-Paul Doe},
publisher = {Publisher},
year = {2007}}
@Article{initials,
author = {Doe, J. P. and Jones, J.},
title = {An article coauthored by John-Paul Doe},
journal = {Journal title},
year = {2008}}
@Article{hypheninitials,
author = {Doe, J.-P. and Smith, M.},
title = {Another article coauthored by John-Paul Doe},
journal = {Journal title},
year = {2009}}
@Article{smithm,
author = {Smith, Mary and Jones, Jane},
title = {Article title},
journal = {Journal title},
year = {2011}}
@Article{smitha,
author = {Smith, Anne and Smith, Joe},
title = {Article title},
journal = {Journal title},
year = {2011}}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cite{hyphen,nomiddle,nohyphen,initials,hypheninitials,smithm,smitha}
\printbibliography
\end{document}
答案1
这里有一种方法可以准确给出您想要的结果。将其放入您的biber.conf
:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map maptype="field">
<map_pair map_source="AUTHOR"/>
<also_set map_field="SHORTAUTHOR" map_origfieldval="1"/>
<also_set map_field="SORTNAME" map_origfieldval="1"/>
</map>
<map maptype="field">
<map_pair map_source="SHORTAUTHOR" map_match="Doe,\s*J(?:\.|ohn)(?:[ -]*)(?:P\.|Paul)*" map_replace="Doe, John Paul"/>
<map_pair map_source="SORTNAME" map_match="Doe,\s*J(?:\.|ohn)(?:[ -]*)(?:P\.|Paul)*" map_replace="Doe, John Paul"/>
</map>
</maps>
</sourcemap>
</config>
这遵循了 Biber 0.9.8 中新的映射语义 - 映射按顺序处理,每个映射都取决于前一个映射的结果。在映射中,您还可以使用多个项目,但映射中更改事物的项目不应依赖于映射元素中其他更改的结果。使用映射元素进行排序。因此,这首先将 AUTHOR 复制到 SHORTAUTHOR 和 SORTNAME,然后编辑这两个字段以规范一些特定名称。Biber DEV PDF 文档将很快更新。
这是一个相当复杂的正则表达式,但它们对于伪造语义等价非常有用。这实际上将 Does 呈现为规范的“Doe, John Paul”格式,以便 Biber 知道他们是同一个人。可能可以设计一个正则表达式来使其不那么特定于名称,但这将取决于名称格式的特性。例如,您可以删除名称中的所有“-”字符,并且由于您使用的是firstinits
,因此强制所有名称都只使用首字母。
编辑:Biber 0.9.8 中将有一个更简单的语法,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map>
<map_step map_field_source="AUTHOR" map_match="Doe," map_final="1"/>
<map_step map_field_set="SHORTAUTHOR" map_origfieldval="1"/>
<map_step map_field_set="SORTNAME" map_origfieldval="1"/>
<map_step map_field_source="SHORTAUTHOR" map_match="Doe,\s*J(?:\.|ohn)(?:[ -]*)(?:P\.|Paul)*" map_replace="Doe, John Paul"/>
<map_step map_field_source="SORTNAME" map_match="Doe,\s*J(?:\.|ohn)(?:[ -]*)(?:P\.|Paul)*" map_replace="Doe, John Paul"/>
</map>
</maps>
</sourcemap>
</config>
答案2
我最近也在思考类似的事情:如果同一位作者以您所描述的不同名字出版了书籍,那么它们真的应该在参考书目中以不同的方式印刷吗?例如,如果您的样式带有dashed
用破折号替换重复名称的选项,那么是否应该将变体视为完全不同的名称而不进行替换?我选择在文件中统一名称.bib
。
我认为一个重要的问题是我们在这里谈论的是真正的准确性还是仅仅是伪准确性。例如,我经常看到一本书的封面上写着“JP Doe”,而第一页上写着“John Paul Doe”。
另一个问题是,当你以这种方式追求参考书目的一致性时,是否真的会冒着让作者感到困惑的风险。毕竟,任何参考书目的主要目标都是确保读者可以轻松找到你引用的来源。如果你对“JP Doe”和“John Paul Doe”有不同的条目,你实际上不是让读者更难理解吗?
因此,如果这只是首字母与全名等的问题,我会选择实际标准化文件.bib
。