% 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: \ / | ^ ~