Angezeigte Autoren + Jahr in Biblatex auf maximal 1 Zeile abkürzen

Angezeigte Autoren + Jahr in Biblatex auf maximal 1 Zeile abkürzen

Ich richte meine Arbeit biblatexfür meine Diplomarbeit ein und bin mir bewusst, dass ich die Anzahl der angezeigten Autoren in der Bibliographie einfach auf einen bestimmten Wert beschränken kann (z. B. \maxbibnames=5& \minbibnames=5). Ich möchte jedoch erreichen, dass die Zeile der Autoren einschließlich (Jahr) auf Nummer=X (sagen wir einfach 5 angezeigte Autoren) begrenzt ist, ABER auch nicht über die erste Zeile hinausgeht. Wenn also „Autoren einschließlich (Jahr)“ mehr als 1 Zeile im Dokument erfordern würde, schneidet biblatex einfach mehr Bibnames ab als ursprünglich mit \maxbibnames/ definiert \minbibnames(aber natürlich nur für diesen Eintrag).

Beispiel jetzt:

Einstein, A., Tesla, N., Jones, I., Jefferson, T. und Hood, R.

et al. (1980).Ein wirklich schönes Papier.Natur 1: 100-150.

Beispiel verkürzt neu:

Einstein, A., Tesla, N., Jones, I. und Jefferson, T. et al. (1980).

Ein wirklich schönes Papier.Natur 1: 100-150.

Antwort1

Der folgende Code zählt einfach die Anzahl der Namen herunter und prüft, ob sie in eine Zeile passen.

Die ursprünglichen Definitionen der Makros stammen von authoryear.bbx, wir fügen lediglich einen dünnen Wrapper hinzu, der herunterzählt und die Ausgabelänge misst.

\documentclass{article}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
\usepackage[backend=biber, style=authoryear, maxbibnames=999, dashed=false]{biblatex}
\usepackage{hyperref}

\addbibresource{biblatex-examples.bib}

\makeatletter
\newcounter{namecountdown}
\newlength{\bbx@namelength}
\newbibmacro*{bbx:measure:outer}[2]{%
  \settowidth{\bbx@namelength}{\usebibmacro*{#1}{#2}}%
  \ifboolexpr{test {\ifdimgreater{\bbx@namelength}{\linewidth}}
              and test {\ifnumgreater{\value{namecountdown}}{1}}}
    {\advance\c@namecountdown\m@ne
     \usebibmacro{bbx:measure:outer}{#1}{#2}}
    {\usebibmacro*{#1}{#2}}}

\renewbibmacro{author}{%
  \ifnumless{\value{maxnames}}{\value{author}}
    {\c@namecountdown\c@maxnames}
    {\c@namecountdown\c@author}%
  \usebibmacro{bbx:measure:outer}{bbx:measure:author:inner}{}}
\newbibmacro*{bbx:measure:author:inner}{%
  \ifboolexpr{
    test \ifuseauthor
    and
    not test {\ifnameundef{author}}
  }
    {\usebibmacro{bbx:dashcheck}
       {\bibnamedash}
       {\usebibmacro{bbx:savehash}%
        \printnames[][1-\the\value{namecountdown}]{author}%
        \iffieldundef{authortype}
          {\setunit{\printdelim{nameyeardelim}}}
          {\setunit{\printdelim{authortypedelim}}}}%
     \iffieldundef{authortype}
       {}
       {\usebibmacro{authorstrg}%
        \setunit{\printdelim{nameyeardelim}}}}%
    {\global\undef\bbx@lasthash
     \usebibmacro{labeltitle}%
     \setunit*{\printdelim{nonameyeardelim}}}%
  \usebibmacro{date+extradate}}


\renewbibmacro*{bbx:editor}[1]{%
  \ifnumless{\value{maxnames}}{\value{editor}}
    {\c@namecountdown\c@maxnames}
    {\c@namecountdown\c@editor}%
  \usebibmacro{bbx:measure:outer}{bbx:measure:editor:inner}{#1}}
\newbibmacro*{bbx:measure:editor:inner}[1]{%
  \ifboolexpr{
    test \ifuseeditor
    and
    not test {\ifnameundef{editor}}
  }
    {\usebibmacro{bbx:dashcheck}
       {\bibnamedash}
       {\printnames[][1-\the\value{namecountdown}]{editor}%
        \setunit{\printdelim{editortypedelim}}%
        \usebibmacro{bbx:savehash}}%
     \usebibmacro{#1}%
     \clearname{editor}%
     \setunit{\printdelim{nameyeardelim}}}%
    {\global\undef\bbx@lasthash
     \usebibmacro{labeltitle}%
     \setunit*{\printdelim{nonameyeardelim}}}%
  \usebibmacro{date+extradate}}

\renewbibmacro*{bbx:translator}[1]{%
  \ifnumless{\value{maxnames}}{\value{translator}}
    {\c@namecountdown\c@maxnames}
    {\c@namecountdown\c@translator}%
  \usebibmacro{bbx:measure:outer}{bbx:measure:translator:inner}{#1}}
\newbibmacro*{bbx:measure:translator:inner}[1]{%
  \ifboolexpr{
    test \ifusetranslator
    and
    not test {\ifnameundef{translator}}
  }
    {\usebibmacro{bbx:dashcheck}
       {\bibnamedash}
       {\printnames[][1-\the\value{namecountdown}]{translator}%
        \setunit{\printdelim{translatortypedelim}}%
        \usebibmacro{bbx:savehash}}%
     \usebibmacro{#1}%
     \clearname{translator}%
     \setunit{\printdelim{nameyeardelim}}}%
    {\global\undef\bbx@lasthash
     \usebibmacro{labeltitle}%
     \setunit*{\printdelim{nonameyeardelim}}}%
  \usebibmacro{date+extradate}}
\makeatother

\begin{document}
  \cite{companion,aksin,herrmann,sigfridsson,jaffe}
  \printbibliography
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen