Salvando a Aristóteles: ¿Cómo pueden las redefiniciones de Biblatex condicionarse al estilo seleccionado (o hacerse más infalibles)?

Salvando a Aristóteles: ¿Cómo pueden las redefiniciones de Biblatex condicionarse al estilo seleccionado (o hacerse más infalibles)?

En general

\Citeauthor{aristotle:rhetoric,aristotle:poetics}

escribirá Aristotle; Aristotleen lugar de simplemente Aristotle. Para evitar esto, pedí ayuda para que \citeauthormis amigos se comportaran más como sus \textcitecontrapartes. En respuesta, obtuve una excelenterespuesta de moeweque se convirtió en un fragmento de código en mi biblatex.cfg.

Esto funciona muy bien para authoryearlos estilos. Sin embargo, en otros casos no funciona tan bien. Esto es perfectamente comprensible, pero me gustaría hacerlo más resistente a los errores humanos (el mío, especialmente).

En un mundo ideal, el código obviamente funcionaría con todos los estilos. Sin embargo, espero que la siguiente pregunta sea más realista:

¿Es posible comprobar el estilo actual para ejecutar los cambios sólo si se ha cargado un estilo compatible conocido? ¿El estilo (de la cita) está almacenado en una macro que pueda verificar, por ejemplo?

Obviamente, entonces volvería a Aristotle; Aristotle, pero puedo vivir con eso. Lo que me gustaría evitar es el escenario mucho más siniestro en el que Aristóteles no sea clonado, sino eliminado o desaparecido.

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

Respuesta1

Los estilos actuales se almacenan en las macros internas \blx@bbxfiley \blx@cbxfile. ¡Feliz ramificación!

\documentclass{article}

\usepackage[style=authoryear,citestyle=verbose]{biblatex}

\begin{document}

\csname blx@bbxfile\endcsname

\csname blx@cbxfile\endcsname

\end{document}

ingrese la descripción de la imagen aquí

Respuesta2

Este es un complemento aLa respuesta de Henri Menke, en caso de que alguien más necesite algo como esto. Según esa respuesta, así es como configuro la condicionalización en 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

Resulta que prácticamente cualquier estilo, pero verboseestá bien con las redefiniciones proporcionadas por moewe. Pero, solo para estar seguro, he realizado una verificación más extensa de los estilos estándar que funcionan bien, excluyendo verbose, que no está bien y draftcuáles debugson casos especiales.

información relacionada