Seite 1 von 1
Ab zweiter Referenz nur noch der erste Autor
Verfasst: Di 6. Dez 2016, 21:22
von sqq
Bei meiner Masterarbeit besteht folgende Anforderung: Stammt ein Werk von drei bis fünf AutorInnen, werden bei der ersten Nennung dieser Quelle alle Namen aufgeführt, bei jeder weiteren Nennung nur noch der Name des ersten Autors / der ersten Autorin, gefolgt von „u.a..“. Ich arbeite mit Natbib. Gibt es eine Möglichkeit das zu realisieren? Hier einmal das Minimalbeispiel:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{csquotes}
\usepackage[ngerman]{babel}
\usepackage[style=authoryear-icomp, natbib=true, maxbibnames=50, maxcitenames=5, uniquelist=false, backend=biber]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{SechsNamen,
author = {Ersternachname, Erstervorname and Zweiternachname, Zweitervorname and Drittervorname, Dritternachname and Vierternachname, Viertrevorname and Fuenfternachname, Fuenftervorname and Sechsternachname, Sechstervorname},
title = {Sechs Namen},
date = {2011},
}
@book{FuenfNamen,
author = {Ersternachname, Erstervorname and Zweiternachname, Zweitervorname and Drittervorname, Dritternachname and Vierternachname, Viertrevorname and Fuenfternachname, Fuenftervorname},
title = {Fuenf Namen},
date = {2011},
}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\section{Wie gewünscht}
Beim ersten Vorkommen sollen alle 5 Autoren angezeigt werden. \citep{FuenfNamen}. Nun kommt ein anderes Zitat mit 6 Namen von \citep{SechsNamen}.
\section{Hier weiss ich nicht weiter}
Beim zweiten Aufruf soll nur noch der erste Autor mit u.a. angezeigt werden und nicht mehr alle 5 Namen: \citep{FuenfNamen}
\printbibliography
\end{document}
Verfasst: Mi 7. Dez 2016, 16:24
von Gast
Dankenswerterweise benutzt Du nicht natbib, sondern
biblatex (das allerdings mit dem natbib-Kompatibilitätsmodus).
Als ersten Vorschlag hätte ich
\AtEveryCitekey{\ifciteseen{}{\defcounter{maxnames}{5}}}
anzubieten. Dazu brauchst Du als Option maxcitenames=2.
Der Stil
biblatex-apa implementiert etwas der Art und von dort könntest Du
\makeatletter
\newbibmacro*{labelname:doname}[8]{%
\ifboolexpr{test {\ifnumcomp{\value{listcount}}{>}{1}}
or
test {\ifuniqueprimaryauthor}}
{\setcounter{uniquename}{0}}
{}%
\ifcase\value{uniquename}%
\ifuseprefix
{\usebibmacro{name:family}{#1}{#3}{#5}{\relax}}
{\usebibmacro{name:family}{#1}{#3}{\relax}{\relax}}%
\or
\ifuseprefix
{\usebibmacro{name:given-family}{#1}{#4}{#5}{\relax}}
{\usebibmacro{name:given-family}{#1}{#4}{\relax}{\relax}}%
\or
\ifuseprefix
{\usebibmacro{name:given-family}{#1}{#3}{#5}{\relax}}
{\usebibmacro{name:given-family}{#1}{#3}{\relax}{\relax}}%
\fi
\usebibmacro{name:andothers}}
\DeclareNameFormat{labelname}{%
% First set the truncation point
\ifthenelse{\value{uniquelist}>1}
{\numdef\cbx@min{\value{uniquelist}}}
{\numdef\cbx@min{\value{minnames}}}%
% Always print the first name and the second if there are only two since
% "et al" must always be plural
\ifboolexpr{test {\ifnumcomp{\value{listcount}}{=}{1}}
or test {\ifnumcomp{\value{listtotal}}{=}{2}}}
{\usebibmacro{labelname:doname}%
{\namepartfamily}%
{\namepartfamilyi}%
{\namepartgiven}%
{\namepartgiveni}%
{\namepartprefix}%
{\namepartprefixi}%
{\namepartsuffix}%
{\namepartsuffixi}}
% We are looking at name >=3
% If the list is 6 or more names or we have seen citation before, potential truncation
{\ifboolexpr{test {\ifnumcomp{\value{listtotal}}{>}{5}}
or test {\ifciteseen}}
% Less than the truncation point, print normally
{\ifnumcomp{\value{listcount}}{<}{\cbx@min + 1}
{\usebibmacro{labelname:doname}%
{\namepartfamily}%
{\namepartfamilyi}%
{\namepartgiven}%
{\namepartgiveni}%
{\namepartprefix}%
{\namepartprefixi}%
{\namepartsuffix}%
{\namepartsuffixi}}
{}%
% At potential truncation point ...
\ifnumcomp{\value{listcount}}{=}{\cbx@min + 1}
% but enforce plurality of et al - only truncate here if there is at
% least one more element after the current potential truncation point
% so that "et al" covers at least two elements.
{\ifnumcomp{\value{listcount}}{<}{\value{listtotal}}
{\andothersdelim\bibstring{andothers}}
{\usebibmacro{labelname:doname}%
{\namepartfamily}%
{\namepartfamilyi}%
{\namepartgiven}%
{\namepartgiveni}%
{\namepartprefix}%
{\namepartprefixi}%
{\namepartsuffix}%
{\namepartsuffixi}}}
{}%
% After truncation point, do not print name
\ifnumcomp{\value{listcount}}{>}{\cbx@min + 1}
{\relax}%
{}}%
% We are looking at name >=3
% Name list is < 6 names or we haven't seen this citation before, print normally
{\usebibmacro{labelname:doname}%
{\namepartfamily}%
{\namepartfamilyi}%
{\namepartgiven}%
{\namepartgiveni}%
{\namepartprefix}%
{\namepartprefixi}%
{\namepartsuffix}%
{\namepartsuffixi}}}}
\newbibmacro*{cite}{%
\iffieldundef{shorthand}
{\ifthenelse{\ifciteibid\AND\NOT\iffirstonpage}
{\usebibmacro{cite:ibid}}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\printdelim{nonameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\usebibmacro{cite:extrayear}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:labelyear+extrayear}%
\savefield{labelyear}{\cbx@lastyear}}}
{\printnames[labelname][-\value{listtotal}]{labelname}%
\setunit{\printdelim{nameyeardelim}}%
\usebibmacro{cite:labelyear+extrayear}%
\savefield{namehash}{\cbx@lasthash}%
\savefield{labelyear}{\cbx@lastyear}}}}}
{\usebibmacro{cite:shorthand}%
\usebibmacro{cite:reinit}}%
\setunit{\multicitedelim}}
\makeatother
klauen.
Ich hätte gesagt, dass meine erste Lösung eigentlich schon tun sollte, was Du brauchst, Aber es kann sein, dass bei bestimmten Sonderfällen die Lösung von biblatex-apa stabiler ist. (Ich wüsste allerdings wirklich nicht, wo und wie.)
Verfasst: Mi 7. Dez 2016, 18:08
von sqq
Herzlichen Dank, Dein erster Vorschlag scheint mein Problem komplett zu lösen.
