\documentclass{article}
\usepackage[style=alphabetic,maxnames=4,minnames=3,maxbibnames=99]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{test1,
author = {Alice and Bob and Carol and David},
year = {2006},
title = {Title},
}
@misc{test2,
author = {Alice and Bob and Carol and David and Eve},
year = {2007},
title = {Title revisited},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Some text \autocite{test1,test2}.
\printbibliography
\end{document}
EDIT: My answer relies on a message from Philipp Lehman, the author of biblatex
, at de.comp.text.tex on December 29th, 2010. The significant quote (translated by me):
Relevant for the "alpha" labels is the value of maxnames
/minnames
set at \begin{document}
. The labels are fixed from this point
forward. You may freely choose how many names to display afterwards.
EDIT2: When using the package option maxbibnames=99
, maxnames
/minnames
must be set in addition; setting maxcitenames
/mincitenames
won't produce the desired "alpha" label format.
The number of names in labelname
is determined (in part) by the counter maxnames
. In citations, this is just equal to whatever you specify for the maxcitenames
option. To avoid name list truncation at the first citation, you can change maxnames
locally using etoolbox's \defcounter
command inside the \AtEveryCitekey
hook.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[style=authoryear,citetracker=true,maxcitenames=1]{biblatex}
\AtEveryCitekey{\ifciteseen{}{\defcounter{maxnames}{99}}}
\addbibresource{biblatex-examples.bib}
\begin{document}
\textcite{companion} showed that...
\textcite{companion,bertram} showed that...
Filler text \parencite{bertram,companion,aksin}.
Filler text \parencite{bertram,companion,aksin}.
\end{document}
Note that the test \ifciteseen{<true>}{<false>}
needs citation trackers enabled. By default authoryear
doesn't use citation tracking. Here I've enabled global tracking using citetracker=true
. So \ifciteseen
expands <true>
after the first citation, no matter where it occurs in the document (e.g. citation lists or footnotes). Other tracker settings are described in the manual.
With the authoryear-comp
style the solution needs to be modified slightly. Here we use the same hook, but we also clear the namehash
field so that an entry won't be part of a compact citation list the first time it is cited.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[style=authoryear-comp,citetracker=true,maxcitenames=1]{biblatex}
\AtEveryCitekey{%
\ifciteseen{}{\defcounter{maxnames}{99}\clearfield{namehash}}}
\begin{filecontents}{\jobname.bib}
@article{bertram2,
title = {Gromov Invariants for Holomorphic Maps from Riemann Surfaces to Grassmannians},
author = {Bertram, Aaron and Daskalopoulos, Georgios and Wentworth, Richard},
journal = {Journal of the American Mathematical Society},
volume = {9},
number = {2},
pages = {529--571},
year = {1996}}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
\textcite{companion,aksin} showed that...
\textcite{companion,bertram} showed that...
Filler text \parencite{bertram,bertram2,companion}.
Filler text \parencite{bertram,bertram2,companion,aksin}.
\end{document}
With biber as the backend, you might want to avoid messing around with the maxnames
counter. We can instead pass optional arguments to \printnames
via a patch command from the xpatch package. The patches in the following preamble should work for all of the author-year style variants.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[backend=biber,style=authoryear-comp,citetracker=true,%
maxcitenames=1,uniquename=false,uniquelist=false]{biblatex}
\usepackage{xpatch}
\AtEveryCitekey{\ifciteseen{}{\clearfield{namehash}}}
\xpatchbibmacro{cite}
{\printnames{labelname}}
{\ifciteseen
{\printnames{labelname}}
{\printnames[][1-99]{labelname}}}
{}
{}
\xpatchbibmacro{textcite}
{\printnames{labelname}}
{\ifciteseen
{\printnames{labelname}}
{\printnames[][1-99]{labelname}}}
{}
{}
These option settings will give the same output with the authoryear-comp
document above, though you might want to consider other values for uniquename
and uniquelist
. Details can be found in the manual.
Best Answer
With biber this can be handled by the following option settings.
With BibTeX you can define variants of existing citation commands in your document preamble.
Note that since
minnames
andmaxnames
are entry-specific options, they must be reset using an entry-specific hook like\AtEveryCitekey
.