%     O V E R C I T E . S T Y
%
%     version 3.0  (Oct 1992)
%
%     Compressed, sorted lists of superscript numerical citations.
%     see also CITE.STY and DRFTCITE.STY
%
%     Copyright (C) 1989-1992 by Donald Arseneau
%     These macros may be freely transmitted, reproduced, or modified for
%     non-commercial purposes provided that this notice is left intact.
%
%     Instructions follow \endinput.
%  ------------------------------------
%
%  \@citen contains the code that parses the list of names, ignoring
%  spaces after commas, writes the aux file \citation, and formats the
%  number list.  \citen can be used by itself to give citation numbers
%  without the other formatting; e.g., "See also ref.~\citen{junk}."
%
\def\citen{\protect\p@citen}

\def\p@citen#1{%
\edef\@tempa{\@ignspaftercomma,#1, \@end, }% ignore spaces in parameter list
\edef\@tempa{\expandafter\@ignendcommas\@tempa\@end}%
\if@filesw \immediate \write \@auxout {\string \citation {\@tempa}}\fi
\@tempcntb\m@ne    % \@tempcntb tracks higest number
\let\@h@ld\relax   % nothing held from list yet
\let\@citea\@empty % no punctuation preceding first
\let\@celt\over    % not expandable, but identifiable
\def\@cite@list{}% % empty list to start
\@for \@citeb:=\@tempa \do{\@make@cite@list}% make a sorted list of numbers
% After sorted citelist is made, execute it to compress citation ranges.
\@tempcnta\m@ne    % no previous number
\let\@celt\@compress@cite \@cite@list % output number list with compression
\@h@ld}% output anything held over

% For each citation, check if it is defined and if it is a number.
% if a number: insert it in the sorted \@cite@list
% otherwise: output it immediately.
%
\begingroup \catcode`\*=7 % funny catcode for comparisons
\gdef\@make@cite@list{%
 \expandafter\let \expandafter\@B@citeB \csname b@\@citeb \endcsname
 \ifx\@B@citeB\relax % undefined: output ? and warning
    \@citea {\bf ?}\let\@citea\citepunct
    \@warning {Citation `\@citeb' on page \thepage\space undefined}%
 \else %  defined
    \if *\ifnum\z@<0\@B@citeB *\else @\fi % a positive number, put in list
       \@tempcnta\@B@citeB \relax
       \ifnum \@tempcnta>\@tempcntb % new highest, add to end (efficiently)
          \edef\@cite@list{\@cite@list \@celt{\@B@citeB}}%
          \@tempcntb\@tempcnta
       \else % arbitrary number: insert appropriately
          \edef\@cite@list{\expandafter\@sort@celt \@cite@list \@gobble @}%
       \fi
    \else % citation is not a number, output immediately
       \@citea \@B@citeB \let\@citea\citepunct
 \fi\fi}
\endgroup % restore * catcode

