2

I am using Bibtex, Natbib and Chicago Style. However, I need a changed format for authors. If there are 3 or more authors, only the first one should be mentioned, followed by "et al.". At the moment, all three authors are mentioned and only for 4 or more authors, "et al." appears. How can I change that?

The solution must be hidden somewhere in this code:

FUNCTION {format.rem.names}
{ 's :=
  'f :=
  #2 'nameptr :=
  s num.names$ 'numnames :=
  numnames #1 - 'namesleft :=
    { namesleft #0 > }
    { s nameptr f format.name$ 't :=
      nameptr #1 >
    { namesleft #1 >
        { ", " * t * }
        {
        ", " *
         t "others" =
        { " et~al." * }
        { " \harvardand\ " * t * }
          if$
        }
      if$
    }
    't
      if$
      nameptr #1 + 'nameptr :=
      namesleft #1 - 'namesleft :=
    }
  while$
}
1

The presence of the macro \harvardand in the code excerpt you've posted indicates that the code comes from one of the seven bibliography style files of the harvard citation management package: agsm, apsr, dcu, jmr, jphysicsB, kluwer, and nederlands. A quick check reveals that of these seven candidate files, only two styles-- apsr and jmr -- feature a function called format.rem.names. A further check reveals that of these two styles, only apsr truncates lists of authors (or editors) to "firstauthor et al." only if there are at least four authors/editors; in contrast, the jmr style truncates the list whenever there are three or more authors/editors.

Let us proceed, then, under the assumption that you're actually using the apsr bibliography style, rather than the style called chicago. It turns out that the function format.rem.names is not the place to look for if you want to change the truncation behavior so that "firstauthor et al." is shown whenever the piece has three or more authors/editors. One way to verify this claim is to note that the function format.rem.names is identical in apsr and jrm; since their truncation settings are not identical, the difference must occur in some other function.

Instead, you need to look inside the function format.lab.names.abbr, which looks like this in apsr.bst:

FUNCTION {format.lab.names.abbr}
{ 's :=
  s num.names$ 'numnames :=
  numnames #1 >
    { numnames #3 >
    { s #1 "{vv~}{ll}" format.name$ " et~al." * }
    { s format.lab.names.full }
      if$
    }
    { s #1 "{vv~}{ll}" format.name$ }
  if$
}

The key code sequence is the "inner" if clause, viz.,

    { numnames #3 >
    { s #1 "{vv~}{ll}" format.name$ " et~al." * }
    { s format.lab.names.full }
      if$

Freely translated, this code snippet says: "If the variable 'numnames' (which contains the number of authors/editors of the piece) is greater than 3, write the string 's' (which will contain the formatted string of authors, to be used in the citation call-out) as 'firstauthor et~al.'. Otherwise, i.e., if the number of authors is either 2 or 3, invoke the function format.lab.names.full." (The "outer" if clause is true if there is more than 1 author.)

What to do? Well, just change

    { numnames #3 >

to

    { numnames #2 >

(In my copy of the file apsr.bst, this code snippet occurs on line 572.)

Please do not modify/edit the original file (apsr.bst) directly. Instead, make a copy of the file and call the copy, say, apsr-mod.bst. Apply the suggested edit in apsr-mod.bst, and then save apsr-mod.bst to the directory that contains your main tex file. Finally, be sure to (a) change \bibliographystyle{apsr} to \bibliographystyle{apsr-mod} in your main tex file and (b) re-run LaTeX, BibTeX, and LaTeX twice more to fully propagate all changes.

|improve this answer|||||
  • 1
    You are great! Ingenious!!! Everything you have writte is right. I really used the aspr style and adapted it (few month ago). Thank you so much!!! – feder80 Feb 23 '16 at 7:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.