biblatex: "et al." auch wenn uniquename = false

biblatex: "et al." auch wenn uniquename = false

Mit der biblatexOption uniquename = true(und citetracker = true, maxcitenames = 1) kann ich durch Hinzufügen des Codes \AtEveryCitekey{\ifciteseen{}{\defcounter{maxnames}{99}}}jedes Werk mit mehreren Autoren Author et al.nach seinem ersten vollständigen Zitat auf abkürzen, vgl. das MWE unten:

\documentclass{article}
\usepackage[style = authoryear-comp, citetracker = true, maxcitenames = 1, uniquename = true]{biblatex}
\AtEveryCitekey{\ifciteseen{}{\defcounter{maxnames}{99}}} % cite all authors of multi-authored works only once
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1963,
    AUTHOR = "John Lennon and Paul McCartney",
    TITLE = "She loves you",
    YEAR = "1963"}
@BOOK{lennon2004,
    AUTHOR = "Sean Lennon",
    TITLE = "My father was John Lennon",
    YEAR = "2004"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\noindent\cite{lennon1963}\\
\cite{lennon1963}\\
\cite{lennon2004}
\end{document}

Bildbeschreibung hier eingeben

Beim Wechsel uniquename = truezu uniquename = falsefunktioniert dies jedoch nicht:

Bildbeschreibung hier eingeben

Frage: Wie kann ich die Funktionalität \AtEveryCitekey{\ifciteseen{}{\defcounter{maxnames}{99}}}auch mit der biblatexOption beibehalten uniquename = false?


BEARBEITEN CarlosAntwort untenfunktioniert, aber jetzt frage ich mich, wie man das einschränken kann, sodass die Author 1, Author 2, and Author 3Abkürzung Author 1 et al.nur dann greift, wenn es drei oder mehr Autoren eines Werks gibt. Im MWE unten Lennon and McCartney 1963sollte in der zweiten Zitierung so bleiben, während in der zweiten Zitierung Lennon, McCartney, Harrison, and Starkey 1970auf abgekürzt werden sollte Lennon et al. 1970.

\documentclass{article}
\usepackage[style = authoryear-comp, citetracker = true, maxcitenames = 99, mincitenames = 2, uniquename = false]{biblatex}
\AtEveryCitekey{\ifciteseen{\defcounter{maxnames}{1}}{}} % cite all authors of multi-authored works only once
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1963,
    AUTHOR = "John Lennon and Paul McCartney",
    TITLE = "She loves you",
    YEAR = "1963"}
@BOOK{lennon1970,
    AUTHOR = "John Lennon and Paul McCartney and George Harrison and Richard Starkey",
    TITLE = "We're breaking up now",
    YEAR = "1970"}
@BOOK{lennon2004,
    AUTHOR = "Sean Lennon",
    TITLE = "My father was John Lennon",
    YEAR = "2004"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\noindent\cite{lennon1963}\\
\cite{lennon1963}\\
\cite{lennon1970}\\
\cite{lennon1970}\\
\cite{lennon2004}
\end{document}

Bildbeschreibung hier eingeben


BEARBEITEN zu BEARBEITEN

Carlos Antwort unten funktioniert perfekt. Ich habe den Code jedoch etwas vereinfacht und ein wenig optimiert, damit ich ihn zumindest verstehe, wenn ich ihn mir später ansehe :):

\AtEveryCitekey% for every citation
    {%
        \ifnumgreater{\value{labelname}}{2}% if there are >2 authors
            {%
                \ifciteseen% and if citation has been seen before
                    {\setcounter{maxnames}{1}}% then cite only one author
                    {\setcounter{maxnames}{\value{labelname}}}% otherwise cite all authors
            }
            {\setcounter{maxnames}{\value{labelname}}}% otherwise cite ≤2 authors
    }

Antwort1

"Ändern Sie die Logik". maxcitenames = 99in den biblatexOptionen und \defcounter{maxnames}{1}im Truevon ifciteseen.

MWE

\documentclass{article}
\usepackage[style = authoryear-comp, citetracker = true, maxcitenames = 99, uniquename = false]{biblatex}
\AtEveryCitekey{%
    \ifciteseen
    {\defcounter{maxnames}{1}}
    {}} % cite all authors of multi-authored works only once
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1963,
    AUTHOR = "John Lennon and Paul McCartney",
    TITLE = "She loves you",
    YEAR = "1963"}
