我一直在研究一种自定义的 biblatex 样式,我希望参考书目最多显示 2 位作者,这意味着条目应该是:
- 第一(单一作者)
- 第一和第二(两位作者)
- 第一等(三人及以上)
\printnames[][1-3]{author}\space
我想出了以下名称格式,并在命令中向其输入前三位作者\DeclareBibliographyDriver
。
%%%% authors
\DeclareNameFormat{author}{%
\ifthenelse{\value{listcount}=1}%
{#1 \ifblank{#4}{}{\addcomma\space #4}}%
{%
\ifthenelse{\value{liststop}=2}%
{\space\&\space\ifblank{#4}{}{#4\space}#1}%
{%
\ifthenelse{\value{listcount}=3}%
{\space}%
{, et~al.}%
}%
}%
}%
它运行得很好,但考虑到我打算转到 biblatex,我希望有一个非常干净的代码,所以问题基本上是:如何改进它?
答案1
那么编辑或翻译人员的名单呢?如果您想在整个过程中应用相同的截断,只需使用包选项maxnames=2
。其余部分通过重新定义来实现\finalnamedelim
- 一个宏,它在名单中的最后一项之前设置分隔符。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=authoryear,maxnames=2]{biblatex}
\renewcommand*{\finalnamedelim}{\addspace\&\space}
\addbibresource{biblatex-examples.bib}
\begin{document}
Filler text \parencite{bertram,companion,jaffe,moraux}.
\printbibliography
\end{document}
上述示例文档在引文和参考书目中都采用了该格式。若要将其仅限于参考书目,请使用选项maxbibnames=2
和
\renewcommand*{\finalnamedelim}{%
\ifbibliography
{\addspace\&\space}
{\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring{and}\space}}
如果您真的决心要定义自己的风格,我会使用 中的通用名称格式biblatex.def
作为起点。您的格式在名称分隔符(\bibnamedelim...
)、名称部分格式(\mkbibname...
、大小写、首字母、顺序等)、消除虚假空格(\addspace
)和本地化(\bibstring{andothers}
)方面与这些格式不同。除非您将类似的格式应用于editor
、、bookauthor
等translator
,否则您的名称列表将显得不一致。