4

Based on some experimenting and some reading (here on http://tex.stackexchange.com) I might have solved first issue I had. I have kept a strikeout-version of the first issue so that people have a change to correct me if my solution is faulty (see update from 2013-11-04 16:25:35Z below). Please feel free to let me know if the striked out text is utterly confusing to read.

I am using the biblatex package–with natbib capabilities–and the hyperref package, using the (Author, Year) style citations, and pdflatex as the engine.

I have run into two one issues.

First, \citeyear{} and the custom-made command \citejournal{}, thanks to Gonzalo Medina's answer (with the help of Audrey), do not produce clickable hyperlinks (see screenshot below this ¶).

enter image description here

It kinda makes sense to my why \citejournal{} does not work, but I do not understand why \citeyear{} doesn't work. According to the reference manual for the biblatex package (p. 88 [PDF link!]) "[t]he text commands (\citeauthor, \citeyear, etc.) are […] supported." Also, the hyperref should work, as long as the transformations of citations into clickable hyperlinks is support by the selected citation style (p. 47 in the reference manual for the biblatex package [PDF link!]).

I got the \citetitle{} and \citeauthor{} working with the help of this (\citetitle{}) and this (\citeauthor{}) answer, both by Audrey. I tried reproducing Audrey's method for \citeyear{} and \citejournal{}, but I got stuck.

Can anyone show me how I get the \citeyear{} and maybe the custom-made command \citejournal{} to create a link to the biography? (see below for reproducible example).

Furthermore, the second issue, from this beautiful example from Audrey I realized that it is possible to fix the links to include the postnote and bracket so that it is not only the year that is clickable but the whole parenthesis. I've tried reproducing his example, but I cannot get this to work with biblatex. Any suggestions to how I can expand the clickable hyperlinks?

\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}

\usepackage[backend=bibtex,
style=authoryear, natbib=true, 
        ]{biblatex}

\usepackage{hyperref}
\hypersetup{pdfborderstyle={/S/U/W 1}}

% thanks to https://tex.stackexchange.com/a/26684/22939
\DeclareCiteCommand{\citejournal}
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
    \usebibmacro{journal}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citebooktitle}
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
    \usebibmacro{booktitle}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citeintitle}% Based on \citetitle from biblatex.def
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\ifciteindex
     {\indexfield{indextitle}}
     {}%
   \iffieldundef{journaltitle}
     {\iffieldundef{booktitle}
        {\iffieldundef{maintitle}
          {\printfield[citetitle]{labeltitle}}% Behave like \citetitle if no "main" title
          {\printtext[maintitle]{\printfield[titlecase]{maintitle}}}}
        {\printtext[booktitle]{\printfield[titlecase]{booktitle}}}}
     {\printtext[journaltitle]{\printfield[titlecase]{journaltitle}}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}


