[Tex/LaTex] Biblatex: how to shorten 3+ authors to et al. in short citations, but in full citations and bibliography all names should appear

biblatexbibliographiesciting

I need a pretty specific human-science citation style, that's why things got a bit difficult. I would like to use the et al. (andothers) in my short citations only. So when I cite something the first time and get a full citation and in my bibliography, there should be all names. But when I cite the same thing, only the first name and et al. should appear. I tried maxnames and maxbibnames, but the first one adresses both short and full citations and the second one only adresses the bibliography and not the full citations. Is there any way to make a difference between short and full citations for the et al.?
Here the MWE

\begin{filecontents}{MWE.bib}
@book{Pfister:Strom,
    author = {Christian Pfister and Muster, Hans and Muster, Beat and Muster, Friedrich},
    title = {Im Strom der Modernisierung},
    subtitle = {Bevölkerung, Wirtschaft und Umwelt 1700-1914},
    booktitle = {Geschichte des Kantons Bern seit 1798, Bd. 4},
    editor = {Junker, Beat and Pfister, Christian and Muster, Hans and Muster, Beat},
    date = {1995},
    location = {Bern},
}
\end{filecontents}

\documentclass[11pt, a4paper, tablecaptionabove]{scrartcl} 
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
%=============BIBLIOGRAPHIE, ZITIERWEISE=================== %
\usepackage[babel,german=guillemets]{csquotes}
\usepackage[%
style=alphabetic,
style=verbose-ibid,
labeldate,
dashed=false, %bei mehreren Werken desselben Autors kein Strich
backend=bibtex8,
idemtracker=false,
ibidtracker=constrict,
citepages=omit,
]{biblatex}

\usepackage{xpatch}

%Hg. bzw Hgg. in Klammern hinter Herausgeber, statt davor und vor Titel
\renewbibmacro*{byeditor+others}{%
    \ifnameundef{editor}
    {}
    {\printnames[byeditor]{editor}%
        \setunit{\addspace}%
        \usebibmacro{editor+othersstrg}%
        \clearname{editor}%
        \newunit}%
    \usebibmacro{byeditorx}%
    \usebibmacro{bytranslator+others}
    \setunit{\addcolon\space}
    \usebibmacro{booktitle}}
\xpatchbibmacro{byeditor+othersstrg}{\printtext}{\printtext[parens]}{}{}

