[Tex/LaTex] How to cite authors in small cap with \citet

citingformattingnatbibsmall-caps

I followed Natbib reference sheet and \citet works as expected. I would like the author's name to appear in small caps, how can I do that?

I guess I should do:

Define \citenumfont to be a font declaration or command like
\itshape or […] \textit.

but I have no idea what it means.

Before you upvote lockstep's answer: it does not work, the authors name are not in small cap, the renewcommand has no effect. His example code does not compile as it is now.

UPDATE: Here is a minimum working example.

smallcap.tex

\documentclass[fleqn]{article}
\usepackage[numbers]{natbib}
\makeatletter
%\renewcommand*{\NAT@nmfmt}[1]{\textsc{#1}}
\def\NAT@nmfmt#1{\textsc{#1}}
\makeatother
\begin{document}
As mentioned in \citet{Biegler97}~\dots
\bibliographystyle{plainnat}
\bibliography{dummy}
\end{document}

dummy.bib

@BOOK{biegler97,
  AUTHOR = {Lorenz T. Biegler and Ignacio E. Grossmann and Arthur W. Westerberg},
  TITLE = {Systematic Methods of Chemical Process Design},
  YEAR = {1997},
  PUBLISHER = {Prentice Hall PTR, Upper Saddle River, NJ}
}

Best Answer

With the numbers option the patch is slightly more complicated:

\usepackage{etoolbox}
\makeatletter
\patchcmd{\NAT@test}{\else\NAT@nm}{\else\NAT@nmfmt{\NAT@nm}}{}{}
\let\NAT@up\scshape
\makeatother

Apparently natbib's author forgot to apply \NAT@nmfmt in the relevant place of \NAT@test

In order to get et al. in roman type,

\usepackage{etoolbox,xstring}
\makeatletter
\patchcmd{\NAT@test}{\else\NAT@nm}{\else\NAT@nmfmt{\NAT@nm}}{}{}
\renewcommand{\NAT@nmfmt}{\expandafter\aliNAT@nmfmt\expandafter}
\newcommand\aliNAT@nmfmt[1]{{%
  \noexpandarg
  \def~{}%
  \edef\temp#1\edef\temp{\detokenize\expandafter{\temp}}%
  \begingroup\edef\x{\endgroup
    \noexpand\StrSubstitute{\temp}{\detokenize{etal}}}\x
    {\textnormal{et\nobreakspace al}}[\tempa]%
  \textsc{\tempa}}}
\makeatother
Related Question