Author name of \textcite as possessive
This answer extends Philipp Lehman's method for generating a possessive labelname
using a format alias. It should work for all variants of the standard author-year styles.
Note that the solution is bad for plural labelnames, where the possessive is formed with just '
and not 's
. This case is probably very rare, though. Other languages may not be as easy to handle. For an example refer to a previous question, which considers Norwegian possessives.
\documentclass{article}
\usepackage[style=authoryear-comp]{biblatex}
\usepackage{filecontents}
\DeclareNameFormat{labelname:poss}{% Based on labelname from biblatex.def
\ifcase\value{uniquename}%
\usebibmacro{name:last}{#1}{#3}{#5}{#7}%
\or
\ifuseprefix
{\usebibmacro{name:first-last}{#1}{#4}{#5}{#8}}
{\usebibmacro{name:first-last}{#1}{#4}{#6}{#8}}%
\or
\usebibmacro{name:first-last}{#1}{#3}{#5}{#7}%
\fi
\usebibmacro{name:andothers}%
\ifnumequal{\value{listcount}}{\value{liststop}}{'s}{}}
\DeclareFieldFormat{shorthand:poss}{%
\ifnameundef{labelname}{#1's}{#1}}
\DeclareFieldFormat{citetitle:poss}{\mkbibemph{#1}'s}
\DeclareFieldFormat{label:poss}{#1's}
\newrobustcmd*{\posscitealias}{%
\AtNextCite{%
\DeclareNameAlias{labelname}{labelname:poss}%
\DeclareFieldAlias{shorthand}{shorthand:poss}%
\DeclareFieldAlias{citetitle}{citetitle:poss}%
\DeclareFieldAlias{label}{label:poss}}}
\newrobustcmd*{\posscite}{%
\posscitealias%
\textcite}
\newrobustcmd*{\Posscite}{\bibsentence\posscite}
\newrobustcmd*{\posscites}{%
\posscitealias%
\textcites}
\begin{filecontents}{\jobname.bib}
@Article{bertram:sa,
author = {Bertram, Aaron and Wentworth, Richard},
shortauthor = {BW},
title = {Gromov invariants for holomorphic maps on Riemann surfaces},
journaltitle = {J.~Amer. Math. Soc.},
volume = {9},
number = {2},
date = {1996},
pages = {529--571}}
@Book{title,
title = {A Book with No Author},
date = {1933}}
@Book{shorthand,
title = {A Book with No Author},
shorthand = {ABWNA},
date = {1933}}
@Book{label,
label = {Fallback label},
date = {1933}}
@Book{does,
title = {A Book by the Does},
author = {Doe, John and Doe, Jane},
shortauthor = {{The Does}},
date = {1990}}
\end{filecontents}
\addbibresource{\jobname.bib}
\bibliography{biblatex-examples}
\renewcommand{\baselinestretch}{1.25}
\begin{document}
\subsection*{cite with labelname}
posscite many authors: \posscite[3036]{aksin} \\
textcite shortauthor: \textcite[e.g.][3]{bertram:sa} \\
posscite shortauthor: \posscite[e.g.][4]{bertram:sa} \\
textcite shorthand: \textcite{kant:ku} \\
posscite shorthand: \posscite{kant:ku} \\
textcite compact: \textcite{aristotle:physics,aristotle:poetics} \\
posscite compact: \posscite{aristotle:physics,aristotle:poetics} \\
textcites: \textcites[3036]{aksin}[529]{bertram:sa} \\
posscites: \posscites[3036]{aksin}[529]{bertram:sa} \\
posscite with plural labelname (where this solution is bad): \posscite{does}
\subsection*{cite without labelname}
textcite shorthand: \textcite{shorthand} \\
posscite shorthand: \posscite{shorthand} \\
textcite title: \textcite{title} \\
posscite title: \posscite{title} \\
textcite label: \textcite{label} \\
posscite label: \posscite{label} \\
\end{document}
You could always define a "possessive cite" command yourself as follows:
\newcommand\posscite[1]{\citeauthor{#1}'s (\citeyear{#1})}
Although I can't promise it would look pretty or work properly for multiple author works...
Of course, properly speaking what you should do is use biblatex
's own \DeclarCiteCommand
and friends interface (and replace the parentheses with the right macro so that if you change the type of parens used, they change too...)
A previous answer by Audrey provides a possessive citation command that works with older versions of Biblatex. However, this code does not work in Biblatex 3.3 due to a change to the format of \DeclareNameFormat
.
The following adaptation of Audrey's code (to which I am grateful to PLK for a slight correction) should work with Biblatex 3.3. According to PLK, the \nameparts
line isn't needed if you're using Biblatex 3.4. (I'm not sure whether leaving it in will cause any problems.)
\documentclass{article}
\usepackage[style=authoryear-comp]{biblatex}
\addbibresource{biblatex-examples.bib}
\DeclareNameFormat{labelname:poss}{% Based on labelname from biblatex.def
\nameparts{#1}% Not needed if using Biblatex 3.4
\ifcase\value{uniquename}%
\usebibmacro{name:family}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}%
\or
\ifuseprefix
{\usebibmacro{name:first-last}{\namepartfamily}{\namepartgiveni}{\namepartprefix}{\namepartsuffixi}}
{\usebibmacro{name:first-last}{\namepartfamily}{\namepartgiveni}{\namepartprefixi}{\namepartsuffixi}}%
\or
\usebibmacro{name:first-last}{\namepartfamily}{\namepartgiven}{\namepartprefix}{\namepartsuffix}%
\fi
\usebibmacro{name:andothers}%
\ifnumequal{\value{listcount}}{\value{liststop}}{'s}{}}
\DeclareFieldFormat{shorthand:poss}{%
\ifnameundef{labelname}{#1's}{#1}}
\DeclareFieldFormat{citetitle:poss}{\mkbibemph{#1}'s}
\DeclareFieldFormat{label:poss}{#1's}
\newrobustcmd*{\posscitealias}{%
\AtNextCite{%
\DeclareNameAlias{labelname}{labelname:poss}%
\DeclareFieldAlias{shorthand}{shorthand:poss}%
\DeclareFieldAlias{citetitle}{citetitle:poss}%
\DeclareFieldAlias{label}{label:poss}}}
\newrobustcmd*{\posscite}{%
\posscitealias%
\textcite}
\newrobustcmd*{\Posscite}{\bibsentence\posscite}
\newrobustcmd*{\posscites}{%
\posscitealias%
\textcites}