\DefineBibliographyStrings{german}{%
    andothers = {et\ al\adddot}, %et al. statt u.a.
    editor = {\mkbibparens{Hg\adddot}}, %Hg. statt Hrsg.
    editors = {\mkbibparens{Hgg\adddot}}, %Hgg. plural
    byeditor = {\mkbibparens {Hg\adddot}}, 
}
\DeclareFieldFormat{postnote}{#1} %unterdrückt Präfix S.
\DeclareFieldFormat{multipostnote}{#1} %unterdrückt Präfix S.
\DeclareNameAlias{default}{last-first} %Autoren immer Nachname, Vorname sortieren
\renewbibmacro*{cite:short}{%
    \printnames{labelname}%
    \setunit*{\nameyeardelim}%
    \iffieldundef{labelyear}
    {}
    {\printtext[\addcolon]{\printtext[bibhyperlink]{%
                \printfield{labelyear}%
                \printfield{extrayear}}}}}

%Edition Feld superscript, wenn erlaubt
\DeclareFieldFormat{edition}{%
    \ifinteger{#1}
    {\textsuperscript{#1}}

    {\isdot\setunit{}}}

%\DeclareNameFormat{default}{%
%\usebibmacro{name:last-first}{#1}{#3}{#5}{#7}%
%\usebibmacro{name:andothers}}
\renewcommand{\multinamedelim}{\addsemicolon\space} %Semikolon zum trennen der Autoren
\renewcommand{\finalnamedelim}{\addsemicolon\space}
\renewcommand{\labelnamepunct}{\addcolon\space} %Zwischen Autor und Titel Doppelpunkt, kein Punkt
\renewcommand{\postnotedelim}{\addcolon\space} %Zwischen Jahrzahl und Seitenzahl Doppelpunkt, kein Komma
\renewcommand{\nametitledelim}{\addspace}
\renewbibmacro*{publisher+location+date}{% %Zwischen Ort und Jahr kein Komma
    \printlist{location}%
    {\setunit*{\addspace}}
    \printfield{edition}%
    \usebibmacro{date}%
    \newunit}

%überflüssiges Editionsfeld entfernen
\newcommand{\replaceedition}[1]
{%
    \xpatchbibdriver{#1}
    {\printfield{edition}%
        \newunit}
    {}%
    {}
    {\typeout{failed to patch driver #1}}
}
\replaceedition{book}
\replaceedition{collection}
\replaceedition{inbook}
\replaceedition{incollection}
\replaceedition{manual}

\renewbibmacro*{maintitle+booktitle}{%
    \iffieldundef{maintitle}
    {}
    {\usebibmacro{maintitle}%
        \newunit\newblock
        \iffieldundef{volume}
        {}
        {\printfield{volume}%
            \printfield{part}%
            \setunit{\addcolon\space}}}%
    %\usebibmacro{booktitle}%
    \newunit}

\xpatchbibdriver{inbook}{%
    \usebibmacro{maintitle+booktitle}%
    \newunit\newblock
    \usebibmacro{byeditor+others}%
}%
{%
    \usebibmacro{byeditor+others}%
    \setunit{\addcolon\space}\newblock
    \usebibmacro{maintitle+booktitle}%
}%
{}{}%

\xpatchbibdriver{inbook}{%
    \newunit\newblock
    \usebibmacro{chapter+pages}%
}%
{%
    \addcolon\space
    \usebibmacro{chapter+pages}%
}%
{}{}

\xpatchbibdriver{inbook}{%
    \newunit
    \iffieldundef{maintitle}
}%
{%
    \setunit{\addcomma\space}
    \iffieldundef{maintitle}
}%
{}{}

\xpatchbibdriver{incollection}{%
    \usebibmacro{maintitle+booktitle}%
    \newunit\newblock
    \usebibmacro{byeditor+others}%
}%
{%
    \usebibmacro{byeditor+others}%
    \setunit{\addcolon\space}\newblock
    \usebibmacro{maintitle+booktitle}%
}%
{}{}%

\xpatchbibdriver{incollection}{%
    \newunit\newblock
    \usebibmacro{chapter+pages}%
}%
{%
    \addcolon\space
    \usebibmacro{chapter+pages}%
}%
{}{}

\xpatchbibdriver{incollection}{%
    \newunit
    \iffieldundef{maintitle}
}%
{%
    \setunit{\addcomma\space}
    \iffieldundef{maintitle}
}%
{}{}

\xpatchbibdriver{inproceedings}{%
    \usebibmacro{maintitle+booktitle}%
    \newunit\newblock
    \usebibmacro{byeditor+others}%
}%
{%
    \usebibmacro{byeditor+others}%
    \setunit{\addcolon\space}\newblock
    \usebibmacro{maintitle+booktitle}%
}%
{}{}%

\xpatchbibdriver{inproceedings}{%
    \newunit\newblock
    \usebibmacro{chapter+pages}%
}%
{%
    \addcolon\space
    \usebibmacro{chapter+pages}%
}%
{}{}

\xpatchbibdriver{inproceedings}{%
    \newunit
    \iffieldundef{maintitle}
}%
{%
    \setunit{\addcomma\space}
    \iffieldundef{maintitle}
}%
{}{}

%Titel nicht in Anführungszeichen; S. vor Seitenangabe entfernen
\DeclareFieldFormat[inproceedings]{title}{#1}
\DeclareFieldFormat[inproceedings]{pages}{#1}
\DeclareFieldFormat[inbook]{title}{#1}
\DeclareFieldFormat[inbook]{pages}{#1}
\DeclareFieldFormat[incollection]{title}{#1} 
\DeclareFieldFormat[incollection]{pages}{#1}
\DeclareFieldFormat[article]{title}{#1}
\DeclareFieldFormat[article]{pages}{#1}


%\renewcommand{\nametitledelim}{\space}

% Titel nicht schräg
\DeclareFieldFormat{title}{#1}
\DeclareFieldFormat{citetitle}{#1}
\DeclareFieldFormat{booktitle}{#1}
\DeclareFieldFormat{maintitle}{#1}

% Journal Titel nicht schräg
\DeclareFieldFormat{journaltitle}{#1}

\bibliography{MWE} %name des .bib-Files

%=============ENDE BIBLIOGRAPHIE, ZITIERWEISE=================== %

\begin{document}
\autocite{Pfister:Strom}
\autocite{irrelevant}
\autocite{Pfister:Strom}

\printbibliography
\end{document}

This will get me:
enter image description here
So the short citation (Pfister et al. 1995) is good, but the full citation (the first one) and the bibliography should include all names given in the author field.
Thanks in advance!

Best Answer

The basic idea behind this answer is very similar to lockstep's answer to How do I instruct \fullcite to use maxbibnames rather than maxcitenames?, we want to change maxcitenames locally only for full citations though, so we cannot modify the entire citation command, we need to find and tweak the actual macro responsible for full citations (which is cite:full)

\makeatletter
\renewbibmacro*{cite:full}{%
  \defcounter{maxnames}{\blx@maxbibnames}%
  \usebibmacro{cite:full:citepages}%
  \printtext[bibhypertarget]{%
    \usedriver
      {\DeclareNameAlias{sortname}{default}}
      {\thefield{entrytype}}}%
  \usebibmacro{shorthandintro}}
\makeatother

Note the \makeatletter/\makeatother construct to make \blx@maxbibnames work as expected.

MWE

\documentclass{article}
\usepackage[style=verbose-ibid,backend=biber,maxbibnames=999]{biblatex}
\addbibresource{biblatex-examples.bib}

\makeatletter
\renewbibmacro*{cite:full}{%
  \defcounter{maxnames}{\blx@maxbibnames}%
  \usebibmacro{cite:full:citepages}%
  \printtext[bibhypertarget]{%
    \usedriver
      {\DeclareNameAlias{sortname}{default}}
      {\thefield{entrytype}}}%
  \usebibmacro{shorthandintro}}
\makeatother

\begin{document}
Lorem\footcite{aksin} ipsum\footcite{herrmann} dolor\footcite{aksin} sit\footcite{herrmann}.

\printbibliography
\end{document}

enter image description here

Related Question