% algorithm2e.sty --- style file for algorithms %% Copyright 1996-2005 Christophe Fiorio % % This program may be distributed and/or modified under the % conditions of the LaTeX Project Public License, either version 1.2 % of this license or (at your option) any later version. % The latest version of this license is in % http://www.latex-project.org/lppl.txt % and version 1.2 or later is part of all distributions of LaTeX % version 1999/12/01 or later. % % This program consists of the files algorithm2e.sty and algorithm2e.tex % % Report bugs and comments to: % fiorio@lirmm.fr % % $Id: algorithm2e.sty,v 3.9 2005/10/04 12:34:52 fiorio Exp $ % % PACKAGES REQUIRED: % % - float (in contrib/supported/float) % - ifthen (in base) % - xspace (in packages/tools) % %%%%%%%%%%%%%%% Release 3.9 % % History: % % - October 04 2005 - revision 3.9 - % * ADD: - \setalcaphskip command which set the horizontal skip before Algorithm: in caption when % used in ruled algorithm. % * ADD: - SetAlgoInsideSkip command which allows to add an extra vertical space before and after % the core of the algorithm (ie: \SetAlgoInsideSkip{bigskip}) % * CHANGE: - caption, when used with figure option, is no more controlled by algorithm2e package % and so follows the exact behaviour of figures. The drawback is that you cannot change % the typo with AlTitleFnt or CapFnt. The avantage is that if you use caption package, % it works. % * FIX: - problem with numbering line and pdflatex % * FIX: - error when algorithm2e package was used with beamer and listings together % - February 12 2005 - revision 3.8 - % * FIX: - extra line with noend option. % - February 10 2005 - revision 3.7 - % * ADD: - sidecomment: different macros allowing to put text right after code % on the same line. They are defined in the same time comment macros % are defined with a star after the macro name. By default comments % are right justified but this can be change with appropriate option % in the macro. Ex: % . default: \tcc*{side comment} % . same as previous: \tcc*[r]{side comment} % . left justify: \tcc*[l]{side comment} % . here: \tcc*[h]{side comment} don't put the end of line mark before % comment (; by default) and don't end the line. % . flushed: \tcc*[f]{side comment} same as the precedent but right % justified % * ADD: - scright OPTION (default): right justified side comments (side comments % are flushed to the righr) % * ADD: - scleft OPTION: left justified side comments (side comments are % put right after the code line) % * ADD: - \SetSideCommentLeft acts as scleft option % * ADD: - \SetSideCommentRight acts as scright option % * ADD: - block like macro side text: all macro defining a block allows now % to put text right after key words by putting text into (). Done to % be used with sidecomment macros, but all text can be used. Ex: % \eIf(\tcc*[f]{then comment}){test}{then text}(else side text){else text} % * ADD: - fillcomment OPTION (default): end mark of comment is flushed to the % right so comments fill all the width of text % * ADD: - nofillcomment OPTION: end mark of comment is put right after the % comment % * ADD: - \SetNoFillComment acts as nofillcomment option. % * ADD: - \SetFillComment acts as fillcomment option. % * ADD: - dotocloa OPTION which adds an entry in the toc for the list of % algorithms. This option load package tocbibind if not already done % and so list of figures and list of tables are also added in the toc. % If you want to control which ones of the lists will be added in the % toc, please load package tocbibind before package algorithm and give % it the options you want. % * FIX: - vertical spacing for uif macro with noend option % * FIX: - all the compatibility problems between caption and other packages % * FIX: - typographical differences between list of algorithms and other lists % when in report or book % % - January 24 2005 - revision 3.6 - % * FIX: - vertical spacing and space characters at the beginning or end of % comments. % line numbers of comments not in the nlsty. % Thanks to Arnaud Giersch for his comments and suggestions. % * FIX: - Set*Sty macro: the styles defined was not protected and was modified % by surrounding context. For example KwTo in a \For{}{} was in bold AND % italic instead of just in bold. % * FIX: - line number misplacement after \Indp % % - January 21 2005 - revision 3.5 - % * ADD: - hidden numbering of the lines. Lines are auto-numbered but numbers % are shown only on lines you specify: % * linesnumberedhidden option or \linesnumberedhidden macro activate % this functionnality. % * \showln and \showlnlabel{lab} macros make the number visible on % the line. \showlnlabel{lab} allows to set a label for this line. % Thanks to Samson de Jager who makes this suggestion and provides the % macros. % * ADD: - \AlCapFnt and \SetAlCapFnt which allow to have a different font for % caption. Works like \AlFnt and \SetAlFnt and by default is the same. % * ADD: - \AlCapSkip skip length. This vertical space is added before caption % in plain ou boxed mode. It allows to change distance between text % and caption. % * FIX: - caption compatible with IEEEtran class. % * FIX: - some vertical spacing error with \uIf macros (Thanks to Arnaud Giersch) % * FIX: - Procedure and Function: lines are also numbered like algorithms % * FIX: - CommentSty was not used for Comments % % - January 10 2005 - revision 3.4 - % * FIX: - caption compatible with new release of Beamer class. % % - June 16 2004 - revision 3.3 - % * FIX: - Hyperlink references of Hyperref package works now if compiled with pdflatex % and [naturalnames] option of hyperref package is used. % * FIX: - algorithm[H] had problem in an list environment - corrected % * FIX: - interline was not so regular in nested blocks - corrected % * ADD - \Setvlineskip macro which set the vertical skip after the little horizontal % rule which closes a block in Vlined mode. By default 0.8ex % % - June 11 2004 - revision 3.2 - AUTO NUMBERING LINES !!! % * ADD: auto numbering of the lines (the so asked and so long awaiting feature) % this feature is managed by 3 options and 3 commands: % - linesnumbered option: lines of the algo are numbered except for comments and % input/output (KwInput and KwInOut) % - commentsnumbered option: makes comments be numbered % - inoutnumbered option: makes data input/output be numbered % - \nllabel{lab} labels the line so you can cite with \ref{lab} % - \linesnumbered make the following algorithms having auto-numbered lines % - \linesnotnumbered make the following algorithms having no auto-numbered lines % * Change: algo2e option renames listofalgorithm in listofalgorithme % * FIX: new solution for compatibility with color package, more robust and not tricky. % Many thanks to David Carlisle for his advices % % - June 09 2004 - revision 3.1 - % * Change: \SetKwSwitch command defines an additionnal % macro \uCase and \Case prints end % * Change: now macros SetKw* do a renewcommand if the % keyword is already defined. So you can redefine % default definition at your own convenience or % change your definition without introducing a % new macro and changing your text. % * ADD: new macro \SetKwIF which do \SetKwIf and % \SetKwIfElseIf.The following default definition has been added: % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif} % and so you get the macros; % \If \eIf \lIf \uIf \ElseIf \uElseIf \lElseIf \Else % \uElse \lElse % * ADD: new macro \SetAlgoSkip which allow to fix the % vertical skip before and after the algorithms. % Default is smallskip, do \SetAlgoSkip{} if you % don't want an extra space or \SetAlgoSkip{medskip} % or \SetAlgoSkip{bigskip} if you want bigger space. % * ADD: macro \SetKwIf defines in addition a new macro % \uElse (depending on wat name you % have given in #2 arg). % * ADD: macro \SetKwIfElseIf defines in addition a new macro % \uElse and \ugElseIf (depending on what name you % have given in #2 and #3 arg). % * Change: baseline of algorithm is now top, so two % algorithms can be put side by side. % * FIX: Compatibility with color package solved. The problem % was due to a redefinition of standard macros by color package % This solves compatibility problem with other packages % as pstcol or colortbl. % (notified by Dirk Fressmann, Antti Tarvainen and Koby Crammer) % * Fix: extra little shift to the right with boxed style % algorithm removed (notified by P. Tanovski) % * Fix: algoln option was buggy (notified bye Jiaying Shen) % * Fix: german and portuges option didn't work due to bad % typo (notified by Martin Sievers, Thorsten Vitt % and Jeronimo Pellegrini) % % - February 13 2004 - revision 3.0 - % * Major revision which makes the package independent from % float.sty, so now % - algorithm* works better, in particular can be used in % multicols environments % - (known bug corrected) % [H] works now for all sort of environment but is % handled differently for classic environment and star % environment (algorithm, figure, procedure and % function). For star environment, H acts like for % classical figure environment, so it doesn't stay here % absolutely. % - (known bug corrected) % you can use now floatflt package with algorithm % package and even with figure option. Beware that if % you want to put an algorithm inside a floatingfigure, % it cannot be floating, so [H] is required and then % figure option should not be used, since standard % figure[H] are still floating with LaTeX. % * boxruled: a new style added. Possible now since no % style no more defined by the float package. % * nocaptionofalgo: dosen't print Algorithm #: in the % caption for algorithm in ruled or algoruled style. % note: this is just documentation of a macro which was % already in the package. % - December 14 2003 - revision 2.52 - % * output message shorter % * french keyword macro \PourTous was missing for % longend option, it has been added. % * TitleofAlgo prints Function or Procedure in % corresponding environments. % % - October 27 2003 - revision 2.51 - Revision submitted to CTAN archive % * correction of a minor which make caption in procedure % and function to be blanck with pdfscreen package % (thanks to Joel Gossens for the notification) % * add two internal definition to avoid some errors when % used with Hyperref package (Hyperref package need to % define new counter macro from existing ones, and % don't do it for algorithm2e package, so we do it) % % - October 17 2003 - revision 2.50 - first revision for CTAN archive % % * add \AlFnt and \SetAlFnt{font} macros: % \AlFnt is used at the beginning of the caption and the % body of algorithm in order to define the fonts used % for typesetting algorithms. You can use it elsewhere % you want to typeset text as algorithm. For example % you can do \SetAlFnt{\small\sf} to have algorithms % typeset in small sf font. Default is nothing so % algorithm is typeset as the text of the document. % * add \AlTitleFnt{text} and \SetAlTitleFnt{font} macros: % The {Algorithm: } in the caption is typeset with % \AlTitleFnt{Algorithm:}. You can use it to have text % typeset as {Algorithm:} of captions. Default is % textbf. % Default can be redefined by \SetAlTitleFnt{font}. % * add CommentSty typo for text comment. % * add some compatibility with hyperref package (still % an error on multiply defined refs but pdf correctly % generated) % * flush text to left in order to have correct % indentation even with class as amsart which center % all figures % * add german, portugues and czech options for title of % algorithms and typo. % * add portuguese translation of predefined keywords % * add czech translation of some predefined keywords % % - December 23 2002 - revision 2.40 % * add some french keyword missing % * add function* and procedure* environment like % algorithme* environment: print in one column even % if twocolumn option is specified for the document. % * add a new macro \SetKwComment to define macro which % writes comments in the text. First argument is the % name of the macro, second is the text put before the % comment, third is the text put at the end of the % comment.Default are \tcc and \tcp % * add new options to change the way algo are numbered: % [algopart] algo are numbered within part (counter must exist) % [algochapter] algo are numbered within chapter % [algosection] algo are numbered within section % % - March 27 2002 - revision 2.39 % * Gilles Geeraerts: added the \SetKwIfElseIf to manage % if (c) % i; % else if (c) % i; % ... % else % i; % end % * Also added \gIf \gElsIf \gElse. % % - January 02 2001 - revision 2.38 % * bugs related to the caption in procedure and function % environment are corrected. % * bug related to option noend (extra vertical space added % after block command as If or For) is corrected. % * czech option language added (thanks to Libor Bus: l.bus@sh.cvut.cz). % % - October 16 2000 - revision 2.37 % * option algo2e added: change the name of environment % algorithm into algorithm2e. So allow to use the package % with some journal style which already define an algorithm % environment. % % - September 13 2000 - revision 2.36 % * option slide added: require package color % * Hack for slide class in order to have correct % margins % % - November 25 1999 - revision 2.35 % * revision number match RCS number % * Thanks to David A. Bader, a new option is added: % noend: no end keywords are printed. % % - November 19 1999 - revision 2.32 % * minor bug on longend option corrected. % % - August 26 1999 - revision 2.31 % * add an option : figure % this option makes algorithms be figure and so are numbered % as figures, have Figure as caption and are put in % the \listoffigures % % - January 21 1999 - revision 2.3 beta % add 2 new environments: procedure and function. % These environments works like algorithm environment but: % - the ruled (or algoruled) style is imperative. % - the caption now writes Procedure name.... % - the syntax of the \caption command is restricted as % follow: you MUST put a name followed by 2 braces like % this ``()''. You can put arguments inside the braces and % text after. If no argument is given, the braces will be % removed in the title. % - label now puts the name (the text before the braces in the % caption) of the procedure or function as reference (not % the number like a classic algorithm environment). % There are also two new styles : ProcNameSty and % ProcArgSty. These style are by default the same as FuncSty % and ArgSty but are used in the caption of a procedure or a % function. % % - November 28 1996 - revision 2.22 % add a new macro \SetKwInParam{arg1}{arg2}{arg3}: % it defines a macro \arg1{name}{arg} which prints name in keyword % style followed byt arg surrounded by arg2 and arg3. The main % application is to a function working as \SetKwInput to be used % in the head of the algorithm. For example % \SetKwInParam{Func}{(}{)} allows % \Func{functionname}{list of arguments} which prints: % \KwSty{functioname(}list of arguments\KwSty{)} % % % - November 27 1996 - revision 2.21 : % minor bug in length of InOut boxes fixed. % add algorithm* environment. % % - July 12 1996 - revision 2.2 : \SetArg and \SetKwArg macros removed. % % \SetArg has been removed since it never has been % documented. % \SetKwArg has been removed since \SetKw can now % take an argument in order to be consistent with % \SetKwData and \SetKwFunction macros. % % - July 04 1996 - revision 2.1 : still more LaTeX2e! Minor compatibility break % % Macros use now \newcommand instead of \def, use of \setlength, % \newsavebox, ... and other LaTeX2e specific stuff. % The compatibility break: % - \SetData becomes \SetKwData to be more consistent. So the old % \SetKwData becomes \SetKwInput % - old macros \titleofalgo, \Freetitleofalgo and \freetitleofalgo % from LaTeX209 version which did print a warning message and call % \Titleofalgo in version 2.0 are now removed! % % - March 13 1996 - revision 2.0: first official major revision. % % %%%%%%%%%%%%%% % % Known bugs: % ----------- % - no more known bugs... all are corrected! % %%%%%%%%%%%%%% % % Package options: % --------------- % - french, english, german, portuguese, czech : for the name of the algorithm, e.g. % - boxed, boxruled, ruled, algoruled, plain : layout of the algorithm % - algo2e : environment is algorithm2e instead of algorithms % and \listofalgorithmes instead of \listofalgorithms % - slide : to use when making slides % - noline,lined,vlined : how block are designed. % - linesnumbered : auto numbering of the algorithm's lines % - algopart,algochapter,algosection : algo numbering within part, chapter or section % - titlenumbered,titlenotnumbered : numbering of title set by \Titleofalgo % - figure : algorithms are figures, numbered as figures, and put in the list of figures. % - resetcount, noresetcount : start value of line numbers. % - algonl : line numbers preceded by algo number % - shortend, longend, noend : short or long end keyword as endif for e.g. % % defaults are; english,plain,resetcount,titlenotnumbered % %%%%%%%%%%%%%% % % Short summary % ------------- % % algorithm is an environment for writing algorithm in LaTeX2e % It provide macros that allow you to create differents % sorts of key words, therefore a set of predefined key word % is gived. % % IT should be used as follows % % \begin{algorithm} % ... % ... % \end{algorithm} % % % IMPORTANT : each line MUST end with \; % % Note that if you define macros outside algorithm environment they % are avaible in all the document and particulary you can use then % inside all algorithms without re-define them. % % an example: % % \begin{algorithm}[H] % \SetLine % \AlgData{this text} % \AlgResult{how to write algorithm with \LaTeX2e } % % initialization\; % \While{not at end of this document}{ % read current section\; % \eIf{understand}{ % go to next section\; % current section becomes this one\; % }{ % go back to the beginning of current section\; % } % } % \caption{How to write algorithm} % \end{algorithm} % % %%%%%%%%%%%%%% predefined english keywords % % \AlgData{input} % \AlgResult{output} % \KwIn{input} % \KwOut{output} % \KwData{input} % \KwResult{output} % \Ret{[value]} % \KwTo % a simple keyword % \Begin{block inside} % \If{condition}{Then block} % in a block % \uIf{condition}{Then block} % in a block unended % \Else{inside Else} % in a block % \eIf{condition}{Then Block}{Else block} % in blocks % \lIf{condition}{Else text} % on the same line % \lElse{Else text} % on the same line % \Switch{Condition}{Switch block} % \Case{a case}{case block} % in a block % \lCase{a case}{case text} % on the same line % \Other{otherwise block} % in a block % \lOther{otherwise block} % on the same line % \For{condition}{text loop} % in a block % \lFor{condition}{text} % on the same line % \ForEach{condition}{text loop} % in a block % \lForEach{condition}{text} % on the same line % \Repeat{End condition}{text loop} % in a block % \lRepeat{condition}{text} % on the same line % \While{condition}{text loop} % in a block % \lWhile{condition}{text loop} % on the same line % % %%%%%%%%%%%%%% predefined french keywords % % \AlgDonnees{input} % \AlgRes{input} % \Donnees{input} % \Res{input} % \Retour[valeur]} % \Deb{block inside} % \KwA % un mot clef simple % \Si{condition}{Bloc du Alors} % Dans un bloc % \uSi{condition}{Bloc du Alors} % Dans un bloc non termine % \eSi{condition}{Bloc du Alors}{Bloc du Sinon} % Dans un bloc % \lSi{condition}{texte du Alors} % sur la meme ligne % \lSinon{texte du Sinon} % sur la meme ligne % \Suivant{Condition}{Bloc de l'instruction} % \Cas{cas}{Bloc de ce cas} % Dans un bloc % \lCas{cas}{Bloc de ce cas} % sur la meme ligne % \Autres{Bloc de l'alternative} % Dans un bloc % \lAutres{Bloc de l'alternative} % sur la meme ligne % \Pour{condition}{texte de la boucle} % Dans un bloc % \lPour{condition}{texte} % sur la meme ligne % \PourCh{condition}{texte de la boucle} % Dans un bloc % \lPourCh{condition}{texte} % sur la meme ligne % \Repeter{End condition}{texte de la boucle} % Dans un bloc % \lRepeter{condition}{texte} % sur la meme ligne % \Tq{condition}{texte de la boucle} % Dans un bloc % \lTq{condition}{texte de la boucle} % sur la meme ligne % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % for more complete informations you can see algorithm2e.tex % % %%%%%%%%%%%%%%%%%%%%%%%% Identification Part %%%%%%%%%%%%%%%%%%%%%%%%%%%% % \NeedsTeXFormat{LaTeX2e}[1994/12/01] % \ProvidesPackage{algorithm2e}[2005/10/04 v3.9 algorithms environments] % % %%%%%%%%%%%%%%%%%%%%%%%%%%% Initial Code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \@makeother\*% some package redefined it as a letter (as color.sty) % % definition of commands which can be redefined in options of the package. % \newcounter{AlgoLine} \setcounter{AlgoLine}{0} % \newcommand{\listalgorithmcfname}{} \newcommand{\algorithmcfname}{} \newcommand{\algocf@typo}{} \newcommand{\@algocf@procname}{} \newcommand{\@algocf@funcname}{} \newcommand{\@algocf@titleofalgoname}{\algorithmcfname} \newcommand{\@algocf@algotitleofalgo}{% \renewcommand{\@algocf@titleofalgoname}{\algorithmcfname}} \newcommand{\@algocf@proctitleofalgo}{% \renewcommand{\@algocf@titleofalgoname}{\algocf@procname}} % \newcommand{\algocf@style}{plain} \newcommand{\@ResetCounterIfNeeded}{} \newcommand{\@titleprefix}{} % \newcommand{\algocf@numbering}[1]{\newcommand{\algocf@within}{#1}} % \newcommand{\defaultsmacros@algo}{\algocf@defaults@shortend} % \newcommand{\algocf@list}{loa} \newcommand{\algocf@float}{algocf} % \newcommand{\algocf@envname}{algorithm} \newcommand{\algocf@listofalgorithms}{listofalgorithms} % % %%%%%%%%%%%%%%%%%%%%%% Declaration of Options %%%%%%%%%%%%%%%%%%%%%%%%%%% % \RequirePackage{ifthen} % \DeclareOption{algo2e}{% \renewcommand{\algocf@envname}{algorithm2e} \renewcommand{\algocf@listofalgorithms}{listofalgorithmes} } % \newboolean{algocf@slide}\setboolean{algocf@slide}{false} \DeclareOption{slide}{% \setboolean{algocf@slide}{true}% } % \DeclareOption{figure}{ \renewcommand{\algocf@list}{lof} \renewcommand{\algocf@float}{figure} } % \DeclareOption{english}{% \renewcommand{\listalgorithmcfname}{List of Algorithms}% \renewcommand{\algorithmcfname}{Algorithm}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedure} \renewcommand{\@algocf@funcname}{Function} } % \DeclareOption{french}{% \renewcommand{\listalgorithmcfname}{Liste des Algorithmes}% \renewcommand{\algorithmcfname}{Algorithme}% \renewcommand{\algocf@typo}{\ }% \renewcommand{\@algocf@procname}{Procédure} \renewcommand{\@algocf@funcname}{Fonction} } % \DeclareOption{czech}{% \renewcommand{\listalgorithmcfname}{Seznam algoritm\v{u}}% \renewcommand{\algorithmcfname}{Algoritmus}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedura} \renewcommand{\@algocf@funcname}{Funkce} } % \DeclareOption{german}{% \renewcommand{\listalgorithmcfname}{Liste der Algorithmen}% \renewcommand{\algorithmcfname}{Algorithmus}% \renewcommand{\algocf@typo}{\ }% \renewcommand{\@algocf@procname}{Prozedur}% \renewcommand{\@algocf@funcname}{Funktion}% } % \DeclareOption{portugues}{% \renewcommand{\listalgorithmcfname}{Lista de Algoritmos}% \renewcommand{\algorithmcfname}{Algoritmo}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedimento} \renewcommand{\@algocf@funcname}{Fun\c{c}\~{a}o} } % % OPTIONs plain, boxed, ruled, algoruled & boxruled % \newcommand{\algocf@style@plain}{\renewcommand{\algocf@style}{plain}} \newcommand{\algocf@style@boxed}{\renewcommand{\algocf@style}{boxed}} \newcommand{\algocf@style@ruled}{\renewcommand{\algocf@style}{ruled}} \newcommand{\algocf@style@algoruled}{\renewcommand{\algocf@style}{algoruled}} \newcommand{\algocf@style@boxruled}{\renewcommand{\algocf@style}{boxruled}} \newcommand{\restylealgo}[1]{\csname algocf@style@#1\endcsname} \DeclareOption{plain}{\algocf@style@plain} \DeclareOption{boxed}{\algocf@style@boxed} \DeclareOption{ruled}{\algocf@style@ruled} \DeclareOption{algoruled}{\algocf@style@algoruled} \DeclareOption{boxruled}{\algocf@style@boxruled} % % OPTIONs algopart,algochapter & algosection % \DeclareOption{algopart}{\algocf@numbering{part}} %algo part numbered \DeclareOption{algochapter}{\algocf@numbering{chapter}} %algo chapter numbered \DeclareOption{algosection}{\algocf@numbering{section}} %algo section numbered % % OPTIONs resetcount & noresetcount % \DeclareOption{resetcount}{\renewcommand{\@ResetCounterIfNeeded}{\setcounter{AlgoLine}{0}}} \DeclareOption{noresetcount}{\renewcommand{\@ResetCounterIfNeeded}{}} % % OPTION linesnumbered % \newboolean{algocf@linesnumbered}\setboolean{algocf@linesnumbered}{false} \newcommand{\algocf@linesnumbered}{\relax} \DeclareOption{linesnumbered}{% \setboolean{algocf@linesnumbered}{true} \renewcommand{\algocf@linesnumbered}{\everypar={\nl}} } % % OPTION linesnumberedhidden % \DeclareOption{linesnumberedhidden}{% \setboolean{algocf@linesnumbered}{true} \renewcommand{\algocf@linesnumbered}{\everypar{\stepcounter{AlgoLine}}} } % % OPTION commentsnumbered inoutnumbered % \newboolean{algocf@commentsnumbered}\setboolean{algocf@commentsnumbered}{false} \DeclareOption{commentsnumbered}{\setboolean{algocf@commentsnumbered}{true}} \newboolean{algocf@inoutnumbered}\setboolean{algocf@inoutnumbered}{false} \DeclareOption{inoutnumbered}{\setboolean{algocf@inoutnumbered}{true}} % % OPTIONs titlenumbered & titlenotnumbered % \DeclareOption{titlenumbered}{% \renewcommand{\@titleprefix}{% \refstepcounter{algocf@float}% \AlTitleFnt{\@algocf@titleofalgoname\ \expandafter\csname the\algocf@float\endcsname\algocf@typo : }}% } % \DeclareOption{titlenotnumbered}{\renewcommand{\@titleprefix}{% \AlTitleFnt{\@algocf@titleofalgoname\algocf@typo : }}% } % % OPTIONs lined, vlined & noline % \DeclareOption{lined}{\AtBeginDocument{\SetLine}} % \SetLine \DeclareOption{vlined}{\AtBeginDocument{\SetVline}} % \SetVline \DeclareOption{noline}{\AtBeginDocument{\SetNoline}} % \Setnoline (default) % % OPTIONs algonl % line numbered with the counter of the algorithm % \DeclareOption{algonl}{\renewcommand{\theAlgoLine}{\expandafter\csname the\algocf@float\endcsname.\arabic{AlgoLine}}} % % OPTIONs longend, shotend & noend % \DeclareOption{longend}{% \renewcommand{\defaultsmacros@algo}{\algocf@defaults@longend}} \DeclareOption{shortend}{% \renewcommand{\defaultsmacros@algo}{\algocf@defaults@shortend}} \newboolean{algocf@optnoend}\setboolean{algocf@optnoend}{false} \DeclareOption{noend}{% \setboolean{algocf@optnoend}{true}% \renewcommand{\defaultsmacros@algo}{\algocf@defaults@noend}} % % OPTION dotoc % \newboolean{algocf@dotocloa}\setboolean{algocf@dotocloa}{false} \DeclareOption{dotocloa}{% \setboolean{algocf@dotocloa}{true} } % % OPTION comments % \newboolean{algocf@optfillcomment}\setboolean{algocf@optfillcomment}{true} \DeclareOption{nofillcomment}{% \setboolean{algocf@optfillcomment}{false}% } \DeclareOption{fillcomment}{% \setboolean{algocf@optfillcomment}{true}% } % % OPTION sidecommments % \newboolean{algocf@scleft}\setboolean{algocf@scleft}{false} \DeclareOption{scleft}{% \setboolean{algocf@scleft}{true}% } \DeclareOption{sright}{% default \setboolean{algocf@scleft}{false}% } % % %%%%%%%%%%%%%%%%%%%%%%% Execution of Options %%%%%%%%%%%%%%%%%%%%%%%%%%%% % \ExecuteOptions{english,plain,resetcount,titlenotnumbered} % \ProcessOptions % \@algocf@algotitleofalgo % fix name for \Titleofalgo to \algorithmcfname by default % %%%%%%%%%%%%%%%%%%%%%%%%%% Package Loading %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %\RequirePackage{float}[2001/11/08] % \RequirePackage{xspace} % \ifthenelse{\boolean{algocf@slide}}{\RequirePackage{color}}{} % \AtEndOfPackage{% \ifthenelse{\boolean{algocf@dotocloa}}{% \renewcommand{\listofalgorithmes}{\tocfile{\listalgorithmcfname}{loa}}% }{\relax} } % if loa in toc required, load tocbibind package if not already done. \ifthenelse{\boolean{algocf@dotocloa}}{% \ifx\@tocextra\undefined% \RequirePackage{tocbibind} \fi% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%% Main Part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \newcommand{\algocf@name}{algorithm2e} \newcommand{\algocf@date}{october 04 2005} \newcommand{\algocf@version}{Release 3.9} \newcommand{\algocf@id}{\algocf@version\space -- \algocf@date\space --} \typeout{********************************************************^^JPackage `\algocf@name'\space\algocf@id^^J% - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% subscribe by emailing sympa@lirmm.fr with 'subscribe '^^J% - Author: Christophe Fiorio (fiorio@lirmm.fr)^^J********************************************************} %% %% %% %% %% %% %%%% hyperref compatibility tricks: Hyperref package defines H counters from % standard counters (i.e \theHpage from \thepage) and check some particular % counters of some packages, unfortunately it doesn't do the same for % algorithm2e package but act as Hcounter was defined. To avoid errors we % defined \theHalgocf ourself %%%% % \@ifundefined{theHalgocf}{\def\theHalgocf{\thealgocf}}{}% % \@ifundefined{theHAlgoLine}{\def\theHAlgoLine{\theAlgoLine}}{}% % \@ifundefined{theHalgocf}{\def\theHalgocf{\thealgocf}}{}% % \@ifundefined{theHAlgoLine}{\def\theHAlgoLine{\thealgocf}}{}% % \@ifundefined{toclevel@algocf}{\def\toclevel@algocf{0}}{}% %% %% %% \newcommand{\@defaultskiptotal}{0.5em}%\Setnlskip{0.5em} \newskip\skiptotal\skiptotal=0.5em%\Setnlskip{0.5em} \newskip\skiprule \newskip\skiphlne \newskip\skiptext \newskip\skiplength \newskip\algomargin \newskip\skipalgocfslide\skipalgocfslide=1em \newdimen\algowidth \newdimen\inoutsize \newdimen\inoutline % \newcommand{\@algoskip}{\smallskip}% \newcommand{\SetAlgoSkip}[1]{\renewcommand{\@algoskip}{\csname#1\endcsname}}% \newcommand{\@algoinsideskip}{\relax}% \newcommand{\SetAlgoInsideSkip}[1]{\renewcommand{\@algoinsideskip}{\csname#1\endcsname}}% % \newsavebox{\algocf@inoutbox} \newsavebox{\algocf@inputbox} %% %% \newcommand{\arg@e}{} \newcommand{\arg@space}{\ } \newcommand{\BlankLine}{\vskip 1ex} %% \newcommand{\vespace}{1ex} \newcommand{\SetInd}[2]{% \skiprule=#1% \skiptext=#2% \skiplength=\skiptext\advance\skiplength by \skiprule\advance\skiplength by 0.4pt} \SetInd{0.5em}{1em} \algomargin=\leftskip\advance\algomargin by \parindent \newcommand{\incmargin}[1]{\advance\algomargin by #1} \newcommand{\decmargin}[1]{\advance\algomargin by -#1} \newcommand{\Setnlskip}[1]{% \renewcommand{\@defaultskiptotal}{#1}% \setlength{\skiptotal}{#1}} \newcommand{\setnlskip}[1]{\Setnlskip{#1}}%kept for compatibility issue %% \newskip\AlCapSkip\AlCapSkip=0ex \newskip\AlCapHSkip\AlCapSkip=0ex \newcommand{\setalcapskip}[1]{\setlength{\AlCapSkip}{#1}} \newcommand{\setalcaphskip}[1]{\setlength{\AlCapHSkip}{#1}} \setalcaphskip{.5\algomargin} %% %% \newcommand{\Indentp}[1]{\advance\leftskip by #1} \newcommand{\Indp}{\advance\leftskip by 1em} \newcommand{\Indpp}{\advance\leftskip by 0.5em} \newcommand{\Indm}{\advance\leftskip by -1em} \newcommand{\Indmm}{\advance\leftskip by -0.5em} %% %% %% Line Numbering %% %% % number line style \newcommand{\nlSty}[1]{\textnormal{\textbf{#1}}}% default definition \newcommand{\Setnlsty}[3]{\renewcommand{\nlSty}[1]{\textnormal{\csname#1\endcsname{#2##1#3}}}} % % \newcommand{\algocf@nlhlabel}[2]{% \immediate\write\@auxout{% \string\newlabel{#1}{% {#2}% current label {\thepage}% page {}% current label string % {AlgoLine\thealgocfline.\theAlgoLine}% current Href {AlgoLine\thealgocfline.\theAlgoLine}% current Href {}% }% }% } % % nl definitions % \newcommand{\nl}{% \@ifundefined{href}{% if not hyperref then do a simple refstepcounter \refstepcounter{AlgoLine}% }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href % \stepcounter{AlgoLine}\Hy@raisedlink{\hyper@anchorstart{AlgoLine\thealgocfline.\theAlgoLine}\hyper@anchorend}% \stepcounter{AlgoLine}\Hy@raisedlink{\hyper@anchorstart{AlgoLine\thealgocfline.\theAlgoLine}\hyper@anchorend}% }% now we can do the line numbering \strut\vadjust{\kern-\dp\strutbox\vtop to \dp\strutbox{% \baselineskip\dp\strutbox\vss\llap{\scriptsize{\nlSty{\theAlgoLine}\hskip\skiptotal}}\null}}% }% \newcommand{\nllabel}[1]{% \@ifundefined{href}{\label{#1}}{\algocf@nlhlabel{#1}{\theAlgoLine}}}% % \newcommand{\enl}{;% \@ifundefined{href}{% if not hyperref then do a simple refstepcounter \refstepcounter{AlgoLine}% }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href % \stepcounter{AlgoLine}\Hy@raisedlink{\hyper@anchorstart{AlgoLine\thealgocfline.\theAlgoLine}\hyper@anchorend}% \stepcounter{AlgoLine}\Hy@raisedlink{\hyper@anchorstart{AlgoLine\thealgocfline.\theAlgoLine}\hyper@anchorend}% }% now we can do the line numbering \hfill\rlap{% \scriptsize{\nlSty{\theAlgoLine}}}\par} \newcommand{\nlset}[1]{% \hskip 0pt\llap{% \scriptsize{\nlSty{#1}}\hskip\skiptotal}\ignorespaces} % % lnl definitions % \@ifundefined{href}{% if not hyperref \newcommand{\lnl}[1]{\nl\label{#1}\ignorespaces}% }{% else hyperref \newcommand{\lnl}[1]{\nl\algocf@nlhlabel{#1}{\theAlgoLine}\ignorespaces}% } % % nlset % \@ifundefined{href}{% \newcommand{\lnlset}[2]{\nlset{#2}\protected@edef\@currentlabel{#2}\label{#1}}% }{%else hyperref \newcommand{\lnlset}[2]{\nlset{#2}% \Hy@raisedlink{\hyper@anchorstart{AlgoLine.#2}\hyper@anchorend}\algocf@nlhlabel{#1}{#2}% \ignorespaces% }% } % % set char put at end of each line % \newcommand{\algocf@endline}{\string;} \newcommand{\SetEndCharOfAlgoLine}[1]{\renewcommand{\algocf@endline}{#1}} % % end of line definition % \newcommand{\@endalgoln}{\algocf@endline\par}% default definition: printsemicolon \newcommand{\dontprintsemicolon}{\renewcommand{\@endalgoln}{\par}} \newcommand{\printsemicolon}{\renewcommand{\@endalgoln}{\algocf@endline\par}} % % line numbering % \newcommand{\linesnumbered}{\setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\everypar={\nl}}} \newcommand{\linesnotnumbered}{% \setboolean{algocf@linesnumbered}{false}% \renewcommand{\algocf@linesnumbered}{\relax}% } % \newcommand{\linesnumberedhidden}{% \setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\everypar{\stepcounter{AlgoLine}}}} \newcommand{\showln}{\nlset{\theAlgoLine}\ignorespaces} % display the line number on this line (without labelling) \newcommand{\showlnlabel}[1]{\lnlset{#1}{\theAlgoLine}\ignorespaces} % display the line number and label this line % %% % %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Styling text commands % \newcommand{\AlTitleFnt}[1]{\textbf{#1}\unskip}% default definition \newcommand{\SetAlTitleFnt}[1]{\renewcommand{\AlTitleFnt}[1]{\csname#1\endcsname{##1}\unskip}}% \newcommand{\AlFnt}{\relax}% default definition \newcommand{\SetAlFnt}[1]{\renewcommand{\AlFnt}{#1}}% \newcommand{\AlCapFnt}{\AlFnt{}}% default definition \newcommand{\SetAlCapFnt}[1]{\renewcommand{\AlCapFnt}{#1}}% \newcommand{\KwSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition \newcommand{\SetKwSty}[1]{\renewcommand{\KwSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\ArgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetArgSty{emph} \newcommand{\SetArgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\FuncSty}[1]{\textnormal{\texttt{#1}}\unskip}%\SetFuncSty{texttt} \newcommand{\SetFuncSty}[1]{\renewcommand{\FuncSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\DataSty}[1]{\textnormal{\textsf{#1}}\unskip}%%\SetDataSty{textsf} \newcommand{\SetDataSty}[1]{\renewcommand{\DataSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\CommentSty}[1]{\textnormal{\texttt{#1}}\unskip}%%\SetDataSty{texttt} \newcommand{\SetCommentSty}[1]{\renewcommand{\CommentSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\TitleSty}[1]{#1\unskip}%\SetTitleSty{}{} \newcommand{\SetTitleSty}[2]{\renewcommand{\TitleSty}[1]{% \csname#1\endcsname{\csname#2\endcsname##1}}\unskip} % %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Block basic commands % \newcommand{\al@push}[1]{\advance\skiptotal by #1\moveright #1} \newcommand{\al@pop}[1]{\advance\skiptotal by -#1} \newcommand{\al@addskiptotal}{\advance\skiptotal by 0.4pt\advance\hsize by -0.4pt} % 0.4 pt=width of \vrule \newcommand{\al@subskiptotal}{\advance\skiptotal by -0.4pt\advance\hsize by 0.4pt} % 0.4 pt=width of \vrule % \skiphlne=.8ex% \newcommand{\Setvlineskip}[1]{\skiphlne=#1} \newcommand{\V@line}[1]{% no vskip in between boxes but a strut to separate them, \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it \al@push{\skiprule}% move to the right before the vertical rule \hbox{\vrule% \vtop{\al@push{\skiptext}%move the right after the rule \vtop{\al@addskiptotal\advance\hsize by -\skiplength #1}\Hlne}}\vskip\skiphlne% inside the block \al@pop{\skiprule}%\al@subskiptotal% restore indentation \nointerlineskip}% no vskip after % \newcommand{\V@sline}[1]{% no vskip in between boxes but a strut to separate them, \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it \al@push{\skiprule}% move to the right before the vertical rule \hbox{\vrule% the vertical rule \vtop{\al@push{\skiptext}%move the right after the rule \vtop{\al@addskiptotal\advance\hsize by -\skiplength #1}}}% inside the block \al@pop{\skiprule}}% restore indentation %\nointerlineskip}% no vskip after % \newcommand{\H@lne}{\hrule height 0.4pt depth 0pt width .5em} % \newcommand{\No@line}[1]{% no vskip in between boxes but a strut to separate them, \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it \al@push{\skiprule}% \hbox{% \vtop{\al@push{\skiptext}% \vtop{\advance\hsize by -\skiplength #1}}}% inside the block \al@pop{\skiprule}}% %\nointerlineskip}% no vskip after % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% default=NoLine % \newcommand{\a@@block}[2]{\No@line{##1}\KwSty{##2}\par} \newcommand{\a@block}[2]{\a@@block{#1}{#2}} % this to be redefined as a@group in % case of noend option \newcommand{\a@group}[1]{\No@line{##1}} \newcommand{\Hlne}{} % % \newcommand{\SetNoline}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline \renewcommand{\a@@block}[2]{\No@line{##1}\KwSty{##2}\strut\par}% \renewcommand{\a@group}[1]{\No@line{##1}} \renewcommand{\Hlne}{}} % \newcommand{\SetVline}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Vline \renewcommand{\a@@block}[2]{\V@line{##1}}% \renewcommand{\a@group}[1]{\V@sline{##1}\strut\ignorespaces} \renewcommand{\Hlne}{\H@lne}} % \newcommand{\SetLine}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Line \renewcommand{\a@@block}[2]{\strut\V@sline{##1}\KwSty{##2}\strut\par}% no skip after a block so garantie at least a line \renewcommand{\a@group}[1]{\V@sline{##1}\strut\ignorespaces} \renewcommand{\Hlne}{}} % \newcommand{\SetNothing}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline \renewcommand{\a@@block}[2]{\No@line{##1}\par}% %\long \renewcommand{\a@group}[1]{\No@line{##1}} \renewcommand{\Hlne}{}} % %% %% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % ``Input :'''s like command % %%% % text staying at the right of the longer keyword of KwInOut commands % (text of KwInOut commands are all vertically aligned) % \newcommand{\algocf@newinout}{\par\parindent=\wd\algocf@inoutbox}% to put right indentation after a \\ in the KwInOut \newcommand{\SetKwInOut}[2]{% \sbox\algocf@inoutbox{\hbox{\KwSty{#2}\algocf@typo:\ }}% \expandafter\ifx\csname InOutSizeDefined\endcsname\relax% if first time used \newcommand\InOutSizeDefined{}\setlength{\inoutsize}{\wd\algocf@inoutbox}% \else% else keep the larger dimension \ifdim\wd\algocf@inoutbox>\inoutsize\setlength{\inoutsize}{\wd\algocf@inoutbox}\fi% \fi% the dimension of the box is now defined. \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\everypar={\relax}} {\let\\\algocf@newinout\hangindent=\wd\algocf@inoutbox\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2}\hfill:\mbox{\ }}##1\par} \algocf@linesnumbered% reset the numbering of the lines }}% % %% allow to ajust the skip size of InOut %% \newcommand{\ResetInOut}[1]{% \sbox\algocf@inoutbox{\hbox{\KwSty{#1}\algocf@typo:\ }}% \setlength{\inoutsize}{\wd\algocf@inoutbox}% } % % %%% % text staying at the right of the keyword. % \newcommand{\algocf@newinput}{\par\parindent=\wd\algocf@inputbox}% to put right indentation after a \\ in the KwInput \newcommand{\SetKwInput}[2]{% \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% \sbox\algocf@inputbox{\hbox{\KwSty{#2}\algocf@typo: }}% \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\everypar={\relax}}% {\let\\\algocf@newinput\hangindent=\wd\algocf@inputbox\hangafter=1\unhbox\algocf@inputbox##1\par}% \algocf@linesnumbered% reset the numbering of the lines }}% \newcommand{\SetKwData}[2]{% \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% \expandafter\algocf@mkcmd\csname @#1\endcsname[1]{\DataSty{#2(}\ArgSty{##1}\DataSty{)}}% \expandafter\algocf@mkcmd\csname#1\endcsname{% \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Comments macros % %%%% % comment in the text, first argument is the name of the macro, second is % the text put before the comment, third is the text put at the end of the % comment. % % first side comment justification \newcommand{\SetSideCommentLeft}{\setboolean{algocf@scleft}{true}} \newcommand{\SetSideCommentRight}{\setboolean{algocf@scleft}{false}} \newcommand{\SetNoFillComment}{\setboolean{algocf@optfillcomment}{false}} \newcommand{\SetFillComment}{\setboolean{algocf@optfillcomment}{true}} % % next comment and side comment % \newcommand{\algocf@endmarkcomment}{\relax}% \newcommand{\algocf@fillcomment}{% \ifthenelse{\boolean{algocf@optfillcomment}}{\hfill}{\relax}}% % \newcommand{\algocf@startcomment}{% \hangindent=\wd\algocf@inputbox\hangafter=1\usebox\algocf@inputbox}% \newcommand{\algocf@endcomment}{\algocf@fillcomment\algocf@endmarkcomment\ignorespaces\par}% \newcommand{\algocf@endstartcomment}{\algocf@endcomment\algocf@startcomment\ignorespaces}% % \newboolean{algocf@sidecomment}% \newboolean{algocf@altsidecomment}\setboolean{algocf@altsidecomment}{false}% \newcommand{\algocf@scpar}{\ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\par}}% \newcommand{\algocf@sclfill}{\ifthenelse{\boolean{algocf@scleft}}{\algocf@fillcomment}{\relax}}% \newcommand{\algocf@scrfill}{\ifthenelse{\boolean{algocf@scleft}}{\relax}{\hfill}} \newcommand{\algocf@startsidecomment}{\usebox\algocf@inputbox}% \newcommand{\algocf@endsidecomment}{\algocf@endmarkcomment\algocf@scpar}% \newcommand{\algocf@endstartsidecomment}{% \algocf@sclfill\algocf@endsidecomment% \algocf@scrfill\algocf@startsidecomment\ignorespaces}% % \newcommand{\SetKwComment}[3]{% % newcommand or renewcommand ? \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% %%% comment definition \expandafter\algocf@mkcmd\csname algocf@#1\endcsname[1]{% \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\everypar={\relax}}% {\renewcommand{\algocf@endmarkcomment}{#3}% \let\\\algocf@endstartcomment% \algocf@startcomment\CommentSty{% \strut\ignorespaces##1\strut\algocf@fillcomment#3}\par}% \algocf@linesnumbered% reset the numbering of the lines }% %%% side comment definitions % option or not? \expandafter\algocf@mkcmd\csname algocf@#1@star\endcsname{% \@ifnextchar [{\csname algocf@#1@staropt\endcsname}{\csname algocf@#1@sidecomment\endcsname}% }% % manage option \expandafter\def\csname algocf@#1@staropt\endcsname[##1]##2{% \ifthenelse{\boolean{algocf@scleft}}{\setboolean{algocf@sidecomment}{true}}{\setboolean{algocf@sidecomment}{false}}% \ifx##1h\setboolean{algocf@altsidecomment}{true}\SetSideCommentLeft\fi% \ifx##1f\setboolean{algocf@altsidecomment}{true}\SetSideCommentRight\fi% \ifx##1l\setboolean{algocf@altsidecomment}{false}\SetSideCommentLeft\fi% \ifx##1r\setboolean{algocf@altsidecomment}{false}\SetSideCommentRight\fi% \csname algocf@#1@sidecomment\endcsname{##2}% call sidecomment \ifthenelse{\boolean{algocf@sidecomment}}{\setboolean{algocf@scleft}{true}}{\setboolean{algocf@scleft}{false}}% \setboolean{algocf@altsidecomment}{false}% }% % side comment \expandafter\algocf@mkcmd\csname algocf@#1@sidecomment\endcsname[1]{% \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\everypar={\relax}}% {% \renewcommand{\algocf@endmarkcomment}{#3}% \let\\\algocf@endstartsidecomment% % here is the comment \ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\algocf@endline\ }% \algocf@scrfill\algocf@startsidecomment\CommentSty{% \strut\ignorespaces##1\strut\algocf@sclfill#3}\algocf@scpar% }% \algocf@linesnumbered% reset the numbering of the lines } \expandafter\algocf@mkcmd\csname#1\endcsname{\@ifstar{\csname algocf@#1@star\endcsname}{\csname algocf@#1\endcsname}} }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Kw % \newcommand{\SetKw}[2]{% \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% \expandafter\algocf@mkcmd\csname @#1\endcsname[1]{\KwSty{#2} \ArgSty{##1}}% \expandafter\algocf@mkcmd\csname#1\endcsname{% \@ifnextchar\bgroup{\csname @#1\endcsname}{\KwSty{#2}\xspace}}% } % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwFunction % \newcommand{\SetKwFunction}[2]{% \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% \expandafter\algocf@mkcmd\csname @#1\endcsname[1]{\FuncSty{#2(}\ArgSty{##1}\FuncSty{)}}% \expandafter\algocf@mkcmd\csname#1\endcsname{% \@ifnextchar\bgroup{\csname @#1\endcsname}{\FuncSty{#2}\xspace}}% } % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwBlock % \newcommand{\SetKwBlock}[3]{% \@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% % side text or not? \expandafter\def\csname#1\endcsname{ %Begin \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}} % with side text \expandafter\def\csname algocf@#1opt\endcsname(##1)##2{% \Begin(){} \KwSty{#2} ##1\a@group{##2}\KwSty{#3}% \@ifnextchar({\csname algocf@#1end\endcsname}{\par}}% % without side text at the beginning \expandafter\algocf@mkcmd\csname algocf@#1\endcsname[1]{% \Begin{} \KwSty{#2}\a@group{##1}\KwSty{#3}\@ifnextchar({\csname algocf@#1end\endcsname}{\par}}% % side text at the end \expandafter\def\csname algocf@#1end\endcsname(##1){% \Begin{} \ ##1\par}% } % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % For Switch % \newcommand{\SetKwSwitch}[8]{% #1=\Switch #2=\Case #3=\Other #4=swicth #5=case #6=do #7=otherwise #8=endsw %%%% Switch \@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% % side text or not? \expandafter\def\csname#1\endcsname{ %Switch \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}} % with side text \expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \Switch(){}{} \KwSty{#4} \ArgSty{##2} \KwSty{#5} ##1\a@block{##3}{#8}}% % without side text \expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \Switch{}{} \KwSty{#4} \ArgSty{##1} \KwSty{#5}\a@block{##2}{#8}}% % side text at the end \expandafter\def\csname algocf@#1end\endcsname(##1){% \Switch{}{}() } %%%% Case \@ifundefined{algocf@#2}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% % side text or not? \expandafter\def\csname#2\endcsname{ %Case \@ifnextchar({\csname algocf@#2opt\endcsname}{\csname algocf@#2\endcsname}} \expandafter\def\csname u#2\endcsname{ %uCase \@ifnextchar({\csname algocf@u#2opt\endcsname}{\csname algocf@u#2\endcsname}} \expandafter\def\csname l#2\endcsname{ %lCase \@ifnextchar({\csname algocf@l#2opt\endcsname}{\csname algocf@l#2\endcsname}} % with side text \expandafter\def\csname algocf@#2opt\endcsname(##1)##2##3{% \Case(){}{} \KwSty{#6} \ArgSty{##2} ##1\a@block{##3}{#8}}% \expandafter\def\csname algocf@u#2opt\endcsname(##1)##2##3{% \uCase(){}{} \KwSty{#6} \ArgSty{##2} ##1\a@group{##3}}% \expandafter\def\csname algocf@l#2opt\endcsname(##1)##2##3{% \lCase(){}{} \KwSty{#6} \ArgSty{##2} ##3\algocf@endline\ ##1\par}% % without side text \expandafter\algocf@mkcmd\csname algocf@#2\endcsname[2]{% \Case{}{} \KwSty{#6} \ArgSty{##1}\a@block{##2}{#8}}% \expandafter\algocf@mkcmd\csname algocf@u#2\endcsname[2]{% \uCase{}{} \KwSty{#6} \ArgSty{##1}\a@group{##2}}% \expandafter\algocf@mkcmd\csname algocf@l#2\endcsname[2]{% \lCase{}{} \KwSty{#6} \ArgSty{##1} ##2}% %%%% Other \@ifundefined{algocf@#3}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% % side text or not? \expandafter\def\csname#3\endcsname{ %Other \@ifnextchar({\csname algocf@#3opt\endcsname}{\csname algocf@#3\endcsname}} \expandafter\def\csname l#3\endcsname{ %Other \@ifnextchar({\csname algocf@l#3opt\endcsname}{\csname algocf@l#3\endcsname}} % with side text \expandafter\def\csname algocf@#3opt\endcsname(##1)##2{% \Other(){}{} \KwSty{#7} ##1\a@block{##2}{#8}}% \expandafter\def\csname algocf@l#3opt\endcsname(##1)##2{% \Other(){}{} \KwSty{#7} ##2\algocf@endline\ ##1\par}% % without side text \expandafter\algocf@mkcmd\csname algocf@#3\endcsname[1]{% default \KwSty{#7}\a@block{##1}{#8}}% \expandafter\algocf@mkcmd\csname algocf@l#3\endcsname[1]{% ldefault \KwSty{#7} ##1}% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % If macros % \newcommand{\SetKwIF}[8]{% #1=\If #2=\ElseIf #3=\Else #4=if #5=then #6=elseif si #7=else #8=endif % % common text \@ifundefined{#1@ifthen}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% \expandafter\algocf@mkcmd\csname #1@ifthen\endcsname[1]{% \KwSty{#4} \ArgSty{##1} \KwSty{#5}}% \expandafter\algocf@mkcmd\csname #1@endif\endcsname[1]{\a@block{##1}{#8}}% \expandafter\algocf@mkcmd\csname #1@noend\endcsname[1]{\a@group{##1}}% \expandafter\algocf@mkcmd\csname #1@else\endcsname[1]{\a@group{##1}\KwSty{#7}}% \@ifundefined{#2@elseif}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% \expandafter\algocf@mkcmd\csname #2@elseif\endcsname[1]{% \KwSty{#6} \ArgSty{##1} \KwSty{#5}}% \@ifundefined{#3@else}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% \expandafter\algocf@mkcmd\csname #3@else\endcsname{\KwSty{#7}}% %%%% If then { } endif % \@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% % side text or not? \expandafter\def\csname#1\endcsname{% \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}} % with side text \expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \If(){}{} \csname #1@ifthen\endcsname{##2} ##1\csname #1@endif\endcsname{##3}}% % without side text \expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \If{}{} \csname #1@ifthen\endcsname{##1}\csname #1@endif\endcsname{##2}}% % %%%% If then {} else {} endif % % side text or not? \expandafter\def\csname e#1\endcsname{% \@ifnextchar({\csname algocf@e#1opt\endcsname}{\csname algocf@e#1optif\endcsname}} % with side text after if \expandafter\def\csname algocf@e#1opt\endcsname(##1)##2##3{% \eIf() \csname #1@ifthen\endcsname{##2} ##1\csname #1@else\endcsname{##3}% \csname algocf@e#1opte\endcsname} % without side text after if \expandafter\def\csname algocf@e#1optif\endcsname##1##2{% \eIf() \csname #1@ifthen\endcsname{##1}\csname #1@else\endcsname{##2}% \csname algocf@e#1opte\endcsname}% % side text after else or not ? \expandafter\def\csname algocf@e#1opte\endcsname{% \@ifnextchar({\csname algocf@e#1optopt\endcsname}{\csname algocf@e#1\endcsname}} % else with a side text \expandafter\def\csname algocf@e#1optopt\endcsname(##1)##2{% ##1\csname #1@endif\endcsname{##2}} % else without side text \expandafter\algocf@mkcmd\csname algocf@e#1\endcsname[1]{% \csname #1@endif\endcsname{##1}} % %%%% If then % % side text or not? \expandafter\def\csname l#1\endcsname{% lif \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}} \expandafter\def\csname u#1\endcsname{% uif \@ifnextchar({\csname algocf@u#1opt\endcsname}{\csname algocf@u#1\endcsname}} % with side text \expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lIf(){}{} \csname #1@ifthen\endcsname{##2} ##3\algocf@endline\ ##1\par}% \expandafter\def\csname algocf@u#1opt\endcsname(##1)##2##3{% \uIf(){}{} \csname #1@ifthen\endcsname{##2} ##1\csname#1@noend\endcsname{##3}}% % without side text \expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lIf{}{} \csname #1@ifthen\endcsname{##1} ##2}% \expandafter\algocf@mkcmd\csname algocf@u#1\endcsname[2]{% \uIf{}{} \csname #1@ifthen\endcsname{##1}\csname#1@noend\endcsname{##2}}% % %%%% ElseIf {} endif % \@ifundefined{algocf@#2}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% % side text or not? \expandafter\def\csname#2\endcsname{% ElseIf \@ifnextchar({\csname algocf@#2opt\endcsname}{\csname algocf@#2\endcsname}} % with side text \expandafter\def\csname algocf@#2opt\endcsname(##1)##2##3{% \ElseIf(){}{} \csname #2@elseif\endcsname{##2} ##1\csname #1@endif\endcsname{##3}} % without side text \expandafter\algocf@mkcmd\csname algocf@#2\endcsname[2]{% \ElseIf{}{} \csname #2@elseif\endcsname{##1}\csname #1@endif\endcsname{##2}} % %%%% ElseIf % % side text or not? \expandafter\def\csname l#2\endcsname{% lElseIf \@ifnextchar({\csname algocf@l#2opt\endcsname}{\csname algocf@l#2\endcsname}} \expandafter\def\csname u#2\endcsname{% uElseIf \@ifnextchar({\csname algocf@u#2opt\endcsname}{\csname algocf@u#2\endcsname}} % with side text \expandafter\def\csname algocf@l#2opt\endcsname(##1)##2##3{% \lElseIf(){}{} \csname #2@elseif\endcsname{##2} ##3\algocf@endline\ ##1\par} \expandafter\def\csname algocf@u#2opt\endcsname(##1)##2##3{% \uElseIf(){}{} \csname #2@elseif\endcsname{##2} ##1\csname #1@noend\endcsname{##3}} % without side text \expandafter\algocf@mkcmd\csname algocf@l#2\endcsname[2]{% \lElseIf{}{} \csname #2@elseif\endcsname{##1} ##2}% \expandafter\algocf@mkcmd\csname algocf@u#2\endcsname[2]{% \uElseIf{}{} \csname #2@elseif\endcsname{##1}\csname #1@noend\endcsname{##2}} % %%%% Else {} endif % \@ifundefined{algocf@#3}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% % side text or not? \expandafter\def\csname#3\endcsname{% Else \@ifnextchar({\csname algocf@#3opt\endcsname}{\csname algocf@#3\endcsname}} % with side text \expandafter\def\csname algocf@#3opt\endcsname(##1)##2{% \Else(){} \csname #3@else\endcsname\ ##1\csname #1@endif\endcsname{##2}} % without side text \expandafter\algocf@mkcmd\csname algocf@#3\endcsname[1]{% \Else{} \csname #3@else\endcsname\csname #1@endif\endcsname{##1}}% % %%%% Else % % side text or not? \expandafter\def\csname l#3\endcsname{% lElse \@ifnextchar({\csname algocf@l#3opt\endcsname}{\csname algocf@l#3\endcsname}} \expandafter\def\csname u#3\endcsname{% uElse \@ifnextchar({\csname algocf@u#3opt\endcsname}{\csname algocf@u#3\endcsname}} % with side text \expandafter\def\csname algocf@l#3opt\endcsname(##1)##2{% \lElse(){} \csname #3@else\endcsname\ ##2\algocf@endline\ ##1\par} \expandafter\def\csname algocf@#3opt\endcsname(##1)##2{% \uElse(){} \csname #3@else\endcsname\ ##1\csname #1@noend\endcsname{##2}} % without side text \expandafter\algocf@mkcmd\csname algocf@l#3\endcsname[1]{% \lElse{} \csname #3@else\endcsname\ ##1}% \expandafter\algocf@mkcmd\csname algocf@u#3\endcsname[1]{% \uElse{} \csname #3@else\endcsname\csname #1@noend\endcsname{##1}}% } % % old for backward compatibility \newcommand{\SetKwIf}[6]{% \SetKwIF{#1}{cf@dumb}{#2}{#3}{#4}{cf@dumb}{#5}{#6}% \typeout{**** WARNING: SetKwIf deprecated: use SetKwIF instead*****^^J}% }% \newcommand{\SetKwIfElseIf}[8]{% \SetKwIF{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}% \typeout{**** WARNING: SetKwIfElseIf deprecated: use SetKwIF instead*****^^J}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % For macros % \newcommand{\SetKwFor}[4]{% \@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% % side text or not? \expandafter\def\csname#1\endcsname{ %For \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}} \expandafter\def\csname l#1\endcsname{ %For \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}} % with side text \expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \For(){}{} \KwSty{#2} \ArgSty{##2} \KwSty{#3} ##1\a@block{##3}{#4}}% \expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lFor(){}{} \KwSty{#2} \ArgSty{##2} \KwSty{#3} ##3\algocf@endline\ ##1\par} % without side text \expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \For{}{} \KwSty{#2} \ArgSty{##1} \KwSty{#3}\a@block{##2}{#4}}% \expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lFor{}{} \KwSty{#2} \ArgSty{##1} \KwSty{#3} ##2}% } % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Repeat macros % \newcommand{\SetKwRepeat}[3]{% \@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% % side text or not? \expandafter\def\csname#1\endcsname{ %Repeat \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}} \expandafter\def\csname l#1\endcsname{ %lRepeat \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}} % with side text \expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \Repeat(){}{} \KwSty{#2} ##1\a@group{##3}\KwSty{#3} \ArgSty{##2}% \@ifnextchar({\csname algocf@#1optopt\endcsname}{\@endalgoln}% }% \expandafter\def\csname algocf@#1optopt\endcsname(##1){% \Repeat(){}{}() ##1\@endalgoln}% \expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lRepeat(){}{} \KwSty{#2} ##3 \KwSty{#3} \ArgSty{##2}\algocf@endline\ ##1\par}% % without side text \expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \Repeat{}{} \KwSty{#2}\a@group{##2}\KwSty{#3} \ArgSty{##1} \@ifnextchar({\csname algocf@#1optopt\endcsname}{\@endalgoln}% }% \expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lRepeat{}{} \KwSty{#2} ##2 \KwSty{#3} \ArgSty{##1}}% } % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% Environments definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% %% Caption management %% % for the following macros: % #1 is given by caption and is equal to fnum@algocf % #2 is the text given in argument by the user in the \caption macro % %%%%% text of caption \newcommand{\algocf@captiontext}[2]{#1\algocf@typo: \AlCapFnt{}#2} % text of caption % %%%%% default caption of algorithm: used if no specific style caption is defined \newcommand{\algocf@makecaption}[2]{% \addtolength{\hsize}{\algomargin}% \sbox\@tempboxa{\algocf@captiontext{#1}{#2}}% \ifdim\wd\@tempboxa >\hsize% % if caption is longer than a line \hskip .5\algomargin% \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}% then caption is not centered \else% \global\@minipagefalse% \hbox to\hsize{\hfil\box\@tempboxa\hfil}% else caption is centered \fi% \addtolength{\hsize}{-\algomargin}% } % \newsavebox\algocf@capbox \newcommand{\algocf@makecaption@plain}[2]{% \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}}% \newcommand{\algocf@makecaption@boxed}[2]{% \addtolength{\hsize}{-\algomargin}% \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}} \addtolength{\hsize}{\algomargin}% }% % \newcommand{\algocf@makecaption@algoruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% \newcommand{\algocf@makecaption@boxruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% \newcommand{\algocf@makecaption@ruled}[2]{% \global\sbox\algocf@capbox{\hskip\AlCapHSkip% .5\algomargin% \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}}% then caption is not centered } % \newcommand{\algocf@caption@plain}{\vskip\AlCapSkip\box\algocf@capbox}% \newcommand{\algocf@caption@boxed}{\vskip\AlCapSkip\box\algocf@capbox}% \newcommand{\algocf@caption@ruled}{\box\algocf@capbox\kern2pt\hrule height.8pt depth0pt\kern2pt}% \newcommand{\algocf@caption@algoruled}{\algocf@caption@ruled}% \newcommand{\algocf@caption@boxruled}{% \addtolength{\hsize}{-0.8pt}% \hbox to\hsize{% \vrule%\hskip-0.35pt% \vbox{% \hrule\vskip2\lineskip% \hbox to\hsize{\unhbox\algocf@capbox\hfill}\vskip2\lineskip% }% %\hskip-0.35pt% \vrule% }\vskip-2\lineskip\nointerlineskip% \addtolength{\hsize}{0.8pt}% } % % %%%% set caption for the environment % beamer define is own caption overrinding latex caption! % as we need it, we have put here the original definition \long\def\algocf@latexcaption#1[#2]#3{% original definition of caption \par \addcontentsline{\csname ext@#1\endcsname}{#1}% {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}% \begingroup \@parboxrestore \if@minipage \@setminipage \fi \normalsize \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par \endgroup% } \ifx\beamer@makecaption\undefined% \else% beamer detected \ifx\@makecaption\undefined% \newcommand{\@makecaption}[2]{\relax}% \fi% \fi % % more and more packages redefine \@caption instead of just \@makecaption which makes algorithm2e % caption not works since based on standard \@caption. So we force the definition of \@caption to be % the standard one (the one from LaTeX) inside algorithm environment. % \newcommand{\algocf@setcaption}{% \let\algocf@savecaption=\@caption% \let\@caption=\algocf@latexcaption% \let\algocf@oldmakecaption=\@makecaption% \renewcommand{\@makecaption}[2]{% \expandafter\csname algocf@makecaption@\algocf@style\endcsname{##1}{##2}}% } % %%%%% reset caption % % since we have force the LaTeX caption for algorithm environment, we must go back to the caption % used in the text. \newcommand{\algocf@resetcaption}{% \let\@caption=\algocf@savecaption% \let\@makecaption=\algocf@oldmakecaption% } % %%%%% nocaptionofalgo and restorecaptionofalgo -- \newcommand{\nocaptionofalgo}{% \let\@old@algocf@captiontext=\algocf@captiontext% \renewcommand{\algocf@captiontext}[2]{\AlCapFnt{}##2}% } \newcommand{\restorecaptionofalgo}{% \let\algocf@captiontext=\@old@algocf@captiontext% } % % ---------------------- algocf environment % \newcounter{algocfline} % new counter to make lines numbers be internally \setcounter{algocfline}{0} % different in different algorithms % \expandafter\ifx\csname algocf@within\endcsname\relax% if \algocf@within doesn't exist \newcounter{algocf} % just define a new counter \renewcommand\thealgocf{\@arabic\c@algocf} % and the way it is printed \else% else \newcounter{algocf}[\algocf@within] % counter is numbered within \algocf@within \renewcommand\thealgocf{\csname the\algocf@within\endcsname.\@arabic\c@algocf} \fi % \def\fps@algocf{htbp} % default \def\ftype@algocf{10} % float type \def\ext@algocf{\algocf@list} % loa by default, lof if figure option used \def\fnum@algocf{{\AlCapFnt\AlTitleFnt{\algorithmcfname\nobreakspace\thealgocf}}} \newenvironment{algocf}% % float environment for algorithms {\@float{algocf}}% {\end@float} \newenvironment{algocf*}% % float* environment for algorithms {\@dblfloat{algocf}} {\end@dblfloat} \ifx\l@chapter\undefined% \newcommand\listofalgocfs{ % list of algorithms \section*{\listalgorithmcfname}% \@mkboth{\MakeUppercase\listalgorithmcfname}% {\MakeUppercase\listalgorithmcfname}% \@starttoc{loa}% } \else% \newcommand\listofalgocfs{% \if@twocolumn \@restonecoltrue\onecolumn \else \@restonecolfalse \fi \chapter*{\listalgorithmcfname}% \@mkboth{\MakeUppercase\listalgorithmcfname}% {\MakeUppercase\listalgorithmcfname}% \@starttoc{loa}% \if@restonecol\twocolumn\fi } \fi \newcommand*\l@algocf{\@dottedtocline{1}{1em}{2.3em}}% line of the list % % ---------------------- algorithm environment % %%%%%%% %% %% Algorithm environment definition %% %%%%%%% %% % \newsavebox\algocf@algoframe \def\@algocf@pre@plain{\relax}% action to be done before printing the algo. \def\@algocf@post@plain{\relax}% action to be done after printing the algo. \def\@algocf@capt@plain{bottom}% where the caption should be localized. \def\@algocf@pre@boxed{\noindent\begin{lrbox}{\algocf@algoframe}} \def\@algocf@post@boxed{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% \def\@algocf@capt@boxed{under}% \def\@algocf@pre@ruled{\hrule height.8pt depth0pt\kern2pt}% \def\@algocf@post@ruled{\kern2pt\hrule\relax}% \def\@algocf@capt@ruled{top}% \def\@algocf@pre@algoruled{\hrule height.8pt depth0pt\kern2pt}% \def\@algocf@post@algoruled{\kern2pt\hrule\relax}% \def\@algocf@capt@algoruled{top}% \def\@algocf@pre@boxruled{\noindent\begin{lrbox}{\algocf@algoframe}}% \def\@algocf@post@boxruled{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% \def\@algocf@capt@boxruled{above}% % %% before algocf or figure environment \newcommand{\@algocf@init@caption}{% \@algocf@algotitleofalgo% fix name for \Titleofalgo to \algorithmcfname \algocf@setcaption% set caption to our caption style }% \newcommand{\@algocf@init}{% \refstepcounter{algocfline}% \ifthenelse{\boolean{algocf@optnoend}}{% \renewcommand{\a@block}[2]{\a@group{##1}}% }{% \renewcommand{\a@block}[2]{\a@@block{##1}{##2}}% }% } %% after the end of algocf or figure environment \newcommand{\@algocf@term@caption}{% \algocf@resetcaption% restore original caption }% \newcommand{\@algocf@term}{% \setboolean{algocf@algoH}{false}% no H by default \ifthenelse{\boolean{algocf@optnoend}}{% \renewcommand{\a@block}[2]{\a@@block{##1}{##2}} }{% \renewcommand{\a@block}[2]{\a@group{##1}}% }% } % %%%%%%%%%%%%%%%%% %% makethealgo: macro which print effectively the algo in its box %% \newsavebox\algocf@algobox \newcommand{\algocf@makethealgo}{% \vtop{% % place caption above if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{above}}% {\csname algocf@caption@\algocf@style\endcsname}{}% % % precommand according to the style \csname @algocf@pre@\algocf@style\endcsname% % place caption at top if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{top}}% {\csname algocf@caption@\algocf@style\endcsname}{}% % \box\algocf@algobox% the algo % place caption at bottom if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{bottom}}% {\csname algocf@caption@\algocf@style\endcsname}{}% % postcommand according to the style \csname @algocf@post@\algocf@style\endcsname% % place caption under if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{under}} {\csname algocf@caption@\algocf@style\endcsname}{}% }% } %%%%%%%%%%%%%%%%%%% % %% at the beginning of algocf or figure environment \newcommand{\@algocf@start}{% \@algoskip% \begin{lrbox}{\algocf@algobox}% \setlength{\algowidth}{\hsize}% \vbox\bgroup% save all the algo in a box \hbox to\algowidth\bgroup\hbox to \algomargin{\hfill}\vtop\bgroup% \ifthenelse{\boolean{algocf@slide}}{\parskip 0.5ex\color{black}}{}% % initialization \addtolength{\hsize}{-1.5\algomargin}% \let\@mathsemicolon=\;\def\;{\ifmmode\@mathsemicolon\else\@endalgoln\fi}% \raggedright\AlFnt{}% \ifthenelse{\boolean{algocf@slide}}{\incmargin{\skipalgocfslide}}{}% \@algoinsideskip% % } % %% at the end of algocf or figure environment \newcommand{\@algocf@finish}{% \@algoinsideskip% \egroup%end of vtop which contain all the text \egroup%end of hbox wich contains [margin][vtop] \ifthenelse{\boolean{algocf@slide}}{\decmargin{\skipalgocfslide}}{}% % \egroup%end of main vbox \end{lrbox}% %\egroup% end of algo box \algocf@makethealgo% print the algo \@algoskip% % restore dimension and macros \setlength{\hsize}{\algowidth}% \lineskip\normallineskip\setlength{\skiptotal}{\@defaultskiptotal}% \let\;=\@mathsemicolon% % } %%%%%%%%%%%%%%%%%%%% %% basic definition of the environment algorithm %% \newboolean{algocf@algoH}\setboolean{algocf@algoH}{false} \newenvironment{algocf@Here}{\noindent% \def\@captype{algocf}% if not defined, caption exit with an error % \hbox\bgroup% \begin{minipage}{\hsize} }{% \end{minipage} % \egroup% }% \newenvironment{\algocf@envname}[1][htbp]{% \@algocf@init% \ifthenelse{\equal{\algocf@float}{figure}}% {\begin{figure}[#1]}% {\@algocf@init@caption\ifthenelse{\equal{#1}{H}}% {\setboolean{algocf@algoH}{true}\begin{algocf@Here}}% {\begin{algocf}[#1]}% }% \@algocf@start% \@ResetCounterIfNeeded% \algocf@linesnumbered% }{% \@algocf@finish% \ifthenelse{\equal{\algocf@float}{figure}}% {\end{figure}}% {\@algocf@term@caption\ifthenelse{\boolean{algocf@algoH}}% {\end{algocf@Here}}% {\end{algocf}}% }% \@algocf@term } %%% %%% algorithm* %%% \newenvironment{\algocf@envname*}[1][htbp]{% \@algocf@init% \ifthenelse{\equal{\algocf@float}{figure}}% {\begin{figure*}[#1]}% {\begin{algocf*}[#1]}% \@algocf@start% \@ResetCounterIfNeeded% \algocf@linesnumbered% }{ \@algocf@finish% \ifthenelse{\equal{\algocf@float}{figure}}% {\end{figure*}}% {\end{algocf*}}% \@algocf@term% } % %%%%%%%%%%%%%%%%%%%%%%% %%% % \expandafter\newcommand\csname\algocf@listofalgorithms\endcsname{% \ifthenelse{\equal{\algocf@float}{figure}}{\listoffigures}{\listofalgocfs} } %%% %%% % % ---------------------- procedure and function environments % % % -- new style (used in particular in the caption of function and procedure environments) % \newcommand{\ProcNameSty}[1]{\FuncSty{#1}}% \newcommand{\SetProcNameSty}[1]{\renewcommand{\ProcNameSty}[1]{\textnormal{\csname#1\endcsname{##1}}}} \newcommand{\ProcArgSty}[1]{\ArgSty{#1}}% \newcommand{\SetProcArgSty}[1]{\renewcommand{\ProcArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}}} % three macros to extract parts of the caption \gdef\algocf@captname#1(#2)#3@{#1} % keep characters before the first brace \gdef\algocf@captparam#1(#2)#3@{#2} % keep character in between the braces \gdef\algocf@captother#1(#2)#3@{#3} % keep character after the braces % %%% Text of caption for Procedure or Function \newcommand{\algocf@captionproctext}[2]{% {\AlCapFnt{}\AlTitleFnt{\algocf@procname} % \ProcNameSty{\algocf@captname #2@}% Name of the procedure in ProcName Style. \ifthenelse{\equal{\algocf@captparam #2@}{\arg@e}}{}% if no argument, write nothing {% else put arguments in ProcArgSty: \ProcNameSty{(}\ProcArgSty{\algocf@captparam #2@}\ProcNameSty{)}% }% endif \algocf@captother #2@% } } %%%% set caption for the environment % unfortunately, makecaption is called with \ignorespace #3 so % we can't do the @currentlabel definition inside \algocf@captionproctext \long\def\algocf@caption@proc#1[#2]#3{% \gdef\@currentlabel{\algocf@captname #3@}% \algocf@old@caption{#1}[\algocf@procname\nobreakspace #2]{\ #3}% }% \newcommand{\algocf@setcaptionproc}{% \let\algocf@oldcaptiontext=\algocf@captiontext% \renewcommand{\algocf@captiontext}[2]{% \algocf@captionproctext{##1}{##2}}% \let\algocf@old@caption=\@caption% \let\@caption=\algocf@caption@proc% } %%%%% reset caption \newcommand{\algocf@resetcaptionproc}{% \let\algocf@captiontext=\algocf@oldcaptiontext% \let\@caption=\algocf@old@caption% } % % %%%%% algocf@proc is the generic environment for procedure and function environment. % \newboolean{algocf@procstar}\setboolean{algocf@procstar}{false} \newenvironment{algocf@proc}[1][htbp]{% \@algocf@proctitleofalgo% set Titleofalgo to Procedure: or Function: % accordingly to the environment \let\old@thealgocf=\thealgocf%\renewcommand{\thealgocf}{--}% \algocf@setcaptionproc% set the text of caption to proc \algocf@setcaption% set caption to our caption style \refstepcounter{algocfline}% \ifthenelse{\equal{\algocf@float}{figure}}{% \ifthenelse{\boolean{algocf@procstar}}{\begin{figure*}[#1]}{\begin{figure}[#1]}% }{% \ifthenelse{\boolean{algocf@procstar}}% {\begin{algocf*}[#1]}% {\ifthenelse{\equal{#1}{H}}% {\setboolean{algocf@algoH}{true}\begin{algocf@Here}}% {\begin{algocf}[#1]}% }% }% \@algocf@start% \@ResetCounterIfNeeded% \algocf@linesnumbered% }{% \@algocf@finish% \ifthenelse{\equal{\algocf@float}{figure}}{% \ifthenelse{\boolean{algocf@procstar}}{\end{figure*}}{\end{figure}}% }{% \ifthenelse{\boolean{algocf@procstar}} {\end{algocf*}} {\ifthenelse{\boolean{algocf@algoH}} {\end{algocf@Here}}% {\end{algocf}}% }% }% \let\thealgocf=\old@thealgocf% \@algocf@term% restore original caption and H boolean \algocf@resetcaptionproc% } % % -- procedure and function environments are defined from algocf@proc environment % \newenvironment{procedure}[1][htbp]% {\setboolean{algocf@procstar}{false}% \newcommand{\algocf@procname}{\@algocf@procname}\begin{algocf@proc}[#1]}% {\end{algocf@proc}} \newenvironment{function}[1][htbp]% {\setboolean{algocf@procstar}{false}% \newcommand{\algocf@procname}{\@algocf@funcname}\begin{algocf@proc}[#1]}% {\end{algocf@proc}} % \newenvironment{procedure*}[1][htbp]% {\setboolean{algocf@procstar}{true}% \newcommand{\algocf@procname}{\@algocf@procname}\begin{algocf@proc}[#1]}% {\end{algocf@proc}} \newenvironment{function*}[1][htbp]% {\setboolean{algocf@procstar}{true}% \newcommand{\algocf@procname}{\@algocf@funcname}\begin{algocf@proc}[#1]}% {\end{algocf@proc}} % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \newcommand{\Titleofalgo}[1]{\@titleprefix\TitleSty{#1}\par\smallskip} % % % ------------------------- Default Definitions % %% %% % \newcommand{\algocf@defaults@common}{ %\SetKwInOut{AlgDonnees}{Donn\'ees}\SetKwInOut{AlgRes}{R\'esultat} \SetKwInput{Donnees}{Donn\'ees}% \SetKwInput{Res}{R\'esultat}% \SetKwInput{Entree}{Entr\'ees}% \SetKwInput{Sortie}{Sorties}% \SetKw{KwA}{\`a}% \SetKw{Retour}{retourner}% \SetKwBlock{Deb}{d\'ebut}{fin}% \SetKwRepeat{Repeter}{r\'ep\'eter}{jusqu'\`a}% % \SetKwComment{tcc}{/* }{ */} \SetKwComment{tcp}{// }{} % %\SetKwInOut{AlgData}{Data}\SetKwInOut{AlgResult}{Result} \SetKwInput{KwIn}{Input}% \SetKwInput{KwOut}{Output}% \SetKwInput{KwData}{Data}% \SetKwInput{KwResult}{Result}% \SetKw{KwTo}{to} \SetKw{KwRet}{return}% \SetKw{Return}{return}% \SetKwBlock{Begin}{begin}{end}% \SetKwRepeat{Repeat}{repeat}{until}% % % --- German keywords % % \SetKwInOut{AlgDaten}{Daten}%AlgData % \SetKwInOut{AlgErgebnis}{Ergebnis}%AlgResult \SetKwInput{Ein}{Eingabe}%KwIn \SetKwInput{Aus}{Ausgabe}%KwOut \SetKwInput{Daten}{Daten}%KwData \SetKwInput{Ergebnis}{Ergebnis}%KwResult \SetKw{Bis}{bis}%KwTo \SetKw{KwZurueck}{zur\"uck}%KwRet \SetKw{Zurueck}{zur\"uck}%Return \SetKwBlock{Beginn}{Beginn}{Ende}%Begin \SetKwRepeat{Wiederh}{wiederhole}{bis}%Repeat % % --- Czech keywords % % \SetKwInOut{AlgVst}{Vstup}\SetKwInOut{AlgVyst}{V\'{y}stup} \SetKwInput{Vst}{Vstup}% \SetKwInput{Vyst}{V\'{y}stup}% \SetKwInput{Vysl}{V\'{y}sledek}% % % --- Portuguese keywords % % \SetKwInOut{AlgDados}{Dados}\SetKwInOut{AlgResultado}{Result.} \SetKwInput{Entrada}{Entrada}% \SetKwInput{Saida}{Sa\'{i}da}% \SetKwInput{Dados}{Dados}% \SetKwInput{Resultado}{Resultado}% \SetKw{Ate}{at\'{e}} \SetKw{KwRetorna}{retorna}% \SetKw{Retorna}{retorna}% \SetKwBlock{Inicio}{in\'{i}cio}{fim}% \SetKwRepeat{Repita}{repita}{at\'{e}}% % --- End } % % \newcommand{\algocf@defaults@longend}{% \algocf@defaults@common \SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{finsi}% \SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{finsi}% \SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin d'alternative}% \SetKwFor{Pour}{pour}{faire}{finpour}% \SetKwFor{PourPar}{pour}{faire en parallèle}{finpour}% \SetKwFor{PourCh}{pour chaque}{faire}{finprch}% \SetKwFor{PourTous}{pour tous les}{faire}{finprts}% \SetKwFor{Tq}{tant que}{faire}{fintq}% % \SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{endif}% \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{endsw}% \SetKwFor{For}{for}{do}{endfor}% \SetKwFor{ForPar}{for}{do in parallel}{endfpar} \SetKwFor{ForEach}{foreach}{do}{endfch}% \SetKwFor{ForAll}{forall the}{do}{endfall}% \SetKwFor{While}{while}{do}{endw}% % % --- German for longend % \SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{Ende-wenn}%gIf \SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{Ende-wenn}%gIf \SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{Ende-Unt.}%Switch \SetKwFor{Fuer}{f\"ur}{tue}{Ende-f\"ur}%For \SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{Ende-gleichzeitig}%ForPar \SetKwFor{FuerJedes}{f\"ur jedes}{tue}{Ende-f\"ur}%ForEach \SetKwFor{FuerAlle}{f\"ur alle}{tue}{Ende-f\"ur}%ForAll \SetKwFor{Solange}{solange}{tue}{Ende-solange}%While % % --- Portuguese % \SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% \SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% \SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim selec}% \SetKwFor{Para}{para}{fa\c{c}a}{fim para}% \SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{fim para} \SetKwFor{ParaCada}{para cada}{fa\c{c}a}{fim para cada}% \SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{fim para todo}% \SetKwFor{Enqto}{enquanto}{fa\c{c}a}{fim enqto}% } % % \newcommand{\algocf@defaults@shortend}{% \algocf@defaults@common \SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{fin}% \SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{fin}% \SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin}% \SetKwFor{Pour}{pour}{faire}{fin}% \SetKwFor{PourPar}{pour}{faire en parallèle}{fin}% \SetKwFor{PourCh}{pour chaque}{faire}{fin}% \SetKwFor{PourTous}{pour tous les}{faire}{fin}% \SetKwFor{Tq}{tant que}{faire}{fin}% % % \SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{end}% \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end}% \SetKwFor{For}{for}{do}{end}% \SetKwFor{ForPar}{for}{do in parallel}{end} \SetKwFor{ForEach}{foreach}{do}{end}% \SetKwFor{ForAll}{forall}{do}{end}% \SetKwFor{While}{while}{do}{end}% % % --- German for shortend % \SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{Ende}%gIf \SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{Ende}%gIf \SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{}%Switch \SetKwFor{Fuer}{f\"ur}{tue}{Ende}%For \SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{Ende}%ForPar \SetKwFor{FuerJedes}{f\"ur jedes}{tue}{Ende}%ForEach \SetKwFor{FuerAlle}{f\"ur alle}{tue}{Ende}%ForAll \SetKwFor{Solange}{solange}{tue}{Ende}%While % % --- Portuguese % \SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim}% \SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim}% \SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim}% \SetKwFor{Para}{para}{fa\c{c}a}{fim}% \SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{fim} \SetKwFor{ParaCada}{para cada}{fa\c{c}a}{fim}% \SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{fim}% \SetKwFor{Enqto}{enquanto}{fa\c{c}a}{fim}% } % % \newcommand{\algocf@defaults@noend}{% \renewcommand{\a@block}[2]{\a@group{##1}} \algocf@defaults@common \SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{}% \SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{}% \SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas où}{autres cas}{}% \SetKwFor{Pour}{pour}{faire}{}% \SetKwFor{PourPar}{pour}{faire en parallèle}{}% \SetKwFor{PourCh}{pour chaque}{faire}{}% \SetKwFor{PourTous}{pour tous les}{faire}{}% \SetKwFor{Tq}{tant que}{faire}{}% % \SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{}% \SetKwIF{If}{ElsIf}{Else}{if}{then}{else if}{else}{}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{}% \SetKwFor{For}{for}{do}{}% \SetKwFor{ForPar}{for}{do in parallel}{} \SetKwFor{ForEach}{foreach}{do}{}% \SetKwFor{ForAll}{forall}{do}{}% \SetKwFor{While}{while}{do}{}% % --- German for noend \SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{}%gIf \SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{}%gIf \SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{}%Switch \SetKwFor{Fuer}{f\"ur}{tue}{}%For \SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{}%ForPar \SetKwFor{FuerJedes}{f\"ur jedes}{tue}{}%ForEach \SetKwFor{FuerAlle}{f\"ur alle}{tue}{}%ForAll \SetKwFor{Solange}{solange}{tue}{}%While % --- Portuguese \SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{}% \SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{}% \SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{}% \SetKwFor{Para}{para}{fa\c{c}a}{}% \SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{} \SetKwFor{ParaCada}{para cada}{fa\c{c}a}{}% \SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{}% \SetKwFor{Enqto}{enquanto}{fa\c{c}a}{}% } % %% %% %% % % default macros are: \defaultsmacros@algo \SetNoline % % % %% %%% %%%% END