我正在尝试按下列键对一些引文/参考书目进行排序:
- 作者姓名(按照
maxnames
和 的格式uniquenames
)。 - 出版年份(按照 格式
labelyear
)。
使用一些标准选项,我可以获得格式几乎完美:
\RequirePackage{filecontents}
\begin{filecontents*}{papers.bib}
@article{colby_1999,
author={Colby, J and Brown, A and Brown, B},
title={Title},
year={1999},
}
@article{colby_2000,
author={Colby, John and Brown, A and Brown, B},
title={Title},
year={2000},
}
@article{colby_2001,
author={Colby, J and Brown, A and Brown, B},
title={Title},
year={2001},
}
@article{colby_2001_2,
author={Colby, J and Damon, A and Brown, B},
title={Title},
year={2001},
}
@article{colby_2002,
author={Colby, J and Class, A and Brown, B},
title={Title},
year={2002},
}
@article{colby_a_2002,
author={Colby, A and Class, A and Brown, B},
title={Title},
year={2002},
}
@article{adams_1998,
author={Adams, J and Class, A and Brown, B},
title={Title},
year={1998},
}
@article{adams_2002,
author={Adams, J and Class, A and Brown, B},
title={Title},
year={2002},
}
\end{filecontents*}
\documentclass{article}
\usepackage[style=authoryear-comp, natbib, backend=biber]{biblatex}
\ExecuteBibliographyOptions{
maxnames = 1,
maxbibnames = 99,
uniquelist = false,
uniquename = true,
dashed = false,
firstinits = true}
\addbibresource{papers.bib}
\begin{document}
\citep{colby_1999,colby_2000,colby_2001,colby_2001_2,colby_2002,adams_2002,adams_1998,colby_a_2002}
\printbibliography
\end{document}
唯一的问题是,我希望“Colby, John”和所有“Colby, J”条目在排序时得到相同的处理。换句话说,我希望所有这些条目在引文中压缩为 1 个块,并且我希望“Colby, John”条目在参考书目中的其他“Colby, J”中按年份排序。类似这样:
答案1
需要记住的是,Biber 无法仅通过语法知道“John Colby”和“J Colby”是同一个人(这是它所要做的全部工作...)。“firstinits”选项不会影响排序,因为人们通常希望在首字母相同的情况下按照全名进行排序。
您有多种选择:
- 编辑您的参考书目源数据,使名称在语义上等效、语法上等效,以便 Biber 拥有用于排序的相关信息。
- 编辑您的书目源数据以添加
sortname
和/或shortauthor
字段来将排序更改为您需要的,而不更改名称。 - 使用评论中提到的 Biber
sourcemap
选项自动执行 1. 或 2.,而完全不改变源。 - 使用 biber 0.9.9 (beta)“sortfirstinits”选项,使排序算法仅使用名字的首字母。非官方的 biblatex 1.7 修补 .sty、.def 和 .pdf 文档在此处:https://sourceforge.net/projects/biblatex-biber/files/biblatex-test您需要从 sourceforge 下载 biber 0.9.9 beta。新选项位于测试版 biblatex 手册中。在
sortfirstinits = true
您的选项中试用它。
如果可能的话,我推荐选项 1,因为当您需要自动化系统时最好使语法和语义一致。
如果只考虑按第一作者进行排序,你可以对 sourcemap 进行如下操作:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex" map_overwrite="1">
<map>
<map_step map_field_source="AUTHOR" map_match="\AColby," map_final="1"/>
<map_step map_field_set="SORTNAME" map_origfieldval="1"/>
<map_step map_field_source="SORTNAME" map_match="\A(.+?)\s+and" map_replace="$1"/>
</map>
</maps>
</sourcemap>
</config>