我正在撰写一份资助提案,其中资助机构为参考书目中的条目指定了以下节省空间的样式:
多位作者的出版物可以按以下方式引用:第一作者、第二作者、et int、最后一位作者。
显然这不是资助机构发明的;“et Int”引用格式是在科学编辑早在 2003 年 [1] 就出现了,所以显然从那时起它就获得了一些关注。但我无论如何也想不出如何在 Biblatex 中做到这一点(或者是否有可能做到这一点)。我是否忽略了手册中的某些内容(针对版本 3.7),还是我需要自己解决问题?
我知道你可以截短minbibnames
使用和选项打印的姓名数量maxbibnames
,但据我所知,截断的姓名列表总是以固定字符串“等“(或者任何恰好符合书目样式的值andothers
)。是否可以动态修改的值,andothers
以便它为“等国际”,后面跟着所印刷书目项目的最后一位作者(或编辑)的姓名?
[1] 谢尔盖·A·格兰多和杰弗里·D·伯恩哈德。“第一作者、第二作者、et Int 和最后作者”:针对生物医学论文的建议引用系统。 科学编辑26(4):122–123, 2003年7月至8月。
答案1
不幸的是,该论文对于所提出的风格的实际细节描述得不太清楚,所以你暂时只能接受我的解释。
如果中间作者有两个或多个作者(用“et int.”替换一个作者似乎不公平,我们不妨将她的名字全部写出来),则此实现会忽略“中间作者”,该中间作者位于作者编号之后bbx:etinttrunc
和最后一位作者之前。在本例中,bbx:etinttrunc
设置为两位,就像您的问题中一样。
我认为如果 Biber 本身支持这一点,事情会变得更容易,但它也是这样工作的。
平均能量损失
\documentclass[american]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}
\usepackage[style=numeric, backend=biber, maxnames=999]{biblatex}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@inproceedings{cheshkov,
author = {Cheshkov, S. and Tajima, T. and Chiu, C. and Breitling, F.},
title = {Emittance control in Laser Wakefield Accelerator},
booktitle = {American Institute of Physics Conference Series},
date = {2001-05},
volume = {569},
pages = {163-176},
}
@article{dehant,
author = {Veronique Dehant and Bruce Banerdt and Philippe Lognonné and Matthias Grott
and Sami Asmar and Jens Biele and Doris Breuer and François Forget
and Ralf Jaumann and Catherine Johnson and Martin Knapmeyer and Benoit Langlais
and Le Feuvre, Mathieu and David Mimoun and Antoine Mocquet and Peter Read
and Attilio Rivoldini and Oliver Romberg and Gerald Schubert and Sue Smrekar
and Tilman Spohn and Paolo Tortora and Stephan Ulamec and Susanne Vennerstrøm},
journal = {Planetary and Space Science},
number = {1},
pages = {123 - 145},
title = {Future {Mars} geophysical observatories for understanding its internal structure, rotation, and evolution},
volume = {68},
year = {2012},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
%\renewcommand*{\finalnamedelim}{\multinamedelim}
\NewBibliographyString{etint}
\DefineBibliographyStrings{english}{etint = {et\addabbrvspace int\adddot}}
\newcounter{bbx:etinttrunc}
\setcounter{bbx:etinttrunc}{2}
\newtoggle{bbx:showetint}
\DeclareNameFormat{given-family-etint}{%
\ifnumequal{\value{listcount}}{1}
{\toggletrue{bbx:showetint}}
{}%
\ifboolexpr{
test {\ifnumless{\value{listcount}}{\value{bbx:etinttrunc}+1}}
or test {\ifnumequal{\value{listcount}}{\value{liststop}}}
or
( test {\ifnumequal{\value{listcount}}{\value{bbx:etinttrunc}+1}}
and test {\ifnumequal{\value{liststop}}{\value{bbx:etinttrunc}+2}})
}
{\ifgiveninits
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefix}
{\namepartsuffix}}
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}}
{\iftoggle{bbx:showetint}
{\usebibmacro{name:delim}{\bibstring{etint}}%
\bibstring{etint}%
\togglefalse{bbx:showetint}}
{}}%
\usebibmacro{name:andothers}}
\DeclareNameAlias{sortname}{given-family-etint}
\DeclareNameAlias{author}{given-family-etint}
\DeclareNameAlias{editor}{given-family-etint}
\DeclareNameAlias{translator}{given-family-etint}
\begin{document}
\cite{aksin,worman,sigfridsson,companion,cotton,cheshkov,dehant}
\printbibliography
\end{document}
如果您必须在有四位作者的作品中省略第三位作者,则需要稍微简单一点的\DeclareNameFormat{given-family-etint}
。
\DeclareNameFormat{given-family-etint}{%
\ifnumequal{\value{listcount}}{1}
{\toggletrue{bbx:showetint}}
{}%
\ifboolexpr{
test {\ifnumless{\value{listcount}}{\value{bbx:etinttrunc}+1}}
or test {\ifnumequal{\value{listcount}}{\value{liststop}}}}
{\ifgiveninits
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiveni}
{\namepartprefix}
{\namepartsuffix}}
{\usebibmacro{name:given-family}
{\namepartfamily}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}}}
{\iftoggle{bbx:showetint}
{\usebibmacro{name:delim}{\bibstring{etint}}%
\bibstring{etint}%
\togglefalse{bbx:showetint}}
{}}%
\usebibmacro{name:andothers}}
答案2
软件包中捆绑的作者日期和详细样式biblatex-archaeology
提供了一个preservelastauthor
选项,可以完全满足您的要求。表达式et Int
由那里的命令引导\finalnameellipsis
。