I'm using the biblatex
package to add citations and a bibliography to my LaTeX document. I've noticed that only the first author plus "et al." is displayed for works with more than three authors. That's fine with me for in-text-citations, but I'd rather have the complete author information in the bibliography. How can I do that?
[Tex/LaTex] biblatex: displaying all authors of multi-author works in the bibliography
author-numberbiblatex
Related Solutions
What about name lists for editors or translators? If you want to apply the same truncation throughout, just use the package option maxnames=2
. The rest is achieved by redefining \finalnamedelim
- a macro that sets the delimiter before the final item in a name list.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=authoryear,maxnames=2]{biblatex}
\renewcommand*{\finalnamedelim}{\addspace\&\space}
\addbibresource{biblatex-examples.bib}
\begin{document}
Filler text \parencite{bertram,companion,jaffe,moraux}.
\printbibliography
\end{document}
The above sample document applies the format in both citations and the bibliography. To limit it only to the bibliography, use the option maxbibnames=2
and
\renewcommand*{\finalnamedelim}{%
\ifbibliography
{\addspace\&\space}
{\ifnumgreater{\value{liststop}}{2}{\finalandcomma}{}%
\addspace\bibstring{and}\space}}
If you're really determined to define your own style, I'd use the generic name formats from biblatex.def
as a starting point. Your format deviates from these in terms of name delimiters (\bibnamedelim...
), name part format (\mkbibname...
, casing, initials, order, etc.), elimination of spurious whitespace (\addspace
) and localization (\bibstring{andothers}
). Unless you apply similar formats to editor
, bookauthor
, translator
, etc. your name lists will appear inconsistent.
biblatex uses \printnames{labelname}
to print out author names. Therefor it only prints maxcitenames
, and at least mincitenames
author names (for the bibliography maxbibnames
/minbibnames
).
So setting maxcitenames
to 1
is the default behaviour you want: Morrs et al.
, while the fullcite only is wanted if the cite is not seen yet.
You can patch the existing bibmacros \textcite
and \cite
which are used by \citet
and \citep
with the xpatch
-package. With it you can replace \printnames{labelname}
with \printnames[][-\value{listtotal}]{labelname}
which will print out ALL names, no matter what maxcitenames
says.
If the cite was already seen, you can check with \ifciteseen{}{}
, therefore you have to enable manually the citetracker
-option from biblatex (see preamble). Maybe you have to adjust this option, so it fits your needs.
update MWE:
\begin{filecontents}{\jobname.bib}
@article{PhysRevB.39.7347,
title = {Eight new high-temperature superconductors with the 1:2:4 structure},
author = {Morris, Donald E. and Nickel, Janice H. and Wei, John Y. T. and Asmar, Naggi G. and Scott, Jeffrey S. and Scheven, Ulrich M. and Hultgren, Charles T. and Markelz, Andrea G. and Post, Jeffrey E. and Heaney, Peter J. and Veblen, David R. and Hazen, Robert M.},
journal = {Phys. Rev. B},
volume = {39},
issue = {10},
pages = {7347--7350},
numpages = {0},
year = {1989},
month = {Apr},
publisher = {American Physical Society},
doi = {10.1103/PhysRevB.39.7347},
url = {http://link.aps.org/doi/10.1103/PhysRevB.39.7347}}
\end{filecontents}
\documentclass[11pt, a4paper]{article}
\usepackage[english]{babel}
\usepackage[autostyle]{csquotes} % thanks http://tex.stackexchange.com/a/64383/22939
\usepackage[
backend=bibtex,
style=authoryear,
natbib=true,
maxbibnames=99,
maxcitenames=1,%modified
citetracker=true%added
]{biblatex}
\usepackage{hyperref}
\hypersetup{
pdfborderstyle={/S/U/W 1}, % thanks, http://tex.stackexchange.com/a/26085/22939
}
\addbibresource{\jobname.bib}
\DefineBibliographyStrings{english}{%
bibliography = {References},
}
\defbibheading{bibintocindent}[\refname]{%
\section*{#1}%
\addcontentsline{toc}{section}{\protect\numberline{}#1}%
\markboth{\MakeUppercase{#1}}{\MakeUppercase{#1}}}
%patches
\usepackage{xpatch}
\xpatchbibmacro{cite}{\printnames{labelname}}%
{\ifciteseen{\printnames{labelname}}{\printnames[][-\value{listtotal}]{labelname}}}
{}{}
\xpatchbibmacro{textcite}{\printnames{labelname}}%
{\ifciteseen{\printnames{labelname}}{\printnames[][-\value{listtotal}]{labelname}}}
{}{}
\begin{document}
\tableofcontents
\section{First section}
\citet{PhysRevB.39.7347} demonstrates $m$. However, it is also show that $q$ \citep[p. 7349]{PhysRevB.39.7347}\par\medskip
\citet{PhysRevB.39.7347} demonstrates $m$. However, it is also show that $q$ \citep[p. 7349]{PhysRevB.39.7347}
\printbibliography[heading=bibintocindent]
\end{document}
Output:
Best Answer
UPDATE
Simply set the package option
maxbibnames=99
in the preamble.There are also other options:
minalphanames
: the minimum number of alphabetic authors to be displayed.minbibnames
: the minimum number of authors displayed in bibliography.mincitenames
: the minimum number of authors displayed in citations.minnames
: sets bothminbibnames
andmincitenames
maxalphanames
: the maximum number of alphabetic authors to be displayed.maxbibnames
: the maximum number of authors displayed in bibliography.maxcitenames
: the maximum number of authors displayed in citations.maxnames
: sets bothmaxbibnames
andmaxcitenames
. Default value is3
.Notes
biblatex
1.1, which was released on January 5th, 2011, introduced the optionsmaxbibnames
,minbibnames
,maxcitenames
andmincitenames
(settable in the document preamble and in the configuration filebiblatex.cfg
).biblatex
1.6, which was released on July 29th, 2011, "removed the local max/minnames and max/minitems options from\printbibliography
and friends to enforce consistency. Please use the global options instead." (Release notes)ORIGINAL ANSWER:
The maximum number of displayed authors - both for in-text-citations and the bibliography - is controlled by the option
maxnames
(with a default value of 3). To show all authors only in the bibliography, don't change the value ofmaxnames
in the document preamble, but use the optional argument of\printbibliography
instead: Typeat the place in your document where you want the bibliography to appear.
If you want all bibliographies (and lists of shorthands) in all your LaTeX documents to display the complete author information, instead of typing
[maxnames=99]
every time, you can add the following code to the configuration filebiblatex.cfg
:Note that is a hack which uses internal
biblatex
commands and hopefully will be replaced by a proper package option in a later version ofbiblatex
(the current version is 0.9b). (\patchcmd
derives from theetoolbox
package, which is loaded automatically bybiblatex
.)