\catcode`@=11 % % \listofalgorithms % % this macro is like \listoffigures or \listoftables; it prepares a % list of algorithms/programs using an auxiliary file (.lop) % CUSTOMIZATION: the banner of the list is a string defined by \listalgorithmsname; % the default value is ``List of Algorithms'' \def\listofalgorithms{\@restonecolfalse\if@twocolumn\@restonecoltrue\onecolumn \fi\chapter*{\listalgorithmsname\@mkboth {\uppercase{\listalgorithmsname}}{\uppercase{\listalgorithmsname}}} \addcontentsline{toc}{chapter}{\listalgorithmsname} {\ssp\@starttoc{lop}}\if@restonecol \twocolumn\fi} \let\l@algorithm\l@figure \def\listalgorithmsname{List of Algorithms} % \begin{algorithm} ... \end{algorithm} % % the 'algorithm' environment encloses a float object (like figure or table) % algorithm's get their own numbering; captions begin with % ``Algorithm'', then the number, and then the text; % and there is an entry in the .lop file for each 'algorithm' % CUSTOMIZATION: the first word in a caption is given by \algorithmname \newcounter{algorithm} \def\thealgorithm{\@arabic\c@algorithm} \def\fps@algorithm{tbp} \def\ftype@algorithm{4} \def\ext@algorithm{lop} \def\fnum@algorithm{\algorithmname\ \thealgorithm} \def\algorithm{\@float{algorithm}} \def\endalgorithm{\end@float} \@namedef{algorithm*}{\@dblfloat{algorithm}} \@namedef{endalgorithm*}{\end@dblalgorithm} \def\algorithmname{Algorithm} % \begin{code} ... \end{code} % % this environment is a slight modification of the tabbing environment. % the specific characteristics are: % 0) it has a parameter from xref information % 1) there is a small skip between the paragraph above and the first % line of the code. % 2) a rule is drawn at the beginning and at the end of the code. % 3) all lines are typeset in math mode % 4) || prints in \rm if issued inside math % mode (for instance, inside this environment); % and in \sl if issued outside math mode % 5) _ can be used instead of \_ inside the code environments and in % text; it produces subscripts in math mode as usual % 6) 's are obeyed; if you want to break lines in the source % but not in the final document terminate the line with a comment char % % 7) you can leave a blank line using \\ % % it also introduces a command \numberlines that has no effect in this % environment, but it has in the *-form of code % CUST: \algosep and \algoruleheight are the length parameters that % give the amount of skip between the previous paragraph and the % beginning of code, and the width of the rule. % Both have default value 0pt. \algofontsize allows changing the font size % of the text written inside a code environment. The default is \footnotesize \def\numberlines{} \newlength{\algosep} \newlength{\algoruleheight} \def\rulecode{\rule{\textwidth}{\algoruleheight}} \def\sepcode{\vspace{\algosep}} \def\algofontsize{\footnotesize} \newif\ifinsidecode \insidecodefalse \def\@programcr{$\@tabcr$} {\catcode`\;=\active \gdef;{\semicolon\;}} \mathchardef\semicolon="603B \catcode`\_=\active \gdef_{\ifinsidecode\_\else\ifmmode\sb\else\_\fi\fi} \catcode`\|=12\relax \def\origbar{|} \catcode`\|=\active \def|{\ifx\@sharp\relax\origbar\else\@dovar\fi} \def\@dovar#1#2|{#1\ifmmode{\mbox{\rm #2}}\else{\sl #2}\fi} \def\@tabcommandson{% activate tabbing commands: % \tab sets a tab stop and adds one to the margin tab: \def\tab{$\=\+$} % Must finish current field before testing if at margin: \def\@finishfield{\@stopfield\@addfield\@startfield} % \untab removes one tab stop and moves left if at the beginning of a line: \def\untab{$\@finishfield\@ifatmargin\@ltab\else\relax\fi\-$} % \@marginspace adds an extra space unless there is no text on the line: \def\@marginspace{$\@finishfield$\@ifatmargin\relax\else\ \fi}} \def\@tabcommandsoff{% deactivate tabbing commands: \let\tab=\relax \let\@finishfield=\relax \let\untab=\relax \let\@marginspace=\ % never at margin thus always a space } \@tabcommandsoff \def\code#1{\par\sepcode \noindent\rulecode\algofontsize\numberlines\insidecodetrue \@tabcommandson \obeycr \lineskip \z@\let\>\@rtab\let\<\@ltab\let\=\@settab \let\+\@tabplus\let\-\@tabminus\let\t\tab\let\u\untab \let\\=\@programcr \global\@hightab\@firsttab \global\@nxttabmar\@firsttab \dimen\@firsttab\@totalleftmargin \global\@tabpush0 \global\@rjfieldfalse \trivlist \item[]\if@minipage\else\vskip\parskip\fi \setbox\@tabfbox\hbox{\rlap{\indent\hskip\@totalleftmargin \the\everypar}}\def\@itemfudge{\box\@tabfbox}\@startline\ignorespaces $\@gobblecr } \def\endcode{$\@stopline\ifnum\@tabpush > 0 \@badpoptabs \fi\endtrivlist\noindent\@tabcommandsoff \rulecode \sepcode } % \begin{code*} ... \end{code*} % % the *-form of code numbers sequentially each line of the code (lines % are separated by \\'s) % CUST: the label of each line can be easily changed, by redefining % the macro \codelinelabel and/or the macro \thecodeline; the counter % is codeline. \newcounter{codeline} \def\thecodeline{\arabic{codeline}} \def\codelinelabel{\thecodeline.\ \ } \@namedef{code*}{\def\numberlines{\setcounter{codeline}{0} \def\@stopline{\addtocounter{codeline}{1} \unskip\@stopfield\if@rjfield \global\@rjfieldfalse \@tempdima\@totalleftmargin \advance\@tempdima\linewidth \hbox to\@tempdima{\@itemfudge\codelinelabel\hskip\dimen\@curtabmar \box\@curline\hfil\box\@curfield}\else\@addfield \hbox{\@itemfudge\codelinelabel\hskip\dimen\@curtabmar\box\@curline}\fi} }\code} \@namedef{endcode*}{\endcode} \catcode`@=12 % \begin{cntcode} ... \end{cntcode} % % a slight variation of the code environment, cntcode centers its % contents; it should be used only if there is no page break in % the middle of the code; that means that its usefulness is limited to % small chunks of code, specifications, short declarations, ... \newlength{\codewidth} \setlength{\codewidth}{0.7\textwidth} \newenvironment{cntcode}{\def\sepcode{}\def\rulecode{}\centering \begin{minipage}[t]{\codewidth} \begin{code}}{\end{code}\end{minipage} \par}