% algorithm2e.sty --- style file for algorithms % almost everything can be customized by users. See the document for more explanations %% Copyright 1996-2017 Christophe Fiorio % % This work may be distributed and/or modified under the conditions of the LaTeX Project % Public License, either version 1.3 of this license or (at your option) any later version. % The latest version of this license is in http://www.latex-project.org/lppl.txt and % version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later. % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is M. Christophe Fiorio % % This work consists of the files algorithm2e.sty and algorithm2e.tex % and the associated example files algorithm2e_exAlgoDisjdecomp.tex, % algorithm2e_exIR.tex, algorithm2e_ex01.tex, algorithm2e_exProg.tex, % algorithm2e_ex02.tex, algorithm2e_exfor.tex, algorithm2e_ex03.tex, % algorithm2e_exgeneric.tex, algorithm2e_ex04.tex, algorithm2e_exgeneric2.tex, % algorithm2e_ex05.tex, algorithm2e_exnlsty.tex, algorithm2e_ex06.tex, % algorithm2e_exrepeat.tex, algorithm2e_ex07.tex, algorithm2e_exswitch.tex % % Report bugs and comments to: % - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% % - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% % subscribe by emailing sympa@lirmm.fr with 'subscribe '^^J% % % $Id: algorithm2e.sty,v 5.2 2017/07/18 15:26:26 fioriochristophe Exp $ % % PACKAGES REQUIRED: % % - float (in contrib/supported/float) % - ifthen (in base) % - xspace (in packages/tools) % - relsize (in contrib/misc/relsize.sty) % %%%%%%%%%%%%%%% Release 5.2 % % Package options: % --------------- % - oldcommands : to use old command names % - french, english, german, ngerman % portuguese, czech, italiano, % slovak, croatian, spanish : for the name of the algorithm and some keyword code % - onelanguage : to simply switch keyword from one language to another without changing % keyword commands % - boxed, boxruled, ruled, tworuled, % algoruled, plain : layout of the algorithm % - algo2e : environment is algorithm2e instead of algorithms and \listofalgorithmes % instead of \listofalgorithms % - slide : to use when making slides % - noline,lined,vlined : how block are designed. % - shortend, longend, noend : short or long end keyword as endif for e.g. % - linesnumbered : auto numbering of the algorithm's lines % - linesnumberedhidden : to hide autonumbered lines (show number on a line with \ShowLn % - commentsnumbered, inoutnumbered : to autonumber comments and inout keywords (by defaut not numbered) % - rightnl : to have line number on the right instead of on the left as default % - algonl : line numbers preceded by algo number % - scright, scleft : right or left justified side comments % - fillcomment, nofillcomment : end mark of comment is flushed to the right so comments fill the line % - dotocloa : add an entry in the toc for list of algorithms (require tocbibind package) % - endfloat : add algoendfloat environment pushing algorithm so written to the end of document % - resetcount, noresetcount : start value of line numbers. % - algopart,algochapter,algosection : algo numbering within part, chapter or section % - titlenumbered,titlenotnumbered : numbering of title set by \Titleofalgo % - figure : algorithms are figures, numbered as figures, and put in the list of figures. % - procnumbered : procedure or function are numbered as algorithm % - nokwfunc : procedure or function name doens't become a command % - norelsize : don't use relsize package (useful if it breaks the compatibily) % - displayblockmarkers : display begin, end keywords at start of each block % % defaults are; english,plain,resetcount,titlenotnumbered % %%%%%%%%%%%%%% % % Short summary % ------------- % % algorithm is an environment for writing algorithm in LaTeX2e. % Almost all is customizable. You can add keywords, change style, change the layout, ... % It provide macros that allow you to create differents sorts of key words, therefore a set of predefined key % word is gived. % % IT should be used as follows % % \begin{algorithm} % ... % ... % \end{algorithm} % % % IMPORTANT : each line MUST end with \; % % Note that if you define macros outside algorithm environment they % are avaible in all the document and particulary you can use then % inside all algorithms without re-define them. % % an example: % % \begin{algorithm} % \SetAlgoLined % \KwIn{this text} % \KwOut{how to write algorithm with \LaTeX2e } % % initialization\; % \While{not at end of this document}{ % read current section\; % \eIf{understand}{ % go to next section\; % current section becomes this one\; % }{ % go back to the beginning of current section\; % } % } % \caption{How to write algorithm} % \end{algorithm} % % %%%%%%%%%%%%%% predefined keywords % % \KwIn{input} % \KwOut{output} % \KwData{input} % \KwResult{output} % \KwTo % a simple keyword % \KwFrom % a simple keyword % \KwRet{[value]} % \Return{[value]} % \Begin{block inside} % \eIf{condition}{Then Block}{Else block} % in blocks % \If{condition}{Then block} % in a block % \uIf{condition}{Then block} % in a block unended % \lIf{condition}{Else text} % on the same line % \Else{inside Else} % in a block % \lElse{Else text} % on the same line % \uElse{Else text} % in a block unended % \ElseIf{inside Elseif} % in a block % \lElseIf{Elseif text} % on the same line % \uElseIf{Elseif text} % in a block unended % \Switch{Condition}{Switch block} % \Case{a case}{case block} % in a block % \lCase{a case}{case text} % on the same line % \Other{otherwise block} % in a block % \lOther{otherwise block} % on the same line % \For{condition}{text loop} % in a block % \lFor{condition}{text} % on the same line % \ForEach{condition}{text loop} % in a block % \lForEach{condition}{text} % on the same line % \ForPar{condition}{text loop} % in a block % \lForPar{condition}{text} % on the same line % \While{condition}{text loop} % in a block % \lWhile{condition}{text loop} % on the same line % \Repeat{End condition}{text loop} % in a block % \lRepeat{condition}{text} % on the same line % %%%%%%%%%%%%%% % % History: % % - July 18 2017 - revision 5.2 % * FIX: There was an overfull box 0.8pt with boxruled algorithm. This is fixed. % * FIX: problem when mixing caption package and figure option. This bug was partially corrected % in 5.0 for one side document but with false indentation and not working for two side % document. This is now fully fixed. % * FIX: misaligned lines numbers with noline option % * FIX: Fix croation keywords thanks to Ivan Kolan % * FIX: there was an overfull hbox of 8.5pt when using [H] and ruled caption. This is fixed. % * FIX: \SetCustomAlgoRuledWidth only changed midrule. This is fixed, it changes all the rules % - October 19 2015 - revision 5.1 % * CHANGE/ADD: l commands (the ones as \lIf) can now be used with a % star. If done, no end of line are done, so you can enclose % l command into another one. For example, you can write: % \lForEach{$i$}{\lIf*{foo}{bar}}. % Note that when you use a star, side comments are not allowed. % * CHANGE/ADD: Now you can have a side comment at end of macros which % have a block. For example you can do : % \Begin(\tcc*[h]{side comment for begin}{text}(\tcc*[h]{side comment after end}) % Note: there are some side effects for some commands: % \SetKwProg : macro defined thanks to \SetKwProg are allowed % to have no end marker. In this case, % beware to end side comment, this can % do weird output (but no error) % * CHANGE: \SetKwSwitch defines also an \uOther command which was not % the case until this release. % * CHANGE: \SetStartEndCondition{typo1}{typo2}{typo3} defined two end % conditions (type2 and typo3) : typo3 is no more used for % case condition as typo2 is used which is more consistent % since there is a condition followed by a keyword as for % if-then or other command that are defined using typo2. % * CHANGE: keywords was not language dependant to allow to use multiple % languages in the same document, but some keywords in % different language were having the same keyword that lead % last one declared to replace first one and so you could have some % spanish keywords printed as you were in portuguese. So % this behavior is changed from now: % - localized keywords are defined if according language % option is defined ; % - if you want to keep old behaviour and use localized % keywords without using language option (keep old % behavior), you can use languagekw option % (e.g. frenchkw, germankw, ...). Note that you can use % multiple languagekw options at the same time, in % contrary of language option. Note also that if you use % multiple languagekw options, you can get back the same % problem as previously when keywords was not language % dependant. % * ADD: new typo styles: % - Arguments of functions have now their own style. By % default, FuncArgSty is the same as ArgSty. % - Name of KwProg have now their own sty (they used ArgSty % previously). By default, ProgSty is still ArgSty. % As usual, \SetFuncArgSty{}, FuncArgSty{} and % \SetProgSty{}, ProgSty{} are macros to set and use these % typo styles. % * ADD: Options to manage algorithm hangindent % Until this revision, long statement acts as classical text and % continue on next line starting from the same point. This makes % difficult to notice that the new lines of text is not a new % statement. Now, hangindent is managed and when a long % statement continue on next lines, lines, except the first, % are indented. % Option: noalgohanging % By default, long statement are indented on subsequent % lines; with this option you get old behavior and lines are % no more indented % Option: hangingcomment % Comment that are alone on a line (not side comment) are % not driven by algo hanging: subsequent lines of long % comments are indented according to width of start comment % marker. With this option, comment are indented like normal % statement. % Option: hanginginout % As for comment, by default, in/out keywords and input % keywords (defined by \SetKwInOut or \SetKwInput) are not % indented by algorithm hangindent. They are indented % according to width of input keyword. If you want that these % keywords acts like normal statement, use this option. % \SetAlgoHangIndent{length} % This macro allows you to set your own indent length. By % default, \SetAlgoHangIndent{0.5em} % * ADD: Group markers. % This option is related to block markers of release 5.0. Some % have ask to put also block markers for single line % command. This new feature has been implemented to do this. % So, you can now ask package to put begin and end keywords % automatically at start and end of single line command (see % example in documentation). % These new group markers macros are: % - \AlgoDisplayGroupMarkers and \AlgoDontDisplayGroupMarkers % Note that a new option has also been added: displaygroupmarkers % * ADD: \SetCustomAlgoRuledWidth{length} % set a custom ruled width of ruled and algoruled options ; % note that by the moment you use this macro, rules will have % this fixed length: this can cause strange behavior in % multicolumn mode or other layout that change the line % width. % * ADD: turkish language option % * FIX: a spurious whitespace which results in a spurious indent in the % user's text right after the end of the algorithm environment % was introduced in release 5.0. This is fixed now thanks to % Alexander Malkis. % * FIX: there was a problem with margins in caption when option figure % was use with caption package. This is fixed. % * FIX: when changing font size in caption with, interline skip stayed % unchanged and so with a small font was to large. This is fixed. % * FIX: in contrary of that is written in the documentation, ':' what % not in KwSty typo for KwIn and KwOut command. This is fixed. % * FIX: strange behaviour with label and lines numbered: @currentlabel % was updated according to algo line number not in all % situation. For e.g, with hyperref package, always updated ; % with \nlset also updated, but with \nl or linesnumbered % option, not updated. This "feature" causes different output % with \label command according to options used which is not % that one want. This is solved now, and @currentlabel is % always updated so \label command works always is the same way. % * FIX: some czech keywords % * FIX: some spanish keywords % * FIX: some croatian keywords % * FIX: krantz class changes definition of chapter and get one more % option that classical classes as book.cls or report.cls and % broke fix for hyperref on chapter definition. This is now % fixed and algorithm detects use of krantz class and use then % a definition of chapter working with krantz class. % * FIX: an issue with internal macro which causes ([Q]) use as argument % of some environment to be misprinted (thanks to Martin Schröder). % * FIX: mispelled name of hyperrefcounter inside internal macro. % % - January 06 2013 - revision 5.0 % * CHANGE: SetKwSwitch takes now 9 args: 9th arg is the same as % previous 8th arg ('end of switch' keyword). New 8th arg is % 'end of case' keyword. This is due to change of release % 3.2 which introduce end after case block... as I never % test with longend option, I never see that the 'end % switch' used for case was not good. % * CHANGE: when no end keyword is defined in a block macro, then % algorithm2e does no more try to print it. So even with lined or noline % option, no empty line is printed (before: a blank end was % printed, so a blank line appeared) % * Internal Change: add some internal function to improve readibility % (thanks to Philip K. F. H\ölzenspies) % * ADD: Block markers. % You can now ask package to put begin and end keywords automatically at begin % and end of blocks, it means each group of commands shifted and enclosed in % braces. % This is tricky to use but, combined with \SetStartEndCondition and % redefinition of keywords, you should be abble to simulate any syntax. See % examples in documentation where a generic example is derived in pseudo-code, % python and C by keeping code and changing only style using block markers % macros, \SetStartEndCondition and some redefinition of keywords. % These new block markers macros are: % - \AlgoDisplayBlockMarkers and \AlgoDontDisplayBlockMarkers % - \SetAlgoBlockMarkers{begin marker}{end marker} % - \BlockMarkersSty{text} and \SetBlockMarkersSty % Note that a new option has also been added: displayblockmarkers % * ADD: \leIf macro automatically defined by \SetKwIF: allow to define % an if-then-else on a single line. % * ADD: new macro \SetStartEndCondition{typo1}{typo2}{typo3} which % sets typo around condition in For, If, Switch, Case and % Repeat macros. First two are used around For, If, Swith % conditions, First and third are used for Case and Repeat % condition where condition ends the line. Default definition % is \SetStartEndCondition{ }{ }{}. % A common alternative is \SetStartEndCondition{ (}{) }{)} % Can also be used to remove space around condition, for % example if you want python style commands: % \SetStartEndCondition{ }{}{} and \SetKwFor{For}{for}{:}{} % * ADD: new environment algomathdisplay which allow display math (like inside \[ \] or $$ $$) % handling end line and line number % * ADD: new command \SetKwProg{Env}{Title}{is}{end} which defines a macro % \Env{args}{text}. Env is a block with 'Title' (in \CapSty) at the beginning % followed by args followed by 'is' then 'text' is put below inside a block ended % by 'end'. If no 'end' is specified, nothing is written (no % blank line is inserted). Useful to typeset function or prog for example: % \SetKwProg{Fn}{Function}{ is}{end} makes \Fn{afunc(i: int) : int}{return 0\;} % writes: % Function afunc(i: int) : int is % | return 0; % end % or \SetKwProg{Def}{def}{:}{} makes \Def{afunc(i: int)}{return 0\;} writes: % def afunc(i: int): % | return 0 % Tip: combine it with \SetKwFunction to write recursive function algorithm. With % example above, you could define \SetKwFunction{\Afunc}{afunc} and then write: % \Def{\Afunc{i:int}{\eIf{i>0}{\KwRet \Afunc{i-1}}{\KwRet 0\;}} that writes: % def afunc(i: int): % | if(i>0): % | return afunc(i-1) % | else: % | return 0 % with appropriate typo. % * ADD: option croatian: croatian keywords (thanks to Ivan Kohan and % Yvan Gavran) % * ADD: option ngerman: same as german option but so can be used with global option ngerman % of babel % * ADD: option spanish: Spanish support (thanks to Mario Abarca) % * ADD: unterminated block: useful to add part separator that doesn't necessary need an end % keyword. % Designed on the pattern of unterminated if (see \uIf macro) allowing to % add a block that is not terminated by a keyword. Such block are defined in the same % time as a block is defined by adding a macro beginning with u. So, for example, % predefined \SetKwBlock{Begin}{begin}{end} defines now two commands: % - \Begin{} as previously which print a begin - end block % - \uBegin{} that defines a begin only block % * FIX: problem when numbering line inside until condition of % \SetKwRepeat macro: line number was not correctly aligned. % * FIX: dotocloa option which was broken % * FIX: uIf and uCase didn't have same behavior when used with % noline, vlined or lined option. This is fixed. Side effect: no empty % line after an uIf or uCase when used with options lined or vlined % * FIX: a bug with Repeat Until command when use with side comment on Until % * FIX: a bug with side text -- text put into () -- of command macro (SetKwIf and so on) % which was always setting a ';' even after a \DontPrintSemicolon % * FIX: a bug with hyperref and chapter definition (thanks to Hubert Meier) % * FIX: bugs with l macro and side comment % * FIX: revision number % * FIX: fix non ascii character (utf8 not yet recognized by all latex engine) % * FIX: fnum@algocf had an useless parameter which sometimes broke expansion and output an error % * FIX: works now with multicol package % % - december 14 2009 - revision 4.1 % * ADD: new command \SetKwHangingKw{Name}{text} (hanging indent with keyword): This creates a % hanging indent much like \texttt{SetKwInput}, except that it removes the trailing `:' % and does not reset numbering (thanks to Nathan Tallent) % % - november 17 2009 - revision 4.00 - % % * CHANGE: IMPORTANT: some commands have been renamed to have consistent naming (CamlCase % syntax) and old commands are no more available. If you doesn't want to change % your mind or use old latex files, you can use oldcommands option to enable old % commands back. % text. Here are these commands: % - \SetNoLine becomes \SetAlgoNoLine % - \SetVline becomes \SetAlgoVlined % - \Setvlineskip becomes \SetVlineSkip % - \SetLine becomes \SetAlgoLined % - \dontprintsemicolon becomes \DontPrintSemicolon % - \printsemicolon becomes \PrintSemicolon % - \incmargin becomes \IncMargin % - \decmargin becomes \DecMargin % - \setnlskip becomes \SetNlSkip % - \Setnlskip becomes \SetNlSkip % - \setalcapskip becomes \SetAlCapSkip % - \setalcaphskip becomes \SetAlCapHSkip % - \nlSty becomes \NlSty % - \Setnlsty becomes \SetNlSty % - \linesnumbered becomes \LinesNumbered % - \linesnotnumbered becomes \LinesNotNumbered % - \linesnumberedhidden becomes \LinesNumberedHidden % - \showln becomes \ShowLn % - \showlnlabel becomes \ShowLnLabel % - \nocaptionofalgo becomes \NoCaptionOfAlgo % - \restorecaptionofalgo becomes \RestoreCaptionOfAlgo % - \restylealgo becomes \RestyleAlgo % - gIf macros and so on do no more exist % * NEW: - Compatibily with other packages improven by changing name of internal % macros. Algorithm2e can now be used with arabtex for example, if this last is % loaded after algorithm2e package. % * ADD: - OPTION endfloat: endfloat packages doesn't allow float environment inside other % environment. So using it with figure option of algorithm2e makes error. This % option enables a new environment algoendfloat to be used instead of algorithm % environment that put algorithm at the end. algoendfloat environment make % algorithm acting as endfloat figures. This option requires endfloat packages. % * ADD: - OPTION norelsize: starting from this release (v4.00), algorithm2e package uses % relsize package in order to get relative size for lines numbers; but it seems % that some rare classes (such as inform1.cls) are not compatible with relsize; to % have algorithm2e working, this option makes algorithm2e not to load relsize % package and go back to previous definition by using \scriptsize font for lines % numbers. % * ADD: - OPTION onelanguage: allow, if using standard keywords listed below, to switch % from one language to another without changing keywords by using appropriate % language option: % . KwIn, KwOut, KwData, KwResult % . KwTo KwFrom % . KwRet, Return % . Begin % . Repeat % . If, ElseIf, Else % . Switch, Case, Other % . For, ForPar, ForEach, ForAll, While % . % * ADD: - OPTION rightnl: put lines numbers to the right of the algorithm instead of left. % * ADD: new commands \setRightLinesNumbers and \setLeftLinesNumbers which sets the lines % numbers to the right or to the left of the algorithm. % * ADD: - new kind of keywords: KwArray used to define arrays: % \SetKwArray{Kw}{array} defines an array keywords Kw called array and printed in % DataSty style when call with \Kw. It can be used with one argument which % denotes the element index: \Kw{n} prints array[n] with array in DataSty and n in % ArgSty. % * ADD/FIX: rules of ruled, algoruled, tworuled styles used rules of different sizes! This % is now fixed. Moreover size of the rules is now controlled by a length and so % can be customized by the user. % \algoheightrule is the height of the rules and can be changed via \setlength % \algoheightruledefault is the default height of he rules (0.8pt) % \algotitleheightrule is the height of the rule that comes just after the % caption in ruled and algoruled style; it can be changed via \setlength % \algotitleheightruledefault is the default height of this rules (0.8pt) % Thanks to Philippe Dumas who reports the bug and make the suggestion. % * ADD: - \SetAlgoCaptionSeparator which sets the separator between Algorithm 1 and the % title. By default it's ':' and caption looks like "Algorithm 2: title" but now % you can change it by using for example \SetAlgoCaptionSeparator{.} which will % give "Algorithm 3. title" % * ADD: - \SetAlgoLongEnd and \SetAlgoShortEnd and \SetAlgoNoEnd commands which act as % corresponding package options % * ADD: - OPTIONS italiano and slovak as new language (thanks to Roberto Posenato and % Miroslav Binas) % * CHANGE: - Fnt and Sty macro to have consistent use and naming (see below) % * ADD: - \AlCapSty, \AlCapNameSty, \AlCapFnt, \AlCapNameFnt, \ProcSty, \ProcFnt, % \ProcNameSty, \ProcNameFnt, \ProcArgSty, ProcArgFnt and corresponding "set macro" % \SetAlCapSty, \SetAlCapNameSty, \SetAlCapFnt, \SetAlCapNameFnt, \SetProcSty, % \SetProcFnt, \SetProcNameSty, \SetProcNameFnt, \SetProcArgSty, \SetProcArgFnt which % control the way caption is printed. Sty macro use command taking one parameter as % argument, Fnt macros use directly command. In Fact caption is printed as follow: % \AlCapSty{\AlCapFnt Algorithm 1:}\AlCapNameSty{\AlCapNameFnt my algorithm} % By default, \AlCapSty is textbf and \AlCapFnt is nothing. \AlCapNameSty keep text % as it is, and \AlCapNameFnt do nothing also. % You can redefine \AlCapFnt and \AlCapNameFnt by giving macro to \Set commands. For % example, you can do \SetAlCapFnt{\large} to see Algorithm printed in \large font. % You can redefine \AlCapSty, \AlCapFnt, \AlCapNameSty and \AlCapNameFnt with the % corresponding \Set command. For the Sty commands, you have to give in parameter % name of a macro (whithout \) which takes one argument. For example, % \SetAlCapFnt{textbf} defines the default behaviour. If you want to do more % complicated thing, you should define your own macro and give it to \SetAlCapFnt or % \SetAlCapNameFnt. Here are two examples: % - \newcommand{\mycapsty}[1]{\tiny #1}\SetAlCapNameSty{mycapsty} % - \newcommand{\mycapsty}[1]{\textsl{\small #1}}\SetAlCapNameSty{mycapsty} % Or you can combine the two, for the last example you can also do: % \SetAlCapNameSty{textsl}\SetAlCapNameFnt{\small} % Thanks to Jan Stilhammer who gives me the idea of \AlCapNameFnt. % * CHANGE \AlTitleFnt to match definition of all other Fnt macros and add a \AlTitleSty % macro (see below) . Now you set \AlTitleFnt by calling \SetAlTitleFnt with % directly a macro without parameter in argument: % Example: \SetAlTitleFnt{\small} to set title in small font. % * ADD: - \AlTitleSty and \SetAlTitleSty commands to set a style for title. These commands % are defined from a macro taking the text in argument, as \textbf for example. % To set the TitleSty you have to give name of the macro (without the '\') % to \SetAlTitleSty. For example \SetAlTitleSty{textbf} to set \textbf style. % * ADD: - new command \SetAlgorithmName{algorithmname}{list of algorithms name} which % redefines name of the algorithms and the sentence list of algorithms. Second % argument is the name that \autoref, from hyperref package, will use. Example: % \SetAlgorithmName{Protocol}{List of protocols} if you prefer protocol than % algorithm. % * ADD: - new \SetAlgoRefName{QXY} which change the default ref (number of the algorithm) by % the name given in parameter (QXY in the example). % * ADD: - new command \SetAlgoRefRelativeSize{-2} which sets the output size of refs, defined % by \SetAlgoRefName, used in list of algorithms. % * ADD: - two dimensions to control the layout of caption in ruled, algoruled and boxruled % algorithms: % - interspacetitleruled (2pt by defaut) which controls the vertical space between % rules and title in ruled and algoruled algorithms. % - interspaceboxruled (2\lineskip by default) which controls the vertical space % between rules and title in boxruled algorithms. % These two dimensions can be changed by using \setlength command. % * ADD: - With the fix (see below) of procedure and function environments, a new feature has % been added: the name of the procedure or function set in caption is automatically % defined as a KwFunction and so can be used as a macro. For example, if inside a % procedure environment you set \caption{myproc()}, you can use \myproc macro in you % main text. Beware that the macro is only defined after the \caption! % * ADD: - OPTION nokwfunc to unable the new feature described above in function and % procedure environment. Useful if you use name of procedure or function that cannot % be a command name as a math display for example. % * ADD: - \SetAlgoNlRelativeSize{number} command which sets the relative size of line % numbers. By default, line numbers are two size smaller than algorithm text. Use % this macro to change this behavior. For example, \SetAlgoNlRelativeSize{0} sets it % to the same size, \SetAlgoNlRelativeSize{-1} to one size smaller and % \SetAlgoNlRelativeSize{1} to one size bigger % * ADD: - \SetAlgoProcName{aname} command which sets the name of Procedure printed by % procedure environment (the environment prints Procedure by default). Second % argument is the name that \autoref, from hyperref package, will use. % * ADD: - \SetAlgoFuncName{aname} command which sets the name of Function printed by % procedure environment (the environment prints Function by default). Second % argument is the name that \autoref, from hyperref package, will use. % * ADD: - \SetAlgoCaptionLayout{style} command which sets style of the caption; style must % be the name of a macro taking one argument (the text of the caption). Examples % below show how to use it: % . \SetAlgoCaptionLayout{centerline} to have centered caption % . \SetAlgoCaptionLayout{textbf} to have bold caption % If you want to apply two styles in the same time, such as centered bold, you have % to define you own macro and then use \SetAlgoCaptionLayout with its name. % * ADD: - OPTION procnumbered: which makes the procedure and function to be numbered as % algorithm % * ADD: - OPTIONS tworuled and boxruled % these are two new layouts: tworuled acts like ruled but doesn't put a line after % caption ; boxruled surround algorithm by a box, puts caption above and add a line % after caption. % * REMOVE: - SetKwInParam has been deleted since not useful itself because of different % macros which can do the same in a better and a more consistent way as % SetKwFunction or SetKw. % * FIX: - line number is now correctly vertically aligned with math display. % * FIX: - references with hyperref. No more same identifier or missing name error. BUT now % you must NOT use naturalnames option of hyperref packages if you do PdfLaTeX % * FIX: - autoref with hyperref package (thanks to Jörg Sommer who notices the problem). % * FIX: - titlenumbered was not working! fixed. % * FIX: - Else(){} acted like uElse. Corrected. % * FIX: - noend management: when a block was inside another and end of block was following % each other, a blank line was added: it's now corrected. % * FIX: - Function and Procedure environment was no more working as defined originally: the % label was no more name of the procedure, it acts always as if procumbered option % has been used. % * FIX: - line numbers had a fixed size which can be bigger than algorithm text accordingly % to \AlFnt set (see also new command \SetAlgoNlRelativeSize above) % * FIX: - semicolon in comments when dontprintsemicolon is used. % * FIX: - listofalgorithms adds a vertical space before first algo of a chapter as for % listoffigures or listoftables % * FIX: - listofalgorithms with twocolumns mode and some classes which don't allow onecolumn % and so don't define \if@restonecol as prescribed in LaTeX (sig-alternate for % example) % * FIX: - algorithm2e now works with elsart cls and some more classes. % * FIX: - blocks defined by SetKwBlock act now as other blocks (if for instance) and don't % write end in vlined mode, instead they print a small horizontal line as required % by the option. % * FIX: - underfull hbox warning at each end of algorithm environment removed. % % * INTERNAL CHANGE: - short end keyword are deduce from long end keyword by keeping the % first one. Allows to avoid double definition. % * INTERNAL CHANGE: - procedure, function and algorithm are now resolved by the same % environment to avoid code duplication. % % - October 04 2005 - revision 3.9 - % * ADD: - \setalcaphskip command which sets the horizontal skip before Algorithm: in caption % when used in ruled algorithm. % * ADD: - \SetAlgoInsideSkip command which allows to add an extra vertical space before and % after the core of the algorithm (ie: \SetAlgoInsideSkip{bigskip}) % * CHANGE: - caption, when used with figure option, is no more controlled by algorithm2e % package and so follows the exact behaviour of figures. The drawback is that you % cannot change the typo with AlTitleFnt or CapFnt. The avantage is that if you % use caption package, it works. % * FIX: - problem with numbering line and pdflatex % * FIX: - error when algorithm2e package was used with beamer and listings together % - February 12 2005 - revision 3.8 - % * FIX: - extra line with noend option. % - February 10 2005 - revision 3.7 - % * ADD: - sidecomment: different macros allowing to put text right after code on the same % line. They are defined in the same time comment macros are defined with a star % after the macro name. By default comments are right justified but this can be % change with appropriate option in the macro. Ex: % . default: \tcc*{side comment} % . same as previous: \tcc*[r]{side comment} % . left justify: \tcc*[l]{side comment} % . here: \tcc*[h]{side comment} don't put the end of line mark before % comment (; by default) and don't end the line. % . flushed: \tcc*[f]{side comment} same as the precedent but right % justified % * ADD: - OPTION scright (default): right justified side comments (side comments % are flushed to the righr) % * ADD: - OPTION scleft: left justified side comments (side comments are put right after the % code line) % * ADD: - \SetSideCommentLeft acts as scleft option % * ADD: - \SetSideCommentRight acts as scright option % * ADD: - block like macro side text: all macro defining a block allows now to put text right % after key words by putting text into (). Done to be used with sidecomment macros, % but all text can be used. % Ex: \eIf(\tcc*[f]{then comment}){test}{then text}(else side text){else text} % * ADD: - OPTION fillcomment (default): end mark of comment is flushed to the right so % comments fill all the width of text. % * ADD: - OPTION nofillcomment: end mark of comment is put right after the comment. % * ADD: - \SetNoFillComment acts as nofillcomment option. % * ADD: - \SetFillComment acts as fillcomment option. % * ADD: - OPTION dotocloa: which adds an entry in the toc for the list of algorithms. This % option load package tocbibind if not already done and so list of figures and list % of tables are also added in the toc. If you want to control which ones of the lists % will be added in the toc, please load package tocbibind before package algorithm % and give it the options you want. % * FIX: - vertical spacing for uif macro with noend option % * FIX: - all the compatibility problems between caption and other packages % * FIX: - typographical differences between list of algorithms and other lists when in % report or book % % - January 24 2005 - revision 3.6 - % * FIX: - vertical spacing and space characters at the beginning or end of comments. % line numbers of comments not in the NlSty. % Thanks to Arnaud Giersch for his comments and suggestions. % * FIX: - Set*Sty macro: the styles defined was not protected and was modified by surrounding % context. For example KwTo in a \For{}{} was in bold AND italic instead of just in % bold. % * FIX: - line number misplacement after \Indp % % - January 21 2005 - revision 3.5 - % * ADD: - hidden numbering of the lines. Lines are auto-numbered but numbers are shown only % on lines you specify: % * linesnumberedhidden option or \LinesNumberedHidden macro activate this % functionnality. % * \ShowLn and \ShowLnLabel{lab} macros make the number visible on the % line. \ShowLnLabel{lab} allows to set a label for this line. % Thanks to Samson de Jager who makes this suggestion and provides the macros. % * ADD: - \AlCapFnt and \SetAlCapFnt which allow to have a different font for % caption. Works like \AlFnt and \SetAlFnt and by default is the same. % * ADD: - \AlCapSkip skip length. This vertical space is added before caption in plain ou % boxed mode. It allows to change distance between text and caption. % * FIX: - caption compatible with IEEEtran class. % * FIX: - some vertical spacing error with \uIf macros (Thanks to Arnaud Giersch) % * FIX: - Procedure and Function: lines are also numbered like algorithms % * FIX: - CommentSty was not used for Comments % % - January 10 2005 - revision 3.4 - % * FIX: - caption compatible with new release of Beamer class. % % - June 16 2004 - revision 3.3 - % * FIX: - Hyperlink references of Hyperref package works now if compiled with pdflatex % and [naturalnames] option of hyperref package is used. % * FIX: - algorithm[H] had problem in an list environment - corrected % * FIX: - interline was not so regular in nested blocks - corrected % * ADD - \SetVlineSkip macro which sets the vertical skip after the little horizontal % rule which closes a block in Vlined mode. By default 0.8ex % % - June 11 2004 - revision 3.2 - AUTO NUMBERING LINES !!! % * ADD: auto numbering of the lines (the so asked and so long awaiting feature) % this feature is managed by 3 options and 3 commands: % - linesnumbered option: lines of the algo are numbered except for comments and % input/output (KwInput and KwInOut) % - commentsnumbered option: makes comments be numbered % - inoutnumbered option: makes data input/output be numbered % - \nllabel{lab} labels the line so you can cite with \ref{lab} % - \LinesNumbered make the following algorithms having auto-numbered lines % - \linesnotnumbered make the following algorithms having no auto-numbered lines % * Change: algo2e option renames listofalgorithms in listofalgorithmes % * FIX: new solution for compatibility with color package, more robust and not tricky. % Many thanks to David Carlisle for his advices % % - June 09 2004 - revision 3.1 - % * Change: \SetKwSwitch command defines an additionnal macro \uCase and \Case prints end % * Change: now macros SetKw* do a renewcommand if the keyword is already defined. So you can % redefine default definition at your own convenience or change your definition % without introducing a new macro and changing your text. % * ADD: new macro \SetKwIF which do \SetKwIf and % \SetKwIfElseIf.The following default definition has been added: % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif} % and so you get the macros; % \If \eIf \lIf \uIf \ElseIf \uElseIf \lElseIf \Else \uElse \lElse % * ADD: new macro \SetAlgoSkip which allow to fix the vertical skip before and after the % algorithms. Default is smallskip, do \SetAlgoSkip{} if you don't want an extra space % or \SetAlgoSkip{medskip} or \SetAlgoSkip{bigskip} if you want bigger space. % * ADD: macro \SetKwIf defines in addition a new macro \uElse (depending on wat name you % have given in #2 arg). % * ADD: macro \SetKwIfElseIf defines in addition a new macro \uElse and \ugElseIf (depending % on what name you have given in #2 and #3 arg). % * Change: baseline of algorithm is now top, so two algorithms can be put side by side. % * FIX: Compatibility with color package solved. The problem was due to a redefinition of % standard macros by color package. This solves compatibility problem with other % packages as pstcol or colortbl. (notified by Dirk Fressmann, Antti Tarvainen and Koby % Crammer) % * Fix: extra little shift to the right with boxed style algorithm removed (notified by % P. Tanovski) % * Fix: algoln option was buggy (notified bye Jiaying Shen) % * Fix: german and portuges option didn't work due to bad typo (notified by Martin Sievers, % Thorsten Vitt and Jeronimo Pellegrini) % % - February 13 2004 - revision 3.0 - % * Major revision which makes the package independent from float.sty, so now % - algorithm* works better, in particular can be used in multicols environments % - (known bug corrected) % [H] works now for all sort of environment but is handled differently for classic % environment and star environment (algorithm, figure, procedure and function). For star % environment, H acts like for classical figure environment, so it doesn't stay here % absolutely. % - (known bug corrected) % you can use now floatflt package with algorithm package and even with figure % option. Beware that if you want to put an algorithm inside a floatingfigure, it cannot % be floating, so [H] is required and then figure option should not be used, since % standard figure[H] are still floating with LaTeX. % * boxruled: a new style added. Possible now since no style no more defined by the float % package. % * nocaptionofalgo: dosen't print Algorithm #: in the caption for algorithm in ruled or % algoruled style. % note: this is just documentation of a macro which was already in the package. % - December 14 2003 - revision 2.52 - % * output message shorter % * French keyword macro \PourTous was missing for longend option, it has been added. % * TitleofAlgo prints Function or Procedure in corresponding environments. % % - October 27 2003 - revision 2.51 - Revision submitted to CTAN archive % * correction of a minor which make caption in procedure % and function to be blanck with pdfscreen package % (thanks to Joel Gossens for the notification) % * add two internal definition to avoid some errors when % used with Hyperref package (Hyperref package need to % define new counter macro from existing ones, and % don't do it for algorithm2e package, so we do it) % % - October 17 2003 - revision 2.50 - first revision for CTAN archive % * add \AlFnt and \SetAlFnt{font} macros: \AlFnt is used at the beginning of the caption and % the body of algorithm in order to define the fonts used for typesetting algorithms. You % can use it elsewhere you want to typeset text as algorithm. For example you can do % \SetAlFnt{\small\sf} to have algorithms typeset in small sf font. Default is nothing so % algorithm is typeset as the text of the document. % * add \AlTitleFnt{text} and \SetAlTitleFnt{font} macros: The {Algorithm: } in the caption is % typeset with \AlTitleFnt{Algorithm:}. You can use it to have text typeset as {Algorithm:} % of captions. Default is textbf. Default can be redefined by \SetAlTitleFnt{font}, for % example you can do \SetAlTitleFnt{emph} % * add CommentSty typo for text comment. % * add some compatibility with hyperref package (still an error on multiply defined refs but % pdf correctly generated) % * flush text to left in order to have correct indentation even with class as amsart which % center all figures % * add german, portuguese and czech options for title of algorithms and typo. % * add portuguese translation of predefined keywords * add czech translation of some % predefined keywords % % - December 23 2002 - revision 2.40 % * add some French keyword missing % * add function* and procedure* environment like algorithme* environment: print in one column % even if twocolumn option is specified for the document. % * add a new macro \SetKwComment to define macro which writes comments in the text. First % argument is the name of the macro, second is the text put before the comment, third is the % text put at the end of the comment.Default are \tcc and \tcp % * add new options to change the way algo are numbered: % [algopart] algo are numbered within part (counter must exist) % [algochapter] algo are numbered within chapter % [algosection] algo are numbered within section % % - March 27 2002 - revision 2.39 % * Gilles Geeraerts: added the \SetKwIfElseIf to manage % if (c) % i; % else if (c) % i; % ... % else % i; % end % * Also added \gIf \gElseIf \gElse. % % - January 02 2001 - revision 2.38 % * bugs related to the caption in procedure and function % environment are corrected. % * bug related to option noend (extra vertical space added % after block command as If or For) is corrected. % * czech option language added (thanks to Libor Bus: l.bus@sh.cvut.cz). % % - October 16 2000 - revision 2.37 % * option algo2e added: change the name of environment % algorithm into algorithm2e. So allow to use the package % with some journal style which already define an algorithm % environment. % % - September 13 2000 - revision 2.36 % * option slide added: require package color % * Hack for slide class in order to have correct % margins % % - November 25 1999 - revision 2.35 % * revision number match RCS number % * Thanks to David A. Bader, a new option is added: % noend: no end keywords are printed. % % - November 19 1999 - revision 2.32 % * minor bug on longend option corrected. % % - August 26 1999 - revision 2.31 % * add an option: figure % this option makes algorithms be figure and so are numbered % as figures, have Figure as caption and are put in % the \listoffigures % % - January 21 1999 - revision 2.3 beta % add 2 new environments: procedure and function. % These environments works like algorithm environment but: % - the ruled (or algoruled) style is imperative. % - the caption now writes Procedure name.... % - the syntax of the \caption command is restricted as % follow: you MUST put a name followed by 2 braces like % this ``()''. You can put arguments inside the braces and % text after. If no argument is given, the braces will be % removed in the title. % - label now puts the name (the text before the braces in the % caption) of the procedure or function as reference (not % the number like a classic algorithm environment). % There are also two new styles: ProcNameSty and % ProcArgSty. These style are by default the same as FuncSty % and ArgSty but are used in the caption of a procedure or a % function. % % - November 28 1996 - revision 2.22 % add a new macro \SetKwInParam{arg1}{arg2}{arg3}: % it defines a macro \arg1{name}{arg} which prints name in keyword % style followed byt arg surrounded by arg2 and arg3. The main % application is to a function working as \SetKwInput to be used % in the head of the algorithm. For example % \SetKwInParam{Func}{(}{)} allows % \Func{functionname}{list of arguments} which prints: % \KwSty{functioname(}list of arguments\KwSty{)} % % % - November 27 1996 - revision 2.21: % minor bug in length of InOut boxes fixed. % add algorithm* environment. % % - July 12 1996 - revision 2.2: \SetArg and \SetKwArg macros removed. % % \SetArg has been removed since it never has been % documented. % \SetKwArg has been removed since \SetKw can now % take an argument in order to be consistent with % \SetKwData and \SetKwFunction macros. % % - July 04 1996 - revision 2.1: still more LaTeX2e! Minor compatibility break % % Macros use now \newcommand instead of \def, use of \setlength, % \newsavebox, ... and other LaTeX2e specific stuff. % The compatibility break: % - \SetData becomes \SetKwData to be more consistent. So the old % \SetKwData becomes \SetKwInput % - old macros \titleofalgo, \Freetitleofalgo and \freetitleofalgo % from LaTeX209 version which did print a warning message and call % \Titleofalgo in version 2.0 are now removed! % % - March 13 1996 - revision 2.0: first official major revision. % % %%%%%%%%%%%%%% % % Known bugs: % ----------- % - horizontal spacing (indent) doesn't work with revtex4 class. % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % for more complete informations you can see algorithm2e.tex % % %%%%%%%%%%%%%%%%%%%%%%%% Identification Part %%%%%%%%%%%%%%%%%%%%%%%%%%%% % \NeedsTeXFormat{LaTeX2e}[1994/12/01] % \ProvidesPackage{algorithm2e}[2017/07/18 v5.2 algorithms environments] % % %%%%%%%%%%%%%%%%%%%%%%%%%%% Initial Code %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \@makeother\*% some package redefined it as a letter (as color.sty) \def\@firstword#1 #2\@nil{#1}% an useful fonction %%%%%%% Utilities: % \ifArgumentEmpty ; if c is empty, i.e. {}, then t, else e. % Function used internally, but may as well expose it to the user; it's useful \begingroup \catcode`\Q=3 \catcode`\T=3 \long\gdef\ALGOCF@argemptyaux#1#2Q#3#4#5T{#4} \long\gdef\ifArgumentEmpty#1{% \begingroup\long\edef\@tempa{\endgroup \ALGOCF@argemptyaux#1QQ{\noexpand\@secondoftwo}{\noexpand\@firstoftwo}T% }\@tempa } \endgroup % \long\def\ifArgumentEmpty#1{\bgroup % \catcode`\Q=3 % \catcode`\T=3 % \long\def\@tempa##1##2Q##3##4##5T{##4}% % \xdef\@tempa{\@tempa#1QQ{\noexpand\@secondoftwo}{\noexpand\@firstoftwo}T}% % \egroup\@tempa} %%%%%%%%%%% % % \algocf@longdef -> shorthand to reduce % \expandafter\long\expandafter\def % to % \expandafter\algocf@longdef % may look insignificant, but reads that much better ;) \def\algocf@longdef{\long\def} % % \algocf@newcommand (and helper \algocf@new@command) behaves like LaTeX's newcommand, % with two differences: % - the argument is not "\", but rather ""; i.e. one level of indirection % - if the command exists already, then \renewcommand, rather than \newcommand \def\algocf@newcommand#1{\expandafter\algocf@new@command\csname#1\endcsname} \def\algocf@new@command#1{% \begingroup \escapechar\m@ne\xdef\@gtempa{{\string#1}}\endgroup \expandafter\@ifundefined\@gtempa\newcommand\renewcommand#1}% % % \algocf@newcmdside % The largest time-saver; many commands we define have the pattern: % \()... % where "()" is optional. By defining them with this function, % the arguments are parsed and renumbered, i.e. the body works as if the % command was: % \... % and can use \ifArgumentEmpty to see whether its #1 exists (default case % for the side text is (), so there's no difference between calling % \foo{bar} % or % \foo(){bar} % Technically this is new behaviour, but it shouldn't really occur... \algocf@longdef\algocf@newcmdside#1#2#3{% \expandafter\def\csname#1\endcsname{% \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}% }% \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1){\csname algocf@#1main\endcsname{##1}}% \algocf@newcommand{algocf@#1main}[#2]{#3}% } % % a serie of newcmdside macro for block that allows a comment after the end % \()...()% % % 1. kind of begin-end : for command with only one block as begin-end \algocf@longdef\algocf@newcmdside@kobe#1#2{% % command starts by checking for side comment at beginning \expandafter\def\csname#1\endcsname{% \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}% }% % next we strip comment and include it in cmd that get body and check last side comment \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1)##2{\csname algocf@#1checkcomfol\endcsname{##1}{##2}}% % now check for last side comment; args are : , \expandafter\algocf@longdef\csname algocf@#1checkcomfol\endcsname##1##2{\@ifnextchar({\csname algocf@#1withendcom\endcsname{##1}{##2}}{\csname algocf@#1noendcom\endcsname{##1}{##2}}}% call macro that manages end of command, with or without last side comment % finally manage end of macro... with end side comment... \expandafter\algocf@longdef\csname algocf@#1withendcom\endcsname##1##2(##3){% \csname algocf@#1main\endcsname{##1}{##2}{##3}}% % ... or without end side comment \expandafter\algocf@longdef\csname algocf@#1noendcom\endcsname##1##2{% \csname algocf@#1main\endcsname{##1}{##2}{}}% \algocf@newcommand{algocf@#1main}[3]{#2}% }% % % 2. kind of if-else : for command with two blocks as if-then-else \algocf@longdef\algocf@newcmdside@koif#1#2{% % command starts by checking for side comment at beginning \expandafter\def\csname#1\endcsname{% \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}% }% % next we strip comment and include it in cmd that get body and check last side comment \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1)##2##3{\csname algocf@#1checkcomfol\endcsname{##1}{##2}{##3}}% % now check for last side comment; args are : <1st side com>, <1st body of cmd>, <2nd body of cmd> \expandafter\algocf@longdef\csname algocf@#1checkcomfol\endcsname##1##2##3{\@ifnextchar({\csname algocf@#1withendcom\endcsname{##1}{##2}{##3}}{\csname algocf@#1noendcom\endcsname{##1}{##2}{##3}}}% call macro that manages end of command, with or without last side comment % finally manage end of macro... with end side comment... \expandafter\algocf@longdef\csname algocf@#1withendcom\endcsname##1##2##3(##4){% \csname algocf@#1main\endcsname{##1}{##2}{##3}{##4}}% % ... or without end side comment \expandafter\algocf@longdef\csname algocf@#1noendcom\endcsname##1##2##3{% \csname algocf@#1main\endcsname{##1}{##2}{##3}{}}% \algocf@newcommand{algocf@#1main}[4]{#2}% }% % % \algocf@newcmdsides % Like the command above, but with an optional side text at the end % of the command as well, i.e.: % \()() % It may be a bit confusing that doesn't count , % but since it is for internal use, the naming can be a little more % fuzzy. This function behaves as if: % = \algocf@longdef\algocf@newcmdsides#1#2#3#4#5{% \expandafter\def\csname#1\endcsname{% \@ifnextchar({\csname algocf@#1strip\endcsname}{\csname algocf@#1strip\endcsname()}% }% \expandafter\algocf@longdef\csname algocf@#1strip\endcsname(##1){\csname algocf@#1main\endcsname{##1}}% \algocf@newcommand{algocf@#1main}[#2]{#3\@ifnextchar({\csname algocf@#1end\endcsname}{#4#5}}% \expandafter\algocf@longdef\csname algocf@#1end\endcsname(##1){#4{##1}\strut\par}% }% % % definition of commands which can be redefined in options of the package. % \newcounter{AlgoLine}% \setcounter{AlgoLine}{0}% % \newcommand{\algocf@algocfref}{\relax}% \newcommand{\listalgorithmcfname}{}% \newcommand{\algorithmcfname}{}% \@ifundefined{algorithmautorefname}{\newcommand{\algorithmautorefname}{algorithm}}{\renewcommand{\algorithmautorefname}{algorithm}}% \newcommand{\algorithmcflinename}{}% \newcommand{\algocf@typo}{}% \newcommand{\@algocf@procname}{}\newcommand{\procedureautorefname}{}% \newcommand{\SetAlgoProcName}[2]{\renewcommand{\@algocf@procname}{#1}\renewcommand{\procedureautorefname}{#2}}% \newcommand{\@algocf@funcname}{}\newcommand{\functionautorefname}{}% \newcommand{\SetAlgoFuncName}[2]{\renewcommand{\@algocf@funcname}{#1}\renewcommand{\functionautorefname}{#2}}% \newcommand{\@algocf@titleofalgoname}{\algorithmcfname}% \newcommand{\@algocf@algotitleofalgo}{% \renewcommand{\@algocf@titleofalgoname}{\algorithmcfname}}% \newcommand{\@algocf@proctitleofalgo}{% \renewcommand{\@algocf@titleofalgoname}{\algocf@procname}}% % \newcommand{\algocf@style}{plain}% \newcommand{\@ResetCounterIfNeeded}{}% \newcommand{\@titleprefix}{}% % \newcommand{\algocf@numbering}[1]{\newcommand{\algocf@within}{#1}}% % \newcommand{\defaultsmacros@algo}{\algocf@defaults@shortend}% % \newcommand{\algocf@list}{loa}% \newcommand{\algocf@float}{algocf}% % \newcommand{\algocf@envname}{algorithm}% \newcommand{\algocf@listofalgorithms}{listofalgorithms}% % % %% redefine chapter so that it adds a vspace in the loa as the original does for lof and lot % \let\algocf@original@chapter=\chapter% % \def\chapter{\expandafter\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}% % % bug correction with hyperref submitted by Hubert Meier \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname @chapter\endcsname\relax\else % \let\algocf@original@chapter=\chapter% % \def\chapter{\addtocontents{loa}{\protect\addvspace{10\p@}}\algocf@original@chapter}% \let\algocf@original@chapter=\@chapter% \@ifclassloaded{krantz}{% \def\@chapter[#1][#2]#3{\algocf@original@chapter[#1][#2]{#3}\addtocontents{loa}{\protect\addvspace{10\p@}}}% }{% \def\@chapter[#1]#2{\algocf@original@chapter[#1]{#2}\addtocontents{loa}{\protect\addvspace{10\p@}}}% }% \fi % %% if@restonecol is defined in article and book but some other classes don't define it and we need it, so we do \ifx\if@restonecol\relax\else\newif\if@restonecol\fi% % % %%%%%%%%%%%%%%%%%%%%%% Declaration of Options %%%%%%%%%%%%%%%%%%%%%%%%%%% % \RequirePackage{ifthen}% % \newboolean{algocf@displayblockmarkers}\setboolean{algocf@displayblockmarkers}{false}% \DeclareOption{displayblockmarkers}{% \setboolean{algocf@displayblockmarkers}{true}% }% \newboolean{algocf@displaygroupmarkers}\setboolean{algocf@displaygroupmarkers}{false} \DeclareOption{displaygroupmarkers}{% \setboolean{algocf@displaygroupmarkers}{true}% }% % \newboolean{algocf@nokwfunc}\setboolean{algocf@nokwfunc}{false}% \DeclareOption{nokwfunc}{% \setboolean{algocf@nokwfunc}{true}% }% % \newboolean{algocf@oldcommands}\setboolean{algocf@oldcommands}{false}% \DeclareOption{oldcommands}{% \setboolean{algocf@oldcommands}{true}% }% % \newboolean{algocf@leftlinenumber}\setboolean{algocf@leftlinenumber}{true}% \newcommand{\setLeftLinesNumbers}{\setboolean{algocf@leftlinenumber}{true}}% \newcommand{\setRightLinesNumbers}{\setboolean{algocf@leftlinenumber}{false}}% \DeclareOption{rightnl}{% \setRightLinesNumbers% }% % \newboolean{algocf@endfloat}\setboolean{algocf@endfloat}{false}% \DeclareOption{endfloat}{% \setboolean{algocf@endfloat}{true}% \newcounter{postalgo}\setcounter{postalgo}{0}% }% % \newboolean{algocf@procnumbered}\setboolean{algocf@procnumbered}{false}% \DeclareOption{procnumbered}{% \setboolean{algocf@procnumbered}{true}% }% % \DeclareOption{algo2e}{% \renewcommand{\algocf@envname}{algorithm2e}% \renewcommand{\algocf@listofalgorithms}{listofalgorithmes}% }% % \newboolean{algocf@slide}\setboolean{algocf@slide}{false}% \DeclareOption{slide}{% \setboolean{algocf@slide}{true}% }% % \newboolean{algocf@figurecaption}\setboolean{algocf@figurecaption}{false}% \DeclareOption{figure}{% \renewcommand{\algocf@list}{lof}% \renewcommand{\algocf@float}{figure}% \AtBeginDocument{\@ifpackageloaded{caption}{\setboolean{algocf@figurecaption}{true}}{}}% }% % \newboolean{algocf@optonelanguage}\setboolean{algocf@optonelanguage}{false}% \DeclareOption{onelanguage}{\setboolean{algocf@optonelanguage}{true}}% % \newcommand{\algocf@languagechoosen}{english}% \newboolean{algocf@localkw@english}\setboolean{algocf@localkw@english}{true}% \DeclareOption{englishkw}{% \setboolean{algocf@localkw@english}{true}% }% % \DeclareOption{english}{% \renewcommand{\listalgorithmcfname}{List of Algorithms}% \renewcommand{\algorithmcfname}{Algorithm}% \renewcommand{\algorithmautorefname}{algorithm}% \renewcommand{\algorithmcflinename}{line}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedure}% \renewcommand{\@algocf@funcname}{Function}% \renewcommand{\procedureautorefname}{procedure}% \renewcommand{\functionautorefname}{function}% \renewcommand{\algocf@languagechoosen}{english}% }% % %---- \newboolean{algocf@localkw@french}\setboolean{algocf@localkw@french}{false}% \DeclareOption{frenchkw}{% \setboolean{algocf@localkw@french}{true}% }% % \DeclareOption{french}{% \renewcommand{\listalgorithmcfname}{Liste des Algorithmes}% \renewcommand{\algorithmcfname}{Algorithme}% \renewcommand{\algorithmautorefname}{algorithme}% \renewcommand{\algorithmcflinename}{ligne}% \renewcommand{\algocf@typo}{\ }% \renewcommand{\@algocf@procname}{Proc\'edure}% \renewcommand{\@algocf@funcname}{Fonction}% \renewcommand{\procedureautorefname}{proc\'edure}% \renewcommand{\functionautorefname}{fonction}% \renewcommand{\algocf@languagechoosen}{french}% }% % %---- \newboolean{algocf@localkw@czech}\setboolean{algocf@localkw@czech}{false}% \DeclareOption{czechkw}{% \setboolean{algocf@localkw@czech}{true}% }% % \DeclareOption{czech}{% \renewcommand{\listalgorithmcfname}{Seznam algoritm\r{u}}% \renewcommand{\algorithmcfname}{Algoritmus}% \renewcommand{\algorithmautorefname}{\algorithmcfname}% \renewcommand{\algorithmcflinename}{Radek}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedura}% \renewcommand{\@algocf@funcname}{Funkce}% \renewcommand{\procedureautorefname}{\@algocf@procname}% \renewcommand{\functionautorefname}{\@algocf@funcname}% \renewcommand{\algocf@languagechoosen}{czech}% }% % %---- \newboolean{algocf@localkw@german}\setboolean{algocf@localkw@german}{false}% \DeclareOption{germankw}{% \setboolean{algocf@localkw@german}{true}% }% % \DeclareOption{german}{% \renewcommand{\listalgorithmcfname}{Liste der Algorithmen}% \renewcommand{\algorithmcfname}{Algorithmus}% \renewcommand{\algorithmautorefname}{\algorithmcfname}% \renewcommand{\algorithmcflinename}{Zeile}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Prozedur}% \renewcommand{\@algocf@funcname}{Funktion}% \renewcommand{\procedureautorefname}{\@algocf@procname}% \renewcommand{\functionautorefname}{\@algocf@funcname}% \renewcommand{\algocf@languagechoosen}{german}% }% % %---- \DeclareOption{ngermankw}{% \setboolean{algocf@localkw@german}{true}% }% % \DeclareOption{ngerman}{% \renewcommand{\listalgorithmcfname}{Liste der Algorithmen}% \renewcommand{\algorithmcfname}{Algorithmus}% \renewcommand{\algorithmautorefname}{\algorithmcfname}% \renewcommand{\algorithmcflinename}{Zeile}% \renewcommand{\algocf@typo}{\ }% \renewcommand{\@algocf@procname}{Prozedur}% \renewcommand{\@algocf@funcname}{Funktion}% \renewcommand{\procedureautorefname}{\@algocf@procname}% \renewcommand{\functionautorefname}{\@algocf@funcname}% \renewcommand{\algocf@languagechoosen}{german}% }% % %---- \newboolean{algocf@localkw@portuguese}\setboolean{algocf@localkw@portuguese}{false}% \DeclareOption{portuguesekw}{% \setboolean{algocf@localkw@portuguese}{true}% }% % \DeclareOption{portuguese}{% \renewcommand{\listalgorithmcfname}{Lista de Algoritmos}% \renewcommand{\algorithmcfname}{Algoritmo}% \renewcommand{\algorithmautorefname}{algoritmo}% \renewcommand{\algorithmcflinename}{linha}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedimento}% \renewcommand{\@algocf@funcname}{Fun\c{c}\~{a}o}% \renewcommand{\procedureautorefname}{procedimento}% \renewcommand{\functionautorefname}{fun\c{c}\~{a}o}% \renewcommand{\algocf@languagechoosen}{portuguese}% }% % %---- \newboolean{algocf@localkw@italiano}\setboolean{algocf@localkw@italiano}{false}% \DeclareOption{italianokw}{% \setboolean{algocf@localkw@italiano}{true}% }% % \DeclareOption{italiano}{% \renewcommand{\listalgorithmcfname}{Elenco degli algoritmi}% \renewcommand{\algorithmcfname}{Algoritmo}% \renewcommand{\algorithmautorefname}{algoritmo}% \renewcommand{\algorithmcflinename}{riga}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedura}% \renewcommand{\@algocf@funcname}{Funzione}% \renewcommand{\procedureautorefname}{procedura}% \renewcommand{\functionautorefname}{funzione}% \renewcommand{\algocf@languagechoosen}{italiano}% }% %---- \newboolean{algocf@localkw@spanish}\setboolean{algocf@localkw@spanish}{false}% \DeclareOption{spanishkw}{% \setboolean{algocf@localkw@spanish}{true}% }% % \DeclareOption{spanish}{% \renewcommand{\listalgorithmcfname}{\'Indice de algoritmos}% \renewcommand{\algorithmcfname}{Algoritmo}% \renewcommand{\algorithmautorefname}{algoritmo}% \renewcommand{\algorithmcflinename}{l\'inea}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedimiento}% \renewcommand{\@algocf@funcname}{Funci\'on}% \renewcommand{\procedureautorefname}{procedimiento}% \renewcommand{\functionautorefname}{funci\'on}% \renewcommand{\algocf@languagechoosen}{spanish}% }% %---- \newboolean{algocf@localkw@slovak}\setboolean{algocf@localkw@slovak}{false}% \DeclareOption{slovakkw}{% \setboolean{algocf@localkw@slovak}{true}% }% % \DeclareOption{slovak}{% \renewcommand{\listalgorithmcfname}{Zoznam algoritmov}% \renewcommand{\algorithmcfname}{Algoritmus}% \renewcommand{\algorithmautorefname}{\algorithmcfname}% \renewcommand{\algorithmcflinename}{Radek}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Proced\'{u}ra}% \renewcommand{\@algocf@funcname}{Funkcia}% \renewcommand{\procedureautorefname}{\@algocf@procname}% \renewcommand{\functionautorefname}{\@algocf@funcname}% \renewcommand{\algocf@languagechoosen}{slovak}% }% % %---- \newboolean{algocf@localkw@croatian}\setboolean{algocf@localkw@croatian}{false}% \DeclareOption{croatiankw}{% \setboolean{algocf@localkw@croatian}{true}% }% % \DeclareOption{croatian}{% \renewcommand{\listalgorithmcfname}{Popis algoritama}% \renewcommand{\algorithmcfname}{Algoritam}% \renewcommand{\algorithmautorefname}{\algorithmcfname}% \renewcommand{\algorithmcflinename}{redak}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Procedura}% \renewcommand{\@algocf@funcname}{Funkcija}% \renewcommand{\procedureautorefname}{\@algocf@procname}% \renewcommand{\functionautorefname}{\@algocf@funcname}% \renewcommand{\algocf@languagechoosen}{croatian}% }% %%% adding 'turkish' option customization % %---- \newboolean{algocf@localkw@turkish}\setboolean{algocf@localkw@turkish}{false}% \DeclareOption{turkishkw}{% \setboolean{algocf@localkw@turkish}{true}% }% \DeclareOption{turkish}{% \renewcommand{\listalgorithmcfname}{Algoritma Listesi}% \renewcommand{\algorithmcfname}{Algoritma}% \renewcommand{\algorithmautorefname}{algoritma}% \renewcommand{\algorithmcflinename}{\c{c}izgi}% \renewcommand{\algocf@typo}{}% \renewcommand{\@algocf@procname}{Prosed\"ur}% \renewcommand{\@algocf@funcname}{Fonksiyon}% \renewcommand{\procedureautorefname}{prosed\"ur}% \renewcommand{\functionautorefname}{fonksiyon}% \renewcommand{\algocf@languagechoosen}{turkish}% }% % % OPTIONs plain, boxed, ruled, algoruled & boxruled % \newcommand{\algocf@style@plain}{\renewcommand{\algocf@style}{plain}}% \newcommand{\algocf@style@boxed}{\renewcommand{\algocf@style}{boxed}}% \newcommand{\algocf@style@ruled}{\renewcommand{\algocf@style}{ruled}}% \newcommand{\algocf@style@algoruled}{\renewcommand{\algocf@style}{algoruled}}% \newcommand{\algocf@style@boxruled}{\renewcommand{\algocf@style}{boxruled}}% \newcommand{\algocf@style@tworuled}{\renewcommand{\algocf@style}{tworuled}}% \newcommand{\algocf@style@plainruled}{\renewcommand{\algocf@style}{plainruled}}% \newcommand{\RestyleAlgo}[1]{\csname algocf@style@#1\endcsname}% \DeclareOption{plain}{\algocf@style@plain}% \DeclareOption{plainruled}{\algocf@style@plainruled}% \DeclareOption{boxed}{\algocf@style@boxed}% \DeclareOption{ruled}{\algocf@style@ruled}% \DeclareOption{algoruled}{\algocf@style@algoruled}% \DeclareOption{boxruled}{\algocf@style@boxruled}% \DeclareOption{tworuled}{\algocf@style@tworuled}% % % OPTIONs algopart,algochapter & algosection % \DeclareOption{algopart}{\algocf@numbering{part}}% %algo part numbered \DeclareOption{algochapter}{\algocf@numbering{chapter}}% %algo chapter numbered \DeclareOption{algosection}{\algocf@numbering{section}}% %algo section numbered % % OPTIONs resetcount & noresetcount % \DeclareOption{resetcount}{\renewcommand{\@ResetCounterIfNeeded}{\setcounter{AlgoLine}{0}}}% \DeclareOption{noresetcount}{\renewcommand{\@ResetCounterIfNeeded}{}}% % % OPTIONs algorithm hanging for long lines % \newlength{\algocf@hangindent}\setlength{\algocf@hangindent}{.5em} \newcommand{\SetAlgoHangIndent}[1]{\setlength{\algocf@hangindent}{#1}} % \newboolean{algocf@hanging}\setboolean{algocf@hanging}{true}% hanging is handle by default \newboolean{algocf@hanginginout}\setboolean{algocf@hanginginout}{false}% inout are managed as previously: hanging set by inout keywords \newboolean{algocf@hangingcomment}\setboolean{algocf@hangingcomment}{false}% comment that are not side comment are indented accordingly to comment mark, not as normal text \newcommand{\algocf@everyparnl}{\relax}% \newcommand{\algocf@everyparhanging}{\hangafter=1\hangindent=\algocf@hangindent\relax}% \newcommand{\algocf@everypar}{\algocf@everyparnl\algocf@everyparhanging}% \newcommand{\algocf@seteverypar}{% \ifthenelse{\boolean{algocf@hanging}}{\everypar{\algocf@everypar}}{\relax}% }% % \newcommand{\algocf@seteveryparnl}[1]{\renewcommand{\algocf@everyparnl}{#1}\everypar{\algocf@everypar}}% \newcommand{\algocf@seteveryparhanging}[1]{% \let\algocf@oldeveryparhanging=\algocf@everyparhanging% \renewcommand{\algocf@everyparhanging}{#1}\everypar{\algocf@everypar}% }% \newcommand{\algocf@reseteveryparhanging}{% \let\algocf@everyparhanging=\algocf@oldeveryparhanging% \everypar{\algocf@everypar}% }% \DeclareOption{hanginginout}{\setboolean{algocf@hanginginout}{true}}% \DeclareOption{hangingcomment}{\setboolean{algocf@hangingcomment}{true}}% \DeclareOption{noalgohanging}{% \setboolean{algocf@hanginginout}{false}% \setboolean{algocf@hangingcomment}{false}% \setboolean{algocf@hanging}{false}% }% %\newcommand{ % % % OPTION linesnumbered % \newboolean{algocf@linesnumbered}\setboolean{algocf@linesnumbered}{false}% \newcommand{\algocf@linesnumbered}{\relax}% \DeclareOption{linesnumbered}{% \setboolean{algocf@linesnumbered}{true}% \renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\nl}}% }% % % OPTION linesnumberedhidden % \DeclareOption{linesnumberedhidden}{% \setboolean{algocf@linesnumbered}{true}% \renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\stepcounter{AlgoLine}}}% }% % % OPTION commentsnumbered inoutnumbered % \newboolean{algocf@commentsnumbered}\setboolean{algocf@commentsnumbered}{false}% \DeclareOption{commentsnumbered}{\setboolean{algocf@commentsnumbered}{true}}% \newboolean{algocf@inoutnumbered}\setboolean{algocf@inoutnumbered}{false}% \DeclareOption{inoutnumbered}{\setboolean{algocf@inoutnumbered}{true}}% % % OPTIONs titlenumbered & titlenotnumbered % \DeclareOption{titlenumbered}{% \renewcommand{\@titleprefix}{% \refstepcounter{\algocf@float}% \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\ \expandafter\csname the\algocf@float\endcsname\algocf@typo: }% }% }% % \DeclareOption{titlenotnumbered}{\renewcommand{\@titleprefix}{% \AlTitleSty{\AlTitleFnt\@algocf@titleofalgoname\algocf@typo: }}% }% % % OPTIONs algonl % line numbered with the counter of the algorithm % \DeclareOption{algonl}{\renewcommand{\theAlgoLine}{\expandafter\csname the\algocf@float\endcsname.\arabic{AlgoLine}}}% % % OPTIONs lined, vlined & noline % \DeclareOption{lined}{\AtBeginDocument{\SetAlgoLined}}% \SetAlgoLined (default) \DeclareOption{vlined}{\AtBeginDocument{\SetAlgoVlined}}% \SetAlgoVlined \DeclareOption{noline}{\AtBeginDocument{\SetAlgoNoLine}}%\SetAlgoNoLine % % OPTIONs longend, shotend & noend % \DeclareOption{longend}{\AtBeginDocument{\SetAlgoLongEnd}}% \SetAlgoLongEnd \DeclareOption{shortend}{\AtBeginDocument{\SetAlgoShortEnd}}%\SetAlgoShortEnd \DeclareOption{noend}{\AtBeginDocument{\SetAlgoNoEnd}}% \SetAlgoNoEnd % \DeclareOption{nosemicolon}{\AtBeginDocument{\DontPrintSemicolon}}% \SetAlgoNoEnd % % OPTION dotoc % \newboolean{algocf@dotocloa}\setboolean{algocf@dotocloa}{false}% \DeclareOption{dotocloa}{% \setboolean{algocf@dotocloa}{true}% } % % OPTION comments % \newboolean{algocf@optfillcomment}\setboolean{algocf@optfillcomment}{true}% \DeclareOption{nofillcomment}{% \setboolean{algocf@optfillcomment}{false}% }% \DeclareOption{fillcomment}{% \setboolean{algocf@optfillcomment}{true}% }% % % OPTION sidecommments % \newboolean{algocf@scleft}\setboolean{algocf@scleft}{false}% \DeclareOption{scleft}{% \setboolean{algocf@scleft}{true}% }% \DeclareOption{sright}{% default \setboolean{algocf@scleft}{false}% }% % % OPTION norelsize % \newboolean{algocf@norelsize}\setboolean{algocf@norelsize}{false}% \DeclareOption{norelsize}{% \setboolean{algocf@norelsize}{true}% }% % % %%%%%%%%%%%%%%%%%%%%%%% Execution of Options %%%%%%%%%%%%%%%%%%%%%%%%%%%% % \ExecuteOptions{english,plain,resetcount,titlenotnumbered,lined,shortend}% % \ProcessOptions% % \@algocf@algotitleofalgo% fix name for \TitleOfAlgo to \algorithmcfname by default % %%%%%%%%%%%%%%%%%%%%%%%%%% Package Loading %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \RequirePackage{ifoddpage}% \RequirePackage{xspace}% % \ifthenelse{\boolean{algocf@endfloat}}{% \RequirePackage{endfloat}% }{\relax}% % \ifthenelse{\boolean{algocf@norelsize}}{% \newcommand{\relsize}[1]{\scriptsize}% }{% \RequirePackage{relsize}% }% % \ifthenelse{\boolean{algocf@slide}}{\RequirePackage{xcolor}}{}% % % \AtEndOfPackage{% \ifthenelse{\boolean{algocf@dotocloa}}{% \renewcommand{\listofalgorithms}{\tocfile{\listalgorithmcfname}{loa}}% }{\relax}% }% % % if loa in toc required, load tocbibind package if not already done. \ifthenelse{\boolean{algocf@dotocloa}}{% \ifx\@tocextra\undefined% \RequirePackage{tocbibind}% \fi% }{\relax}% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%% Main Part %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \newcommand{\algocf@name}{algorithm2e}% \newcommand{\algocf@date}{July 18 2017}% \newcommand{\algocf@version}{Release 5.2}% \newcommand{\algocf@id}{\algocf@version\space -- \algocf@date\space --}% % \typeout{********************************************************^^JPackage `\algocf@name'\space\algocf@id^^J% % - algorithm2e-announce@lirmm.fr mailing list for announcement about releases^^J% % - algorithm2e-discussion@lirmm.fr mailing list for discussion about package^^J% % subscribe by emailing sympa@lirmm.fr with 'subscribe '^^J% % - Author: Christophe Fiorio (christophe.fiorio@umontpellier.fr)^^J********************************************************}% %% %% %% %% %% %% %%%% hyperref compatibility tricks: Hyperref package defines H counters from % standard counters (i.e \theHpage from \thepage) and check some particular % counters of some packages, unfortunately it doesn't do the same for % algorithm2e package but act as Hcounter was defined. To avoid errors we % defined \theHalgocf ourself %%%% % \@ifundefined{theHalgocf}{\def\theHalgocf{\thealgocf}}{}% \@ifundefined{theHAlgoLine}{\def\theHAlgoLine{\theAlgoLine}}{}% \@ifundefined{theHalgocfproc}{\def\theHalgocfproc{0}}{}% \@ifundefined{theHalgocffunc}{\def\theHalgocffunc{0}}{}% \@ifundefined{toclevel@algocf}{\def\toclevel@algocf{0}}{}% % % autoref from hyperref needs an autorefname, so we give it. \def\AlgoLineautorefname{\algorithmcflinename}% \def\algocfautorefname{\algorithmautorefname}% \def\algocfprocautorefname{\procedureautorefname}% \def\algocffuncautorefname{\functionautorefname}% %% %% %% \newcommand{\@defaultskiptotal}{0.5em}% \newskip\skiptotal\skiptotal=0.5em% \newskip\skiplinenumber\skiplinenumber=\hsize\advance\skiplinenumber by-\skiptotal% \newskip\skiprule% \newskip\skiphlne% \newskip\skiptext% \newskip\skiplength% \newskip\algomargin% \newskip\skipalgocfslide\skipalgocfslide=1em% \newdimen\algowidth% \newdimen\inoutsize% \newdimen\inoutindent% \newdimen\interspacetitleruled\setlength{\interspacetitleruled}{2pt}% \newdimen\interspacealgoruled\setlength{\interspacealgoruled}{2pt}% \newdimen\interspacetitleboxruled\setlength{\interspacetitleboxruled}{2\lineskip}% % \newcommand{\@algoskip}{\smallskip}% \newcommand{\SetAlgoSkip}[1]{\renewcommand{\@algoskip}{\csname#1\endcsname}}% \newcommand{\@algoinsideskip}{\relax}% \newcommand{\SetAlgoInsideSkip}[1]{\renewcommand{\@algoinsideskip}{\csname#1\endcsname}}% % % ruledwidth % \newlength{\algocf@ruledwidth}\setlength{\algocf@ruledwidth}{\linewidth}% \newboolean{algocf@customruledwidth}\setboolean{algocf@customruledwidth}{false}% \newcommand{\SetCustomAlgoRuledWidth}[1]{% \setboolean{algocf@customruledwidth}{true}% \ifthenelse{\boolean{algocf@customruledwidth}}{\setlength{\algocf@ruledwidth}{#1}}{\relax}% }% % \newsavebox{\algocf@inoutbox}% \newsavebox{\algocf@inputbox}% %% %% \newcommand{\arg@e}{}% \newcommand{\arg@space}{\ }% \newcommand{\BlankLine}{\vskip 1ex}% %% \newcommand{\vespace}{1ex}% \newcommand{\SetInd}[2]{% \skiprule=#1% \skiptext=#2% \skiplength=\skiptext\advance\skiplength by \skiprule\advance\skiplength by 0.4pt}% \SetInd{0.5em}{1em} \algomargin=\leftskip\advance\algomargin by \parindent% \newcommand{\IncMargin}[1]{\advance\algomargin by #1}% \newcommand{\DecMargin}[1]{\advance\algomargin by -#1}% \newcommand{\SetNlSkip}[1]{% \renewcommand{\@defaultskiptotal}{#1}% \setlength{\skiptotal}{#1}}% %% \newskip\AlCapSkip\AlCapSkip=0ex% \newskip\AlCapHSkip\AlCapSkip=0ex% \newcommand{\SetAlCapSkip}[1]{\setlength{\AlCapSkip}{#1}}% \newcommand{\SetAlCapHSkip}[1]{\setlength{\AlCapHSkip}{#1}}% \SetAlCapHSkip{.5\algomargin}% %% %% \newskip\algoskipindent \newcommand{\algocf@adjustskipindent}{% \algoskipindent=\skiprule% \advance\algoskipindent by \skiptext\advance\algoskipindent by 0.4pt} \algocf@adjustskipindent% % \newcommand{\Indentp}[1]{\advance\leftskip by #1}% \newcommand{\Indp}{\algocf@adjustskipindent\advance\leftskip by \algoskipindent} \newcommand{\Indpp}{\advance\leftskip by 0.5em}% \newcommand{\Indm}{\algocf@adjustskipindent\advance\leftskip by -\algoskipindent} \newcommand{\Indmm}{\advance\leftskip by -0.5em}% % %% %% %% Line Numbering %% %% % number line style \newcommand{\algocf@nlrelsize}{-2}\newcommand{\SetAlgoNlRelativeSize}[1]{\renewcommand{\algocf@nlrelsize}{#1}}% \newcommand{\NlSty}[1]{\textnormal{\textbf{\relsize{\algocf@nlrelsize}#1}}}% default definition \newcommand{\SetNlSty}[3]{\renewcommand{\NlSty}[1]{\textnormal{\csname#1\endcsname{\relsize{\algocf@nlrelsize}#2##1#3}}}}% % % nl definitions % \newsavebox{\algocf@nlbox}% \newcommand{\algocf@printnl}[1]{% \ifthenelse{\boolean{algocf@leftlinenumber}}{% \skiplinenumber=\skiptotal\advance\skiplinenumber by\leftskip% \strut\raisebox{0pt}{\llap{\NlSty{#1}\kern\skiplinenumber}}\ignorespaces% }{% \sbox\algocf@nlbox{\NlSty{#1}}% \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip\advance\skiplinenumber by-\skiptext% \advance\skiplinenumber by\algomargin\advance\skiplinenumber by.3em\advance\skiplinenumber by-\wd\algocf@nlbox% % to handle particular case of until: printnl is after 'until' keyword has been writen, so we need to substract length of this keyword \advance\skiplinenumber by-\algocf@skipuntil% \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\NlSty{#1\ignorespaces}}}\ignorespaces% }% }% \newcommand{\algocf@nl@sethref}[1]{% \renewcommand{\theHAlgoLine}{\thealgocfproc.#1}% \hyper@refstepcounter{AlgoLine}\gdef\@currentlabel{#1}% }% \newcommand{\nl}{% \@ifundefined{hyper@refstepcounter}{% if not hyperref then do a simple refstepcounter \refstepcounter{AlgoLine}\gdef\@currentlabel{\theAlgoLine}% }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}% }% now we can do the line numbering \algocf@printnl{\theAlgoLine}% }% % \newcommand{\nllabel}[1]{\label{#1}}% % \newcommand{\enl}{% \@ifundefined{hyper@refstepcounter}{% if not hyperref then do a simple refstepcounter \refstepcounter{AlgoLine}\gdef\@currentlabel{\theAlgoLine}% }{% else if hyperref, do the anchor so 2 lines in two differents algorithms cannot have the same href \stepcounter{AlgoLine}\algocf@nl@sethref{\theAlgoLine}% }% now we can do the line numbering \skiplinenumber=\hsize\advance\skiplinenumber by-\leftskip% \strut\raisebox{0pt}{\rlap{\kern\skiplinenumber\strut\NlSty{\theAlgoLine}}}\ignorespaces% }% %% nlset \newcommand{\nlset}[1]{% \@ifundefined{hyper@refstepcounter}{\protected@edef\@currentlabel{#1}}{\algocf@nl@sethref{#1}}\algocf@printnl{#1}% }% % %% lnl definitions \newcommand{\lnl}[1]{\nl\label{#1}\ignorespaces}% % %% lnlset \newcommand{\lnlset}[2]{\nlset{#2}\label{#1}}% % % set char put at end of each line % \newcommand{\algocf@endline}{\string;} \newcommand{\SetEndCharOfAlgoLine}[1]{\renewcommand{\algocf@endline}{#1}} % % end of line definition % \newcommand{\@endalgocfline}{\algocf@endline}% default definition: printsemicolon \newcommand{\DontPrintSemicolon}{\renewcommand{\@endalgocfline}{\relax}}% \newcommand{\PrintSemicolon}{\renewcommand{\@endalgocfline}{\algocf@endline}}% \newcommand{\@endalgoln}{\@endalgocfline\hfill\strut\par}% % % line numbering % \newcommand{\LinesNumbered}{\setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\nl}}}% \newcommand{\LinesNotNumbered}{% \setboolean{algocf@linesnumbered}{false}% \renewcommand{\algocf@linesnumbered}{\relax}% }% % \newcommand{\LinesNumberedHidden}{% \setboolean{algocf@linesnumbered}{true}\renewcommand{\algocf@linesnumbered}{\algocf@seteveryparnl{\stepcounter{AlgoLine}}}}% \newcommand{\ShowLn}{\nlset{\theAlgoLine}\ignorespaces}% display the line number on this line (without labelling) \newcommand{\ShowLnLabel}[1]{\lnlset{#1}{\theAlgoLine}\ignorespaces}% display the line number and label this line % %% % %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Styling text commands % \newcommand{\AlFnt}{\relax}% default definition \newcommand{\SetAlFnt}[1]{\renewcommand{\AlFnt}{#1}}% \newcommand{\AlTitleFnt}{\relax}% default definition \newcommand{\SetAlTitleFnt}[1]{\renewcommand{\AlTitleFnt}{#1}}% % \newcommand{\AlCapFnt}{\relax}% default definition \newcommand{\SetAlCapFnt}[1]{\renewcommand{\AlCapFnt}{#1}}% \newcommand{\AlCapNameFnt}{\relax}% default definition \newcommand{\SetAlCapNameFnt}[1]{\renewcommand{\AlCapNameFnt}{#1}}% % \newcommand{\ProcFnt}{\relax}% default definition \newcommand{\SetProcFnt}[1]{\renewcommand{\ProcFnt}{#1}}% \newcommand{\ProcNameFnt}{\relax}% default definition \newcommand{\SetProcNameFnt}[1]{\renewcommand{\ProcNameFnt}{#1}}% \newcommand{\ProcArgFnt}{\relax}% default definition \newcommand{\SetProcArgFnt}[1]{\renewcommand{\ProcArgFnt}{#1}}% % \newcommand{\AlTitleSty}[1]{\textbf{#1}\unskip}% default definition \newcommand{\SetAlTitleSty}[1]{\renewcommand{\AlTitleSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\AlCapSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition \newcommand{\SetAlCapSty}[1]{\renewcommand{\AlCapSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\AlCapNameSty}[1]{\textnormal{#1}\unskip}% default definition \newcommand{\SetAlCapNameSty}[1]{\renewcommand{\AlCapNameSty}[1]{\textnormal{\csname #1\endcsname{##1}}\unskip}}% % \newcommand{\ProcSty}[1]{\AlCapSty{#1}}% \newcommand{\SetProcSty}[1]{\renewcommand{\ProcSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\ProcNameSty}[1]{\AlCapNameSty{#1}}% \newcommand{\SetProcNameSty}[1]{\renewcommand{\ProcNameSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\ProcArgSty}[1]{\AlCapNameSty{#1}}% \newcommand{\SetProcArgSty}[1]{\renewcommand{\ProcArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% % \newcommand{\KwSty}[1]{\textnormal{\textbf{#1}}\unskip}% default definition \newcommand{\SetKwSty}[1]{\renewcommand{\KwSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\ArgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetArgSty{emph} \newcommand{\SetArgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\FuncArgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetFuncArgSty{emph} \newcommand{\SetFuncArgSty}[1]{\renewcommand{\FuncArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\FuncSty}[1]{\textnormal{\texttt{#1}}\unskip}%\SetFuncSty{texttt} \newcommand{\SetFuncSty}[1]{\renewcommand{\FuncSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\ProgSty}[1]{\textnormal{\emph{#1}}\unskip}%\SetProgSty{emphg} \newcommand{\SetProgSty}[1]{\renewcommand{\ArgSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\DataSty}[1]{\textnormal{\textsf{#1}}\unskip}%%\SetDataSty{textsf} \newcommand{\SetDataSty}[1]{\renewcommand{\DataSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\CommentSty}[1]{\textnormal{\texttt{#1}}\unskip}%%\SetDataSty{texttt} \newcommand{\SetCommentSty}[1]{\renewcommand{\CommentSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% \newcommand{\TitleSty}[1]{#1\unskip}%\SetTitleSty{}{} \newcommand{\SetTitleSty}[2]{\renewcommand{\TitleSty}[1]{% \csname#1\endcsname{\csname#2\endcsname##1}}\unskip}% \newcommand{\BlockMarkersSty}[1]{\KwSty{#1}}% \newcommand{\SetBlockMarkersSty}[1]{\renewcommand{\BlockMarkersSty}[1]{\textnormal{\csname#1\endcsname{##1}}\unskip}}% % %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Block basic commands % \newcommand{\algocf@push}[1]{\advance\skiptotal by #1\moveright #1}% \newcommand{\algocf@pop}[1]{\advance\skiptotal by -#1}% \newcommand{\algocf@addskiptotal}{% \advance\hsize by -\skiplength% }% \skiplength=skiptext+0.4 pt that is the width of \vrule \newcommand{\algocf@subskiptotal}{% \advance\hsize by \skiplength% }% \skiplength=skiptext+0.4 pt that is the width of \vrule % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% group of instructions definition % \skiphlne=.8ex% \newcommand{\SetVlineSkip}[1]{\skiphlne=#1}% \newcommand{\algocf@bblock}{\BlockMarkersSty{begin}}% \newcommand{\algocf@eblock}{\BlockMarkersSty{end}}% \newcommand{\AlgoDisplayBlockMarkers}{\setboolean{algocf@displayblockmarkers}{true}}% \newcommand{\AlgoDontDisplayBlockMarkers}{\setboolean{algocf@displayblockmarkers}{false}}% \newcommand{\AlgoDisplayGroupMarkers}{\setboolean{algocf@displaygroupmarkers}{true}}% \newcommand{\AlgoDontDisplayGroupMarkers}{\setboolean{algocf@displaygroupmarkers}{false}}% \newcommand{\algocf@bblockcode}{% \ifthenelse{\boolean{algocf@displayblockmarkers}}{\algocf@bblock\par}{\relax}% }% \newcommand{\algocf@eblockcode}{% \ifthenelse{\boolean{algocf@displayblockmarkers}}{\algocf@eblock\par}{\relax}% }% \newcommand{\algocf@bgroupcode}{% \ifthenelse{\boolean{algocf@displaygroupmarkers}}{\algocf@bblock}{\relax}% }% \newcommand{\algocf@egroupcode}{% \ifthenelse{\boolean{algocf@displaygroupmarkers}}{\algocf@eblock}{\relax}% }% \newcommand{\SetAlgoBlockMarkers}[2]{% \ifArgumentEmpty{#1}{% \renewcommand{\algocf@bblock}{\relax}% }{% \renewcommand{\algocf@bblock}{\BlockMarkersSty{#1}}% }% begin marker set \ifArgumentEmpty{#2}{% \renewcommand{\algocf@eblock}{\relax}% }{% \renewcommand{\algocf@eblock}{\BlockMarkersSty{#2}}% }% end marker set } % %%%%%%%%% block with a vertical line end by a little horizontal line \newcommand{\algocf@Vline}[1]{% no vskip in between boxes but a strut to separate them, \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it \algocf@push{\skiprule}% move to the right before the vertical rule \hbox{\vrule% \vtop{\algocf@push{\skiptext}%move the right after the rule \vtop{\algocf@addskiptotal #1}\Hlne}}\vskip\skiphlne% inside the block \algocf@pop{\skiprule}%\algocf@subskiptotal% restore indentation \nointerlineskip}% no vskip after % %%%%%%%%% block with a vertical line \newcommand{\algocf@Vsline}[1]{% no vskip in between boxes but a strut to separate them, \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it \algocf@bblockcode% \algocf@push{\skiprule}% move to the right before the vertical rule \hbox{\vrule% the vertical rule \vtop{\algocf@push{\skiptext}%move the right after the rule \vtop{\algocf@addskiptotal #1}}}% inside the block \algocf@pop{\skiprule}% restore indentation \algocf@eblockcode% } % \newcommand{\algocf@Hlne}{\hrule height 0.4pt depth 0pt width .5em}% % %%%%%%%%% block without line \newcommand{\algocf@Noline}[1]{% no vskip in between boxes but a strut to separate them, \strut\par\nointerlineskip% then interblock space stay the same whatever is inside it \algocf@bblockcode% \algocf@push{\skiprule}% \hbox{% \vtop{\algocf@push{\skiptext}% \vtop{\algocf@addskiptotal #1}}}% inside the block \algocf@pop{\skiprule}%\algocf@subskiptotal% \algocf@eblockcode% % \nointerlineskip% no vskip after }% %%%%%%%%% % %% default=NoLine % \newcommand{\algocf@group}[1]{\algocf@Noline{#1}}% group: set of instruction depending from another (ex: then part of the If) \newcommand{\algocf@@@eblock}[2]{#1\ifArgumentEmpty{#2}{\relax}{\KwSty{\@algocf@endoption{#2}}\strut\par}}% block: group with a end keyword. \newcommand{\algocf@@@block}[3]{#1\ifArgumentEmpty{#2}{\ifArgumentEmpty{#3}{\relax}{ #3\relax}}{\KwSty{\@algocf@endoption{#2}}\ifArgumentEmpty{#3}{\relax}{ #3}\strut\par}}% block: group with a end keyword. \newcommand{\algocf@@block}[3]{\algocf@@@block{#1}{#2}{#3}}% block: group with a end keyword. \newcommand{\algocf@block}[3]{\algocf@@block{#1}{#2}{#3}}% command that will be used and redefined accordingly to noend option %\newcommand{\algocf@nblock}[3]{\algocf@@block{#1}{#2}{#3}}% command that will be used and redefined accordingly to noend option \newcommand{\algocf@setBlock}{% \ifthenelse{\boolean{algocf@optnoend}}{% if no end option \renewcommand{\algocf@block}[3]{\algocf@group{##1}}% block will be a group }{% else \renewcommand{\algocf@block}[3]{\algocf@@block{##1}{##2}{##3}}% block stays a block }% }% % \newcommand{\Hlne}{}% little hrizontal line ending a block in vline mode % \newcommand{\@algocf@endoption}[1]{#1}% \newboolean{algocf@optnoend}\setboolean{algocf@optnoend}{false}% % \newcommand{\SetAlgoLongEnd}{%%%%%%%%%%%%%%%%%%%%%%%%% Long End \setboolean{algocf@optnoend}{false}% \renewcommand{\@algocf@endoption}[1]{##1}% \algocf@setBlock}% % \newcommand{\SetAlgoShortEnd}{%%%%%%%%%%%%%%%%%%%%%%%% ShortEnd \setboolean{algocf@optnoend}{false}% \renewcommand{\@algocf@endoption}[1]{\@firstword##1 \@nil}% \algocf@setBlock}% % \newcommand{\SetAlgoNoEnd}{%%%%%%%%%%%%%%%%%%%%%%%%%%% NoEnd \setboolean{algocf@optnoend}{true}% \renewcommand{\@algocf@endoption}[1]{}% \algocf@setBlock}% % \newboolean{algocf@optAlgoNoLine}\setboolean{algocf@optAlgoNoLine}{false} \newcommand{\SetAlgoNoLine}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline \setboolean{algocf@optAlgoNoLine}{true}% \renewcommand{\algocf@@block}[2]{\algocf@@@block{\algocf@Noline{##1}}{##2}}% \renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}% \renewcommand{\Hlne}{}}% % \newcommand{\SetAlgoVlined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Vline \setboolean{algocf@optAlgoNoLine}{false}% \renewcommand{\algocf@@block}[2]{\algocf@Vline{##1}}% \renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}}%\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}% \renewcommand{\Hlne}{\algocf@Hlne}}% % \newcommand{\SetAlgoLined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Line \setboolean{algocf@optAlgoNoLine}{false}% \renewcommand{\algocf@@block}[2]{\algocf@@@block{\strut\algocf@Vsline{##1}}{##2}}% no skip after a block so garantie at least one line \renewcommand{\algocf@group}[1]{\algocf@Vsline{##1}}%\ifthenelse{\boolean{algocf@optnoend}}{\relax}{\strut\ignorespaces}}% \renewcommand{\Hlne}{}}% % \newcommand{\SetNothing}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline \setboolean{algocf@optAlgoNoLine}{true}% \renewcommand{\algocf@@block}[2]{\algocf@Noline{##1}\par}% %\long \renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}% \renewcommand{\Hlne}{}}% % %% %% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % ``Input:'''s like command % %%% % text staying at the right of the longer keyword of KwInOut commands % (text of KwInOut commands are all vertically aligned) % \newcommand{\algocf@newinout}{\par\parindent=\inoutindent}% to put right indentation after a \\ in the KwInOut \newcommand{\SetKwInOut}[2]{% \sbox\algocf@inoutbox{\KwSty{#2\algocf@typo:}}% \expandafter\ifx\csname InOutSizeDefined\endcsname\relax% if first time used \newcommand\InOutSizeDefined{}\setlength{\inoutsize}{\wd\algocf@inoutbox}% \sbox\algocf@inoutbox{\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~}\setlength{\inoutindent}{\wd\algocf@inoutbox}% \else% else keep the larger dimension \ifdim\wd\algocf@inoutbox>\inoutsize% \setlength{\inoutsize}{\wd\algocf@inoutbox}% \sbox\algocf@inoutbox{\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~}\setlength{\inoutindent}{\wd\algocf@inoutbox}% \fi% \fi% the dimension of the box is now defined. \algocf@newcommand{#1}[1]{% \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@seteveryparhanging{\relax}}% \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}% % {\let\\\algocf@newinout\hangindent=\wd\algocf@inoutbox\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2}\algocf@typo\hfill:}~##1\par}% {\let\\\algocf@newinout\hangindent=\inoutindent\hangafter=1\parbox[t]{\inoutsize}{\KwSty{#2\algocf@typo\hfill:}}~##1\par}% \algocf@linesnumbered% reset the numbering of the lines \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@reseteveryparhanging}% }}% % %% allow to ajust the skip size of InOut %% \newcommand{\ResetInOut}[1]{% \sbox\algocf@inoutbox{\hbox{\KwSty{#1\algocf@typo:}\ }}% \setlength{\inoutsize}{\wd\algocf@inoutbox}% }% % % %%% % text staying at the right of the keyword. % \newcommand{\algocf@newinput}{\par\parindent=\wd\algocf@inputbox}% to put right indentation after a \\ in the KwInput \newcommand{\SetKwInput}[2]{% \algocf@newcommand{#1}[1]{% \sbox\algocf@inputbox{\hbox{\KwSty{#2\algocf@typo:} }}% \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@seteveryparhanging{\relax}}% \ifthenelse{\boolean{algocf@inoutnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}% {\let\\\algocf@newinput\hangindent=\wd\algocf@inputbox\hangafter=1\unhbox\algocf@inputbox##1\par}% \algocf@linesnumbered% reset the numbering of the lines \ifthenelse{\boolean{algocf@hanginginout}}{\relax}{\algocf@reseteveryparhanging}% }}% \newcommand{\SetKwData}[2]{% \algocf@newcommand{@#1}[1]{\DataSty{#2(}\ArgSty{##1}\DataSty{)}}% \algocf@newcommand{#1}{% \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% }% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % tallent: % % Add following macros: % \SetKwHangingKw: [kw] ------------ <= hanging determined by [kw] % ------------ % Should act like a combination of \SetKwInput and \SetKw. % Based on \SetKwInput: % - remove ':' at end of keyword % - do not reset numbering % - use separate savebox \newsavebox{\algocf@hangingbox} \newcommand{\algocf@newhanging}{\par\parindent=\wd\algocf@hangingbox}% to put right indentation after a \\ in the KwInput \newcommand{\SetKwHangingKw}[2]{% \algocf@newcommand{#1}[1]{% \sbox\algocf@hangingbox{\hbox{\KwSty{#2}\algocf@typo\ }}% {\let\\\algocf@newhanging\hangindent=\wd\algocf@hangingbox\hangafter=1\unhbox\algocf@hangingbox##1\;}% }% }% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Comments macros % %%%% % comment in the text, first argument is the name of the macro, second is % the text put before the comment, third is the text put at the end of the % comment. % % first side comment justification \newcommand{\SetSideCommentLeft}{\setboolean{algocf@scleft}{true}}% \newcommand{\SetSideCommentRight}{\setboolean{algocf@scleft}{false}}% \newcommand{\SetNoFillComment}{\setboolean{algocf@optfillcomment}{false}}% \newcommand{\SetFillComment}{\setboolean{algocf@optfillcomment}{true}}% % % next comment and side comment % \newcommand{\algocf@endmarkcomment}{\relax}% \newcommand{\algocf@fillcomment}{% \ifthenelse{\boolean{algocf@optfillcomment}}{\hfill}{\relax}}% % \newcommand{\algocf@startcomment}{% \hangindent=\wd\algocf@inputbox\hangafter=1\usebox\algocf@inputbox}% \newcommand{\algocf@endcomment}{\algocf@fillcomment\algocf@endmarkcomment\ignorespaces\par}% \newcommand{\algocf@endstartcomment}{\algocf@endcomment\algocf@startcomment\ignorespaces}% % \newboolean{algocf@sidecomment}% \newboolean{algocf@altsidecomment}\setboolean{algocf@altsidecomment}{false}% \newcommand{\algocf@scpar}{\ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\par}}% \newcommand{\algocf@sclfill}{\ifthenelse{\boolean{algocf@scleft}}{\algocf@fillcomment}{\relax}}% \newcommand{\algocf@scrfill}{\ifthenelse{\boolean{algocf@scleft}}{\relax}{\hfill}}% \newcommand{\algocf@startsidecomment}{\usebox\algocf@inputbox}% \newcommand{\algocf@endsidecomment}{\algocf@endmarkcomment\algocf@scpar}% \newcommand{\algocf@endstartsidecomment}{% \algocf@sclfill\algocf@endsidecomment% \algocf@scrfill\algocf@startsidecomment\ignorespaces}% % \newcommand{\SetKwComment}[3]{% \algocf@newcommand{#1}{\@ifstar{\csname algocf@#1@star\endcsname}{\csname algocf@#1\endcsname}}% \algocf@newcommand{algocf@#1}[1]{% \ifthenelse{\boolean{algocf@hangingcomment}}{\relax}{\algocf@seteveryparhanging{\relax}}% \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}% {\renewcommand{\algocf@endmarkcomment}{#3}% \let\\\algocf@endstartcomment% \algocf@startcomment\CommentSty{% \strut\ignorespaces##1\strut\algocf@fillcomment#3}\par}% \algocf@linesnumbered% reset the numbering of the lines \ifthenelse{\boolean{algocf@hangingcomment}}{\relax}{\algocf@reseteveryparhanging}% }% %%% side comment definitions \algocf@newcommand{algocf@#1@star}[2][]{% \ifArgumentEmpty{##1}\relax{% TODO: Is this even necessary, with all those \ifx's? \ifthenelse{\boolean{algocf@scleft}}{\setboolean{algocf@sidecomment}{true}}{\setboolean{algocf@sidecomment}{false}}% \ifx##1h\setboolean{algocf@altsidecomment}{true}\SetSideCommentLeft\fi% \ifx##1f\setboolean{algocf@altsidecomment}{true}\SetSideCommentRight\fi% \ifx##1l\setboolean{algocf@altsidecomment}{false}\SetSideCommentLeft\fi% \ifx##1r\setboolean{algocf@altsidecomment}{false}\SetSideCommentRight\fi% }% \sbox\algocf@inputbox{\CommentSty{\hbox{#2}}}% \ifthenelse{\boolean{algocf@commentsnumbered}}{\relax}{\algocf@seteveryparnl{\relax}}% {% \renewcommand{\algocf@endmarkcomment}{#3}% \let\\\algocf@endstartsidecomment% % here is the comment \ifthenelse{\boolean{algocf@altsidecomment}}{\relax}{\@endalgocfline\ }% \algocf@scrfill\algocf@startsidecomment\CommentSty{% \strut\ignorespaces##2\strut\algocf@sclfill#3}\algocf@scpar% }% \algocf@linesnumbered% reset the numbering of the lines \ifArgumentEmpty{##1}\relax{% \ifthenelse{\boolean{algocf@sidecomment}}{\setboolean{algocf@scleft}{true}}{\setboolean{algocf@scleft}{false}}% \setboolean{algocf@altsidecomment}{false}% }% }% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwProg % \newcommand{\SetKwProg}[4]{%\SetKwProg{Env}{Title}{is}{end} \algocf@newcmdside@koif{#1}{\KwSty{#2}\ifArgumentEmpty{#2}\relax{\ }\ProgSty{##2}\KwSty{#3}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#4}{##4}}% \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}% \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2} \ProgSty{##2}\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode\@endalgocfline\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2} \ProgSty{##2}\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode}% }% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwProgFn % \newcommand{\SetKwProgFn}[4]{%\SetKwProg{Env}{Title}{is}{end} \algocf@newcmdsides{#1}{4}{\KwSty{#2}\ifArgumentEmpty{#2}\relax{\ }{##2}\KwSty{#3}{##3}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@group{##4}\KwSty{#4}}{\relax}{\strut\par}% \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}% \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2} \ProgSty{##2}\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode\@endalgocfline\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2} \ProgSty{##2}\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode}% }% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Kw % \newcommand{\SetKw}[2]{% \algocf@newcommand{@#1}[1]{\KwSty{#2} \ArgSty{##1}} \algocf@newcommand{#1}{\@ifnextchar\bgroup{\csname @#1\endcsname}{\KwSty{#2}\xspace}}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwFunction % \newcommand{\SetKwFunction}[2]{% %%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc \expandafter\gdef\csname @#1\endcsname##1{\FuncSty{#2(}\FuncArgSty{##1}\FuncSty{)}}% \expandafter\gdef\csname#1\endcsname{% \@ifnextchar\bgroup{\csname @#1\endcsname}{\FuncSty{#2}\xspace}}% }% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwTab % \newcommand{\SetKwArray}[2]{% %%% use of gdef since newcommand doesn't manage to define the macro when SetKwFunction is used in \algocf@caption@proc \expandafter\gdef\csname @#1\endcsname##1{\DataSty{#2[}\ArgSty{##1}\DataSty{]}}% \expandafter\gdef\csname#1\endcsname{% \@ifnextchar\bgroup{\csname @#1\endcsname}{\DataSty{#2}\xspace}}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % KwBlock % \newcommand{\SetKwBlock}[3]{% \algocf@newcmdside@kobe{#1}% {\KwSty{#2}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##2}{#3}{##3}\par}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % condition typo % \newcommand{\algocf@scond}{\ } \newcommand{\algocf@econd}{\ } \newcommand{\algocf@ucond}{} \newcommand{\SetStartEndCondition}[3]{% \renewcommand{\algocf@scond}{#1}\renewcommand{\algocf@econd}{#2}\renewcommand{\algocf@ucond}{#3}}% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % For Switch % \newcommand{\SetKwSwitch}[9]{% #1=\Switch #2=\Case #3=\Other #4=switch #5=do #6=case #7=otherwise #8=endcase #9=endsw % \algocf@newcmdside{#1}{3}% \algocf@newcmdside@koif{#1}% {\KwSty{#4}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#9} {##4\relax}}% %%%% Case \algocf@newcmdside@koif{#2}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#8}{##4\relax}}% %uCase \algocf@newcmdside{u#2}{3}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@group{##3}}% %lcase \algocf@newcommand{l#2}{\@ifstar{\csname algocf@l#2star\endcsname}{\csname algocf@l#2\endcsname}}% \algocf@newcmdside{algocf@l#2}{3}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\ \relax{ ##1}\strut\par}% \algocf@newcmdside{algocf@l#2star}{3}{\KwSty{#6}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#5}\algocf@bgroupcode\ ##3\algocf@egroupcode}% %%%% Other \algocf@newcmdside@kobe{#3}{\KwSty{#7} \KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##2}{#8}{##3\relax}}% %lOther \algocf@newcommand{l#3}{\@ifstar{\csname algocf@l#3star\endcsname}{\csname algocf@l#3\endcsname}}% \algocf@newcmdside{algocf@l#3}{2}{\KwSty{#7} \KwSty{#5}\algocf@bgroupcode\ ##2\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#3star}{2}{\KwSty{#7} \KwSty{#5}\algocf@bgroupcode\ ##2\algocf@egroupcode}% %uOther \algocf@newcmdside{u#3}{3}{\KwSty{#7} \KwSty{#5}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@group{##2}}% }% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % If macros % \newcommand{\SetKwIF}[8]{% #1=\If #2=\ElseIf #3=\Else #4=if #5=then #6=elseif #7=else #8=endif % % common text \algocf@newcommand{#1@ifthen}[1]{\KwSty{#4}\algocf@scond\ArgSty{##1}\algocf@econd\KwSty{#5}}% \algocf@newcommand{#1@endif} [2]{\algocf@block{##1}{#8}{##2}}% \algocf@newcommand{#1@noend} [1]{\algocf@group{##1}}% \algocf@newcommand{#1@else} [1]{\algocf@group{##1}\KwSty{#7}}% \algocf@newcommand{#2@elseif}[1]{\KwSty{#6}\algocf@scond\ArgSty{##1}\algocf@econd\KwSty{#5}}% \algocf@newcommand{#3@else} {\KwSty{#7}}% %%%% If then { } endif \algocf@newcmdside@koif{#1}{\csname #1@ifthen\endcsname{##2}\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@endif\endcsname{##3}{##4\relax}}% %%%% If then {} else {} endif % first command to handle optional side comment of else (so just after first braces) \algocf@newcmdside@kobe{algocf@e#1thenelse}{\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@endif\endcsname{##2}{##3}}% % the definition of if-then-else command using command above \algocf@newcmdside{e#1}{3}{\csname #1@ifthen\endcsname{##2}\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@else\endcsname{##3}\csname algocf@e#1thenelse\endcsname}% %%% leif \algocf@newcommand{le#1}{\@ifstar{\csname algocf@le#1star\endcsname}{\csname algocf@le#1\endcsname}}% \algocf@newcmdside{algocf@le#1}{4}{\csname #1@ifthen\endcsname{##2} \algocf@bgroupcode##3 \csname #3@else\endcsname\ ##4\@endalgocfline\ \algocf@egroupcode\ifArgumentEmpty{##1}\relax{##1}\strut\par}% \algocf@newcmdside{algocf@le#1star}{4}{\csname #1@ifthen\endcsname{##2} \algocf@bgroupcode##3 \csname #3@else\endcsname\ ##4\algocf@egroupcode}% %%%% If then % \algocf@newcmdside{l#1}{3}{\csname #1@ifthen\endcsname{##2}\algocf@bgroupcode\ % ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}% \algocf@newcmdside{algocf@l#1}{3}{\csname #1@ifthen\endcsname{##2}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#1star}{3}{\csname #1@ifthen\endcsname{##2}\algocf@bgroupcode\ ##3\algocf@egroupcode}% \algocf@newcmdside{u#1}{3}{\csname #1@ifthen\endcsname{##2}\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@noend\endcsname{##3}}% %%%% ElseIf {} endif \algocf@newcmdside@koif{#2}{\csname #2@elseif\endcsname{##2}\relax\ifArgumentEmpty{##1}\relax{ ##1}\csname #1@endif\endcsname{##3}{##4\relax}}% %%%% ElseIf \algocf@newcommand{l#2}{\@ifstar{\csname algocf@l#2star\endcsname}{\csname algocf@l#2\endcsname}}% \algocf@newcmdside{algocf@l#2}{3}{\csname #2@elseif\endcsname{##2}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#2star}{3}{\csname #2@elseif\endcsname{##2}\algocf@bgroupcode\ ##3\algocf@egroupcode}% \algocf@newcmdside{u#2}{3}{\csname #2@elseif\endcsname{##2}\relax\ifArgumentEmpty{##1}\relax{##1}\csname #1@noend\endcsname{##3}}% %%%% Else {} endif \algocf@newcmdside@kobe{#3}{\csname #3@else\endcsname\ifArgumentEmpty{##1}\relax\ ##1\csname #1@endif\endcsname{##2}{##3\relax}}% %%%% Else \algocf@newcommand{l#3}{\@ifstar{\csname algocf@l#3star\endcsname}{\csname algocf@l#3\endcsname}}% \algocf@newcmdside{algocf@l#3}{2}{\csname #3@else\endcsname\algocf@bgroupcode\ ##2\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#3star}{2}{\csname #3@else\endcsname\algocf@bgroupcode\ ##2\algocf@egroupcode}% \algocf@newcmdside{u#3}{2}{\csname #3@else\endcsname\ifArgumentEmpty{##1}\relax\ {##1\relax}\csname #1@noend\endcsname{##2}}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % For macros % \newcommand{\SetKwFor}[4]{% \algocf@newcmdside@koif{#1}{\KwSty{#2}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#3}\ifArgumentEmpty{##1}\relax{ ##1}\algocf@block{##3}{#4}{##4\relax}}% \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}% \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#3}\algocf@bgroupcode\ ##3\@endalgocfline\algocf@egroupcode\ifArgumentEmpty{##1}\relax\ {##1}\strut\par}% \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2}\algocf@scond\ArgSty{##2}\algocf@econd\KwSty{#3}\algocf@bgroupcode\ ##3\algocf@egroupcode}% }% % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % Repeat macros % \newsavebox{\algocf@untilbox}% to handle width of until keyword needed to have good skip % for line numbers \newskip\algocf@skipuntil \newcommand{\SetKwRepeat}[3]{% \algocf@newcmdsides{#1}{3}{% \sbox\algocf@untilbox{\KwSty{#3}\algocf@scond}\algocf@skipuntil=\wd\algocf@untilbox% \KwSty{#2}\ifArgumentEmpty{##1}\relax{##1}\algocf@group{##3}% \KwSty{#3}\algocf@scond% until keyword and start condition typo %\advance\skiptotal by\algocf@skipuntil% \ArgSty{##2}% %\advance\skiptotal by-\algocf@skipuntil% \algocf@ucond% \algocf@skipuntil=0pt% reset counter }{\@endalgocfline}{\strut\par}% \algocf@newcommand{l#1}{\@ifstar{\csname algocf@l#1star\endcsname}{\csname algocf@l#1\endcsname}}% \algocf@newcmdside{algocf@l#1}{3}{\KwSty{#2}\algocf@bgroupcode\ ##3\algocf@egroupcode\ \KwSty{#3}\algocf@scond\ArgSty{##2}\algocf@ucond\@endalgocfline\ifArgumentEmpty{##1}\relax{ ##1}\strut\par}% \algocf@newcmdside{algocf@l#1star}{3}{\KwSty{#2}\algocf@bgroupcode\ ##3\algocf@egroupcode\ \KwSty{#3}\algocf@scond\ArgSty{##2}\algocf@ucond}% }% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% Environments definitions %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% %% Caption management %% % for the following macros: % #1 is given by caption and is equal to fnum@algocf % #2 is the text given in argument by the user in the \caption macro % %%%%% text of caption \newcommand{\algocf@captionlayout}[1]{#1}% \newcommand{\SetAlgoCaptionLayout}[1]{% \renewcommand{\algocf@captionlayout}[1]{\csname #1\endcsname{##1}}}% \newcommand{\algocf@capseparator}{:}% \newcommand{\SetAlgoCaptionSeparator}[1]{\renewcommand{\algocf@capseparator}{#1}}% \newcommand{\algocf@captiontext}[2]{% \algocf@captionlayout{\AlCapSty{\AlCapFnt #1\algocf@typo\algocf@capseparator}\nobreakspace% \AlCapNameSty{\AlCapNameFnt{}#2\endgraf}}}% text of caption % %%%%% default caption of algorithm: used if no specific style caption is defined \newcommand{\algocf@makecaption}[2]{% \addtolength{\hsize}{\algomargin}% \sbox\@tempboxa{\algocf@captiontext{#1}{#2}}% \ifdim\wd\@tempboxa >\hsize% % if caption is longer than a line \hskip .5\algomargin% \parbox[t]{\hsize}{\algocf@captiontext{#1}{#2}}% then caption is not centered \else% \global\@minipagefalse% \hbox to\hsize{\hfil\box\@tempboxa\hfil}% else caption is centered \fi% \addtolength{\hsize}{-\algomargin}% }% % \newsavebox\algocf@capbox% \newcommand{\algocf@makecaption@plain}[2]{% \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}}% \newcommand{\algocf@makecaption@boxed}[2]{% \addtolength{\hsize}{-\algomargin}% \global\sbox\algocf@capbox{\algocf@makecaption{#1}{#2}}% \addtolength{\hsize}{\algomargin}% }% % \newlength{\algocf@lcaptionbox}% \newcommand{\algocf@makecaption@plainruled}[2]{\algocf@makecaption@plain{#1}{#2}}% \newcommand{\algocf@makecaption@tworuled}[2]{\algocf@makecaption@ruled{#1}{#2}}% \newcommand{\algocf@makecaption@algoruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% \newcommand{\algocf@makecaption@boxruled}[2]{\algocf@makecaption@ruled{#1}{#2}}% \newcommand{\algocf@makecaption@ruled}[2]{% \global\sbox\algocf@capbox{\hskip\AlCapHSkip% .5\algomargin% \setlength{\algocf@lcaptionbox}{\hsize}\addtolength{\algocf@lcaptionbox}{-\AlCapHSkip}% \parbox[t]{\algocf@lcaptionbox}{\algocf@captiontext{#1}{#2}}}% then caption is not centered }% % \newlength{\algoheightruledefault}\setlength{\algoheightruledefault}{0.8pt}% \newlength{\algoheightrule}\setlength{\algoheightrule}{\algoheightruledefault}% \newlength{\algotitleheightruledefault}\setlength{\algotitleheightruledefault}{0.8pt}% \newlength{\algotitleheightrule}\setlength{\algotitleheightrule}{\algotitleheightruledefault}% \newcommand{\algocf@caption@plain}{\vskip\AlCapSkip\box\algocf@capbox}% \newcommand{\algocf@caption@plainruled}{\algocf@caption@plain}% \newcommand{\algocf@caption@boxed}{\vskip\AlCapSkip\box\algocf@capbox}% \newcommand{\algocf@caption@ruled}{\box\algocf@capbox\kern\interspacetitleruled\hrule width\algocf@ruledwidth height\algotitleheightrule depth0pt\kern\interspacealgoruled}% \newcommand{\algocf@caption@tworuled}{\box\algocf@capbox\hrule height0pt depth0pt\kern\interspacealgoruled}% \newcommand{\algocf@caption@algoruled}{\algocf@caption@ruled}% \newcommand{\algocf@caption@boxruled}{% \hbox{% \vrule% \vbox{% \addtolength{\hsize}{-0.8pt}% \hrule\vskip\interspacetitleboxruled% \hbox to\hsize{\unhbox\algocf@capbox\hfill}\vskip\interspacetitleboxruled% \addtolength{\hsize}{0.8pt}% }% \vrule% }\nointerlineskip% }% % % %%%% set caption for the environment \newcommand{\algocf@captionref}{% \renewcommand{\fnum@algocf}[1]{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\algocf@algocfref}}% \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value \let\old@thealgocf=\thealgocf\renewcommand{\thealgocf}{{\relsize{\algocf@refrelsize}\algocf@algocfref}}% \gdef\@currentlabel{\algocf@algocfref}% let the label use the new ref }% % % Unfortunatly, we also need our own caption to set some specific stuff for special references. But after these % settings, we call the original caption. % \long\def\algocf@caption@algo#1[#2]#3{% \ifthenelse{\equal{\algocf@algocfref}{\relax}}{}{\algocf@captionref}% \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else... \ifthenelse{\equal{\algocf@algocfref}{\relax}}{\renewcommand{\theHalgocf}{\thealgocf}}{% take algocf as Href \renewcommand{\theHalgocf}{\algocf@algocfref}}%else if SetAlgoRefName done, take this name as ref. \hyper@refstepcounter{algocf}%set algocf as category of ref }% \algocf@latexcaption{#1}[{#2}]{{#3}}% call original caption }% % % beamer define is own caption overrinding latex caption! % as we need it, we have put here the original definition % to handle manual ref, unfortunately we have to add one line to handle algocf@algocfref \long\def\algocf@latexcaption#1[#2]#3{% original definition of caption \par% \addcontentsline{\csname ext@#1\endcsname}{#1}% {\protect\numberline{\csname the#1\endcsname}{\ignorespaces #2}}% \begingroup% \@parboxrestore% \if@minipage% \@setminipage% \fi% \normalsize% \@makecaption{\csname fnum@#1\endcsname}{\ignorespaces #3}\par% \endgroup% }% % % \ifx\beamer@makecaption\undefined% % \else% beamer detected \ifx\@makecaption\undefined% \newcommand{\@makecaption}[2]{\relax}% \fi% %% % % more and more packages redefine \@caption instead of just \@makecaption which makes algorithm2e % caption not works since based on standard \@caption. So we force the definition of \@caption to be % the standard one (the one from LaTeX) inside algorithm environment. % % unfortunately, makecaption is called with \ignorespace #3 so % we can't do the @currentlabel definition inside \algocf@captionproctext \long\def\algocf@caption@proc#1[#2]#3{% \ifthenelse{\boolean{algocf@nokwfunc}}{\relax}{% \SetKwFunction{\algocf@captname#3@}{\algocf@captname#3@}% }% % we tell hyperref to use algocfproc as category and to take the appropriate ref. \ifthenelse{\boolean{algocf@func}}{\def\@proc@func{algocffunc}}{\def\@proc@func{algocfproc}}% \@ifundefined{hyper@refstepcounter}{\relax}{% if hyper@refstepcounter undefind, no hyperref, else... \ifthenelse{\boolean{algocf@procnumbered}}{% \expandafter\def\csname theH\@proc@func\endcsname{\thealgocf}%if procnumbered, take \thealgocf as ref }{% \expandafter\def\csname theH\@proc@func\endcsname{\algocf@captname#3@}%else take procedure or function name }% \hyper@refstepcounter{\@proc@func}% }% \ifthenelse{\boolean{algocf@procnumbered}}{\relax}{% \addtocounter{algocf}{-1}% \caption do a refstepcounter, so we restore the precedent value \gdef\@currentlabel{\algocf@captname#3@}% let the label be the name of the function, not the counter }% \ifthenelse{\equal{\algocf@captparam#2@}{\arg@e}}{% if no paramater, we remove the () \algocf@latexcaption{#1}[\algocf@procname\nobreakspace\algocf@captname#2@]{#3}% }{% else we give the complete name \algocf@latexcaption{#1}[\algocf@procname\nobreakspace#2]{#3}% }% }% %% %%% setcaption \newcommand{\algocf@setcaption}{% \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment, caption text must be changed \let\algocf@oldcaptiontext=\algocf@captiontext% \renewcommand{\algocf@captiontext}[2]{% \algocf@captionproctext{##1}{##2}% }% }{}% \let\algocf@savecaption=\@caption% \ifthenelse{\boolean{algocf@procenvironment}}{\let\@caption=\algocf@caption@proc}{\let\@caption=\algocf@caption@algo}% \let\algocf@oldmakecaption=\@makecaption% \renewcommand{\@makecaption}[2]{% \expandafter\csname algocf@makecaption@\algocf@style\endcsname{##1}{##2}% }% }% % %%%%% reset caption % % since we have force the LaTeX caption for algorithm environment, we must go back to the caption % used in the text. \newcommand{\algocf@resetcaption}{% \ifthenelse{\boolean{algocf@procenvironment}}{% if proc environment \let\thealgocf=\old@thealgocf% restore normal counter printing \let\algocf@captiontext=\algocf@oldcaptiontext% restore normal caption text }{}% \let\@caption=\algocf@savecaption% now restore caption outside algo/proc/func environment \let\@makecaption=\algocf@oldmakecaption% and restore makecaption outside outside algo/proc/func environment \algocf@resetfnum% }% % %%%%% nocaptionofalgo and restorecaptionofalgo -- \newcommand{\NoCaptionOfAlgo}{% \let\@old@algocf@captiontext=\algocf@captiontext% \renewcommand{\algocf@captiontext}[2]{\AlCapNameSty{\AlCapNameFnt{}##2}}% }% \newcommand{\RestoreCaptionOfAlgo}{% \let\algocf@captiontext=\@old@algocf@captiontext% }% % % ---------------------- algocf environment % \newcounter{algocfline}% % new counter to make lines numbers be internally \setcounter{algocfline}{0}% % different in different algorithms \newcounter{algocfproc}% counter to count all algo environment (proc, func), just used by hyperref to avoir "same \setcounter{algocfproc}{0}% identifier" error caused by algocf being set to '-' for procedure or function or not % changed if no caption is given. % \expandafter\ifx\csname algocf@within\endcsname\relax% if \algocf@within doesn't exist \newcounter{algocf}% % just define a new counter \renewcommand{\thealgocf}{\@arabic\c@algocf}% and the way it is printed \else% else \newcounter{algocf}[\algocf@within]% % counter is numbered within \algocf@within \renewcommand\thealgocf{\csname the\algocf@within\endcsname.\@arabic\c@algocf}% \fi% % \def\fps@algocf{htbp}% % default \def\ftype@algocf{10}% % float type \def\ext@algocf{\algocf@list} % loa by default, lof if figure option used \newcommand{\fnum@algocf}{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}% \newcommand{\algocf@resetfnum}{\renewcommand{\fnum@algocf}{\AlCapSty{\AlCapFnt\algorithmcfname\nobreakspace\thealgocf}}}% \newenvironment{algocf}% % float environment for algorithms {\@float{algocf}}% {\end@float}% \newenvironment{algocf*}% % float* environment for algorithms {\@dblfloat{algocf}}% {\end@dblfloat}% % \def\algocf@seclistalgo{}% \ifx\l@chapter\undefined\let\algocf@seclistalgo=\section\else\let\algocf@seclistalgo=\chapter\fi% \@ifundefined{if@restonecol}{\newif\if@restonecol}\relax% \newcommand\listofalgocfs{% \ifx\algocf@seclistalgo\chapter% \if@twocolumn\@restonecoltrue\onecolumn\else\@restonecolfalse\fi% \fi% \algocf@seclistalgo*{\listalgorithmcfname}% \@mkboth{\MakeUppercase\listalgorithmcfname}% {\MakeUppercase\listalgorithmcfname}% \@starttoc{loa}% \ifx\algocf@seclistalgo\chapter% \if@restonecol\twocolumn\fi% \fi% } % \newcommand*\l@algocf{\@dottedtocline{1}{1em}{2.3em}}% line of the list % % ---------------------- algorithm environment % %%%%%%% %% %% Algorithm environment definition %% %%%%%%% %% % \newsavebox\algocf@algoframe% \def\@algocf@pre@plain{\relax}% action to be done before printing the algo. \def\@algocf@post@plain{\relax}% action to be done after printing the algo. \def\@algocf@capt@plain{bottom}% where the caption should be localized. \def\@algocf@pre@boxed{\noindent\begin{lrbox}{\algocf@algoframe}} \def\@algocf@post@boxed{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% \def\@algocf@capt@boxed{under}% \def\@algocf@pre@ruled{\hrule width\algocf@ruledwidth height\algoheightrule depth0pt\kern\interspacetitleruled}% \def\@algocf@post@ruled{\kern\interspacealgoruled\hrule width\algocf@ruledwidth height\algoheightrule\relax}% \def\@algocf@capt@ruled{top}% \def\@algocf@pre@algoruled{\hrule width\algocf@ruledwidth height\algoheightrule depth0pt\kern\interspacetitleruled}% \def\@algocf@post@algoruled{\kern\interspacealgoruled\hrule width\algocf@ruledwidth height\algoheightrule \relax}% \def\@algocf@capt@algoruled{top}% \def\@algocf@pre@tworuled{\hrule height\algoheightrule depth0pt\kern\interspacetitleruled}% \def\@algocf@post@tworuled{\kern\interspacealgoruled\hrule height\algoheightrule\relax}% \def\@algocf@capt@tworuled{top}% \def\@algocf@pre@boxruled{\noindent\begin{lrbox}{\algocf@algoframe}}% \def\@algocf@post@boxruled{\end{lrbox}\framebox[\hsize]{\box\algocf@algoframe}\par}% \def\@algocf@capt@boxruled{above}% \def\@algocf@pre@plainruled{\@algocf@pre@ruled}% action to be done before printing the algo. \def\@algocf@post@plainruled{\@algocf@post@ruled\kern\interspacealgoruled}% action to be done before printing the algo. \def\@algocf@capt@plainruled{under}% % \newcommand{\noalgocaption}{\def\@algocf@capt@ruled{none}} % %% before algocf environment (not figure environment) \newcommand{\@algocf@init@caption}{% \ifthenelse{\boolean{algocf@procenvironment}}{% if we are inside a procedure/function environment \@algocf@proctitleofalgo% set Titleofalgo to Procedure: or Function: % accordingly to the environment \let\old@thealgocf=\thealgocf\ifthenelse{\boolean{algocf@procnumbered}}{\relax}{% \renewcommand{\thealgocf}{-}}% }{% else inside environment algorithm \@algocf@algotitleofalgo% fix name for \Titleofalgo to \algorithmcfname }% \algocf@setcaption% set caption to our caption style }% % \newcommand{\@algofloatboxreset}{\@setminipage} \newcommand{\@algocf@init}{% \refstepcounter{algocfline}% \stepcounter{algocfproc}%to have a different counter for each environment and being abble to make the difference %between href of algoline in different algorithms. \ifthenelse{\boolean{algocf@optnoend}}{% \renewcommand{\algocf@block}[3]{\algocf@group{##1}}% }{% \renewcommand{\algocf@block}[3]{\algocf@@block{##1}{##2}{##3}}% }% }% %% after the end of algocf or figure environment \newcommand{\@algocf@term@caption}{% \algocf@resetcaption% restore original caption }% % \newcommand{\@algocf@term}{% \setboolean{algocf@algoH}{false}% no H by default \ifthenelse{\boolean{algocf@optnoend}}{% \renewcommand{\algocf@block}[3]{\algocf@@block{##1}{##2}{##3}}% }{% \renewcommand{\algocf@block}[2]{\algocf@group{##1}}% }% \SetAlgoRefName{\relax}% }% % %%%%%%%%%%%%%%%%% %% makethealgo: macro which print effectively the algo in its box %% \newsavebox\algocf@algobox% \newcommand{\algocf@makethealgo}{% \vtop{% % place caption above if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{above}}% {\csname algocf@caption@\algocf@style\endcsname}{}% % % precommand according to the style \csname @algocf@pre@\algocf@style\endcsname% % place caption at top if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{top}}% {\csname algocf@caption@\algocf@style\endcsname}{}% % \box\algocf@algobox% the algo % place caption at bottom if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{bottom}}% {\csname algocf@caption@\algocf@style\endcsname}{}% % postcommand according to the style \csname @algocf@post@\algocf@style\endcsname% % place caption under if needed bye the style \ifthenelse{\equal{\csname @algocf@capt@\algocf@style\endcsname}{under}}% {\csname algocf@caption@\algocf@style\endcsname}{}% }% }% %%%%%%%%%%%%%%%%%%% % %% at the beginning of algocf or figure environment \newenvironment{algomathdisplay}{\[}{\@endalgocfline\]\ifthenelse{\boolean{algocf@linesnumbered}}{\nl}{\relax}}% \newcommand{\@algocf@start}{% \@algoskip% \begin{lrbox}{\algocf@algobox}% \setlength{\algowidth}{\hsize}% \vbox\bgroup% save all the algo in a box \hbox to\algowidth\bgroup\hbox to \algomargin{\hfill}\vtop\bgroup% \ifthenelse{\boolean{algocf@slide}}{\parskip 0.5ex\color{black}}{}% % initialization \addtolength{\hsize}{-\algomargin}\addtolength{\hsize}{-1.5em}% 1.5em to let space for line numbering \let\@mathsemicolon=\;\def\;{\ifmmode\@mathsemicolon\else\@endalgoln\fi}% \raggedright% \AlFnt{}% \ifthenelse{\boolean{algocf@slide}}{\IncMargin{\skipalgocfslide}}{}% \@algoinsideskip% % \let\@emathdisplay=\]\def\]{\algocf@endline\@emathdisplay\nl}% }% % %% at the end of algocf or figure environment \newcommand{\@algocf@finish}{% \@algoinsideskip% \egroup%end of vtop which contain all the text \hfill\egroup%end of hbox wich contains [margin][vtop] \ifthenelse{\boolean{algocf@slide}}{\DecMargin{\skipalgocfslide}}{}% % \egroup%end of main vbox \end{lrbox}% \algocf@makethealgo% print the algo \@algoskip% % restore dimension and macros \setlength{\hsize}{\algowidth}% \lineskip\normallineskip\setlength{\skiptotal}{\@defaultskiptotal}% \let\;=\@mathsemicolon% \let\]=\@emathdisplay% }% % %%%%%%%%%%%%%%%%%%%% %% basic definition of the environment algorithm %% % \newboolean{algocf@procenvironment}\setboolean{algocf@procenvironment}{false}% \newboolean{algocf@func}\setboolean{algocf@func}{false}% \newboolean{algocf@algoH}\setboolean{algocf@algoH}{false}% \newboolean{algocf@algostar}\setboolean{algocf@algostar}{false}% % %%% environment for {algorithm}[H] \newenvironment{algocf@Here}{\noindent% \def\@captype{algocf}% if not defined, caption exit with an error \begin{minipage}{\hsize}% }{% \end{minipage}%\par% }% %%% real algorithm environment which manages H and * option % \let\algocf@originalfloatboxreset=\@floatboxreset% % \let\@floatboxreset=\@algofloatboxreset% \newenvironment{algocf@algorithm}[1][htbp]{% \@algocf@init% \ifthenelse{\equal{\algocf@float}{figure}}{% if option figure set \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option \begin{figure*}[#1]% call figure* \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}% \let\algocf@oldeverypar=\everypar% \algocf@seteverypar% \addtolength{\linewidth}{-\algomargin}% caption package use \linewidth as basic width of caption }{% else algorithm environment with figure option \begin{figure}[#1]% call figure \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}% \let\algocf@oldeverypar=\everypar% \algocf@seteverypar% \addtolength{\linewidth}{-\algomargin}% so now \linewidth==\hsize. Needed by caption package that uses \linewidth as basic width of caption }% }{% else normal algorithm environment \@algocf@init@caption% \ifthenelse{\equal{#1}{H}}{% if [H] algorithm \if@twocolumn\@latex@error{[H] in two columns mode is not allowed for algorithms}\fi% TODO: SCREAM if H in two colums! \setboolean{algocf@algoH}{true}\begin{algocf@Here}% call corresponding environment \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}% \let\algocf@oldeverypar=\everypar% \algocf@seteverypar% }{% else floating algorithm environment \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* \begin{algocf*}[#1]% call algocf* \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}% \let\algocf@oldeverypar=\everypar% \algocf@seteverypar% }{% else algorithm environment \begin{algocf}[#1]% call algocf \ifthenelse{\boolean{algocf@customruledwidth}}{\relax}{\setlength{\algocf@ruledwidth}{\linewidth}}% \let\algocf@oldeverypar=\everypar% \algocf@seteverypar% }% }% }% fin test option figure ou pas \@algocf@start% \@ResetCounterIfNeeded% \algocf@linesnumbered\ignorespaces% }{% \@algocf@finish% \ifthenelse{\equal{\algocf@float}{figure}}{% \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* with figure option \let\everypar=\algocf@oldeverypar% \end{figure*}% call figure* }{% else algorithm environment with figure option \let\everypar=\algocf@oldeverypar% \end{figure}% call figure }% }{% \@algocf@term@caption% \ifthenelse{\boolean{algocf@algoH}}{% if [H] algorithm \let\everypar=\algocf@oldeverypar% \end{algocf@Here}\par% call corresponding environment }{% else floating algorithm environment \ifthenelse{\boolean{algocf@algostar}}{% if algorithm* \let\everypar=\algocf@oldeverypar% \end{algocf*}% call algocf* }{% else algorithm environment \let\everypar=\algocf@oldeverypar% \end{algocf}% call algocf }% }% }% \@algocf@term\ignorespacesafterend% }% % %%% user algorithm environment \newenvironment{\algocf@envname}[1][htbp]{% \setboolean{algocf@algostar}{false}% \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% %%% user algorithm* environment \newenvironment{\algocf@envname*}[1][htbp]{% \setboolean{algocf@algostar}{true}% \setboolean{algocf@procenvironment}{false}\gdef\algocfautorefname{\algorithmautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% % %%%%%%%%%%%%%%%%%%%%%%% %%% % \expandafter\newcommand\csname\algocf@listofalgorithms\endcsname{% \ifthenelse{\equal{\algocf@float}{figure}}{\listoffigures}{\listofalgocfs}% }% %%% %%% % % ---------------------- procedure and function environments % % % -- new style (used in particular in the caption of function and procedure environments) % % three macros to extract parts of the caption \gdef\algocf@captname#1(#2)#3@{#1} % keep characters before the first brace \gdef\algocf@captparam#1(#2)#3@{#2} % keep character in between the braces \gdef\algocf@captother#1(#2)#3@{#3} % keep character after the braces % %%% Text of caption for Procedure or Function \newcommand{\algocf@captionproctext}[2]{% {% \ProcSty{\ProcFnt\algocf@procname\ifthenelse{\boolean{algocf@procnumbered}}{\nobreakspace\thealgocf\algocf@typo\algocf@capseparator}{\relax}}% \nobreakspace\ProcNameSty{\ProcNameFnt\algocf@captname #2@}% Name of the procedure in ProcName Style. \ifthenelse{\equal{\algocf@captparam #2@}{\arg@e}}{}{% if no argument, write nothing \ProcNameSty{\ProcNameFnt(}\ProcArgSty{\ProcArgFnt\algocf@captparam #2@}\ProcNameSty{\ProcNameFnt)}%else put arguments in ProcArgSty: }% endif \algocf@captother #2@% }% }% % % % -- procedure and function environments are defined from algocf@algorithm environment % \newenvironment{procedure}[1][htbp]{% \setboolean{algocf@algostar}{false}% \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}% \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% \newenvironment{function}[1][htbp]{% \setboolean{algocf@algostar}{false}% \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}% \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% % \newenvironment{procedure*}[1][htbp]{% \setboolean{algocf@algostar}{true}% \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{false}% \newcommand{\algocf@procname}{\@algocf@procname}\gdef\algocfprocautorefname{\procedureautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% \newenvironment{function*}[1][htbp]{% \setboolean{algocf@algostar}{true}% \setboolean{algocf@procenvironment}{true}\setboolean{algocf@func}{true}% \newcommand{\algocf@procname}{\@algocf@funcname}\gdef\algocffuncautorefname{\functionautorefname}% \begin{algocf@algorithm}[#1]\ignorespaces% }{% \end{algocf@algorithm}\ignorespacesafterend% }% % % %%%%%%%%%%%%%%%%%%%% %% definition of algondfloat environment %% \ifthenelse{\boolean{algocf@endfloat}}{% if endfloat option then \newcommand{\algoplace}{% macro which is used to writhe algorithm about there \begin{center}% [\algorithmcfname~\thepostfig\ about here.]% \end{center}% }% \newcommand{\algoendfloat}{% use as a \begin{algoendfloat} environment to start scanning of line % \immediate\openout\@mainfff\jobname.fff% \efloat@condopen{fff} \efloat@iwrite{fff}{\string\begin{\algocf@envname}}% \if@domarkers% \ifthenelse{\equal{\algocf@list}{lof}}{% \addtocounter{postfig}{1}% }{% \addtocounter{postalgo}{1}% }% \algoplace% \fi% \bgroup% \let\do\ef@makeinnocent\dospecials% \ef@makeinnocent\^^L% and whatever other special cases \endlinechar`\^^M \catcode`\^^M=12 \ef@xalgocfendfloat}% }{\relax}%%%% end of endfloat option ifthenelse %% some macros useful for endfloat option that cannot be defined inside the ifthenelse %scan algoendfloat algorithm and write the text into .fff file {\catcode`\^^M=12 \endlinechar=-1 % \gdef\ef@xalgocfendfloat#1^^M{% scan the lines inside algoendfloat environment being read by latex \def\test{#1}% test is the line being currently scan by latex \ifx\test\ef@endalgocftest% if it is \end{algoendfloat} \def\next{% define next as to not continue the scan and write \end{algorithm} into .fff file \egroup\end{algoendfloat}% \efloat@iwrite{fff}{\string\end{\algocf@envname}}% \efloat@iwrite{fff}{\string\efloatseparator}% \efloat@iwrite{fff}{ }% }% \else% else write the current line being scanned by latex and set next to continue the scan \efloat@iwrite{fff}{#1}% \let\next\ef@xalgocfendfloat% \fi% endif \next}% next is continue if it was else condition, else it does not continue the scan and write end to file }% % test if the scan is finish by looking at the string \end{algoendfloat} {\escapechar=-1% \xdef\ef@endalgocftest{\string\\end\string\{algoendfloat\string\}}% }% % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \newcommand{\TitleOfAlgo}[1]{\@titleprefix\ \TitleSty{#1}\par\smallskip}% % \newcommand{\SetAlgorithmName}[3]{% \renewcommand{\listalgorithmcfname}{#3}% \renewcommand{\algorithmcfname}{#1}% \renewcommand{\algorithmautorefname}{#2}% }% % \newcommand{\algocf@refrelsize}{-2}\newcommand{\SetAlgoRefRelativeSize}[1]{\renewcommand{\algocf@refrelsize}{#1}}% \newcommand{\SetAlgoRefName}[1]{% \renewcommand{\algocf@algocfref}{#1}% }% % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % % ------------------------- Default Definitions % %% %% % \SetKwComment{tcc}{/* }{ */}% \SetKwComment{tcp}{// }{}% % %\newcommand{\algocf@defaults@common}{ % % % english keywords (default) % \SetKwHangingKw{KwHData}{Data$\rightarrow$} \SetKwInput{KwIn}{Input}% \SetKwInput{KwOut}{Output}% \SetKwInput{KwData}{Data}% \SetKwInput{KwResult}{Result}% \SetKw{KwTo}{to} \SetKw{KwRet}{return}% \SetKw{Return}{return}% \SetKwBlock{Begin}{begin}{end}% \SetKwRepeat{Repeat}{repeat}{until}% % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{end switch}% \SetKwFor{For}{for}{do}{end for}% \SetKwFor{ForPar}{for}{do in parallel}{end forpar} \SetKwFor{ForEach}{foreach}{do}{end foreach}% \SetKwFor{ForAll}{forall}{do}{end forall}% \SetKwFor{While}{while}{do}{end while}% % % French keywords % \ifthenelse{\boolean{algocf@localkw@french}\OR\equal{\algocf@languagechoosen}{french}}{% %\SetKwInOut{AlgDonnees}{Donn\'ees}\SetKwInOut{AlgRes}{R\'esultat} \SetKwHangingKw{HDonnees}{Donnees$\rightarrow$} \SetKwInput{Donnees}{Donn\'ees}% \SetKwInput{Res}{R\'esultat}% \SetKwInput{Entree}{Entr\'ees}% \SetKwInput{Sortie}{Sorties}% \SetKw{KwA}{\`a}% \SetKw{Retour}{retourner}% \SetKwBlock{Deb}{d\'ebut}{fin}% \SetKwRepeat{Repeter}{r\'ep\'eter}{jusqu'\`a}% % \SetKwIF{Si}{SinonSi}{Sinon}{si}{alors}{sinon si}{sinon}{fin si}% \SetKwSwitch{Suivant}{Cas}{Autre}{suivant}{faire}{cas o\`u}{autres cas}{fin cas}{fin d'alternative}% \SetKwFor{Pour}{pour}{faire}{fin pour}% \SetKwFor{PourPar}{pour}{faire en parall\`ele}{fin pour}% \SetKwFor{PourCh}{pour chaque}{faire}{fin pour chaque}% \SetKwFor{PourTous}{pour tous les}{faire}{fin pour tous}% \SetKwFor{Tq}{tant que}{faire}{fin tq}% }{}% % % --- German keywords % \ifthenelse{\boolean{algocf@localkw@german}\OR\equal{\algocf@languagechoosen}{german}}{% \SetKwInput{Ein}{Eingabe}%KwIn \SetKwInput{Aus}{Ausgabe}%KwOut \SetKwInput{Daten}{Daten}%KwData \SetKwInput{Ergebnis}{Ergebnis}%KwResult \SetKw{Bis}{bis}%KwTo \SetKw{KwZurueck}{zur\"uck}%KwRet \SetKw{Zurueck}{zur\"uck}%Return \SetKwBlock{Beginn}{Beginn}{Ende}%Begin \SetKwRepeat{Wiederh}{wiederhole}{bis}%Repeat % \SetKwIF{Wenn}{SonstWenn}{Sonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf \SetKwSwitch{Unterscheide}{Fall}{Anderes}{unterscheide}{tue}{Fall}{sonst}{Ende Fall}{Ende Unt.}%Switch \SetKwFor{Fuer}{f\"ur}{tue}{Ende f\"ur}%For \SetKwFor{FuerPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar \SetKwFor{FuerJedes}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach \SetKwFor{FuerAlle}{f\"ur alle}{tue}{Ende f\"ur}%ForAll \SetKwFor{Solange}{solange}{tue}{Ende solange}%While }{}% % % --- Czech keywords % \ifthenelse{\boolean{algocf@localkw@czech}\OR\equal{\algocf@languagechoosen}{czech}}{% \SetKwInput{Vst}{Vstup}% \SetKwInput{Vyst}{V\'{y}stup}% \SetKwInput{Vysl}{V\'{y}sledek}% }{}% % % --- Portuguese keywords % \ifthenelse{\boolean{algocf@localkw@portuguese}\OR\equal{\algocf@languagechoosen}{portuguese}}{% \SetKwInput{Entrada}{Entrada}% \SetKwInput{Saida}{Sa\'{i}da}% \SetKwInput{Dados}{Dados}% \SetKwInput{Resultado}{Resultado}% \SetKw{Ate}{at\'{e}} \SetKw{KwRetorna}{retorna}% \SetKw{Retorna}{retorna}% \SetKwBlock{Inicio}{in\'{i}cio}{fim}% \SetKwRepeat{Repita}{repita}{at\'{e}}% % \SetKwIF{Se}{SenaoSe}{Senao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% \SetKwSwitch{Selec}{Caso}{Outro}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim caso}{fim selec}% \SetKwFor{Para}{para}{fa\c{c}a}{fim para}% \SetKwFor{ParaPar}{para}{fa\c{c}a em paralelo}{fim para} \SetKwFor{ParaCada}{para cada}{fa\c{c}a}{fim para cada}% \SetKwFor{ParaTodo}{para todo}{fa\c{c}a}{fim para todo}% \SetKwFor{Enqto}{enquanto}{fa\c{c}a}{fim enqto}% }{}% % % --- Italian keywords % \ifthenelse{\boolean{algocf@localkw@italiano}\OR\equal{\algocf@languagechoosen}{italiano}}{% \SetKwInput{KwIng}{Ingresso}% \SetKwInput{KwUsc}{Uscita}% \SetKwInput{KwDati}{Dati}% \SetKwInput{KwRisult}{Risultato}% \SetKw{KwA}{a}% \SetKw{KwRitorna}{ritorna}% \SetKw{Ritorna}{ritorna}% \SetKwBlock{Inizio}{inizio}{fine}% \SetKwRepeat{Ripeti}{ripeti}{finch\'e}% % \SetKwIF{Sea}{AltSe}{Altrimenti}{se}{allora}{altrimenti se}{allora}{fine se}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{endsw}% \SetKwFor{Per}{per}{fai}{fine per}% \SetKwFor{PerPar}{per}{fai in parallelo}{fine per}% \SetKwFor{PerCiascun}{per ciascun}{fai}{fine per ciascun}% \SetKwFor{PerTutti}{per tutti i}{fai}{fine per tutti}% \SetKwFor{Finche}{finch\'e}{fai}{fine finch\'e}% }{}% % % --- Spanish keywords % \ifthenelse{\boolean{algocf@localkw@spanish}\OR\equal{\algocf@languagechoosen}{spanish}}{% \SetKwInput{Datos}{Datos} \SetKwInput{Resultado}{Resultado} \SetKwInput{Entrada}{Entrada} \SetKwInput{Salida}{Salida} \SetKw{KwA}{a} \SetKw{KwDevolver}{devolver} \SetKw{Devolver}{devolver} \SetKwBlock{Inicio}{inicio}{fin} \SetKwIF{SSi}{EnOtroCasoSi}{EnOtroCaso}{si}{entonces}{sin\'o, si}{sin\'o}{fin si} \SetKwSwitch{Seleccionar}{Caso}{Otro}{seleccionar}{hacer}{caso}{sin\'o}{fin caso}{fin seleccionar} \SetKwFor{Para}{para}{hacer}{fin para} \SetKwFor{ParaPara}{par}{hacer en paralelo}{fin para} \SetKwFor{EnParalelo}{para}{hacer en paralelo}{fin para} \SetKwFor{Mientras}{mientras}{hacer}{fin mientras} \SetKwFor{ParaCada}{para cada}{hacer}{fin para cada} \SetKwFor{ParaTodo}{para todo}{hacer}{fin para todo} \SetKwRepeat{Repetir}{repetir}{hasta que} }{}% % % Croatian keywords % \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{croatian}}{% \SetKwInput{KwUlaz}{Ulaz}%KwIn \SetKwInput{KwIzlaz}{Izlaz}%KwOut \SetKwInput{KwPodatci}{Podatci}%KwData \SetKwInput{KwRezultat}{Rezultat}%KwResult \SetKw{KwDo}{do}%KwTo \SetKw{KwVrati}{vrati}%KwRet \SetKw{Vrati}{vrati}%Return \SetKwBlock{Pocetak}{po\v{c}etak}{kraj}%Begin \SetKwRepeat{Ponavljaj}{ponavljaj}{dok ne bude}%Repeat % \SetKwIF{Ako}{InaceAko}{Inace}{ako}{onda}{ina\v{c}e ako}{ina\v{c}e}{kraj ako}%gIf \SetKwSwitch{Granaj}{Slucaj}{OstaliSlucajevi}{granaj}{\v{c}ini}{slu\v{c}aj}{ostali slu\v{c}ajevi}{kraj slu\v{c}aj}{kraj granaj}%Switch \SetKwFor{Za}{za}{\v{c}ini}{kraj za}%For \SetKwFor{ZaPar}{za}{\v{c}ini paralelno}{kraj za paralelno}%ForPar \SetKwFor{ZaSvaki}{za svaki}{\v{c}ini}{kraj za svaki}%mForEach \SetKwFor{ZaSvaku}{za svaku}{\v{c}ini}{kraj za svaku}%fForEach \SetKwFor{ZaSvako}{za svako}{\v{c}ini}{kraj za svako}%nForEach \SetKwFor{ZaSve}{za sve}{\v{c}ini}{kraj za sve}%ForAll \SetKwFor{Dok}{dok}{\v{c}ini}{kraj dok}%While }{}% % % % --- Turkish keywords % \ifthenelse{\boolean{algocf@localkw@turkish}\OR\equal{\algocf@languagechoosen}{turkish}}{% \SetKwInput{KwIn}{Girdi}% \SetKwInput{KwOut}{\c{C}{\i}kt{\i}}% \SetKwInput{KwData}{Veri}% \SetKwInput{KwResult}{Sonu\c{c}}% \SetKw{KwTo}{to} \SetKw{KwRet}{return}% \SetKw{Return}{return}% \SetKwBlock{Begin}{begin}{end}% \SetKwRepeat{Repeat}{repeat}{until}% % % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{end switch}% \SetKwFor{For}{for}{do}{end for}% \SetKwFor{ForPar}{for}{do in parallel}{end forpar} \SetKwFor{ForEach}{foreach}{do}{end foreach}% \SetKwFor{ForAll}{forall}{do}{end forall}% \SetKwFor{While}{while}{do}{end while}% }{}% % % --- End %} % %\algocf@defaults@common % % option onelanguage redefinition % \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{french}}{% \SetKwInput{KwIn}{Entr\'ees}% \SetKwInput{KwOutSortie}{Sorties}% \SetKwInput{KwData}{Donn\'ees}% \SetKwInput{KwResult}{R\'esultat}% \SetKw{KwTo}{\`a}% \SetKw{KwRet}{retourner}% \SetKw{Return}{retourner}% \SetKwBlock{Begin}{d\'ebut}{fin}% \SetKwRepeat{Repeat}{r\'ep\'eter}{jusqu'\`a}% % \SetKwIF{If}{ElseIf}{Else}{si}{alors}{sinon si}{sinon}{fin si}% \SetKwSwitch{Switch}{Case}{Other}{suivant}{faire}{cas o\`u}{autres cas}{fin cas}{fin d'alternative}% \SetKwFor{For}{pour}{faire}{fin pour}% \SetKwFor{ForPar}{pour}{faire en parall\`ele}{fin pour}% \SetKwFor{ForEach}{pour chaque}{faire}{fin pour chaque}% \SetKwFor{ForAll}{pour tous}{faire}{fin pour tous}% \SetKwFor{While}{tant que}{faire}{fin tq}% }{}% \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{german}}{% \SetKwInput{KwIn}{Eingabe}%KwIn \SetKwInput{KwOut}{Ausgabe}%KwOut \SetKwInput{KwData}{Daten}%KwData \SetKwInput{KwResult}{Ergebnis}%KwResult \SetKw{KwTo}{bis}%KwTo \SetKw{KwRet}{zur\"uck}%KwRet \SetKw{Return}{zur\"uck}%Return \SetKwBlock{Begin}{Beginn}{Ende}%Begin \SetKwRepeat{Repeat}{wiederhole}{bis}%Repeat % \SetKwIF{If}{ElseIf}{Else}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf \SetKwSwitch{Switch}{Case}{Other}{unterscheide}{tue}{Fall}{sonst}{Ende Fall}{Ende Unt.}%Switch \SetKwFor{For}{f\"ur}{tue}{Ende f\"ur}%For \SetKwFor{ForPar}{f\"ur}{tue gleichzeitig}{Ende gleichzeitig}%ForPar \SetKwFor{ForEach}{f\"ur jedes}{tue}{Ende f\"ur}%ForEach \SetKwFor{ForAll}{f\"ur alle}{tue}{Ende f\"ur}%ForAll \SetKwFor{While}{solange}{tue}{Ende solange}%While }{}% \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{portuguese}}{% \SetKwInput{KwIn}{Entrada}% \SetKwInput{KwOut}{Sa\'{i}da}% \SetKwInput{KwData}{Dados}% \SetKwInput{KwResult}{Resultado}% \SetKw{KwTo}{at\'{e}} \SetKw{KwRet}{retorna}% \SetKw{Return}{retorna}% \SetKwBlock{Begin}{in\'{i}cio}{fim}% \SetKwRepeat{Repeat}{repita}{at\'{e}}% % \SetKwIF{If}{ElseIf}{Else}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% \SetKwSwitch{Switch}{Case}{Other}{selecione}{fa\c{c}a}{caso}{sen\~{a}o}{fim caso}{fim selec}% \SetKwFor{For}{para}{fa\c{c}a}{fim para}% \SetKwFor{ForPar}{para}{fa\c{c}a em paralelo}{fim para} \SetKwFor{ForEach}{para cada}{fa\c{c}a}{fim para cada}% \SetKwFor{ForAll}{para todo}{fa\c{c}a}{fim para todo}% \SetKwFor{While}{enquanto}{fa\c{c}a}{fim enqto}% }{}% \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{italiano}}{% \SetKwInput{KwIn}{Ingresso}% \SetKwInput{KwOut}{Uscita}% \SetKwInput{KwData}{Dati}% \SetKwInput{KwResult}{Risultato}% \SetKw{KwTo}{a}% \SetKw{KwRet}{ritorna}% \SetKw{Return}{ritorna}% \SetKwBlock{Begin}{inizio}{fine}% \SetKwRepeat{Repeat}{ripeti}{finch\'e}% % \SetKwIF{If}{ElseIf}{Else}{se}{allora}{altrimenti se}{allora}{fine se}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end case}{endsw}% \SetKwFor{For}{per}{fai}{fine per}% \SetKwFor{ForPar}{per}{fai in parallelo}{fine per}% \SetKwFor{ForEach}{per ciascun}{fai}{fine per ciascun}% \SetKwFor{ForAll}{per tutti i}{fai}{fine per tutti}% \SetKwFor{While}{finch\'e}{fai}{fine finch\'e}% }{}% \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{spanish}}{% \SetKwInput{KwIn}{Entrada}% \SetKwInput{KwOut}{Salida}% \SetKwInput{KwData}{Datos}% \SetKwInput{KwResult}{Resultado}% \SetKw{KwTo}{a}% \SetKw{KwRet}{devolver}% \SetKw{Return}{devolver}% \SetKwBlock{Begin}{inicio}{fin}% \SetKwRepeat{Repeat}{repetir}{hasta que}% % \SetKwIF{If}{ElseIf}{Else}{si}{entonces}{si no, si}{en otro caso}{fin si} \SetKwSwitch{Switch}{Case}{Other}{seleccionar}{hacer}{caso}{si no}{fin caso}{fin seleccionar} \SetKwFor{For}{para}{hacer}{fin para}% \SetKwFor{ForPar}{para}{hacer in paralelo}{fin para}% \SetKwFor{ForEach}{para cada}{hacer}{fin para cada} \SetKwFor{ForAll}{para todo}{hacer}{fin para todo} \SetKwFor{While}{mientras}{hacer}{fin mientras} }{}% % \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{croatian}}{% \SetKwInput{KwIn}{Ulaz}%KwIn \SetKwInput{KwOut}{Izlaz}%KwOut \SetKwInput{KwData}{Podatci}%KwData \SetKwInput{KwResult}{Rezultat}%KwResult \SetKw{KwTo}{do}%KwTo \SetKw{KwRet}{vrati}%KwRet \SetKw{Return}{vrati}%Return \SetKwBlock{Begin}{po\v{c}etak}{kraj}%Begin \SetKwRepeat{Repeat}{ponavljaj}{dok ne bude}%Repeat % \SetKwIF{If}{ElseIf}{Else}{ako}{onda}{ina\v{c}e ako}{ina\v{c}e}{kraj ako}%gIf \SetKwSwitch{Switch}{Case}{Other}{granaj}{\v{c}ini}{slu\v{c}aj}{ostali slu\v{c}ajevi}{kraj slu\v{c}aj}{kraj granaj}%Switch \SetKwFor{For}{za}{\v{c}ini}{kraj za}%For \SetKwFor{ForPar}{za}{\v{c}ini paralelno}{kraj za paralelno}%ForPar \SetKwFor{ForEach}{za svaki}{\v{c}ini}{kraj za svaki}%ForEach \SetKwFor{ForAll}{za sve}{\v{c}ini}{kraj za sve}%ForAll \SetKwFor{While}{dok}{\v{c}ini}{kraj dok}%While }{}% % \ifthenelse{\boolean{algocf@optonelanguage}\AND\equal{\algocf@languagechoosen}{turkish}}{% % \SetKwInput{KwIn}{Girdi}% \SetKwInput{KwOut}{\c{C}{\i}kt{\i}}% \SetKwInput{KwData}{Veri}% \SetKwInput{KwResult}{Sonu\c{c}}% \SetKw{KwTo}{to} \SetKw{KwRet}{return}% \SetKw{Return}{return}% \SetKwBlock{Begin}{begin}{end}% \SetKwRepeat{Repeat}{repeat}{until}% % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{end if}% \SetKwSwitch{Switch}{Case}{Other}{switch}{do}{case}{otherwise}{end switch}% \SetKwFor{For}{for}{do}{end for}% \SetKwFor{ForPar}{for}{do in parallel}{end forpar} \SetKwFor{ForEach}{foreach}{do}{end foreach}% \SetKwFor{ForAll}{forall}{do}{end forall}% \SetKwFor{While}{while}{do}{end while}% }{}% % % %%%% old commands compatibility % \ifthenelse{\boolean{algocf@oldcommands}}{% \newcommand{\SetNoLine}{\SetAlgoNoLine}% \newcommand{\SetNoline}{\SetAlgoNoLine}% \newcommand{\SetVline}{\SetAlgoVlined}% \newcommand{\SetLine}{\SetAlgoLined}% % \newcommand{\dontprintsemicolon}{\DontPrintSemicolon}% \newcommand{\printsemicolon}{\PrintSemicolon}% \newcommand{\incmargin}[1]{\IncMargin{#1}}% \newcommand{\decmargin}[1]{\DecMargin{-#1}}% \newcommand{\setnlskip}[1]{\SetNlSkip{#1}}% \newcommand{\Setnlskip}[1]{\SetNlSkip{#1}}% \newcommand{\setalcapskip}[1]{\SetAlCapSkip{#1}}% \newcommand{\setalcaphskip}[1]{\SetAlCapHSkip{#1}}% \newcommand{\nlSty}[1]{\NlSty{#1}}% \newcommand{\Setnlsty}[3]{\SetNlSty{#1}{#2}{#3}}% \newcommand{\linesnumbered}{\LinesNumbered}% \newcommand{\linesnotnumbered}{\LinesNotNumbered}% \newcommand{\linesnumberedhidden}{\LinesNumberedHidden}% \newcommand{\showln}{\ShowLn}% \newcommand{\showlnlabel}[1]{\ShowLnLabel{#1}}% \newcommand{\nocaptionofalgo}{\NoCaptionOfAlgo}% \newcommand{\restorecaptionofalgo}{\RestoreCaptionOfAlgo}% \newcommand{\restylealgo}[1]{\RestyleAlgo{#1}}% % \newcommand{\Titleofalgo}[1]{\TitleOfAlgo{#1}}% % \SetKwIF{If}{ElseIf}{Else}{if}{then}{else if}{else}{endif} \newcommand{\SetKwIf}[6]{\SetKwIF{#1}{#2#1}{#2}{#3}{#4}{#5 #1}{#5}{#6}} % \SetKwIF{gSi}{gSinonSi}{gSinon}{si}{alors}{sinon si}{sinon}{fin si}% \SetKwIF{gIf}{gElsIf}{gElse}{if}{then}{else if}{else}{end if}% \SetKwIF{gIf}{gElseIf}{gElse}{if}{then}{else if}{else}{end if}% \SetKwIF{gWenn}{gSonstWenn}{gSonst}{wenn}{dann}{sonst wenn}{sonst}{Ende wenn}%gIf \SetKwIF{gSe}{gSenaoSe}{gSenao}{se}{ent\~{a}o}{sen\~{a}o se}{sen\~{a}o}{fim se}% \SetKwIF{gSea}{gAltSe}{gAltrimenti}{se}{allora}{altrimenti se}{allora}{fine se}% \SetKw{Ret}{return}% \SetKwInput{Data}{Data}% \SetKwInput{Result}{Result}% }{% \relax% }% % % % %% %%% %%%% END