Allgemein
\Citeauthor{aristotle:rhetoric,aristotle:poetics}
wird gesetzt, Aristotle; Aristotle
anstatt einfach Aristotle
. Um dies zu vermeiden, bat ich um Hilfe, damit \citeauthor
sich meine Freunde mehr wie ihre Gegenstücke benehmen \textcite
. Als Antwort erhielt ich eine ausgezeichneteAntwort von moewedas wurde zu einem Codeblock in meinem biblatex.cfg
.
Das funktioniert bei Stilen sehr gut authoryear
. In anderen Fällen funktioniert es jedoch nicht so gut. Das ist vollkommen verständlich, aber ich möchte es sicherer gegen menschliche Fehler machen (insbesondere gegen meine).
In einer idealen Welt würde der Code natürlich mit allen Stilen funktionieren. Ich hoffe jedoch, dass die folgende Frage realistischer ist:
Ist es möglich, den aktuellen Stil zu prüfen, um die Änderungen nur dann durchzuführen, wenn ein bekanntermaßen kompatibler Stil geladen wurde? Ist der (Zitations-)Stil in einem Makro gespeichert, das ich beispielsweise prüfen könnte?
Natürlich würde ich dann wieder zu zurückkehren Aristotle; Aristotle
, aber damit kann ich leben. Was ich vermeiden möchte, ist das insgesamt unheilvollere Szenario, in dem Aristoteles nicht geklont, sondern eliminiert oder verschwunden wird.
\documentclass{article}
\usepackage[backend=biber,style=verbose]{biblatex}
\bibliography{biblatex-examples}
\makeatletter
% ateb moewe: http://tex.stackexchange.com/a/352471/ addaswyd o gôd Biblatex am \textcite et al.
% BEGIN redefine \citeauthor et al. to behave more like \textcite et al.
\providebibmacro*{cite:reinit}{%
\global\undef\cbx@lasthash
\global\undef\cbx@lastyear
}
\providebibmacro*{cite:init}{\usebibmacro{cite:reinit}}
\newbibmacro*{citeauthor}{%
\ifnameundef{labelname}
{\usebibmacro{cite:reinit}}
{%
\iffieldequals{namehash}{%
\cbx@lasthash
}{}{%
\printnames{labelname}%
\stepcounter{textcitecount}%
\savefield{namehash}{\cbx@lasthash}%
}%
}%
\setunit{\textcitedelim}%
}
\DeclareCiteCommand{\cbx@citeauthor}
{%
\usebibmacro{cite:init}%
}{%
\usebibmacro{citeindex}%
\usebibmacro{citeauthor}%
}{}{%
\usebibmacro{postnote}%
}
\providerobustcmd{\cbx@textcite@init}[2]{%
\setcounter{textcitetotal}{0}%
\setcounter{textcitecount}{0}%
\def\cbx@savedcites{#1}#2\cbx@savedcites\empty}
\DeclareCiteCommand{\citeauthor}[\cbx@textcite@init\cbx@citeauthor]{%
\gdef\cbx@savedkeys{}%
\citetrackerfalse
\pagetrackerfalse
\DeferNextCitekeyHook
\usebibmacro{cite:init}%
}{%
\ifthenelse{%
\iffirstcitekey\AND\value{multicitetotal}>0%
}{%
\protected@xappto\cbx@savedcites{()(\thefield{multipostnote})}%
\global\clearfield{multipostnote}%
}{}%
\xappto\cbx@savedkeys{\thefield{entrykey},}%
\iffieldequals{namehash}{%
\cbx@lasthash
}{}{%
\stepcounter{textcitetotal}%
\savefield{namehash}{\cbx@lasthash}%
}%
}{}
{%
\protected@xappto\cbx@savedcites{%
[\thefield{prenote}][\thefield{postnote}]{\cbx@savedkeys}%
}%
}
\DeclareDelimcontextAlias{cbx@citeauthor}{textcite}
% END redefine \citeauthor et al
\makeatother
\begin{document}
\Citeauthor{aristotle:rhetoric,aristotle:poetics}
\end{document}
Antwort1
Antwort2
Dies ist eine Ergänzung zuHenri Menkes Antwort, nur für den Fall, dass jemand anders so etwas braucht. Basierend auf dieser Antwort habe ich die Konditionalisierung in wie folgt eingerichtet biblatex.cfg
.
% ateb Henri Menke: https://tex.stackexchange.com/a/365438/
% bibstyle name: \csname blx@bbxfile\endcsname
% citestyle name: \csname blx@cbxfile\endcsname
\newif\ifcfr@biblatex@authorcomp
\cfr@biblatex@authorcompfalse
\def\cfr@blx@splitfile#1-#2\@null{#1}
\edef\tempa{\expandafter\cfr@blx@splitfile\blx@cbxfile-x\@null}
\edef\tempb{authoryear}
\edef\tempc{authortitle}
\edef\tempd{alphabetic}
\edef\tempe{numeric}
\edef\tempf{reading}
\ifx\tempa\tempb
\cfr@biblatex@authorcomptrue
\else\ifx\tempa\tempc
\cfr@biblatex@authorcomptrue
\else\ifx\tempa\tempd
\cfr@biblatex@authorcomptrue
\else\ifx\tempa\tempe
\cfr@biblatex@authorcomptrue
\else\ifx\tempa\tempf
\cfr@biblatex@authorcomptrue
\fi
\fi
\fi
\fi
\fi
\ifcfr@biblatex@authorcomp
...
\else
...
\fi
Es stellt sich heraus, dass praktisch jeder Stil verbose
mit den von moewe bereitgestellten Neudefinitionen gut zurechtkommt. Aber nur um auf Nummer sicher zu gehen, habe ich mich für eine etwas ausführlichere Prüfung mit Standardstilen entschieden, die einwandfrei funktionieren, mit Ausnahme von , verbose
was nicht einwandfrei ist und draft
und , debug
die Sonderfälle sind.