TransWikia.com

BibTeX: How to reduce long author lists to "Firstauthor et al."?

TeX - LaTeX Asked by fuenfundachtzig on January 15, 2021

I have several entries in my list of references that include of the order of 40 authors.
Is there a way to make bibtex automatically reduce these lists to e.g. the first name + “et al.”?

I don’t want to edit the BibTeX entries manually and I cannot use biblatex. If at all possible I would also make as little changes as possible to the bibliography style.

There are similar questions, but none of those had a concise answer:

natbib e.g. seems to change only the reference within the text, but not the entry in the bibliography.

EDIT: I am using bibliographystyle{unsrt} as style definition.

11 Answers

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.)

Correct answer by Mico on January 15, 2021

There should be no need to edit a .bib file manually to have the desired number of authors before 'et al.' in either the citations or the bibliography/reference list.

The number of authors listed in citations and the bibliography is managed by the bibliography style. For example, using the APA style (which requires up to the first six authors before 'et al.' for book references in the bibliography):

sample.tex file:

documentclass{article}
usepackage{apacite}
bibliographystyle{apacite}

begin{document}
Found in cite{abk}.

bibliography{sample}
end{document}

sample.bib file:

@book{abk,
  author    = "A. Man and A. Woman and Second Man and Third Man and Fourth Man and Second Woman and Third Woman and Fourth Woman and Fifth Man",
  title     = "This book",
  publisher = "Men & Women",
  year      = 2025,
}

output (not formatted, just the text from the .pdf)

Found in (Man et al., 2025).

References

Man, A., Woman, A., Man, S., Man, T., Man, F., Woman, S., et al. (2025). This book. Men & Women.

You would need to identify an appropriate style, usually provided by the publisher if they accept contributions produced using (Any)TeX or from the pre-configured styles available, or you could produce your own if the requirement is sufficiently important. If you want suggestions for possible styles it would help if you said which style you are currently using and the changes you want to achieve.

To give an example of a different style using the same sample.bib file but with the bibliography style changed:

documentclass{article}
bibliographystyle{alpha}

begin{document}
Found in cite{abk}.

bibliography{sample}
end{document}

This style produces (again, just the text from the .pdf):

Found in [MWM+ 25].

References

[MWM+ 25] A. Man, A. Woman, Second Man, Third Man, Fourth Man, Second Woman, Third Woman, Fourth Woman, and Fifth Man. This book. Men & Women, 2025.

This does not truncate the number of authors in the bibliography at all (unlike the first example using the APA style).

Answered by mas on January 15, 2021

If you are using BibTeX, place and others after the main authors and the compiled file should show et. al, e.g.:

Author="H. Morgan and others"

Answered by user25223 on January 15, 2021

You can redo the unsrt style with custom-bib. Copy the following into a file myunsrt.dbj:

input docstrip

preamble
endpreamble

postamble
endpostamble

keepsilent
askforoverwritefalse
defMBopts{from{merlin.mbs}{%
seq-no,% no sorting
nmlm,% limit number of names in bibliography
x5,% maximum number of names to appear
m5,% minimum number of names before et al. is written
}}
generate{file{myunsrt.bst}{MBopts}}
endbatchfile

and then TeX it with

latex myunsrt.dbj

You will get a few subtle differences to unsrt:

  • There will be italic correction after italic text
  • The note field will have a captilazed first word
  • A Ph.D. thesis will appear as "Ph.D. thesis" instead of "PhD thesis"
  • Titles of theses will be emphasized, too, like article titles, or book titles
  • Address and year will not be part of a book title in an incollection, but part of the incollection item; this changes the order of address, year, and publisher (year will always be last)

In my opinion, those differences are for good. You can change the number of authors that you like to see in the bibliography by changing the m5 and x5 in the dbj file to something else, say m7 and x7.

Answered by mafp on January 15, 2021

Like @mico said, a sure way to do this is to create the .bst file with makebst.tex.

For those who use natbib, I created a file on my own with the folloowing features:

  • in the list of references, for every entry the list of authors is truncated after the third one
  • in a citation, the list of authors is truncated to first author et al. for three or more authors.

The file can be downloaded from this page.

