I've been able to answer my own question using various hacks I found on tex.sx. As @PLK pointed out, there appears to be a compatibility issue with polyglossia and Biblatex, but among all the styles I tried this issue is only visible with the APA style. So I am using authoryear-comp instead that suits the requirements I stated. This might be useful for anyone wanting a simple, apalike style, particularly when using Mendeley.
- Citations: cite: year in parentheses or citep: Author-Year separated by coma) ->
\let\citealp\cite
\let\cite\textcite
- If using hyperlink, creating link for the full citation and not just the year. -> Answer from @Audrey, see MWE below.
Use of et al. when more than 2 authors. -> maxcitenames=2
Bibliography: Only initials for first/middle name. -> giveninits=true, uniquename=init
Last name, First name -> \DeclareNameAlias{sortname}{family-given}
- Never use et al. ->
maxbibnames=99
- Only show year, even when month is specified ->
\AtEveryBibitem{%
\clearfield{month}{}% \clearlist{language}{}% }
(also omits the language field)
- Never show URL (retrieved from...) ->
url=false, doi=false, isbn=false, eprint=false
- Issue in parentheses, next to volume -> see MWE below.
There are also some other tweaks in the MWE below, such as using "cited" instead of "cit." for backrefs, removing "in:" for articles, increasing vertical space for bib items.
\documentclass{article}
\usepackage{xcolor}
\usepackage{hyperref}
\hypersetup{%
colorlinks=true,
citecolor=blue}
\usepackage{polyglossia}
\setmainlanguage[variant=british]{english}
\usepackage{csquotes}
\PassOptionsToPackage{
natbib=true,
style=authoryear-comp,
hyperref=true,
backend=biber,
maxbibnames=99,
giveninits=true,
uniquename=init,
maxcitenames=2,
parentracker=true,
url=false,
doi=false,
isbn=false,
eprint=false,
backref=true,
} {biblatex}
\usepackage{biblatex}
\DeclareNameAlias{sortname}{family-given}
% remove "in:" from articles. Thanks to Herbert.
\renewbibmacro{in:}{%
\ifentrytype{article}{}{%
\printtext{\bibstring{in}\intitlepunct}}}
% mit "month" and "language" from Bibliography
\AtEveryBibitem{%
\clearfield{month}{}%
\clearlist{language}{}%
}
% some natbib backwards compatibility
\let\citealp\cite
\let\cite\textcite
% increase vertical space between bibliography items.
\setlength\bibitemsep{0.5ex}
\setlength\bibnamesep{1.2ex}
% Comma before and after journal volume. Thanks to lockstep.
\renewbibmacro*{volume+number+eid}{%
\setunit*{\addcomma\space}% NEW
\printfield{volume}%
\printfield{number}%
\printfield{eid}}
\DeclareFieldFormat[article]{number}{(#1)}% number of a journal
% Citation Hyperlinks (not just years), thanks to Audrey.
\makeatletter
\renewbibmacro*{cite}{% Based on cite bib macro from authoryear-comp.cbx
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\printtext[bibhyperref]{% Include labelname in hyperlink
\DeclareFieldAlias{bibhyperref}{default}% Prevent nested hyperlinks
\usebibmacro{cite:label}%
\setunit{\addspace}%
\usebibmacro{cite:labelyear+extrayear}}%
\usebibmacro{cite:reinit}}
{\iffieldequals{namehash}{\cbx@lasthash}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\usebibmacro{cite:extrayear}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:labelyear+extrayear}%
\savefield{labelyear}{\cbx@lastyear}}}
{\printtext[bibhyperref]{% Include labelname in hyperlink
\DeclareFieldAlias{bibhyperref}{default}% Prevent nested hyperlinks
\printnames{labelname}%
\setunit{\nameyeardelim}%
\usebibmacro{cite:labelyear+extrayear}}%
\savefield{namehash}{\cbx@lasthash}%
\savefield{labelyear}{\cbx@lastyear}}}}
{\usebibmacro{cite:shorthand}%
\usebibmacro{cite:reinit}}%
\setunit{\multicitedelim}}
\renewbibmacro*{textcite}{% Based on textcite bib macro from authoryear-comp.cbx
\iffieldequals{namehash}{\cbx@lasthash}
{\iffieldundef{shorthand}
{\ifthenelse{\iffieldequals{labelyear}{\cbx@lastyear}\AND
\(\value{multicitecount}=0\OR\iffieldundef{postnote}\)}
{\setunit{\addcomma}%
\usebibmacro{cite:extrayear}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:labelyear+extrayear}%
\savefield{labelyear}{\cbx@lastyear}}}
{\setunit{\compcitedelim}%
\usebibmacro{cite:shorthand}%
\global\undef\cbx@lastyear}}
{\ifnameundef{labelname}
{\printtext[bibhyperref]{% Include labelname in hyperlink
\DeclareFieldAlias{bibhyperref}{default}% Prevent nested hyperlinks
\iffieldundef{shorthand}
{\usebibmacro{cite:label}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\usebibmacro{cite:labelyear+extrayear}}
{\usebibmacro{cite:shorthand}}%
\ifthenelse{\iffieldundef{postnote}\AND
\(\value{multicitetotal}=0\AND\value{citetotal}=1\)}
{\bibcloseparen% Include closing parenthesis in hyperlink
\global\boolfalse{cbx:parens}}
{}}}
{\printtext[bibhyperref]{% Include labelname in hyperlink
\DeclareFieldAlias{bibhyperref}{default}% Prevent nested hyperlinks
\printnames{labelname}%
\setunit{%
\global\booltrue{cbx:parens}%
\addspace\bibopenparen}%
\ifnumequal{\value{citecount}}{1}
{\usebibmacro{prenote}}
{}%
\iffieldundef{shorthand}
{\iffieldundef{labelyear}
{\usebibmacro{cite:label}}
{\usebibmacro{cite:labelyear+extrayear}}%
\savefield{labelyear}{\cbx@lastyear}}
{\usebibmacro{cite:shorthand}%
\global\undef\cbx@lastyear}%
\ifthenelse{\iffieldundef{postnote}\AND
\(\value{multicitetotal}=0\AND\value{citetotal}=1\)}
{\bibcloseparen% Include closing parenthesis in hyperlink
\global\boolfalse{cbx:parens}}
{}}%
\savefield{namehash}{\cbx@lasthash}}}%
\setunit{%
\ifbool{cbx:parens}
{\bibcloseparen\global\boolfalse{cbx:parens}}
{}%
\multicitedelim}}
\makeatother
% Backrefs "cited" instead of "cit"
\DefineBibliographyStrings{english}{%
backrefpage={cited on p\adddot},
backrefpages={cited on pp\adddot}
}
\addbibresource{bib.bib}
\begin{document}
Finally, as written by \cite{Attanasio2010}, my Bibliography is cool \citep{Galindo2002}. Furthermore (see, for example, \citealp{Attanasio2010}) there are some cool tweaks.
\printbibliography
\end{document}
Example 18 from the biblatex documentation (18-numeric-hybrid.tex
) will get you most of the way there. The document below takes the example a step further by integrating citation labels for URL references via the shorthand
field, dispensing with the need for an additional citation command. The solution requires some fixes to the biber-only multiple sorting scheme feature available with biblatex 2.3+ and biber 1.3+.
\documentclass{article}
\usepackage[backend=biber,style=authortitle-dw,
labelnumber,defernumbers,alldates=iso8601]{biblatex}
\usepackage[colorlinks]{hyperref}
% adapted from authortitle-dw.cbx
\renewbibmacro*{cite:shorthand}{%
\printtext[bibhyperref]{\printfield{shorthand}}%
\ifkeyword{blog}
{\iffieldundef{year}
{}
{\setunit*{\addcomma\space}%
\iffieldundef{urlyear}{\printdate}{\printurldate}}}
{}%
\global\booltrue{cbx:noidem}}
\AtEveryCitekey{%
\ifkeyword{blog}
{\edef\cbxlabelnumber{\thefield{prefixnumber}\thefield{labelnumber}}%
\restorefield{shorthand}{\cbxlabelnumber}%
\ifboolexpr{ test {\ifbool{cbx:fullcite}} or
( test {\ifbool{cbx:firstfull}} and not test {\ifciteseen} ) }
{\clearfield{year}}
{}%
\DeclareFieldAlias{url}{blogurl}}
{}}
\defbibenvironment{blog}
{\list
{\printtext[labelnumberwidth]{%
\printfield{prefixnumber}%
\printfield{labelnumber}}}
{\setlength{\labelwidth}{\labelnumberwidth}%
\setlength{\leftmargin}{\labelwidth}%
\setlength{\labelsep}{\biblabelsep}%
\addtolength{\leftmargin}{\labelsep}%
\setlength{\itemsep}{\bibitemsep}%
\setlength{\parsep}{\bibparsep}}%
\renewcommand*{\makelabel}[1]{\hss##1}}
{\endlist}
{\clearfield{year}%
\DeclareFieldAlias{url}{blogurl}%
\let\finentrypunct\relax
\item}
\DeclareFieldFormat{blogurl}{\url{#1}}
\DeclareFieldFormat{labelnumberwidth}{#1\addcolon}
\begin{filecontents}{\jobname.bib}
@online{url1,
Url = {http://blogname.provider.com/stories/entry/#8360558},
Keywords = {blog},
Year = {2010-09-22}}
@online{url2,
Url = {http://blogname.provider.com/stories/text/#1239877},
keywords = {blog},
Year = {2004-04-13}}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
\cite{markey,url2,companion,url1}
\printbibheading
\printbibliography[heading=subbibliography,
title={Main References},notkeyword=blog,omitnumbers]
\printbibliography[heading=subbibliography,
title={Blog References},keyword=blog,env=blog,prefixnumbers={URL-},sorting=none]
\end{document}
Best Answer
Using the
authoryear
citation style,\parencite
uses the macro\nameyeardelim
to store what should go between the name and the year in the citation.In
authoryear.cbx
, the cite command\parencite
is defined in the following way:And in
biblatex.def
, we findYou could define your own cite command to put a comma between the author and the year and put everything in parantheses, e.g. by redefining
\nameyeardelim
:By changing
\nameyeardelim
back to simply\addspace
after printing this citation, we avoid interference with other citations.Using the
filecontents
package to produce a full example, this yieldsAnd this results in
so
\myparencite{test}
puts a comma between the author and the year.