.png)
Ich würde gerne wissen, ob es eine Möglichkeit gibt, Links und Backref-Links mit einem \citefield-Befehl zu erhalten. Ich möchte beispielsweise nur den Titel einer Referenz zitieren:
\citefield{ref}{title}
oder ein beliebiges anderes Feld, und erhalten Sie den Hyperlink zur Referenz und den entsprechenden Backref-Link.
BEARBEITEN:
MWE
\documentclass{article}
\usepackage[backref=true]{biblatex}
\usepackage{hyperref}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@misc{B02,
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Some text \cite{A01,B02}.
\newpage
In this cite \citefield{A01}{title} I do not get any link
\clearpage
Some more text \cite{A01}.
\printbibliography
\end{document}
Antwort1
Da es sich um einen anderen Ansatz auf einer niedrigeren Ebene handelt, werde ich es als eine andere Antwort schreiben.
Sie können den \citefield
-Befehl auch mit dem xpatch
-Paket patchen. Dazu müssen Sie nur das zugrundeliegende Makro finden, das von ihm aufgerufen wird:\blx@cite@citefield
\citefield{author}
Sie können es nicht wie gewünscht verwenden , da es intern nicht als , field
sondern als behandelt wird name
. Sie müssen also auch patchen \citename
, wenn Sie es verwenden möchten \citename{key}{author}
. Der dritte Befehl in dieser Zeile ist , \citelist
den Sie möglicherweise auch patchen müssen. Siehe biblatex-manual, 3.7.7 Low-level Commands
.
Mein Beispiel enthält Patches für alle drei, allerdings \citename
nur \citelist
in Kommentaren und ungetestet. (Für mich macht es nicht viel Sinn, sie auf diese Weise zu verwenden.)
Wenn Sie wirklich EINEN Befehl wie haben möchten \citeany{key}{field/name/list}
, müssen Sie vermutlich ein neues Makro mit einem internen Schalter implementieren, der je nach gegebenem zu den Makros \citefield
, \citekey
, führt . Dies ist jedoch etwas schwieriger, da Sie mit den 5 optionalen Parametern der Cite-Befehle umgehen müssen. Ich weiß nicht, wie das geht.\citelist
field/name/list
\documentclass{article}
\usepackage[backref=true,backend=biber]{biblatex}
\usepackage{hyperref}
\usepackage{filecontents}
\usepackage{silence}\WarningFilter{latex}{Overwriting file}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
url = {http://www.something.com}
}
@misc{B02,
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\usepackage{xpatch}
\xpatchcmd{\blx@cite@citefield}{\printfield[#4]{#5}}{\printtext[bibhyperref]{\printfield[#4]{#5}}}{}{}%patch \citefield
% \xpatchcmd{\blx@cite@citename}{\printnames[#4]{#5}}{\printtext[bibhyperref]{\printnames[#4]{#5}}}{}{}%patch \citename
% \xpatchcmd{\blx@cite@citelist}{\printlist[#4]{#5}}{\printtext[bibhyperref]{\printlist[#4]{#5}}}{}{}%patch \citelist
\begin{document}
Citefield A01 title: \citefield{A01}{title}.
\clearpage
Citefield B02 title: \citefield{B02}{title}.
Citefield A01 url: \citefield{A01}{url}.
\printbibliography
\end{document}
Antwort2
Ich kenne keine Lösung für \citefield
. Aber Sie können ein neues deklarieren citecommand
, das das gewünschte Feld ausgibt. Im folgenden Beispiel deklariere ich ein neues citecommand \citetitle*
(ich weiß nicht, wie man überschreibt \citetitle
). Dann müssen Sie nur noch ein \printtext[bibhyperref]
um die Ausgabe wickeln\printfield...
MWE:
\documentclass{article}
\usepackage[backref=true]{biblatex}
\usepackage{hyperref}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@misc{B02,
author = {Buthor, B.},
year = {2002},
title = {Bravo},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\DeclareCiteCommand*{\citetitle}%your new citecommand \citetitle*
{\boolfalse{citetracker}%
\boolfalse{pagetracker}%
\usebibmacro{prenote}}
{\ifciteindex
{\indexfield{indextitle}}
{}%
\printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}%like \citetile,
%only added \printtext[bibhyperref]{...} in this line
{\multicitedelim}
{\usebibmacro{postnote}}
\begin{document}
Some text \cite{A01,B02}.
\newpage
In this cite \citetitle*{A01} I do get a link now.
\clearpage
Some more text \cite{A01}.
\printbibliography
\end{document}