[Tex/LaTex] Changing BibTeX “format.names” function in .bst file to force “et al.” citations for entries with more than 3 authors

bibtex

I'm using natbib package for my reference list. I have been struggling with BibTeX. I'm writing for Journal of Finance, and they want > 3 citations to be in "et al." format for the body of the paper. But the Journal's .bst file makes it such that no amount of authors will make natbib \citet or \citep (or any other method of citing) truncate the author list to "Jones et al. (2009)" (for example); all authors will always be listed.

I've found a solution to a different .bst (not the Journal of Finance's .bst).
But the journal's .bst has a format.names function that's completely different to this and I can't edit it such that every paper that has > 3 authors gets truncated to "et al." in the body of the paper.

Please assist. Here's the code for the Journal's format.names function (SOURCED FROM http://www.ivo-welch.info/computers/bstfiles/):

 FUNCTION {format.names}
{ 's :=
  #1 'nameptr :=
  s num.names$ 'numnames :=
  numnames 'namesleft :=
{ namesleft #0 > }
{ nameptr #1 >
    { s nameptr "{ff }{vv~}{ll}{, jj}" format.name$ 't := }
    { s nameptr "{vv~}{ll}{, jj}{, ff}" format.name$ 't := }
  if$
  nameptr #1 >
    {
      namesleft #1 >
        { ", " * t * }
        {
          ", " *
          t "others" =
            { " et~al." * }
%                { " {\small and} " * t * }
            { " and " * t * }   
%%%KCB: added \small  %%KD removed small
          if$
        }
      if$
    }
    't
  if$
  nameptr #1 + 'nameptr :=
  namesleft #1 - 'namesleft :=
}
  while$
}

Best Answer

The linked style was generated for 'standard' BibTeX use with the LaTeX kernel's \cite, and not with natbib. As such, you should look at generating a new .bst file using custom-bib or considering switching to biblatex.

Related Question