Some citation commands are intended for use "in the flow of text". Examples include \textcite
, \citetitle
, \citeauthor
and \citeyear
. If you stick to these commands and \autocite
, you can get by with just a change in biblatex
load-time option settings.
In the authoryear
styles, \autocite
is based on \parencite
. In verbose
styles, \autocite
invokes \smartcite
, which behaves like \parencite
in footnotes and \footcite
inline. The neat thing about \autocite
is that it moves punctuation for you. The starred variant \autocite*
issues the starred version of its backend citation command. In authoryear
styles this is \parencite*
, which prints only year
.
Possessive citations just require a change to the labelname
format in \textcite
. In the example below I adapted the solution in this post. Full person names are printed the first time an entry is cited via \textcite
or \citeauthor
with the help of another answer by domwass. To cope with differences in the construction of the authoryear
and verbose
citation commands, I've defined some patches using etoolbox
extensions by egreg.
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\usepackage[colorlinks]{hyperref}
\makeatletter
% patch bibmacros without optional arguments
\def\act@on@bibmacro#1#2{%
\expandafter#1\csname abx@macro@\detokenize{#2}\endcsname}
\def\pretobibmacro{\act@on@bibmacro\pretocmd}
% patch citation commands
\def\act@on@citecmd#1#2{%
\expandafter#1\csname blx@citei@\detokenize{#2}\endcsname}
\def\patchcitecmd{\act@on@citecmd\patchcmd}
% patch default name formats
\def\act@on@nameformat#1#2{%
\expandafter#1\csname abx@nfd@*@\detokenize{#2}\endcsname}
\def\pretonameformat{\act@on@nameformat\pretocmd}
\def\apptonameformat{\act@on@nameformat\apptocmd}
% track seen labelnames
\newcommand*{\cbx@seennames}{}
\newrobustcmd*{\cbx@nameseen}[1]{\listxadd{\cbx@seennames}{\detokenize{#1}}}
\newrobustcmd*{\cbx@ifnameseen}[1]{\xifinlist{\detokenize{#1}}{\cbx@seennames}}
% define fullname-if-not-seen labelname format
\csletcs{abx@nfd@*@labelname:seen}{abx@nfd@*@labelname}
\pretonameformat{labelname:seen}
{\cbx@ifnameseen{#1#3#5#7}
{}{\defcounter{uniquename}{2}\cbx@nameseen{#1#3#5#7}}}{}{}
% define possessive labelname format
\csletcs{abx@nfd@*@labelname:poss}{abx@nfd@*@labelname:seen}
\apptonameformat{labelname:poss}
{\ifnumequal{\value{listcount}}{\value{liststop}}{'s}{}}{}{}
\makeatother
% use "seen" labelname format in \textcite and \citeauthor
\patchcitecmd{citeauthor}
{\printnames{labelname}}{\printnames[labelname:seen]{labelname}}{}{}
\patchcitecmd{textcite}
{\printnames{labelname}}{\printnames[labelname:seen]{labelname}}{}{}
\pretobibmacro{textcite}{\DeclareNameAlias{labelname}{labelname:seen}}{}{}
% define possessive citation commands
\newrobustcmd*{\possalias}{%
\AtNextCite{\DeclareNameAlias{labelname:seen}{labelname:poss}}}
\newrobustcmd*{\posscite}{\possalias\textcite}
\newrobustcmd*{\Posscite}{\possalias\Textcite}
\newrobustcmd*{\posscites}{\possalias\textcites}
\newrobustcmd*{\Posscites}{\possalias\Textcites}
\addbibresource{biblatex-examples.bib}
\begin{document}
\null\vfill
\Posscite{knuth:ct:a} Principal Principle is one of my favourite principles.
One of my favourite books is \citetitle{knuth:ct:a}. Everybody should be
rational \autocite{knuth:ct:a,vangennep}. \Citeauthor{knuth:ct} said a lot
of things. For instance, he said that everybody should be rational
\autocite*[9]{knuth:ct:a}, and he said that everybody should drive on the
right side of the road \autocite*[10--15]{knuth:ct:c}. \Citeauthor{vangennep}
said that everybody should drive on the left, but otherwise
\posscite[4]{vangennep} work agrees with \citeauthor{knuth:ct}.
\end{document}
Switching to the verbose
style via
\usepackage[style=verbose]{biblatex}
gives
This solution should work with any of the standard authoryear
and verbose
variants. Details on these styles can be found in the biblatex
documentation.
It isn't really clear how these rules should be combined. Based on reference lists recently published in this journal it appears that any two-author paper should precede a three-or-more-author work having the same first author, regardless of chronology. A similar precedent holds for one-author and two-author works. You can achieve all this by copying the first author and some "large" value into the sortname
field for every entry with more than two authors.
For one- or two-author entries sortname
can be left missing by adding the whole author
list to the same sorting element, as done in the new sorting scheme emi
below. Further requirements related to citation sorting and name list truncation can easily be achieved with some global option settings. The document also demonstrates a few of these.
\documentclass{article}
\usepackage{csquotes}
\usepackage[american]{babel}
\usepackage[backend=biber,style=authoryear,sortcites,sorting=noneyear,
maxcitenames=1,minbibnames=6,maxbibnames=7]{biblatex}
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map[overwrite]{
\step[fieldsource=author,match=\regexp{\s+and\s.+\s+and\s},final]
\step[fieldset=sortname,origfieldval]
\step[fieldsource=sortname,match=\regexp{\s+and\s.+},replace={\ and\ Zzz}]
}
}
}
\DeclareSortingScheme{noneyear}{
\sort{\citeorder}
\sort{\field{year}}
}
\DeclareSortingScheme{emi}{
\sort{
\field{sortname}
\field{author}
}
\sort{\field{year}}
\sort{\citeorder}
}
\begin{filecontents}{\jobname.bib}
@article{ref1,
author = {First, Joe and Second, Jane and Third, Bob},
title = {Article title},
journaltitle = {Journal},
date = {2001-01}}
@article{ref2,
author = {First, Joe and Second, Jane and Third, Bob},
title = {Article title},
journaltitle = {Journal},
date = {2000-01}}
@book{ref3,
author = {First, Joe and Third, Bob},
title = {Book title},
year = {2002}}
@book{ref4,
author = {Doe, Joe and Smith, Sam},
title = {Book title},
date = {2001}}
@book{ref5,
author = {Doe, Joe and Brown, Bob},
title = {Book title},
date = {2002}}
@book{ref6,
author = {First, Joe},
title = {Book title},
date = {2003}}
\end{filecontents}
\addbibresource{\jobname.bib}
\addbibresource{biblatex-examples.bib}
\begin{document}
Filler \parencite{ref1,ref2,ref3,ref4,ref5,ref6}.
Filler \parencite{knuth:ct:c,knuth:ct:b,knuth:ct:a}.
\printbibliography[sorting=emi]
\end{document}
Best Answer
By the way, you should use the more modern biber with biblatex!
The option you are looking for is named
sortcites
:Result: