[Tex/LaTex] Using the “et Int” citation system

biblatex

I'm writing a grant proposal where the funding agency specifies the following space-saving style for entries in the bibliography:

Publications with multiple authors may be cited as follows: first author, second author, et int, last author.

Apparently this isn't something the funding agency invented; the "et Int" citation style was proposed in Science Editor back in 2003 [1] so obviously it has gained some traction since then. But I can't for the life of me figure out how to do this (or if it's even possible to do this) in Biblatex. Have I overlooked something in the manual (for version 3.7), or will I need to roll my own solution?

I know that you can truncate the number of names printed using the minbibnames and maxbibnames options, but as far as I can tell truncated name lists always end with the fixed string "et al." (or whatever the value of andothers happens to be in the bibliography style). Might it be possible to dynamically modify the value of andothers so that it is "et int, " followed by the name of the last author (or editor) of whatever bibliography item it happens to be printing?

[1] Sergei A. Grando and Jeffrey D. Bernhard. "First Author, Second Author, et Int, and Last Author": A Proposed Citation System for Biomedical Papers. Science Editor 26(4):122–123, July–August 2003.

Best Answer

Unfortunately, the paper was not too clear on the actual details of the proposed style, so you will have to live with my interpretation for the time being.

This implementation leaves out 'intervening authors' if they are two or more authors (it seems unfair to replace just one author by 'et int.', we might as well name her in full) after the author number bbx:etinttrunc and before the last author. In the example bbx:etinttrunc is set to two as in your question.

I assume things could be made easier if Biber supported this natively, but it also works like this.

MWE

\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}

example output


If you must leave out the third author in a four author work, you need a slightly simpler \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}}