% Check if each number follows previous and can be put in a range
%
\def\@compress@cite#1{%  % This is executed for each number
  \advance\@tempcnta\@ne % Now \@tempcnta is one more than the previous number
  \ifnum #1=\@tempcnta   % Number follows previous--hold on to it
     \ifx\@h@ld\relax    % first pair of successives
        \edef \@h@ld{\@citea #1}%
     \else               % compressible list of successives
        \edef \@h@ld{\hbox{--}\penalty\@highpenalty #1}%
%        use \hbox to avoid easy \exhyphenpenalty breaks
     \fi
  \else   %  non-successor -- dump what's held and do this one
     \@h@ld \@citea #1\let\@h@ld\relax
  \fi \@tempcnta#1\let\@citea\citepunct
}

% \@sort@celt inserts number (\@tempcnta) into list of \@celt{num} (#1{#2})
% \@celt must not be expandable; list should end with two vanishing tokens.
%
\def\@sort@celt#1#2{\ifx \@celt #1% parameters are \@celt{num}
     \ifnum #2<\@tempcnta % number goes later in list
        \@celt{#2}%
        \expandafter\expandafter\expandafter\@sort@celt % continue
     \else % number goes here
        \@celt{\number\@tempcnta}\@celt{#2}% stop comparing
  \fi\fi}

%%    To put space after the comma, use:
\def\citepunct{,\penalty\@highpenalty\hskip.13emplus.1emminus.1em}%
%%    For no space after comma, use:
%% \def\citepunct{,\penalty\@highpenalty}%
%%

% Make \cite robust, get rid of space, and choose superscript or normal
%
\def\cite{\protect\p@cite}

\def\p@cite{\leavevmode\unskip\@ifnextchar[{\@tempswatrue\@citew}%
            {\@tempswafalse\@citex}}

%  \cite command has optional note, so do on line...highpenalty before
%
\def\@citew[#1]#2{\ifnum\lastpenalty=\z@ \penalty\@highpenalty \fi
   \ [{\multiply\@highpenalty 3 % ...triple-highpenalties within
   \p@citen{#2}},\penalty\@highpenalty\ #1]\spacefactor\@m}

%  No note, so superscript, but check for punctuation first.
%
\def\@citex#1{\begingroup \leavevmode \@tempcnta\@m \unskip
  \/% this allows the last word to be hyphenated, and it looks better.
  \def\@tempa{\@cite{\p@citen{#1}}\spacefactor\@tempcnta\endgroup}%
  \futurelet\@tempb\@citey}%
%% to not move punctuation, replace previous line with:
%%  \@tempa}%

%  Move trailing punctuation before the citation:
%
\def\@citey{\let\@tempc\@tempa
   % Watch for double periods and suppress them
   \ifx\@tempb.\ifnum\spacefactor>2999 \let\@tempb\relax\fi\let\@tempc\@citez
   % Move other punctuation
   \else\ifx\@tempb,\let\@tempc\@citez
   \else\ifx\@tempb:\let\@tempc\@citez % add other punctuation as necessary,
   \else\ifx\@tempb;\let\@tempc\@citez % with balancing \fi s
   \fi\fi\fi\fi
   \@tempc}%

% Place punctuation (except periods) before citation, and remember spacefactor
% of that punctuation
\def\@citez#1{\@tempcnta\sfcode`#1\@tempb\futurelet\@tempb\@citey}%

\def\@cite#1{$\@ove@rcfont\m@th^{\hbox{#1}}$}

\ifx\selectfont\undefined % original LaTeX
  \def\@ove@rcfont{\the\scriptfont\z@ \edef\bf{\the\scriptfont\bffam}}
\else % NFSS
  \def\@ove@rcfont{\csname S@\f@size\endcsname 
       \fontsize{\sf@size}{\baselineskip}}
\fi

% for ignoring spaces in the input:
\def\@ignspaftercomma#1, {\ifx\@end#1\@empty\else
   #1,\expandafter\@ignspaftercomma\fi}
\def\@ignendcommas,#1,\@end{#1}

\let\nocitecount\relax  % in case \nocitecount was used for drftcite

\endinput
%
%
%                      OVERCITE.STY
%
%   Modify LaTeX's normal citation mechanism to:
%
%   o Display citations as superscript numbers, a comma and a small space
%     between each number.
%
%   o Sort citation numbers into ascending order; print non-numbers before
%     numbers.  Compress lists of three or more consecutive numbers to one
%     number range. All numbers should be greater than zero.
%
%   o If an optional note is given, typeset the whole list of citations
%     as if cite.sty was in effect.  (See cite.sty).
%
%   o Use THE SAME INPUT FORMAT as for ordinary citations; this style will
%     ignore spaces before the citation, and move trailing punctuation to
%     before the citation.  For example, "...information \cite{source};"
%     ignores the space before \cite and puts the simicolon before the
%     number, just as if you typed  "...information;$^{12}$"
%
%     The punctuation that will migrate before the superscript is .,;:.
%     Perhaps ! and ? should too, but they weren't listed in the APS style
%     manual I looked at.  Quotes were, but they should never have to
%     migrate because both on-line and superscript versions put quotes
%     before the citation.  This gives one difficulty: punctuation following
%     quotes won't migrate inside the quotation:
%     E.g.:            ``Transition State Theory''\cite{Eyring}.
%     gives            ``Transition State Theory''.$^8$
%     when you want    ``Transition State Theory.''$^8$
%
%   o Doubling of periods (.., ?., !.) is checked for and suppressed.
%     The spacing after the citation is set according to the final
%     punctuation mark moved.  There is problem with double periods
%     after a capitalized abbreviation or directly after \@ : Both
%     "N.A.S.A. \cite{space}." and "et al.\@ \cite{many}." will give
%     doubled periods.  These can be fixed as follows:
%     "N.A.S.A\@. \cite{space}." and "et al.\ \cite{many}.".
%     These work properly for both cite.sty and overcite.sty, but the NASA
%     example gives the wrong spacing when there is no citation.  Sorry.
%     Use \  after abbreviations like et al. to get the right spacing
%     within a sentence whether or not a citation follows.
%
%   o Ignore spaces after the commas in the parameter list.
%
%   o define \citen to get just the numbers (and write to the aux file)
%     without the brackets and extra formatting.
%
%   Although each \cite command sorts its numbers, better compression
%   into ranges can usually be achieved by carefully selecting the order
%   of the \bibitem entries, or the order of initial citations when using
%   bibtex.  Having the entries presorted will also save processing time,
%   especially for long lists of numbers.
%
%   See also cite.sty for enhanced [5-9] type citations, and drftcite.sty
%   for draft (draught) mode citations.
%
%   ROBUST!
%
% Version 1991: Ignore spaces after commas in the parameter list. Move most of
% \citen into \@cmpresscites for speed. Give the proper \spacefactor afterwards.
% Version 1992: make \citepunct hold the punctuation between numbers (for ease
% of changing).  Add \/ to allow hyphenation of previous word, and look better
% in italics.
% 1992a: Make it work with NFSS.  (Thank you C. Hamlin and Rainer Schoepf)
%
% Version 3.0 (1992):  Rewrite, including sorting.  Make entries like "4th"
% be treated properly as text.
%
% Send problem reports to asnd@triumfcl.bitnet or asnd@Reg.triumf.ca
%
% test integrity:
% brackets: round, square, curly, angle:   () [] {} <>
% backslash, slash, vertical, hat, tilde:   \ / | ^ ~
