I'm writing an article in LaTeX using APA style, so I'm using the popular
apa.cls style. It defaults to using
apacite for citations and references, which works well enough.
But if I have a URL field in the BibTeX, like I always do in JabRef to remember where I found things, it prints it for each reference wasting a lot of space and not breaking lines properly. I also like the URLs I do show to be clickable hyperlinks, and my citations and cross-references as well. You can usually do this using
hyperref, but a lot of things break when using apacite and hyperref together. Here's the top of the file:
\documentclass[jou]{apa}
\usepackage{hyperref}
And here is the output of pdflatex:
! Undefined control sequence.
\hyper@@link ->\let \Hy@reserved@a
\relax \@ifnextchar [{\hyper@link@ }{\hyp...
l.83 \cite{Aris09Visual}
...
! Argument of \@@cite has an extra }.
\par
l.83 \cite{Aris09Visual}
...
Runaway argument?
>{\hyper@link@ }\def \reserved@b {\hyper@link@ [link]}\futurelet \@let@token \E
TC.
! Paragraph ended before \@@cite was complete.
\par
l.83 \cite{Aris09Visual}
Other people have had this problem before, but there aren't any great solutions. See the end for a good solution using
biblatex-apa instead of apacite. If you
insist on using apacite, there are instructions
here for how to make things
mostly work:
The simplest way to fix the problem is to put a single
instance of \protect
into hyperref.sty
.
Turn this: \def\bibcite#1#2{%
\@newl at bel{b}{#1\@extra at binfo}{%
\hyper@@link[cite]{}{cite.#1\@extra at b@citeb}{#2}%
into this: \def\bibcite#1#2{%
\@newl at bel{b}{#1\@extra at binfo}{%
\protect\hyper@@link[cite]{}{cite.#1\@extra at b@citeb}{#2}%
This occurs at
line 3972 in hyperref.sty [2007/02/07 v6.75r
and at
line 4939 in hyperref.sty [2008/04/05 v6.77l
(line 8328 of the corresponding hyperref.dtx
).
but
this breaks the citations. Later they
added additional code to the tex file:
It's really just a matter of executing APA's version of \bibcite
before doing the extra stuff that hyperref needs to create the hyper-linking (which seems to work just fine).
For example, the following coding seems to work OK.\usepackage{apacite}
\let\APAbibcite\bibcite %%%% add this line
\usepackage{color}
\definecolor{darkblue}{rgb}{0.0,0.0,0.3}
\usepackage[bookmarks=true]{hyperref}
\hypersetup{
pdfauthor={Salvatore Enrico Indiogine},
pdftitle={},
pdfsubject={TAMU EDCI},
pdfkeywords={},
pdfcreator={LaTeX with hyperref package},
pdfproducer={dvips + ps2pdf},
colorlinks,breaklinks,
linkcolor={darkblue},
urlcolor={darkblue},
anchorcolor={darkblue},
citecolor={darkblue}}
%%%% add the following 2 lines
\let\HYPERbibcite\bibcite
\def\bibcite#1#2{\APAbibcite{#1}{#2}\HYPERbibcite{#1}{#2}}
This fixes most problems, but there are still warnings and ampersands missing in the references.
A
better solution for me was to use
biblatex-apa with
biblatex instead of apacite.
First replace
\bibliography{...}
at the end of your tex file with
\printbibliography
. Then modify the the top to look like this (note the
noapacite
option for apa.cls).
\documentclass[jou,noapacite]{apa} %%%% apacite is buggy with hyperref
\usepackage{color}
\usepackage[]{hyperref}
\hypersetup{
pdfauthor={AUTHORS},
pdftitle={TITLE},
pdfkeywords={KEYWORDS},
colorlinks,breaklinks,
linkcolor={blue},
urlcolor={blue},
anchorcolor={blue},
citecolor={blue}}
%%%% bilatex-apa
\usepackage[american]{babel}
\usepackage{csquotes}
\usepackage[style=apa,hyperref,doi,url]{biblatex}
\DeclareLanguageMapping{american}{american-apa}
\bibliography{}