Wenden Sie einen String-Ersatz auf das Zitat an, wie es von \cite zurückgegeben wird.

Wenden Sie einen String-Ersatz auf das Zitat an, wie es von \cite zurückgegeben wird.

Ich habe biblatexmit Optionen

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

Die mit gemachten Zitate \citesehen so aus: Smith, 2019oder Smith and Baker, 2019und so weiter. Ich möchte einen Befehl definieren, der das Vorkommen meines Namens automatisch durch meine Initialen ersetzt. Und zwar brauche ich

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

Ich habe versucht, mit dem Paket xstringso etwas zu tun wie

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

Das Problem ist, dass ich nicht herausfinden kann, wie ich LaTeX anweisen kann, zu expandieren \cite{#1}. Als Ergebnis wird das Zitat ohne Ersetzung ausgegeben. Wenn ich es \cite{#1}einfach durch ändere #1und aufrufe, \newcite{bla Manny bla}wird es bla MC blawie erwartet ausgegeben.

Es sollte nicht relevant sein, aber ich verwende dies innerhalb der Beamer-Dokumentklasse.

Antwort1

AlsSkillmonsagt in den Kommentaren: \cite...Befehle sind nicht erweiterbar, daher kann man xstringsie nicht (einfach) ersetzen. Stattdessen würde ich versuchen, biblatexdie Ersetzung direkt durchführen zu lassen.

Eine Möglichkeit hierzu ist der Ansatz vonmeine AntwortZuBestimmten Autor mit Biblatex fett markieren(siehe auchMarkieren Sie einen Autor in der Bibliografie mit Biblatex und lassen Sie den Bibliografiestil zur Formatierung zu.). Die Idee besteht darin, den von Biber berechneten eindeutigen Namens-Hash für den Namen zu erhalten, den Sie ersetzen möchten, und ihn dann durch die Initialen in zu ersetzen \mkbibcompletename.

Beachten Sie, dass diese spezielle Implementierung mindestens biblatexVersion 3.13 (17.08.2019) erfordert.

Sie können die Ersetzung eines Namens beantragen durch\replacenamewith{<name>}{<replacement>}

\replacenamewith{Emma Sigfridsson}{ES}

Der Ersatz kann durch Neudefinition gestaltet werden \mkbinamereplacement.

Einige weitere Erklärungen finden Sie in den oben stehenden Links.

Warnung, dieses Dokument überschreibt die Datei <name of the main TeX file/\jobname>-replacenames.bibohne Warnung. Der Name dieser überschriebenen Hilfsdatei kann durch Neudefinition geändert werden \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 und Ryde 1998

verwandte Informationen