我需要启用牛津逗号(适用于 3 位或更多作者),以及在参考书目和引文中将“and”替换为“&”。我可以执行其中一项或另一项,但尝试同时执行两项操作无法启用牛津逗号。
梅威瑟:
\documentclass{article}
\usepackage[UKenglish]{babel}
\usepackage{csquotes}
\usepackage[style=authoryear,uniquename=init,giveninits]{biblatex}
\begin{filecontents}[overwrite]{\jobname.bib}
@book{3people,
author = {John Smith1 and Alex Smith2 and Bob Smith3},
title = {Some Random Thing},
date = {1970}
}
@book{2people,
author = {John Smith1 and Alex Smith2},
title = {Some Other Thing},
date = {1971}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareNameAlias{sortname}{family-given} % Make last names come before first names
\renewcommand*\finalnamedelim{\addspace\&\addspace} % Replace "and" with "&"
\DefineBibliographyExtras{UKenglish}{\def\finalandcomma{\addcomma}} % Enable Oxford Comma
\begin{document}
\parencite{2people}\par\parencite{3people}
\printbibliography
\end{document}
期望输出:
(史密斯 1 和史密斯 2 1971 年)
(史密斯 1、史密斯 2 和史密斯 3 1970 年)参考
Smith1, J. & Smith2, A. (1971). 其他一些事情。Smith1
, J., Smith2, A., & Smith3, B. (1970). 一些随机的事情。
答案1
finalnamedelim
你可能想看看biblatex.def
,第 3.14 版第 85-87 行
\DeclareDelimFormat{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring{and}\space}
并将其修改为使用“&”而不是“and”,如下所示
\documentclass{article}
\usepackage[UKenglish]{babel}
\usepackage{csquotes}
\usepackage[style=authoryear, uniquename=init, giveninits]{biblatex}
\DeclareNameAlias{sortname}{family-given}% Make last names come before first names
\DeclareDelimFormat{finalnamedelim}{%
\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\&\space}
\DefineBibliographyExtras{UKenglish}{\def\finalandcomma{\addcomma}} % Enable Oxford Comma
\begin{filecontents}{\jobname.bib}
@book{3people,
author = {John Smith1 and Alex Smith2 and Bob Smith3},
title = {Some Random Thing},
date = {1970},
}
@book{2people,
author = {John Smith1 and Alex Smith2},
title = {Some Other Thing},
date = {1971},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\parencite{2people}\par\parencite{3people}
\printbibliography
\end{document}
示例中的结果与Ulrike 的回答,但有两个相关区别。
- 此答案使用
finalnamedelim
上下文敏感的分隔符,并使用接口来实现它。 (\renewcommand
在上下文敏感的分隔符上使用并不是错误,但我更喜欢使用新接口,因为它可以更自然地推广到其他分隔符上下文。) \finalandcomma
此解决方案保留了牛津逗号的使用。这意味着它需要的代码比 Ulrike 的答案更多,但它更加模块化。
答案也使用而不是etoolbox
,但这主要取决于个人喜好(并且这里的代码库并不十分一致:不使用,但有些和文件使用 )。\ifnumgreater
ifthen
\ifthenelse
biblatex
biblatex.def
\ifthenelse
.cbx
.bbx
答案2
您可以测试列表计数:
\documentclass{article}
\usepackage[UKenglish]{babel}
\usepackage{csquotes}
\usepackage[style=authoryear,uniquename=init,giveninits]{biblatex}
\begin{filecontents}[overwrite]{\jobname.bib}
@book{3people,
author = {John Smith1 and Alex Smith2 and Bob Smith3},
title = {Some Random Thing},
date = {1970}
}
@book{2people,
author = {John Smith1 and Alex Smith2},
title = {Some Other Thing},
date = {1971}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareNameAlias{sortname}{family-given} % Make last names come before first names
% Replace "and" with "&", and add Oxford Comma
\renewcommand*\finalnamedelim{\ifthenelse{\value{listcount}>2}{\addcomma}{}\addspace\&\addspace}
\begin{document}
\parencite{2people}\par\parencite{3people}
\printbibliography
\end{document}