[Tex/LaTex] only display all authors, of multi-author works, the first time a citation is used with biblatex

author-numberbiblatex

Some style manuals recommend that you, with more than two authors, only use all of the names in the first citation and afterwards just use the last name
of the first author followed by “et al.”

I looked in the biblatex manual, but clusent find this setting.

Here an example of what I am looking for (code below)
all names and then et al.

\begin{filecontents}{\jobname.bib}
 @article{PhysRevB.39.7347,
  title = {Eight new high-temperature superconductors with the 1:2:4 structure},
  author = {Morris, Donald E. and Nickel, Janice H. and Wei, John Y. T. and Asmar, Naggi G. and Scott, Jeffrey S. and Scheven, Ulrich M. and Hultgren, Charles T. and Markelz, Andrea G. and Post, Jeffrey E. and Heaney, Peter J. and Veblen, David R. and Hazen, Robert M.},
  journal = {Phys. Rev. B},
  volume = {39},
  issue = {10},
  pages = {7347--7350},
  numpages = {0},
  year = {1989},
  month = {Apr},
  publisher = {American Physical Society},
  doi = {10.1103/PhysRevB.39.7347},
  url = {http://link.aps.org/doi/10.1103/PhysRevB.39.7347}}
\end{filecontents}

\documentclass[11pt, a4paper]{article}

\usepackage[english]{babel}
\usepackage[autostyle]{csquotes}  % thanks http://tex.stackexchange.com/a/64383/22939

\usepackage[
  backend=bibtex,
  style=authoryear,
  natbib=true,
  maxbibnames=99,
  maxcitenames=99, % maxcitenames
]{biblatex}

\usepackage{hyperref}
\hypersetup{
  pdfborderstyle={/S/U/W 1}, % thanks, http://tex.stackexchange.com/a/26085/22939
}

\addbibresource{\jobname.bib}

\DefineBibliographyStrings{english}{%
  bibliography = {References},
}

\defbibheading{bibintocindent}[\refname]{%
  \section*{#1}%
  \addcontentsline{toc}{section}{\protect\numberline{}#1}%
  \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}

\begin{document}

\tableofcontents

\section{First section}

\citet{PhysRevB.39.7347}  demonstrates $m$. However, it is also show that $q$ \citep[p. 7349]{PhysRevB.39.7347}

\printbibliography[heading=bibintocindent]

\end{document}

Best Answer

biblatex uses \printnames{labelname} to print out author names. Therefor it only prints maxcitenames, and at least mincitenames author names (for the bibliography maxbibnames/minbibnames).

So setting maxcitenames to 1 is the default behaviour you want: Morrs et al., while the fullcite only is wanted if the cite is not seen yet.

You can patch the existing bibmacros \textcite and \cite which are used by \citet and \citep with the xpatch-package. With it you can replace \printnames{labelname} with \printnames[][-\value{listtotal}]{labelname} which will print out ALL names, no matter what maxcitenames says.

If the cite was already seen, you can check with \ifciteseen{}{}, therefore you have to enable manually the citetracker-option from biblatex (see preamble). Maybe you have to adjust this option, so it fits your needs.


update MWE:

\begin{filecontents}{\jobname.bib}
 @article{PhysRevB.39.7347,
  title = {Eight new high-temperature superconductors with the 1:2:4 structure},
  author = {Morris, Donald E. and Nickel, Janice H. and Wei, John Y. T. and Asmar, Naggi G. and Scott, Jeffrey S. and Scheven, Ulrich M. and Hultgren, Charles T. and Markelz, Andrea G. and Post, Jeffrey E. and Heaney, Peter J. and Veblen, David R. and Hazen, Robert M.},
  journal = {Phys. Rev. B},
  volume = {39},
  issue = {10},
  pages = {7347--7350},
  numpages = {0},
  year = {1989},
  month = {Apr},
  publisher = {American Physical Society},
  doi = {10.1103/PhysRevB.39.7347},
  url = {http://link.aps.org/doi/10.1103/PhysRevB.39.7347}}
\end{filecontents}

\documentclass[11pt, a4paper]{article}

\usepackage[english]{babel}
\usepackage[autostyle]{csquotes}  % thanks http://tex.stackexchange.com/a/64383/22939

\usepackage[
  backend=bibtex,
  style=authoryear,
  natbib=true,
  maxbibnames=99,
  maxcitenames=1,%modified
  citetracker=true%added
]{biblatex}

\usepackage{hyperref}
\hypersetup{
  pdfborderstyle={/S/U/W 1}, % thanks, http://tex.stackexchange.com/a/26085/22939
}

\addbibresource{\jobname.bib}

\DefineBibliographyStrings{english}{%
  bibliography = {References},
}

\defbibheading{bibintocindent}[\refname]{%
  \section*{#1}%
  \addcontentsline{toc}{section}{\protect\numberline{}#1}%
  \markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}


%patches
\usepackage{xpatch}
\xpatchbibmacro{cite}{\printnames{labelname}}%
{\ifciteseen{\printnames{labelname}}{\printnames[][-\value{listtotal}]{labelname}}}
{}{}

\xpatchbibmacro{textcite}{\printnames{labelname}}%
{\ifciteseen{\printnames{labelname}}{\printnames[][-\value{listtotal}]{labelname}}}
{}{}

\begin{document}

\tableofcontents

\section{First section}

\citet{PhysRevB.39.7347}  demonstrates $m$. However, it is also show that $q$ \citep[p. 7349]{PhysRevB.39.7347}\par\medskip
\citet{PhysRevB.39.7347}  demonstrates $m$. However, it is also show that $q$ \citep[p. 7349]{PhysRevB.39.7347}
\printbibliography[heading=bibintocindent]

\end{document}


Output: enter image description here