1% algorithm2e.sty --- style file for algorithms 2% almost everything can be customized by users. See the document for more explanations 3%% Copyright 1996-2008 Christophe Fiorio 4% 5% This program may be distributed and/or modified under the 6% conditions of the LaTeX Project Public License, either version 1.2 7% of this license or (at your option) any later version. 8% The latest version of this license is in 9% http://www.latex-project.org/lppl.txt 10% and version 1.2 or later is part of all distributions of LaTeX 11% version 1999/12/01 or later. 12% 13% This program consists of the files algorithm2e.sty and algorithm2e.tex and algorithm2e-compatibility.sty 14% 15% Report bugs and comments to: 16% - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% 17% - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% 18% subscribe by emailing sympa@lirmm.fr with 'subscribe <list> <firstname name>'^^J% 19% 20% $Id: algorithm2e.sty,v 4.1 2009/12/15 08:54:08 cfiorio Exp $ 21% 22% PACKAGES REQUIRED: 23% 24% - float (in contrib/supported/float) 25% - ifthen (in base) 26% - xspace (in packages/tools) 27% - relsize (in contrib/misc/relsize.sty) 28% 29%%%%%%%%%%%%%%% Release 4.01 30% 31% Package options: 32% --------------- 33% - oldcommands : to use old command names 34% - french, english, german, 35% portuguese, czech, italiano, 36% slovak : for the name of the algorithm and some keyword code 37% - onelanguage : to simply switch keyword from one language to another without changing 38% keyword commands 39% - boxed, boxruled, ruled, tworuled, 40% algoruled, plain : layout of the algorithm 41% - algo2e : environment is algorithm2e instead of algorithms and \listofalgorithmes 42% instead of \listofalgorithms 43% - slide : to use when making slides 44% - noline,lined,vlined : how block are designed. 45% - shortend, longend, noend : short or long end keyword as endif for e.g. 46% - linesnumbered : auto numbering of the algorithm's lines 47% - linesnumberedhidden : to hide autonumbered lines (show number on a line with \ShowLn 48% - commentsnumbered, inoutnumbered : to autonumber comments and inout keywords (by defaut not numbered) 49% - rightnl : to have line number on the right instead of on the left as default 50% - algonl : line numbers preceded by algo number 51% - scright, scleft : right or left justified side comments 52% - fillcomment, nofillcomment : end mark of comment is flushed to the right so comments fill the line 53% - dotocloa : add an entry in the toc for list of algorithms (require tocbibind package) 54% - endfloat : add algoendfloat environment pushing algorithm so written to the end of document 55% - resetcount, noresetcount : start value of line numbers. 56% - algopart,algochapter,algosection : algo numbering within part, chapter or section 57% - titlenumbered,titlenotnumbered : numbering of title set by \Titleofalgo 58% - figure : algorithms are figures, numbered as figures, and put in the list of figures. 59% - procnumbered : procedure or function are numbered as algorithm 60% - nokwfunc : procedure or function name doens't become a command 61% - norelsize : don't use relsize package (useful if it breaks the compatibily) 62% 63% defaults are; english,plain,resetcount,titlenotnumbered 64% 65%%%%%%%%%%%%%% 66% 67% Short summary 68% ------------- 69% 70% algorithm is an environment for writing algorithm in LaTeX2e. 71% Almost all is customizable. You can add keywords, change style, change the layout, ... 72% It provide macros that allow you to create differents sorts of key words, therefore a set of predefined key 73% word is gived. 74% 75% IT should be used as follows 76% 77% \begin{algorithm} 78% ... 79% ... 80% \end{algorithm} 81% 82% 83% IMPORTANT : each line MUST end with \; 84% 85% Note that if you define macros outside algorithm environment they 86% are avaible in all the document and particulary you can use then 87% inside all algorithms without re-define them. 88% 89% an example: 90% 91% \begin{algorithm} 92% \SetAlgoLined 93% \KwIn{this text} 94% \KwOut{how to write algorithm with \LaTeX2e } 95% 96% initialization\; 97% \While{not at end of this document}{ 98% read current section\; 99% \eIf{understand}{ 100% go to next section\; 101% current section becomes this one\; 102% }{ 103% go back to the beginning of current section\; 104% } 105% } 106% \caption{How to write algorithm} 107% \end{algorithm} 108% 109% 110%%%%%%%%%%%%%% predefined keywords 111% 112% \KwIn{input} 113% \KwOut{output} 114% \KwData{input} 115% \KwResult{output} 116% \KwTo % a simple keyword 117% \KwFrom % a simple keyword 118% \KwRet{[value]} 119% \Return{[value]} 120% \Begin{block inside} 121% \eIf{condition}{Then Block}{Else block} % in blocks 122% \If{condition}{Then block} % in a block 123% \uIf{condition}{Then block} % in a block unended 124% \lIf{condition}{Else text} % on the same line 125% \Else{inside Else} % in a block 126% \lElse{Else text} % on the same line 127% \uElse{Else text} % in a block unended 128% \ElseIf{inside Elseif} % in a block 129% \lElseIf{Elseif text} % on the same line 130% \uElseIf{Elseif text} % in a block unended 131% \Switch{Condition}{Switch block} 132% \Case{a case}{case block} % in a block 133% \lCase{a case}{case text} % on the same line 134% \Other{otherwise block} % in a block 135% \lOther{otherwise block} % on the same line 136% \For{condition}{text loop} % in a block 137% \lFor{condition}{text} % on the same line 138% \ForEach{condition}{text loop} % in a block 139% \lForEach{condition}{text} % on the same line 140% \ForPar{condition}{text loop} % in a block 141% \lForPar{condition}{text} % on the same line 142% \While{condition}{text loop} % in a block 143% \lWhile{condition}{text loop} % on the same line 144% \Repeat{End condition}{text loop} % in a block 145% \lRepeat{condition}{text} % on the same line 146% 147%%%%%%%%%%%%%% 148% 149% History: 150% 151% - december 14 2009 - revision 4.01 152% * ADD : new command \SetKwHangingKw{Name}{text} (hanging indent with keyword): This creates a 153% hanging indent much like \texttt{SetKwInput}, except that it removes the trailing `:' 154% and does not reset numbering. 155% 156% - november 17 2009 - revision 4.00 - 157% 158% * CHANGE : IMPORTANT : some commands have been renamed to have consistent naming (CamlCase 159% syntax) and old commands are no more available. If you doesn't want to change 160% your mind or use old latex files, you can use oldcommands option to enable old 161% commands back. 162% text. Here are these commands: 163% - \SetNoLine becomes \SetAlgoNoLine 164% - \SetVline becomes \SetAlgoVlined 165% - \Setvlineskip becomes \SetVlineSkip 166% - \SetLine becomes \SetAlgoLined 167% - \dontprintsemicolon becomes \DontPrintSemicolon 168% - \printsemicolon becomes \PrintSemicolon 169% - \incmargin becomes \IncMargin 170% - \decmargin becomes \DecMargin 171% - \setnlskip becomes \SetNlSkip 172% - \Setnlskip becomes \SetNlSkip 173% - \setalcapskip becomes \SetAlCapSkip 174% - \setalcaphskip becomes \SetAlCapHSkip 175% - \nlSty becomes \NlSty 176% - \Setnlsty becomes \SetNlSty 177% - \linesnumbered becomes \LinesNumbered 178% - \linesnotnumbered becomes \LinesNotNumbered 179% - \linesnumberedhidden becomes \LinesNumberedHidden 180% - \showln becomes \ShowLn 181% - \showlnlabel becomes \ShowLnLabel 182% - \nocaptionofalgo becomes \NoCaptionOfAlgo 183% - \restorecaptionofalgo becomes \RestoreCaptionOfAlgo 184% - \restylealgo becomes \RestyleAlgo 185% - gIf macros and so on do no more exist 186% * NEW: - Compatibily with other packages improven by changing name of internal 187% macros. Algorithm2e can now be used with arabtex for example, if this last is 188% loaded after algorithm2e package. 189% * ADD: - OPTION endfloat: endfloat packages doesn't allow float environment inside other 190% environment. So using it with figure option of algorithm2e makes error. This 191% option enables a new environment algoendfloat to be used instead of algorithm 192% environment that put algorithm at the end. algoendfloat environment make 193% algorithm acting as endfloat figures. This option requires endfloat packages. 194% * ADD: - OPTION norelsize: starting from this release (v4.00), algorithm2e package uses 195% relsize package in order to get relative size for lines numbers; but it seems 196% that some rare classes (such as inform1.cls) are not compatible with relsize; to 197% have algorithm2e working, this option makes algorithm2e not to load relsize 198% package and go back to previous definition by using \scriptsize font for lines 199% numbers. 200% * ADD: - OPTION onelanguage: allow, if using standard keywords listed below, to switch 201% from one language to another without changing keywords by using appropriate 202% language option : 203% . KwIn, KwOut, KwData, KwResult 204% . KwTo KwFrom 205% . KwRet, Return 206% . Begin 207% . Repeat 208% . If, ElseIf, Else 209% . Switch, Case, Other 210% . For, ForPar, ForEach, ForAll, While 211% . 212% * ADD: - OPTION rightnl: put lines numbers to the right of the algorithm instead of left. 213% * ADD: new commands \setRightLinesNumbers and \setLeftLinesNumbers which sets the lines 214% numbers to the right or to the left of the algorithm. 215% * ADD: - new kind of keywords : KwArray used to define arrays: 216% \SetKwArray{Kw}{array} defines an array keywords Kw called array and printed in 217% DataSty style when call with \Kw. It can be used with one argument which 218% denotes the element index: \Kw{n} prints array[n] with array in DataSty and n in 219% ArgSty. 220% * ADD/FIX: rules of ruled, algoruled, tworuled styles used rules of different sizes! This 221% is now fixed. Moreover size of the rules is now controlled by a length and so 222% can be customized by the user. 223% \algoheightrule is the height of the rules and can be changed via \setlength 224% \algoheightruledefault is the default height of he rules (0.8pt) 225% \algotitleheightrule is the height of the rule that comes just after the 226% caption in ruled and algoruled style; it can be changed via \setlength 227% \algotitleheightruledefault is the default height of this rules (0.8pt) 228% Thanks to Philippe Dumas who reports the bug and make the suggestion. 229% * ADD: - \SetAlgoCaptionSeparator which sets the separator between Algorithm 1 and the 230% title. By default it's ':' and caption looks like "Algorithm 2: title" but now 231% you can change it by using for example \SetAlgoCaptionSeparator{.} which will 232% give "Algorithm 3. title" 233% * ADD: - \SetAlgoLongEnd and \SetAlgoShortEnd and \SetAlgoNoEnd commands which act as 234% corresponding package options 235% * ADD: - OPTIONS italiano and slovak as new language (thanks to Roberto Posenato and 236% Miroslav Binas) 237% * CHANGE: - Fnt and Sty macro to have consistent use and naming (see below) 238% * ADD: - \AlCapSty, \AlCapNameSty, \AlCapFnt, \AlCapNameFnt, \ProcSty, \ProcFnt, 239% \ProcNameSty, \ProcNameFnt, \ProcArgSty, ProcArgFnt and corresponding "set macro" 240% \SetAlCapSty, \SetAlCapNameSty, \SetAlCapFnt, \SetAlCapNameFnt, \SetProcSty, 241% \SetProcFnt, \SetProcNameSty, \SetProcNameFnt, \SetProcArgSty, \SetProcArgFnt which 242% control the way caption is printed. Sty macro use command taking one parameter as 243% argument, Fnt macros use directly command. In Fact caption is printed as follow : 244% \AlCapSty{\AlCapFnt Algorithm 1:}\AlCapNameSty{\AlCapNameFnt my algorithm} 245% By default, \AlCapSty is textbf and \AlCapFnt is nothing. \AlCapNameSty keep text 246% as it is, and \AlCapNameFnt do nothing also. 247% You can redefine \AlCapFnt and \AlCapNameFnt by giving macro to \Set commands. For 248% example, you can do \SetAlCapFnt{\large} to see Algorithm printed in \large font. 249% You can redefine \AlCapSty, \AlCapFnt, \AlCapNameSty and \AlCapNameFnt with the 250% corresponding \Set command. For the Sty commands, you have to give in parameter 251% name of a macro (whithout \) which takes one argument. For example, 252% \SetAlCapFnt{textbf} defines the default behaviour. If you want to do more 253% complicated thing, you should define your own macro and give it to \SetAlCapFnt or 254% \SetAlCapNameFnt. Here are two examples: 255% - \newcommand{\mycapsty}[1]{\tiny #1}\SetAlCapNameSty{mycapsty} 256% - \newcommand{\mycapsty}[1]{\textsl{\small #1}}\SetAlCapNameSty{mycapsty} 257% Or you can combine the two, for the last example you can also do: 258% \SetAlCapNameSty{textsl}\SetAlCapNameFnt{\small} 259% Thanks to Jan Stilhammer who gives me the idea of \AlCapNameFnt. 260% * CHANGE \AlTitleFnt to match definition of all other Fnt macros and add a \AlTitleSty 261% macro (see below) . Now you set \AlTitleFnt by calling \SetAlTitleFnt with 262% directly a macro without parameter in argument: 263% Example: \SetAlTitleFnt{\small} to set title in small font. 264% * ADD: - \AlTitleSty and \SetAlTitleSty commands to set a style for title. These commands 265% are defined from a macro taking the text in argument, as \textbf for example. 266% To set the TitleSty you have to give name of the macro (without the '\') 267% to \SetAlTitleSty. For example \SetAlTitleSty{textbf} to set \textbf style. 268% * ADD: - new command \SetAlgorithmName{algorithmname}{list of algorithms name} which 269% redefines name of the algorithms and the sentence list of algorithms. Second 270% argument is the name that \autoref, from hyperref package, will use. Example: 271% \SetAlgorithmName{Protocol}{List of protocols} if you prefer protocol than 272% algorithm. 273% * ADD: - new \SetAlgoRefName{QXY} which change the default ref (number of the algorithm) by 274% the name given in parameter (QXY in the example). 275% * ADD: - new command \SetAlgoRefRelativeSize{-2} which sets the output size of refs, defined 276% by \SetAlgoRefName, used in list of algorithms. 277% * ADD: - two dimensions to control the layout of caption in ruled, algoruled and boxruled 278% algorithms: 279% - interspacetitleruled (2pt by defaut) which controls the vertical space between 280% rules and title in ruled and algoruled algorithms. 281% - interspaceboxruled (2\lineskip by default) which controls the vertical space 282% between rules and title in boxruled algorithms. 283% These two dimensions can be changed by using \setlength command. 284% * ADD: - With the fix (see below) of procedure and function environments, a new feature has 285% been added: the name of the procedure or function set in caption is automatically 286% defined as a KwFunction and so can be used as a macro. For example, if inside a 287% procedure environment you set \caption{myproc()}, you can use \myproc macro in you 288% main text. Beware that the macro is only defined after the \caption! 289% * ADD: - OPTION nokwfunc to unable the new feature described above in function and 290% procedure environment. Useful if you use name of procedure or function that cannot 291% be a command name as a math display for example. 292% * ADD: - \SetAlgoNlRelativeSize{number} command which sets the relative size of line 293% numbers. By default, line numbers are two size smaller than algorithm text. Use 294% this macro to change this behavior. For example, \SetAlgoNlRelativeSize{0} sets it 295% to the same size, \SetAlgoNlRelativeSize{-1} to one size smaller and 296% \SetAlgoNlRelativeSize{1} to one size bigger 297% * ADD: - \SetAlgoProcName{aname} command which sets the name of Procedure printed by 298% procedure environment (the environment prints Procedure by default). Second 299% argument is the name that \autoref, from hyperref package, will use. 300% * ADD: - \SetAlgoFuncName{aname} command which sets the name of Function printed by 301% procedure environment (the environment prints Function by default). Second 302% argument is the name that \autoref, from hyperref package, will use. 303% * ADD: - \SetAlgoCaptionLayout{style} command which sets style of the caption; style must 304% be the name of a macro taking one argument (the text of the caption). Examples 305% below show how to use it: 306% . \SetAlgoCaptionLayout{centerline} to have centered caption 307% . \SetAlgoCaptionLayout{textbf} to have bold caption 308% If you want to apply two styles in the same time, such as centered bold, you have 309% to define you own macro and then use \SetAlgoCaptionLayout with its name. 310% * ADD: - OPTION procnumbered: which makes the procedure and function to be numbered as 311% algorithm 312% * ADD: - OPTIONS tworuled and boxruled 313% these are two new layouts: tworuled acts like ruled but doesn't put a line after 314% caption ; boxruled surround algorithm by a box, puts caption above and add a line 315% after caption. 316% * REMOVE: - SetKwInParam has been deleted since not useful itself because of different 317% macros which can do the same in a better and a more consistent way as 318% SetKwFunction or SetKw. 319% * FIX: - line number is now correctly vertically aligned with math display. 320% * FIX: - references with hyperref. No more same identifier or missing name error. BUT now 321% you must NOT use naturalnames option of hyperref packages if you do PdfLaTeX 322% * FIX: - autoref with hyperref package (thanks to J�rg Sommer who notices the problem). 323% * FIX: - titlenumbered was not working! fixed. 324% * FIX: - Else(){} acted like uElse. Corrected. 325% * FIX: - noend management: when a block was inside another and end of block was following 326% each other, a blank line was added: it's now corrected. 327% * FIX: - Function and Procedure environment was no more working as defined originally: the 328% label was no more name of the procedure, it acts always as if procumbered option 329% has been used. 330% * FIX: - line numbers had a fixed size which can be bigger than algorithm text accordingly 331% to \AlFnt set (see also new command \SetAlgoNlRelativeSize above) 332% * FIX: - semicolon in comments when dontprintsemicolon is used. 333% * FIX: - listofalgorithms adds a vertical space before first algo of a chapter as for 334% listoffigures or listoftables 335% * FIX: - listofalgorithms with twocolumns mode and some classes which don't allow onecolumn 336% and so don't define \if@restonecol as prescribed in LaTeX (sig-alternate for 337% example) 338% * FIX: - algorithm2e now works with elsart cls and some more classes. 339% * FIX: - blocks defined by SetKwBlock act now as other blocks (if for instance) and don't 340% write end in vlined mode, instead they print a small horizontal line as required 341% by the option. 342% * FIX: - underfull hbox warning at each end of algorithm environment removed. 343% 344% * INTERNAL CHANGE: - short end keyword are deduce from long end keyword by keeping the 345% first one. Allows to avoid double definition. 346% * INTERNAL CHANGE: - procedure, function and algorithm are now resolved by the same 347% environment to avoid code duplication. 348% 349% - October 04 2005 - revision 3.9 - 350% * ADD: - \setalcaphskip command which sets the horizontal skip before Algorithm: in caption 351% when used in ruled algorithm. 352% * ADD: - \SetAlgoInsideSkip command which allows to add an extra vertical space before and 353% after the core of the algorithm (ie: \SetAlgoInsideSkip{bigskip}) 354% * CHANGE: - caption, when used with figure option, is no more controlled by algorithm2e 355% package and so follows the exact behaviour of figures. The drawback is that you 356% cannot change the typo with AlTitleFnt or CapFnt. The avantage is that if you 357% use caption package, it works. 358% * FIX: - problem with numbering line and pdflatex 359% * FIX: - error when algorithm2e package was used with beamer and listings together 360% - February 12 2005 - revision 3.8 - 361% * FIX: - extra line with noend option. 362% - February 10 2005 - revision 3.7 - 363% * ADD: - sidecomment: different macros allowing to put text right after code on the same 364% line. They are defined in the same time comment macros are defined with a star 365% after the macro name. By default comments are right justified but this can be 366% change with appropriate option in the macro. Ex: 367% . default: \tcc*{side comment} 368% . same as previous: \tcc*[r]{side comment} 369% . left justify: \tcc*[l]{side comment} 370% . here: \tcc*[h]{side comment} don't put the end of line mark before 371% comment (; by default) and don't end the line. 372% . flushed: \tcc*[f]{side comment} same as the precedent but right 373% justified 374% * ADD: - OPTION scright (default): right justified side comments (side comments 375% are flushed to the righr) 376% * ADD: - OPTION scleft: left justified side comments (side comments are put right after the 377% code line) 378% * ADD: - \SetSideCommentLeft acts as scleft option 379% * ADD: - \SetSideCommentRight acts as scright option 380% * ADD: - block like macro side text: all macro defining a block allows now to put text right 381% after key words by putting text into (). Done to be used with sidecomment macros, 382% but all text can be used. 383% Ex: \eIf(\tcc*[f]{then comment}){test}{then text}(else side text){else text} 384% * ADD: - OPTION fillcomment (default): end mark of comment is flushed to the right so 385% comments fill all the width of text. 386% * ADD: - OPTION nofillcomment: end mark of comment is put right after the comment. 387% * ADD: - \SetNoFillComment acts as nofillcomment option. 388% * ADD: - \SetFillComment acts as fillcomment option. 389% * ADD: - OPTION dotocloa: which adds an entry in the toc for the list of algorithms. This 390% option load package tocbibind if not already done and so list of figures and list 391% of tables are also added in the toc. If you want to control which ones of the lists 392% will be added in the toc, please load package tocbibind before package algorithm 393% and give it the options you want. 394% * FIX: - vertical spacing for uif macro with noend option 395% * FIX: - all the compatibility problems between caption and other packages 396% * FIX: - typographical differences between list of algorithms and other lists when in 397% report or book 398% 399% - January 24 2005 - revision 3.6 - 400% * FIX: - vertical spacing and space characters at the beginning or end of comments. 401% line numbers of comments not in the NlSty. 402% Thanks to Arnaud Giersch for his comments and suggestions. 403% * FIX: - Set*Sty macro: the styles defined was not protected and was modified by surrounding 404% context. For example KwTo in a \For{}{} was in bold AND italic instead of just in 405% bold. 406% * FIX: - line number misplacement after \Indp 407% 408% - January 21 2005 - revision 3.5 - 409% * ADD: - hidden numbering of the lines. Lines are auto-numbered but numbers are shown only 410% on lines you specify: 411% * linesnumberedhidden option or \LinesNumberedHidden macro activate this 412% functionnality. 413% * \ShowLn and \ShowLnLabel{lab} macros make the number visible on the 414% line. \ShowLnLabel{lab} allows to set a label for this line. 415% Thanks to Samson de Jager who makes this suggestion and provides the macros. 416% * ADD: - \AlCapFnt and \SetAlCapFnt which allow to have a different font for 417% caption. Works like \AlFnt and \SetAlFnt and by default is the same. 418% * ADD: - \AlCapSkip skip length. This vertical space is added before caption in plain ou 419% boxed mode. It allows to change distance between text and caption. 420% * FIX: - caption compatible with IEEEtran class. 421% * FIX: - some vertical spacing error with \uIf macros (Thanks to Arnaud Giersch) 422% * FIX: - Procedure and Function: lines are also numbered like algorithms 423% * FIX: - CommentSty was not used for Comments 424% 425% - January 10 2005 - revision 3.4 - 426% * FIX: - caption compatible with new release of Beamer class. 427% 428% - June 16 2004 - revision 3.3 - 429% * FIX: - Hyperlink references of Hyperref package works now if compiled with pdflatex 430% and [naturalnames] option of hyperref package is used. 431% * FIX: - algorithm[H] had problem in an list environment - corrected 432% * FIX: - interline was not so regular in nested blocks - corrected 433% * ADD - \SetVlineSkip macro which sets the vertical skip after the little horizontal 434% rule which closes a block in Vlined mode. By default 0.8ex 435% 436% - June 11 2004 - revision 3.2 - AUTO NUMBERING LINES !!! 437% * ADD: auto numbering of the lines (the so asked and so long awaiting feature) 438% this feature is managed by 3 options and 3 commands: 439% - linesnumbered option: lines of the algo are numbered except for comments and 440% input/output (KwInput and KwInOut) 441% - commentsnumbered option: makes comments be numbered 442% - inoutnumbered option: makes data input/output be numbered 443% - \nllabel{lab} labels the line so you can cite with \ref{lab} 444% - \LinesNumbered make the following algorithms having auto-numbered lines 445% - \linesnotnumbered make the following algorithms having no auto-numbered lines 446% * Change: algo2e option renames listofalgorithms in listofalgorithmes 447% * FIX: new solution for compatibility with color package, more robust and not tricky. 448% Many thanks to David Carlisle for his advices 449% 450% - June 09 2004 - revision 3.1 - 451% * Change: \SetKwSwitch command defines an additionnal macro \uCase and \Case prints end 452% * Change: now macros SetKw* do a renewcommand if the keyword is already defined. So you can 453% redefine default definition at your own convenience or change your definition 454% without introducing a new macro and changing your text. 455% * ADD: new macro \SetKwIF which do \SetKwIf and 456% \SetKwIfElseIf.The following default definition has been added: 457% \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif} 458% and so you get the macros; 459% \If \eIf \lIf \uIf \ElseIf \uElseIf \lElseIf \Else \uElse \lElse 460% * ADD: new macro \SetAlgoSkip which allow to fix the vertical skip before and after the 461% algorithms. Default is smallskip, do \SetAlgoSkip{} if you don't want an extra space 462% or \SetAlgoSkip{medskip} or \SetAlgoSkip{bigskip} if you want bigger space. 463% * ADD: macro \SetKwIf defines in addition a new macro \uElse (depending on wat name you 464% have given in #2 arg). 465% * ADD: macro \SetKwIfElseIf defines in addition a new macro \uElse and \ugElseIf (depending 466% on what name you have given in #2 and #3 arg). 467% * Change: baseline of algorithm is now top, so two algorithms can be put side by side. 468% * FIX: Compatibility with color package solved. The problem was due to a redefinition of 469% standard macros by color package. This solves compatibility problem with other 470% packages as pstcol or colortbl. (notified by Dirk Fressmann, Antti Tarvainen and Koby 471% Crammer) 472% * Fix: extra little shift to the right with boxed style algorithm removed (notified by 473% P. Tanovski) 474% * Fix: algoln option was buggy (notified bye Jiaying Shen) 475% * Fix: german and portuges option didn't work due to bad typo (notified by Martin Sievers, 476% Thorsten Vitt and Jeronimo Pellegrini) 477% 478% - February 13 2004 - revision 3.0 - 479% * Major revision which makes the package independent from float.sty, so now 480% - algorithm* works better, in particular can be used in multicols environments 481% - (known bug corrected) 482% [H] works now for all sort of environment but is handled differently for classic 483% environment and star environment (algorithm, figure, procedure and function). For star 484% environment, H acts like for classical figure environment, so it doesn't stay here 485% absolutely. 486% - (known bug corrected) 487% you can use now floatflt package with algorithm package and even with figure 488% option. Beware that if you want to put an algorithm inside a floatingfigure, it cannot 489% be floating, so [H] is required and then figure option should not be used, since 490% standard figure[H] are still floating with LaTeX. 491% * boxruled: a new style added. Possible now since no style no more defined by the float 492% package. 493% * nocaptionofalgo: dosen't print Algorithm #: in the caption for algorithm in ruled or 494% algoruled style. 495% note: this is just documentation of a macro which was already in the package. 496% - December 14 2003 - revision 2.52 - 497% * output message shorter 498% * french keyword macro \PourTous was missing for longend option, it has been added. 499% * TitleofAlgo prints Function or Procedure in corresponding environments. 500% 501% - October 27 2003 - revision 2.51 - Revision submitted to CTAN archive 502% * correction of a minor which make caption in procedure 503% and function to be blanck with pdfscreen package 504% (thanks to Joel Gossens for the notification) 505% * add two internal definition to avoid some errors when 506% used with Hyperref package (Hyperref package need to 507% define new counter macro from existing ones, and 508% don't do it for algorithm2e package, so we do it) 509% 510% - October 17 2003 - revision 2.50 - first revision for CTAN archive 511% * add \AlFnt and \SetAlFnt{font} macros: \AlFnt is used at the beginning of the caption and 512% the body of algorithm in order to define the fonts used for typesetting algorithms. You 513% can use it elsewhere you want to typeset text as algorithm. For example you can do 514% \SetAlFnt{\small\sf} to have algorithms typeset in small sf font. Default is nothing so 515% algorithm is typeset as the text of the document. 516% * add \AlTitleFnt{text} and \SetAlTitleFnt{font} macros: The {Algorithm: } in the caption is 517% typeset with \AlTitleFnt{Algorithm:}. You can use it to have text typeset as {Algorithm:} 518% of captions. Default is textbf. Default can be redefined by \SetAlTitleFnt{font}, for 519% example you can do \SetAlTitleFnt{emph} 520% * add CommentSty typo for text comment. 521% * add some compatibility with hyperref package (still an error on multiply defined refs but 522% pdf correctly generated) 523% * flush text to left in order to have correct indentation even with class as amsart which 524% center all figures 525% * add german, portugues and czech options for title of algorithms and typo. 526% * add portuguese translation of predefined keywords * add czech translation of some 527% predefined keywords 528% 529% - December 23 2002 - revision 2.40 530% * add some french keyword missing 531% * add function* and procedure* environment like algorithme* environment: print in one column 532% even if twocolumn option is specified for the document. 533% * add a new macro \SetKwComment to define macro which writes comments in the text. First 534% argument is the name of the macro, second is the text put before the comment, third is the 535% text put at the end of the comment.Default are \tcc and \tcp 536% * add new options to change the way algo are numbered: 537% [algopart] algo are numbered within part (counter must exist) 538% [algochapter] algo are numbered within chapter 539% [algosection] algo are numbered within section 540% 541% - March 27 2002 - revision 2.39 542% * Gilles Geeraerts: added the \SetKwIfElseIf to manage 543% if (c) 544% i; 545% else if (c) 546% i; 547% ... 548% else 549% i; 550% end 551% * Also added \gIf \gElseIf \gElse. 552% 553% - January 02 2001 - revision 2.38 554% * bugs related to the caption in procedure and function 555% environment are corrected. 556% * bug related to option noend (extra vertical space added 557% after block command as If or For) is corrected. 558% * czech option language added (thanks to Libor Bus: l.bus@sh.cvut.cz). 559% 560% - October 16 2000 - revision 2.37 561% * option algo2e added: change the name of environment 562% algorithm into algorithm2e. So allow to use the package 563% with some journal style which already define an algorithm 564% environment. 565% 566% - September 13 2000 - revision 2.36 567% * option slide added: require package color 568% * Hack for slide class in order to have correct 569% margins 570% 571% - November 25 1999 - revision 2.35 572% * revision number match RCS number 573% * Thanks to David A. Bader, a new option is added: 574% noend: no end keywords are printed. 575% 576% - November 19 1999 - revision 2.32 577% * minor bug on longend option corrected. 578% 579% - August 26 1999 - revision 2.31 580% * add an option : figure 581% this option makes algorithms be figure and so are numbered 582% as figures, have Figure as caption and are put in 583% the \listoffigures 584% 585% - January 21 1999 - revision 2.3 beta 586% add 2 new environments: procedure and function. 587% These environments works like algorithm environment but: 588% - the ruled (or algoruled) style is imperative. 589% - the caption now writes Procedure name.... 590% - the syntax of the \caption command is restricted as 591% follow: you MUST put a name followed by 2 braces like 592% this ``()''. You can put arguments inside the braces and 593% text after. If no argument is given, the braces will be 594% removed in the title. 595% - label now puts the name (the text before the braces in the 596% caption) of the procedure or function as reference (not 597% the number like a classic algorithm environment). 598% There are also two new styles : ProcNameSty and 599% ProcArgSty. These style are by default the same as FuncSty 600% and ArgSty but are used in the caption of a procedure or a 601% function. 602% 603% - November 28 1996 - revision 2.22 604% add a new macro \SetKwInParam{arg1}{arg2}{arg3}: 605% it defines a macro \arg1{name}{arg} which prints name in keyword 606% style followed byt arg surrounded by arg2 and arg3. The main 607% application is to a function working as \SetKwInput to be used 608% in the head of the algorithm. For example 609% \SetKwInParam{Func}{(}{)} allows 610% \Func{functionname}{list of arguments} which prints: 611% \KwSty{functioname(}list of arguments\KwSty{)} 612% 613% 614% - November 27 1996 - revision 2.21 : 615% minor bug in length of InOut boxes fixed. 616% add algorithm* environment. 617% 618% - July 12 1996 - revision 2.2 : \SetArg and \SetKwArg macros removed. 619% 620% \SetArg has been removed since it never has been 621% documented. 622% \SetKwArg has been removed since \SetKw can now 623% take an argument in order to be consistent with 624% \SetKwData and \SetKwFunction macros. 625% 626% - July 04 1996 - revision 2.1 : still more LaTeX2e! Minor compatibility break 627% 628% Macros use now \newcommand instead of \def, use of \setlength, 629% \newsavebox, ... and other LaTeX2e specific stuff. 630% The compatibility break: 631% - \SetData becomes \SetKwData to be more consistent. So the old 632% \SetKwData becomes \SetKwInput 633% - old macros \titleofalgo, \Freetitleofalgo and \freetitleofalgo 634% from LaTeX209 version which did print a warning message and call 635% \Titleofalgo in version 2.0 are now removed! 636% 637% - March 13 1996 - revision 2.0: first official major revision. 638% 639% 640%%%%%%%%%%%%%% 641% 642% Known bugs: 643% ----------- 644% - no more known bugs... all are corrected! 645% 646%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 647% 648% for more complete informations you can see algorithm2e.tex 649% 650% 651%%%%%%%%%%%%%%%%%%%%%%%% Identification Part %%%%%%%%%%%%%%%%%%%%%%%%%%%% 652% 653\NeedsTeXFormat{LaTeX2e}[1994/12/01] 654% 655\ProvidesPackage{algorithm2e}[2008/00/00 v3.10 algorithms environments] 656% 657% 658%%%%%%%%%%%%%%%%%%%%%%%%%%% Initial Code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 659% 660\@makeother\*% some package redefined it as a letter (as color.sty) 661\def\@firstword#1 #2\@nil{#1}% an useful fonction 662% 663% definition of commands which can be redefined in options of the package. 664% 665\newcounter{AlgoLine}% 666\setcounter{AlgoLine}{0}% 667% 668\newcommand{\algocf@algocfref}{\relax}% 669\newcommand{\listalgorithmcfname}{}% 670\newcommand{\algorithmcfname}{}% 671\@ifundefined{algorithmautorefname}{\newcommand{\algorithmautorefname}{algorithm}}{\renewcommand{\algorithmautorefname}{algorithm}}% 672\newcommand{\algorithmcflinename}{}% 673\newcommand{\algocf@typo}{}% 674\newcommand{\@algocf@procname}{}\newcommand{\procedureautorefname}{}% 675\newcommand{\SetAlgoProcName}[2]{\renewcommand{\@algocf@procname}{#1}\renewcommand{\procedureautorefname}{#2}}% 676\newcommand{\@algocf@funcname}{}\newcommand{\functionautorefname}{}% 677\newcommand{\SetAlgoFuncName}[2]{\renewcommand{\@algocf@funcname}{#1}\renewcommand{\functionautorefname}{#2}}% 678\newcommand{\@algocf@titleofalgoname}{\algorithmcfname}% 679\newcommand{\@algocf@algotitleofalgo}{% 680 \renewcommand{\@algocf@titleofalgoname}{\algorithmcfname}}% 681\newcommand{\@algocf@proctitleofalgo}{% 682 \renewcommand{\@algocf@titleofalgoname}{\algocf@procname}}% 683% 684\newcommand{\algocf@style}{plain}% 685\newcommand{\@ResetCounterIfNeeded}{}% 686\newcommand{\@titleprefix}{}% 687% 688\newcommand{\algocf@numbering}[1]{\newcommand{\algocf@within}{#1}}% 689% 690\newcommand{\defaultsmacros@algo}{\algocf@defaults@shortend}% 691% 692\newcommand{\algocf@list}{loa}% 693\newcommand{\algocf@float}{algocf}% 694% 695\newcommand{\algocf@envname}{algorithm}% 696\newcommand{\algocf@listofalgorithms}{listofalgorithms}% 697% 698% 699%% redefine chapter so that it adds a vspace in the loa as the original does for lof and lot 700\let\algocf@original@chapter=\chapter% 701\def\chapter{\expandafter\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}% 702% 703%% if@restonecol is defined in article and book but some other classes don't define it and we need it, so we do 704\ifx\if@restonecol\relax\else\newif\if@restonecol\fi% 705% 706% 707%%%%%%%%%%%%%%%%%%%%%% Declaration of Options %%%%%%%%%%%%%%%%%%%%%%%%%%% 708% 709\RequirePackage{ifthen}% 710% 711\newboolean{algocf@nokwfunc}\setboolean{algocf@nokwfunc}{false}% 712\DeclareOption{nokwfunc}{% 713 \setboolean{algocf@nokwfunc}{true}% 714}% 715% 716\newboolean{algocf@oldcommands}\setboolean{algocf@oldcommands}{false}% 717\DeclareOption{oldcommands}{% 718 \setboolean{algocf@oldcommands}{true}% 719}% 720% 721\newboolean{algocf@leftlinenumber}\setboolean{algocf@leftlinenumber}{true}% 722\newcommand{\setLeftLinesNumbers}{\setboolean{algocf@leftlinenumber}{true}}% 723\newcommand{\setRightLinesNumbers}{\setboolean{algocf@leftlinenumber}{false}}% 724\DeclareOption{rightnl}{% 725 \setRightLinesNumbers% 726}% 727% 728\newboolean{algocf@endfloat}\setboolean{algocf@endfloat}{false}% 729\DeclareOption{endfloat}{% 730 \setboolean{algocf@endfloat}{true}% 731 \newcounter{postalgo}\setcounter{postalgo}{0}% 732}% 733% 734\newboolean{algocf@procnumbered}\setboolean{algocf@procnumbered}{false}% 735\DeclareOption{procnumbered}{% 736 \setboolean{algocf@procnumbered}{true}% 737}% 738% 739\DeclareOption{algo2e}{% 740 \renewcommand{\algocf@envname}{algorithm2e}% 741 \renewcommand{\algocf@listofalgorithms}{listofalgorithmes}% 742}% 743% 744\newboolean{algocf@slide}\setboolean{algocf@slide}{false}% 745\DeclareOption{slide}{% 746 \setboolean{algocf@slide}{true}% 747}% 748% 749\DeclareOption{figure}{% 750\renewcommand{\algocf@list}{lof}% 751\renewcommand{\algocf@float}{figure}% 752}% 753% 754\newboolean{algocf@optonelanguage}\setboolean{algocf@optonelanguage}{false}% 755\DeclareOption{onelanguage}{\setboolean{algocf@optonelanguage}{true}}% 756% 757\newcommand{\algocf@languagechoosen}{english}% 758% 759\DeclareOption{english}{% 760\renewcommand{\listalgorithmcfname}{List of Algorithms}% 761\renewcommand{\algorithmcfname}{Algorithm}% 762\renewcommand{\algorithmautorefname}{algorithm}% 763\renewcommand{\algorithmcflinename}{line}% 764\renewcommand{\algocf@typo}{}% 765\renewcommand{\@algocf@procname}{Procedure}% 766\renewcommand{\@algocf@funcname}{Function}% 767\renewcommand{\procedureautorefname}{procedure}% 768\renewcommand{\functionautorefname}{function}% 769\renewcommand{\algocf@languagechoosen}{english}% 770}% 771% 772\DeclareOption{french}{% 773\renewcommand{\listalgorithmcfname}{Liste des Algorithmes}% 774\renewcommand{\algorithmcfname}{Algorithme}% 775\renewcommand{\algorithmautorefname}{algorithme}% 776\renewcommand{\algorithmcflinename}{ligne}% 777\renewcommand{\algocf@typo}{\ }% 778\renewcommand{\@algocf@procname}{Proc�dure}% 779\renewcommand{\@algocf@funcname}{Fonction}% 780\renewcommand{\procedureautorefname}{proc�dure}% 781\renewcommand{\functionautorefname}{fonction}% 782\renewcommand{\algocf@languagechoosen}{french}% 783}% 784% 785\DeclareOption{czech}{% 786\renewcommand{\listalgorithmcfname}{Seznam algoritm\v{u}}% 787\renewcommand{\algorithmcfname}{Algoritmus}% 788\renewcommand{\algorithmautorefname}{\algorithmcfname}% 789\renewcommand{\algorithmcflinename}{Radek}% 790\renewcommand{\algocf@typo}{}% 791\renewcommand{\@algocf@procname}{Procedura}% 792\renewcommand{\@algocf@funcname}{Funkce}% 793\renewcommand{\procedureautorefname}{\@algocf@procname}% 794\renewcommand{\functionautorefname}{\@algocf@funcname}% 795\renewcommand{\algocf@languagechoosen}{czech}% 796}% 797% 798\DeclareOption{german}{% 799\renewcommand{\listalgorithmcfname}{Liste der Algorithmen}% 800\renewcommand{\algorithmcfname}{Algorithmus}% 801\renewcommand{\algorithmautorefname}{\algorithmcfname}% 802\renewcommand{\algorithmcflinename}{Zeile}% 803\renewcommand{\algocf@typo}{\ }% 804\renewcommand{\@algocf@procname}{Prozedur}% 805\renewcommand{\@algocf@funcname}{Funktion}% 806\renewcommand{\procedureautorefname}{\@algocf@procname}% 807\renewcommand{\functionautorefname}{\@algocf@funcname}% 808\renewcommand{\algocf@languagechoosen}{german}% 809}% 810% 811\DeclareOption{portuguese}{% 812\renewcommand{\listalgorithmcfname}{Lista de Algoritmos}% 813\renewcommand{\algorithmcfname}{Algoritmo}% 814\renewcommand{\algorithmautorefname}{algoritmo}% 815\renewcommand{\algorithmcflinename}{linha}% 816\renewcommand{\algocf@typo}{}% 817\renewcommand{\@algocf@procname}{Procedimento}% 818\renewcommand{\@algocf@funcname}{Fun\c{c}\~{a}o}% 819\renewcommand{\procedureautorefname}{procedimento}% 820\renewcommand{\functionautorefname}{fun\c{c}\~{a}o}% 821\renewcommand{\algocf@languagechoosen}{portuguese}% 822}% 823% 824\DeclareOption{italiano}{% 825\renewcommand{\listalgorithmcfname}{Elenco degli algoritmi}% 826\renewcommand{\algorithmcfname}{Algoritmo}% 827\renewcommand{\algorithmautorefname}{algoritmo}% 828\renewcommand{\algorithmcflinename}{riga}% 829\renewcommand{\algocf@typo}{}% 830\renewcommand{\@algocf@procname}{Procedura}% 831\renewcommand{\@algocf@funcname}{Funzione}% 832\renewcommand{\procedureautorefname}{procedura}% 833\renewcommand{\functionautorefname}{funzione}% 834\renewcommand{\algocf@languagechoosen}{italiano}% 835}% 836\DeclareOption{slovak}{% 837\renewcommand{\listalgorithmcfname}{Zoznam algoritmov}% 838\renewcommand{\algorithmcfname}{Algoritmus}% 839\renewcommand{\algorithmautorefname}{\algorithmcfname}% 840\renewcommand{\algorithmcflinename}{Radek}% 841\renewcommand{\algocf@typo}{}% 842\renewcommand{\@algocf@procname}{Proced\'{u}ra}% 843\renewcommand{\@algocf@funcname}{Funkcia}% 844\renewcommand{\procedureautorefname}{\@algocf@procname}% 845\renewcommand{\functionautorefname}{\@algocf@funcname}% 846\renewcommand{\algocf@languagechoosen}{slovak}% 847}% 848% 849% OPTIONs plain, boxed, ruled, algoruled & boxruled 850% 851\newcommand{\algocf@style@plain}{\renewcommand{\algocf@style}{plain}}% 852\newcommand{\algocf@style@boxed}{\renewcommand{\algocf@style}{boxed}}% 853\newcommand{\algocf@style@ruled}{\renewcommand{\algocf@style}{ruled}}% 854\newcommand{\algocf@style@algoruled}{\renewcommand{\algocf@style}{algoruled}}% 855\newcommand{\algocf@style@boxruled}{\renewcommand{\algocf@style}{boxruled}}% 856\newcommand{\algocf@style@tworuled}{\renewcommand{\algocf@style}{tworuled}}% 857\newcommand{\RestyleAlgo}[1]{\csname algocf@style@#1\endcsname}% 858\DeclareOption{plain}{\algocf@style@plain}% 859\DeclareOption{boxed}{\algocf@style@boxed}% 860\DeclareOption{ruled}{\algocf@style@ruled}% 861\DeclareOption{algoruled}{\algocf@style@algoruled}% 862\DeclareOption{boxruled}{\algocf@style@boxruled}% 863\DeclareOption{tworuled}{\algocf@style@tworuled}% 864% 865% OPTIONs algopart,algochapter & algosection 866% 867\DeclareOption{algopart}{\algocf@numbering{part}}% %algo part numbered 868\DeclareOption{algochapter}{\algocf@numbering{chapter}}% %algo chapter numbered 869\DeclareOption{algosection}{\algocf@numbering{section}}% %algo section numbered 870% 871% OPTIONs resetcount & noresetcount 872% 873\DeclareOption{resetcount}{\renewcommand{\@ResetCounterIfNeeded}{\setcounter{AlgoLine}{0}}}% 874\DeclareOption{noresetcount}{\renewcommand{\@ResetCounterIfNeeded}{}}% 875% 876% OPTION linesnumbered 877% 878\newboolean{algocf@linesnumbered}\setboolean{algocf@linesnumbered}{false}% 879\newcommand{\algocf@linesnumbered}{\relax}% 880\DeclareOption{linesnumbered}{% 881 \setboolean{algocf@linesnumbered}{true}% 882 \renewcommand{\algocf@linesnumbered}{\everypar={\nl}}% 883}% 884% 885% OPTION linesnumberedhidden 886% 887\DeclareOption{linesnumberedhidden}{% 888 \setboolean{algocf@linesnumbered}{true}% 889 \renewcommand{\algocf@linesnumbered}{\everypar{\stepcounter{AlgoLine}}}% 890}% 891% 892% OPTION commentsnumbered inoutnumbered 893% 894\newboolean{algocf@commentsnumbered}\setboolean{algocf@commentsnumbered}{false}% 895\DeclareOption{commentsnumbered}{\setboolean{algocf@commentsnumbered}{true}}% 896\newboolean{algocf@inoutnumbered}\setboolean{algocf@inoutnumbered}{false}% 897\DeclareOption{inoutnumbered}{\setboolean{algocf@inoutnumbered}{true}}% 898% 899% OPTIONs titlenumbered & titlenotnumbered 900% 901\DeclareOption{titlenumbered}{% 902 \renewcommand{\@titleprefix}{% 903 \refstepcounter{\algocf@float}% 904 \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\ \expandafter\csname the\algocf@float\endcsname\algocf@typo: }% 905 }% 906}% 907% 908\DeclareOption{titlenotnumbered}{\renewcommand{\@titleprefix}{% 909 \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\algocf@typo: }}% 910}% 911% 912% OPTIONs algonl 913% line numbered with the counter of the algorithm 914% 915\DeclareOption{algonl}{\renewcommand{\theAlgoLine}{\expandafter\csname the\algocf@float\endcsname.\arabic{AlgoLine}}}% 916% 917% OPTIONs lined, vlined & noline 918% 919\DeclareOption{lined}{\AtBeginDocument{\SetAlgoLined}}% \SetAlgoLined 920\DeclareOption{vlined}{\AtBeginDocument{\SetAlgoVlined}}% \SetAlgoVlined 921\DeclareOption{noline}{\AtBeginDocument{\SetAlgoNoLine}}%\SetAlgoNoLine (default) 922% 923% OPTIONs longend, shotend & noend 924% 925\DeclareOption{longend}{\AtBeginDocument{\SetAlgoLongEnd}}% \SetAlgoLongEnd 926\DeclareOption{shortend}{\AtBeginDocument{\SetAlgoShortEnd}}%\SetAlgoShortEnd 927\DeclareOption{noend}{\AtBeginDocument{\SetAlgoNoEnd}}% \SetAlgoNoEnd 928% 929% OPTION dotoc 930% 931\newboolean{algocf@dotocloa}\setboolean{algocf@dotocloa}{false}% 932\DeclareOption{dotocloa}{% 933 \setboolean{algocf@dotocloa}{true}% 934} 935% 936% OPTION comments 937% 938\newboolean{algocf@optfillcomment}\setboolean{algocf@optfillcomment}{true}% 939\DeclareOption{nofillcomment}{% 940 \setboolean{algocf@optfillcomment}{false}% 941}% 942\DeclareOption{fillcomment}{% 943 \setboolean{algocf@optfillcomment}{true}% 944}% 945% 946% OPTION sidecommments 947% 948\newboolean{algocf@scleft}\setboolean{algocf@scleft}{false}% 949\DeclareOption{scleft}{% 950 \setboolean{algocf@scleft}{true}% 951}% 952\DeclareOption{sright}{% default 953 \setboolean{algocf@scleft}{false}% 954}% 955% 956% OPTION norelsize 957% 958\newboolean{algocf@norelsize}\setboolean{algocf@norelsize}{false}% 959\DeclareOption{norelsize}{% 960 \setboolean{algocf@norelsize}{true}% 961}% 962% 963% 964%%%%%%%%%%%%%%%%%%%%%%% Execution of Options %%%%%%%%%%%%%%%%%%%%%%%%%%%% 965% 966\ExecuteOptions{english,plain,resetcount,titlenotnumbered,lined,shortend}% 967% 968\ProcessOptions% 969% 970\@algocf@algotitleofalgo% fix name for \TitleOfAlgo to \algorithmcfname by default 971% 972%%%%%%%%%%%%%%%%%%%%%%%%%% Package Loading %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 973% 974% 975\RequirePackage{xspace}% 976% 977\ifthenelse{\boolean{algocf@endfloat}}{% 978 \RequirePackage{endfloat}% 979}{\relax}% 980% 981\ifthenelse{\boolean{algocf@norelsize}}{% 982 \newcommand{\relsize}[1]{\scriptsize}% 983}{% 984 \RequirePackage{relsize}% 985}% 986% 987\ifthenelse{\boolean{algocf@slide}}{\RequirePackage{color}}{}% 988% 989 990\AtEndOfPackage{% 991 \ifthenelse{\boolean{algocf@dotocloa}}{% 992 \renewcommand{\listofalgorithmes}{\tocfile{\listalgorithmcfname}{loa}}% 993 }{\relax}% 994}% 995% 996% if loa in toc required, load tocbibind package if not already done. 997\ifthenelse{\boolean{algocf@dotocloa}}{% 998 \ifx\@tocextra\undefined% 999 \RequirePackage{tocbibind}% 1000 \fi% 1001}% 1002% 1003%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Main Part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1004% 1005\newcommand{\algocf@name}{algorithm2e}% 1006\newcommand{\algocf@date}{december 14 2009}% 1007\newcommand{\algocf@version}{Release 4.01}% 1008\newcommand{\algocf@id}{\algocf@version\space -- \algocf@date\space --}% 1009\typeout{********************************************************^^JPackage `\algocf@name'\space\algocf@id^^J% 1010 - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% 1011 - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% 1012 subscribe by emailing sympa@lirmm.fr with 'subscribe <list> <firstname name>'^^J% 1013 - Author: Christophe Fiorio (fiorio@lirmm.fr)^^J********************************************************}% 1014%% 1015%% 1016%% 1017%% 1018%% 1019%% 1020%%%% hyperref compatibility tricks: Hyperref package defines H counters from 1021 % standard counters (i.e \theHpage from \thepage) and check some particular 1022 % counters of some packages, unfortunately it doesn't do the same for 1023 % algorithm2e package but act as Hcounter was defined. To avoid errors we 1024 % defined \theHalgocf ourself 1025%%%% 1026% 1027\@ifundefined{theHalgocf}{\def\theHalgocf{\thealgocf}}{}% 1028\@ifundefined{theHAlgoLine}{\def\theHAlgoLine{\theAlgoLine}}{}% 1029\@ifundefined{theHalgocfproc}{\def\theHalgocfproc{0}}{}% 1030\@ifundefined{theHalgocffunc}{\def\theHalgocffunc{0}}{}% 1031\@ifundefined{toclevel@algocf}{\def\toclevel@algocf{0}}{}% 1032% 1033% autoref from hyperref needs an autorefname, so we give it. 1034\def\AlgoLineautorefname{\algorithmcflinename}% 1035\def\algocfautorefname{\algorithmautorefname}% 1036\def\algocfprocautorefname{\procedureautorefname}% 1037\def\algocffuncautorefname{\functionautorefname}% 1038%% 1039%% 1040%% 1041\newcommand{\@defaultskiptotal}{0.5em}% 1042\newskip\skiptotal\skiptotal=0.5em% 1043\newskip\skiplinenumber\skiplinenumber=\hsize\advance\skiplinenumber by-\skiptotal% 1044\newskip\skiprule% 1045\newskip\skiphlne% 1046\newskip\skiptext% 1047\newskip\skiplength% 1048\newskip\algomargin% 1049\newskip\skipalgocfslide\skipalgocfslide=1em% 1050\newdimen\algowidth% 1051\newdimen\inoutsize% 1052\newdimen\inoutline% 1053\newdimen\interspacetitleruled\setlength{\interspacetitleruled}{2pt}% 1054\newdimen\interspacealgoruled\setlength{\interspacealgoruled}{2pt}% 1055\newdimen\interspacetitleboxruled\setlength{\interspacetitleboxruled}{2\lineskip}% 1056% 1057\newcommand{\@algoskip}{\smallskip}% 1058\newcommand{\SetAlgoSkip}[1]{\renewcommand{\@algoskip}{\csname#1\endcsname}}% 1059\newcommand{\@algoinsideskip}{\relax}% 1060\newcommand{\SetAlgoInsideSkip}[1]{\renewcommand{\@algoinsideskip}{\csname#1\endcsname}}% 1061% 1062\newsavebox{\algocf@inoutbox}% 1063\newsavebox{\algocf@inputbox}% 1064%% 1065%% 1066\newcommand{\arg@e}{}% 1067\newcommand{\arg@space}{\ }% 1068\newcommand{\BlankLine}{\vskip 1ex}% 1069%% 1070\newcommand{\vespace}{1ex}% 1071\newcommand{\SetInd}[2]{% 1072\skiprule=#1% 1073\skiptext=#2% 1074\skiplength=\skiptext\advance\skiplength by \skiprule\advance\skiplength by 0.4pt}% 1075\SetInd{0.5em}{1em} 1076\algomargin=\leftskip\advance\algomargin by \parindent% 1077\newcommand{\IncMargin}[1]{\advance\algomargin by #1}% 1078\newcommand{\DecMargin}[1]{\advance\algomargin by -#1}% 1079\newcommand{\SetNlSkip}[1]{% 1080 \renewcommand{\@defaultskiptotal}{#1}% 1081 \setlength{\skiptotal}{#1}}% 1082%% 1083\newskip\AlCapSkip\AlCapSkip=0ex% 1084\newskip\AlCapHSkip\AlCapSkip=0ex% 1085\newcommand{\SetAlCapSkip}[1]{\setlength{\AlCapSkip}{#1}}% 1086\newcommand{\SetAlCapHSkip}[1]{\setlength{\AlCapHSkip}{#1}}% 1087\SetAlCapHSkip{.5\algomargin}% 1088%% 1089%% 1090\newcommand{\Indentp}[1]{\advance\leftskip by #1}% 1091\newcommand{\Indp}{\advance\leftskip by 1em}% 1092\newcommand{\Indpp}{\advance\leftskip by 0.5em}% 1093\newcommand{\Indm}{\advance\leftskip by -1em}% 1094\newcommand{\Indmm}{\advance\leftskip by -0.5em}% 1095%% 1096%% 1097%% Line Numbering 1098%% 1099%% 1100% number line style 1101\newcommand{\algocf@nlrelsize}{-2}\newcommand{\SetAlgoNlRelativeSize}[1]{\renewcommand{\algocf@nlrelsize}{#1}}% 1102\newcommand{\NlSty}[1]{\textnormal{\textbf{\relsize{\algocf@nlrelsize}#1}}}% default definition 1103\newcommand{\SetNlSty}[3]{\renewcommand{\NlSty}[1]{\textnormal{\csname#1\endcsname{\relsize{\algocf@nlrelsize}#2##1#3}}}}% 1104% 1105% nl definitions 1106% 1107\newsavebox{\algocf@nlbox}% 1108\newcommand{\algocf@printnl}[1]{% 1109 \ifthenelse{\boolean{algocf@leftlinenumber}}{% 1110 \skiplinenumber=\skiptotal\advance\skiplinenumber by\leftskip% 1111 \strut\raisebox{0pt}{\llap{\NlSty{#1}\kern\skiplinenumber}}\ignorespaces% 1112 }{% 1113 \sbox\algocf@nlbox{\NlSty{#1}}% 1114 \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip\advance\skiplinenumber by-\skiptext% 1115 \advance\skiplinenumber by\algomargin\advance\skiplinenumber by.3em\advance\skiplinenumber by-\wd\algocf@nlbox% 1116 \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\NlSty{#1\ignorespaces}}}\ignorespaces% 1117 }% 1118}% 1119\newcommand{\algocf@nl@sethref}[1]{% 1120 \renewcommand{\theHAlgoLine}{\thealgocfproc.#1}% 1121 \hyper@refstepcounter{AlgoLine}\gdef\@currentlabel{#1}% 1122}% 1123\newcommand{\nl}{% 1124 \@ifundefined{hyper@refstepcounter}{% if not hyperref then do a simple refstepcounter 1125 \refstepcounter{AlgoLine}% 1126 }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href 1127 \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}% 1128 }% now we can do the line numbering 1129 \algocf@printnl{\theAlgoLine}% 1130}% 1131% 1132\newcommand{\nllabel}[1]{\label{#1}}% 1133% 1134\newcommand{\enl}{% 1135 \@ifundefined{hyper@refstepcounte}{% if not hyperref then do a simple refstepcounter 1136 \refstepcounter{AlgoLine}% 1137 }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href 1138 \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}% 1139 }% now we can do the line numbering 1140 \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip% 1141 \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\strut\NlSty{\theAlgoLine}}}\ignorespaces% 1142} 1143%% nlset 1144\newcommand{\nlset}[1]{% 1145 \@ifundefined{hyper@refstepcounter}{\protected@edef\@currentlabel{#1}}{\algocf@nl@sethref{#1}}\algocf@printnl{#1}% 1146}% 1147% 1148%% lnl definitions 1149\newcommand{\lnl}[1]{\nl\label{#1}}% 1150% 1151%% lnlset 1152\newcommand{\lnlset}[2]{\nlset{#2}\label{#1}}% 1153% 1154% set char put at end of each line 1155% 1156\newcommand{\algocf@endline}{\string;} 1157\newcommand{\SetEndCharOfAlgoLine}[1]{\renewcommand{\algocf@endline}{#1}} 1158% 1159% end of line definition 1160% 1161\newcommand{\@endalgocfline}{\algocf@endline}% default definition: printsemicolon 1162\newcommand{\DontPrintSemicolon}{\renewcommand{\@endalgocfline}{\relax}}% 1163\newcommand{\PrintSemicolon}{\renewcommand{\@endalgocfline}{\algocf@endline}}% 1164\newcommand{\@endalgoln}{\@endalgocfline\hfill\strut\par}% 1165% 1166% line numbering 1167% 1168\newcommand{\LinesNumbered}{\setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\everypar={\nl}}}% 1169\newcommand{\LinesNotNumbered}{% 1170 \setboolean{algocf@linesnumbered}{false}% 1171 \renewcommand{\algocf@linesnumbered}{\relax}% 1172}% 1173% 1174\newcommand{\LinesNumberedHidden}{% 1175 \setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\everypar{\stepcounter{AlgoLine}}}}% 1176\newcommand{\ShowLn}{\nlset{\theAlgoLine}\ignorespaces}% display the line number on this line (without labelling) 1177\newcommand{\ShowLnLabel}[1]{\lnlset{#1}{\theAlgoLine}\ignorespaces}% display the line number and label this line 1178% 1179%% 1180% 1181%% 1182%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1183% 1184% Styling text commands 1185% 1186\newcommand{\AlFnt}{\relax}% default definition 1187\newcommand{\SetAlFnt}[1]{\renewcommand{\AlFnt}{#1}}% 1188\newcommand{\AlTitleFnt}{\relax}% default definition 1189\newcommand{\SetAlTitleFnt}[1]{\renewcommand{\AlTitleFnt}{#1}}% 1190% 1191\newcommand{\AlCapFnt}{\relax}% default definition 1192\newcommand{\SetAlCapFnt}[1]{\renewcommand{\AlCapFnt}{#1}}% 1193\newcommand{\AlCapNameFnt}{\relax}% default definition 1194\newcommand{\SetAlCapNameFnt}[1]{\renewcommand{\AlCapNameFnt}{#1}}% 1195% 1196\newcommand{\ProcFnt}{\relax}% default definition 1197\newcommand{\SetProcFnt}[1]{\renewcommand{\ProcFnt}{#1}}% 1198\newcommand{\ProcNameFnt}{\relax}% default definition 1199\newcommand{\SetProcNameFnt}[1]{\renewcommand{\ProcNameFnt}{#1}}% 1200\newcommand{\ProcArgFnt}{\relax}% default definition 1201\newcommand{\SetProcArgFnt}[1]{\renewcommand{\ProcArgFnt}{#1}}% 1202% 1203\newcommand{\AlTitleSty}[1]{\textbf{#1}\unskip}% default definition 1204\newcommand{\SetAlTitleSty}[1]{\renewcommand{\AlTitleSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% 1205\newcommand{\AlCapSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition 1206\newcommand{\SetAlCapSty}[1]{\renewcommand{\AlCapSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% 1207\newcommand{\AlCapNameSty}[1]{\textnormal{#1}\unskip}% default definition 1208\newcommand{\SetAlCapNameSty}[1]{\renewcommand{\AlCapNameSty}[1]{\textnormal{\csname #1\endcsname{##1}}\unskip}}% 1209% 1210\newcommand{\ProcSty}[1]{\AlCapSty{#1}}% 1211\newcommand{\SetProcSty}[1]{\renewcommand{\ProcSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% 1212\newcommand{\ProcNameSty}[1]{\AlCapNameSty{#1}}% 1213\newcommand{\SetProcNameSty}[1]{\renewcommand{\ProcNameSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% 1214\newcommand{\ProcArgSty}[1]{\AlCapNameSty{#1}}% 1215\newcommand{\SetProcArgSty}[1]{\renewcommand{\ProcArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% 1216% 1217\newcommand{\KwSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition 1218\newcommand{\SetKwSty}[1]{\renewcommand{\KwSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% 1219\newcommand{\ArgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetArgSty{emph} 1220\newcommand{\SetArgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% 1221\newcommand{\FuncSty}[1]{\textnormal{\texttt{#1}}\unskip}%\SetFuncSty{texttt} 1222\newcommand{\SetFuncSty}[1]{\renewcommand{\FuncSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% 1223\newcommand{\DataSty}[1]{\textnormal{\textsf{#1}}\unskip}%%\SetDataSty{textsf} 1224\newcommand{\SetDataSty}[1]{\renewcommand{\DataSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% 1225\newcommand{\CommentSty}[1]{\textnormal{\texttt{#1}}\unskip}%%\SetDataSty{texttt} 1226\newcommand{\SetCommentSty}[1]{\renewcommand{\CommentSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% 1227\newcommand{\TitleSty}[1]{#1\unskip}%\SetTitleSty{}{} 1228\newcommand{\SetTitleSty}[2]{\renewcommand{\TitleSty}[1]{% 1229\csname#1\endcsname{\csname#2\endcsname##1}}\unskip}% 1230% 1231%% 1232%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1233% 1234% Block basic commands 1235% 1236\newcommand{\algocf@push}[1]{\advance\skiptotal by #1\moveright #1}% 1237\newcommand{\algocf@pop}[1]{\advance\skiptotal by -#1}% 1238\newcommand{\algocf@addskiptotal}{\advance\skiptotal by 0.4pt\advance\hsize by -0.4pt}% 0.4 pt=width of \vrule 1239\newcommand{\algocf@subskiptotal}{\advance\skiptotal by -0.4pt\advance\hsize by 0.4pt}% 0.4 pt=width of \vrule 1240% 1241%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1242%% 1243%% group of instructions definition 1244% 1245\skiphlne=.8ex% 1246\newcommand{\SetVlineSkip}[1]{\skiphlne=#1}% 1247% 1248%% block with a vertical line end by a little horizontal line 1249\newcommand{\algocf@Vline}[1]{% no vskip in between boxes but a strut to separate them, 1250 \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it 1251 \algocf@push{\skiprule}% move to the right before the vertical rule 1252 \hbox{\vrule% 1253 \vtop{\algocf@push{\skiptext}%move the right after the rule 1254 \vtop{\algocf@addskiptotal\advance\hsize by -\skiplength #1}\Hlne}}\vskip\skiphlne% inside the block 1255 \algocf@pop{\skiprule}%\algocf@subskiptotal% restore indentation 1256 \nointerlineskip}% no vskip after 1257% 1258%% block with a vertical line 1259\newcommand{\algocf@Vsline}[1]{% no vskip in between boxes but a strut to separate them, 1260 \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it 1261 \algocf@push{\skiprule}% move to the right before the vertical rule 1262 \hbox{\vrule% the vertical rule 1263 \vtop{\algocf@push{\skiptext}%move the right after the rule 1264 \vtop{\algocf@addskiptotal\advance\hsize by -\skiplength #1}}}% inside the block 1265 \algocf@pop{\skiprule}}% restore indentation 1266% 1267\newcommand{\algocf@Hlne}{\hrule height 0.4pt depth 0pt width .5em}% 1268% 1269%% block without line 1270\newcommand{\algocf@Noline}[1]{% no vskip in between boxes but a strut to separate them, 1271 \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it 1272 \algocf@push{\skiprule}% 1273 \hbox{% 1274 \vtop{\algocf@push{\skiptext}% 1275 \vtop{\advance\hsize by -\skiplength #1}}}% inside the block 1276 \algocf@pop{\skiprule}% 1277 % \nointerlineskip% no vskip after 1278}% 1279% 1280%% default=NoLine 1281% 1282\newcommand{\algocf@group}[1]{\algocf@Noline{##1}}% group: set of instruction depending from another (ex: then part of the If) 1283\newcommand{\algocf@@block}[2]{\algocf@Noline{##1}\KwSty{##2}\par}% block: group with a end keyword. 1284\newcommand{\algocf@block}[2]{\algocf@@block{#1}{#2}}% command that will be used and redefined accordingly to noend option 1285\newcommand{\algocf@setBlock}{% 1286 \ifthenelse{\boolean{algocf@optnoend}}{% if no end option 1287 \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% block will be a group 1288 }{% else 1289 \renewcommand{\algocf@block}[2]{\algocf@@block{##1}{##2}}% block stays a block 1290 }% 1291}% 1292% 1293\newcommand{\Hlne}{}% little hrizontal line ending a block in vline mode 1294% 1295\newcommand{\@algocf@endoption}[1]{#1}% 1296\newboolean{algocf@optnoend}\setboolean{algocf@optnoend}{false}% 1297% 1298\newcommand{\SetAlgoLongEnd}{%%%%%%%%%%%%%%%%%%%%%%%%% Long End 1299 \setboolean{algocf@optnoend}{false}% 1300 \renewcommand{\@algocf@endoption}[1]{##1}% 1301 \algocf@setBlock}% 1302% 1303\newcommand{\SetAlgoShortEnd}{%%%%%%%%%%%%%%%%%%%%%%%% ShortEnd 1304 \setboolean{algocf@optnoend}{false}% 1305 \renewcommand{\@algocf@endoption}[1]{\@firstword##1 \@nil}% 1306 \algocf@setBlock}% 1307% 1308\newcommand{\SetAlgoNoEnd}{%%%%%%%%%%%%%%%%%%%%%%%%%%% NoEnd 1309 \setboolean{algocf@optnoend}{true}% 1310 \renewcommand{\@algocf@endoption}[1]{}% 1311 \algocf@setBlock}% 1312% 1313\newcommand{\SetAlgoNoLine}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline 1314\renewcommand{\algocf@@block}[2]{\algocf@Noline{##1}\KwSty{##2}\strut\par}% 1315\renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}% 1316\renewcommand{\Hlne}{}}% 1317% 1318\newcommand{\SetAlgoVlined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Vline 1319\renewcommand{\algocf@@block}[2]{\algocf@Vline{##1}}% 1320\renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}% 1321\renewcommand{\Hlne}{\algocf@Hlne}}% 1322% 1323\newcommand{\SetAlgoLined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Line 1324\renewcommand{\algocf@@block}[2]{\strut\algocf@Vsline{##1}\KwSty{##2}\strut\par}% no skip after a block so garantie at least a line 1325\renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}% 1326\renewcommand{\Hlne}{}}% 1327% 1328\newcommand{\SetNothing}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline 1329\renewcommand{\algocf@@block}[2]{\algocf@Noline{##1}\par}% 1330%\long 1331\renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}% 1332\renewcommand{\Hlne}{}}% 1333% 1334%% 1335%% 1336% 1337% 1338%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1339% 1340% ``Input :'''s like command 1341% 1342%%% 1343% text staying at the right of the longer keyword of KwInOut commands 1344% (text of KwInOut commands are all vertically aligned) 1345% 1346\newcommand{\algocf@newinout}{\par\parindent=\wd\algocf@inoutbox}% to put right indentation after a \\ in the KwInOut 1347\newcommand{\SetKwInOut}[2]{% 1348 \sbox\algocf@inoutbox{\KwSty{#2}\algocf@typo:}% 1349 \expandafter\ifx\csname InOutSizeDefined\endcsname\relax% if first time used 1350 \newcommand\InOutSizeDefined{}\setlength{\inoutsize}{\wd\algocf@inoutbox}% 1351 \else% else keep the larger dimension 1352 \ifdim\wd\algocf@inoutbox>\inoutsize\setlength{\inoutsize}{\wd\algocf@inoutbox}\fi% 1353 \fi% the dimension of the box is now defined. 1354 \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1355 \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% 1356 \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\everypar={\relax}}% 1357 {\let\\\algocf@newinout\hangindent=\wd\algocf@inoutbox\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2}\algocf@typo\hfill:}~##1\par}% 1358 \algocf@linesnumbered% reset the numbering of the lines 1359 }}% 1360% 1361%% allow to ajust the skip size of InOut 1362%% 1363\newcommand{\ResetInOut}[1]{% 1364 \sbox\algocf@inoutbox{\hbox{\KwSty{#1}\algocf@typo:\ }}% 1365 \setlength{\inoutsize}{\wd\algocf@inoutbox}% 1366 }% 1367% 1368% 1369%%% 1370% text staying at the right of the keyword. 1371% 1372\newcommand{\algocf@newinput}{\par\parindent=\wd\algocf@inputbox}% to put right indentation after a \\ in the KwInput 1373\newcommand{\SetKwInput}[2]{% 1374 \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1375 \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% 1376 \sbox\algocf@inputbox{\hbox{\KwSty{#2}\algocf@typo: }}% 1377 \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\everypar={\relax}}% 1378 {\let\\\algocf@newinput\hangindent=\wd\algocf@inputbox\hangafter=1\unhbox\algocf@inputbox##1\par}% 1379 \algocf@linesnumbered% reset the numbering of the lines 1380 }}% 1381\newcommand{\SetKwData}[2]{% 1382 \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1383 \expandafter\algocf@mkcmd\csname @#1\endcsname[1]{\DataSty{#2(}\ArgSty{##1}\DataSty{)}}% 1384 \expandafter\algocf@mkcmd\csname#1\endcsname{% 1385 \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% 1386 }% 1387% 1388% 1389%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1390% tallent: 1391% 1392% Add following macros: 1393% \SetKwHangingKw: [kw] ------------ <= hanging determined by [kw] 1394% ------------ 1395% Should act like a combination of \SetKwInput and \SetKw. 1396% Based on \SetKwInput: 1397% - remove ':' at end of keyword 1398% - do not reset numbering 1399% - use separate savebox 1400\newsavebox{\algocf@hangingbox} 1401\newcommand{\algocf@newhanging}{\par\parindent=\wd\algocf@hangingbox}% to put right indentation after a \\ in the KwInput 1402\newcommand{\SetKwHangingKw}[2]{% 1403 \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1404 \expandafter\algocf@mkcmd\csname#1\endcsname[1]{% 1405 \sbox\algocf@hangingbox{\hbox{\KwSty{#2}\algocf@typo\ }}% 1406 {\let\\\algocf@newhanging\hangindent=\wd\algocf@hangingbox\hangafter=1\unhbox\algocf@hangingbox##1\;}% 1407 }% 1408}% 1409% 1410% 1411%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1412% 1413% Comments macros 1414% 1415%%%% 1416% comment in the text, first argument is the name of the macro, second is 1417% the text put before the comment, third is the text put at the end of the 1418% comment. 1419% 1420% first side comment justification 1421\newcommand{\SetSideCommentLeft}{\setboolean{algocf@scleft}{true}}% 1422\newcommand{\SetSideCommentRight}{\setboolean{algocf@scleft}{false}}% 1423\newcommand{\SetNoFillComment}{\setboolean{algocf@optfillcomment}{false}}% 1424\newcommand{\SetFillComment}{\setboolean{algocf@optfillcomment}{true}}% 1425% 1426% next comment and side comment 1427% 1428\newcommand{\algocf@endmarkcomment}{\relax}% 1429\newcommand{\algocf@fillcomment}{% 1430 \ifthenelse{\boolean{algocf@optfillcomment}}{\hfill}{\relax}}% 1431% 1432\newcommand{\algocf@startcomment}{% 1433 \hangindent=\wd\algocf@inputbox\hangafter=1\usebox\algocf@inputbox}% 1434\newcommand{\algocf@endcomment}{\algocf@fillcomment\algocf@endmarkcomment\ignorespaces\par}% 1435\newcommand{\algocf@endstartcomment}{\algocf@endcomment\algocf@startcomment\ignorespaces}% 1436% 1437\newboolean{algocf@sidecomment}% 1438\newboolean{algocf@altsidecomment}\setboolean{algocf@altsidecomment}{false}% 1439\newcommand{\algocf@scpar}{\ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\par}}% 1440\newcommand{\algocf@sclfill}{\ifthenelse{\boolean{algocf@scleft}}{\algocf@fillcomment}{\relax}}% 1441\newcommand{\algocf@scrfill}{\ifthenelse{\boolean{algocf@scleft}}{\relax}{\hfill}}% 1442\newcommand{\algocf@startsidecomment}{\usebox\algocf@inputbox}% 1443\newcommand{\algocf@endsidecomment}{\algocf@endmarkcomment\algocf@scpar}% 1444\newcommand{\algocf@endstartsidecomment}{% 1445 \algocf@sclfill\algocf@endsidecomment% 1446 \algocf@scrfill\algocf@startsidecomment\ignorespaces}% 1447% 1448\newcommand{\SetKwComment}[3]{% 1449 % newcommand or renewcommand ? 1450 \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1451 %%% comment definition 1452 \expandafter\algocf@mkcmd\csname algocf@#1\endcsname[1]{% 1453 \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% 1454 \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\everypar={\relax}}% 1455 {\renewcommand{\algocf@endmarkcomment}{#3}% 1456 \let\\\algocf@endstartcomment% 1457 \algocf@startcomment\CommentSty{% 1458 \strut\ignorespaces##1\strut\algocf@fillcomment#3}\par}% 1459 \algocf@linesnumbered% reset the numbering of the lines 1460 }% 1461 %%% side comment definitions 1462 % option or not? 1463 \expandafter\algocf@mkcmd\csname algocf@#1@star\endcsname{% 1464 \@ifnextchar [{\csname algocf@#1@staropt\endcsname}{\csname algocf@#1@sidecomment\endcsname}% 1465 }% 1466 % manage option 1467 \expandafter\def\csname algocf@#1@staropt\endcsname[##1]##2{% 1468 \ifthenelse{\boolean{algocf@scleft}}{\setboolean{algocf@sidecomment}{true}}{\setboolean{algocf@sidecomment}{false}}% 1469 \ifx##1h\setboolean{algocf@altsidecomment}{true}\SetSideCommentLeft\fi% 1470 \ifx##1f\setboolean{algocf@altsidecomment}{true}\SetSideCommentRight\fi% 1471 \ifx##1l\setboolean{algocf@altsidecomment}{false}\SetSideCommentLeft\fi% 1472 \ifx##1r\setboolean{algocf@altsidecomment}{false}\SetSideCommentRight\fi% 1473 \csname algocf@#1@sidecomment\endcsname{##2}% call sidecomment 1474 \ifthenelse{\boolean{algocf@sidecomment}}{\setboolean{algocf@scleft}{true}}{\setboolean{algocf@scleft}{false}}% 1475 \setboolean{algocf@altsidecomment}{false}% 1476 }% 1477 % side comment 1478 \expandafter\algocf@mkcmd\csname algocf@#1@sidecomment\endcsname[1]{% 1479 \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% 1480 \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\everypar={\relax}}% 1481 {% 1482 \renewcommand{\algocf@endmarkcomment}{#3}% 1483 \let\\\algocf@endstartsidecomment% 1484 % here is the comment 1485 %\ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\algocf@endline\ }% 1486 \ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\@endalgocfline\ }% 1487 \algocf@scrfill\algocf@startsidecomment\CommentSty{% 1488 \strut\ignorespaces##1\strut\algocf@sclfill#3}\algocf@scpar% 1489 }% 1490 \algocf@linesnumbered% reset the numbering of the lines 1491 } 1492 \expandafter\algocf@mkcmd\csname#1\endcsname{\@ifstar{\csname algocf@#1@star\endcsname}{\csname algocf@#1\endcsname}}% 1493}% 1494% 1495%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1496% 1497% Kw 1498% 1499\newcommand{\SetKw}[2]{% 1500 \@ifundefined{#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1501 \expandafter\algocf@mkcmd\csname @#1\endcsname[1]{\KwSty{#2} \ArgSty{##1}}% 1502 \expandafter\algocf@mkcmd\csname#1\endcsname{% 1503 \@ifnextchar\bgroup{\csname @#1\endcsname}{\KwSty{#2}\xspace}}% 1504 }% 1505% 1506%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1507% 1508% KwFunction 1509% 1510\newcommand{\SetKwFunction}[2]{% 1511%%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc 1512 \expandafter\gdef\csname @#1\endcsname##1{\FuncSty{#2(}\ArgSty{##1}\FuncSty{)}}% 1513 \expandafter\gdef\csname#1\endcsname{% 1514 \@ifnextchar\bgroup{\csname @#1\endcsname}{\FuncSty{#2}\xspace}}% 1515}% 1516% 1517% 1518%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1519% 1520% KwTab 1521% 1522\newcommand{\SetKwArray}[2]{% 1523%%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc 1524 \expandafter\gdef\csname @#1\endcsname##1{\DataSty{#2[}\ArgSty{##1}\DataSty{]}}% 1525 \expandafter\gdef\csname#1\endcsname{% 1526 \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% 1527}% 1528% 1529%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1530% 1531% KwBlock 1532% 1533\newcommand{\SetKwBlock}[3]{% 1534\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1535% side text or not? 1536\expandafter\def\csname#1\endcsname{%Begin 1537 \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% 1538% with side text 1539\expandafter\def\csname algocf@#1opt\endcsname(##1)##2{% \Begin(){} 1540 \KwSty{#2} ##1\algocf@block{##2}{\@algocf@endoption{#3}}% 1541 \@ifnextchar({\csname algocf@#1end\endcsname}{\par}}% 1542% without side text at the beginning 1543\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[1]{% \Begin{} 1544 \KwSty{#2}\algocf@block{##1}{\@algocf@endoption{#3}}\@ifnextchar({\csname algocf@#1end\endcsname}{\par}}% 1545% side text at the end 1546\expandafter\def\csname algocf@#1end\endcsname(##1){% \Begin{} 1547 \ ##1\par}% 1548}% 1549% 1550%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1551% 1552% For Switch 1553% 1554\newcommand{\SetKwSwitch}[8]{% #1=\Switch #2=\Case #3=\Other #4=swicth #5=case #6=do #7=otherwise #8=endsw 1555%%%% Switch 1556\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1557% side text or not? 1558\expandafter\def\csname#1\endcsname{%Switch 1559 \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% 1560% with side text 1561\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \Switch(){}{} 1562 \KwSty{#4} \ArgSty{##2} \KwSty{#5} ##1\algocf@block{##3}{\@algocf@endoption{#8}}}% 1563% without side text 1564\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \Switch{}{} 1565 \KwSty{#4} \ArgSty{##1} \KwSty{#5}\algocf@block{##2}{\@algocf@endoption{#8}}}% 1566% side text at the end 1567\expandafter\def\csname algocf@#1end\endcsname(##1){% \Switch{}{}() 1568}% 1569% 1570%%%% Case 1571\@ifundefined{algocf@#2}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1572% side text or not? 1573\expandafter\def\csname#2\endcsname{%Case 1574 \@ifnextchar({\csname algocf@#2opt\endcsname}{\csname algocf@#2\endcsname}}% 1575\expandafter\def\csname u#2\endcsname{%uCase 1576 \@ifnextchar({\csname algocf@u#2opt\endcsname}{\csname algocf@u#2\endcsname}}% 1577\expandafter\def\csname l#2\endcsname{%lCase 1578 \@ifnextchar({\csname algocf@l#2opt\endcsname}{\csname algocf@l#2\endcsname}}% 1579% with side text 1580\expandafter\def\csname algocf@#2opt\endcsname(##1)##2##3{% \Case(){}{} 1581 \KwSty{#6} \ArgSty{##2} ##1\algocf@block{##3}{\@algocf@endoption{#8}}}% 1582\expandafter\def\csname algocf@u#2opt\endcsname(##1)##2##3{% \uCase(){}{} 1583 \KwSty{#6} \ArgSty{##2} ##1\algocf@group{##3}}% 1584\expandafter\def\csname algocf@l#2opt\endcsname(##1)##2##3{% \lCase(){}{} 1585 \KwSty{#6} \ArgSty{##2} ##3\algocf@endline\ ##1\par}% 1586% without side text 1587\expandafter\algocf@mkcmd\csname algocf@#2\endcsname[2]{% \Case{}{} 1588 \KwSty{#6} \ArgSty{##1}\algocf@block{##2}{\@algocf@endoption{#8}}}% 1589\expandafter\algocf@mkcmd\csname algocf@u#2\endcsname[2]{% \uCase{}{} 1590 \KwSty{#6} \ArgSty{##1}\algocf@group{##2}}% 1591\expandafter\algocf@mkcmd\csname algocf@l#2\endcsname[2]{% \lCase{}{} 1592 \KwSty{#6} \ArgSty{##1} ##2}% 1593%%%% Other 1594\@ifundefined{algocf@#3}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1595% side text or not? 1596\expandafter\def\csname#3\endcsname{%Other 1597 \@ifnextchar({\csname algocf@#3opt\endcsname}{\csname algocf@#3\endcsname}}% 1598\expandafter\def\csname l#3\endcsname{%Other 1599 \@ifnextchar({\csname algocf@l#3opt\endcsname}{\csname algocf@l#3\endcsname}}% 1600% with side text 1601\expandafter\def\csname algocf@#3opt\endcsname(##1)##2{% \Other(){}{} 1602 \KwSty{#7} ##1\algocf@block{##2}{\@algocf@endoption{#8}}}% 1603\expandafter\def\csname algocf@l#3opt\endcsname(##1)##2{% \Other(){}{} 1604 \KwSty{#7} ##2\algocf@endline\ ##1\par}% 1605% without side text 1606\expandafter\algocf@mkcmd\csname algocf@#3\endcsname[1]{% default 1607 \KwSty{#7}\algocf@block{##1}{\@algocf@endoption{#8}}}% 1608\expandafter\algocf@mkcmd\csname algocf@l#3\endcsname[1]{% ldefault 1609 \KwSty{#7} ##1}% 1610}% 1611%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1612% 1613% If macros 1614% 1615\newcommand{\SetKwIF}[8]{% #1=\If #2=\ElseIf #3=\Else #4=if #5=then #6=elseif si #7=else #8=endif 1616% 1617% common text 1618\@ifundefined{#1@ifthen}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1619\expandafter\algocf@mkcmd\csname #1@ifthen\endcsname[1]{% 1620 \KwSty{#4} \ArgSty{##1} \KwSty{#5}}% 1621\expandafter\algocf@mkcmd\csname #1@endif\endcsname[1]{\algocf@block{##1}{\@algocf@endoption{#8}}}% 1622\expandafter\algocf@mkcmd\csname #1@noend\endcsname[1]{\algocf@group{##1}}% 1623\expandafter\algocf@mkcmd\csname #1@else\endcsname[1]{\algocf@group{##1}\KwSty{#7}}% 1624\@ifundefined{#2@elseif}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1625\expandafter\algocf@mkcmd\csname #2@elseif\endcsname[1]{% 1626 \KwSty{#6} \ArgSty{##1} \KwSty{#5}}% 1627\@ifundefined{#3@else}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1628\expandafter\algocf@mkcmd\csname #3@else\endcsname{\KwSty{#7}}% 1629%%%% If then { } endif 1630% 1631\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1632% side text or not? 1633\expandafter\def\csname#1\endcsname{% 1634 \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% 1635% with side text 1636\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \If(){}{} 1637 \csname #1@ifthen\endcsname{##2} ##1\csname #1@endif\endcsname{##3}}% 1638% without side text 1639\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \If{}{} 1640 \csname #1@ifthen\endcsname{##1}\csname #1@endif\endcsname{##2}}% 1641% 1642%%%% If then {} else {} endif 1643% 1644% side text or not? 1645\expandafter\def\csname e#1\endcsname{% 1646 \@ifnextchar({\csname algocf@e#1thenopt\endcsname}{\csname algocf@e#1then\endcsname}}% 1647% with side text after if 1648\expandafter\def\csname algocf@e#1thenopt\endcsname(##1)##2##3{% \eIf() 1649 \csname #1@ifthen\endcsname{##2} ##1\csname #1@else\endcsname{##3}% 1650 \csname algocf@e#1thenelse\endcsname}% 1651% without side text after if 1652\expandafter\def\csname algocf@e#1then\endcsname##1##2{% \eIf() 1653 \csname #1@ifthen\endcsname{##1}\csname #1@else\endcsname{##2}% 1654 \csname algocf@e#1thenelse\endcsname}% 1655% side text after else or not ? 1656\expandafter\def\csname algocf@e#1thenelse\endcsname{% 1657 \@ifnextchar({\csname algocf@e#1elseopt\endcsname}{\csname algocf@e#1else\endcsname}}% 1658% else with a side text 1659\expandafter\def\csname algocf@e#1elseopt\endcsname(##1)##2{% 1660 ##1\csname #1@endif\endcsname{##2}}% 1661% else without side text 1662\expandafter\algocf@mkcmd\csname algocf@e#1else\endcsname[1]{% 1663 \csname #1@endif\endcsname{##1}}% 1664% 1665%%%% If then 1666% 1667% side text or not? 1668\expandafter\def\csname l#1\endcsname{% lif 1669 \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}}% 1670\expandafter\def\csname u#1\endcsname{% uif 1671 \@ifnextchar({\csname algocf@u#1opt\endcsname}{\csname algocf@u#1\endcsname}}% 1672% with side text 1673\expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lIf(){}{} 1674 \csname #1@ifthen\endcsname{##2} ##3\algocf@endline\ ##1\par}% 1675\expandafter\def\csname algocf@u#1opt\endcsname(##1)##2##3{% \uIf(){}{} 1676 \csname #1@ifthen\endcsname{##2} ##1\csname#1@noend\endcsname{##3}}% 1677% without side text 1678\expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lIf{}{} 1679 \csname #1@ifthen\endcsname{##1} ##2}% 1680\expandafter\algocf@mkcmd\csname algocf@u#1\endcsname[2]{% \uIf{}{} 1681 \csname #1@ifthen\endcsname{##1}\csname#1@noend\endcsname{##2}}% 1682% 1683%%%% ElseIf {} endif 1684% 1685\@ifundefined{algocf@#2}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1686% side text or not? 1687\expandafter\def\csname#2\endcsname{% ElseIf 1688 \@ifnextchar({\csname algocf@#2opt\endcsname}{\csname algocf@#2\endcsname}}% 1689% with side text 1690\expandafter\def\csname algocf@#2opt\endcsname(##1)##2##3{% \ElseIf(){}{} 1691 \csname #2@elseif\endcsname{##2} ##1\csname #1@endif\endcsname{##3}}% 1692% without side text 1693\expandafter\algocf@mkcmd\csname algocf@#2\endcsname[2]{% \ElseIf{}{} 1694 \csname #2@elseif\endcsname{##1}\csname #1@endif\endcsname{##2}}% 1695% 1696%%%% ElseIf 1697% 1698% side text or not? 1699\expandafter\def\csname l#2\endcsname{% lElseIf 1700 \@ifnextchar({\csname algocf@l#2opt\endcsname}{\csname algocf@l#2\endcsname}}% 1701\expandafter\def\csname u#2\endcsname{% uElseIf 1702 \@ifnextchar({\csname algocf@u#2opt\endcsname}{\csname algocf@u#2\endcsname}}% 1703% with side text 1704\expandafter\def\csname algocf@l#2opt\endcsname(##1)##2##3{% \lElseIf(){}{} 1705 \csname #2@elseif\endcsname{##2} ##3\algocf@endline\ ##1\par}% 1706\expandafter\def\csname algocf@u#2opt\endcsname(##1)##2##3{% \uElseIf(){}{} 1707 \csname #2@elseif\endcsname{##2} ##1\csname #1@noend\endcsname{##3}}% 1708% without side text 1709\expandafter\algocf@mkcmd\csname algocf@l#2\endcsname[2]{% \lElseIf{}{} 1710 \csname #2@elseif\endcsname{##1} ##2}% 1711\expandafter\algocf@mkcmd\csname algocf@u#2\endcsname[2]{% \uElseIf{}{} 1712 \csname #2@elseif\endcsname{##1}\csname #1@noend\endcsname{##2}}% 1713% 1714%%%% Else {} endif 1715% 1716\@ifundefined{algocf@#3}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1717% side text or not? 1718\expandafter\def\csname#3\endcsname{% Else 1719 \@ifnextchar({\csname algocf@#3opt\endcsname}{\csname algocf@#3\endcsname}}% 1720% with side text 1721\expandafter\def\csname algocf@#3opt\endcsname(##1)##2{% \Else(){} 1722 \csname #3@else\endcsname\ ##1\csname #1@endif\endcsname{##2}}% 1723% without side text 1724\expandafter\algocf@mkcmd\csname algocf@#3\endcsname[1]{% \Else{} 1725 \csname #3@else\endcsname\csname #1@endif\endcsname{##1}}% 1726% 1727%%%% Else 1728% 1729% side text or not? 1730\expandafter\def\csname l#3\endcsname{% lElse 1731 \@ifnextchar({\csname algocf@l#3opt\endcsname}{\csname algocf@l#3\endcsname}}% 1732\expandafter\def\csname u#3\endcsname{% uElse 1733 \@ifnextchar({\csname algocf@u#3opt\endcsname}{\csname algocf@u#3\endcsname}}% 1734% with side text 1735\expandafter\def\csname algocf@l#3opt\endcsname(##1)##2{% \lElse(){} 1736 \csname #3@else\endcsname\ ##2\algocf@endline\ ##1\par}% 1737\expandafter\def\csname algocf@u#3opt\endcsname(##1)##2{% \uElse(){} 1738 \csname #3@else\endcsname\ ##1\csname #1@noend\endcsname{##2}}% 1739% without side text 1740\expandafter\algocf@mkcmd\csname algocf@l#3\endcsname[1]{% \lElse{} 1741 \csname #3@else\endcsname\ ##1}% 1742\expandafter\algocf@mkcmd\csname algocf@u#3\endcsname[1]{% \uElse{} 1743 \csname #3@else\endcsname\csname #1@noend\endcsname{##1}}% 1744}% 1745% 1746%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1747% 1748% For macros 1749% 1750\newcommand{\SetKwFor}[4]{% 1751\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1752% side text or not? 1753\expandafter\def\csname#1\endcsname{%For 1754 \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% 1755\expandafter\def\csname l#1\endcsname{%For 1756 \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}}% 1757% with side text 1758\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \For(){}{} 1759 \KwSty{#2} \ArgSty{##2} \KwSty{#3} ##1\algocf@block{##3}{\@algocf@endoption{#4}}}% 1760\expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lFor(){}{} 1761 \KwSty{#2} \ArgSty{##2} \KwSty{#3} ##3\algocf@endline\ ##1\par}% 1762% without side text 1763\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \For{}{} 1764 \KwSty{#2} \ArgSty{##1} \KwSty{#3}\algocf@block{##2}{\@algocf@endoption{#4}}}% 1765\expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lFor{}{} 1766 \KwSty{#2} \ArgSty{##1} \KwSty{#3} ##2}% 1767}% 1768% 1769%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1770% 1771% Repeat macros 1772% 1773\newcommand{\SetKwRepeat}[3]{% 1774\@ifundefined{algocf@#1}{\let\algocf@mkcmd=\newcommand}{\let\algocf@mkcmd=\renewcommand}% 1775% side text or not? 1776\expandafter\def\csname#1\endcsname{% Repeat 1777 \@ifnextchar({\csname algocf@#1opt\endcsname}{\csname algocf@#1\endcsname}}% 1778\expandafter\def\csname l#1\endcsname{% lRepeat 1779 \@ifnextchar({\csname algocf@l#1opt\endcsname}{\csname algocf@l#1\endcsname}}% 1780% with side text 1781\expandafter\def\csname algocf@#1opt\endcsname(##1)##2##3{% \Repeat(){}{} 1782 \KwSty{#2} ##1\algocf@group{##3}\KwSty{#3} \ArgSty{##2}% 1783 \@ifnextchar({\csname algocf@#1optopt\endcsname}{\@endalgoln}% 1784}% 1785\expandafter\def\csname algocf@#1optopt\endcsname(##1){% \Repeat(){}{}() 1786 ##1\@endalgoln}% 1787\expandafter\def\csname algocf@l#1opt\endcsname(##1)##2##3{% \lRepeat(){}{} 1788 \KwSty{#2} ##3 \KwSty{#3} \ArgSty{##2}\algocf@endline\ ##1\par}% 1789% without side text 1790\expandafter\algocf@mkcmd\csname algocf@#1\endcsname[2]{% \Repeat{}{} 1791 \KwSty{#2}\algocf@group{##2}\KwSty{#3} \ArgSty{##1}% 1792 \@ifnextchar({\csname algocf@#1optopt\endcsname}{\@endalgoln}% 1793}% 1794\expandafter\algocf@mkcmd\csname algocf@l#1\endcsname[2]{% \lRepeat{}{} 1795 \KwSty{#2} ##2 \KwSty{#3} \ArgSty{##1}}% 1796}% 1797% 1798% 1799% 1800%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1801%%%%%%%%%%%%%%%%%%%% Environments definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%% 1802%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1803% 1804%% 1805%% Caption management 1806%% 1807% for the following macros: 1808% #1 is given by caption and is equal to fnum@algocf 1809% #2 is the text given in argument by the user in the \caption macro 1810% 1811%%%%% text of caption 1812\newcommand{\algocf@captionlayout}[1]{#1}% 1813\newcommand{\SetAlgoCaptionLayout}[1]{% 1814 \renewcommand{\algocf@captionlayout}[1]{\csname #1\endcsname{##1}}}% 1815\newcommand{\algocf@capseparator}{:}% 1816\newcommand{\SetAlgoCaptionSeparator}[1]{\renewcommand{\algocf@capseparator}{#1}}% 1817\newcommand{\algocf@captiontext}[2]{% 1818 \algocf@captionlayout{\AlCapSty{\AlCapFnt #1\algocf@typo\algocf@capseparator}\nobreakspace% 1819 \AlCapNameSty{\AlCapNameFnt{}#2}}}% text of caption 1820% 1821%%%%% default caption of algorithm: used if no specific style caption is defined 1822\newcommand{\algocf@makecaption}[2]{% 1823 \addtolength{\hsize}{\algomargin}% 1824 \sbox\@tempboxa{\algocf@captiontext{#1}{#2}}% 1825 \ifdim\wd\@tempboxa >\hsize% % if caption is longer than a line 1826 \hskip .5\algomargin% 1827 \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}% then caption is not centered 1828 \else% 1829 \global\@minipagefalse% 1830 \hbox to\hsize{\hfil\box\@tempboxa\hfil}% else caption is centered 1831 \fi% 1832 \addtolength{\hsize}{-\algomargin}% 1833}% 1834% 1835\newsavebox\algocf@capbox% 1836\newcommand{\algocf@makecaption@plain}[2]{% 1837 \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}}% 1838\newcommand{\algocf@makecaption@boxed}[2]{% 1839 \addtolength{\hsize}{-\algomargin}% 1840 \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}% 1841 \addtolength{\hsize}{\algomargin}% 1842 }% 1843% 1844\newcommand{\algocf@makecaption@tworuled}[2]{\algocf@makecaption@ruled{#1}{#2}}% 1845\newcommand{\algocf@makecaption@algoruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% 1846\newcommand{\algocf@makecaption@boxruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% 1847\newcommand{\algocf@makecaption@ruled}[2]{% 1848 \global\sbox\algocf@capbox{\hskip\AlCapHSkip% .5\algomargin% 1849 \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}}% then caption is not centered 1850}% 1851% 1852\newlength{\algoheightruledefault}\setlength{\algoheightruledefault}{0.8pt}% 1853\newlength{\algoheightrule}\setlength{\algoheightrule}{\algoheightruledefault}% 1854\newlength{\algotitleheightruledefault}\setlength{\algotitleheightruledefault}{0.8pt}% 1855\newlength{\algotitleheightrule}\setlength{\algotitleheightrule}{\algotitleheightruledefault}% 1856\newcommand{\algocf@caption@plain}{\vskip\AlCapSkip\box\algocf@capbox}% 1857\newcommand{\algocf@caption@boxed}{\vskip\AlCapSkip\box\algocf@capbox}% 1858\newcommand{\algocf@caption@ruled}{\box\algocf@capbox\kern\interspacetitleruled\hrule height\algotitleheightrule depth0pt\kern\interspacealgoruled}% 1859\newcommand{\algocf@caption@tworuled}{\box\algocf@capbox\kern\interspacetitleruled}% 1860\newcommand{\algocf@caption@algoruled}{\algocf@caption@ruled}% 1861\newcommand{\algocf@caption@boxruled}{% 1862 \addtolength{\hsize}{-0.8pt}% 1863 \hbox to\hsize{% 1864 \vrule%\hskip-0.35pt% 1865 \vbox{% 1866 \hrule\vskip\interspacetitleboxruled% 1867 \hbox to\hsize{\unhbox\algocf@capbox\hfill}\vskip\interspacetitleboxruled% 1868 }% 1869 %\hskip-0.35pt% 1870 \vrule% 1871 }\nointerlineskip% 1872 \addtolength{\hsize}{0.8pt}% 1873}% 1874% 1875% 1876%%%% set caption for the environment 1877\newcommand{\algocf@captionref}{% 1878 \renewcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\algocf@algocfref}}% 1879 \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value 1880 \let\old@thealgocf=\thealgocf\renewcommand{\thealgocf}{{\relsize{\algocf@refrelsize}\algocf@algocfref}}% 1881 \gdef\@currentlabel{\algocf@algocfref}% let the label use the new ref 1882}% 1883% 1884% Unfortunatly, we also need our own caption to set some specific stuff for special references. But after these 1885% settings, we call the original caption. 1886% 1887\long\def\algocf@caption@algo#1[#2]#3{% 1888 \ifthenelse{\equal{\algocf@algocfref}{\relax}}{}{\algocf@captionref}% 1889 \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else... 1890 \ifthenelse{\equal{\algocf@algocfref}{\relax}}{\renewcommand{\theHalgocf}{\thealgocf}}{% take algocf as Href 1891 \renewcommand{\theHalgocf}{\algocf@algocfref}}%else if SetAlgoRefName done, take this name as ref. 1892 \hyper@refstepcounter{algocf}%set algocf as category of ref 1893 }% 1894 \algocf@latexcaption{#1}[#2]{#3}% call original caption 1895}% 1896% 1897% beamer define is own caption overrinding latex caption! 1898% as we need it, we have put here the original definition 1899% to handle manual ref, unfortunately we have to add one line to handle algocf@algocfref 1900\long\def\algocf@latexcaption#1[#2]#3{% original definition of caption 1901 \par% 1902 \addcontentsline{\csname ext@#1\endcsname}{#1}% 1903 {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}% 1904 \begingroup% 1905 \@parboxrestore% 1906 \if@minipage% 1907 \@setminipage% 1908 \fi% 1909 \normalsize% 1910 \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par% 1911 \endgroup% 1912}% 1913% 1914% \ifx\beamer@makecaption\undefined% 1915% \else% beamer detected 1916\ifx\@makecaption\undefined% 1917\newcommand{\@makecaption}[2]{\relax}% 1918\fi% 1919%% 1920 1921% 1922% more and more packages redefine \@caption instead of just \@makecaption which makes algorithm2e 1923% caption not works since based on standard \@caption. So we force the definition of \@caption to be 1924% the standard one (the one from LaTeX) inside algorithm environment. 1925% 1926% unfortunately, makecaption is called with \ignorespace #3 so 1927% we can't do the @currentlabel definition inside \algocf@captionproctext 1928\long\def\algocf@caption@proc#1[#2]#3{% 1929 \ifthenelse{\boolean{algocf@nokwfunc}}{\relax}{% 1930 \SetKwFunction{\algocf@captname#3@}{\algocf@captname#3@}% 1931 }% 1932 % we tell hyperref to use algocfproc as category and to take the appropriate ref. 1933 \ifthenelse{\boolean{algocf@func}}{\def\@proc@func{algocffunc}}{\def\@proc@func{algocfproc}}% 1934 \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else... 1935 \ifthenelse{\boolean{algocf@procnumbered}}{% 1936 \expandafter\def\csname theH\@proc@func\endcsname{\algocf@captname#3@}%if procnumbered, take \thealgocf as ref 1937 }{% 1938 \expandafter\def\csname theH\@proc@func\endcsname{\algocf@captname#3@}%else take procedure or function name 1939 }% 1940 \hyper@refstepcounter{\@proc@func}% 1941 }% 1942 \ifthenelse{\boolean{algocf@procnumbered}}{\relax}{% 1943 \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value 1944 \gdef\@currentlabel{\algocf@captname#3@}% let the label be the name of the function, not the counter 1945 }% 1946 \ifthenelse{\equal{\algocf@captparam#2@}{\arg@e}}{% if no paramater, we remove the () 1947 \algocf@latexcaption{#1}[\algocf@procname\nobreakspace\algocf@captname#2@]{#3}% 1948 }{% else we give the complete name 1949 \algocf@latexcaption{#1}[\algocf@procname\nobreakspace#2]{#3}% 1950 }% 1951}% 1952%% 1953%%% setcaption 1954\newcommand{\algocf@setcaption}{% 1955 \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment, caption text must be changed 1956 \let\algocf@oldcaptiontext=\algocf@captiontext% 1957 \renewcommand{\algocf@captiontext}[2]{% 1958 \algocf@captionproctext{##1}{##2}% 1959 }% 1960 }{}% 1961 \let\algocf@savecaption=\@caption% 1962 \ifthenelse{\boolean{algocf@procenvironment}}{\let\@caption=\algocf@caption@proc}{\let\@caption=\algocf@caption@algo}% 1963 \let\algocf@oldmakecaption=\@makecaption% 1964 \renewcommand{\@makecaption}[2]{% 1965 \expandafter\csname algocf@makecaption@\algocf@style\endcsname{##1}{##2}% 1966 }% 1967}% 1968% 1969%%%%% reset caption 1970% 1971% since we have force the LaTeX caption for algorithm environment, we must go back to the caption 1972% used in the text. 1973\newcommand{\algocf@resetcaption}{% 1974 \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment 1975 \let\thealgocf=\old@thealgocf% restore normal counter printing 1976 \let\algocf@captiontext=\algocf@oldcaptiontext% restore normal caption text 1977 }{}% 1978 \let\@caption=\algocf@savecaption% now restore caption outside algo/proc/func environment 1979 \let\@makecaption=\algocf@oldmakecaption% and restore makecaption outside outside algo/proc/func environment 1980 \algocf@resetfnum% 1981}% 1982% 1983%%%%% nocaptionofalgo and restorecaptionofalgo -- 1984\newcommand{\NoCaptionOfAlgo}{% 1985 \let\@old@algocf@captiontext=\algocf@captiontext% 1986 \renewcommand{\algocf@captiontext}[2]{\AlCapNameSty{\AlCapNameFnt{}##2}}% 1987}% 1988\newcommand{\RestoreCaptionOfAlgo}{% 1989 \let\algocf@captiontext=\@old@algocf@captiontext% 1990}% 1991% 1992% ---------------------- algocf environment 1993% 1994\newcounter{algocfline}% % new counter to make lines numbers be internally 1995\setcounter{algocfline}{0}% % different in different algorithms 1996\newcounter{algocfproc}% counter to count all algo environment (proc, func), just used by hyperref to avoir "same 1997\setcounter{algocfproc}{0}% identifier" error caused by algocf being set to '-' for procedure or function or not 1998 % changed if no caption is given. 1999% 2000\expandafter\ifx\csname algocf@within\endcsname\relax% if \algocf@within doesn't exist 2001\newcounter{algocf}% % just define a new counter 2002\renewcommand{\thealgocf}{\@arabic\c@algocf}% and the way it is printed 2003\else% else 2004\newcounter{algocf}[\algocf@within]% % counter is numbered within \algocf@within 2005\renewcommand\thealgocf{\csname the\algocf@within\endcsname.\@arabic\c@algocf}% 2006\fi% 2007% 2008\def\fps@algocf{htbp}% % default 2009\def\ftype@algocf{10}% % float type 2010\def\ext@algocf{\algocf@list} % loa by default, lof if figure option used 2011\newcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}% 2012\newcommand{\algocf@resetfnum}{\renewcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}}% 2013\newenvironment{algocf}% % float environment for algorithms 2014 {\@float{algocf}}% 2015 {\end@float}% 2016\newenvironment{algocf*}% % float* environment for algorithms 2017 {\@dblfloat{algocf}}% 2018 {\end@dblfloat}% 2019% 2020\def\algocf@seclistalgo{}% 2021\ifx\l@chapter\undefined\let\algocf@seclistalgo=\section\else\let\algocf@seclistalgo=\chapter\fi% 2022\@ifundefined{if@restonecol}{\newif\if@restonecol}\relax% 2023\newcommand\listofalgocfs{% 2024 \ifx\algocf@seclistalgo\chapter% 2025 \if@twocolumn\@restonecoltrue\onecolumn\else\@restonecolfalse\fi% 2026 \fi% 2027 \algocf@seclistalgo*{\listalgorithmcfname}% 2028 \@mkboth{\MakeUppercase\listalgorithmcfname}% 2029 {\MakeUppercase\listalgorithmcfname}% 2030 \@starttoc{loa}% 2031 \ifx\algocf@seclistalgo\chapter% 2032 \if@restonecol\twocolumn\fi% 2033 \fi% 2034} 2035% 2036\newcommand*\l@algocf{\@dottedtocline{1}{1em}{2.3em}}% line of the list 2037% 2038% ---------------------- algorithm environment 2039% 2040%%%%%%% 2041%% 2042%% Algorithm environment definition 2043%% 2044%%%%%%% 2045%% 2046% 2047\newsavebox\algocf@algoframe% 2048\def\@algocf@pre@plain{\relax}% action to be done before printing the algo. 2049\def\@algocf@post@plain{\relax}% action to be done after printing the algo. 2050\def\@algocf@capt@plain{bottom}% where the caption should be localized. 2051\def\@algocf@pre@boxed{\noindent\begin{lrbox}{\algocf@algoframe}} 2052\def\@algocf@post@boxed{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% 2053\def\@algocf@capt@boxed{under}% 2054\def\@algocf@pre@ruled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% 2055\def\@algocf@post@ruled{\kern\interspacealgoruled\hrule height\algoheightrule\relax}% 2056\def\@algocf@capt@ruled{top}% 2057\def\@algocf@pre@algoruled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% 2058\def\@algocf@post@algoruled{\kern\interspacealgoruled\hrule height\algoheightrule \relax}% 2059\def\@algocf@capt@algoruled{top}% 2060\def\@algocf@pre@tworuled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% 2061\def\@algocf@post@tworuled{\kern\interspacealgoruled\hrule height\algoheightrule\relax}% 2062\def\@algocf@capt@tworuled{top}% 2063\def\@algocf@pre@boxruled{\noindent\begin{lrbox}{\algocf@algoframe}}% 2064\def\@algocf@post@boxruled{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% 2065\def\@algocf@capt@boxruled{above}% 2066% 2067\newcommand{\noalgocaption}{\def\@algocf@capt@ruled{none}} 2068% 2069%% before algocf or figure environment 2070\newcommand{\@algocf@init@caption}{% 2071 \ifthenelse{\boolean{algocf@procenvironment}}{% if we are inside a procedure/function environment 2072 \@algocf@proctitleofalgo% set Titleofalgo to Procedure: or Function: 2073 % accordingly to the environment 2074 \let\old@thealgocf=\thealgocf\ifthenelse{\boolean{algocf@procnumbered}}{\relax}{% 2075 \renewcommand{\thealgocf}{-}}% 2076 }{% else inside environment algorithm 2077 \@algocf@algotitleofalgo% fix name for \Titleofalgo to \algorithmcfname 2078 }% 2079 \algocf@setcaption% set caption to our caption style 2080}% 2081% 2082\newcommand{\@algofloatboxreset}{\@setminipage} 2083\newcommand{\@algocf@init}{% 2084 \refstepcounter{algocfline}% 2085 \stepcounter{algocfproc}%to have a different counter for each environment and being abble to make the difference 2086 %between href of algoline in different algorithms. 2087 \ifthenelse{\boolean{algocf@optnoend}}{% 2088 \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% 2089 }{% 2090 \renewcommand{\algocf@block}[2]{\algocf@@block{##1}{##2}}% 2091 }% 2092}% 2093%% after the end of algocf or figure environment 2094\newcommand{\@algocf@term@caption}{% 2095 \algocf@resetcaption% restore original caption 2096}% 2097% 2098\newcommand{\@algocf@term}{% 2099 \setboolean{algocf@algoH}{false}% no H by default 2100 \ifthenelse{\boolean{algocf@optnoend}}{% 2101 \renewcommand{\algocf@block}[2]{\algocf@@block{##1}{##2}}% 2102 }{% 2103 \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% 2104 }% 2105 \SetAlgoRefName{\relax}% 2106}% 2107% 2108%%%%%%%%%%%%%%%%% 2109%% makethealgo: macro which print effectively the algo in its box 2110%% 2111\newsavebox\algocf@algobox% 2112\newcommand{\algocf@makethealgo}{% 2113 \vtop{% 2114 % place caption above if needed bye the style 2115 \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{above}}% 2116 {\csname algocf@caption@\algocf@style\endcsname}{}% 2117 % 2118 % precommand according to the style 2119 \csname @algocf@pre@\algocf@style\endcsname% 2120 % place caption at top if needed bye the style 2121 \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{top}}% 2122 {\csname algocf@caption@\algocf@style\endcsname}{}% 2123 % 2124 \box\algocf@algobox% the algo 2125 % place caption at bottom if needed bye the style 2126 \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{bottom}}% 2127 {\csname algocf@caption@\algocf@style\endcsname}{}% 2128 % postcommand according to the style 2129 \csname @algocf@post@\algocf@style\endcsname% 2130 % place caption under if needed bye the style 2131 \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{under}}% 2132 {\csname algocf@caption@\algocf@style\endcsname}{}% 2133 }% 2134}% 2135%%%%%%%%%%%%%%%%%%% 2136% 2137%% at the beginning of algocf or figure environment 2138\newcommand{\@algocf@start}{% 2139 \@algoskip% 2140 \begin{lrbox}{\algocf@algobox}% 2141 \setlength{\algowidth}{\hsize}% 2142 \vbox\bgroup% save all the algo in a box 2143 \hbox to\algowidth\bgroup\hbox to \algomargin{\hfill}\vtop\bgroup% 2144 \ifthenelse{\boolean{algocf@slide}}{\parskip 0.5ex\color{black}}{}% 2145 % initialization 2146 \addtolength{\hsize}{-1.5\algomargin}% 2147 \let\@mathsemicolon=\;\def\;{\ifmmode\@mathsemicolon\else\@endalgoln\fi}% 2148 \raggedright\AlFnt{}% 2149 \ifthenelse{\boolean{algocf@slide}}{\IncMargin{\skipalgocfslide}}{}% 2150 \@algoinsideskip% 2151}% 2152% 2153%% at the end of algocf or figure environment 2154\newcommand{\@algocf@finish}{% 2155 \@algoinsideskip% 2156 \egroup%end of vtop which contain all the text 2157 \hfill\egroup%end of hbox wich contains [margin][vtop] 2158 \ifthenelse{\boolean{algocf@slide}}{\DecMargin{\skipalgocfslide}}{}% 2159 % 2160 \egroup%end of main vbox 2161 \end{lrbox}% 2162 \algocf@makethealgo% print the algo 2163 \@algoskip% 2164 % restore dimension and macros 2165 \setlength{\hsize}{\algowidth}% 2166 \lineskip\normallineskip\setlength{\skiptotal}{\@defaultskiptotal}% 2167 \let\;=\@mathsemicolon% 2168}% 2169% 2170%%%%%%%%%%%%%%%%%%%% 2171%% basic definition of the environment algorithm 2172%% 2173% 2174\newboolean{algocf@procenvironment}\setboolean{algocf@procenvironment}{false}% 2175\newboolean{algocf@func}\setboolean{algocf@func}{false}% 2176\newboolean{algocf@algoH}\setboolean{algocf@algoH}{false}% 2177\newboolean{algocf@algostar}\setboolean{algocf@algostar}{false}% 2178% 2179%%% environment for {algorithm}[H] 2180\newenvironment{algocf@Here}{\noindent% 2181 \def\@captype{algocf}% if not defined, caption exit with an error 2182 \begin{minipage}{\hsize}% 2183}{% 2184 \end{minipage}%\par% 2185}% 2186%%% real algorithm environment which manages H and * option 2187% \let\algocf@originalfloatboxreset=\@floatboxreset% 2188% \let\@floatboxreset=\@algofloatboxreset% 2189\newenvironment{algocf@algorithm}[1][htbp]{ 2190 \@algocf@init% 2191 \ifthenelse{\equal{\algocf@float}{figure}}{% if option figure set 2192 \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option 2193 \begin{figure*}[#1]% call figure* 2194 }{% else algorithm environment with figure option 2195 \begin{figure}[#1]% call figure 2196 }% 2197 }{% else normal algorithm environment 2198 \@algocf@init@caption% 2199 \ifthenelse{\equal{#1}{H}}{% if [H] algorithm 2200 \if@twocolumn\@latex@error{[H] in two columns mode is not allowed for algorithms}\fi% TODO: SCREAM if H in two colums! 2201 \setboolean{algocf@algoH}{true}\begin{algocf@Here}% call corresponding environment 2202 }{% else floating algorithm environment 2203 \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* 2204 \begin{algocf*}[#1]% call algocf* 2205 }{% else algorithm environment 2206 \begin{algocf}[#1]% call algcf 2207 }% 2208 }% 2209 }% fin test option figure ou pas 2210 \@algocf@start% 2211 \@ResetCounterIfNeeded% 2212 \algocf@linesnumbered\ignorespaces% 2213}{% 2214 \@algocf@finish% 2215 \ifthenelse{\equal{\algocf@float}{figure}}{% 2216 \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option 2217 \end{figure*}% call figure* 2218 }{% else algorithm environment with figure option 2219 \end{figure}% call figure 2220 }% 2221 }{% 2222 \@algocf@term@caption% 2223 \ifthenelse{\boolean{algocf@algoH}}{% if [H] algorithm 2224 \end{algocf@Here}\par% call corresponding environment 2225 }{% else floating algorithm environment 2226 \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* 2227 \end{algocf*}% call algocf* 2228 }{% else algorithm environment 2229 \end{algocf}% call algocf 2230 }% 2231 }% 2232 }% 2233 \@algocf@term\ignorespacesafterend% 2234}% 2235% 2236%%% user algorithm environment 2237\newenvironment{\algocf@envname}[1][htbp]{% 2238 \setboolean{algocf@algostar}{false}% 2239 \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}% 2240 \begin{algocf@algorithm}[#1]\ignorespaces% 2241}{% 2242 \end{algocf@algorithm}\ignorespacesafterend% 2243}% 2244%%% user algorithm* environment 2245\newenvironment{\algocf@envname*}[1][htbp]{% 2246 \setboolean{algocf@algostar}{true}% 2247 \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}% 2248 \begin{algocf@algorithm}[#1]\ignorespaces% 2249}{% 2250 \end{algocf@algorithm}\ignorespacesafterend% 2251}% 2252% 2253%%%%%%%%%%%%%%%%%%%%%%% 2254%%% 2255% 2256\expandafter\newcommand\csname\algocf@listofalgorithms\endcsname{% 2257 \ifthenelse{\equal{\algocf@float}{figure}}{\listoffigures}{\listofalgocfs}% 2258}% 2259%%% 2260%%% 2261% 2262% ---------------------- procedure and function environments 2263% 2264% 2265% -- new style (used in particular in the caption of function and procedure environments) 2266% 2267% three macros to extract parts of the caption 2268\gdef\algocf@captname#1(#2)#3@{#1} % keep characters before the first brace 2269\gdef\algocf@captparam#1(#2)#3@{#2} % keep character in between the braces 2270\gdef\algocf@captother#1(#2)#3@{#3} % keep character after the braces 2271% 2272%%% Text of caption for Procedure or Function 2273\newcommand{\algocf@captionproctext}[2]{% 2274 {% 2275 \ProcSty{\ProcFnt\algocf@procname\ifthenelse{\boolean{algocf@procnumbered}}{\nobreakspace\thealgocf\algocf@typo\algocf@capseparator}{\relax}}% 2276 \nobreakspace\ProcNameSty{\ProcNameFnt\algocf@captname #2@}% Name of the procedure in ProcName Style. 2277 \ifthenelse{\equal{\algocf@captparam #2@}{\arg@e}}{}{% if no argument, write nothing 2278 \ProcNameSty{\ProcNameFnt(}\ProcArgSty{\ProcArgFnt\algocf@captparam #2@}\ProcNameSty{\ProcNameFnt)}%else put arguments in ProcArgSty: 2279 }% endif 2280 \algocf@captother #2@% 2281 }% 2282}% 2283% 2284% 2285% -- procedure and function environments are defined from algocf@algorithm environment 2286% 2287\newenvironment{procedure}[1][htbp]{% 2288 \setboolean{algocf@algostar}{false}% 2289 \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}% 2290 \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}% 2291 \begin{algocf@algorithm}[#1]\ignorespaces% 2292}{% 2293 \end{algocf@algorithm}\ignorespacesafterend% 2294}% 2295\newenvironment{function}[1][htbp]{% 2296 \setboolean{algocf@algostar}{false}% 2297 \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}% 2298 \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}% 2299 \begin{algocf@algorithm}[#1]\ignorespaces% 2300}{% 2301 \end{algocf@algorithm}\ignorespacesafterend% 2302}% 2303% 2304\newenvironment{procedure*}[1][htbp]{% 2305 \setboolean{algocf@algostar}{true}% 2306 \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}% 2307 \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}% 2308 \begin{algocf@algorithm}[#1]\ignorespaces% 2309}{% 2310 \end{algocf@algorithm}\ignorespacesafterend% 2311}% 2312\newenvironment{function*}[1][htbp]{% 2313 \setboolean{algocf@algostar}{true}% 2314 \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}% 2315 \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}% 2316 \begin{algocf@algorithm}[#1]\ignorespaces% 2317}{% 2318 \end{algocf@algorithm}\ignorespacesafterend% 2319}% 2320% 2321% 2322%%%%%%%%%%%%%%%%%%%% 2323%% definition of algondfloat environment 2324%% 2325\ifthenelse{\boolean{algocf@endfloat}}{% if endfloat option then 2326\newcommand{\algoplace}{% macro which is used to writhe algorithm about there 2327 \begin{center}% 2328 [\algorithmcfname~\thepostfig\ about here.]% 2329 \end{center}% 2330}% 2331\newcommand{\algoendfloat}{% use as a \begin{algoendfloat} environment to start scanning of line 2332% \immediate\openout\@mainfff\jobname.fff% 2333 \efloat@condopen{fff} 2334 \efloat@iwrite{fff}{\string\begin{\algocf@envname}}% 2335 \if@domarkers% 2336 \ifthenelse{\equal{\algocf@list}{lof}}{% 2337 \addtocounter{postfig}{1}% 2338 }{% 2339 \addtocounter{postalgo}{1}% 2340 }% 2341 \algoplace% 2342 \fi% 2343 \bgroup% 2344 \let\do\ef@makeinnocent\dospecials% 2345 \ef@makeinnocent\^^L% and whatever other special cases 2346 \endlinechar`\^^M \catcode`\^^M=12 \ef@xalgocfendfloat}% 2347}{\relax}%%%% end of endfloat option ifthenelse 2348%% some macros useful for endfloat option that cannot be defined inside the ifthenelse 2349%scan algoendfloat algorithm and write the text into .fff file 2350{\catcode`\^^M=12 \endlinechar=-1 % 2351 \gdef\ef@xalgocfendfloat#1^^M{% scan the lines inside algoendfloat environment being read by latex 2352 \def\test{#1}% test is the line being currently scan by latex 2353 \ifx\test\ef@endalgocftest% if it is \end{algoendfloat} 2354 \def\next{% define next as to not continue the scan and write \end{algorithm} into .fff file 2355 \egroup\end{algoendfloat}% 2356 \efloat@iwrite{fff}{\string\end{\algocf@envname}}% 2357 \efloat@iwrite{fff}{\string\efloatseparator}% 2358 \efloat@iwrite{fff}{ }% 2359 }% 2360 \else% else write the current line being scanned by latex and set next to continue the scan 2361 \efloat@iwrite{fff}{#1}% 2362 \let\next\ef@xalgocfendfloat% 2363 \fi% endif 2364 \next}% next is continue if it was else condition, else it does not continue the scan and write end to file 2365}% 2366% test if the scan is finish by looking at the string \end{algoendfloat} 2367{\escapechar=-1% 2368 \xdef\ef@endalgocftest{\string\\end\string\{algoendfloat\string\}}% 2369}% 2370% 2371% 2372%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2373% 2374% 2375\newcommand{\TitleOfAlgo}[1]{\@titleprefix\ 2376 \TitleSty{#1}\par\smallskip}% 2377% 2378\newcommand{\SetAlgorithmName}[3]{% 2379 \renewcommand{\listalgorithmcfname}{#3}% 2380 \renewcommand{\algorithmcfname}{#1}% 2381 \renewcommand{\algorithmautorefname}{#2}% 2382}% 2383% 2384\newcommand{\algocf@refrelsize}{-2}\newcommand{\SetAlgoRefRelativeSize}[1]{\renewcommand{\algocf@refrelsize}{#1}}% 2385\newcommand{\SetAlgoRefName}[1]{% 2386 \renewcommand{\algocf@algocfref}{#1}% 2387}% 2388% 2389% 2390% 2391%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2392% 2393% 2394% ------------------------- Default Definitions 2395% 2396%% 2397%% 2398% 2399\SetKwComment{tcc}{/* }{ */}% 2400\SetKwComment{tcp}{// }{}% 2401% 2402%\newcommand{\algocf@defaults@common}{ 2403% 2404% 2405% french keywords 2406% 2407%\SetKwInOut{AlgDonnees}{Donn\'ees}\SetKwInOut{AlgRes}{R\'esultat} 2408\SetKwInput{Donnees}{Donn\'ees}% 2409\SetKwInput{Res}{R\'esultat}% 2410\SetKwInput{Entree}{Entr\'ees}% 2411\SetKwInput{Sortie}{Sorties}% 2412\SetKw{KwA}{\`a}% 2413\SetKw{Retour}{retourner}% 2414\SetKwBlock{Deb}{d\'ebut}{fin}% 2415\SetKwRepeat{Repeter}{r\'ep\'eter}{jusqu'\`a}% 2416% 2417\SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{fin si}% 2418\SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin d'alternative}% 2419\SetKwFor{Pour}{pour}{faire}{fin pour}% 2420\SetKwFor{PourPar}{pour}{faire en parall�le}{fin pour}% 2421\SetKwFor{PourCh}{pour chaque}{faire}{fin pour chaque}% 2422\SetKwFor{PourTous}{pour tous les}{faire}{fin pour tous}% 2423\SetKwFor{Tq}{tant que}{faire}{fin tq}% 2424% 2425% english keywords 2426% 2427\SetKwInput{KwIn}{Input}% 2428\SetKwInput{KwOut}{Output}% 2429\SetKwInput{KwData}{Data}% 2430\SetKwInput{KwResult}{Result}% 2431\SetKw{KwTo}{to} 2432\SetKw{KwRet}{return}% 2433\SetKw{Return}{return}% 2434\SetKwBlock{Begin}{begin}{end}% 2435\SetKwRepeat{Repeat}{repeat}{until}% 2436% 2437\SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}% 2438\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end switch}% 2439\SetKwFor{For}{for}{do}{end for}% 2440\SetKwFor{ForPar}{for}{do in parallel}{end forpar} 2441\SetKwFor{ForEach}{foreach}{do}{end foreach}% 2442\SetKwFor{ForAll}{forall the}{do}{end forall}% 2443\SetKwFor{While}{while}{do}{end while}% 2444% 2445% --- German keywords 2446% 2447\SetKwInput{Ein}{Eingabe}%KwIn 2448\SetKwInput{Aus}{Ausgabe}%KwOut 2449\SetKwInput{Daten}{Daten}%KwData 2450\SetKwInput{Ergebnis}{Ergebnis}%KwResult 2451\SetKw{Bis}{bis}%KwTo 2452\SetKw{KwZurueck}{zur\"uck}%KwRet 2453\SetKw{Zurueck}{zur\"uck}%Return 2454\SetKwBlock{Beginn}{Beginn}{Ende}%Begin 2455\SetKwRepeat{Wiederh}{wiederhole}{bis}%Repeat 2456% 2457\SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf 2458\SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{Ende Unt.}%Switch 2459\SetKwFor{Fuer}{f\"ur}{tue}{Ende f\"ur}%For 2460\SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar 2461\SetKwFor{FuerJedes}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach 2462\SetKwFor{FuerAlle}{f\"ur alle}{tue}{Ende f\"ur}%ForAll 2463\SetKwFor{Solange}{solange}{tue}{Ende solange}%While 2464% 2465% --- Czech keywords 2466% 2467\SetKwInput{Vst}{Vstup}% 2468\SetKwInput{Vyst}{V\'{y}stup}% 2469\SetKwInput{Vysl}{V\'{y}sledek}% 2470% 2471% --- Portuguese keywords 2472% 2473\SetKwInput{Entrada}{Entrada}% 2474\SetKwInput{Saida}{Sa\'{i}da}% 2475\SetKwInput{Dados}{Dados}% 2476\SetKwInput{Resultado}{Resultado}% 2477\SetKw{Ate}{at\'{e}} 2478\SetKw{KwRetorna}{retorna}% 2479\SetKw{Retorna}{retorna}% 2480\SetKwBlock{Inicio}{in\'{i}cio}{fim}% 2481\SetKwRepeat{Repita}{repita}{at\'{e}}% 2482% 2483\SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% 2484\SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim selec}% 2485\SetKwFor{Para}{para}{fa\c{c}a}{fim para}% 2486\SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{fim para} 2487\SetKwFor{ParaCada}{para cada}{fa\c{c}a}{fim para cada}% 2488\SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{fim para todo}% 2489\SetKwFor{Enqto}{enquanto}{fa\c{c}a}{fim enqto}% 2490% 2491% --- Italian keywords 2492% 2493\SetKwInput{KwIng}{Ingresso}% 2494\SetKwInput{KwUsc}{Uscita}% 2495\SetKwInput{KwDati}{Dati}% 2496\SetKwInput{KwRisult}{Risultato}% 2497\SetKw{KwA}{a}% 2498\SetKw{KwRitorna}{ritorna}% 2499\SetKw{Ritorna}{ritorna}% 2500\SetKwBlock{Inizio}{inizio}{fine}% 2501\SetKwRepeat{Ripeti}{ripeti}{finch�}% 2502% 2503\SetKwIF{Sea}{AltSe}{Altrimenti}{se}{allora}{altrimenti se}{allora}{fine se}% 2504\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{endsw}% 2505\SetKwFor{Per}{per}{fai}{fine per}% 2506\SetKwFor{PerPar}{per}{fai in parallelo}{fine per}% 2507\SetKwFor{PerCiascun}{per ciascun}{fai}{fine per ciascun}% 2508\SetKwFor{PerTutti}{per tutti i}{fai}{fine per tutti}% 2509\SetKwFor{Finche}{finch�}{fai}{fine finch�}% 2510% 2511% --- End 2512%} 2513% 2514%\algocf@defaults@common 2515% 2516% option onelanguage redefinition 2517% 2518\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{french}}{% 2519\SetKwInput{KwIn}{Entr\'ees}% 2520\SetKwInput{KwOutSortie}{Sorties}% 2521\SetKwInput{KwData}{Donn\'ees}% 2522\SetKwInput{KwResult}{R\'esultat}% 2523\SetKw{KwTo}{\`a}% 2524\SetKw{KwRet}{retourner}% 2525\SetKw{Return}{retourner}% 2526\SetKwBlock{Begin}{d\'ebut}{fin}% 2527\SetKwRepeat{Repeat}{r\'ep\'eter}{jusqu'\`a}% 2528% 2529\SetKwIF{If}{ElseIf}{Else}{si}{alors}{sinon si}{sinon}{fin si}% 2530\SetKwSwitch{Switch}{Case}{Other}{suivant}{faire}{cas o\`u}{autres cas}{fin d'alternative}% 2531\SetKwFor{For}{pour}{faire}{fin pour}% 2532\SetKwFor{ForPar}{pour}{faire en parall�le}{fin pour}% 2533\SetKwFor{ForEach}{pour chaque}{faire}{fin pour chaque}% 2534\SetKwFor{ForAll}{pour tous les}{faire}{fin pour tous}% 2535\SetKwFor{While}{tant que}{faire}{fin tq}% 2536}{}% 2537\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{german}}{% 2538\SetKwInput{KwIn}{Eingabe}%KwIn 2539\SetKwInput{KwOut}{Ausgabe}%KwOut 2540\SetKwInput{KwData}{Daten}%KwData 2541\SetKwInput{KwResult}{Ergebnis}%KwResult 2542\SetKw{KwTo}{bis}%KwTo 2543\SetKw{KwRet}{zur\"uck}%KwRet 2544\SetKw{Return}{zur\"uck}%Return 2545\SetKwBlock{Begin}{Beginn}{Ende}%Begin 2546\SetKwRepeat{Repeat}{wiederhole}{bis}%Repeat 2547% 2548\SetKwIF{If}{ElseIf}{Else}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf 2549\SetKwSwitch{Switch}{Case}{Other}{unterscheide}{tue}{Fall}{sonst}{Ende Unt.}%Switch 2550\SetKwFor{For}{f\"ur}{tue}{Ende f\"ur}%For 2551\SetKwFor{ForPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar 2552\SetKwFor{ForEach}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach 2553\SetKwFor{ForAll}{f\"ur alle}{tue}{Ende f\"ur}%ForAll 2554\SetKwFor{While}{solange}{tue}{Ende solange}%While 2555}{}% 2556\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{portugues}}{% 2557\SetKwInput{KwIn}{Entrada}% 2558\SetKwInput{KwOut}{Sa\'{i}da}% 2559\SetKwInput{KwData}{Dados}% 2560\SetKwInput{KwResult}{Resultado}% 2561\SetKw{KwTo}{at\'{e}} 2562\SetKw{KwRet}{retorna}% 2563\SetKw{Return}{retorna}% 2564\SetKwBlock{Begin}{in\'{i}cio}{fim}% 2565\SetKwRepeat{Repeat}{repita}{at\'{e}}% 2566% 2567\SetKwIF{If}{ElseIf}{Else}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% 2568\SetKwSwitch{Switch}{Case}{Other}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim selec}% 2569\SetKwFor{For}{para}{fa\c{c}a}{fim para}% 2570\SetKwFor{ForPar}{para}{fa\c{c}a em paralelo}{fim para} 2571\SetKwFor{ForEach}{para cada}{fa\c{c}a}{fim para cada}% 2572\SetKwFor{ForAll}{para todo}{fa\c{c}a}{fim para todo}% 2573\SetKwFor{While}{enquanto}{fa\c{c}a}{fim enqto}% 2574}{}% 2575\ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{italiano}}{% 2576\SetKwInput{KwIn}{Ingresso}% 2577\SetKwInput{KwOut}{Uscita}% 2578\SetKwInput{KwData}{Dati}% 2579\SetKwInput{KwResult}{Risultato}% 2580\SetKw{KwTo}{a}% 2581\SetKw{KwRet}{ritorna}% 2582\SetKw{Return}{ritorna}% 2583\SetKwBlock{Begin}{inizio}{fine}% 2584\SetKwRepeat{Repeat}{ripeti}{finch�}% 2585% 2586\SetKwIF{If}{ElseIf}{Else}{se}{allora}{altrimenti se}{allora}{fine se}% 2587\SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{endsw}% 2588\SetKwFor{For}{per}{fai}{fine per}% 2589\SetKwFor{ForPar}{per}{fai in parallelo}{fine per}% 2590\SetKwFor{ForEach}{per ciascun}{fai}{fine per ciascun}% 2591\SetKwFor{ForAll}{per tutti i}{fai}{fine per tutti}% 2592\SetKwFor{While}{finch�}{fai}{fine finch�}% 2593}{}% 2594% 2595%%%% old commands compatibility 2596% 2597\ifthenelse{\boolean{algocf@oldcommands}}{% 2598\newcommand{\SetNoLine}{\SetAlgoNoLine}% 2599\newcommand{\SetVline}{\SetAlgoVlined}% 2600\newcommand{\SetLine}{\SetAlgoLined}% 2601% 2602\newcommand{\dontprintsemicolon}{\DontPrintSemicolon}% 2603\newcommand{\printsemicolon}{\PrintSemicolon}% 2604\newcommand{\incmargin}[1]{\IncMargin{#1}}% 2605\newcommand{\decmargin}[1]{\DecMargin{-#1}}% 2606\newcommand{\setnlskip}[1]{\SetNlSkip{#1}}% 2607\newcommand{\Setnlskip}[1]{\SetNlSkip{#1}}% 2608\newcommand{\setalcapskip}[1]{\SetAlCapSkip{#1}}% 2609\newcommand{\setalcaphskip}[1]{\SetAlCapHSkip{#1}}% 2610\newcommand{\nlSty}[1]{\NlSty{#1}}% 2611\newcommand{\Setnlsty}[3]{\SetNlSty{#1}{#2}{#3}}% 2612\newcommand{\linesnumbered}{\LinesNumbered}% 2613\newcommand{\linesnotnumbered}{\LinesNotNumbered}% 2614\newcommand{\linesnumberedhidden}{\LinesNumberedHidden}% 2615\newcommand{\showln}{\ShowLn}% 2616\newcommand{\showlnlabel}[1]{\ShowLnLabel{#1}}% 2617\newcommand{\nocaptionofalgo}{\NoCaptionOfAlgo}% 2618\newcommand{\restorecaptionofalgo}{\RestoreCaptionOfAlgo}% 2619\newcommand{\restylealgo}[1]{\RestyleAlgo{#1}}% 2620% 2621\newcommand{\Titleofalgo}[1]{\TitleOfAlgo{#1}}% 2622\SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{fin si}% 2623\SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{end if}% 2624\SetKwIF{gIf}{gElseIf}{gElse}{if}{then}{else if}{else}{end if}% 2625\SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf 2626\SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% 2627\SetKwIF{gSea}{gAltSe}{gAltrimenti}{se}{allora}{altrimenti se}{allora}{fine se}% 2628}{% 2629 \relax% 2630}% 2631% 2632% 2633% 2634%% 2635%%% 2636%%%% END