Я пишу заявку на грант, в которой финансирующее агентство указывает следующий стиль для экономии места в записях в библиографии:
Публикации с несколькими авторами могут цитироваться следующим образом: первый автор, второй автор, et int, последний автор.
По-видимому, это не изобретение финансирующего агентства; стиль цитирования «et Int» был предложен вНаучный редактореще в 2003 году [1], так что, очевидно, с тех пор он набрал обороты. Но я не могу понять, как это сделать (или возможно ли это вообще) в Biblatex. Я что-то упустил из виду в руководстве (для версии 3.7) или мне нужно будет разработать собственное решение?
Я знаю, что ты можешьусекатьколичество имен, напечатанных с использованием параметров minbibnames
и maxbibnames
, но, насколько я могу судить, усеченные списки имен всегда заканчиваются фиксированной строкой "и другие." (или каково бы ни было значение andothers
в стиле библиографии). Возможно ли динамически изменять значение andothers
так, чтобы оно было "и т.д., " а затем имя последнего автора (или редактора) того библиографического элемента, который он печатает?
[1] Сергей А. Грандо и Джеффри Д. Бернхард.«Первый автор, второй автор и т. д. и последний автор»: предлагаемая система цитирования для биомедицинских статей. Научный редактор26(4):122–123, июль–август 2003 г.
решение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
там.