Hipervínculo con autoraño-comp en proyector

Hipervínculo con autoraño-comp en proyector

Considere el siguiente MWE:

\documentclass{beamer}

\usepackage{xpatch}
\usepackage{lmodern}

\usepackage[style=authoryear-comp,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}

\hypersetup{colorlinks=true}

% Combine label and labelyear links
\xpatchbibmacro{cite}
{\usebibmacro{cite:label}%
\setunit{\addspace}%
\usebibmacro{cite:labelyear+extrayear}}
{\printtext[bibhyperref]{%
    \DeclareFieldAlias{bibhyperref}{default}%
    \usebibmacro{cite:label}%
    \setunit{\addspace}%
    \usebibmacro{cite:labelyear+extrayear}}}{}{}

% Include labelname in labelyear link
\xpatchbibmacro{cite}
{\printnames{labelname}%
\setunit{\nameyeardelim}%
\usebibmacro{cite:labelyear+extrayear}}
{\printtext[bibhyperref]{%
    \DeclareFieldAlias{bibhyperref}{default}%
    \printnames{labelname}%
    \setunit{\nameyeardelim}%
    \usebibmacro{cite:labelyear+extrayear}}}{}{}

% Access hyperref's citation link start/end commands
\makeatletter
\protected\def\blx@imc@biblinkstart{%
\@ifnextchar[%]
    {\blx@biblinkstart}
    {\blx@biblinkstart[\abx@field@entrykey]}}
