%NAME: citesort.sty % A replacement for \@citex which sorts citation numbers as well as % compressing and allowing breaks. Based on cite.sty by Donald % Arseneau. % % for use in LaTeX say, \documentstyle[...,citesort,...]{...} % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Allow, but strongly discourage, line breaks within a long % series of citations. Compress lists of successive numbers % to one number range, e.g., 5,6,7,8,9 --> 5--9. Compatible % with versions of \@cite that use exponents. % -- Donald Arseneau 1989 % % Modified to sort the numbers so they come out in increasing order, % regardless of the way they appear in the source. O(N^2) sort! % Ian Green, CUED, 10-Dec-1991. Improvements to img@eng.cam.ac.uk % please. Version 1 \newcount\@minsofar \newcount\@min \newcount\@cite@temp \def\@citex[#1]#2{% \if@filesw \immediate \write \@auxout {\string \citation {#2}}\fi \@tempcntb\m@ne \let\@h@ld\relax \def\@citea{}% \@min\m@ne% \@cite{% \@for \@citeb:=#2\do {\@ifundefined {b@\@citeb}% {\@h@ld\@citea\@tempcntb\m@ne{\bf ?}% \@warning {Citation `\@citeb ' on page \thepage \space undefined}}% {\@minsofar\z@ \@for \@scan@cites:=#2\do {% \@ifundefined{b@\@scan@cites}% {\@cite@temp\m@ne} {\@cite@temp\number\csname b@\@scan@cites \endcsname \relax}% \ifnum\@cite@temp > \@min% select the next one to list \ifnum\@minsofar = \z@ \@minsofar\number\@cite@temp \edef\@scan@copy{\@scan@cites}\else \ifnum\@cite@temp < \@minsofar \@minsofar\number\@cite@temp \edef\@scan@copy{\@scan@cites}\fi\fi\fi}\@tempcnta\@min \ifnum\@minsofar > \z@ % some more \advance\@tempcnta\@ne \@min\@minsofar \ifnum\@tempcnta=\@minsofar % Number follows previous--hold on to it \ifx\@h@ld\relax \edef \@h@ld{\@citea\csname b@\@scan@copy\endcsname}% \else \edef\@h@ld{\ifmmode{-}\else--\fi\csname b@\@scan@copy\endcsname}% \fi \else \@h@ld\@citea\csname b@\@scan@copy\endcsname \let\@h@ld\relax \fi % no more \fi}% \def\@citea{,\penalty\@highpenalty\,}}\@h@ld}{#1}} % end of citesort.sty