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}
Second solution
Edited again, so most multicite commands work.
Edited so \footcite
now works.
A reasonably effective solution that preserves many of biblatex
's featuers is provided by adjusting the way the year gets printed in citations. This can be done by redifining the commands associated to cite:year
and cite:extrayear
. This has the advantage of preserving the ibidem feature.
The code below includes a sample bibliography and then the main file with the redefined citation code.
\begin{filecontents}{test.bib}
@Article{Test,
author = {Author, A. N.},
title = {Article title},
year = 2005,
pages = {10-20},
journal = {Jour.},
vol = {100}
}
@Article{Test2,
author = {Author, A. N.},
title = {Second article},
year = 2005,
pages = {10-20},
journal = {Jour.},
vol = {100}
}
@Article{Test3,
author = {Author, A. B.},
title = {Third article},
year = 2005,
pages = {10-20},
journal = {Jour.},
vol = {100}
}
@Article{Test4,
author = {Author, A. N.},
title = {Fourth article},
year = 2007,
pages = {10-20},
journal = {Jour.},
vol = {100}
}
\end{filecontents}
\documentclass{article}
\usepackage[style=authoryear-icomp,autocite=plain]{biblatex}
\addbibresource{test.bib}
\renewbibmacro*{cite:labelyear+extrayear}{%
\iffieldundef{labelyear}
{}
{\iftoggle{blx@footnote}
{\printtext[bibhyperref]{%
\printfield{labelyear}%
\printfield{extrayear}}}
{\footnote{\printtext[bibhyperref]{%
\printfield{labelyear}%
\printfield{extrayear}}}}}}
\renewbibmacro*{cite:extrayear}{%
\iffieldundef{extrayear}
{}
{\iftoggle{blx@footnote}
{\printtext[bibhyperref]{\printfield{extrayear}}}%
{\footnote{\printtext[bibhyperref]{%
\printfield{labelyear}%
\printfield{extrayear}}}}}}
\renewcommand{\compcitedelim}{\space}
\begin{document}
\thispagestyle{empty}
\autocite{Test} and
\autocite[page 3]{Test}.
Some text \parencite{Test2}.
Here is a footnote citation\footcite{Test}.
\autocite{Test,Test4,Test3}.
\printbibliography
\end{document}
As the above shows this works with \autocite
, \parencite
and accepts their optional arguments. In this style \autocite
is the same as \cite
.
I haven't demonstrated \textcite
, though its ouptut may be useful sometimes; \footcite
has also been set up to work, thanks to biblatex
's blx@footnote
toggle that detects whether we are in a footnote or not.
The code also takes care of most multiple citations \cite{ref1,ref2}
. However, there is a spurious comma, if ref1
and ref2
are two publications from the same author in the same year. Fixing that requires, more substanitial rewriting of the citation style file: each of the commands \cite
, \textcite
, etc. in author-icomp.cbx
contains an explicit comma via \setunit{\addcomma}
, that needs to be deleted.
Original solution
Here is a repost of the original solution, as this apparently helps the OP best. It simply defines a newcommand \citepfy
(plain-foot-year) that calls \citeauthor
followed by a modified \footcite
command that produces only the year. It does not accept any of the optional arguments cite commands in biblatex
usually do.
\begin{filecontents}{b.bib}
@Article{Test,
author = {Author, A. N.},
title = {Article title},
year = 2005,
pages = {10-20},
journal = {Jour.},
vol = {100}
}
\end{filecontents}
\documentclass{article}
\usepackage[style=authoryear-icomp]{biblatex}
\addbibresource{b.bib}
\newcommand{\citepfy}[1]{\citeauthor{#1}\footyearcite{#1}}
\DeclareCiteCommand{\footyearcite}[\mkbibfootnote]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{citeyear}}
{}
{\usebibmacro{cite:postnote}}
\begin{document}
\citepfy{Test}
\printbibliography
\end{document}
Best Answer
For (1) use the package options
maxcitenames=3,maxbibnames=99
. See also my updated answer to biblatex: displaying all authors of multi-author works in the bibliography.For (2) add the following to your preamble:
For (3) see Suppress "In:" biblatex.