Doppelter benutzerdefinierter Backref-Text bei Verwendung von natbib oder natbibapa mit apacite

Doppelter benutzerdefinierter Backref-Text bei Verwendung von natbib oder natbibapa mit apacite

Wenn ich natbibapa mit apacite verwende und Backrefs einfüge, verdoppelt sich der benutzerdefinierte Text im Backref wie in diesem Bild.

MWE

Irgendwelche Ideen, wie man das Problem lösen kann? Danke!

Hier ist ein MWE:

\documentclass[11pt,a4paper]{article}
\usepackage[pagebackref=true]{hyperref} 
%OR \usepackage{backref}
\renewcommand*{\backref}[1]{Zitiert auf S.{\,}#1.}
\usepackage[natbibapa]{apacite}
%\usepackage{natbib}
\RequirePackage{filecontents}
\begin{filecontents}{jobname.bib}
@book{aaas1990,
 author = {{American Association for the Advancement of Science [AAAS]}},
 year = {1990},
 title = {{Science for all Americans}},
 address = {New York},
 publisher = {{Oxford University Press}},
 key = {AAAS}
}
\end{filecontents}

\begin{document}
I cite \citep{aaas1990}. %Problem occurs independent of the use of \cite{}, \citep{} or anything else.
\bibliography{jobname}
\bibliographystyle{apacite}

\end{document}
  • Das Problem tritt sowohl bei der Backref-Option des Hyperref als auch beim Backref-Paket auf.
  • Das Problem tritt sowohl bei der Natbibapa-Option des Apacite- als auch beim Natbib-Paket auf.

Antwort1

Ersetzen \renewcommand*{\backref}[1]{Zitiert auf S.{\,}#1.}mit \renewcommand*{\backrefxxx}[3]{Zitiert auf S.{\,}#1.}.

Sie können der Präambel auch die folgenden Zeilen hinzufügen, um zu sehen, dass der Befehl backrefzweimal aufgerufen wird (ich weiß nicht, warum), aber beim ersten Mal ist sein Parameter leer; beim zweiten Mal enthält der Parameter die Ausgabe von \backrefxxx:

\usepackage{xcolor}
\renewcommand*{\backref}[1]{\textcolor{red}{BACKREF[1=#1]ENDOFBACKREF}}
\renewcommand*{\backrefxxx}[3]{\textcolor{blue}{XXX[1=#1][2=#2][3=#3]ENDOFXXX}}

Argumente von backref und backrefxxx

Ein ausführlicherer Ersatz für \backrefheißt \backrefalt:

\usepackage{xcolor}
\renewcommand*{\backref}[1]{}   %% documentation says: use this when backref package version < 1.33
   %% I have 1.38 and when \backrefalt is defined, it replaces \backref
\renewcommand*{\backrefxxx}[3]{\textcolor{blue}{XXX[1=#1][2=#2][3=#3]ENDOFXXX}}
\renewcommand*{\backrefalt}[4]{\textcolor{green}{ALT[1=#1][2=#2][3=#3][4=#4]ENDOFALT}}

Argumente von backrefalt und backrefxxx

Beachten Sie, dass das 1. und 3. Argument, die an übergeben werden, \backrefaltdie Anzahl der Zitate sind (#1 ist die Anzahl der verschiedenen Seiten mit Rückverweisen, #3 die Gesamtzahl der Zitate). Beachten Sie, dass bei der folgenden Definition nichts ausgegeben wird, wenn #1=0 (der erste Aufruf von \backrefaltoben):

\renewcommand*{\backrefalt}[4]{%
  \ifcase #1 {}%    %% do not output anything if the first argument is 0!!!
  \or     page #2%  %% first argument=1   => was cited on a single page
  \else   pages #2% %% first argument>1   => was cited on multiple pages
  \fi
}

verwandte Informationen