\def\blx@biblinkstart[#1]{%
\blx@sfsave\hyper@natlinkstart{\the\c@refsection @#1}\blx@sfrest}
\protected\def\blx@imc@biblinkend{%
\blx@sfsave\hyper@natlinkend\blx@sfrest}
\blx@regimcs{\biblinkstart \biblinkend}
\makeatother

\newbool{cbx:link}

% Include parentheses around labelyear in \textcite only in
% single citations without pre- and postnotes
\def\iflinkparens{%
\ifboolexpr{ test {\ifnumequal{\value{multicitetotal}}{0}} and
            test {\ifnumequal{\value{citetotal}}{1}} and
            test {\iffieldundef{prenote}} and
            test {\iffieldundef{postnote}} }}

\xpatchbibmacro{textcite}
{\printnames{labelname}}
{\iflinkparens
    {\DeclareFieldAlias{bibhyperref}{default}%
    \global\booltrue{cbx:link}\biblinkstart%
    \printnames{labelname}}
    {\printtext[bibhyperref]{\printnames{labelname}}}}{}{}

\xpatchbibmacro{textcite}
{\usebibmacro{cite:label}}
{\iflinkparens
    {\DeclareFieldAlias{bibhyperref}{default}%
    \global\booltrue{cbx:link}\biblinkstart%
    \usebibmacro{cite:label}}
    {\usebibmacro{cite:label}}}{}{}

\xpretobibmacro{textcite:postnote}
{\ifbool{cbx:link}% patch 2.7+
    {\ifbool{cbx:parens}
        {\bibcloseparen\global\boolfalse{cbx:parens}}
        {}%
        \biblinkend\global\boolfalse{cbx:link}}
        {}}
{}
{\xpatchbibmacro{textcite}% patch earlier releases
    {\setunit{%
        \ifbool{cbx:parens}
        {\bibcloseparen\global\boolfalse{cbx:parens}}
        {}%
        \multicitedelim}}
    {\ifbool{cbx:link}
        {\ifbool{cbx:parens}
        {\bibcloseparen\global\boolfalse{cbx:parens}}
        {}%
        \biblinkend\global\boolfalse{cbx:link}}
        {}%
    \setunit{%
        \ifbool{cbx:parens}
        {\bibcloseparen\global\boolfalse{cbx:parens}}
        {}%
        \multicitedelim}}
    {}{}}

\begin{document}
\begin{frame}
  \textcite{knuth:ct:e}
\end{frame}
\begin{frame}
  \frametitle{Bibliography}
  \printbibliography
\end{frame}
\end{document}

Como quiero que el hipervínculo en las citas incluya el nombre del autor y no solo el año, estoy usando, después de la línea que comienza con \hypersetup, el código en esterespuesta. Sin embargo, al hacer esto, aparece el error: Undefined control sequence.

El problema podría estar en esta parte del código:

\xpatchbibmacro{textcite}
    {\printnames{labelname}}
    {\iflinkparens
        {\DeclareFieldAlias{bibhyperref}{default}%
        \global\booltrue{cbx:link}\biblinkstart%
        \printnames{labelname}}
        {\printtext[bibhyperref]{\printnames{labelname}}}}{}{}

Cuando lo elimino, el error desaparece pero no obtengo el resultado deseado de vincular tanto el autor como el año.

Respuesta1

Si reemplaza la parte problemática de su código con

\xpatchbibmacro{textcite}
{\printnames{labelname}}
{\printtext[bibhyperref]{\printnames{labelname}}}{}{}

Obtendrá un nombre de autor y un año en los que se puede hacer clic. Sólo no se puede hacer clic en el espacio entre y el paréntesis. ¿Es esto suficiente capacidad de hacer clic?

ingrese la descripción de la imagen aquí

\documentclass{beamer}

\usepackage{xpatch}
\usepackage{lmodern}

\usepackage[style=authoryear-comp,backend=biber]{biblatex}
\addbibresource{biblatex-examples.bib}

\hypersetup{colorlinks=true}

% Combine label and labelyear links
\xpatchbibmacro{cite}
{\usebibmacro{cite:label}%
    \setunit{\addspace}%
    \usebibmacro{cite:labelyear+extrayear}}
{\printtext[bibhyperref]{%
        \DeclareFieldAlias{bibhyperref}{default}%
        \usebibmacro{cite:label}%
        \setunit{\addspace}%
        \usebibmacro{cite:labelyear+extrayear}}}{}{}

% Include labelname in labelyear link
\xpatchbibmacro{cite}
{\printnames{labelname}%
    \setunit{\nameyeardelim}%
    \usebibmacro{cite:labelyear+extrayear}}
{\printtext[bibhyperref]{%
        \DeclareFieldAlias{bibhyperref}{default}%
        \printnames{labelname}%
        \setunit{\nameyeardelim}%
        \usebibmacro{cite:labelyear+extrayear}}}{}{}

% Access hyperref's citation link start/end commands
\makeatletter
\protected\def\blx@imc@biblinkstart{%
    \@ifnextchar[%]
    {\blx@biblinkstart}
    {\blx@biblinkstart[\abx@field@entrykey]}}
\def\blx@biblinkstart[#1]{%
    \blx@sfsave\hyper@natlinkstart{\the\c@refsection @#1}\blx@sfrest}
\protected\def\blx@imc@biblinkend{%
    \blx@sfsave\hyper@natlinkend\blx@sfrest}
\blx@regimcs{\biblinkstart \biblinkend}
\makeatother

\newbool{cbx:link}

% Include parentheses around labelyear in \textcite only in
% single citations without pre- and postnotes
\def\iflinkparens{%
    \ifboolexpr{ test {\ifnumequal{\value{multicitetotal}}{0}} and
        test {\ifnumequal{\value{citetotal}}{1}} and
        test {\iffieldundef{prenote}} and
        test {\iffieldundef{postnote}} }}

%\xpatchbibmacro{textcite}
%{\printnames{labelname}}
%{\iflinkparens
%   {\DeclareFieldAlias{bibhyperref}{default}%
%       \global\booltrue{cbx:link}\biblinkstart%
%       \printnames{labelname}}
%   {\printtext[bibhyperref]{\printnames{labelname}}}}{}{}

\xpatchbibmacro{textcite}
{\printnames{labelname}}
{\printtext[bibhyperref]{\printnames{labelname}}}{}{}

\xpatchbibmacro{textcite}
{\usebibmacro{cite:label}}
{\iflinkparens
    {\DeclareFieldAlias{bibhyperref}{default}%
        \global\booltrue{cbx:link}\biblinkstart%
        \usebibmacro{cite:label}}
    {\usebibmacro{cite:label}}}{}{}

\xpretobibmacro{textcite:postnote}
{\ifbool{cbx:link}% patch 2.7+
    {\ifbool{cbx:parens}
        {\bibcloseparen\global\boolfalse{cbx:parens}}
        {}%
        \biblinkend\global\boolfalse{cbx:link}}
    {}}
{}
{\xpatchbibmacro{textcite}% patch earlier releases
    {\setunit{%
            \ifbool{cbx:parens}
            {\bibcloseparen\global\boolfalse{cbx:parens}}
            {}%
            \multicitedelim}}
    {\ifbool{cbx:link}
        {\ifbool{cbx:parens}
            {\bibcloseparen\global\boolfalse{cbx:parens}}
            {}%
            \biblinkend\global\boolfalse{cbx:link}}
        {}%
        \setunit{%
            \ifbool{cbx:parens}
            {\bibcloseparen\global\boolfalse{cbx:parens}}
            {}%
            \multicitedelim}}
    {}{}}

\begin{document}
    \begin{frame}
        \textcite{knuth:ct:e}
    \end{frame}
    \begin{frame}
        \frametitle{Bibliography}
        \printbibliography
    \end{frame}
\end{document}

información relacionada