@BOOK{lennon2004,
    AUTHOR = "Sean Lennon",
    TITLE = "My father was John Lennon",
    YEAR = "2004"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\noindent\cite{lennon1963}\\
\cite{lennon1963}\\
\cite{lennon2004}
\end{document}

Bildbeschreibung hier eingeben

BEARBEITEN Antwort auf die Bearbeitungsfrage.##

Ich habe zwei Möglichkeiten gefunden und werde beide posten.

Der erste

Dies ist nicht die beste Form, ich habe zunächst keine andere gefunden. Auf diese Weise wird es nicht verwendet \AtEveryCitekey. Es wird verwendet listtotal, dass es sich um einen Zähler für die Gesamtzahl in der Liste handelt ( author, editors... oder labelname). Der Zähler listtotalist nur zulässig inListenformatierungsanweisungen und haben keinen sinnvollen Wert, wenn sie anderswo verwendet werden.

Wenn \patchlabelnameformatder Wert von listtotalgrößer als zwei ist und es sich um die erste Zitierung handelt, legen Sie liststop(maximale Anzahl der zu druckenden Artikellisten) in fest \value{listtotal}. Wenn es sich nicht um die erste Zitierung handelt, listtopwird auf 1 gesetzt. Wenn der Wert von andererseits listtotalkleiner als zwei ist, listtopwird auf gesetzt \value{listtotal}.

MWE:

\documentclass{article}
\usepackage[style = authoryear-comp, citetracker = true,maxnames=2, minnames=2,uniquename=false]{biblatex}

\def\fgt{\setcounter{liststop}{\value{listtotal}}} %first and greater than two
\def\nfgt{\setcounter{liststop}{1}} %non first and greater than two

\def\flt{\setcounter{liststop}{\value{listtotal}}} %first and lower than two

\def\patchlabelnameformat{%
 \ifnumgreater{\value{listtotal}}{2}
    {\ifciteseen
       {\nfgt}
       {\fgt}}
    {\flt}}

\DeclareNameFormat{labelname}{%
 \patchlabelnameformat
 \ifcase\value{uniquename}%
    \usebibmacro{name:last}{#1}{#3}{#5}{#7}%
  \or
    \ifuseprefix
      {\usebibmacro{name:first-last}{#1}{#4}{#5}{#8}}
      {\usebibmacro{name:first-last}{#1}{#4}{#6}{#8}}%
  \or
    \usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
  \fi
  \usebibmacro{name:andothers}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1963,
    AUTHOR = "John Lennon and Paul McCartney",
    TITLE = "She loves you",
    YEAR = "1963"}
@BOOK{lennon1970,
    AUTHOR = "John Lennon and Paul McCartney and George Harrison and Richard Starkey",
    TITLE = "We're breaking up now",
    YEAR = "1970"}
@BOOK{lennon2004,
    AUTHOR = "Sean Lennon",
    TITLE = "My father was John Lennon",
    YEAR = "2004"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\noindent\cite{lennon1963}\\
\cite{lennon1963}\\
\cite{lennon1970}\\
\cite{lennon1970}\\
\cite{lennon2004}
\end{document}

Der Zweite

Die beste Form. Es wird verwendet \AtEveryCitekey. Die Logik ist die gleiche wie bei der ersten Methode, aber sie kann nicht verwendet werden listtotal, listtopda \AtEveryCitekeyes sich nicht um eine Listenformatierungsrichtlinie handelt. Auf diese Weise wird dann der Zähler verwendet labelnameund der festgelegt . Es muss in den Optionen maxnamesverwendet werden .uniquelist=falsebiblatex

MWE:

\documentclass{article}
\usepackage[style = authoryear-comp, citetracker = true,uniquename=false,uniquelist=false]{biblatex}

\AtEveryCitekey{\maxminformat} % cite all authors of

\def\fgt{\setcounter{maxnames}{\value{labelname}}} %first and greater than two
\def\nfgt{\setcounter{minnames}{1}\setcounter{maxnames}{1}} %non first and greater than two

\def\flt{\setcounter{maxnames}{\value{labelname}}} %first and lower than two

\def\maxminformat{%
 \ifnumgreater{\value{labelname}}{2}
    {\ifciteseen
       {\nfgt}
       {\fgt}}
    {\flt}}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1963,
    AUTHOR = "John Lennon and Paul McCartney",
    TITLE = "She loves you",
    YEAR = "1963"}
@BOOK{lennon1970,
    AUTHOR = "John Lennon and Paul McCartney and George Harrison and Richard Starkey",
    TITLE = "We're breaking up now",
    YEAR = "1970"}
@BOOK{lennon2004,
    AUTHOR = "Sean Lennon",
    TITLE = "My father was John Lennon",
    YEAR = "2004"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\noindent\cite{lennon1963}\\
\cite{lennon1963}\\
\cite{lennon1970}\\
\cite{lennon1970}\\
\cite{lennon2004}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen