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 the makebst
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 the unsrt
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:
nameptr #1 >
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.,
{ namesleft #1 >
{ ", " * t * }
{ numnames #2 >
with the following 17 lines:
{
nameptr #3
#1 + =
numnames #4
> and
{ "others" 't :=
#1 'namesleft := }
'skip$
if$
namesleft #1 >
{ ", " * t * }
{
s nameptr "{ll}" format.name$ duplicate$ "others" =
{ 't := }
{ pop$ }
if$
numnames #2 >
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:
nameptr #1 >
{
nameptr #3
#1 + =
numnames #5
> and
{ "\bibinfo{person}{others}" 't :=
#1 'namesleft := }
'skip$
if$
namesleft #1 >
i.e., the string "others"
should be replaced with "\bibinfo{person}{others}"
.
(Verified with version 2.1 of ACM-Reference-Format.bst
.)
I think its a bit more complicated than a simple modification, the reason being that the bst
file is simply viewing it on an reference by reference basis and doesn't have the knowledge (as is) to insert the per year changes you want.
What you have is different functions (i.e. article
, book
...) that create a format string for each reference type. They know the year. The string they create is output by output.bibitem
. However, it doesn't know the year.
What you can possibly do is edit each reference type function to store/compare the year of that reference vs a previous reference. And if the year changes do an output (ala output.bibitem
) (something like
"\begin{thebibliography}{9}" write$ newline
(something I've used in my modified bst
files). That fits your formatting (as you seem to already know what it should be).
Annoying that you would have to do it every where.
Sorry I couldn't be more help.
Best Answer
The "and" is usually coded explicitly in the
.bst
bibliographic style file that you are using. As far as I know (but perhaps someone knows ifbiblatex
can do that), there is no other option (unless there is something specific tocslatex
) to change it than going into the.bst
file, finding the macro which puts the "and" string on the stack, and replacing manually "and" with whatever you like. Then you have a new bibliographic style that you can call in the usual way in your.tex
file (\bibliographystyle{myfile}
).By the way, there are other items that you may want to localize in the same manner ("editors", "chapter", "volume", "pages",...)