Since you're submitting a paper to a journal that has certain formatting requirements for the paper's bibliography (and lots of other aspects of the paper too, no doubt!), you should ask (if you haven't already done so) for a BibTeX bibliography style (.bst) file that implements the journal's requirements. With any luck, this .bst file will be compatible with natbib
and also implement the journal's house style (of making you cite the names of all authors of pieces that have three or fewer authors).
If you're not that lucky, there are three possibilities. First, if the .bst file is not compatible with natbib
, you're obviously out of luck. (Fortunately, though, natbib
is enormously robust and works with the overwhelming majority of .bst files.) Second, if the .bst file is compatible with natbib
but does not contain a function called format.lab.names
, you're also out of luck. That's what's meant, basically, by the statement in natbib's manual that "starred [citation command] versions can only list the full authors if the .bst file supports this feature." (Of course, such a .bst file must also provide a few functions that call the format.lab.names
function...)
Third, if the .bst file does contain such a function but doesn't implement the journal's house style, i.e., if the \cite[pt]*
macros output Adams et~al.
for a piece that has exactly three authors (and the first author's surname is "Adams"...), you are not out of luck. All you need to do is to replace the existing format.lab.names
function with one that does obey the journal's house style. The existing format.lab.names
function should (more or less...) look like:
FUNCTION {format.lab.names}
{ 's :=
"" 't :=
s #1 "{vv~}{ll}" format.name$
s num.names$ duplicate$
#2 >
{ pop$
" " * bbl.etal *
}
{ #2 <
'skip$
{ s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" =
{
" " * bbl.etal *
}
{ bbl.and space.word * s #2 "{vv~}{ll}" format.name$
* }
if$
}
if$
}
if$
}
You should replace this code with the following code:
FUNCTION {format.lab.names}
{'s :=
"" 't :=
#1 'nameptr :=
s num.names$ 'numnames :=
numnames 'namesleft :=
{ namesleft #0 > }
{ s nameptr
"{vv~}{ll}" format.name$
't :=
nameptr #1 >
{
nameptr #2 =
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 *
}
{
numnames #2 >
{ "," * }
'skip$
if$
bbl.and
space.word * t *
}
if$
}
if$
}
't
if$
nameptr #1 + 'nameptr :=
namesleft #1 - 'namesleft :=
}
while$
}
After making this replacement, save the .bst file under a new name and adjust the \bibliographystyle
command to point to the new file.
If you get complaints from BibTeX about nonexistent bbl.and
and/or bbl.etal
functions, just add the following code to the new .bst file (somewhere near the top of the file, soon after the start of the section in which the bibtex functions are defined):
FUNCTION {bbl.and}
{ "and"}
FUNCTION {bbl.etal}
{ "et~al." }
I believe you need to load the ACM-Reference-Format-Journals
style to get citations and references in the form described in the excerpts you've posted. I.e., issue the command
\bibliographystyle{ACM-Reference-Format-Journals}
instead of \bibliographystyle{acm}
. If you don't already have this style file, go to the ACM LaTeX Style Guide webpage and download and unpack any one of the three zip files for authors (v2-acmsmall.zip, v2-acmlarge.zip, v2-acmtog.zip), and then copy the .bst
file to the directory that contains your TeX file(s).
To get authoryear-style citations, you should also load the natbib
package.
Addendum Feb. 2017: The ACM LaTeX style guide webpage appear to have migrated to https://www.acm.org/publications/acm-latex-style-guide-3jan2017.
Addendum Apr. 2021: The ACM LaTeX style guide webpage has migrated yet again. It is currently available at ACM Primary Article Templates AND Publication Workflow. Note that there are separate templates, depending on whether your computer uses MacOS or Windows. (I have no idea what users of Linux, etc, might want to do.) The ACM's template files are now also available in an Overleaf depository.
Best Answer
Okay, so I figured it out mostly based an answer given here. Also, I looked into the bibliographystyle and setcitestyle commands. Here is a minimal working example:
Note that for the above to typeset, there must be a file called "references.bib" in the same directory as the TeX file, and the keyword for the reference in the bib file must be "first". Also, the compiler will yell at you for not having the right citation format, but it should prompt you to press enter to continue anyway (possibly different depending on your version of LaTeX).
Happy LaTeXing :)