\citefield ссылка на библиографию (гиперссылка и обратная ссылка)

\citefield ссылка на библиографию (гиперссылка и обратная ссылка)

Я хотел бы узнать, есть ли способ получить ссылки и обратные ссылки по команде \citefield. Например, я хочу процитировать только название ссылки:

\citefield{ref}{title} 

или любое другое поле и получите гиперссылку на ссылку и соответствующую обратную ссылку.

РЕДАКТИРОВАТЬ:

МВЭ

\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}

решение1

Поскольку это еще один подход на более низком уровне, я запишу его как еще один ответ.

Вы также можете пропатчить \citefield-команду с помощью xpatch-пакета. Поэтому вам просто нужно найти ее базовый макрос, который будет ею вызываться:\blx@cite@citefield

Вы не сможете использовать \citefield{author}так, как хотели, потому что внутренне он обрабатывается не как , fieldа как name, поэтому вам также пришлось пропатчить \citename, если вы хотите использовать \citename{key}{author}. Третья команда в этой строке — это , \citelistкоторую вам также, возможно, придется пропатчить. Смотрите biblatex-manual, 3.7.7 Low-level Commands.

Мой пример содержит патчи для всех трех, но \citenameтолько \citelistв комментариях и непроверенные. (Я не вижу особого смысла использовать их таким образом.)

Если вы действительно хотите иметь ОДНУ команду, как \citeany{key}{field/name/list}, я полагаю, вам пришлось бы реализовать новый макрос с внутренним переключателем, который приводит к макросам \citefield, \citekey, \citelistв зависимости от заданного field/name/list. Но это гораздо сложнее, так как вам придется иметь дело с 5 необязательными параметрами из cite-commands. Я не знаю, как это сделать.

\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}

решение2

Я не знаю решения для \citefield. Но вы можете объявить new citecommand, который выведет определенное требуемое поле. В примере ниже я объявляю new citecommand \citetitle*(я не знаю, как перезаписать \citetitle). Затем вам просто нужно обернуть \printtext[bibhyperref]вывод\printfield...

МВЭ:

\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}

Связанный контент