citesort.sty 2.1 KB
 John Moeller committed Jul 19, 2016 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 %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`