\citefield link para bibliografia (hyperref & backref)

\citefield link para bibliografia (hyperref & backref)

Gostaria de saber se existe uma maneira de obter links e links backref em um comando \citefield. Por exemplo, quero citar apenas o título de uma referência:

\citefield{ref}{title} 

ou qualquer outro campo e obtenha o hiperlink para a referência e o link backref correspondente.

EDITAR:

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}

Responder1

Como é outra abordagem de nível inferior, escreverei como outra resposta.

Você também pode corrigir o \citefield-command usando o xpatch-package. Portanto, você apenas precisa encontrar a macro subjacente que será invocada por ela:\blx@cite@citefield

Você não poderá usar \citefield{author}como queria, porque internamente não é tratado como a, fieldmas como a name, então você também teve que corrigir \citename, se quiser usar \citename{key}{author}. O terceiro comando nesta linha é \citelisto que você também pode precisar corrigir. Ver biblatex-manual, 3.7.7 Low-level Commands.

Meu exemplo contém patches para todos os três, mas \citenameapenas \citelistem comentários e não testados. (Não faz muito sentido para mim usá-los dessa maneira.)

Se você realmente deseja ter UM comando como , eu acho, você teve que implementar uma nova \citeany{key}{field/name/list}macro com uma opção interna que leva às macros \citefield,, dependendo do dado \citekey. Mas isso é um pouco mais difícil, pois você tem que lidar com os 5 parâmetros opcionais dos comandos de citação. Eu não sei como fazer isso.\citelistfield/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}

Responder2

Não conheço uma solução para \citefield. Mas você pode declarar um novo citecommandque imprimirá o campo desejado específico. No exemplo abaixo, declaro um novo comando cite \citetitle*(não sei como sobrescrever \citetitle). Então você só precisa envolver \printtext[bibhyperref]a saída\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}

informação relacionada