FUNCTION {format.names}
{ 'bibinfo :=
  duplicate$ empty$ 'skip$ {
  's :=
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{f.~}{vv~}{ll}{, jj}"
      format.name$
      bibinfo bibinfo.check
      type$ "presentation" =
        { check.speaker }
        'skip$
      if$
      't :=
      nameptr #1 >
        {
          nameptr #3
          #1 + =
          numnames #3
          > and
            { "others" 't :=
              #1 'namesleft := }
            'skip$
          if$
          namesleft #1 >
            { ", " * t * }
            {
              s nameptr "{ll}" format.name$ duplicate$ "others" =
                { 't := }
                { pop$ }
              if$
              t "others" =
                {
                  " " * bbl.etal *
                }
                {
                  bbl.and
                  space.word * t *
                }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}

Answered by Alessandro Cuttin on January 15, 2021

You can use abntex2-num or abntex2-alf as style. If you don't have it install the TexLive texlive-bibtex-extra package.

http://www.ctan.org/tex-archive/macros/latex/contrib/abntex2

Answered by Camilo Andres Salazar Gonzalez on January 15, 2021

Some journals like Neuron only want an et al. in the Reference list after 10 authors have been listed. Helps to be able to paste this code over the relevant section of your .bst file rather than having to go through the whole makebst thing. I think the following achieves this:

FUNCTION {format.names}
{ 'bibinfo :=
  duplicate$ empty$ 'skip$ {
  's :=
  "" 't :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
    { namesleft #0 > }
    { s nameptr
      "{f.~}{vv~}{ll}{, jj}"
      format.name$
      bibinfo bibinfo.check
      't :=
      nameptr #1 >
        {
          nameptr #10
          #1 + =
          numnames #10
          > and
            { "others" 't :=
              #1 'namesleft := }
            'skip$
          if$
          namesleft #1 >
            { ", " * t * }
            {
              s nameptr "{ll}" format.name$ duplicate$ "others" =
                { 't := }
                { pop$ }
              if$
              numnames #2 >
                { "," * }
                'skip$
              if$
              t "others" =
                {
                  " " * bbl.etal *
                }
                {
                  bbl.and
                  space.word * t *
                }
              if$
            }
          if$
        }
        't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
  } if$
}

Answered by Ben on January 15, 2021

Too complex and you usually do not have time to struggle with this sort of things.

Just go to your bibtex file and in the authors tag, keep the first name, delete the rest and write "and others", compile and you will be done.

Answered by FerYepes on January 15, 2021

You can use the unsrt2authabbrvpp.bst to abbreviate author names and to reduce the author's list using "et al.". You don't have to change anything in the bib file. I have tested it with only IEEE template.

Download it from here: https://gitlab.com/tanwirahmad/ieee-abrv-names

Answered by JohnM on January 15, 2021

You can use natbibapa with apacite, but it returns the long name in the first citation by default.

To change this you have to give the bibtexkey of your references with more than 3 author before the citation as follow:

usepackage[natbibapa]{apacite}
shortcites{bibtexkey1, bibtexkey2,...} %before the citations

begin{document}

citep{bibtexkey1}

bibliography{Mybibliography}
end{document}

It was the simplest way I found to get together natbib, APA style and short citation names.

Note: in the references, all the names are printed as APA style requires

Answered by Alex Urrego Mesa on January 15, 2021

Remove all the authors whom you want to replace with et al. Then add and others suffix to the author field.

e.g. Code segment in .bib file

@ARTICLE{hao,
author={Hao, M. and Bai, Y. and Zeiske, S. and others},
journal={Nature Energy},
title={Ligand-assisted cation-exchange engineering for high-efficiency colloidal Cs1−xFAxPbI3 quantum dot solar cells with reduced phase segregation},
year={2020},
month={Jan.},
volume={5},
number={},
pages={79–88},
keywords={},
doi={10.1038/s41560-019-0535-7},
ISSN={}
}

Output:

[2] M. Hao, Y. Bai, S. Zeiske, et al., “Ligand-assisted cation-exchange engineering for high-efficiency colloidalcs1xfaxpbi3 quantum dot solar cells with reduced phase segregation,” Nature Energy, vol. 5, p. 79–88, Jan. 2020.

Answered by Akshay KB on January 15, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP