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}
OK, this turns out to be one of the easier questions you've posted so far.
In the modified version of model5-names.bst
(you've called the modified copy something like mymodel5.bst
, right?), locate the function named format.full.names
.
In this function, locate the string bbl.and
. Replace this string with "and"
. Note the double quotes.
Save the file mymodel5.bst
.
Be sure to load the natbib
package with the option longnamesfirst
. The solution prposed here will not work unless this option is specified.
Rerun LaTeX, BibTeX, and LaTeX twice more to fully propagate all changes.
Remarks: (i) As indicated above, this solution works only if natbib's longnamesfirst
option is set. If this isn't to your liking, I'm afraid I have no advice on what else might be done. (ii) The solution proposed here won't be to APA style if you use \citep
instead of \citet
to cite a given entry for the first time in a document.
Best Answer
To get the desired output, you need to change the
\URLprefix
macro (to change the prefix before the URL string), theprint.url
function (to suppress printing if a non-emptydoi
string is present), and thefin.entry
function (to suppress the.
at end of the formatted entry.Change the instruction (ca. line 1686)
to
Change the
print.url
function (starts ca. line 995) fromto
The new code chunk checks if the
doi
field is empty; only if that's the case, the formatted contents of theurl
field are printed.Change the
fin.entry
function so that it looks like this (this will suppress printing a.
if either adoi
or aurl
field is non-empty, incorporating your earlier query):Addendum: Here's an MWE (minimum working example) that has two bib entries: one with both
url
anddoi
fields, and one with only aurl
field. If both fields are present, only thedoi
is printed; if only aurl
field is present, it's printed out, prefixed by "Retrieved from URL address ". (A separate comment: the modified bst file incorporates your earlier two requests as well: (i) showing thenumber
field, in parentheses, and (ii) no period at end of entry ifdoi
field is printed.)