Aplicar un reemplazo de cadena en la cita devuelta por \cite

Aplicar un reemplazo de cadena en la cita devuelta por \cite

tengo biblatexcon opciones

\usepackage[backend=bibtex, style=authoryear]{biblatex}

Las citas hechas con \citese ven así: Smith, 2019o Smith and Baker, 2019y así sucesivamente. Me gustaría definir un comando que reemplace automáticamente la aparición de mi nombre con mis iniciales. Es decir, necesito

\cite{SmithsPaper}  % --> Smith, 2019
\cite{MyPaper}      % --> Manny, 2019
%%%
\newcite{SmithsPaper}  % --> Smith, 2019
\newcite{MyPaper}      % --> MC, 2019

He intentado con el paquete xstringhacer algo como

\newcommand{\newcite}[1]{%
  \begingroup
  \edef\@temp{\cite{#1}}%
  \StrSubstitute{\@temp}{Manny}{MC}
  \endgroup
}

El problema es que no sé cómo decirle a LaTeX que se expanda \cite{#1}. Como resultado, la cita sale sin el reemplazo. Si cambio \cite{#1}simplemente #1y lo llamo \newcite{bla Manny bla}da bla MC blacomo se esperaba.

No debería ser relevante, pero lo estoy usando dentro de la clase de documento del proyector.

Respuesta1

ComoSkillmondice en los comentarios: \cite...los comandos no se pueden expandir, por lo que no puede (fácilmente) realizar xstringreemplazos en ellos. En lugar de eso, intentaría dejar que biblatexse hiciera el reemplazo directamente.

Una forma de hacerlo es utilizando el enfoque demi respuestaaPoner en negrita un autor específico usando biblatex(ver tambiénResalte un autor en la bibliografía usando biblatex permitiendo que el estilo de la bibliografía le dé formato). La idea es obtener el hash de nombre único calculado por Biber para el nombre que desea reemplazar y luego reemplazarlo con las iniciales en \mkbibcompletename.

Tenga en cuenta que esta implementación en particular requiere al menos biblatexla versión 3.13 (2019-08-17).

Puede solicitar el reemplazo de un nombre con\replacenamewith{<name>}{<replacement>}

\replacenamewith{Emma Sigfridsson}{ES}

El reemplazo se puede diseñar redefiniendo \mkbinamereplacement.

Se pueden encontrar algunas explicaciones más en los enlaces anteriores.

Advertencia, este documento sobrescribirá el archivo <name of the main TeX file/\jobname>-replacenames.bibsin previo aviso. El nombre de este archivo auxiliar sobrescrito se puede cambiar redefiniendo \hlblx@bibfile@name.

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[backend=biber, style=authoryear]{biblatex}

\addbibresource{biblatex-examples.bib}

\makeatletter
\def\hlblx@bibfile@name{\jobname -replacenames.bib}
\newwrite\hlblx@bibfile
\immediate\openout\hlblx@bibfile=\hlblx@bibfile@name

\newcounter{hlblx@name}
\setcounter{hlblx@name}{0}

\newcommand*{\hlblx@writenametobib}[2]{%
  \stepcounter{hlblx@name}%
  \edef\hlblx@tmp@nocite{%
    \noexpand\AfterPreamble{%
      \noexpand\setbox0\noexpand\vbox{%
        \noexpand\hlblx@getmethehash{hlblx@name@\the\value{hlblx@name}}}}%
  }%
  \hlblx@tmp@nocite
  \immediate\write\hlblx@bibfile{%
    @misc{hlblx@name@\the\value{hlblx@name},
          author = {\unexpanded{#1}}, %
          note   = {\unexpanded{#2}}, %
          options = {dataonly=true},}%
  }%
}

\AtEndDocument{%
  \closeout\hlblx@bibfile}

\addbibresource{\hlblx@bibfile@name}

\newcommand*{\hlblx@hashextract@i}[1]{%
  \csgdef{replacename@\thefield{fullhash}}{#1}}

\DeclareNameFormat{hlblx@hashextract}{%
  \usefield{\hlblx@hashextract@i}{note}}

\DeclareCiteCommand{\hlblx@getmethehash}
  {}
  {\printnames[hlblx@hashextract][1-999]{author}}
  {}
  {}

\renewcommand*{\mkbibcompletename}[1]{%
  \ifcsundef{replacename@\thefield{hash}}
    {#1}
    {\mkbinamereplacement{\csuse{replacename@\thefield{hash}}}}}

% {<name>}{<replacement>}
\newcommand*{\replacenamewith}{\hlblx@writenametobib}
\makeatother

% formatting for the replacement
\newcommand*{\mkbinamereplacement}[1]{\textbf{#1}}

% declare a replacement for a name
% this command can be used several times
\replacenamewith{Emma Sigfridsson}{ES}

\begin{document}
\cite{sigfridsson}

\printbibliography
\end{document}

ES y Ryde 1998

información relacionada