# [Tex/LaTex] How to change the delimiter for \citeauthor with multiple references and add “and” between the last two

bibtexcitingnatbib

\citeauthor{iso9241-5,ansi2007,osha3092}


produces

International Organization for Standardization;
Human Factors and Ergonomics Society;

Is there a pretty command to make it produce

International Organization for Standardization,
Human Factors and Ergonomics Society and

so I don't have to write

\citeauthor{iso9241-5}, \citeauthor{ansi2007} and \citeauthor{osha3092}


To format the punctuation of natbib the package provides the command \setcitestyle The character between citations can be set in the following way:

\setcitestyle{comma}


which is equal to

\setcitestyle{citesep={,}}


Here an example that can do what you want: (A bug is possible)

\documentclass{book}
\usepackage{lipsum}
\usepackage{natbib}
\usepackage{filecontents}
\begin{filecontents*}{\jobname.bib}
@book{test,
author={John Smith},
title={TITLE},
year={2011},
publisher={...},
}
@book{test1,
author={Theodor Fontane},
title={Zaubefloete},
year={1000},
publisher={...},
}
@book{test2,
author={Wolfgang Goethe},
title={Irgendwas},
year={1000},
publisher={...},
}
\end{filecontents*}
\makeatletter
\newcount\nat@length@list
\newcount\nat@tempcount
\renewcommand\NAT@sort@cites[1]{%
\let\NAT@cite@list\@empty
\nat@length@list=0%
\@for\@citeb:=#1\do{%
\expandafter\NAT@star@cite\@citeb\@@}%
\if@filesw
\expandafter\immediate\expandafter\write\expandafter\@auxout
\expandafter{\expandafter\string\expandafter\citation\expandafter{\NAT@cite@list}}%
\fi
\@ifnum{\NAT@sort>\z@}{%
\expandafter\NAT@sort@cites@\expandafter{\NAT@cite@list}%
}{}%
}%
%
\def\NAT@def@citea@close{%
\def\@citea{%
\NAT@@close%
\ifnum\nat@length@list=2
\NAT@space and\NAT@space%
\else
\NAT@separator\NAT@space%
\fi