From a3e5f4189a145472017be9745847e9d05ebbc0a0 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 12 Oct 2006 01:40:37 +0000 Subject: add algorithmicx to ctan2tl (MAKEnosymlink), add algorithmicx to tpm-ctan-check, update algorithmicx git-svn-id: svn://tug.org/texlive/trunk@2311 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/algorithmicx/algc.sty | 41 +- .../tex/latex/algorithmicx/algcompatible.sty | 89 +++ .../tex/latex/algorithmicx/algmatlab.sty | 15 +- .../tex/latex/algorithmicx/algorithmicx.sty | 636 ++++++++++++++------- .../tex/latex/algorithmicx/algpascal.sty | 37 +- .../tex/latex/algorithmicx/algpseudocode.sty | 98 ++-- 6 files changed, 606 insertions(+), 310 deletions(-) create mode 100644 Master/texmf-dist/tex/latex/algorithmicx/algcompatible.sty (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algc.sty b/Master/texmf-dist/tex/latex/algorithmicx/algc.sty index 60c39b7835c..c42b44f2d17 100644 --- a/Master/texmf-dist/tex/latex/algorithmicx/algc.sty +++ b/Master/texmf-dist/tex/latex/algorithmicx/algc.sty @@ -1,8 +1,8 @@ -% C ALGORITHMIC STYLE -- Released 18 MAR 2004 +% C ALGORITHMIC STYLE -- Released 27 APR 2005 % for LaTeX version 2e % % Copyright Szasz Janos -% E-mail szaszjanos@users.sourceforge.net +% E-mail szaszjanos@sourceforge.net % \NeedsTeXFormat{LaTeX2e}% \ProvidesPackage{algc}% @@ -10,49 +10,40 @@ \RequirePackage{algorithmicx}% \typeout{Document Style - c/c++ environments for use with the `algorithmicx' style}% % -\def\ALG@setc{t}% -\DeclareOption{noset}{\def\ALG@setc{}}% -\DeclareOption{set}{\def\ALG@setc{t}}% \ProcessOptions% % % % *** DECLARATIONS *** % % -\ALG@deflanguage{c}{\ALG@setc}% -{% +\algnewlanguage{c}% +\alglanguage{c}% % % *** KEYWORDS *** % -\let\algorithmicbegin\{% -\let\algorithmicend\}% -\newcommand\textkeyword{\textbf}% +\let\ALG@cbegin\{% +\let\ALG@cend\}% +\algnewcommand\algorithmicbegin{\ALG@cbegin}% +\algnewcommand\algorithmicend{\ALG@cend}% +\algnewcommand\textkeyword{\textbf}% % % *** DECLARED BLOCKS AND LOOPS *** % \algdef{SEi}{Begin}{End}{0cm}{\algorithmicbegin}{\algorithmicend}% % -\algdef{lS}{For}[3]{\textkeyword{for}\ (\(##1\); \(##2\); \(##3\))}% -\algdef{lS}{While}[1]{\textkeyword{while}\ (\(##1\))}% +\algdef{lS}{For}[3]{\textkeyword{for}\ (\(#1\); \(#2\); \(#3\))}% +\algdef{lS}{While}[1]{\textkeyword{while}\ (\(#1\))}% \algdef{lS}{Do}{\textkeyword{do}}% \algdef{Lc}{Do}{While}{0}% -\algdef{lS}{If}[1]{\textkeyword{if}\ (\(##1\))}% +\algdef{lS}{If}[1]{\textkeyword{if}\ (\(#1\))}% \algdef{lC}{If}{Else}{\textkeyword{else}}% % % *** OTHER DECLARATIONS *** % -\def\ALG@beginalgorithmic{\let\{\Begin\let\}\End}% +%\def\ALG@beginalgorithmic{\let\{\Begin\let\}\End}% % -\newcommand\Function[3]{\State##1 ##32(##3)}%\textit{##2}(##3)} -\newcommand\Return{\State\textkeyword{return}\space}% +%\newcommand\Function[3]{\State#1 #32(#3)}%\textit{#2}(#3)} +%\newcommand\Return{\State\textkeyword{return}\space}% % -\renewcommand\algorithmiccomment[1]{\hfill// ##1}% -% -% -% -}% -% -% -% -\let\ALG@setc\relax% +\algrenewcomment[1]{\hfill// #1}% % diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algcompatible.sty b/Master/texmf-dist/tex/latex/algorithmicx/algcompatible.sty new file mode 100644 index 00000000000..075f8512e27 --- /dev/null +++ b/Master/texmf-dist/tex/latex/algorithmicx/algcompatible.sty @@ -0,0 +1,89 @@ +% ALGORITHMIC STYLE -- Released 27 APR 2005 +% for LaTeX version 2e +% +% Copyright Szasz Janos +% E-mail szaszjanos@users.sourceforge.net +% Based on Peter Williams's algorithmic.sty +% +\NeedsTeXFormat{LaTeX2e}% +\ProvidesPackage{algcompatible}% +\RequirePackage{ifthen}% +\RequirePackage{algorithmicx}% +\typeout{Document Style - algorithmic compatible environments for the `algorithmicx' style}% +% +\def\ALG@noend{f}% +% +\DeclareOption{noend}{\def\ALG@noend{t}}% +\DeclareOption{end}{\def\ALG@noend{f}}% +\ProcessOptions% +% +% *** DECLARATIONS *** +% +\algnewlanguage{algorithmic}% +\alglanguage{algorithmic}% +% +% *** KEYWORDS *** +% +\algnewcommand\algorithmicend{\textbf{end}} +\algnewcommand\algorithmicdo{\textbf{do}} +\algnewcommand\algorithmicwhile{\textbf{while}} +\algnewcommand\algorithmicfor{\textbf{for}} +\algnewcommand\algorithmicforall{\textbf{for all}} +\algnewcommand\algorithmicloop{\textbf{loop}} +\algnewcommand\algorithmicrepeat{\textbf{repeat}} +\algnewcommand\algorithmicuntil{\textbf{until}} +\algnewcommand\algorithmicif{\textbf{if}} +\algnewcommand\algorithmicthen{\textbf{then}} +\algnewcommand\algorithmicelse{\textbf{else}} +\algnewcommand\algorithmicrequire{\textbf{Require:}} +\algnewcommand\algorithmicensure{\textbf{Ensure:}} +% +% *** DECLARED LOOPS *** +% +% lines... +\let\ALG@loopmark\ALG@x@nomark% +% default line and marks +\def\ALG@startmark{nomark}% +\def\ALG@blockline{noline}% +\def\ALG@continuemark{nomark}% +\def\ALG@endmark{nomark}% +% +\newcommand\ALG@compatcomm[1]{\ifthenelse{\equal{#1}{default}}{}{\ \algorithmiccomment{#1}}}% +\algrenewcomment[1]{\{#1\}}% +\algdef{SE}[WHILE]{WHILE}{ENDWHILE}% + [2][default]{\algorithmicwhile\ #2\ \algorithmicdo\ALG@compatcomm{#1}}% + {\algorithmicend\ \algorithmicwhile}% +\algdef{SE}[FOR]{FOR}{ENDFOR}% + [2][default]{\algorithmicfor\ #2\ \algorithmicdo\ALG@compatcomm{#1}}% + {\algorithmicend\ \algorithmicfor}% +\algdef{S}[FOR]{FORALL}% + [2][default]{\algorithmicforall\ #2\ \algorithmicdo\ALG@compatcomm{#1}}% +\algdef{SE}[LOOP]{LOOP}{ENDLOOP}% + [1][default]{\algorithmicloop\ALG@compatcomm{#1}}% + {\algorithmicend\ \algorithmicloop}% +\algdef{SE}[REPEAT]{REPEAT}{UNTIL}% + [1][default]{\algorithmicrepeat\ALG@compatcomm{#1}}% + [1]{\algorithmicuntil\ #1}% +\algdef{SE}[IF]{IF}{ENDIF}% + [2][default]{\algorithmicif\ #2\ \algorithmicthen\ALG@compatcomm{#1}}% + {\algorithmicend\ \algorithmicif}% +\algdef{C}[IF]{IF}{ELSIF}% + [2][default]{\algorithmicelse\ \algorithmicif\ #2\ \algorithmicthen\ALG@compatcomm{#1}}% +\algdef{Ce}[ELSE]{IF}{ELSE}{ENDIF}% + [1][default]{\algorithmicelse\ALG@compatcomm{#1}}% +\algnewcommand\REQUIRE{\item[\algorithmicrequire]}% +\algnewcommand\ENSURE{\item[\algorithmicensure]}% +\algnewcommand\STATE{\State}% +\algnewcommand\STATEx{\Statex}% +\algnewcommand\COMMENT{\Comment}% +% +\ifthenelse{\equal{\ALG@noend}{t}}% + {% + \algtext*{ENDWHILE}% + \algtext*{ENDFOR}% + \algtext*{ENDLOOP}% + \algtext*{ENDIF}% + }{}% +% +\algrenewcommand\algorithmicindent{1em}% +% diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algmatlab.sty b/Master/texmf-dist/tex/latex/algorithmicx/algmatlab.sty index be33bf10b17..e274a7dfa99 100644 --- a/Master/texmf-dist/tex/latex/algorithmicx/algmatlab.sty +++ b/Master/texmf-dist/tex/latex/algorithmicx/algmatlab.sty @@ -1,4 +1,4 @@ -% Matlab ALGORITHMIC STYLE -- Released 18 MAR 2004 +% Matlab ALGORITHMIC STYLE -- Released 27 APR 2005 % for LaTeX version 2e % % Copyright Szasz Janos @@ -10,14 +10,12 @@ \RequirePackage{algorithmicx}% \typeout{Document Style - matlab environments for use with the `algorithmicx' style}% % -\def\ALG@setmatlab{t}% -\DeclareOption{noset}{\def\ALG@setmatlab{}}% -\DeclareOption{set}{\def\ALG@setmatlab{t}}% \ProcessOptions% % % *** DECLARATIONS *** % \algnewlanguage{matlab}% +\alglanguage{matlab}% % % *** KEYWORDS *** % @@ -31,7 +29,7 @@ \algdef{Se}[IF]{If}{End}[1]{\textkeyword{if}\ #1}% \algdef{C}[IF]{IF}{ElseIf}[1]{\textkeyword{else}\textkeyword{if}\ #1}% \algdef{Ce}[ELSE]{IF}{Else}{End}{\textkeyword{else}}% -\algdef{LSxN}[FUNCTION]{Function}{End}{65535}% +\algdef{LSxnE}[FUNCTION]{Function}{End}{65535}% [2]{\textkeyword{function}\ \textfunc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}% % \algdef{SxE}[SWITCH]{Switch}{End}[1]{\let\Case\ALG@thecase\textkeyword{switch}\ #1}% @@ -66,10 +64,5 @@ % % *** OTHER DECLARATIONS *** % -\def\ALG@beginalgorithmic{\let\leftbr[\let\rightbr]\def\[{\textbf{\leftbr}}\def\]{\textbf{\rightbr}}}% -% -% -% -\ifthenelse{\equal{\ALG@setmatlab}{t}}{\alglanguage{matlab}}{}% -\let\ALG@setmatlab\relax% +\algrenewcommand\ALG@beginalgorithmic{\let\leftbr[\let\rightbr]\def\[{\textbf{\leftbr}}\def\]{\textbf{\rightbr}}}% % diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty b/Master/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty index 0b681debab7..bfb7dabafe4 100644 --- a/Master/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty +++ b/Master/texmf-dist/tex/latex/algorithmicx/algorithmicx.sty @@ -1,97 +1,88 @@ -% ALGORITHMIC STYLE -- Released 18 MAR 2004 +% ALGORITHMIC STYLE -- Released 27 APR 2005 % for LaTeX version 2e % % Copyright Szasz Janos % E-mail szaszjanos@users.sourceforge.net -% Based on Peter Williams's algorithmic.sty % % % *** INITIALISING *** % % \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{algorithmicx}[2004/03/18 v1.1 Algorithmicx] +\ProvidesPackage{algorithmicx}[2005/04/27 v1.2 Algorithmicx] \RequirePackage{ifthen} -\typeout{Document Style algorithmicx 1.1 - a greatly improved `algorithmic' style} +\typeout{Document Style algorithmicx 1.2 - a greatly improved `algorithmic' style} % \newcounter{ALG@line} \newcounter{ALG@rem} +\newcounter{ALG@nested} \newlength{\ALG@tlm} -\newlength{\ALG@ctlm} -\newlength{\algorithmicindent} -\setlength{\algorithmicindent}{1.5em} +\newlength{\ALG@thistlm} +\newcounter{ALG@Lnr}% the number of defined languages +\setcounter{ALG@Lnr}{0} \newcounter{ALG@blocknr}% the number of defined blocks \setcounter{ALG@blocknr}{0} +\newcounter{ALG@storecount}% number of stored but not restored algorithmic environments +\setcounter{ALG@storecount}{0} \newcounter{ALG@tmpcounter}% only to decrement things -\def\algorithmicnoindent{-\ALG@tlm} -\def\algbackskipbegin{\hskip\ALG@ctlm} -\def\algbackskip{\hskip\ALG@ctlm\hskip-\ALG@tlm} -\def\algbackskipend{\hskip-\ALG@tlm} +\newlength\ALG@tmplength% +%\def\algorithmicnoindent{-\ALG@tlm} +% \def\algbackskipbegin{\hskip\ALG@ctlm} +%\def\algbackskip{\hskip-\ALG@thistlm} +%\def\algbackskipend{\hskip-\ALG@tlm} \def\ALG@defaultindent{\algorithmicindent} % +% conditional states +% +\def\ALG@newcondstate#1% + {% + \expandafter\edef\csname ALG@x@#1\endcsname% + {\expandafter\noexpand\csname @@ALG@x@#1\endcsname}% + }% +\ALG@newcondstate{notext}% +\ALG@newcondstate{default}% +% % % *** ALGORITHMIC *** % % -\newenvironment{ALG@g}[1]% a list for the iner loops +\newcommand\ALG@beginblock[1]% #1 - indentation {% - \begin{list}% - {\ALG@step}% - {% - \itemsep\z@% - \itemindent\z@% - \listparindent2em% the indent given to multiline lines... - \rightmargin\z@% - \topsep\z@% - \partopsep\z@% - \parskip\z@% - \parsep\z@% - \leftmargin#1% - \ALG@ctlm#1% - \addtolength{\ALG@tlm}{\leftmargin}% - \labelsep\ALG@tlm% - \addtolength{\labelsep}{0.5em}% - }% - \global\@newlistfalse% give no error, if the list is empty + \ALG@thistlm\ALG@tlm% + \addtolength\ALG@tlm{#1}% + \addtocounter{ALG@nested}{1}% + \setlength\ALG@tmplength{#1}% + \expandafter\edef\csname ALG@ind@\theALG@nested\endcsname{\the\ALG@tmplength}% + }% +\newcommand\ALG@endblock% + {% + \addtolength\ALG@tlm{-\csname ALG@ind@\theALG@nested\endcsname}% + \addtocounter{ALG@nested}{-1}% + \ALG@thistlm\ALG@tlm% }% - {\end{list}}% % % algorithmic environment % -\let\ALG@beginalgorithmic\relax% for user overrides -\let\ALG@endalgorithmic\relax% for user overrides +\def\ALG@step% + {% + \addtocounter{ALG@line}{1}% + \addtocounter{ALG@rem}{1}% + \ifthenelse{\equal{\arabic{ALG@rem}}{\ALG@numberfreq}}% + {\setcounter{ALG@rem}{0}\alglinenumber{\arabic{ALG@line}}}% + {}% + }% \newenvironment{algorithmic}[1][0]% {% + \edef\ALG@numberfreq{#1}% \def\@currentlabel{\theALG@line}% - \newcommand{\ALG@step}% - {% - \addtocounter{ALG@line}{1}% - \addtocounter{ALG@rem}{1}% - \ifthenelse{\equal{\arabic{ALG@rem}}{#1}}% - {\setcounter{ALG@rem}{0}{\footnotesize \arabic{ALG@line}:}}% - {}% - }% % \setcounter{ALG@line}{0}% \setcounter{ALG@rem}{0}% % - \let\@listii\@listi% - \let\@listiii\@listi% - \let\@listiv\@listi% - \let\@listv\@listi% - \let\@listvi\@listi% - \let\@listvii\@listi% - \renewcommand{\@toodeep}{}% + \let\\\algbreak% % - \renewcommand{\\}% for multiline parameters !!! needs fix - {% - \item% - \hskip\ALG@parindent%!!! not yet implemented -% \hskip-\algorithmicindent% - }% - % - \edef\ALG@currentitem{0}% - \let\ALG@currentvalue\relax% + \expandafter\edef\csname ALG@currentblock@\theALG@nested\endcsname{0}% + \expandafter\let\csname ALG@currentlifetime@\theALG@nested\endcsname\relax% % \begin{list}% {\ALG@step}% @@ -99,23 +90,22 @@ \rightmargin\z@% \itemsep\z@ \itemindent\z@ \listparindent2em% \partopsep\z@ \parskip\z@ \parsep\z@% - \labelsep 0.5em \topsep 0.0em%\skip 1.2em + \labelsep 0.5em \topsep 0.2em%\skip 1.2em \ifthenelse{\equal{#1}{0}}% {\labelwidth 0.5em}% {\labelwidth 1.2em}% \leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}% Ok. the perfect leftmargin :-)) - \ALG@tlm 0em% - \ALG@ctlm\ALG@tlm% + \ALG@tlm\z@% }% + \setcounter{ALG@nested}{0}% \ALG@beginalgorithmic% }% {% end{algorithmic} -% \global\@newlistfalse% protects against empty algorithms, not needed % check if all blocks are closed \ALG@closeloops% - \ifnum0=\ALG@currentitem\relax% + \expandafter\ifnum\csname ALG@currentblock@\theALG@nested\endcsname=0\relax% \else% - \PackageError{algorithmicx}{Some blocks are not closed!!!}{Yes, you have some open blocks.}% + \PackageError{algorithmicx}{Some blocks are not closed!!!}{}% \fi% \ALG@endalgorithmic% \end{list}% @@ -125,107 +115,126 @@ % *** Functional core *** % % -\def\ALG@makeentitie#1% execute the entitie (#1) +\def\ALG@makeentity#1% execute the entity (#1) {% - \expandafter\ifx\csname ALG@b@#1@0\endcsname\relax% - \ALG@makenobegin{#1}% this entitie ends or continues blocks + \def\ALG@thisentity{#1}% + \expandafter\ifx\csname ALG@b@\ALG@L @#1@0\endcsname\relax% + \let\ALG@makenobeginrepeat\ALG@makenobegin\ALG@makenobeginrepeat% this entitie ends or continues blocks \else% - \ALG@makebegin{#1}% this entitie can open blocks + \let\ALG@makebeginrepeat\ALG@makebegin\ALG@makebeginrepeat% this entitie can open blocks \fi% \ALG@entitiecommand% }% % -\def\ALG@makebegin#1% executes an entitie (#1) that can open blocks +\def\ALG@makebegin% executes an entitie that can open blocks {% - \ifx\ALG@currentvalue\relax% - \ALG@openblock{0}{#1}% in infinite block I can open my block + \expandafter\let\expandafter\ALG@thislifetime\csname ALG@currentlifetime@\theALG@nested\endcsname% + \ifx\ALG@thislifetime\relax% + \let\ALG@makebeginrepeat\ALG@doentity% in infinite block I can open my block \else% - \ifnum0<\ALG@currentvalue\relax% - \ifnum\ALG@currentvalue>65534\else% - \setcounter{ALG@tmpcounter}{\ALG@currentvalue}% the block has 'space' for another included block + \ifnum\ALG@thislifetime>0\relax% + \ifnum\ALG@thislifetime>65534\else% + \setcounter{ALG@tmpcounter}{\ALG@thislifetime}% the block has 'space' for another included block \addtocounter{ALG@tmpcounter}{-1}% - \edef\ALG@currentvalue{\arabic{ALG@tmpcounter}}% + \expandafter\edef\csname ALG@currentlifetime@\theALG@nested\endcsname{\arabic{ALG@tmpcounter}}% \fi% - \ALG@openblock{0}{#1}% + \let\ALG@makebeginrepeat\ALG@doentity% \else% the block needs to be closed - \expandafter\ifx\csname ALG@b@#1@\ALG@currentitem\endcsname\relax% - \end{ALG@g}% I can not close this block, continue after it is closed by force - \ALG@makebegin{#1}% + \expandafter\ifx\csname ALG@b@\ALG@L @\ALG@thisentity @\csname ALG@currentblock@\theALG@nested\endcsname\endcsname\relax% + \ALG@closebyforce% I can not close this block, continue after it is closed by force +% \ALG@makebegin% \else% - \ALG@changeblock{#1}% close this block + % the block would be closed automatically, but this entitie can close it, so let's do it with the entity + \let\ALG@makebeginrepeat\ALG@doentity% \fi% \fi% \fi% + \ALG@makebeginrepeat% }% % -\def\ALG@makenobegin#1% executes an entitie (#1) that can not open blocks +\def\ALG@makenobegin% executes an entitie that can not open blocks {% - \ifx\ALG@currentvalue\relax% - \ALG@changeblock{#1}% an infinite block must be broken + \expandafter\ifx\csname ALG@currentlifetime@\theALG@nested\endcsname\relax% + \let\ALG@makenobeginrepeat\ALG@doentity% an infinite block must be broken \else% - \expandafter\ifx\csname ALG@b@#1@\ALG@currentitem\endcsname\relax% - \end{ALG@g}% the block must be ended by force, - \ALG@makenobegin{#1}% the command still runs + \expandafter\ifx\csname ALG@b@\ALG@L @\ALG@thisentity @\csname ALG@currentblock@\theALG@nested\endcsname\endcsname\relax% + \ALG@closebyforce% the block must be ended by force, \else% - \ALG@changeblock{#1}% i can continue / end this block, let's do it + \let\ALG@makenobeginrepeat\ALG@doentity% I can continue / end this block, let's do it \fi% \fi% + \ALG@makenobeginrepeat% }% % -\def\ALG@ifnotrelax#1#2#3% #1 - the number of the closed block, #2 - the entitie, #3 - things to be done +\def\ALG@dobegin% {% - \edef\ALG@tmpcmd{\expandafter\noexpand\csname algorithmic#2\endcsname}% - \expandafter\ifx\csname ALG@t@#1@#2\endcsname\relax\else% - \expandafter\ifx\csname ALG@t@#1@#2\endcsname\ALG@tmpcmd% - \expandafter\ifx\csname algorithmic#2\endcsname\relax\else% - #3% - \fi% - \else% - #3% - \fi% + \ALG@beginblock{\csname ALG@i@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname}% + \expandafter\edef\csname ALG@currentblock@\theALG@nested\endcsname{\csname ALG@b@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname}% + \expandafter\ifx\csname ALG@c@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname\relax% + \expandafter\let\csname ALG@currentlifetime@\theALG@nested\endcsname\relax% + \else% + \expandafter\edef\csname ALG@currentlifetime@\theALG@nested\endcsname{\csname ALG@c@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname}% \fi% }% % -\def\ALG@closeblock#1#2% #1 - the number of the closed block, #2 - the entitie +\def\ALG@doend% {% - \ALG@ifnotrelax{#1}{#2}{\item}% - \expandafter\let\expandafter\ALG@entitiecommand\csname ALG@t@#1@#2\endcsname% + \ALG@endblock% }% % -\def\ALG@openblock#1#2% #1 - the number of the closed block, #2 - the entitie +\def\ALG@doentity% the number of the closed block, the entitie {% - \item[]% - \begin{ALG@g}{\csname ALG@i@#2@#1\endcsname}% - \edef\ALG@currentitem{\csname ALG@b@#2@#1\endcsname}% - \expandafter\ifx\csname ALG@c@#2@#1\endcsname\relax% - \let\ALG@currentvalue\relax% + \edef\ALG@thisblock{\csname ALG@currentblock@\theALG@nested\endcsname}% + \expandafter\ifx\csname ALG@b@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname\relax% + \def\ALG@thisblock{0}% + \fi% + \ALG@getentitytext% + \ifnum\ALG@thisblock=0\else\ALG@doend\fi% + \ifx\ALG@text\ALG@x@notext% + \item[]\nointerlineskip%\vskip-\prevdepth\nointerlineskip% bug: if there are no text and no lines, then this is wrong \else% - \edef\ALG@currentvalue{\csname ALG@c@#2@#1\endcsname}% + \item% \fi% - \ALG@ifnotrelax{#1}{#2}% - {% - \item\hskip-\ALG@ctlm% default spacing - }% - \expandafter\let\expandafter\ALG@entitiecommand\csname ALG@t@#1@#2\endcsname% + \noindent\hskip\ALG@tlm% + \expandafter\ifnum0=\csname ALG@b@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname\else% + \ALG@dobegin% + \fi% + \def\ALG@entitiecommand{\ALG@displayentity}% }% % -\def\ALG@changeblock#1% #1 - the entitie +\def\ALG@getentitytext% {% - \setcounter{ALG@tmpcounter}{\ALG@currentitem}% - \expandafter\ifnum0=\csname ALG@b@#1@\ALG@currentitem\endcsname\relax% - \end{ALG@g}% - \ALG@closeblock{\arabic{ALG@tmpcounter}}{#1}% - \else% - \end{ALG@g}% - \ALG@openblock{\arabic{ALG@tmpcounter}}{#1}% + \expandafter\let\expandafter\ALG@text\csname ALG@t@\ALG@L @\ALG@thisentity @\ALG@thisblock\endcsname% + \ifx\ALG@text\ALG@x@default% + % block specific - default + \expandafter\let\expandafter\ALG@text\csname ALG@t@\ALG@L @\ALG@thisentity\endcsname% + \ifx\ALG@text\ALG@x@default% + % block specific - default, language specific - default + \def\ALG@text{\ALG@deftext{\ALG@thisentity}}% + \fi% \fi% }% % +\def\ALG@deftext{\csname ALG@deftext@\ALG@L\endcsname}% +% +\def\ALG@displayentity% + {% + \ifx\ALG@text\ALG@x@notext% + \let\ALG@text\relax% + \fi + \ALG@text% + }% +% +\def\ALG@closebyforce% + {% + \ALG@endblock% + }% +% \def\ALG@closeloops% closes all finite blocks {% - \ifx\ALG@currentvalue\relax% + \expandafter\ifx\csname ALG@currentlifetime@\theALG@nested\endcsname\relax% \else% only if it is finite - \end{ALG@g}% the block must be ended by force, + \ALG@closebyforce% the block must be ended by force, \ALG@closeloops% the command still runs \fi% }% @@ -241,40 +250,33 @@ % \def\ALG@createblock#1% create the block #1, if it does not exists {% - \@ifundefined{ALG@bl@#1}% needs to be created? + \@ifundefined{ALG@bl@\ALG@Ld @#1}% needs to be created? {% \addtocounter{ALG@blocknr}{1}% increment the block counter - \expandafter\edef\csname ALG@bl@#1\endcsname{\arabic{ALG@blocknr}}% set the block number + \expandafter\edef\csname ALG@bl@\ALG@Ld @#1\endcsname{\arabic{ALG@blocknr}}% set the block number }% {}% }% % % Get the block number % -\def\ALG@getblocknumber#1{\csname ALG@bl@#1\endcsname}% +\def\ALG@getblocknumber#1{\csname ALG@bl@\ALG@Ld @#1\endcsname}% % % Create an entitie % \def\ALG@createentitie#1% create the entitie #1, if it does not exists {% - \@ifundefined{#1}% needs to be created? + \expandafter\ALG@edefcmd\csname #1\endcsname{\noexpand\ALG@makeentity{#1}}% + \@ifundefined{ALG@t@\ALG@Ld @#1}% the entity text is defined in this language? {% - \expandafter\edef\csname #1\endcsname{\noexpand\ALG@makeentitie{#1}}% - \@ifundefined{algorithmic#1}% \algorithmic#1 exists? - {% - \expandafter\edef\csname algorithmic#1\endcsname{\noexpand\textbf{#1}}% - }% - {}% + \expandafter\let\csname ALG@t@\ALG@Ld @#1\endcsname\ALG@x@default% }% {}% }% % -\def\ALG@createtext#1#2% #1 = closed block; #2 = entitie; creates \ALG@t@#1@#2 +\def\ALG@createtext#1#2% #1 = closed block; #2 = entitie; creates \ALG@t@#2@#1 {% - \expandafter\edef\csname ALG@t@#1@#2\endcsname% - {% - \expandafter\noexpand\csname algorithmic#2\endcsname% - }% + \expandafter\let\csname ALG@t@\ALG@Ld @#2@#1\endcsname\ALG@x@default% }% % % End and Continue block @@ -286,31 +288,27 @@ \ALG@createentitie{#3}% create the entitie \ALG@createblock{#2}% create the old block, if needed \ifthenelse{\equal{#1}{}}% whe need to open a new block? - {\expandafter\edef\csname ALG@b@#3@\ALG@getblocknumber{#2}\endcsname{0}}% no, just close the old one + {\expandafter\edef\csname ALG@b@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{0}}% no, just close the old one {% yes, \ALG@createblock{#1}% create the block - \expandafter\edef\csname ALG@b@#3@\ALG@getblocknumber{#2}\endcsname{\ALG@getblocknumber{#1}}% ending the old block opens a new one + \expandafter\edef\csname ALG@b@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{\ALG@getblocknumber{#1}}% ending the old block opens a new one \ifthenelse{\equal{#4}{}}% infinite or finite credits? - {\expandafter\let\csname ALG@c@#3@\ALG@getblocknumber{#2}\endcsname\relax}% infinite credits - {\expandafter\edef\csname ALG@c@#3@\ALG@getblocknumber{#2}\endcsname{#4}}% finite credits + {\expandafter\let\csname ALG@c@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname\relax}% infinite credits + {\expandafter\edef\csname ALG@c@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{#4}}% finite credits \ifthenelse{\equal{#5}{}}% default or specified indentation - {\expandafter\let\csname ALG@i@#3@\ALG@getblocknumber{#2}\endcsname\ALG@defaultindent}% default indentation - {\expandafter\edef\csname ALG@i@#3@\ALG@getblocknumber{#2}\endcsname{#5}}% indentation is specified + {\expandafter\let\csname ALG@i@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname\ALG@defaultindent}% default indentation + {\expandafter\edef\csname ALG@i@\ALG@Ld @#3@\ALG@getblocknumber{#2}\endcsname{#5}}% indentation is specified }% \ALG@createtext{\ALG@getblocknumber{#2}}{#3}% }% }% % -% -% *** NEW VERSION *** -% -% -% used macros +% macros used in declarations % \def\ALG@p@endtext@E{\algrenewtext{\ALG@v@end}}% \def\ALG@p@endtext@xE{\algrenewtext[\ALG@v@newblock]{\ALG@v@end}}% -\def\ALG@p@endtext@N{\algnotext{\ALG@v@end}}% -\def\ALG@p@endtext@xN{\algnotext[\ALG@v@newblock]{\ALG@v@end}}% +\def\ALG@p@endtext@nE{\algnotext{\ALG@v@end}}% +\def\ALG@p@endtext@xnE{\algnotext[\ALG@v@newblock]{\ALG@v@end}}% \def\ALG@p@endtext@{}% % starttext defines are more compex -- care must be taken for the optional parameters \def\ALG@p@starttext@S{\ALG@p@s@process{\algrenewtext}}% @@ -334,6 +332,9 @@ \def\ALG@p@s@param#1#2#3{#1{\ALG@v@start}[#2]{#3}\ALG@p@endtext}% \def\ALG@p@s@defparam#1#2#3#4{#1{\ALG@v@start}[#2][#3]{#4}\ALG@p@endtext}% % the rest of the crew +\def\ALG@p@starttext@nS{\algnotext{\ALG@v@start}\ALG@p@endtext}% +\def\ALG@p@starttext@nC{\algnotext{\ALG@v@start}\ALG@p@endtext}% +\def\ALG@p@starttext@xnC{\algnotext[\ALG@v@oldblock]{\ALG@v@start}\ALG@p@endtext}% \def\ALG@p@starttext@{\ALG@p@endtext}% \def\ALG@p@indent@def#1{\def\ALG@v@indent{#1}\ALG@p@setup}% \def\ALG@p@indent@{\def\ALG@v@indent{}\ALG@p@setup}% @@ -381,40 +382,91 @@ \def\ALG@p@onS{\ALG@p@def{start}\ALG@p@def[S]{starttext}}% \def\ALG@p@onc{\ALG@p@def{oldblock}\ALG@p@def{start}}% \def\ALG@p@onC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[C]{starttext}}% -\def\ALG@p@onxC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[xC]{starttext}}% \def\ALG@p@one{\ALG@p@def{end}}% \def\ALG@p@onE{\ALG@p@def{end}\ALG@p@def[E]{endtext}}% +\def\ALG@p@onxC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[xC]{starttext}}% \def\ALG@p@onxE{\ALG@p@def{end}\ALG@p@def[xE]{endtext}}% -\def\ALG@p@onN{\ALG@p@def{end}\ALG@p@def[N]{endtext}}% -\def\ALG@p@onxN{\ALG@p@def{end}\ALG@p@def[xN]{endtext}}% +\def\ALG@p@onnS{\ALG@p@def{start}\ALG@p@def[nS]{starttext}}% +\def\ALG@p@onnC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[nC]{starttext}}% +\def\ALG@p@onnE{\ALG@p@def{end}\ALG@p@def[nE]{endtext}}% +\def\ALG@p@onxnC{\ALG@p@def{oldblock}\ALG@p@def{start}\ALG@p@def[xnC]{starttext}}% +\def\ALG@p@onxnE{\ALG@p@def{end}\ALG@p@def[xnE]{endtext}}% \def\ALG@p@onb{\def\ALG@v@credits{}}% \def\ALG@p@onl{\def\ALG@v@credits{1}}% \def\ALG@p@onL{\ALG@p@def{credits}}% \def\ALG@p@oni{\ALG@p@def{indent}}% -\expandafter\def\csname ALG@p@on]\endcsname{\let\ALG@p@rec\relax}% -% -% param processing % -\def\ALG@p@process#1% +\def\ALG@p@main#1% {% - \@ifundefined{ALG@p@on#1}% - {\typeout{algdef: Ignoring unknown token #1}}% - {\csname ALG@p@on#1\endcsname}% - \ALG@p@rec% - }% -% -\def\ALG@p@onx{\let\ALG@p@rec\ALG@p@processx}% -% -\def\ALG@p@processx#1% - {% - \@ifundefined{ALG@p@onx#1}% + \@ifundefined{ALG@ps@\ALG@p@state @#1}% + {% + \csname ALG@ps@\ALG@p@state @other\endcsname{#1}% + }% {% - \typeout{algdef: Ignoring sole x}% - \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@process\ALG@p@process#1}% + \csname ALG@ps@\ALG@p@state @#1\endcsname% }% - {\csname ALG@p@onx#1\endcsname\let\ALG@p@rec\ALG@p@process}% \ALG@p@rec% }% +% STATE : <> +\expandafter\def\csname ALG@ps@@]\endcsname{\let\ALG@p@rec\relax}% +\def\ALG@ps@@s{\ALG@p@ons}% +\def\ALG@ps@@S{\ALG@p@onS}% +\def\ALG@ps@@c{\ALG@p@onc}% +\def\ALG@ps@@C{\ALG@p@onC}% +\def\ALG@ps@@e{\ALG@p@one}% +\def\ALG@ps@@E{\ALG@p@onE}% +\def\ALG@ps@@N{\typeout{algdef: 'N' obsoloted, use 'nE'.}\ALG@p@onnE}% +\def\ALG@ps@@b{\ALG@p@onb}% +\def\ALG@ps@@l{\ALG@p@onl}% +\def\ALG@ps@@L{\ALG@p@onL}% +\def\ALG@ps@@i{\ALG@p@oni}% +\def\ALG@ps@@x{\def\ALG@p@state{x}}% +\def\ALG@ps@@n{\def\ALG@p@state{n}}% +\def\ALG@ps@@other#1{\typeout{algdef: Ignoring unknown token #1}}% +% STATE : x +\def\ALG@ps@x@C{\def\ALG@p@state{}\ALG@p@onxC}% +\def\ALG@ps@x@E{\def\ALG@p@state{}\ALG@p@onxE}% +\def\ALG@ps@x@N{\def\ALG@p@state{}\typeout{algdef: 'xN' obsoloted, use 'xnE'.}\ALG@p@onxnE}% +\def\ALG@ps@x@n{\def\ALG@p@state{xn}}% +\def\ALG@ps@x@other#1% + {% + \typeout{algdef: Ignoring 'x' before '#1'.}% + \def\ALG@p@state{}% + \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}% + }% +% STATE : n +\def\ALG@ps@n@S{\def\ALG@p@state{}\ALG@p@onnS}% +\def\ALG@ps@n@C{\def\ALG@p@state{}\ALG@p@onnC}% +\def\ALG@ps@n@E{\def\ALG@p@state{}\ALG@p@onnE}% +\def\ALG@ps@n@x{\def\ALG@p@state{nx}}% +\def\ALG@ps@n@other#1% + {% + \typeout{algdef: Ignoring 'n' before '#1'.}% + \def\ALG@p@state{}% + \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}% + }% +% STATE : xn +\def\ALG@ps@xn@C{\def\ALG@p@state{}\ALG@p@onxnC}% +\def\ALG@ps@xn@E{\def\ALG@p@state{}\ALG@p@onxnE}% +\def\ALG@ps@xn@x{\typeout{algdef: Ignoring 'x' after 'xn'.}}% +\def\ALG@ps@xn@n{\typeout{algdef: Ignoring 'n' after 'xn'.}}% +\def\ALG@ps@xn@other#1% + {% + \typeout{algdef: Ignoring 'xn' before '#1'.}% + \def\ALG@p@state{}% + \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}% + }% +% STATE : nx +\def\ALG@ps@nx@C{\def\ALG@p@state{}\ALG@p@onxnC}% +\def\ALG@ps@nx@E{\def\ALG@p@state{}\ALG@p@onxnE}% +\def\ALG@ps@nx@x{\typeout{algdef: Ignoring 'x' after 'nx'.}}% +\def\ALG@ps@nx@n{\typeout{algdef: Ignoring 'n' after 'nx'.}}% +\def\ALG@ps@nx@other#1% + {% + \typeout{algdef: Ignoring 'nx' before '#1'.}% + \def\ALG@p@state{}% + \def\ALG@p@rec{\let\ALG@p@rec\ALG@p@main\ALG@p@rec#1}% + }% % % % *** User level block/entitie commands *** @@ -433,7 +485,8 @@ \ALG@p@undef{indent}% \ALG@p@undef{starttext}% \ALG@p@undef{endtext}% - \let\ALG@p@rec\ALG@p@process% + \def\ALG@p@state{}% + \let\ALG@p@rec\ALG@p@main% \ALG@p@rec#1]% \ALG@p@newblock% }% @@ -465,70 +518,269 @@ {% \ifthenelse{\equal{#2}{}}{}% {% - \algnotext[#1]{#2}% \ifthenelse{\equal{#1}{}}% {% - \expandafter\newcommand\csname algorithmic#2\endcsname% + \expandafter\let\csname ALG@t@\ALG@Ld @#2\endcsname\relax% + \expandafter\newcommand\csname ALG@t@\ALG@Ld @#2\endcsname% }% {% - \expandafter\newcommand\csname ALG@t@\ALG@getblocknumber{#1}@#2\endcsname% + \expandafter\let\csname ALG@t@\ALG@Ld @#2@\ALG@getblocknumber{#1}\endcsname\relax% + \expandafter\newcommand\csname ALG@t@\ALG@Ld @#2@\ALG@getblocknumber{#1}\endcsname% }% }% }% % -\newcommand\algnotext[2][]% [block]{entity} +\def\ALG@letentitytext#1#2% [block]{entity} {% \ifthenelse{\equal{#2}{}}{}% {% \ifthenelse{\equal{#1}{}}% {% - \expandafter\let\csname algorithmic#2\endcsname\relax% + \expandafter\let\csname ALG@t@\ALG@Ld @#2\endcsname% }% {% - \expandafter\let\csname ALG@t@\ALG@getblocknumber{#1}@#2\endcsname\relax% + \expandafter\let\csname ALG@t@\ALG@Ld @#2@\ALG@getblocknumber{#1}\endcsname% }% }% }% % +\newcommand\algnotext[2][]% [block]{entity} + {% + \ALG@letentitytext{#1}{#2}\ALG@x@notext% + }% +% \newcommand\algdefaulttext[2][]% [block]{entity} {% - \ifthenelse{\equal{#1}{}}% + \ALG@letentitytext{#1}{#2}\ALG@x@default% + }% +% +\def\ALG@notext*{\algnotext}% +\def\algtext{\@ifnextchar{*}{\ALG@notext}{\algrenewtext}}% +% +% +% *** LANGUAGE SWITCHING *** +% +% +% +\newcommand\algnewlanguage[1]% + {% + \@ifundefined{ALG@L@#1}% needs to be created? + {}% {% - \expandafter\def\csname algorithmic#2\endcsname{\textbf{#2}}% + \PackageError{algorithmicx}{Language '#1' already defined!}{}% }% + \addtocounter{ALG@Lnr}{1}% increment the language counter + \expandafter\edef\csname ALG@L@#1\endcsname{\arabic{ALG@Lnr}}% set the language number + \edef\ALG@Ld{\csname ALG@L@#1\endcsname}% + \expandafter\let\csname ALG@bl@\ALG@Ld @\endcsname\ALG@bl@% the BIG block + \expandafter\let\csname ALG@bl@\ALG@Ld @@\endcsname\ALG@bl@% the BIG block + \algdef{SL}[STATE]{State}{0}{}% + \expandafter\def\csname ALG@deftext@\ALG@Ld\endcsname{\textbf}% + \algnewcommand\algorithmiccomment[1]{\hfill\(\triangleright\) ##1}% + \algnewcommand\algorithmicindent{1.5em}% + \algnewcommand\alglinenumber[1]{\footnotesize ##1:}% + \algnewcommand\ALG@beginalgorithmic\relax% for user overrides + \algnewcommand\ALG@endalgorithmic\relax% for user overrides + }% +% +\newcommand\algsetlanguage[1]% + {% + \@ifundefined{ALG@L@#1}% needs to be created? {% - \ALG@createtext{\ALG@getblocknumber{#1}}{#2}% - }% + \PackageError{algorithmicx}{Language '#1' is not yet defined!}{}% + }{}% + \edef\ALG@L{\csname ALG@L@#1\endcsname}% + }% +% +\newcommand\algdeflanguage[1]% + {% + \@ifundefined{ALG@L@#1}% needs to be created? + {% + \PackageError{algorithmicx}{Language '#1' is not yet defined!}{}% + }{}% + \edef\ALG@Ld{\csname ALG@L@#1\endcsname}% + }% +% +\newcommand\alglanguage[1]% + {% + \algdeflanguage{#1}% + \algsetlanguage{#1}% }% % -\def\ALG@notext*{\algnotext}% -\def\algtext{\@ifnextchar{*}{\ALG@notext}{\algrenewtext}}% +% +% *** Defining language dependent stuff *** +% +% +\def\ALG@eatoneparam#1{}% +\def\ALG@defbasecmd#1#2% + {% + \edef\ALG@tmp{\expandafter\ALG@eatoneparam\string #2}% + \@ifundefined\ALG@tmp{\edef #2{\noexpand\csname ALG@cmd@\noexpand\ALG@L @\ALG@tmp\endcsname}}{}% + \expandafter#1\csname ALG@cmd@\ALG@Ld @\ALG@tmp\endcsname% + }% +\newcommand\algnewcommand{\ALG@defbasecmd\newcommand}% +\newcommand\algrenewcommand{\ALG@defbasecmd\renewcommand}% +\def\ALG@letcmd{\ALG@defbasecmd\let}% +\def\ALG@defcmd{\ALG@defbasecmd\def}% +\def\ALG@edefcmd{\ALG@defbasecmd\edef}% % % % *** OTHERS *** % % -\algdef{SL}[STATE]{State}{0}{}% \def\BState{\State \algbackskip}% \def\Statex{\item[]}% an empty line -\newcommand\algorithmiccomment[1]{\hfill\(\triangleright\) #1}% +\newcommand\algrenewcomment{\algrenewcommand\algorithmiccomment}% \def\Comment{\algorithmiccomment}% \def\algref#1#2{\ref{#1}.\ref{#2}}% +\algnewlanguage{default}% +\algsetlanguage{default}% % % -% *** LANGUAGE SWITCHING *** +% *** Line breaks *** % % -\newcommand\ALG@deflanguage[3]%#1#2#3% +\newcommand\algbreak% for multiline parameters !!! needs fix {% - \ifthenelse{\equal{#2}{}}% - {\expandafter\def\csname ALG@setlanguage@#1\endcsname{#3}}% - {\def\ALG@tmp{\let\ALG@tmp\relax#3}\ALG@tmp}% + \item% +% \hskip\ALG@parindent%!!! not yet implemented +% \hskip-\algorithmicindent% + }% +% +\def\ALG@noputindents% + {% + \hskip\ALG@tlm% }% % -\def\algsetlanguage#1% +% +% *** algorithm store / restore *** +% +% +% store +% +\ALG@newcondstate{mustrestore}% +\def\algstore% {% - \csname ALG@setlanguage@#1\endcsname% + \renewcommand\ALG@beginblock% + {% + \PackageError{algorithmicx}{The environment must be closed after store!}{}% + }% + \@ifstar{\ALG@starstore}{\ALG@nostarstore}% + }% +\def\ALG@nostarstore#1% save all infos into #1 and terminate the algorithmic block + {% + \addtocounter{ALG@storecount}{1}% + \expandafter\global\expandafter\let\csname ALG@save@mustrestore@#1\endcsname\ALG@x@mustrestore% + \ALG@starstore{#1}% + }% +\def\ALG@starstore#1% + {% + \@ifundefined{ALG@save@line@#1}{}% + {\PackageError{algorithmicx}{This save name '#1' is already used!}{}}% + \def\ALG@savename{#1}% + \expandafter\xdef\csname ALG@save@totalnr@\ALG@savename\endcsname{\theALG@nested}% + \expandafter\xdef\csname ALG@save@line@\ALG@savename\endcsname{\theALG@line}% + \expandafter\xdef\csname ALG@save@numberfreq@\ALG@savename\endcsname{\ALG@numberfreq}% + \expandafter\xdef\csname ALG@save@rem@\ALG@savename\endcsname{\theALG@rem}% + \let\ALG@storerepeat\ALG@store% + \ALG@storerepeat% + }% +\def\ALG@store% simply terminate all open blocks + {% + \ifnum\theALG@nested=0\let\ALG@storerepeat\relax% + \else% + \expandafter\xdef\csname ALG@save@currentblock@\ALG@savename @\theALG@nested\endcsname% + {\csname ALG@currentblock@\theALG@nested\endcsname}% + \expandafter\ifx\csname ALG@currentlifetime@\theALG@nested\endcsname\relax% + \else% + \expandafter\xdef\csname ALG@save@currentlifetime@\ALG@savename @\theALG@nested\endcsname% + {\csname ALG@currentlifetime@\theALG@nested\endcsname}% + \fi% + \expandafter\xdef\csname ALG@save@ind@\ALG@savename @\theALG@nested\endcsname% + {\csname ALG@ind@\theALG@nested\endcsname}% + \ALG@closebyforce% + \fi% + \ALG@storerepeat% }% % +% restore % +\def\algrestore% + {% + \@ifstar{\ALG@starrestore}{\ALG@nostarrestore}% + }% +\def\ALG@starrestore% + {% + \let\ALG@restorerem\relax% + \let\ALG@restorereprem\relax% + \ALG@restoremain% + }% +\def\ALG@nostarrestore% + {% + \let\ALG@restorerem\ALG@restoreremovesave% + \let\ALG@restorereprem\ALG@restorerepremovesave% + \ALG@restoremain% + }% +\def\ALG@restoreremovesave% + {% + \expandafter\global\expandafter\let\csname ALG@save@totalnr@\ALG@savename\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@line@\ALG@savename\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@rem@\ALG@savename\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@totalnr@\ALG@savename\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@numberfreq@\ALG@savename\endcsname\relax% + }% +\def\ALG@restorerepremovesave% + {% + \expandafter\global\expandafter\let\csname ALG@save@currentblock@\ALG@savename @\theALG@tmpcounter\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname\relax% + \expandafter\global\expandafter\let\csname ALG@save@ind@\ALG@savename @\theALG@tmpcounter\endcsname\relax% + }% +\def\ALG@restoremain#1% restore all infos from #1 in an open algorithmic block + {% + \ifnum\theALG@line=0% + \else\PackageError{algorithmicx}{Restore might be used only at the beginning of the environment!}{}% + \fi% + \def\ALG@savename{#1}% + \expandafter\ifx\csname ALG@save@totalnr@\ALG@savename\endcsname\relax% + \PackageError{algorithmicx}{Save '\ALG@savename'\space not defined!!!}{}% + \fi% + \@ifundefined{ALG@save@mustrestore@\ALG@savename}{}% + {% + \addtocounter{ALG@storecount}{-1}% + \expandafter\global\expandafter\let\csname ALG@save@mustrestore@\ALG@savename\endcsname\relax% + }% + \setcounter{ALG@line}{\csname ALG@save@line@\ALG@savename\endcsname}% + \edef\ALG@numberfreq{\csname ALG@save@numberfreq@\ALG@savename\endcsname}% + \setcounter{ALG@rem}{\csname ALG@save@rem@\ALG@savename\endcsname}% + \setcounter{ALG@tmpcounter}{\csname ALG@save@totalnr@\ALG@savename\endcsname}% + \setcounter{ALG@nested}{0}% + \ALG@restorerem% + \let\ALG@restorerepeat\ALG@restore% + \ALG@restorerepeat% + }% +\def\ALG@restore% + {% + \ifnum\theALG@tmpcounter>0% + \expandafter\edef\csname ALG@currentblock@\theALG@tmpcounter\endcsname% + {\csname ALG@save@currentblock@\ALG@savename @\theALG@tmpcounter\endcsname}% + \expandafter\ifx\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname\relax% + \expandafter\let\csname ALG@currentlifetime@\theALG@tmpcounter\endcsname\relax% + \else% + \expandafter\edef\csname ALG@currentlifetime@\theALG@tmpcounter\endcsname% + {\csname ALG@save@currentlifetime@\ALG@savename @\theALG@tmpcounter\endcsname}% + \fi% + % + \ALG@beginblock{\csname ALG@save@ind@\ALG@savename @\theALG@tmpcounter\endcsname}% + \ALG@restorereprem% + \addtocounter{ALG@tmpcounter}{-1}% + \else\let\ALG@restorerepeat\relax% + \fi% + \ALG@restorerepeat% + }% +\AtEndDocument% + {% + \ifnum\theALG@storecount>0\relax% + \PackageError{algorithmicx}{Some stored algorithms are not restored!}{}% + \fi% + }% diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algpascal.sty b/Master/texmf-dist/tex/latex/algorithmicx/algpascal.sty index df4c81e37e6..0c9a57779f4 100644 --- a/Master/texmf-dist/tex/latex/algorithmicx/algpascal.sty +++ b/Master/texmf-dist/tex/latex/algorithmicx/algpascal.sty @@ -1,8 +1,8 @@ -% A PASCAL LIKE ALGORITHMIC STYLE -- Released 18 MAR 2004 +% A PASCAL LIKE ALGORITHMIC STYLE -- Released 27 APR 2005 % for LaTeX version 2e % % Copyright Szasz Janos -% E-mail szaszjanos@users.sourceforge.net +% E-mail szaszjanos@sourceforge.net % \NeedsTeXFormat{LaTeX2e}% \ProvidesPackage{algpascal}% @@ -10,46 +10,35 @@ \RequirePackage{algorithmicx}% \typeout{Document Style - pascal environments for the `algorithmicx' style}% % -\def\ALG@setpascal{t}% -\DeclareOption{noset}{\def\ALG@setpascal{}}% -\DeclareOption{set}{\def\ALG@setpascal{t}}% \ProcessOptions% % % % *** DECLARATIONS *** % % -\ALG@deflanguage{pascal}{\ALG@setpascal}% -{% +\algnewlanguage{pascal}% +\alglanguage{pascal}% % % *** KEYWORDS *** % -\newcommand\textkeyword{\textbf}% +\algnewcommand\textkeyword{\textbf}% % % *** DECLARED BLOCKS AND LOOPS *** % \algdef{SEi}{Begin}{End}{0cm}{\textkeyword{begin}}{\textkeyword{end}}% \algdef{Sei}{Asm}{End}{0cm}{\textkeyword{asm}}% % -\algdef{lS}{For}[2]{\textkeyword{for} \(##1\) \textkeyword{to} \(##2\) \textkeyword{do}}% -\algdef{lS}{While}[1]{\textkeyword{while} \(##1\) \textkeyword{do}}% -\algdef{lS}{With}[1]{\textkeyword{with}\ \(##1\) \textkeyword{do}}% -\algdef{SE}{Repeat}{Until}{\textkeyword{repeat}}[1]{\textkeyword{until}\ \(##1\)}% -\algdef{lS}{If}[1]{\textkeyword{if}\ \(##1\) \textkeyword{then}}% +\algdef{lS}{For}[2]{\textkeyword{for} \(#1\) \textkeyword{to} \(#2\) \textkeyword{do}}% +\algdef{lS}{While}[1]{\textkeyword{while} \(#1\) \textkeyword{do}}% +\algdef{lS}{With}[1]{\textkeyword{with}\ \(#1\) \textkeyword{do}}% +\algdef{SE}{Repeat}{Until}{\textkeyword{repeat}}[1]{\textkeyword{until}\ \(#1\)}% +\algdef{lS}{If}[1]{\textkeyword{if}\ \(#1\) \textkeyword{then}}% \algdef{lC}{If}{Else}{\textkeyword{else}}% % % *** OTHER DECLARATIONS *** % -\def\Procedure{\State\textkeyword{procedure}\space}% -\def\Function{\State\textkeyword{function}\space}% +\algnewcommand\Procedure{\State\textkeyword{procedure}\space}% +\algnewcommand\Function{\State\textkeyword{function}\space}% % -\renewcommand\algorithmiccomment[1]{\hfill\{##1\}}% -% -% -% -}% -% -% -% -\let\ALG@setpascal\relax% +\algrenewcomment[1]{\hfill\{#1\}}% % diff --git a/Master/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty b/Master/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty index ba7a5d57329..fca966ac658 100644 --- a/Master/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty +++ b/Master/texmf-dist/tex/latex/algorithmicx/algpseudocode.sty @@ -1,4 +1,4 @@ -% PSEUDOCODE ALGORITHMIC STYLE -- Released 18 MAR 2004 +% PSEUDOCODE ALGORITHMIC STYLE -- Released 27 APR 2005 % for LaTeX version 2e % % Copyright Szasz Janos @@ -11,63 +11,59 @@ \RequirePackage{algorithmicx}% \typeout{Document Style - pseudocode environments for use with the `algorithmicx' style}% % -\def\ALG@setpseudocode{t}% -\newboolean{ALG@noend}% -\setboolean{ALG@noend}{false}% +\def\ALG@noend{f}% \newboolean{ALG@compatible}% \setboolean{ALG@compatible}{false}% % -\DeclareOption{noset}{\def\ALG@setpseudocode{}}% -\DeclareOption{set}{\def\ALG@setpseudocode{t}}% -\DeclareOption{noend}{\setboolean{ALG@noend}{true}}% -\DeclareOption{end}{\setboolean{ALG@noend}{false}}% -\DeclareOption{compatible}{\setboolean{ALG@compatible}{true}}% +\DeclareOption{noend}{\def\ALG@noend{t}}% +\DeclareOption{end}{\def\ALG@noend{f}}% +\DeclareOption{compatible}{\typeout{For compatibility mode use algcompatible.sty!!!}\setboolean{ALG@compatible}{true}}% \DeclareOption{noncompatible}{\setboolean{ALG@noncompatible}{false}}% \ProcessOptions% % % *** DECLARATIONS *** % -\ALG@deflanguage{pseudocode}{\ALG@setpseudocode}% -{% +\algnewlanguage{pseudocode}% +\alglanguage{pseudocode}% % % *** KEYWORDS *** % -\newcommand\algorithmicend{\textbf{end}} -\newcommand\algorithmicdo{\textbf{do}} -\newcommand\algorithmicwhile{\textbf{while}} -\newcommand\algorithmicfor{\textbf{for}} -\newcommand\algorithmicforall{\textbf{for all}} -\newcommand\algorithmicloop{\textbf{loop}} -\newcommand\algorithmicrepeat{\textbf{repeat}} -\newcommand\algorithmicuntil{\textbf{until}} -\newcommand\algorithmicprocedure{\textbf{procedure}} -\newcommand\algorithmicfunction{\textbf{function}} -\newcommand\algorithmicif{\textbf{if}} -\newcommand\algorithmicthen{\textbf{then}} -\newcommand\algorithmicelse{\textbf{else}} -\newcommand\algorithmicrequire{\textbf{Require:}} -\newcommand\algorithmicensure{\textbf{Ensure:}} -\newcommand{\algorithmicreturn}{\textbf{return}} -\newcommand\textproc{\textsc} +\algnewcommand\algorithmicend{\textbf{end}} +\algnewcommand\algorithmicdo{\textbf{do}} +\algnewcommand\algorithmicwhile{\textbf{while}} +\algnewcommand\algorithmicfor{\textbf{for}} +\algnewcommand\algorithmicforall{\textbf{for all}} +\algnewcommand\algorithmicloop{\textbf{loop}} +\algnewcommand\algorithmicrepeat{\textbf{repeat}} +\algnewcommand\algorithmicuntil{\textbf{until}} +\algnewcommand\algorithmicprocedure{\textbf{procedure}} +\algnewcommand\algorithmicfunction{\textbf{function}} +\algnewcommand\algorithmicif{\textbf{if}} +\algnewcommand\algorithmicthen{\textbf{then}} +\algnewcommand\algorithmicelse{\textbf{else}} +\algnewcommand\algorithmicrequire{\textbf{Require:}} +\algnewcommand\algorithmicensure{\textbf{Ensure:}} +\algnewcommand\algorithmicreturn{\textbf{return}} +\algnewcommand\textproc{\textsc} % % *** DECLARED LOOPS *** % -\algdef{SE}[WHILE]{While}{EndWhile}[1]{\algorithmicwhile\ ##1\ \algorithmicdo}{\algorithmicend\ \algorithmicwhile}% -\algdef{SE}[FOR]{For}{EndFor}[1]{\algorithmicfor\ ##1\ \algorithmicdo}{\algorithmicend\ \algorithmicfor}% -\algdef{S}[FOR]{ForAll}[1]{\algorithmicforall\ ##1\ \algorithmicdo}% +\algdef{SE}[WHILE]{While}{EndWhile}[1]{\algorithmicwhile\ #1\ \algorithmicdo}{\algorithmicend\ \algorithmicwhile}% +\algdef{SE}[FOR]{For}{EndFor}[1]{\algorithmicfor\ #1\ \algorithmicdo}{\algorithmicend\ \algorithmicfor}% +\algdef{S}[FOR]{ForAll}[1]{\algorithmicforall\ #1\ \algorithmicdo}% \algdef{SE}[LOOP]{Loop}{EndLoop}{\algorithmicloop}{\algorithmicend\ \algorithmicloop}% -\algdef{SE}[REPEAT]{Repeat}{Until}{\algorithmicrepeat}[1]{\algorithmicuntil\ ##1}% -\algdef{SE}[IF]{If}{EndIf}[1]{\algorithmicif\ ##1\ \algorithmicthen}{\algorithmicend\ \algorithmicif}% -\algdef{C}[IF]{IF}{ElsIf}[1]{\algorithmicelse\ \algorithmicif\ ##1\ \algorithmicthen}% +\algdef{SE}[REPEAT]{Repeat}{Until}{\algorithmicrepeat}[1]{\algorithmicuntil\ #1}% +\algdef{SE}[IF]{If}{EndIf}[1]{\algorithmicif\ #1\ \algorithmicthen}{\algorithmicend\ \algorithmicif}% +\algdef{C}[IF]{IF}{ElsIf}[1]{\algorithmicelse\ \algorithmicif\ #1\ \algorithmicthen}% \algdef{Ce}[ELSE]{IF}{Else}{EndIf}{\algorithmicelse}% \algdef{SE}[PROCEDURE]{Procedure}{EndProcedure}% - [2]{\algorithmicprocedure\ \textproc{##1}\ifthenelse{\equal{##2}{}}{}{(##2)}}% + [2]{\algorithmicprocedure\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}% {\algorithmicend\ \algorithmicprocedure}% \algdef{SE}[FUNCTION]{Function}{EndFunction}% - [2]{\algorithmicfunction\ \textproc{##1}\ifthenelse{\equal{##2}{}}{}{(##2)}}% + [2]{\algorithmicfunction\ \textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}% {\algorithmicend\ \algorithmicfunction}% % -\ifthenelse{\boolean{ALG@noend}}% +\ifthenelse{\equal{\ALG@noend}{t}}% {% \algtext*{EndWhile}% \algtext*{EndFor}% @@ -79,32 +75,18 @@ % % *** OTHER DECLARATIONS *** % -\def\Require{\item[\algorithmicrequire]} -\def\Ensure{\item[\algorithmicensure]} -\def\Return{\algorithmicreturn{} }% +\algnewcommand\Require{\item[\algorithmicrequire]}% +\algnewcommand\Ensure{\item[\algorithmicensure]}% +\algnewcommand\Return{\algorithmicreturn{} }% +\algnewcommand\Call[2]{\textproc{#1}\ifthenelse{\equal{#2}{}}{}{(#2)}}% % % % \ifthenelse{\boolean{ALG@compatible}}% {% - \let\WHILE\While\let\ENDWHILE\EndWhile% - \let\FOR\For\let\FORALL\ForAll\let\ENDFOR\EndFor% - \let\LOOP\Loop\let\ENDLOOP\EndLoop% - \let\REPEAT\Repeat\let\UNTIL\Until% - \let\PROCEDURE\Procedure\let\ENDPROCEDURE\EndProcedure% - \let\FUNCTION\Function\let\ENDFUNCTION\EndFunction% - \let\IF\If\let\ELSIF\ElsIf\let\ELSE\Else\let\ENDIF\EndIf% - \let\REQUIRE\Require\let\ENSURE\Ensure% - \let\STATE\State\let\STATEx\Statex% - \let\COMMENT\Comment% + \ifthenelse{\equal{\ALG@noend}{t}}% + {\RequirePackage[noend]{algcompatible}}% + {\RequirePackage{algcompatible}}% }% {}% % -% -% -}% -% -% -% -\let\ALG@setpseudocode\relax% -% -- cgit v1.2.3