%  Thanks to [Audrey](https://tex.stackexchange.com/a/108349/22939)
\DeclareCiteCommand{\citetitle}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\ifciteindex
     {\indexfield{indextitle}}
     {}%
   \printtext[bibhyperref]{\printfield[citetitle]{labeltitle}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}


%  Thanks to [Audrey](https://tex.stackexchange.com/a/75916/22939)
  \DeclareCiteCommand{\citeauthor}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\ifciteindex
     {\indexnames{labelname}}
     {}%
   \printtext[bibhyperref]{\printnames{labelname}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}


\begin{filecontents}{bibfile.bib}
@article{einstein,
  author =       "Albert Einstein",
  title =        "{Zur Elektrodynamik bewegter K{\"o}rper}. ({German})
                 [{On} the electrodynamics of moving bodies]",
  journal =      "Annalen der Physik",
  volume =       "322",
  number =       "10",
  pages =        "891--921",
  year =         "1905",
  DOI =          "http://dx.doi.org/10.1002/andp.19053221004"
}

@book{latexcompanion,
    author    = "Michel Goossens and Frank Mittelbach and Alexander Samarin",
    title     = "The \LaTeX\ Companion",
    year      = "1993",
    publisher = "Addison-Wesley",
    address   = "Reading, Massachusetts"
}
\end{filecontents}


\addbibresource{bibfile}

\begin{document}

\noindent
cite: \cite{einstein}, \cite{latexcompanion} \\
citet: \citet{einstein}, \citet[see][p. 20]{einstein} \\
multi citet: \citet{latexcompanion,einstein} \\
citep: \citep{einstein}, \citep[see][p. 20]{latexcompanion} \\
multi citep: \citep{latexcompanion,einstein} \\
citetext, citealp: \citetext{see \citealp{latexcompanion}, or even better \citealp{einstein}} \\
citeauthor: \citeauthor{einstein}, \citeauthor{latexcompanion} \\
citeyear: \citeyear{einstein}, \citeyear{latexcompanion} \\
citetitle: \citetitle{einstein} and \citetitle{latexcompanion} \\
citejournal: \citejournal{einstein}\\

\medskip

\printbibliography

\end{document}

Update 2013-11-04 16:07:35Z

I have written this update to \DeclareCiteCommand{\citejournal}

\DeclareCiteCommand{\citejournal}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\ifciteindex
     {\indexfield{journal}}
     {}%
   \printtext[bibhyperref]{\printfield[journal]{journaltitle}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}  

I've not updated the initial code I posted as I don't full understand––to say the least––what I am doing, but the above code seem to work.

Update 2013-11-04 16:25:35Z

Encouraged by moewe's comments I have reproduced the \DeclareCiteCommand{\citejournal} for the \DeclareCiteCommand{\citeyear}. As follows,

\DeclareCiteCommand{\citeyear}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\ifciteindex
     {\indexfield{year}}
     {}%
   \printtext[bibhyperref]{\printfield[journal]{year}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}  

Again, I have not updated the initial code I posted as I don't really understand what I am doing yet, but the above code seem to work.

David Carlisle
  • 757,742
Eric Fail
  • 1,077
  • Regarding your update: this is exactly what you can do with all the commands you mentioned in the first part of your question, just wrap the \print... part in a \printtext[bibhyperref]{...} command. This prints the text given in the argument as expected but adds the click-able hyperlink to the bibliography :entry. (Though I would not bother with the \ifciteindex thing: It was not there in the initial definition of the \citejournal command and does nothing for hyperlinks.) – moewe Nov 04 '13 at 17:10
  • Regarding your second question: Expansion of the link might be doable with quite a lot of redefinitions. Though I noticed that in Audrey's natbib code in the linked answer post and prenote were in fact not hyperlinked. I don't think that adding the pre and postnote in a seamless link will be very easy to achieve (a quite "choppy" version, however, is easily implemented but certainly not pleasing to the eye.). – moewe Nov 04 '13 at 17:15
  • A (not so) short comment on \DeclareCiteCommand{\citeyear}: You seem to have missed the \citeyear part (the braces are empty). Once again I would advise against the \ifcitenindex part (and the following {\indexfield{year}} as well as the empty pair of braces {}). Instead of \printtext[bibhyperref]{\printfield[journal]{year}} you could and should simply use \printfield[bibhyperref]{year} (or \printtext[bibhyperref]{\printfield{year}}). The journal does not do anything meaningful in this case (it tells biblatex to format the year as a journaltitle). – moewe Nov 04 '13 at 18:49
  • @moewe, regarding the \ifciteindex, the reason I included the \ifciteindex in my code-update suggestion is that it was included in both answers from @Audrey, found here (\citetitle{}) and here (\citeauthor{}). As I wrote above I don't fully understand––to say the least––what I am doing, but Audrey seem to know what he's doing (I suspect he is the Audrey Boruvka who coauthored the biblatex package). Would you expand on your reasons for not including it? – Eric Fail Nov 05 '13 at 10:23
  • @moewe, thank you for pointing out that I forgot \citeyear in \DeclareCiteCommand{}. – Eric Fail Nov 05 '13 at 12:58
  • Well, the \indexfield{year} part puts the year in the index (if citeindex is enabled [enable it via indexing=true or indexing=cite]). While I do see the benefit of putting titles and author names in the index, I can't see that cluttering it with years is in any way helpful (it does not add any valuable information for the reader to know that on page 15 you cited a work from 1905. Think of a historical work with an index where the reader finds the year 1945: While he expects to find a thorough analysis of the situation after WW II, he instead finds that you only cited a work from 1945.) – moewe Nov 05 '13 at 17:52
  • Regarding your request to expand the hyperlinks: Would you be OK with the output Audrey's answer gets you, or do you want even more links (you mentioned postnotes, what about prenotes? etc.). – moewe Nov 08 '13 at 18:20
  • Also one has to be careful in situations where multiple citations occur in one pair of parentheses. Obviously now, the whole pair cannot be linked to one entry. The same goes for multiple post- and prenotes (in the multicte commands there is a "global" and a "local" pre/post note position). What about concatenated Citations such as "Uthor 1994, 1995": What should "Uthor" link to, the 1994 or the 1995 entry? – moewe Nov 08 '13 at 18:29
  • Are there any news here? – Johannes_B Dec 06 '14 at 12:29

0 Answers0