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