Ich richte meine Arbeit biblatex
fü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}