En general
\Citeauthor{aristotle:rhetoric,aristotle:poetics}
escribirá Aristotle; Aristotle
en lugar de simplemente Aristotle
. Para evitar esto, pedí ayuda para que \citeauthor
mis amigos se comportaran más como sus \textcite
contrapartes. En respuesta, obtuve una excelenterespuesta de moeweque se convirtió en un fragmento de código en mi biblatex.cfg
.
Esto funciona muy bien para authoryear
los 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
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 verbose
está 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 draft
cuáles debug
son casos especiales.