How to remove comma and “and” before institutional last author after compiling BibTeX

I have the following BibTeX entry:

@article{pubmed18800157,
author = {Heng, T.S. and Painter, M.W. and Immunological Genome Project Consortium},
title = {The {I}mmunological {G}enome {P}roject: networks of gene expression in immune cells.},
journal = {Nat. Immunol.},
pages = {1091-1094},
volume = {9},
number ={10},
year = {2008},
},
%\bibliographystyle{unsrt}


When the bibliography is generated, it puts comma a the end of the author:

Notice the comma after M.W. Painter. Is there a way to remove it?

-
Thats a duplicate of Getting Rid of Comma before 'and' in Authors' Names. – Christoph Sep 2 '13 at 6:51
@Christoph Well yes but the answer there doesn't really give much in the way of technical detail! – Joseph Wright Sep 2 '13 at 7:27
@JosephWright Yes, you are right. It wasn't meant to say, that it should be marked as duplicate. I should've said, "look at that question". – Christoph Sep 2 '13 at 7:46
Not part of the question, but as the institutional author is a single 'name', you should put the entire thing in braces. – Joseph Wright Sep 2 '13 at 8:18
Perhaps we should 'reverse dupe' here: this question has answers at the technical level, so might be a better 'main' question. – Joseph Wright Sep 2 '13 at 8:25

2 Answers

Complementary to the approach of editing a .bst file, if you are willing to shift to biblatex then you can do this using the trad-unsrt style and a very minor customisation:

\RequirePackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{pubmed18800157,
author = {Heng, T. S. and Painter, M. W. and {Immunological Genome Project Consortium}},
title = {The {Immunological} {Genome} {Project}:
networks of gene expression in immune cells.},
journal = {Nat. Immunol.},
pages = {1091-1094},
volume = {9},
number ={10},
year = {2008},
},
\end{filecontents}
\documentclass{article}
\usepackage[backend=bibtex,bibstyle=trad-unsrt]{biblatex}
\bibliography{\jobname}
\renewcommand*{\finalnamedelim}{\addspace \bibstring {and}\space}

\begin{document}

\textcite{pubmed18800157}

\printbibliography

\end{document}


Note that this has nothing to do with institutional authors: the same is true for any list of three or more authors with the unsrt style.

-
How can I do this in the lbx file? In Hungarian the comma is grammatically wrong, but redefining \finalnamedelim in the lbx file didn't work for me. – marczellm May 5 '14 at 16:37
@marczellm Broadly, I'd say 'you don't'. The reasoning is as follows: the style is defined by the .bbx file and is 'language-independent', while the language strings are defined by the .lbx file and are of course not. As such, commas are present not because of the language but because of the style: bibliography data is not in 'sentence form'. – Joseph Wright May 5 '14 at 16:52
For people that are looking for a biblatex solution here it might be worth adding that the conceptually more interesting solution is to modify \finalandcomma as can be seen in Biblatex IEEE extra comma before and: author1, author2, and author3 and Multiple authors in (classicthesis) Bibliography: removing comma before “and”. – moewe Jan 2 at 21:35

To get rid of that Oxford comma, you'll need to modify the .bst file – in your case that is unsrt.bst. Locate the file .bst file on your system, copy and rename it (to unsrtnox.bst, for example) and put it somewhere LaTeX can find it.

The relevant function is called FUNCTION {format.names} (unsrt.bst, l. 185).

If you get rid of the four lines

numnames #2 >
{ "," * }
'skip$if$


making it (in our case of unsrt.bst)

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


the comma before the last name disappears.

The test above is evoked at the penultimate name (otherwise a comma is printed following the name) and checks if the list contains more than two names, if so, the comma will be printed anyway. Getting rid of this test prevents the comma from being printed.

-