Salvando Aristóteles: Como as redefinições do Biblatex podem ser condicionadas ao estilo selecionado (ou torná-las mais infalíveis)?

Salvando Aristóteles: Como as redefinições do Biblatex podem ser condicionadas ao estilo selecionado (ou torná-las mais infalíveis)?

Em geral

\Citeauthor{aristotle:rhetoric,aristotle:poetics}

será digitado Aristotle; Aristotleem vez de simplesmente Aristotle. Para evitar isso, pedi ajuda para que \citeauthormeus amigos se comportassem mais como seus \textcitecolegas. Em resposta, recebi um excelenteresposta de moeweque se tornou um pedaço de código no meu arquivo biblatex.cfg.

Isso funciona muito bem para authoryearestilos. No entanto, não funciona tão bem em outros casos. Isso é perfeitamente compreensível, mas gostaria de torná-lo mais à prova de erros humanos (especialmente os meus).

Em um mundo ideal, o código obviamente funcionaria com todos os estilos. No entanto, espero que a seguinte pergunta seja mais realista:

É possível verificar o estilo atual para executar as alterações somente se um estilo compatível conhecido tiver sido carregado? O estilo (citação) está armazenado em uma macro que eu possa verificar, por exemplo?

Obviamente, eu voltaria para Aristotle; Aristotle, mas posso conviver com isso. O que eu gostaria de evitar é o cenário ainda mais sinistro em que Aristóteles não é clonado, mas sim eliminado ou 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}

Responder1

Os estilos atuais são armazenados nas macros internas \blx@bbxfilee nos \blx@cbxfilearquivos . Feliz ramificação!

\documentclass{article}

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

\begin{document}

\csname blx@bbxfile\endcsname

\csname blx@cbxfile\endcsname

\end{document}

insira a descrição da imagem aqui

Responder2

Este é um complementoA resposta de Henri Menke, apenas no caso de alguém precisar de algo assim. Com base nessa resposta, veja como configuro a condicionalização no 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

Acontece que praticamente qualquer estilo, mas verboseestá bem com as redefinições fornecidas por moewe. Mas, só para garantir, fiz uma verificação mais demorada em relação aos estilos padrão que funcionam bem, excluindo verbose, o que não é bom e draftquais debugsão casos especiais.

informação relacionada