\DeclareLabelname 在 biblatex 3.0 中不起作用

\DeclareLabelname 在 biblatex 3.0 中不起作用

我最近升级到了 TeX Live 2015 和biblatex3.0 版本。升级后,文内作者年份引用出现了意外行为。

正如我所描述的这个答案,我保留条目author中的字段.bib,用于实际来源格式的作者姓名。为了统一以各种姓名排列方式出版的作者(权威控制),我sortname在我的.bib条目中使用字段,并将使用\DeclareLabelname放在存储在的字段列表sortname之前。在2.9a 中,这允许按而不是分组文内引用。authorlabelnamebiblatexsortnameauthor

平均能量损失

\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}

预期输出(适用于biblatex2.9a)

在此处输入图片描述

但是,在biblatex3.0 中,对于.bib包含字段的条目,根据我的命令,文内引用中sortname应该包含的字段均未使用。相反,该字段正在被使用。也许它被解析为未定义,因此正在代替它使用?labelname\DeclareLabelnametitlelabelnamelabeltitle

biblatex3.0 的实际输出

在此处输入图片描述

我在变更日志中看到,版本 3.0 将和biblatex的分辨率从移至,我假设这是我的输出发生变化的根源,但我不确定如何恢复预期的行为。labelnamelabeltitlebiberbiblatex

答案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}
}

相关内容