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.
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
:
note
field will have a captilazed first wordincollection
, 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:
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
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP