%xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx % Version 2.1 % 6/27/86 % Written by: B.A. Leland (XHEMIA:BAL) % Calif Inst of Technology % Recognizes only ascending sequential footnote numbers, prints % everything else as read in the list % Required defs: % dash : defined as $^{-}$ % checkref#1 : to determine if the reference has yet been % cited --- calls quickcnt % note#1 : initializes flags, counters, calls refext % refext#1 : does all the work, calls checkref, then prints % the footnote numbers. If newref=true write the % reference to the output file with its footnote % number, and redefine the def of the reference to % equal the current footnote number. If the % references are anything but ascending sequential % numbers, print the numbers separated by commas. % quickcnt#1 : based on Knuth's length macro (TeXbook, p.219) % counts the no. of non-blank characters in the % reference. If > or = 4, set the newref flag to % true. % Required misc: % counters % ftnum: previous footnote number of a newly cited ref % prev: previous PRINTED footnote number % flags % dsh : true = enable dash printing for no. ranges % newref : true = a reference that has not been cited % %\immediate\openout1=reflist % open the ouput file 'reflist.tex' %\newcount\ftnum % footnote number counter %\newcount\prev % previous footnote number %\newif\ifdsh % dsh=true: enable "dash" printing for ranges of #s %\def\dash{$^{-}$} % a dash for ranges of numbers %--------------------------------------------------------------------- %\def\note#1{{ %\dshtrue % toggle dsh flag to enable range printing %\prev=0 % initialize prev counter %\count0=0 % initialize cycle counter %\refext#1\end}} % call refext with list of references as argument %--------------------------------------------------------------------- %\def\refext#1{ %\ifx#1\end % \end is appended at end of reference list % \ifdsh % dsh=true do nothing % \else $^{\number\prev}$\fi\let\next=\relax % finish the range, quit %\else\checkref#1 % see if the reference has been cited previously % \ifnewref\global\advance\ftnum by1 % new reference, % % inc ftnum counter % \immediate\write1{\noexpand\item{$^{\the\ftnum}$}#1} % \xdef#1{\the\ftnum} % write the reference to the output file, % % and redefine the reference to be % % the current footnote number % \fi % \ifnum\count0=0 $^{#1}$ % first cycle, print the first no. % \else \ifnum\prev=#1 % duplicate reference, ignore % \else\advance\prev by1 % increment the prev counter % \ifnum\prev=#1 % if true, sequence is sequential % \ifdsh % if dsh enabled, % \dash % print a dash for the range % \dshfalse % and disable the dsh flag % \fi % \else\ifdsh $^{,\,#1}$ % if dsh enabled, print ", #" % \else % a dash was printed previously % \advance\prev by-1 % restore prev counter % $^{\number\prev ,\,#1}$ % finish the range, and % % print the new (non-sequential) no. % \dshtrue % toggle the dsh flag % \fi % \fi % \fi % \fi % \prev=#1 % save current footnote number in prev counter % \advance\count0 by1 % increment cycle counter % \let\next=\refext % recursive call %\fi %\next} %+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ %\newcount\qckcntr %\newif\ifnewref % newref=true: 1st occurance of a given reference %--------------------------------------------------------------------- %\def\checkref#1{{ %\global\newreffalse % toggle the newref flag %\qckcntr=0 % initialize cycle "register" %\expandafter\quickcnt#1\end % expand the passed reference appending \end %\relax}} %--------------------------------------------------------------------- %\def\quickcnt#1{ %\ifx#1\end \let\next=\relax % relax and quit %\else\advance\qckcntr by1 % increment cycle register % \ifnum\qckcntr<4 % <4 cycles means nothing, so do nothing % \else\global\newreftrue % >= 4 means the reference has not been % % previously cited, toggle the newref flag % \fi % \let\next=\quickcnt % recursive call %\fi %\next} %xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx %________________________BEGIN__DEFS__________________________________ % \immediate\openout1=reflist % open the ouput file 'reflist.tex' \newcount\ftnum % footnote number counter \newcount\prev % previous footnote number \newif\ifdsh % dsh=true: enable dash printing \def\dash{$^{-}$} \def\note#1{{\dshtrue \prev=0 \count0=0 \refext#1\end}} \def\refext#1{\ifx#1\end \ifdsh\else $^{\number\prev}$\fi\let\next=\relax \else\checkref#1\ifnewref\global\advance\ftnum by1 \immediate \write1{\noexpand\item{$^{\the\ftnum}$}#1}\xdef#1{\the\ftnum}\fi \ifnum\count0=0 $^{#1}$\else \ifnum\prev=#1 \else \advance\prev by1 \ifnum\prev=#1 \ifdsh \dash\dshfalse\fi\else \ifdsh $^{,\,#1}$\else \advance\prev by-1 $^{\number\prev ,\,#1}$\dshtrue \fi\fi\fi\fi \prev=#1 \advance\count0 by1 \let\next=\refext\fi \next} % \newcount\qckcntr \newif\ifnewref % newref=true: 1st occurance of a given reference \def\checkref#1{{\global\newreffalse\qckcntr=0 \expandafter\quickcnt#1\end \relax}} \def\quickcnt#1{\ifx#1\end \let\next=\relax \else\advance\qckcntr by1 \ifnum\qckcntr<4 \else\global\newreftrue\fi \let\next=\quickcnt\fi \next} % %__________________________END__DEFS__________________________________ %xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx % % S A M P L E U S A G E % % \def\a{this is reference a} % \def\aaa{aaaaa} % \def\b{this is reference b which has \reff } % \def\c{this is reference c which has \reff } % \def\d{this is reference d which has \reff } % \def\e{this is reference e which has \reff } % \def\g{this is reference e which has \reff } % \def\reff{reference f} % % {\rm % \ftnum=9 % This is the example\note{\a} of % a\note{\b} paragraph % which contains footnotes that will ultimately end up on % a reference page. % This is the % second\note{\a} which % is supposed to be the same as the first reference. % If we continue, we\note{\c\b} should get another % one\note{\d} and\note{\a} so\note{\e} on. % If one needs to recall a couple of references\note{\aaa} one % uses a the same macro\note{\a\b\c\d\e} as before. % It is supposed to handle\note{\a\b\d\e} most any situation % up to and almost including\note{\e\d\c\b\a} except % this\note{\b\a\d\e} or this.\note{\a\b\c\d\d} One % must be cautioned that this has not been fully tested as yet.......... % \vskip0.5truein % \immediate\closeout1 % \vfill\eject % \baselineskip=14pt % \parindent=0pt % \parskip=0.1truein % \input reflist.tex % } % \vfill\end %