Ab zweiter Referenz nur noch der erste Autor

Erstellung eines Literaturverzeichnisses mit BibTeX, Biber, BibLaTeX und Co.


sqq
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Di 6. Dez 2016, 21:10

Ab zweiter Referenz nur noch der erste Autor

Beitrag 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}



Gast

Beitrag 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.)

sqq
Forum-Newbie
Forum-Newbie
Beiträge: 6
Registriert: Di 6. Dez 2016, 21:10

Beitrag von sqq »

Herzlichen Dank, Dein erster Vorschlag scheint mein Problem komplett zu lösen. :D

Antworten