[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;
Occupational Safety and Health Administration

Is there a pretty command to make it produce

International Organization for Standardization,
Human Factors and Ergonomics Society and
Occupational Safety and Health Administration

so I don't have to write

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

Best Answer

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{%
     \global\advance\nat@length@list\@ne%
     \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
      \advance\nat@length@list-\@ne%
   }%
}

\makeatother
\begin{document}

\citeauthor{test,test1,test2}
\bibliography{\jobname.bib}
\bibliographystyle{plainnat}
\end{document} 

enter image description here

Related Question