This sounded like a challenge, and I like challenges. This is what I came up with
% #1 {, } - #2 { and } - #3 \cmd - #4 list
\makeatletter
\newcommand\textlist[4]{%
\let\last@item\relax
\let\last@sep\relax
\@for\@ii:=#4\do{%
\ifx\last@item\relax\else
\ifx\last@sep\relax
\def\last@sep{#2}%
\else#1\fi
#3{\last@item}%
\fi
\let\last@item\@ii
}%
\ifx\last@item\relax\else
\last@sep#3{\last@item}%
\fi
}
\makeatother
\newcommand{\citett}{\textlist{, }{ and }{\citet}}
This defines a \textlist which basically applies a given command to a list of arguments, and using one of the two given separators as appropriate. Then you can write
\citett{paper1,paper2,paper3}
And produce something as if you had typed
\citet{paper1}, \citet{paper2} and \citet{paper3}
I encourage others to comment on possible improvements to my defined commands, and also suggest alternative definitions using other tool-boxes, TeX-flavors, etc.
\bibpunctcommand? This will only work with the case of two citations, since it sets the separator between citations in a list. So for more than 2 it will yieldx1 [1] and x2[2] and x3 [3] ... and xn [n]which is undesireable. – Willie Wong Oct 29 '10 at 9:42etextools, which has nice list processing abilities (extending that ofetoolbox). I can't install them on the computer I am using now; maybe I'll take a look later. – Willie Wong Oct 29 '10 at 10:28\csvloop!to extract the list length, if it is more than 1 you can extract and delete the last element from the csvlist, process the rest using\citet, add the word "and", and process the remaining item using\citet.) – Willie Wong Oct 29 '10 at 10:30