# hyperlink name with biblatex authoryear

I am using biblatex with the authoryear styles.

So far I've been able to find everything I need easily in the excellent documentation, but I'm stuck on one thing.

With my current settings (below) citations only have the year hyperlinked to the bibliography entry. I think prior to using biblatex I would have the whole citation (authors + year) as a reference - I think this is easier to click etc. when browsing.

Is there an easy way to get this (or does it involve creating a new style).

``````\usepackage[style=authoryear,
bibstyle=authoryear,
citestyle=authoryear,
natbib=true,
hyperref=true,
backref=true,
abbreviate=true]{biblatex}
``````
-

Add the following to you preamble:

``````\DeclareCiteCommand{\cite}
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}

\DeclareCiteCommand*{\cite}
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{citeyear}}}
{\multicitedelim}
{\usebibmacro{postnote}}

\DeclareCiteCommand{\parencite}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}

\DeclareCiteCommand*{\parencite}[\mkbibparens]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{citeyear}}}
{\multicitedelim}
{\usebibmacro{postnote}}

\DeclareCiteCommand{\footcite}[\mkbibfootnote]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{ \usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}

\DeclareCiteCommand{\footcitetext}[\mkbibfootnotetext]
{\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{cite}}}
{\multicitedelim}
{\usebibmacro{postnote}}

\DeclareCiteCommand{\textcite}
{\boolfalse{cbx:parens}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\usebibmacro{textcite}}}
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}%
\multicitedelim}
{\usebibmacro{textcite:postnote}}
``````

Note that this code snipped is basically taken from here and adapted to biblatex v0.9b, i.e. the definitions for `\footcitetext` and `\textcite` are added resp. changed. (I also decided not to add hyperlinks for `\citeauthor` and `\citeyear`.)

-
Thanks very much! –  thrope Aug 14 '10 at 11:20
One thing I noticed with this is that for in text citations the closing bracket is not part of the hyperlink (although the rest of the text is) - so this looks a bit messy. Is there any way around that? –  thrope Jan 9 '11 at 19:38
@thrope Another user has requested a similar feature here. –  Audrey Aug 31 '11 at 17:27

The biblatex style `apa` (which is a modified authoryear style) does this for you. For example:

``````\usepackage[american]{babel}
\usepackage[style=apa]{biblatex}
\DeclareLanguageMapping{american}{american-apa}
``````

Note it is also recommended that you load the `csquotes` package.

It needs a relatively up to date version of biblatex to work.

-
I updated to MacTex / TexLive 2010 to try this but the apa style appears to be broken - my document wont compile with "Undefined control sequence. <argument> \mkbibdateapalongextra {year}{month}{day}" - same problem as here: developpez.net/forums/d984595/autres-langages/autres-langages/… –  thrope Jan 9 '11 at 19:39
Have you included the `\DeclareLanguageMapping` line? it is necessary... –  Seamus Jan 9 '11 at 20:58
@thrope and, of course, got the right `babel` settings? This sounds like a localisation issue. –  Seamus Jan 9 '11 at 21:04
I'm using babel with [english] so I put the mapping as {english}{english-apa}... I had another go being more careful to delete all the intermediate files and it seemed to compile successfully (using bibstyle=authoryear, citestyle=apa) - but it doesn't link the names... only the years of the citation are linked. –  thrope Jan 11 '11 at 10:22
@thrope What kind of citation command are you using (`\textcite` `\parencite` etc?) and what version of biblatex and biblatex-apa do you have? `\textcite{key}` should have both as a link. If you add postnotes, prenotes or things like that `\textcite[postnote]{key}` then only the year gets linked. –  Seamus Jan 11 '11 at 11:20

As an addition to the answer provided by lockstep, the following code for `\textcite` includes the closing parenthesis in the link too, and, unfortunately, the space afterwards.

``````\DeclareCiteCommand{\textcite}
{\boolfalse{cbx:parens}}
{\usebibmacro{citeindex}%
\printtext[bibhyperref]{\printnames{labelname}%
\printtext{ (\printfield{year}\printtext{)}}}}
{\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}%
\multicitedelim}
{\usebibmacro{textcite:postnote}}
``````
-
This appears to give the desired output only for `\textcite{<entrykey>}`, but doesn't handle notes properly. `prenote` gets ignored entirely. `postnote` is enclosed in a second set of parentheses. For example `\textcite[postnote]{key}` gives `labelname (labelyear) (postnote)`, not `labelname (labelyear, postnote)`. –  Audrey Sep 1 '11 at 0:06