2

The attached MWE gives the following result

Author, A., B. Author, C. Author, et al. (1992). “Title”. In: Booktitle, ed. by A. Editor, B. Editor, and C. Editor. Vol. 59. Springer, New York.

What I'd like to have is

Author, A., B. Author, C. Author, et al. (1992). “Title”. In: Booktitle, ed. by A. Editor, et al. Vol. 59. Springer, New York.

i.e. display only the first editor followed by et al. while keeping the first three authors before et al.

MWE:

\documentclass{article}

\usepackage[    
    backend=biber,      % use biber backend or bibtex
    bibencoding=utf8,   % use auto file encode
    style=authoryear,   % use alphabetic (or numeric) bib style
    natbib=true,            % allow natbib commands
    hyperref=true,      % activate hyperref support
    backref=false,      % activate backrefs
    isbn=true,              % don't show isbn tags
    url=false,              % don't show url tags
    doi=true,                   % show doi tags
    urldate=long,           % display type for dates
    maxnames=2,             % max number of names in text ??
    minnames=1,             % min number of names in text ??
    maxbibnames=4,      % max number of names in bibliography
    minbibnames=3,      % number of names in bibliography (bevor et al)
    maxcitenames=2,     % max number of names in text ??
    mincitenames=1,     % max number of names in text ??
    dashed=false,           % do not replace same author with dash 
    useprefix=false,    % ?
    firstinits=true,    % abbreviate first names
    uniquename=init,    % otherwise option conflict with firstinits=true
]{biblatex}

\usepackage{filecontents}

\begin{filecontents}{\jobname.bib}
@incollection{test,
    year={1992},
    booktitle={Booktitle},
    volume={59},
    editor={Editor, A. and Editor, B. and Editor, C.},
    title="{Title}",
    publisher={Springer, New York},
    author={Author, A. and Author, B. and Author, C. and Author, D. and Author, E.},
}
\end{filecontents}

\newbibmacro*{byeditor+others}{%
    \ifnameundef{editor}
    {}
    {   \setunit{\addcomma\space}
        \usebibmacro{byeditor+othersstrg}%
        \setunit{\addspace}%
        \printnames[byeditor]{editor}%
        \clearname{editor}%
        \newunit}%
    \usebibmacro{byeditorx}%
    \usebibmacro{bytranslator+others}}

\addbibresource{\jobname.bib}

\nocite{*}

\begin{document}

    \printbibliography

\end{document}
  • For your first request you could either patch the bibdriver with xpatch to have a \setunit{\addcomma\space} instead of the normal \newunit\newblock at the appropriate place, or try some tricks with inserting the \setunit command right into the byeditor macro. – moewe Jan 14 '16 at 18:37
  • @moewe Thanks a lot for your comment! With a bit trial and error I found the right place to insert the \setunit{\addcomma\space}. So only the problem with the number of editors remains. – user36296 Jan 14 '16 at 19:45
  • Great, I think if you move the \setunit{\addcomma\space} bit further up, you can get even better results: \renewbibmacro*{byeditor+others}{% \setunit{\addcomma\space}% \ifnameundef{editor} {} {\usebibmacro{byeditor+othersstrg}% \setunit{\addspace}% \printnames[byeditor]{editor}% \clearname{editor}% \newunit}% \usebibmacro{byeditorx}% \usebibmacro{bytranslator+others}} (line breaks not to scale) – moewe Jan 15 '16 at 7:11
  • One solution (not the nicest, I think) is to use the second optional argument to \printnames to specify the number of names printed, since we already modify byeditor+others we only need \renewbibmacro*{byeditor+others}{% \setunit{\addcomma\space}% \ifnameundef{editor} {} {\usebibmacro{byeditor+othersstrg}% \setunit{\addspace}% \printnames[byeditor][1-1]{editor}% \clearname{editor}% \newunit}% \usebibmacro{byeditorx}% \usebibmacro{bytranslator+others}} (line breaks, again, not to scale). – moewe Jan 15 '16 at 8:09
  • The drawback of that solution is that editora, translators etc. are treated differently: they still get all their names displayed, a change for those would require some more code. – moewe Jan 15 '16 at 8:11
2

You can use the second optional argument of \printnames to specify the number of names printed, the syntax is [<start>-<stop>], so in your case

\printnames[byeditor][1-1]{editor}

The relevant occurrence is in byeditor+others

\renewbibmacro*{byeditor+others}{%
  \setunit{\addcomma\space}%
  \ifnameundef{editor}
    {}
    {\usebibmacro{byeditor+othersstrg}%
     \setunit{\addspace}%
     \printnames[byeditor][1-1]{editor}%
     \clearname{editor}%
     \newunit}%
  \usebibmacro{byeditorx}%
  \usebibmacro{bytranslator+others}}

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.