As the comments have mentioned, I would recommend against maintaining a bibliography with the abbreviations done by hand. This is exactly the sort of automatic thing that bibtex should be doing for you. That said, I don't know how to control this sort of thing with bibtex. I seem to remember that natbib
did automatically truncate author lists, but I can't remember how much control it gave you. (indeed, this could well have been one of the things that made me move to biblatex...)
The biblatex
solution would simply be to set maxnames=4
as a package option. Incidentally, biblatex is no longer in beta: v1.0 was uploaded to CTAN yesterday.
Here is a proof of concept (no support for the optional argument, and something similar is needed for \citep
and other cite commands), and also it assumes that the .bst
style use "et al" for references for more that a single author.
The idea is to create something similar to \ifciteseen
in biblatex
. Thus we can create a list of references already cited in the document (and we exploit the list facilities of etoolbox
). Then, if the reference has not been used before we use \citet*
, and we add the key to the list of seen references. Otherwise, we use \citet
.
\documentclass{article}
\usepackage{etoolbox}
\usepackage{natbib}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{test1,
author = {Author, A. and Buthor, B and Cuthor, C and Duthor, D},
title = {Title},
journal = {Journal},
year = 2013
}
@article{test2,
author = {Author, A. and Buthor, B and Cuthor, C and Duthor, D},
title = {Title},
journal = {Journal},
year = 2012
}
\end{filecontents}
\newcommand{\citelist}{}
\newcounter{currentcite}
\newcounter{currentcitetotal}
\newcommand{\mycite}[1]{
\setcounter{currentcitetotal}{0}
\renewcommand{\do}[1]{\addtocounter{currentcitetotal}{1}}
\docsvlist{#1}
\renewcommand{\do}[1]{%
\addtocounter{currentcite}{1}%
\ifinlist{##1}{\citelist}
{\citet{##1}}
{\citet*{##1}\listadd{\citelist}{##1}}%
\ifnumcomp{\value{currentcitetotal}}{>}{\value{currentcite}}
{, }
{}%
}
\docsvlist{#1}
}
\begin{document}
\mycite{test1,test2}
\mycite{test1}
\mycite{test2}
\bibliographystyle{plainnat}
\bibliography{\jobname}
\end{document}

Best Answer
The
natbib
citation management package manages the creation and appearance of citation call-outs. It does not, per se, determine how (or even whether) lists of numerous authors should be truncated, either in a citation call-out or in the formatted bibliographic reference. Such truncation issues are determined by the bibliography style file (.bst
), which is loaded via the command\bibliographystyle{<somestyle>}
.If you can't find an existing .bst file that meets your formatting needs, you can always create one from scratch by running LaTeX on
makebst.tex
, which is part of the custom-bib package. Running themakebst
utility launches an interactive series of multiple-choice questions, with all available answer options nicely explained. Several questions will be related to truncation matters. The output will be the.bst
file you want.Additional write-up, upon receiving information that @fuenfundachtzig uses the
unsrt
bibliography style. (Since theunsrt
bibliography style can create numeric-style citation call-outs only, the answer below addresses how to truncate the list of authors in the formatted bibliography, not in the citation call-outs.)I suggest you proceed as follows:
Find the file
unsrt.bst
in your TeX distribution. Make a copy of this file and name the copy, say,unsrt85.bst
. Do not edit a system file directly.Open the file
unsrt85.bst
in your favorite text editor.Update September 2020: It has come to my attention that the editing instructions I provided back in August 2011 no longer work. I have no idea when exactly BibTeX's processing of the bst file changed. The following code is valid for an up-to-date TeXLive2020 TeX distribution.
Find the function
format.names
(it starts on l. 185 in my copy of the file) and locate the following line inside this function, about 7 lines down from the top:Assuming that you want to print out just the first three authors (followed by "et al.") whenever the entry has more than four (i.e., "at least five") authors, you should replace the next 3 lines in the BibTeX function, viz.,
with the following 17 lines:
Put differently, this setup tells BibTeX to include all authors' names if the entry has at most four authors, and to include just the first three names, followed by "et al", if the entry has more than four authors.
Save the file
unsrt85.bst
either in the directory that contains the main tex file or in a directory that's searched by BibTeX. If you choose the second option, be sure to also update TeX's filename database as needed.In the main tex file, you need to change
\bibliographystyle{unsrt}
to\bibliographystyle{unsrt85}
and perform a full recompile cycle (LaTeX, BibTeX, and LaTeX twice more).Addendum May 2019: For the
ACM-Reference-Format
bibliography style, there needs to be one slight modification to the fix proposed above:i.e., the string
"others"
should be replaced with"\bibinfo{person}{others}"
. (Verified with version 2.1 ofACM-Reference-Format.bst
.)