biblatex:为参考书目条目的不同部分定义 finalnamedelim

biblatex:为参考书目条目的不同部分定义 finalnamedelim

我正在使用 来格式化参考书目biblatex-mla。MLA 样式(至少到我正在使用的版本为止,并且仍然是 的当前稳定配置)要求在作品的倒数第二位和最后一位作者之间biblatex-mla添加字符串,但省略了逗号:, andbiblatex-mla

Dudley, Donald R. 后面缺少逗号。

请注意“and”前面缺少逗号。以下是一个相当笼统的解决方案:

\renewcommand{\finalnamedelim}{\addcomma\space\bibstring{and}\space}

这不仅会在这里添加逗号,还会在条目的编辑器部分添加逗号,如下所示,而它不应该出现在这里:

Magennis 后面有一个不需要的逗号

我怎样才能仅修改初始作者/编辑者部分的分隔符,同时保持后面的“这是此多作者卷的编辑者”部分的分隔符不变?

我正在使用 biber 作为后端。

答案1

我认为你只需要重新定义\revsdnamedelim(不是\finalnamedelim):

\renewcommand*{\revsdnamedelim}{\addcomma}

以下是具有默认设置的 MWE mla-new(第 8 版):

\documentclass{article}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=mla-new,backend=biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{dudley+webster:1965,
  author = {Dudley, Donald R. and Webster, Graham},
  title = {The Roman Conquest of Britain AD 43--57},
  location = {Chester Springs, PA},
  publisher = {Dufour},
  date = {1965}
}
@inbook{swan:2009,
  author = {Swan, Mary},
  title = {Identity and Ideology in {\AE}lfric's Prefaces},
  booktitle = {A Companion to {\AE}lfric},
  editor = {Magennis, Hugh and Swan, Mary},
  series = {Brill's Companions to the Christian Tradition},
  number = {18},
  location = {Leiden and Boston},
  publisher = {Brill},
  date = {2009},
  pages = {247-269}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\pagestyle{empty}
\renewcommand*{\revsdnamedelim}{\addcomma}
\begin{document}
\autocite{dudley+webster:1965}
\autocite{swan:2009}
\printbibliography
\end{document}

在此处输入图片描述

答案2

我认为他们做出的区分很奇怪。但我无法决定。“编辑”部分的问题在于 biblatex 有一个\currentname表示“编辑”的编辑器条目。唉,这既用于“编辑”字段,也用于“编辑者”字段。幸运的是,“编辑者”作为第一个可选参数(格式)传递给\printnames,但这不是公开可用的。因此,您必须重新定义\printnames以提供该信息,然后在 中使用它\finalnamedelim

这是一些代码。希望这对你的情况有用。

\usepackage{ifthen}
\usepackage{xparse}

\NewDocumentCommand{\newprintnames}{oom}{%
  \def\currentformat{#1}%
  \IfNoValueTF{#2}{\originalprintnames[#1]{#3}}%
  {\originalprintnames[#1][#2]{#3}}}

\AtBeginBibliography{\let\originalprintnames\printnames\let\printnames\newprintnames}

\renewcommand{\finalnamedelim}{%
  \ifthenelse{\equal{\currentformat}{byeditor}}%
     {}% Nothing if "edited by"
     {\addcomma}% comma otherwise
     \space\bibstring{and}\space
}

相关内容