我最近升级到了 TeX Live 2015 和biblatex
3.0 版本。升级后,文内作者年份引用出现了意外行为。
正如我所描述的这个答案,我保留条目author
中的字段.bib
,用于实际来源格式的作者姓名。为了统一以各种姓名排列方式出版的作者(权威控制),我sortname
在我的.bib
条目中使用字段,并将使用\DeclareLabelname
放在存储在的字段列表sortname
之前。在2.9a 中,这允许按而不是分组文内引用。author
labelname
biblatex
sortname
author
平均能量损失
\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{dembetembe1974,
title = {Three {Korekore} dialects},
volume = {15},
pages = {143--172},
journaltitle = {Journal of African Languages},
author = {Dembetembe, Norris C.},
date = {1974}
}
@thesis{dembetembe1976,
location = {London},
title = {The syntax of sentential complements in {Shona}},
institution = {University of London},
type = {phdthesis},
author = {Dembetembe, Norris Clemens},
sortname = {Dembetembe, Norris C.},
date = {1976}
}
@article{dembetembe1986,
title = {Aspects of negation in {Shona}},
volume = {6},
pages = {1--10},
number = {1},
journaltitle = {South African Journal of African Languages},
author = {Dembetembe, N. C.},
sortname = {Dembetembe, Norris C.},
date = {1986}
}
\end{filecontents}
\documentclass{article}
\usepackage[style=authoryear-comp,
dashed=false, % no dash in bibliography
uniquename=init, % we can still disambiguate names in citations
firstinits=false, % full names are used in bibliography
backend=biber]{biblatex}
\DeclareLabelname{
\field{sortname}
\field{shortauthor}
\field{author}
\field{shorteditor}
\field{editor}
\field{translator}
}
\bibliography{\jobname}
\begin{document}
\parencite{dembetembe1974,dembetembe1976,dembetembe1986}
\printbibliography
\end{document}
预期输出(适用于biblatex
2.9a)
但是,在biblatex
3.0 中,对于.bib
包含字段的条目,根据我的命令,文内引用中sortname
应该包含的字段均未使用。相反,该字段正在被使用。也许它被解析为未定义,因此正在代替它使用?labelname
\DeclareLabelname
title
labelname
labeltitle
biblatex
3.0 的实际输出
我在变更日志中看到,版本 3.0 将和biblatex
的分辨率从移至,我假设这是我的输出发生变化的根源,但我不确定如何恢复预期的行为。labelname
labeltitle
biber
biblatex
答案1
这是一个有趣的案例。正如您所说,在 biber 2.0/biblatex 3.0 之前,labelname 由 biber 生成,但现在由 biblatex 实例化。Biber 不会将 sortname 传递回 .bbl,因为它仅用于排序,而 biblatex 不需要它。因此,这实际上不应该起作用,但它确实起作用了,因为 biber 在处理 labelname 生成时可以访问 sortname。实际上,这应该使用类似 的用户字段来完成namea
。试试这个:
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\step[fieldsource=sortname]
\step[fieldset=namea, origfieldval, final]
}
}
}
\DeclareLabelname{
\field{namea}
\field{shortauthor}
\field{author}
\field{shorteditor}
\field{editor}
\field{translator}
}