--- /dev/null
+% algorithm2e.sty --- style file for algorithms
+% almost everything can be customized by users. See the document for more explanations
+%% Copyright 1996-2015 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 <list> <firstname name>'^^J%
+%
+% $Id: algorithm2e.sty,v 5.1 2015/10/18 21:37:30 cfiorio Exp $
+%
+% PACKAGES REQUIRED:
+%
+% - float (in contrib/supported/float)
+% - ifthen (in base)
+% - xspace (in packages/tools)
+% - relsize (in contrib/misc/relsize.sty)
+%
+%%%%%%%%%%%%%%% Release 5.1
+%
+% 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:
+%
+% - 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 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}[2013/01/06 v5.00 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<c><t><e> ; 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 "\<name>", but rather "<name>"; 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<name><arity><body>
+% The largest time-saver; many commands we define have the pattern:
+% \<name>(<side_text>)<argX><argY>...
+% where "(<side_text>)" is optional. By defining them with this function,
+% the arguments are parsed and renumbered, i.e. the body works as if the
+% command was:
+% \<name><side_text><argX><argY>...
+% 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
+% \<name>(<side_text>)<argX><argY>...(<side_text>)%
+%
+% 1. kind of begin-end : for command with only one block as begin-end
+\algocf@longdef\algocf@newcmdside@kobe#1#2{% <name of cmd><body of cmd>
+ % 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 : <first side com (could be empty)>, <body of cmd>
+ \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{% <name of cmd><body of cmd>
+ % 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<name><arity><body><tail><closing>
+% Like the command above, but with an optional side text at the end
+% of the command as well, i.e.:
+% \<name>(<side_text>)<argX><argY>(<end_text>)
+% It may be a bit confusing that <arity> doesn't count <end_text>,
+% but since it is for internal use, the naming can be a little more
+% fuzzy. This function behaves as if:
+% <body'> = <body><if end_text: tail{end_text}><closing>
+\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}{çizgi}%
+\renewcommand{\algocf@typo}{}%
+\renewcommand{\@algocf@procname}{Prosedür}%
+\renewcommand{\@algocf@funcname}{Fonksiyon}%
+\renewcommand{\procedureautorefname}{prosedür}%
+\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{xspace}%
+%
+\ifthenelse{\boolean{algocf@endfloat}}{%
+ \RequirePackage{endfloat}%
+}{\relax}%
+%
+\ifthenelse{\boolean{algocf@norelsize}}{%
+ \newcommand{\relsize}[1]{\scriptsize}%
+}{%
+ \RequirePackage{relsize}%
+}%
+%
+\ifthenelse{\boolean{algocf@slide}}{\RequirePackage{color}}{}%
+%
+%
+\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}{october 19 2015}%
+\newcommand{\algocf@version}{Release 5.1}%
+\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 (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\skiptotal by 0.4pt\advance\hsize by -0.4pt\advance\hsize by -\skiplength}% 0.4 pt=width of \vrule
+\newcommand{\algocf@subskiptotal}{\advance\skiptotal by -0.4pt\advance\hsize by 0.4pt\advance\hsize by \skiplength}% 0.4 pt=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@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}%
+%
+\newcommand{\SetAlgoNoLine}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Noline
+\renewcommand{\algocf@@block}[2]{\algocf@@@block{\algocf@Noline{##1}}{##2}}%
+\renewcommand{\algocf@group}[1]{\algocf@Noline{##1}}%
+\renewcommand{\Hlne}{}}%
+%
+\newcommand{\SetAlgoVlined}{%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Vline
+\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
+\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
+\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}%
+}%
+%
+%
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% 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}%
+ }%
+%
+\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%
+ \parbox[t]{\hsize}{\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}{%
+ \addtolength{\hsize}{-0.8pt}%
+ \hbox to\hsize{%
+ \vrule%\hskip-0.35pt%
+ \vbox{%
+ \hrule\vskip\interspacetitleboxruled%
+ \hbox to\hsize{\unhbox\algocf@capbox\hfill}\vskip\interspacetitleboxruled%
+ }%
+ %\hskip-0.35pt%
+ \vrule%
+ }\nointerlineskip%
+ \addtolength{\hsize}{0.8pt}%
+}%
+%
+%
+%%%% 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 height\algoheightrule depth0pt\kern\interspacetitleruled}%
+\def\@algocf@post@ruled{\kern\interspacealgoruled\hrule 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}{-1.5\algomargin}%
+ \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]{%
+ \ifthenelse{\equal{\algocf@float}{figure}}{%
+ \ifthenelse{\boolean{algocf@figurecaption}}{\captionsetup{margin={-\algomargin,\algomargin}}}{}%
+ }{}%
+ \@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%
+ }{% 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%
+ }%
+ }{% 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 algcf
+ \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@localkw@croatian}\OR\equal{\algocf@languagechoosen}{croatian}}{%
+\SetKwInput{KwUlaz}{Ulaz}%KwIn
+\SetKwInput{KwIzlaz}{Izlaz}%KwOut
+\SetKwInput{KwPodaci}{Podaci}%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}{Podaci}%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
\ No newline at end of file
--- /dev/null
+%%%%%% ************** line 192
+
+
+%%--------------------------------------------------------------------------------------------------------------
+%% ALGORITHME 1.1
+%%--------------------------------------------------------------------------------------------------------------
+%% Quoi de neuf depuis Algorithm 1.0 / What's new since Algorithm 1.0
+%%
+%% Meilleure boîte de cadrage
+%% Meilleure gestion des largeurs, permettant l'utilisation du mode multicolonnes, et permettant la césure
+%% automatique des longues lignes de pseudo-instructions.
+%% Widths are better handled, allowing the use of multicolumn mode, and also allowing auto line splitting into
+%% long lines of pseudo-code.
+%%--------------------------------------------------------------------------------------------------------------
+%%
+%% Copyleft Pierre Chatelier
+%% e-mail: pierre.chatelier@club-internet.fr
+%% page perso: http://perso.club-internet.fr/ktd
+%%
+%%Un package pour ecrire du code algorithmique
+%%Il propose, dans l'environnement "algorithme", d'utiliser
+%% -Des remarques, pour commenter le code ( \Rem{Remarque} )
+%% -Des blocs, pour indenter le code ( \Block{code} )
+%% -Des boucles "Tant Que...faire...Fait" ( \While{condition}{code} )
+%% -Des boucles "Repeter...jusqu'a" ( \Repeat{code}{condition} ou \RepeatUntil{}{} )
+%% -Des boucles "Pour...de...a...faire...Fin Pour" ( \ForFromTo{variable}{valeur début}{valeur fin}{code} )
+%% -Des boucles "Pour...faire...Fin Pour" ( \For{controle de boucle}{code} )
+%% -Des Si...Alors...Fin Si ( \If{condition}{code} ou \IfThen{condition}{code} )
+%% -Des Si...Alors...Sinon...Fin Si ( \IfThenElse{condition}{code de alors}{code de sinon} )
+%% -Des Selon que ... Fin Selon que ( \Switch{code} )
+%% -Des fonctions ( \Function{parametres}{type de retour}{code} )
+%% -Des procédures ( \Procedure{parametres}{code} )
+%% -Une instruction de declaration de type ( \Type{nom ou liste de variable}{nom de type} )
+%% -Quelques mots-clefs d'usage courant : \True, \False, \And, \Or et \Not
+%% Les versions étoilées des commandes (\WhileDo*{}, \IfThen*{}, ... ; toutes sauf \Rem, \Block \Switch,
+%% \Function et \Procedure) font tout sur la meme ligne
+%%
+%% Une table des algorithmes est disponible via \listofalgorithms.
+%% Pour introduire un algorithme dans cette table, il faut taper la commande "\caption{texte...}" dans un
+%% environnemment "algorithme"
+%%
+%% On peut passer une option au package : [french] ou [english] pour la langue des mots-clef
+%%
+%%---------------------------------------------------------------------------------------------------------------
+%%This is a package to write some algorithms.
+%%It provides, within an "algorithm" environment, to use
+%% -Comments ( \Rem{text} )
+%% -Blocks, to indent code ( \Block{text} )
+%% -While ... do ... done ( \While{condition}{code} )
+%% -Repeat ... until ( \Repeat{code}{condition} or \RepeatUntil{}{} )
+%% -Repeat ... until ( \RepeatUntil{code}{condition} )
+%% -For...from...to...do...done ( \ForFromTo{variable}{initial value}{final value}{code} )
+%% -For...do...done ( \For{loop control}{code} )
+%% -If...then...end if ( \If{condition}{code} or \IfThen{condition}{code} )
+%% -If...then...else...end if ( \IfThenElse{condition}{then code}{else code} )
+%% -Switch ( \Switch{code} )
+%% -Function ( \Function{parameters}{return type}{code} )
+%% -Procedure ( \Procedure{parametres}{code} )
+%% -A type declaration instruction ( \Type{name or list of variables}{type name} )
+%% -Some useful keywords: \True, \False, \And, \Or and \Not.
+%% Most of these commands have a star-form (\WhileDo*{}, \IfThen*{}, ... ; all but \Rem, \Block \Switch
+%% \Function and \Procedure). These star-forms are single-lined.
+%%
+%% A list of algorithms is provided through \listofalgorithms.
+%% To add an entry in this table, the matching algorithm must have a caption, thanks to "\caption{text}".
+%%
+%% You can specifiy an option to the package : [french] ou [english] for the language of the keywords.
+%%
+%%---------------------------------------------------------------------------------------------------------------
+
+
+%%-----------------------------------------------------------------%%
+%%---------------------- Identification ---------------------------%%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{algorithme} %Nom de la classe / Class name
+%%-----------------------------------------------------------------%%
+%%
+%%
+%%-----------------------------------------------------------------%%
+%%------------------------ Inclusions -----------------------------%%
+\RequirePackage{float, ifthen, calc}
+%%
+%%
+%%-----------------------------------------------------------------%%
+%%------------------------ Langage/Language -----------------------%%
+
+%% Changer le langage dans le contexte de babel /Change langage according to babel
+\@ifpackageloaded{babel}
+{
+ %\iflanguage{french}{\def\alg@language{french}}{}
+ \iflanguage{english}{\def\alg@language{english}}{}
+ \iflanguage{american}{\def\alg@language{english}}{}
+}
+{
+ % \def\alg@language{french} %Langage par defaut / Default language
+}
+
+%% Tenir compte de l'option specifiee explicitement / Handle explicit langage option
+%\DeclareOption{french}{\def\alg@language{french}}
+\DeclareOption{english}{\def\alg@language{english}}
+\DeclareOption{american}{\def\alg@language{english}}
+\ProcessOptions\relax
+
+
+%% Declaration des commandes / Commands declaration
+\ifthenelse{\equal{\alg@language}{french}}
+{
+ \def\alg@floatname{Algorithme}
+ \def\alg@listname{Liste des Algorithmes}
+
+ \newcommand{\@TRUE}{\textbf{vrai}}%
+ \newcommand{\@FALSE}{\textbf{faux}}%
+ \newcommand{\@AND}{\textbf{ET }}%
+ \newcommand{\@OR}{\textbf{OU }}%
+ \newcommand{\@NOT}{\textbf{$\neg$}}%
+
+ \newcommand{\@WHILE}{\textbf{Tant que }}%
+ \newcommand{\@DO}{\textbf{faire }}%
+ \newcommand{\@ENDWHILE}{\textbf{Fait}}%
+
+ \newcommand{\@REPEAT}{\textbf{R\'ep\'eter }}%
+ \newcommand{\@UNTIL}{\textbf{jusqu'\`a ce que }}%
+
+ \newcommand{\@FOR}{\textbf{Pour }}%
+ \newcommand{\@FROM}{\textbf{de }}%
+ \newcommand{\@TO}{\textbf{\`a }}%
+ \newcommand{\@ENDFOR}{\textbf{Fin Pour}}%
+
+ \newcommand{\@IF}{\textbf{Si }}%
+ \newcommand{\@THEN}{\textbf{Alors }}%
+ \newcommand{\@ELSE}{\textbf{Sinon }}%
+ \newcommand{\@ENDIF}{\textbf{Fin Si}}%
+
+ \newcommand{\@SWITCH}{\textbf{Selon que }}%
+ \newcommand{\@ENDSWITCH}{\textbf{Fin Selon que}}%
+
+ \newcommand{\@FUNCTION}{\textbf{Fonction }}%
+ \newcommand{\@RETURN}{\textbf{Retourner }}%
+ \newcommand{\@ENDFUNCTION}{\textbf{Fin}}%
+
+ \newcommand{\@PROCEDURE}{\textbf{Proc\'edure }}%
+ \newcommand{\@ENDPROCEDURE}{\textbf{Fin}}%
+}{}
+\ifthenelse{\equal{\alg@language}{english}}
+{
+ \def\alg@floatname{Algorithm}
+ \def\alg@listname{List of Algorithms}
+
+ \newcommand{\@TRUE}{\textbf{true}}%
+ \newcommand{\@FALSE}{\textbf{false}}%
+ \newcommand{\@AND}{\textbf{AND }}%
+ \newcommand{\@OR}{\textbf{OR }}%
+ \newcommand{\@NOT}{\textbf{$\neg$}}%
+
+ \newcommand{\@WHILE}{\textbf{While }}%
+ \newcommand{\@DO}{\textbf{do }}%
+ \newcommand{\@ENDWHILE}{\textbf{done}}%
+
+ \newcommand{\@REPEAT}{\textbf{Repeat }}%
+ \newcommand{\@UNTIL}{\textbf{until }}%
+
+ \newcommand{\@FOR}{\textbf{For }}%
+ \newcommand{\@FROM}{\textbf{from }}%
+ \newcommand{\@TO}{\textbf{to }}%
+ \newcommand{\@ENDFOR}{\textbf{end For}}%
+
+ \newcommand{\@IF}{\textbf{If }}%
+ \newcommand{\@THEN}{\textbf{then }}%
+ \newcommand{\@ELSE}{\textbf{else }}%
+ \newcommand{\@ENDIF}{\textbf{end If}}%
+
+ \newcommand{\@SWITCH}{\textbf{Switch }}%
+ \newcommand{\@ENDSWITCH}{\textbf{end Switch}}%
+
+ \newcommand{\@FUNCTION}{\textbf{Function }}%
+ \newcommand{\@RETURN}{\textbf{return }}%
+ \newcommand{\@ENDFUNCTION}{\textbf{End}}%
+
+ \newcommand{\@PROCEDURE}{\textbf{Procedure }}%
+ \newcommand{\@ENDPROCEDURE}{\textbf{End}}%
+}{}
+
+%%
+%%
+%%-----------------------------------------------------------------%%
+%%----------------------- Commandes/Commands ----------------------%%
+
+%% Adequation au package "float" / Match "float" package
+\newcommand\floatc@alg[2]{\begin{center}{\bfseries\rmfamily #1:} #2\end{center}}
+\newcommand\fs@alg{
+ \let\@fs@capt\floatc@alg
+ \def\@fs@pre{}\def\@fs@post{}\def\@fs@mid{\vspace{3pt}}
+ \let\@fs@iftopcapt\iftrue}
+\newfloat{algorithmfloat}{h}{loa}
+\floatname{algorithmfloat}{\alg@floatname}
+%\newcommand{\listofalgorithms}{\listof{algorithmfloat}{\alg@listname}}
+\newlength{\alglength}
+
+%% Les commandes disponibles / Provided commands
+\newenvironment{algorithme}[1][H]
+{
+ \setlength{\alglength}{.95\linewidth}
+ \begin{algorithmfloat}[#1]
+
+ %%Rem{texte} : ecrit une remarque
+ %%Rem{text} : puts a comment
+ \newcommand{\@Rem}[1]{\begin{minipage}[t]{\alglength}
+ \emph{[##1]}
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%Bloc{code} : Encapsule quelques lignes / encapsulate some lines
+ \newcommand{\@Block}[1]{\begin{minipage}[t]{\alglength}
+ ##1
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%WhileDo{condition}{code}
+ \newcommand{\@WhileDo}[2]{\begin{minipage}[t]{\alglength}
+ \@WHILE (##1) \@DO \\
+ \hspace*{1em}
+ \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+ \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
+ \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+ \\ \@ENDWHILE%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+ %%WhileDo{condition}{code} sur une seule ligne / on a single line
+ \newcommand{\@ShortWhileDo}[2]{\begin{minipage}[t]{\alglength}
+ \@WHILE (##1) \@DO ##2 \@ENDWHILE
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%RepeatUntil{code}{condition}
+ \newcommand{\@RepeatUntil}[2]{\begin{minipage}[t]{\alglength}
+ \@REPEAT \\
+ \hspace*{1em}
+ \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+ \begin{tabular}{|p{\alglength}} ##1\\ \end{tabular}%
+ \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+ \\ \@UNTIL (##2)%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+ %%RepeatUntil{code}{condition} sur une seule ligne / on a single line
+ \newcommand{\@ShortRepeatUntil}[2]{\begin{minipage}[t]{\alglength}
+ \@REPEAT ##1 \@UNTIL (##2)%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%ForFromToDo{variable}{valeur initiale}{valeur finale}{code}
+ %%ForFromToDo{variable}{initial value}{final value}{code}
+ \newcommand{\@ForFromToDo}[4]{\begin{minipage}[t]{\alglength}
+ \@FOR ##1 \@FROM ##2 \@TO ##3 \@DO \\
+ \hspace*{.3em}
+ \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+ \begin{tabular}{|p{\alglength}} ##4\\ \end{tabular}%
+ \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+ \\ \@ENDFOR%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+ %%ForFromToDo{variable}{valeur initiale}{valeur finale}{code} sur une seule ligne
+ %%ForFromToDo{variable}{initial value}{final value}{code} on a single line
+ \newcommand{\@ShortForFromToDo}[4]{\begin{minipage}[t]{\alglength}
+ \@FOR ##1 \@FROM ##2 \@TO ##3 \@DO ##4 \@ENDFOR%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%For{controle de boucle style C}{code}
+ %%For{C-like loop control}{code}
+ \newcommand{\@ForDo}[2]{\begin{minipage}[t]{\alglength}
+ \@FOR ##1 \@DO \vspace*{.5ex}\\
+ \hspace*{.3em}
+ \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+ \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
+ \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+ \\ \@ENDFOR%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+ %%For{controle de boucle style C}{code} sur une seule ligne
+ %%For{C-like loop control}{code} on a single line
+ \newcommand{\@ShortForDo}[2]{\begin{minipage}[t]{\alglength}
+ \@FOR ##1 \@DO ##2 \@ENDFOR%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%IfThen{condition}{code}
+ \newcommand{\@IfThen}[2]{\begin{minipage}[t]{\alglength}
+ \@IF (##1) \@THEN \\
+ \hspace*{.5em}
+ \addtolength{\alglength}{-1.5em-\tabcolsep-\arrayrulewidth}
+ \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
+ \addtolength{\alglength}{1.5em+\tabcolsep+\arrayrulewidth}
+ \\ \@ENDIF%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+ %%IfThen{condition}{code} sur une seule ligne / on a single line
+ \newcommand{\@ShortIfThen}[2]{\begin{minipage}[t]{\alglength}
+ \@IF (##1) \@THEN ##2 \@ENDIF%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%IfThenElse{condition}{code du then}{code du else} NE PAS CONFONDRE avec le \ifthenelse de LaTeX
+ %%IfThenElse{condition}{then-code}{else-code} DO NOT CONFUSE with \ifthenelse from LaTeX
+ \newcommand{\@IfThenElse}[3]{\begin{minipage}[t]{\alglength}
+ \@IF (##1) \@THEN \\
+ \hspace*{.5em}
+ \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+ \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
+ \\ \@ELSE\\
+ \hspace*{.5em}
+ \begin{tabular}{|p{\alglength}} ##3\\ \end{tabular}%
+ \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+ \\ \@ENDIF%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+ %%IfThenElse{condition}{code du then}{code du else} sur une seule ligne
+ %%IfThenElse{condition}{then-code}{else-code} on a single line
+ \newcommand{\@ShortIfThenElse}[3]{\begin{minipage}[t]{\alglength}
+ \@IF (##1) \@THEN ##2 \@ELSE ##3 \@ENDIF%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%Switch{code} (C'est le selon que)
+ \newcommand{\@Switch}[1]{\begin{minipage}[t]{\alglength}
+ \@SWITCH \\
+ \hspace*{1em}
+ \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+ \begin{tabular}{|p{\alglength}} ##1\\ \end{tabular}%
+ \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+ \\ \@ENDSWITCH%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%Function{parametres}{type de retour}{code}
+ %%Function{parameters}{return type}{code}
+ \newcommand{\@Function}[4]{\begin{minipage}[t]{\alglength}
+ \@FUNCTION ##1(##2) : \textbf{##3}\\
+ \hspace*{1em}
+ \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+ \begin{tabular}{|p{\alglength}} ##4\\ \end{tabular}%
+ \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+ \\ \@ENDFUNCTION%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%Procedure{parametres}{code}
+ %%Procedure{parameters}{code}
+ \newcommand{\@Procedure}[3]{\begin{minipage}[t]{\alglength}
+ \@PROCEDURE ##1(##2)\\
+ \hspace*{1em}
+ \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
+ \begin{tabular}{|p{\alglength}} ##3\\ \end{tabular}%
+ \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
+ \\ \@ENDPROCEDURE%
+ \vspace*{.5ex}
+ \end{minipage}
+ }%
+
+ %%Type{nom ou liste de variable}{nom de type}
+ %%Type{name or list of variables}{type name}
+ \newcommand{\@Type}[2]{##1 : \textbf{##2}}
+
+ %%Definition des macro-commandes pratiques pour l'utilisateur.
+ %%La forme etoilee de certaines commandes est un alias de leur version courte (sur une seule ligne)
+ %%Definition of macro-commands useful for the user.
+ %%The star-from of some commands is an alias towards ther short form (on a single line)
+ \def\True{ \@TRUE}%
+ \def\False{ \@FALSE}%
+ \def\And{ \@AND}%
+ \def\Or{ \@OR}%
+ \def\Not{ \@NOT}%
+ \def\Rem{ \@Rem}
+ \def\Block{ \@Block}
+ \def\While{ \@ifstar{\@ShortWhileDo} {\@WhileDo}}
+ \def\WhileDo{ \@ifstar{\@ShortWhileDo} {\@WhileDo}}
+ \def\Repeat{ \@ifstar{\@ShortRepeatUntil} {\@RepeatUntil}}
+ \def\RepeatUntil{\@ifstar{\@ShortRepeatUntil} {\@RepeatUntil}}
+ \def\ForFromTo{ \@ifstar{\@ShortForFromToDo} {\@ForFromToDo}}
+ \def\ForFromToDo{\@ifstar{\@ShortForFromToDo} {\@ForFromToDo}}
+ \def\ForDo{ \@ifstar{\@ShortForDo} {\@ForDo}}
+ \def\For{ \@ifstar{\@ShortForDo} {\@ForDo}}
+ \def\If{ \@ifstar{\@ShortIfThen} {\@IfThen}}
+ \def\IfThen{ \@ifstar{\@ShortIfThen} {\@IfThen}}
+ \def\IfThenElse{ \@ifstar{\@ShortIfThenElse} {\@IfThenElse}}
+ \def\Switch{ \@ifstar{\@Switch} {\@Switch}}
+ \def\Function{ \@ifstar{\@Function} {\@Function}}
+ \def\Return{ \@RETURN}
+ \def\Procedure{ \@ifstar{\@Procedure} {\@Procedure}}
+ \def\Type{ \@Type}
+
+ \begin{minipage}[t]{\alglength}
+ \begin{center}\begin{tabular}{|c|}\hline\\
+ \hspace*{.5em}
+ \begin{minipage}[t]{\alglength}
+}
+%% Fin de l'environnement "algorithme" / end of "algorithme" environnment
+{
+ \end{minipage}\hspace*{.5em}
+ \\\\\hline\end{tabular}\end{center}
+ \end{minipage}
+ \end{algorithmfloat}
+}
+
+%% ----------------------------- FIN / END ---------------------------------------
--- /dev/null
+% ALGORITHMIC STYLE for LaTeX version 2e
+%
+% This style file is free software; you can redistribute it and/or
+% modify it under the terms of the GNU Lesser General Public
+% License as published by the Free Software Foundation; either
+% version 2 of the License, or (at your option) any later version.
+%
+% This style file is distributed in the hope that it will be useful,
+% but WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this style file; if not, write to the
+% Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+% Boston, MA 02111-1307, USA.
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{algorithmic}[2005/07/05]
+\typeout{Document Style `algorithmic' - environment}
+%
+\RequirePackage{ifthen}
+\RequirePackage{calc}
+\RequirePackage{keyval}
+\newboolean{ALC@noend}
+\setboolean{ALC@noend}{false}
+\newcounter{ALC@line}
+\newcounter{ALC@rem}
+\newcounter{ALC@depth}
+\newlength{\ALC@tlm}
+%
+\DeclareOption{noend}{\setboolean{ALC@noend}{true}}
+%
+\ProcessOptions
+%
+% For keyval-style options
+\def\algsetup{\setkeys{ALG}}
+%
+% For indentation of algorithms
+\newlength{\algorithmicindent}
+\setlength{\algorithmicindent}{0pt}
+\define@key{ALG}{indent}{\setlength{\algorithmicindent}{#1}}
+\ifthenelse{\lengthtest{\algorithmicindent=0pt}}%
+ {\setlength{\algorithmicindent}{1em}}{}
+%
+% For line numbers' delimiters
+\newcommand{\ALC@linenodelimiter}{:}
+\define@key{ALG}{linenodelimiter}{\renewcommand{\ALC@linenodelimiter}{#1}}
+
+%
+% For line numbers' size
+\newcommand{\ALC@linenosize}{\footnotesize}
+\define@key{ALG}{linenosize}{\renewcommand{\ALC@linenosize}{#1}}
+
+%
+% ALGORITHMIC
+\newcommand{\algorithmicrequire}{\textbf{Require:}}
+\newcommand{\algorithmicensure}{\textbf{Ensure:}}
+\newcommand{\algorithmiccomment}[1]{\{#1\}}
+\newcommand{\algorithmicend}{\textbf{end}}
+\newcommand{\algorithmicif}{\textbf{if}}
+\newcommand{\algorithmicthen}{\textbf{then}}
+\newcommand{\algorithmicelse}{\textbf{else}}
+\newcommand{\algorithmicelsif}{\algorithmicelse\ \algorithmicif}
+\newcommand{\algorithmicendif}{\algorithmicend\ \algorithmicif}
+\newcommand{\algorithmicfor}{\textbf{for}}
+\newcommand{\algorithmicforall}{\textbf{for all}}
+\newcommand{\algorithmicdo}{\textbf{do}}
+\newcommand{\algorithmicendfor}{\algorithmicend\ \algorithmicfor}
+\newcommand{\algorithmicwhile}{\textbf{while}}
+\newcommand{\algorithmicendwhile}{\algorithmicend\ \algorithmicwhile}
+\newcommand{\algorithmicloop}{\textbf{loop}}
+\newcommand{\algorithmicendloop}{\algorithmicend\ \algorithmicloop}
+\newcommand{\algorithmicrepeat}{\textbf{repeat}}
+\newcommand{\algorithmicuntil}{\textbf{until}}
+\newcommand{\algorithmicprint}{\textbf{print}}
+\newcommand{\algorithmicreturn}{\textbf{return}}
+\def\ALC@setref{%
+ \def\@currentlabel{\theALC@line}%
+}
+\def\ALC@item[#1]{%
+\if@noparitem \@donoparitem
+ \else \if@inlabel \indent \par \fi
+ \ifhmode \unskip\unskip \par \fi
+ \if@newlist \if@nobreak \@nbitem \else
+ \addpenalty\@beginparpenalty
+ \addvspace\@topsep \addvspace{-\parskip}\fi
+ \else \addpenalty\@itempenalty \addvspace\itemsep
+ \fi
+ \global\@inlabeltrue
+\fi
+\everypar{\global\@minipagefalse\global\@newlistfalse
+ \if@inlabel\global\@inlabelfalse \hskip -\parindent \box\@labels
+ \penalty\z@ \fi
+ \everypar{}}\global\@nobreakfalse
+\if@noitemarg \@noitemargfalse \if@nmbrlist \refstepcounter{\@listctr}\fi \fi
+\sbox\@tempboxa{\makelabel{#1}}%
+\global\setbox\@labels
+ \hbox{\unhbox\@labels \hskip \itemindent
+ \hskip -\labelwidth \hskip -\ALC@tlm
+ \ifdim \wd\@tempboxa >\labelwidth
+ \box\@tempboxa
+ \else \hbox to\labelwidth {\unhbox\@tempboxa}\fi
+ \hskip \ALC@tlm}\ignorespaces}
+%
+\newenvironment{algorithmic}[1][0]{
+\setcounter{ALC@depth}{\@listdepth}%
+\let\@listdepth\c@ALC@depth%
+\let\@item\ALC@item
+ \newcommand{\ALC@lno}{%
+\ifthenelse{\equal{\arabic{ALC@rem}}{0}}
+{{\ALC@linenosize \arabic{ALC@line}\ALC@linenodelimiter}}{}%
+}
+\let\@listii\@listi
+\let\@listiii\@listi
+\let\@listiv\@listi
+\let\@listv\@listi
+\let\@listvi\@listi
+\let\@listvii\@listi
+ \newenvironment{ALC@g}{
+ \begin{list}{\ALC@lno}{ \itemsep\z@ \itemindent\z@
+ \listparindent\z@ \rightmargin\z@
+ \topsep\z@ \partopsep\z@ \parskip\z@\parsep\z@
+ \leftmargin \algorithmicindent%1em
+ \addtolength{\ALC@tlm}{\leftmargin}
+ }
+ }
+ {\end{list}}
+ \newcommand{\ALC@it}{\refstepcounter{ALC@line}\refstepcounter{ALC@rem}\ifthenelse{\equal{\arabic{ALC@rem}}{#1}}{\setcounter{ALC@rem}{0}}{}\item\ALC@setref}
+ \newcommand{\ALC@com}[1]{\ifthenelse{\equal{##1}{default}}%
+{}{\ \algorithmiccomment{##1}}}
+ \newcommand{\REQUIRE}{\item[\algorithmicrequire]}
+ \newcommand{\ENSURE}{\item[\algorithmicensure]}
+ \newcommand{\PRINT}{\ALC@it\algorithmicprint{}\ \ }
+ \newcommand{\RETURN}{\ALC@it\algorithmicreturn{}\ \ }
+ \newcommand{\STATE}{\ALC@it}
+ \newcommand{\COMMENT}[1]{\algorithmiccomment{##1}}
+ \newenvironment{ALC@if}{\begin{ALC@g}}{\end{ALC@g}}
+ \newenvironment{ALC@for}{\begin{ALC@g}}{\end{ALC@g}}
+ \newenvironment{ALC@whl}{\begin{ALC@g}}{\end{ALC@g}}
+ \newenvironment{ALC@loop}{\begin{ALC@g}}{\end{ALC@g}}
+ \newenvironment{ALC@rpt}{\begin{ALC@g}}{\end{ALC@g}}
+ \renewcommand{\\}{\@centercr}
+ \newcommand{\IF}[2][default]{\ALC@it\algorithmicif\ ##2\ \algorithmicthen%
+\ALC@com{##1}\begin{ALC@if}}
+ \newcommand{\ELSE}[1][default]{\end{ALC@if}\ALC@it\algorithmicelse%
+\ALC@com{##1}\begin{ALC@if}}
+ \newcommand{\ELSIF}[2][default]%
+{\end{ALC@if}\ALC@it\algorithmicelsif\ ##2\ \algorithmicthen%
+\ALC@com{##1}\begin{ALC@if}}
+ \newcommand{\FOR}[2][default]{\ALC@it\algorithmicfor\ ##2\ \algorithmicdo%
+\ALC@com{##1}\begin{ALC@for}}
+ \newcommand{\FORALL}[2][default]{\ALC@it\algorithmicforall\ ##2\ %
+\algorithmicdo%
+\ALC@com{##1}\begin{ALC@for}}
+ \newcommand{\WHILE}[2][default]{\ALC@it\algorithmicwhile\ ##2\ %
+\algorithmicdo%
+\ALC@com{##1}\begin{ALC@whl}}
+ \newcommand{\LOOP}[1][default]{\ALC@it\algorithmicloop%
+\ALC@com{##1}\begin{ALC@loop}}
+ \newcommand{\REPEAT}[1][default]{\ALC@it\algorithmicrepeat%
+\ALC@com{##1}\begin{ALC@rpt}}
+ \newcommand{\UNTIL}[1]{\end{ALC@rpt}\ALC@it\algorithmicuntil\ ##1}
+ \ifthenelse{\boolean{ALC@noend}}{
+ \newcommand{\ENDIF}{\end{ALC@if}}
+ \newcommand{\ENDFOR}{\end{ALC@for}}
+ \newcommand{\ENDWHILE}{\end{ALC@whl}}
+ \newcommand{\ENDLOOP}{\end{ALC@loop}}
+ }{
+ \newcommand{\ENDIF}{\end{ALC@if}\ALC@it\algorithmicendif}
+ \newcommand{\ENDFOR}{\end{ALC@for}\ALC@it\algorithmicendfor}
+ \newcommand{\ENDWHILE}{\end{ALC@whl}\ALC@it\algorithmicendwhile}
+ \newcommand{\ENDLOOP}{\end{ALC@loop}\ALC@it\algorithmicendloop}
+ }
+ \renewcommand{\@toodeep}{}
+ \begin{list}{\ALC@lno}{\setcounter{ALC@line}{0}\setcounter{ALC@rem}{0}%
+ \itemsep\z@ \itemindent\z@ \listparindent\z@%
+ \partopsep\z@ \parskip\z@ \parsep\z@%
+ \labelsep 0.5em \topsep 0.2em%
+\ifthenelse{\equal{#1}{0}}
+ {\labelwidth 0.5em }
+ {\labelwidth 1.2em }
+\leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}
+ \ALC@tlm\labelsep
+ }
+}
+{\end{list}}
+
--- /dev/null
+%%
+%% This is file `bbm.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% bbm.dtx (with options: `package')
+%%
+%% Copyright (C) 1994,1997 by Torsten Hilbrich
+%%
+%% This file is part of the BBM package, a support for using the bbm* fonts.
+\def\fileversion{1.1}
+\def\filedate{1997/07/24}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{bbm}[\filedate\space V\space\fileversion
+ \space provides fonts for set symbols - TH]
+\DeclareMathAlphabet{\mathbbm}{U}{bbm}{m}{n}
+\SetMathAlphabet\mathbbm{bold}{U}{bbm}{bx}{n}
+\DeclareMathAlphabet{\mathbbmss}{U}{bbmss}{m}{n}
+\SetMathAlphabet\mathbbmss{bold}{U}{bbmss}{bx}{n}
+\DeclareMathAlphabet{\mathbbmtt}{U}{bbmtt}{m}{n}
+
+\endinput
+%%
+%% End of file `bbm.sty'.
--- /dev/null
+% Change margins on the fly
+\newenvironment{changemargin}[2]{%
+ \begin{list}{}{%
+ \setlength{\topsep}{0pt}%
+ \setlength{\leftmargin}{#1}%
+ \setlength{\rightmargin}{#2}%
+ \setlength{\listparindent}{\parindent}%
+ \setlength{\itemindent}{\parindent}%
+ \setlength{\parsep}{\parskip}%
+ }%
+ \item[] ~ \par%
+ % Get rid of the extra space inserted by the previous line
+ \vspace*{-2em}%
+}{
+ \end{list}
+}
--- /dev/null
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% DROP.DOC <February 17, 1988>
+% Macro for dropping and enlarging the first letter(s) of a paragraph.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Macro written by David G. Cantor, and published Fri, 12 Feb 88, in
+% TeXhax, 1988 #16.
+% Internet: dgc@math.ucla.edu
+% UUCP: ...!{ihnp4, randvax, sdcrdcf, ucbvax}!ucla-cs!dgc
+%
+% Modified for use with LaTeX by Dominik Wujastyk, February 17, 1988
+% Internet: dow@wjh12.harvard.edu
+% Bitnet: dow@harvunxw.bitnet
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% This LaTeX macro is for dropping and enlarging the first letter(s) of a
+% paragraph. The argument may be one or more letters.
+%
+% Here is an example of its usage:
+%
+% \documentstyle[drop]{article}
+% \begin{document}
+% \drop{IN} THE beginning God created the heaven and the earth. Now the
+% earth was unformed and void, and darkness was upon the face of the
+% deep; and the spirit of God hovered over the face of the waters.
+% \end{document}
+%
+% Which will produce something along these lines:
+%
+% I I\ I THE beginning God created the heaven and the earth.
+% I I \ I Now the earth was unformed and void, and darkness was
+% I I \I upon the face of the deep; and the spirit of God hov-
+% ered over the face of the waters.
+%
+% In the first instance the macro will pause during LaTeX processing and
+% ask you for the font you wish to use for you drop capital. When you
+% have something that looks good, then comment out box one in DROP.STY,
+% and comment in box two, replacing "cmr10 scaled \magstep5" with the font
+% of your choice.
+%
+% In my opinion (DW) there are no fonts available in the standard
+% TeX/LaTeX set that are ideal for this use, unless you go down to 9pt or
+% 8pt for your text face, and this is too small. If you have Metafont you
+% should consider generating a cmr17 font at a magstep of two (about 25pt)
+% or three (about 30pt), or even more, depending on the point size of your
+% main text. Why not go the whole hog and design some really fancy
+% capitals from scratch!
+%
+%%%%%%%%%%%%%%%%%%%%% BOX ONE %%%%%%%%%%%%%%%%%%%%%%%%%
+\typein[\dropinitialfont]{Font for Dropped initial:} %
+\font\largefont \dropinitialfont %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+%%%%%%%%%%%%%%%%%%%%% BOX TWO %%%%%%%%%%%%%%%%%%%%%%%%%
+%\font\largefont= cmr10 scaled \magstep5 %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\def\drop#1#2{{\noindent
+ \setbox0\hbox{\largefont #1}\setbox1\hbox{#2}\setbox2\hbox{(}%
+ \count0=\ht0\advance\count0 by\dp0\count1\baselineskip
+ \advance\count0 by-\ht1\advance\count0by\ht2
+ \dimen1=.5ex\advance\count0by\dimen1\divide\count0 by\count1
+ \advance\count0 by1\dimen0\wd0
+ \advance\dimen0 by.25em\dimen1=\ht0\advance\dimen1 by-\ht1
+ \global\hangindent\dimen0\global\hangafter-\count0
+ \hskip-\dimen0\setbox0\hbox to\dimen0{\raise-\dimen1\box0\hss}%
+ \dp0=0in\ht0=0in\box0}#2}
--- /dev/null
+%%
+%% This is file `dropping.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% dropping.dtx (with options: `paketkod')
+%%
+%% Copyright (c) 1996-97 by Mats Dahlgren <matsd@homenet.se>.
+%% All rights reserved. See the file `dropping.ins' for information
+%% on how you may (re-)distribute the `dropping' package files.
+%%
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{dropping}[1997/06/12 v.0.12]
+\newcount\bigscale
+\newcount\down
+\newdimen\saveunitlength
+\newdimen\wantedheight
+\newif\ifstrtcmmnd \strtcmmndfalse
+\DeclareOption{dvips}{%
+\newcount\wantedcount
+\newcount\actualcount%
+\newdimen\actualheight%
+\def\findsize#1#2{%
+\bigscale=1000%
+\font\BIG=#1 scaled \bigscale%
+\setbox0=\hbox{\BIG #2\/}%
+\actualheight=\ht0%
+\wantedcount=\wantedheight \actualcount=\actualheight%
+\advance\actualcount by 50%
+\divide\actualcount by 100%
+\multiply\wantedcount by 10%
+\divide\wantedcount by \actualcount%
+\font\BIG=#1 scaled \wantedcount%
+\setbox0=\hbox{\BIG #2\/}%
+\bigscale=\wantedcount}}
+\DeclareOption{other}{%
+\def\nextmagstep#1#2#3{%
+\bigscale=#3%
+\font\BIG=#1 scaled \bigscale%
+\setbox0=\hbox{\BIG #2\/}}%
+\def\findsize#1#2{%
+\nextmagstep{#1}{#2}{\magstep0}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstephalf}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep1}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep2}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep3}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep4}%
+\ifdim\ht0<\wantedheight%
+\nextmagstep{#1}{#2}{\magstep5}%
+\fi\fi\fi\fi\fi\fi}}
+\DeclareOption{xdvi}{\ExecuteOptions{dvips}}
+\DeclareOption{dvipsone}{\ExecuteOptions{other}}
+\DeclareOption{dviwindo}{\ExecuteOptions{other}}
+\DeclareOption{emtex}{\ExecuteOptions{other}}
+\DeclareOption{dviwin}{\ExecuteOptions{other}}
+\DeclareOption{oztex}{\ExecuteOptions{dvips}}
+\DeclareOption{textures}{\ExecuteOptions{other}}
+\DeclareOption{pctexps}{\ExecuteOptions{other}}
+\DeclareOption{pctexwin}{\ExecuteOptions{other}}
+\DeclareOption{pctexhp}{\ExecuteOptions{other}}
+\DeclareOption{dvi2ps}{\ExecuteOptions{other}}
+\DeclareOption{dvialw}{\ExecuteOptions{other}}
+\DeclareOption{dvilaser}{\ExecuteOptions{other}}
+\DeclareOption{dvitops}{\ExecuteOptions{other}}
+\DeclareOption{psprint}{\ExecuteOptions{other}}
+\DeclareOption{pubps}{\ExecuteOptions{other}}
+\DeclareOption{ln}{\ExecuteOptions{other}}
+\DeclareOption*{\ExecuteOptions{other}}
+\InputIfFileExists{graphics.cfg}{}{%
+\PackageWarningNoLine{dropping}{%
+You have no `graphics.cfg' file installed.\MessageBreak
+I will assume you are using `dvips'}
+\ExecuteOptions{dvips}}
+\ProcessOptions
+\def\bigdrop#1#2#3#4{%
+\saveunitlength=\unitlength%
+\unitlength=\baselineskip%
+\setbox1=\hbox{\the\font I}%
+\wantedheight=#2\baselineskip \advance\wantedheight by -\baselineskip%
+\advance\wantedheight by \ht1%
+\findsize{#3}{#4}%
+\hangindent=\wd0 \advance\hangindent by #1%
+\hangafter=-#2%
+\ifdim\dp0>0.25\baselineskip%
+ \loop\ifdim\dp0>\baselineskip
+ \advance\baselineskip by \baselineskip
+ \advance\hangafter by -1
+ \repeat
+ \advance\hangafter by -1
+ \baselineskip=\unitlength
+\fi%
+\noindent%
+\down=-#2 \advance\down by 1%
+\begin{picture}(0,0)%
+\put(0,\down){\makebox(0,0)[br]{\box0}}%
+\end{picture}%
+\unitlength=\saveunitlength}
+\def\spltatspc#1 #2\spltatspc{#1}
+\def\spltstrng#1{\expandafter\@split#1\end}
+\def\@split#1 #2\end{\def\strngn{#1}\def\strngtw{#2}}
+\def\isit#1{\expandafter\@isit\string#1\@null}
+\def\@isit#1#2\@null{%
+ \ifnum`#1=`\\
+ \global\strtcmmndtrue
+ \else
+ \global\strtcmmndfalse
+ \fi
+}
+\newcommand{\dropping}[3][0pt]{%
+\get@external@font%
+\edef\n@vf@nt{\expandafter\spltatspc\external@font \spltatspc}%
+\setbox8=\hbox{#3\get@external@font%
+\global\let\external@font@export\external@font%
+\edef\n@vf@ntb@x{\expandafter\spltatspc\external@font \spltatspc}%
+\global\let\n@vf@nt\n@vf@ntb@x}%
+\let\external@font\external@font@export%
+\edef\xprt@rgtr{\expandafter\spltatspc\external@font\expandafter{}
+\spltatspc}
+\def\spltslsk{#3}%
+\isit{#3}%
+\ifstrtcmmnd
+\spltstrng\spltslsk%
+\let\xprt@rgfr\strngtw
+\else
+\def\xprt@rgfr{#3}
+\fi
+\protect\bigdrop{#1}{#2}{\xprt@rgtr}{\xprt@rgfr}%
+}
+\endinput
+%%
+%% End of file `dropping.sty'.
--- /dev/null
+% Document class for the PhD thesis
+%
+% Copyright (c) 2012-14 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+
+%%--------------------
+%% Declare the LaTeX class
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{spimbasephdthesis}[2014/11/06]
+
+\RequirePackage{lettrine}
+
+%%--------------------
+%% Check for the correct version of tex-upmethodology
+\@ifclasslater{UPMVERSION}{2014/07/09}{}{\@latex@error{You must install a version of tex-upmethodology greater or equal to 20140710}\@eha}
+
+%%--------------------
+%% Underlining if the author's name (in bibliography)
+\newcommand{\underlineifauthor}[2]{%
+ \ifdocumentauthor{#1}{\underline{#2}}{#2}%
+}
+
+%%--------------------
+%% Utility functions
+\gdef\edspim@phdthesis@class@firstword#1 #2\@nil{#1}
+\gdef\edspim@phdthesis@class@nextwords#1 #2\@nil{#2}
+\gdef\edspim@phdthesis@class@firstcolumn#1,#2\@nil{#1}
+\gdef\edspim@phdthesis@class@nextcolumns#1,#2\@nil{#2}
+\gdef\edspim@phdthesis@class@makejury{}
+\gdef\edspim@phdthesis@class@addjury#1#2{%
+ \addjury%
+ {\expandafter\edspim@phdthesis@class@firstword\edspim@phdthesis@class@firstcolumn#2\@nil\@nil}%
+ {\expandafter\edspim@phdthesis@class@nextwords\edspim@phdthesis@class@firstcolumn#2\@nil\@nil}%
+ {#1}%
+ {\edspim@phdthesis@class@nextcolumns#2\@nil}%
+}
+
+%%--------------------
+% Define the PhD thesis document
+%\declarethesis[subtitle]{title}{defense date}{ID}
+\newcommand{\declarethesis}[4][] {
+ \declaredocument{#2}{#1}{#4}%
+ \Set{defensedate}{#3}%
+ \initialversion{\makedate{11}{04}{2006}}{PhD Thesis}{\upmpublic}%
+}
+
+%%--------------------
+% Add menber of the jury
+%\addjury[email]{firstname}{lastname}{type}{position}
+\newcommand{\upm@phdthesis@protectnl}[1]{%
+ \begingroup%
+ \let\\\newline%
+ \nohyphens{\Get{jurystyle}#1}%
+ \endgroup%
+}
+\gdef\upm@phdthesis@jurylist{}
+\global\let\thejurytab\relax
+\newcommand{\addjury}[5][]{%
+ \global\protected@edef\upm@phdthesis@jurylist{\upm@phdthesis@jurylist\protect\protect\Get{jurystyle}\protect\protect\upmmakename{#2}{#3}{~} & \protect\upm@phdthesis@protectnl{#4} & \protect\upm@phdthesis@protectnl{#5} \protect\\}%
+ \global\protected@edef\thejurytab{\protect\noindent\protect\begin{tabularx}{\Get{jurytabwidth}}{@{}llX@{}}\upm@phdthesis@jurylist\protect\end{tabularx}}%
+}
+
+%%--------------------
+% Add affiliation
+%\addlaboratory{lab description}
+\newif\ifphdthesishaslaboratory
+\global\phdthesishaslaboratoryfalse
+\newif\ifphdthesishaslaboratorymulti
+\global\phdthesishaslaboratorymultifalse
+\gdef\thethesislaboratories{}
+\newcommand{\addlaboratory}[1]{%
+ \ifphdthesishaslaboratory%
+ \phdthesishaslaboratorymultitrue%
+ \global\protected@edef\thethesislaboratories{\thethesislaboratories,\protect\\\protect{#1}}%
+ \else%
+ \phdthesishaslaboratorytrue%
+ \global\protected@edef\thethesislaboratories{\thethesislaboratories\protect{#1}}%
+ \fi%
+}
+%%--------------------
+% Reset affiliation
+%\resetlaboratories
+\newcommand{\resetlaboratories}{%
+ \global\phdthesishaslaboratoryfalse%
+ \global\phdthesishaslaboratorymultifalse%
+ \gdef\thethesislaboratories{}%
+}
+
+%%--------------------
+%% Add partner logo
+%\addpartner[picture_options]{logo_picture}
+\newif\ifpartnerlist
+\global\partnerlistfalse
+\gdef\thepartnerlist{}
+\newcommand{\addpartner}[2][height=1cm]{%
+ \ifpartnerlist%
+ \protected@xdef\thepartnerlist{\thepartnerlist\protect\hfill\protect\includegraphics[#1]{#2}}%
+ \else%
+ \global\partnerlisttrue%
+ \protected@xdef\thepartnerlist{\thepartnerlist\protect\includegraphics[height=1cm]{#2}}%
+ \fi%
+}
+
+%%--------------------
+%% Reset the list of the partner logos
+%\resetpartners
+\newif\ifpartnerlist
+\newcommand{\resetpartners}{%
+ \global\partnerlistfalse%
+ \gdef\thepartnerlist{}%
+}
+
+%%--------------------
+% Change the color of the TOC
+\let\upm@phdthesis@l@contentsline\contentsline
+\renewcommand{\contentsline}[4]{%
+ %{subsection}{\numberline {1.1.2}Extension de la plateforme \textsc {JaSIM}\xspace et Application}{18}{subsection.1.1.2}
+ \ifthenelse
+ {\equal{#1}{part}}
+ {\upm@phdthesis@l@contentsline{#1}{\textcolor{parttitlecolor}{#2}}{\textcolor{parttitlecolor}{#3}}{#4}}%
+ {\ifthenelse
+ {\equal{#1}{chapter}}
+ {\upm@phdthesis@l@contentsline{#1}{\textcolor{chaptertitlecolor}{#2}}{\textcolor{chaptertitlecolor}{#3}}{#4}}%
+ {\upm@phdthesis@l@contentsline{#1}{#2}{#3}{#4}}}%
+}
+
+%%--------------------
+% Set the abstract of the thesis
+% \thesisabstract [lang]{text}
+\newif\ifphdthesismainabstract
+\phdthesismainabstractfalse
+\newif\ifphdthesisminorabstract
+\phdthesisminorabstractfalse
+\gdef\phdthesismainabstract{}
+\gdef\phdthesisminorabstract{}
+\gdef\phdthesismainabstracttitle{R\'esum\'e~:}
+\gdef\phdthesisminorabstracttitle{Abstract:}
+\newcommand{\thesisabstract}[2][\upmcurrentlang]{%
+ \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+ \global\phdthesismainabstracttrue%
+ \gdef\phdthesismainabstract{#2}%
+ \setdocabstract{#2}%
+ \ifthenelse{\equal{english}{#1}}{%
+ \gdef\phdthesismainabstracttitle{Abstract:}
+ }{%
+ \gdef\phdthesismainabstracttitle{R\'esum\'e~:}
+ }%
+ }{%
+ \global\phdthesisminorabstracttrue%
+ \gdef\phdthesisminorabstract{#2}%
+ \ifthenelse{\equal{english}{#1}}{%
+ \gdef\phdthesisminorabstracttitle{Abstract:}
+ }{%
+ \gdef\phdthesisminorabstracttitle{R\'esum\'e~:}
+ }%
+ }%
+}
+
+%%--------------------
+% Set the keywords of the thesis
+% \thesiskeywords [lang]{keywords}
+\newif\ifphdthesismainkeywords
+\phdthesismainkeywordsfalse
+\newif\ifphdthesisminorkeywords
+\phdthesisminorkeywordsfalse
+\gdef\phdthesismainkeywords{}
+\gdef\phdthesisminorkeywords{}
+\gdef\phdthesismainkeywordstitle{}
+\gdef\phdthesisminorkeywordstitle{}
+\newcommand{\thesiskeywords}[2][\upmcurrentlang]{%
+ \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+ \global\phdthesismainkeywordstrue%
+ \gdef\phdthesismainkeywords{#2}%
+ \ifthenelse{\equal{english}{#1}}{%
+ \gdef\phdthesismainkeywordstitle{Keywords:}
+ }{%
+ \gdef\phdthesismainkeywordstitle{Mots-cl\'es~:}
+ }%
+ }{%
+ \global\phdthesisminorkeywordstrue%
+ \gdef\phdthesisminorkeywords{#2}%
+ \ifthenelse{\equal{english}{#1}}{%
+ \gdef\phdthesisminorkeywordstitle{Keywords:}
+ }{%
+ \gdef\phdthesisminorkeywordstitle{Mots-cl\'es~:}
+ }%
+ }%
+}
+
+%%--------------------
+% Utility function that is looping on the character of a text
+% \foreachchar {for first char}{for the rest of the chars}
+\gdef\@endfe{}
+\def\upm@foreachchar#1#2\@endfe{%
+ \def\thechar{#1}%
+ \upm@foreach@do%
+ \renewcommand{\onfirstchar}[1]{}%
+ \renewcommand{\onnextchar}[1]{##1}%
+ \ifthenelse{\equal{{#2}}{{\@endfe}}}{}{
+ \expandafter\upm@foreachchar#2\@endfe%
+ }%
+}
+
+\newcommand{\foreachchar}[2]{%
+ \begingroup%
+ \newcommand{\upm@foreach@do}{#2}%
+ \newcommand{\onfirstchar}[1]{##1}%
+ \newcommand{\onnextchar}[1]{}%
+ {\expandafter\upm@foreachchar#1\@endfe\@endfe}%
+ \endgroup%
+}
+
+%%--------------------
+% Build card with the PhD thesis reference ID inside.
+% This ID is given by the SPIM doctoral school.
+\newcommand{\thespimthesisdocrefcard}{%
+ \gdef\upm@spimthesis@reserveda{|}%
+ \gdef\upm@spimthesis@reservedb{}%
+ \foreachchar{\theupmdocref}{%
+ \protected@xdef\upm@spimthesis@reserveda{|c\upm@spimthesis@reserveda}%
+ \protected@xdef\upm@spimthesis@reservedb{\upm@spimthesis@reservedb \onnextchar{\protect&} \thechar}%
+ }%
+ \protected@xdef\upm@spimthesis@reserveda{%
+ \protect\tabular[c]{\upm@spimthesis@reserveda}}%
+ N\ensuremath{^{\circ}}~\upm@spimthesis@reserveda%
+ \upm@spimthesis@reservedb \\ \hline\endtabular%
+}
+
+%%--------------------
+%% Define emphazing macros
+\renewcommand{\Emph}[1]{\textcolor{emphemphtextcolor}{\textbf{#1}}}
+\renewcommand{\emph}[1]{\textcolor{emphtextcolor}{#1}}
+
+%%--------------------
+%% Macros for formating the bibliography
+\newcommand{\phdthesisbibemph}[1]{\textit{#1}}
+\newcommand{\phdthesisbibEmph}[1]{\textcolor{bibemphemphtextcolor}{\textbf{#1}}}
+\newcommand{\phdthesisbibkeyemph}[1]{\textbf{#1}}
+
+\ifthenelse{\equal{french}{\upmcurrentlang}}{
+ \gdef\phdthesisbiband{et\xspace}
+ \gdef\phdthesisbibetal{et~al.}
+ \gdef\phdthesisbibeditors{\'editeurs\xspace}
+ \gdef\phdthesisbibeditor{\'editeur\xspace}
+ \gdef\phdthesisbibvolume{volume\xspace}
+ \gdef\phdthesisbibVolume{Volume\xspace}
+ \gdef\phdthesisbibof{de\xspace}
+ \gdef\phdthesisbibvolumenumber{volume et num\'ero\xspace}
+ \gdef\phdthesisbibnumber{num\'ero\xspace}
+ \gdef\phdthesisbibNumber{Num\'ero\xspace}
+ \gdef\phdthesisbibin{dans\xspace}
+ \gdef\phdthesisbibIn{Dans\xspace}
+ \gdef\phdthesisbibedition{\'edition\xspace}
+ \gdef\phdthesisbibpages{pages\xspace}
+ \gdef\phdthesisbibpage{page\xspace}
+ \gdef\phdthesisbibchapter{chapitre\xspace}
+ \gdef\phdthesisbibtechnicalreport{Rapport technique\xspace}
+ \gdef\phdthesisbibJanuary{Janvier\xspace}
+ \gdef\phdthesisbibFebruary{F\'evrier\xspace}
+ \gdef\phdthesisbibMarch{Mars\xspace}
+ \gdef\phdthesisbibApril{Avril\xspace}
+ \gdef\phdthesisbibMay{Mai\xspace}
+ \gdef\phdthesisbibJune{Juin\xspace}
+ \gdef\phdthesisbibJuly{Juillet\xspace}
+ \gdef\phdthesisbibAugust{Ao\^ut\xspace}
+ \gdef\phdthesisbibSeptember{Septembre\xspace}
+ \gdef\phdthesisbibOctober{Octobre\xspace}
+ \gdef\phdthesisbibNovember{Novembre\xspace}
+ \gdef\phdthesisbibDecember{D\'ecembre\xspace}
+}{%
+ \gdef\phdthesisbiband{et\xspace}
+ \gdef\phdthesisbibetal{et~al.}
+ \gdef\phdthesisbibeditors{editors\xspace}
+ \gdef\phdthesisbibeditor{editor\xspace}
+ \gdef\phdthesisbibvolume{volume\xspace}
+ \gdef\phdthesisbibVolume{Volume\xspace}
+ \gdef\phdthesisbibof{of\xspace}
+ \gdef\phdthesisbibvolumenumber{volume and number\xspace}
+ \gdef\phdthesisbibnumber{number\xspace}
+ \gdef\phdthesisbibNumber{Number\xspace}
+ \gdef\phdthesisbibin{in\xspace}
+ \gdef\phdthesisbibIn{In\xspace}
+ \gdef\phdthesisbibedition{edition\xspace}
+ \gdef\phdthesisbibpages{pages\xspace}
+ \gdef\phdthesisbibpage{page\xspace}
+ \gdef\phdthesisbibchapter{chapter\xspace}
+ \gdef\phdthesisbibtechnicalreport{Technical Report\xspace}
+ \gdef\phdthesisbibJanuary{January\xspace}
+ \gdef\phdthesisbibFebruary{February\xspace}
+ \gdef\phdthesisbibMarch{March\xspace}
+ \gdef\phdthesisbibApril{April\xspace}
+ \gdef\phdthesisbibMay{May\xspace}
+ \gdef\phdthesisbibJune{June\xspace}
+ \gdef\phdthesisbibJuly{July\xspace}
+ \gdef\phdthesisbibAugust{August\xspace}
+ \gdef\phdthesisbibSeptember{September\xspace}
+ \gdef\phdthesisbibOctober{October\xspace}
+ \gdef\phdthesisbibNovember{November\xspace}
+ \gdef\phdthesisbibDecember{December\xspace}
+}
+
+%%--------------------
+%% Force the name of the bibliography and other sections for French
+\AtBeginDocument{
+ \ifthenelse{\equal{\edspimphdthesisclasslanguage}{french}}{%
+ \renewcommand{\refname}{Bibliographie}%
+ \renewcommand{\listtablename}{Liste des tables}%
+ \renewcommand{\contentsname}{Sommaire}%
+ }{}
+}
+
+%%--------------------
+%% Format the keys in the bibliography section
+\global\let\upm@phdthesis@old@biblabel\@biblabel
+\gdef\@biblabel#1{\phdthesisbibkeyemph{\upm@phdthesis@old@biblabel{#1}}}
+
+
+%%--------------------
+% Lettrine
+
+% The following macro put its parameter into a lettrine with the
+% proper layout
+\gdef\upm@phdthesis@MakeLettrine@lettrine#1{%
+ \lettrine[findent=.5mm,nindent=0pt]{\uppercase{#1}}{}%
+}
+
+% Macro that contains the string "the letter"
+\gdef\upm@phdthesis@MakeLettrine@letterstr{\string t\string h\string e\space\string l\string e\string t\string t\string e\string r}
+
+% Macro that contains the string "the character"
+\gdef\upm@phdthesis@MakeLettrine@characterstr{\string t\string h\string e\space\string c\string h\string a\string r\string a\string c\string t\string e\string r}
+
+% Macro to search for the first letter in its second parameter
+% and put it in a lettrine.
+% First parameter: are the macros to ignore and put back before
+% the lettrine. The value of this parameter will
+% evolve during the recursive calls.
+% Second parameter: TeX give the token following the macro in
+% this parameter (because the macros is always
+% invoked with only one explicit parameter).
+\newcommand{\upm@phdthesis@MakeLettrine}[2]{%
+ % Detect the meaning of the second parameter.
+ \edef\upm@phdthesis@reserveda{\meaning#2}%
+ % Test if the meaning string contains "the letter"
+ \edef\upm@phdthesis@reservedb{\noexpand\in@{\upm@phdthesis@MakeLettrine@letterstr}{\upm@phdthesis@reserveda}}%
+ \upm@phdthesis@reservedb%
+ \ifin@%
+ % The meaning indicates that the second parameter
+ % is a letter. It may be put in the lettrine.
+ % The macro \upm@phdthesis@reserveda is defined to avoid
+ % to consume the tokens written in this recursive
+ % macro. This temp macro is invoked at the end of
+ % this recursive macro. In this way it will consume
+ % the token that are available in the document core.
+ \gdef\upm@phdthesis@reserveda{#1\upm@phdthesis@MakeLettrine@lettrine{#2}}%
+ \else%
+ % Test if the meaning string contains "the character"
+ \edef\upm@phdthesis@reservedb{\noexpand\in@{\upm@phdthesis@MakeLettrine@characterstr}{\upm@phdthesis@reserveda}}%
+ \upm@phdthesis@reservedb%
+ \ifin@%
+ % The meaning indicates that the second parameter
+ % is a character. It may be put in the lettrine.
+ % The macro \upm@phdthesis@reserveda is defined to avoid
+ % to consume the tokens written in this recursive
+ % macro. This temp macro is invoked at the end of
+ % this recursive macro. In this way it will consume
+ % the token that are available in the document core.
+ \gdef\upm@phdthesis@reserveda{#1\upm@phdthesis@MakeLettrine@lettrine{#2}}%
+ \else%
+ % The meaning indicates that the second parameter
+ % is not a letter nor a character.
+ % It may be put back before the lettrine without
+ % change.
+ % The macro \upm@phdthesis@reserveda is defined to avoid
+ % to consume the tokens written in this recursive
+ % macro. This temp macro is invoked at the end of
+ % this recursive macro. In this way it will consume
+ % the token that are available in the document core.
+ \gdef\upm@phdthesis@reserveda{\upm@phdthesis@MakeLettrine{#1#2}}%
+ \fi%
+ \fi%
+ \upm@phdthesis@reserveda%
+}
+
+%%--------------------
+%% Macro for starting a chapter with a standard format
+\global\long\def\upm@phdthesis@chapterintro@toc#1\section{%
+ \@ifundefined{minitoc}{}{%
+ \begin{figure}[bt]%
+ \minitoc%
+ \end{figure}%
+ }%
+ \ignorespaces\upm@phdthesis@MakeLettrine{}#1%
+ \expandafter\section}
+\global\long\def\upm@phdthesis@chapterintro@notoc#1\section{%
+ \ignorespaces\upm@phdthesis@MakeLettrine{}#1%
+ \expandafter\section}
+\gdef\chapterintro{\@ifstar\upm@phdthesis@chapterintro@notoc\upm@phdthesis@chapterintro@toc}
+
+%%--------------------
+%% Add a small message on the backcover.
+\Set{backcovermessage}{%
+ \begin{center}\tiny
+ \ifthenelse{\equal{french}{\upmcurrentlang}}{
+ Document r\'ealis\'e avec \LaTeX\ et : \\
+ le style \LaTeX\ pour Th\`ese de Doctorat cr\'e\'e par S. Galland --- \url{http://www.multiagent.fr/ThesisStyle} \\
+ la collection de paquets \texttt{tex-upmethodology} --- \url{http://www.arakhne.org/tex-upmethodology/}\\[.25cm]
+ }{
+ Document generated with \LaTeX\ and: \\
+ the \LaTeX\ style for PhD Thesis created by S. Galland --- \url{http://www.multiagent.fr/ThesisStyle} \\
+ the \texttt{tex-upmethodology} package suite --- \url{http://www.arakhne.org/tex-upmethodology/}\\[.25cm]
+ }
+ \end{center}
+}
+
+\endinput
--- /dev/null
+% Back page for Unified Process Methodology
+%
+% Copyright (c) 2009-2013 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+
+\global\edef\upm@package@bp@ver{2013/12/14}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-backpage}[\upm@package@bp@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%-----
+% Locales
+\def\upm@back@lang@english{
+ \gdef\upm@lang@@{\message{**** upmethodology-backpage is using English language ****}}%
+}
+\def\upm@back@lang@french{
+ \gdef\upm@lang@@{\message{**** upmethodology-backpage is using French language ****}}%
+}
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+ \upm@back@lang@french
+}
+\DeclareOption{francais}{%
+ \upm@back@lang@french
+}
+\DeclareOption{english}{%
+ \upm@back@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions
+\upm@lang@@
+
+\RequirePackage{upmethodology-extension}
+
+%----
+% Set the back page layout as the classic layout theme
+%\setbackcover{layout_name}
+\newcommand{\setbackcover}[1]{%
+ \ifthenelse{\equal{#1}{none}}{%
+ \global\let\makebackcover\relax%
+ }{%
+ \errmessage{invalid back layout theme: #1}%
+ }%
+}
+\newcommand{\setbacklayout}[1]{\errmessage{\string\setbacklayout\ is deprecated. Use \string\setbackcover}}
+
+\setbackcover{none}
+
+\AtEndDocument{
+ \Ifdefined{backpage}{
+ \gdef\makebackcover{
+ \ifupmarticleformat\clearpage%
+ \else
+ \cleardoublepage%
+ \if@twoside\thispagestyle{empty}\mbox{}%
+ \vfill{\Get{backcovermessage}}\clearpage\fi
+ \fi
+ \thispagestyle{empty}\Get{backpage}
+ }
+ }
+}
+
+\endinput
--- /dev/null
+% Source Code Description for Unified Process Methodology
+%
+% Copyright (c) 2006-2007 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+% Creation date: 2006-04-27
+% Modifications:
+% 2009-10-30 Clean code.
+%
+
+\global\edef\upm@package@code@ver{2009/10/30}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-code}[\upm@package@code@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+\def\upm@code@eat@spaces#1{#1}
+\def\upm@code@makemul#1{\upm@code@eat@spaces{#1}\bgroup\textbf{s}\egroup\xspace}
+
+%-----
+%Language
+%0: UML
+%1: java
+%2: C++
+\newcount\upm@code@current@lang
+
+\DeclareOption{uml}{\upm@code@current@lang=0}
+\DeclareOption{java}{\upm@code@current@lang=1}
+\DeclareOption{cpp}{\upm@code@current@lang=2}
+
+\ExecuteOptions{uml}
+\ProcessOptions
+
+%-----
+%Language changes
+\newcommand{\upmcodelang}[1]{%
+ \ifthenelse{\equal{#1}{java}}{%
+ \upm@code@current@lang=1%
+ }{%
+ \ifthenelse{\equal{#1}{cpp}}{%
+ \upm@code@current@lang=2%
+ }{%
+ \upm@code@current@lang=0%
+ }%
+ }%
+ \upm@code@declarations%
+}
+
+\def\upm@code@declarations {
+%-----
+%PROTOTYPES
+\gdef\jclass##1{\mbox{\textsc{##1}}\xspace}
+\gdef\jinterface##1{\mbox{\textit{##1}}\xspace}
+\gdef\jpackage##1{\mbox{\textsc{##1}}\xspace}
+\gdef\jfunc##1{\texttt{##1}\xspace}
+
+%-----
+%TYPES
+\if\the\upm@code@current@lang 1
+ %Java
+ \gdef\jclazz{\textbf{Class}\xspace}
+ \gdef\jvoid{\textbf{void}\xspace}
+ \gdef\jint{\textbf{int}\xspace}
+ \gdef\jlong{\textbf{long}\xspace}
+ \gdef\jfloat{\textbf{float}\xspace}
+ \gdef\jboolean{\textbf{boolean}\xspace}
+ \gdef\jdouble{\textbf{double}\xspace}
+ \gdef\jchar{\textbf{char}\xspace}
+ \gdef\jstring{\jclass{String}\xspace}
+ \gdef\jarray##1{{{##1}\bgroup\textbf{\string[\string]}\egroup}\xspace}
+ \gdef\jcollection##1{{\jclass{Collection}\textless{##1}\bgroup\textgreater\egroup}\xspace}
+ \gdef\jset##1{{\jclass{Set}\textless{##1}\bgroup\textgreater\egroup}\xspace}
+\else\if\the\upm@code@current@lang 2
+ %C++
+ \gdef\jclazz{\textbf{class}\xspace}
+ \gdef\jvoid{\textbf{void}\xspace}
+ \gdef\jint{\textbf{int}\xspace}
+ \gdef\jlong{\textbf{long}\xspace}
+ \gdef\jfloat{\textbf{float}\xspace}
+ \gdef\jboolean{\textbf{bool}\xspace}
+ \gdef\jdouble{\textbf{double}\xspace}
+ \gdef\jchar{\textbf{char}\xspace}
+ \gdef\jstring{\jclass{std\string:\string:string}\xspace}
+ \gdef\jarray##1{{{##1}\bgroup\textbf{\string[\string]}\egroup}\xspace}
+ \gdef\jcollection##1{{\jclass{std\string:\string:vector}\textless{##1}\bgroup\textgreater\egroup}\xspace}
+ \gdef\jset##1{{\jclass{std\string:\string:set}\textless{##1}\bgroup\textgreater\egroup}\xspace}
+\else
+ %UML
+ \gdef\jclazz{\textbf{class}\xspace}
+ \gdef\jvoid{\textbf{void}\xspace}
+ \gdef\jint{\textbf{integer}\xspace}
+ \gdef\jlong{\textbf{long integer}\xspace}
+ \gdef\jfloat{\textbf{float}\xspace}
+ \gdef\jboolean{\textbf{boolean}\xspace}
+ \gdef\jdouble{\textbf{double}\xspace}
+ \gdef\jchar{\textbf{character}\xspace}
+ \gdef\jstring{\textbf{string}\xspace}
+ \gdef\jcollection##1{{\textbf{collection of} \upm@code@makemul{##1}\bgroup\egroup}\xspace}
+ \gdef\jarray##1{{\textbf{array of} \upm@code@makemul{##1}\bgroup\egroup}\xspace}
+ \gdef\jset##1{{\textbf{set of} \upm@code@makemul{##1}\bgroup\egroup}\xspace}
+\fi\fi
+
+%-----
+%CONSTANTS
+\if\the\upm@code@current@lang 1
+ %Java
+ \gdef\jtrue{\textsc{true}\xspace}
+ \gdef\jfalse{\textsc{false}\xspace}
+\else\if\upm@code@current@lang 2
+ %C++
+ \gdef\jtrue{\textsc{true}\xspace}
+ \gdef\jfalse{\textsc{false}\xspace}
+\else
+ \gdef\jtrue{\textsc{true}\xspace}
+ \gdef\jfalse{\textsc{false}\xspace}
+\fi\fi
+
+%-----
+%OPERATIONS
+\gdef\jop##1{\bgroup\jcode{##1}\egroup}
+\gdef\jcall##1##2{\mbox{\jfunc{##1}\bgroup\texttt{\string({##2}\string)}\egroup}\xspace}
+\gdef\jcode##1{\texttt{##1}\xspace}
+
+}
+
+\upm@code@declarations
+
+\endinput
--- /dev/null
+% Package for Unified Process Methodology's documents
+%
+% Copyright (c) 2006-2013 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+
+\global\edef\upm@package@doc@ver{2013/09/29}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-document}[\upm@package@doc@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%----------------------------------------
+% LOCALES
+%----------------------------------------
+\def\upm@document@lang@english{%
+ \gdef\upm@lang@@{\message{**** upmethodology-document is using English language ****}}%
+ \gdef\upmcurrentlang{english}%
+ \gdef\upmcurrentlangforbabel{english}%
+ \gdef\upm@lang@project{Project}%
+ \gdef\upm@lang@document{Document}%
+ \gdef\upm@lang@docref{Reference}%
+ \gdef\upm@lang@lastupdate{Last Update}%
+ \gdef\upm@lang@lastupdate@short{Updated}%
+ \gdef\upm@lang@document@summary{Document Summary}%
+ \gdef\upm@lang@status{Status}%
+ \gdef\upm@lang@document@authors{Authors}%
+ \gdef\upm@lang@document@informed{Informed People}%
+ \gdef\upm@lang@document@validators{Validators}%
+ \gdef\upm@lang@document@names{Names}%
+ \gdef\upm@lang@document@comments{Comments}%
+ \gdef\upm@lang@document@emails{Emails}%
+ \gdef\upm@lang@document@initials{Initials}%
+ \gdef\upm@lang@document@abstract{Abstract}%
+ \gdef\upm@lang@document@keywords{Key-words}%
+ \gdef\upm@lang@document@copyright@purpose{This document describes the \theupmproject\ project\Ifnotempty{\theupmsubproject}{ and its \theupmsubproject\ subproject}.}%
+ \gdef\upm@lang@document@copyright@tex{\TeX\ is a trademark of the American Mathematical Society.}%
+ \gdef\upm@lang@document@copyright@upmethodology{\texttt{tex-upmethodology} is owned by St\'ephane Galland, \arakhneorg, France.}%
+ \gdef\upm@lang@document@copyright@madewith{This document was realised with \LaTeX\ and \texttt{tex-upmethodology}.}%
+ \gdef\upm@lang@document@copyright@trademarks{This document is published by the \theupmformattedpublisher. All right reserved. No part of this publication may be reproduced, stored in a retreival system, or transmitted, in any form or by any means, electronic, mechanical, photocopying, recording, or otherwise, without the prior written permission of the publishers.}
+ \gdef\upm@lang@document@copyright@printedin{Printed in \theupmprintedin.}
+}
+\def\upm@document@lang@french{%
+ \gdef\upm@lang@@{\message{**** upmethodology-document is using French language ****}}%
+ \gdef\upmcurrentlang{french}%
+ \gdef\upmcurrentlangforbabel{frenchb}%
+ \gdef\upm@lang@project{Projet}%
+ \gdef\upm@lang@document{Document}%
+ \gdef\upm@lang@docref{R\'ef\'erence}%
+ \gdef\upm@lang@lastupdate{Derni\`ere modification}%
+ \gdef\upm@lang@lastupdate@short{Modifi\'e}%
+ \gdef\upm@lang@document@summary{Synoptique}%
+ \gdef\upm@lang@status{Statut}%
+ \gdef\upm@lang@document@authors{Auteurs}%
+ \gdef\upm@lang@document@comments{Commentaires}%
+ \gdef\upm@lang@document@informed{Pour information}%
+ \gdef\upm@lang@document@validators{Validateurs}%
+ \gdef\upm@lang@document@names{Noms}%
+ \gdef\upm@lang@document@emails{Emails}%
+ \gdef\upm@lang@document@initials{Initiales}%
+ \gdef\upm@lang@document@abstract{R\'esum\'e}%
+ \gdef\upm@lang@document@keywords{Mots-cl\'es}%
+ \gdef\upm@lang@document@copyright@purpose{Ce document d\'ecrit le projet \theupmproject\Ifnotempty{\theupmsubproject}{ et son sous-projet \theupmsubproject}.}%
+ \gdef\upm@lang@document@copyright@tex{\TeX\ et \LaTeX\ sont des marques de la Soci\'et\'e Am\'ericaine de Math\'ematiques.}%
+ \gdef\upm@lang@document@copyright@upmethodology{\texttt{tex-upmethodology} est la propri\'et\'e de St\'ephane Galland, \arakhneorg, France.}%
+ \gdef\upm@lang@document@copyright@madewith{Ce document a \'et\'e r\'ealis\'e avec \LaTeX\ et \texttt{tex-upmethodology}.}%
+ \gdef\upm@lang@document@copyright@trademarks{Ce document est publi\'e par \theupmformattedpublisher. Tous droits r\'eserv\'es. \par Le Code de la propri\'et\'e intellectuelle n'autorisant, aux termes de l'article L.122-5, 2\textdegree et 3\textdegree a), d'une part, que les ``copies ou reproductions strictement r\'eserv\'ees \`a l'usage priv\'e du copiste et non destin\'ees \`a une utilisation collective'' et, d'autre part, que les analyses et les courtes citations dans un but d'exemple et d'illustation, ``toute repr\'esentation ou reproduction int\'egrale ou partielle faite sans le consentement de l'auteur ou de ses ayants droit ou ayants cause est illicite'' (art. L.122-4). \par Cette repr\'esentation ou reproduction, par quelque proc\'ed\'e que ce soit, constiturait donc une contrefa\c{c}on sanctionn\'ee par les articles L.335-2 et suivants du Code de la propri\'et\'e intellectuelle.}
+ \gdef\upm@lang@document@copyright@printedin{Imprim\'e en \theupmprintedin.}
+
+}
+
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+ \upm@document@lang@french
+}
+\DeclareOption{francais}{%
+ \upm@document@lang@french
+}
+\DeclareOption{english}{%
+ \upm@document@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions
+
+{\upm@lang@@}
+
+\RequirePackage[\upmcurrentlangforbabel]{babel}
+\RequirePackage{vmargin}
+
+\RequirePackage{upmethodology-extension}
+\RequirePackage{upmethodology-fmt}
+\RequirePackage{upmethodology-version}
+
+%----------------------------------------
+% Ensure that frenchb (included by babel)
+% does not use compact versions of lists
+% in french mode.
+%----------------------------------------
+
+\newlength\listendskip
+\listendskip=\parskip
+\iflanguage{french}{%
+ \addto\extrasfrench{%
+ \let\upm@document@enditemizeFB\enditemizeFB%
+ \def\enditemizeFB{\upm@document@enditemizeFB\vspace{\listendskip}}%
+ \let\upm@document@enditemizeORI\enditemizeORI%
+ \def\enditemizeFB{\upm@document@enditemizeORI\vspace{\listendskip}}%
+ }%
+ \addto\noextrasfrench{%
+ \let\upm@document@enditemizeFB\enditemizeFB%
+ \def\enditemizeFB{\upm@document@enditemizeFB\vspace{\listendskip}}%
+ \let\upm@document@enditemizeORI\enditemizeORI%
+ \def\enditemizeFB{\upm@document@enditemizeORI\vspace{\listendskip}}%
+ }%
+}
+
+%----------------------------------------
+% DOCUMENT MANAGEMENT
+%----------------------------------------
+
+%-----
+% Declare a project's document
+%\declaredocument{project}{name}{ref}
+\newcommand{\declaredocument}[3]{%
+ \gdef\theupmproject{#1}%
+ \gdef\theupmsubproject{}%
+ \gdef\theupmdocname{#2}%
+ \gdef\theupmdocref{#3}%
+}
+
+%-----
+% Declare a project's document
+%\declaredocumentex{project}{subproject}{name}{ref}
+\newcommand{\declaredocumentex}[4]{%
+ \gdef\theupmproject{#1}%
+ \gdef\theupmsubproject{#2}%
+ \gdef\theupmdocname{#3}%
+ \gdef\theupmdocref{#4}%
+}
+
+%-----
+% Display the summary of the document
+%\upmdocumentsummary[width]
+\newcommand{\upmdocumentsummary}[1][\linewidth]{%
+ \noindent\begin{mtabular}[#1]{2}{|l|X|}%
+ \tabulartitle{\upm@lang@document@summary}%
+ \upm@lang@project & \theupmproject\Ifnotempty{\theupmsubproject}{ -- \theupmsubproject} \\
+ \upm@lang@document & \theupmdocname \\
+ \upm@lang@docref & \theupmdocref \\
+ \upm@lang@version & \theupmversion \\
+ \upm@lang@lastupdate & \theupmdate \\
+ \hline
+ \end{mtabular}\par\vspace{.5cm}%
+}
+
+%-----
+% Display the the document information on a page
+%\upmpublicationpage
+\newcommand{\upmdocinfopage}{
+ \thispagestyle{plain}
+ \upmdocumentsummary\upmdocumentauthors\upmdocumentvalidators\upmdocumentinformedpeople\vfill\upmhistory\clearpage%
+}
+
+%-----
+% Display the publication pag for the document
+%\upmpublicationpage
+\newcommand{\upmpublicationpage}{
+ \thispagestyle{empty}%
+ \upmpublicationminipage%
+}
+\newcommand{\upmpublicationminipage}{
+ \if@twoside\ifodd\c@page\clearpage\fi\fi%
+ \mbox{}\vfill\small%
+ \par\noindent
+ \upm@lang@document@copyright@purpose
+ \vspace{.5cm}
+ \par\noindent
+ \upm@lang@document@copyright@tex
+ \par\noindent
+ \upm@lang@document@copyright@upmethodology
+ \vspace{.5cm}
+ \par\noindent
+ \Get{trademarks}
+ \vspace{4cm}
+ \par\noindent
+ \upm@lang@document@copyright@madewith
+ \vspace{.15cm}
+ \par\noindent
+ Copyright~\copyright~\upmcopyrightdate~\theupmformattedcopyrighter.
+ \vspace{.15cm}
+ \par\noindent
+ \upm@lang@document@copyright@trademarks \Ifdefined{printed}{\upm@lang@document@copyright@printedin}
+ \vspace{.25cm}
+ \par\noindent
+ \upm@lang@docref~: \theupmdocref \\
+ \Ifnotempty{\theupmisbn}{ISBN~:~\theupmisbn\\}
+ \Ifnotempty{\theupmissn}{ISSN~:~\theupmissn\\}
+ \Ifnotempty{\theupmdoi}{DOI~:~\theupmdoi\\}
+ \clearpage%
+}
+
+%-----
+%Name of the project for which this document was written
+\def\theupmproject{Arakhn\^e Project}
+
+%-----
+%Name of the sub-project for which this document was written
+\def\theupmsubproject{}
+
+%-----
+%Name of the document
+\def\theupmdocname{Arakhn\^e Document}
+
+%-----
+%Reference of the document
+\def\theupmdocref{XXX}
+
+
+%-----
+%Name of the logo
+\newcommand{\theupmsmalldoclogo}{\Get{smalllogo}}
+\newcommand{\theupmdoclogo}{\Get{logo}}
+
+%-----
+% Define the name of the logo picture to use
+\newcommand{\defupmsmalllogo}[1]{\Set{smalllogo}{#1}}
+\newcommand{\defupmlogo}[1]{\Set{logo}{#1}}
+
+%-----
+%Full name of the document
+\def\theupmfulldocname{%
+ \theupmproject%
+ \Ifnotempty{\theupmsubproject}{/\theupmsubproject}%
+ \Ifnotempty{\theupmdocname}{ -- \theupmdocname}%
+}
+
+%-----
+% Declare a document's abstract
+%\setdocabstract[lang]{text}
+\newcommand{\setdocabstract}[2][\upmcurrentlang]{%
+ \ifthenelse{\equal{#1}{\upmcurrentlang}}{
+ \gdef\theupmdocabstract{#2}}{}%
+ \global\@namedef{theupmdocabstract#1}{#2}%
+}
+
+%-----
+% Declare a document's key-words
+%\setdockeywords[lang]{words}
+\newcommand{\setdockeywords}[2][\upmcurrentlang]{%
+ \ifthenelse{\equal{#1}{\upmcurrentlang}}{
+ \gdef\theupmdockeywords{#2}}{}%
+ \global\@namedef{theupmdockeywords#1}{#2}%
+}
+
+%-----
+%Abstract of the document
+\def\theupmdocabstract{}
+
+%-----
+%Key-words of the document
+\def\theupmdockeywords{}
+
+%----------------------------------------
+% AUTHOR MANAGEMENT
+%----------------------------------------
+
+\newif\ifupm@document@author@tab@hascomment
+\upm@document@author@tab@hascommentfalse
+\def\upm@document@author@tab{}
+\def\upm@document@author@tab@commented{}
+
+%-----
+\def\theauthorlist{}
+
+%-----
+\newif\ifupm@document@author@isauthor
+\gdef\upm@document@author@authornames{}
+\newcommand{\ifdocumentauthor}[3]{%
+ \upm@document@author@isauthorfalse%
+ \@for\upm@document@author@isauthor@tmp:=\upm@document@author@authornames\do{%
+ \ifupm@document@author@isauthor%
+ \else%
+ \ifthenelse{\equal{#1}{\upm@document@author@isauthor@tmp}}{%
+ \upm@document@author@isauthortrue%
+ }{}%
+ \fi%
+ }%
+ \ifupm@document@author@isauthor{#2}\else{#3}\fi%
+}
+
+%-----
+%Add an author
+%\addauthor[email]{firstname}{name}
+%\addauthor*[email]{firstname}{name}{comment}
+\def\addauthor{\@ifstar\upm@document@addauthorstar\upm@document@addauthor}
+\newcommand{\upm@document@addauthor}[3][]{%
+ \lowercase{\xdef\upm@document@author@authornames{#3,\upm@document@author@authornames}}%
+ \protected@xdef\theauthorlist{\theauthorlist\protect\Ifnotempty{\theauthorlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+ \global\protected@edef\upm@document@author@tab@commented{\upm@document@author@tab@commented \protect\upmmakename{#2}{#3}{~} &
+ & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+
+ \ifupm@document@author@tab@hascomment\else
+ \global\protected@edef\upm@document@author@tab{\upm@document@author@tab \protect\upmmakename{#2}{#3}{~} &
+ \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+ \fi
+}
+\newcommand{\upm@document@addauthorstar}[4][]{%
+ \lowercase{\xdef\upm@document@author@authornames{#3,\upm@document@author@authornames}}%
+ \global\protected@edef\theauthorlist{\theauthorlist\protect\Ifnotempty{\theauthorlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+ \global\let\upm@document@author@tab\relax
+
+ \global\protected@edef\upm@document@author@tab@commented{\upm@document@author@tab@commented \protect\upmmakename{#2}{#3}{~} &
+ #4 & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+
+ \upm@document@author@tab@hascommenttrue
+}
+
+%-----
+% Display the summary of the authors
+%\upmdocumentauthors[width]
+\newcommand{\upmdocumentauthors}[1][\linewidth]{%
+ \ifupm@document@author@tab@hascomment%
+ \Ifnotempty{\upm@document@author@tab@commented}{%
+ \noindent\expandafter\begin{mtabular}[#1]{3}{|X|l|c|}%
+ \tabulartitle{\upm@lang@document@authors}%
+ \tabularheader{\upm@lang@document@names}{\upm@lang@document@comments}{\upm@lang@document@emails}%
+ \upm@document@author@tab@commented
+ \hline%
+ \expandafter\end{mtabular}\par\vspace{.5cm}}%
+ \else%
+ \Ifnotempty{\upm@document@author@tab}{%
+ \noindent\expandafter\begin{mtabular}[#1]{2}{|X|c|}%
+ \tabulartitle{\upm@lang@document@authors}%
+ \tabularheader{\upm@lang@document@names}{\upm@lang@document@emails}%
+ \upm@document@author@tab
+ \hline%
+ \expandafter\end{mtabular}\par\vspace{.5cm}}%
+ \fi%
+}
+
+%----------------------------------------
+% VALIDATOR MANAGEMENT
+%----------------------------------------
+
+\newif\ifupm@document@validator@tab@hascomment
+\upm@document@validator@tab@hascommentfalse
+\def\upm@document@validator@tab{}
+\def\upm@document@validator@tab@commented{}
+
+%-----
+\def\thevalidatorlist{}
+
+%-----
+%Add a validator
+%\addvalidator[email]{firstname}{name}
+%\addvalidator*[email]{firstname}{name}{comment}
+\def\addvalidator{\@ifstar\upm@document@addvalidatorstar\upm@document@addvalidator}
+\newcommand{\upm@document@addvalidator}[3][]{%
+ \global\protected@edef\thevalidatorlist{\thevalidatorlist\protect\Ifnotempty{\thevalidatorlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+ \global\protected@edef\upm@document@validator@tab@commented{\upm@document@validator@tab@commented \protect\upmmakename{#2}{#3}{~} &
+ & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} & \protect\\}
+
+ \ifupm@document@validator@tab@hascomment\else
+ \global\protected@edef\upm@document@validator@tab{\upm@document@validator@tab \protect\upmmakename{#2}{#3}{~} &
+ \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} & \protect\\}
+ \fi
+}
+\newcommand{\upm@document@addvalidatorstar}[4][]{%
+ \global\protected@edef\thevalidatorlist{\thevalidatorlist\protect\Ifnotempty{\thevalidatorlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+ \global\let\upm@document@validator@tab\relax
+
+ \global\protected@edef\upm@document@validator@tab@commented{\upm@document@validator@tab@commented \protect\upmmakename{#2}{#3}{~} &
+ #4 & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} & \protect\\}
+
+ \upm@document@validator@tab@hascommenttrue
+}
+
+%-----
+% Display the summary of the validators
+%\upmdocumentvalidators[width]
+\newcommand{\upmdocumentvalidators}[1][\linewidth]{%
+ \ifupm@document@validator@tab@hascomment%
+ \Ifnotempty{\upm@document@validator@tab@commented}{%
+ \noindent\expandafter\begin{mtabular}[#1]{4}{|X|l|c|p{3cm}|}%
+ \tabulartitle{\upm@lang@document@validators}%
+ \tabularheader{\upm@lang@document@names}{\upm@lang@document@comments}{\upm@lang@document@emails}{\upm@lang@document@initials}%
+ \upm@document@validator@tab@commented
+ \hline%
+ \expandafter\end{mtabular}\par\vspace{.5cm}}%
+ \else%
+ \Ifnotempty{\upm@document@validator@tab}{%
+ \noindent\expandafter\begin{mtabular}[#1]{3}{|X|c|p{3cm}|}%
+ \tabulartitle{\upm@lang@document@validators}%
+ \tabularheader{\upm@lang@document@names}{\upm@lang@document@emails}{\upm@lang@document@initials}%
+ \upm@document@validator@tab
+ \hline%
+ \expandafter\end{mtabular}\par\vspace{.5cm}}%
+ \fi%
+}
+
+
+%-----
+%Add an author/validator
+%\addauthorvalidator[email]{firstname}{name}
+%\addauthorvalidator*[email]{firstname}{name}{comment}
+\def\addauthorvalidator{\@ifstar\upm@document@addauthorvalidatorstar\upm@document@addauthorvalidator}
+\newcommand{\upm@document@addauthorvalidator}[3][]{%
+ \addauthor[#1]{#2}{#3}\addvalidator[#1]{#2}{#3}%
+}
+\newcommand{\upm@document@addauthorvalidatorstar}[4][]{%
+ \addauthor*[#1]{#2}{#3}{#4}\addvalidator*[#1]{#2}{#3}{#4}%
+}
+
+%----------------------------------------
+% INFORMED MANAGEMENT
+%----------------------------------------
+
+\newif\ifupm@document@informed@tab@hascomment
+\upm@document@informed@tab@hascommentfalse
+\def\upm@document@informed@tab{}
+\def\upm@document@informed@tab@commented{}
+
+%-----
+\def\theinformedlist{}
+
+%-----
+%Add an informed
+%\addinformed[email]{firstname}{name}
+%\addinformed*[email]{firstname}{name}{comment}
+\def\addinformed{\@ifstar\upm@document@addinformedstar\upm@document@addinformed}
+\newcommand{\upm@document@addinformed}[3][]{%
+ \global\protected@edef\theinformedlist{\theinformedlist\protect\Ifnotempty{\theinformedlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+ \global\protected@edef\upm@document@informed@tab@commented{\upm@document@informed@tab@commented \protect\upmmakename{#2}{#3}{~} &
+ & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+
+ \ifupm@document@informed@tab@hascomment\else
+ \global\protected@edef\upm@document@informed@tab{\upm@document@informed@tab \protect\upmmakename{#2}{#3}{~} &
+ \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+ \fi
+}
+\newcommand{\upm@document@addinformedstar}[4][]{%
+ \global\protected@edef\theinformedlist{\theinformedlist\protect\Ifnotempty{\theinformedlist}{,} \protect\upmmakename{#2}{#3}{~}}
+
+ \global\let\upm@document@informed@tab\relax
+
+ \global\protected@edef\upm@document@informed@tab@commented{\upm@document@informed@tab@commented \protect\upmmakename{#2}{#3}{~} &
+ #4 & \protect\Ifnotempty{#1}{\protect\href{mailto:#1}{#1}} \protect\\}
+
+ \upm@document@informed@tab@hascommenttrue
+}
+
+%-----
+% Display the summary of the informed people
+%\upmdocumentinformedpeople[width]
+\newcommand{\upmdocumentinformedpeople}[1][\linewidth]{%
+ \ifupm@document@validator@tab@hascomment%
+ \Ifnotempty{\upm@document@informed@tab@commented}{%
+ \noindent\expandafter\begin{mtabular}[#1]{3}{|X|l|c|}%
+ \tabulartitle{\upm@lang@document@informed}%
+ \tabularheader{\upm@lang@document@names}{\upm@lang@document@comments}{\upm@lang@document@emails}%
+ \upm@document@informed@tab@commented
+ \hline%
+ \expandafter\end{mtabular}\par\vspace{.5cm}}%
+ \else%
+ \Ifnotempty{\upm@document@informed@tab}{%
+ \noindent\expandafter\begin{mtabular}[#1]{2}{|X|c|}%
+ \tabulartitle{\upm@lang@document@informed}%
+ \tabularheader{\upm@lang@document@names}{\upm@lang@document@emails}%
+ \upm@document@informed@tab
+ \hline%
+ \expandafter\end{mtabular}\par\vspace{.5cm}}%
+ \fi%
+}
+
+%----------------------------------------
+% PUBLISHER, COPYRIGHT, PRINTING...
+%----------------------------------------
+
+\gdef\theupmcopyrighter{\Get{copyrighter}}
+\gdef\theupmpublisher{\Get{publisher}}
+\gdef\theupmprintedin{\Get{printedin}}
+\gdef\theupmisbn{}
+\gdef\theupmissn{}
+\gdef\theupmdoi{}
+\gdef\theupmpublishingdate{}
+
+\newcommand{\theupmformattedpublisher}{\Ifelsedefined{publisher}{\theupmpublisher}{\textcolor{red}{???}}}
+\newcommand{\theupmformattedcopyrighter}{\Ifelsedefined{copyrighter}{\theupmcopyrighter}{\textcolor{red}{???}}}
+
+%-----
+%Set the publisher identity
+%\setpublisher{name}
+\newcommand{\setpublisher}[1]{\Set{publisher}{#1}}
+
+%-----
+%Set the copyrighter identity
+%\setcopyrighter{name}
+\newcommand{\setcopyrighter}[1]{\Set{copyrighter}{#1}}
+
+%-----
+%Set the address where this document is printed
+%\setprintingaddress{address}
+\newcommand{\setprintingaddress}[1]{\Set{printedin}{#1}}
+
+%-----
+%Set the ISBN
+%\setisbn{isbn}
+\newcommand{\setisbn}[1]{%
+ \gdef\theupmisbn{#1}%
+}
+
+%-----
+%Set the ISSN
+%\setisbn{issn}
+\newcommand{\setissn}[1]{%
+ \gdef\theupmissn{#1}%
+}
+
+%-----
+%Set the DOI
+%\setdoi{doi}
+\newcommand{\setdoi}[1]{%
+ \gdef\theupmdoi{#1}%
+}
+
+%----------------------------------------
+% WATERMARK
+%----------------------------------------
+
+\AtBeginDocument{
+ \ifthenelse{\equal{\theupmstatus}{\upmrestricted}}{
+ \edef\upm@doc@tmp@watermark{\uppercase{\upm@lang@restricted}}
+ \RequirePackage{draftwatermark}
+ \SetWatermarkText{\upm@doc@tmp@watermark}
+ \SetWatermarkScale{\Get{watermarksize}}
+ }{}
+}
+
+\endinput
--- /dev/null
+% Package for Unified Process Methodology's extensions
+%
+% Copyright (c) 2006-2009 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+% Creation date: 2009-10-24
+% Modifications:
+% 2012-09-21 "(c)" -> "\copyright"
+% 2009-11-03 \If* are marked as \long.
+% 2006-10-30 Bug fix: provides "upmethodology-extension" insteed of "upmethodology-document".
+% 2006-10-29 Allow to override the default font.
+% 2006-10-27 Clean the API
+%
+
+\global\edef\upm@package@ext@ver{2012/09/21}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-extension}[\upm@package@ext@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%----------------------------------------
+% TEST MACROS
+%----------------------------------------
+\long\def\Ifdefined#1#2{\@ifundefined{upmext@extension@value@#1}{}{#2}}
+\long\def\Ifelsedefined#1#2#3{\@ifundefined{upmext@extension@value@#1}{#3}{#2}}
+\long\def\Ifundefined#1#2{\@ifundefined{upmext@extension@value@#1}{#2}{}}
+\long\def\Ifelseundefined#1#2#3{\@ifundefined{upmext@extension@value@#1}{#2}{#3}}
+
+%----------------------------------------
+% EXTENSION MANAGEMENT
+%----------------------------------------
+
+\newif\ifupm@extension@savealllang\upm@extension@savealllangfalse
+
+\newcommand{\Get}[1]{\@nameuse{upmext@extension@value@#1}}
+\newcommand{\GetLang}[2]{\@nameuse{upmext@extension@value@#1@#2}}
+
+\newcommand{\upm@extension@Set}[3][\upmcurrentlang]{%
+ % PREDEFINED FRONT PAGE
+ \ifthenelse{\equal{#2}{frontpage}}{%
+ \gdef\upmext@extension@value@frontpage{#3}%
+ \global\let\upmext@extension@value@frontpage@custom\relax%
+ }{%
+ % CUSTOM BACK PAGE
+ \ifthenelse{\equal{#2}{backpage}}{%
+ \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+ \gdef\upmext@extension@value@backpage{#3}%
+ }{}%
+ }{%
+ % CUSTOM FRONT PAGE
+ \ifthenelse{\equal{#2}{cfrontpage}}{%
+ \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+ \gdef\upmext@extension@value@frontpage{custom}%
+ \gdef\upmext@extension@value@frontpage@custom{#3}%
+ }{}%
+ }{%
+ \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+ \message{*** define extension value #2 ****}%
+ \global\@namedef{upmext@extension@value@#2}{#3}%
+ }{}%
+ \ifupm@extension@savealllang%
+ \global\@namedef{upmext@extension@value@#2@#1}{#3}%
+ \fi
+ }}}%
+}
+\let\Set\upm@extension@Set
+
+\newcommand{\Unset}[2][\upmcurrentlang]{%
+ \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+ \message{*** undefine extension value #2 ****}%
+ \global\expandafter\let\csname upmext@extension@value@#2\endcsname\@undefined%
+ \ifupm@extension@savealllang%
+ \global\expandafter\let\csname upmext@extension@value@#2@#1\endcsname\@undefined%
+ \fi%
+ }{}%
+}
+
+\newcommand{\DeclareCopyright}[5][\upmcurrentlang]{%
+ \ifthenelse{\equal{\upmcurrentlang}{#1}}{%
+ \Set{copyright}{Copyright {(c)} #3 #4.}%
+ \message{*** style extension #2, \Get{copyright} ****}%
+ \Set{trademarks}{#5}%
+ }{}%
+}
+
+\newlength{\upmext@tmp@putx}
+\def\Put(#1,#2){%
+ \setlength{\upmext@tmp@putx}{#1\unitlength}%
+ \if@twoside\ifodd\c@page\else\addtolength{\upmext@tmp@putx}{28\unitlength}\fi\fi%
+ \put(\strip@pt\upmext@tmp@putx,#2)}
+
+%-----
+% Use the specified extension
+%\UseExtension{extension_name}
+\newcommand{\UseExtension}[1]{%
+ \message{**** including upm extension #1 (upmext-#1.cfg) ****}%
+ \input{upmext-#1.cfg}%
+}
+
+%------------
+% Default declarations
+\Set{frontillustrationsize}{1}
+\Set{watermarksize}{1}
+\Unset{publisher}
+\Unset{copyrighter}
+\Unset{printedin}
+
+\endinput
--- /dev/null
+% Layout and Pagraph Format for Unified Process Methodology
+%
+% Copyright (c) 2006-2009, 2012-2014 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+
+\global\edef\upm@package@fmt@ver{2015/02/27}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-fmt}[\upm@package@fmt@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+\gdef\upm@fmt@force@single@spacing#1{{\begin{singlespace}#1\end{singlespace}}}
+\gdef\upm@date@head#1/#2\@nil{#1}
+\gdef\upm@date@tail#1/#2\@nil{#2}
+\gdef\upm@date@first#1{{\expandafter\upm@date@head#1\expandafter\@nil}}
+\gdef\upm@date@second#1{{\expandafter\expandafter\expandafter\upm@date@head\expandafter\upm@date@tail#1\expandafter\@nil\expandafter\expandafter\expandafter\@nil}}
+\gdef\upm@date@third#1{{\expandafter\expandafter\expandafter\upm@date@tail\expandafter\upm@date@tail#1\expandafter\@nil\expandafter\expandafter\expandafter\@nil}}
+
+\newif\ifupm@use@override@standard@lists
+\global\upm@use@override@standard@liststrue
+
+%----------------------------------------
+% LOCALES
+%----------------------------------------
+\global\let\upm@format@lang@extractyear\upm@date@first%
+\def\upm@format@lang@english{%
+ \gdef\upm@lang@@{\message{**** upmethodology-fmt is using English language ****}}%
+ \global\renewcommand{\upm@format@lang@makedate}[3]{##3\string/\two@digits{##2}\string/\two@digits{##1}}%
+ \global\let\upm@format@lang@extractyear\upm@date@first%
+ \global\let\upm@format@lang@extractmonth\upm@date@second%
+ \gdef\upm@format@lang@professor{Pr.}%
+ \gdef\upm@format@lang@doctor{Dr.}%
+ \gdef\upm@format@lang@phdoctor{Ph.D.}%
+ \gdef\upm@format@lang@scdoctor{Sc.D.}%
+ \gdef\upm@format@lang@mdoctor{M.D.}%
+ \gdef\upm@format@lang@professionalengineer{CEng.}%
+ \gdef\upm@format@lang@incorporatedengineer{IEng.}%
+}
+\def\upm@format@lang@french{%
+ \gdef\upm@lang@@{\message{**** upmethodology-fmt is using French language ****}}%
+ \global\renewcommand{\upm@format@lang@makedate}[3]{\two@digits{##1}\string/\two@digits{##2}\string/##3}%
+ \global\let\upm@format@lang@extractyear\upm@date@third%
+ \global\let\upm@format@lang@extractmonth\upm@date@second%
+ \global\let\upm@format@lang@extractday\upm@date@first%
+ \gdef\upm@format@lang@professor{Pr.}%
+ \gdef\upm@format@lang@doctor{Dr.}%
+ \gdef\upm@format@lang@phdoctor{Ph.D.}%
+ \gdef\upm@format@lang@scdoctor{Sc.D.}%
+ \gdef\upm@format@lang@mdoctor{M.D.}%
+ \gdef\upm@format@lang@professionalengineer{Ing.}%
+ \gdef\upm@format@lang@incorporatedengineer{Ing.}%
+}
+\global\providecommand{\upm@format@lang@makedate}[3]{}%
+
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+ \upm@format@lang@french
+ \PassOptionsToPackage{french}{varioref}
+}
+\DeclareOption{francais}{%
+ \upm@format@lang@french
+ \PassOptionsToPackage{french}{varioref}
+}
+\DeclareOption{english}{%
+ \upm@format@lang@english
+ \PassOptionsToPackage{english}{varioref}
+}
+\DeclareOption{standardlists}{%
+ \global\upm@use@override@standard@listsfalse
+}
+\ExecuteOptions{english}
+\ProcessOptions
+\upm@lang@@
+
+
+\RequirePackage{graphicx}
+\RequirePackage{subfigure}
+\RequirePackage{tabularx}
+\RequirePackage{multicol}
+\RequirePackage{colortbl}
+\RequirePackage{picinpar}
+\RequirePackage{amsmath}
+\RequirePackage{amsthm}
+\RequirePackage{thmtools}
+\RequirePackage{pifont}
+\RequirePackage{setspace}
+\RequirePackage{varioref}
+\RequirePackage{txfonts}
+\RequirePackage{relsize}
+\RequirePackage{xkeyval}
+\RequirePackage{hyphenat}
+\RequirePackage{bbm}
+\RequirePackage{environ}% for advanced environment declaration
+
+%----------------------------------------
+% Exponent and indice
+%----------------------------------------
+% Exponent
+%\newcommand{\textsup}[1]{\ensuremath{^{\text{#1}}}\xspace}
+\newcommand{\textsup}[1]{\upm@textsuperscript{#1}\xspace}
+% Indice
+%\newcommand{\textsub}[1]{\ensuremath{_{\text{#1}}}\xspace}
+\newcommand{\textsub}[1]{\upm@textsubscript{#1}\xspace}
+
+%----------------------------------------
+% Major Emphazing
+%----------------------------------------
+\newcommand{\Emph}[1]{\textbf{#1}\xspace}
+
+%----------------------------------------
+% SYMBOLS
+%----------------------------------------
+\renewcommand{\copyright}{\Pisymbol{psy}{211}\xspace}
+\newcommand{\trademark}{\Pisymbol{psy}{228}\xspace}
+\newcommand{\regmark}{\Pisymbol{psy}{226}\xspace}
+\newcommand{\smalltrade}{{\tiny\trademark}\xspace}
+\newcommand{\smallreg}{{\tiny\regmark}\xspace}
+\newcommand{\smallcopy}{{\tiny\copyright}\xspace}
+\newcommand{\ust}{\textsup{st}}
+\newcommand{\und}{\textsup{nd}}
+\newcommand{\urd}{\textsup{rd}}
+\newcommand{\uth}{\textsup{th}}
+
+%----------------------------------------
+% MATH SYMBOLS
+%----------------------------------------
+\newcommand{\R}{\ensuremath{\mathbb{R}}}
+\newcommand{\N}{\ensuremath{\mathbb{N}}}
+\newcommand{\Z}{\ensuremath{\mathbb{Z}}}
+\newcommand{\C}{\ensuremath{\mathbb{C}}}
+\newcommand{\Q}{\ensuremath{\mathbb{Q}}}
+\newcommand{\powerset}{\ensuremath{\mathcal{P}}}
+
+\DeclareMathOperator{\sgn}{sgn}
+
+%----------------------------------------
+% DEFAULT GRAPHICX CONFIGURATION
+%----------------------------------------
+
+\ifpdf
+ \DeclareGraphicsExtensions{.pdf,.png,.jpg,.jpeg,.gif}
+\else
+ \DeclareGraphicsExtensions{.eps,.png,.jpg,.jpeg,.gif}
+\fi
+\graphicspath{{./}}
+
+%----------------------------------------
+% FIGURES
+%----------------------------------------
+
+\newcommand{\upm@mfigure}[5][ht]{
+ \begin{figure}[#1]%
+ \begin{center}%
+ \includegraphics[#2]{#3}%
+ \caption{#4}%
+ \label{fig:#5}%
+ \end{center}%
+ \end{figure}%
+}
+\newcommand{\upm@mfigurestar}[5][ht]{
+ \begin{figure*}[#1]%
+ \begin{center}%
+ \includegraphics[#2]{#3}%
+ \caption{#4}%
+ \label{fig:#5}%
+ \end{center}%
+ \end{figure*}%
+}
+%-----
+%\mfigure[position]{options}{filename}{caption}{label}
+\def\mfigure{\@ifstar\upm@mfigurestar\upm@mfigure}
+%-----
+%\figref{label}
+\newcommand{\figref}[1]{\ref{fig:#1}}
+%-----
+%\figpageref{label}
+\newcommand{\figpageref}[1]{\pageref{fig:#1}}
+
+%-----
+% Multi-figures
+
+\newcounter{upm@subfigure@count}
+
+\newcommand{\upm@beginsubfigure}[4]{
+ \let\upm@mfiguresaved\mfigure
+ %options,filename,caption,label
+ \renewcommand{\mfigure}[5][]{
+ \xdef\upm@tmp@subfigure@label{\alph{upm@subfigure@count}}%
+ \subfigure[##4]{%
+ \includegraphics[##2]{##3}%
+ \label{fig:##5}%
+ \label{fig:#4:\upm@tmp@subfigure@label}%
+ }%
+ \addtocounter{upm@subfigure@count}{1}%
+ }
+ %options,filename,caption
+ \newcommand{\msubfigure}[3]{
+ \xdef\upm@tmp@subfigure@label{\alph{upm@subfigure@count}}%
+ \subfigure[##3]{%
+ \includegraphics[##1]{##2}%
+ \label{fig:#4:\upm@tmp@subfigure@label}%
+ }%
+ \addtocounter{upm@subfigure@count}{1}%
+ }
+ \setcounter{upm@subfigure@count}{1}
+ \gdef\upm@mfigurescaption{#3}%
+ \gdef\upm@mfigureslabel{fig:#4}%
+ \begin{#1}[#2]\centering %
+}
+
+\newcommand{\upm@endsubfigure}[1]{
+ \caption{\upm@mfigurescaption}%
+ \label{\upm@mfigureslabel}%
+ \end{#1}%
+ \let\mfigure\upm@mfiguresaved
+}
+
+%-----
+%\mfigures[position]{caption}{label}
+\newenvironment{mfigures}[3][ht]{
+ \upm@beginsubfigure{figure}{#1}{#2}{#3}%
+}{%
+ \upm@endsubfigure{figure}%
+}
+%-----
+%\mfigures*[position]{caption}{label}
+\newenvironment{mfigures*}[3][ht]{
+ \upm@beginsubfigure{figure*}{#1}{#2}{#3}%
+}{%
+ \upm@endsubfigure{figure*}%
+}
+
+%----------------------------------------
+% IMAGES INCLUDING TeX EXPRESSIONS
+%----------------------------------------
+
+%
+% This section is copied from the AutoLaTeX package
+% http://www.arakhne.org/autolatex
+%
+
+%-----
+%\DeclareGraphicsExtensionsWtex{coma separated extensions}
+\providecommand{\DeclareGraphicsExtensionsWtex}[1]{%
+ \xdef\@autolatex@wtfig@extensions{\zap@space#1 \@empty}%
+}
+\ifpdf
+ \DeclareGraphicsExtensionsWtex{.pdftex_t,.pdf_tex}
+\else
+ \DeclareGraphicsExtensionsWtex{.pstex_t,.ps_tex}
+\fi
+
+\providecommand{\@autolatex@wtfig@searchinpath}[1]{%
+ \IfFileExists{#1}{%
+ \protected@edef\@autolatex@wtfig@tmp{\protect\resizebox{\@autolatex@wtfig@width}{\@autolatex@wtfig@height}{\protect\input{#1}}}%
+ }{%
+ \@for\@autolatex@wtfig@pathtmp:=\Ginput@path\do{%
+ \ifx\@autolatex@wtfig@tmp\relax%
+ \IfFileExists{\@autolatex@wtfig@pathtmp#1}{%
+ \protected@edef\@autolatex@wtfig@tmp{\protect\resizebox{\@autolatex@wtfig@width}{\@autolatex@wtfig@height}{\protect\input{\@autolatex@wtfig@pathtmp#1}}}%
+ }{}%
+ \fi%
+ }%
+ }%
+}
+
+\define@key[autolatex]{withtex}{width}{%
+ \gdef\@autolatex@wtfig@width{#1}%
+}
+\define@key[autolatex]{withtex}{height}{%
+ \gdef\@autolatex@wtfig@height{#1}%
+}
+
+%-----
+%\includefigurewtex[width=xx,height=yy]{filename}
+\providecommand{\includefigurewtex}[2][width=\linewidth]{%
+ \begingroup%
+ \gdef\@autolatex@wtfig@width{!}%
+ \gdef\@autolatex@wtfig@height{!}%
+ \setkeys[autolatex]{withtex}{#1}%
+ %
+ \global\let\@autolatex@wtfig@tmp\relax%
+ \global\let\@autolatex@wtfig@ext\relax%
+ \global\let\@autolatex@wtfig@path\relax%
+ \filename@parse{#2}%
+ \ifx\filename@ext\relax%
+ \@for\@autolatex@wtfig@exttmp:=\@autolatex@wtfig@extensions\do{%
+ \@autolatex@wtfig@searchinpath{#2\@autolatex@wtfig@exttmp}%
+ }%
+ \else%
+ \@autolatex@wtfig@searchinpath{#2\@autolatex@wtfig@exttmp}%
+ \fi%
+ %
+ \ifx\@autolatex@wtfig@tmp\relax%
+ \errmessage{Package upmethodology-fmt: File not found '#2', needed for figure inclusion}%
+ \else%
+ \@autolatex@wtfig@tmp%
+ \fi%
+ %
+ \endgroup%
+}
+
+\global\let\includegraphicswtex\includefigurewtex
+
+%----------------------------------------
+% ENVIRONMENT FOR IMAGES INCLUDING TeX EXPRESSIONS
+%----------------------------------------
+
+\gdef\upm@figtex@dyncaption@remove{}
+\gdef\upm@figtex@figremove#1{%
+ \global\expandafter\let\csname FIG#1\endcsname\relax%
+}
+\gdef\upm@figtex@restore{%
+ \upm@figtex@dyncaption@remove%
+ \gdef\upm@figtex@dyncaption@remove{}
+}
+%-----
+%\figmath{id}{content}
+\def\figmath#1#2{%
+ \expandafter\gdef\csname FIG#1\endcsname{\ensuremath{#2}}%
+ \global\protected@edef\upm@figtex@dyncaption@remove{\upm@figtex@dyncaption@remove\protect\upm@figtex@figremove{#1}}%
+}
+%-----
+%\figtext{id}{content}
+\def\figtext#1#2{%
+ \expandafter\gdef\csname FIG#1\endcsname{#2}%
+ \global\protected@edef\upm@figtex@dyncaption@remove{\upm@figtex@dyncaption@remove\protect\upm@figtex@figremove{#1}}%
+}
+
+\let\upm@fmt@figtex@nil\@nil
+\def\upm@fmt@figtex@parseparams#1=#2\upm@fmt@figtex@nil{\gdef\@tmp{#2}}
+
+\newcommand{\upm@mfigurewtex}[5][ht]{
+ \begin{figure}[#1]%
+ \begin{center}%
+ % Providing an ascendent compatibility on the second parameter:
+ % - Prefered value of the parameter: a list of key/value pairs;
+ % - Old fashion value of the parameter: the value for the "width" key.
+ {\upm@fmt@figtex@parseparams #2====\upm@fmt@figtex@nil}%
+ \ifthenelse{\equal{\@tmp}{===}}{%
+ \includegraphicswtex[width=#2]{#3}%
+ }{%
+ \includegraphicswtex[#2]{#3}%
+ }%
+ \caption{#4}%
+ \label{fig:#5}%
+ \end{center}%
+ \end{figure}%
+ \upm@figtex@restore%
+}
+\newcommand{\upm@mfigurewtexstar}[5][ht]{
+ \begin{figure*}[#1]%
+ \begin{center}%
+ % Providing an ascendent compatibility on the second parameter:
+ % - Prefered value of the parameter: a list of key/value pairs;
+ % - Old fashion value of the parameter: the value for the "width" key.
+ {\upm@fmt@figtex@parseparams #2====\upm@fmt@figtex@nil}%
+ \ifthenelse{\equal{\@tmp}{===}}{%
+ \includegraphicswtex[width=#2]{#3}%
+ }{%
+ \includegraphicswtex[#2]{#3}%
+ }%
+ \caption{#4}%
+ \label{fig:#5}%
+ \end{center}%
+ \end{figure*}%
+ \upm@figtex@restore%
+}
+%-----
+%\mfigurewtex[position]{options}{filename}{caption}{label}
+\def\mfigurewtex{\@ifstar\upm@mfigurewtexstar\upm@mfigurewtex}
+
+
+
+%----------------------------------------
+% TABLES
+%----------------------------------------
+
+%table's colors
+\definecolor{backtableheader}{rgb}{0.92,0.94,1}
+\definecolor{fronttableheader}{rgb}{0.23,0.33,0.48}
+%title of a table
+\def\upm@fmt@table@title#1{\color{fronttableheader} \cellcolor{backtableheader} {\bfseries #1}}
+%title of columns
+\def\upm@fmt@table@column@title#1{\hfil{\color{fronttableheader} \cellcolor{backtableheader} {\itshape#1}}\hfil}
+
+% Utility functions for mtabular
+\newcounter{upm@fmt@mtabular@columnnumber}
+
+\gdef\upm@fmt@mtabular@expandtitle#1#2{%
+ \multicolumn{#1}{|c|}{\upm@fmt@table@title{\ignorespaces#2\ignorespaces}}%
+}
+
+\newcommand{\tabulartitlespec}[1]{%
+ \gdef\upm@fmt@mtabular@expandtitle##1##2{%
+ \multicolumn{##1}{#1}{\upm@fmt@table@title{\ignorespaces##2\ignorespaces}}%
+ }
+}
+
+%-----
+%\mtabular[width]{ncolumns}{columns}
+\newenvironment{mtabular}[3][\linewidth]{%
+ \newcommand{\tabulartitle}[1]{%
+ \hline%
+ \upm@fmt@mtabular@expandtitle{#2}{##1} \\%
+ \hline%
+ }%
+ \newcommand{\tabulartitleinside}[1]{%
+ \hline\hline%
+ \upm@fmt@mtabular@expandtitle{#2}{##1} \\%
+ \hline%
+ }%
+ \newcommand*{\upm@fmt@mtabular@column@next}[1]{%
+ & \upm@fmt@table@column@title{\ignorespaces##1\ignorespaces}%
+ \addtocounter{upm@fmt@mtabular@columnnumber}{-1}%
+ \ifnum0<\value{upm@fmt@mtabular@columnnumber}%
+ \let\upm@fmt@mtabular@column@continue\upm@fmt@mtabular@column@next%
+ \else%
+ \\ \hline \let\upm@fmt@mtabular@column@continue\relax%
+ \fi%
+ \upm@fmt@mtabular@column@continue%
+ }
+ \newcommand*{\upm@fmt@mtabular@column@first}[1]{%
+ \upm@fmt@table@column@title{\ignorespaces##1\ignorespaces}%
+ \addtocounter{upm@fmt@mtabular@columnnumber}{-1}%
+ \ifnum0<\value{upm@fmt@mtabular@columnnumber}%
+ \let\upm@fmt@mtabular@column@continue\upm@fmt@mtabular@column@next%
+ \else%
+ \\ \hline \let\upm@fmt@mtabular@column@continue\relax%
+ \fi%
+ \upm@fmt@mtabular@column@continue%
+ }
+ \newcommand{\tabularheader}{%
+ \setcounter{upm@fmt@mtabular@columnnumber}{#2}%
+ \upm@fmt@mtabular@column@first%
+ }%
+ \newcommand{\tabularrowheader}[1]{%
+ \centering\upm@fmt@table@column@title{\ignorespaces##1}%
+ }%
+ \begingroup\tabularx{#1}{#3}%
+}{%
+ \endtabularx\endgroup%
+}
+
+%-----
+%\mtable[options]{width}{ncolumns}{columns}{caption}{label}
+% size=<length>
+\define@key[autolatex]{mtable}{size}{\gdef\@autolatex@mtable@size{#1}}
+% position: h t b p H !
+\define@key[autolatex]{mtable}{h}[\relax]{\gdef\@autolatex@mtable@position{h}}
+\define@key[autolatex]{mtable}{t}[\relax]{\gdef\@autolatex@mtable@position{t}}
+\define@key[autolatex]{mtable}{b}[\relax]{\gdef\@autolatex@mtable@position{b}}
+\define@key[autolatex]{mtable}{p}[\relax]{\gdef\@autolatex@mtable@position{p}}
+\define@key[autolatex]{mtable}{H}[\relax]{\gdef\@autolatex@mtable@position{H}}
+\define@key[autolatex]{mtable}{ht}[\relax]{\gdef\@autolatex@mtable@position{ht}}
+\define@key[autolatex]{mtable}{hb}[\relax]{\gdef\@autolatex@mtable@position{hb}}
+\define@key[autolatex]{mtable}{hp}[\relax]{\gdef\@autolatex@mtable@position{hp}}
+\define@key[autolatex]{mtable}{hH}[\relax]{\gdef\@autolatex@mtable@position{hH}}
+\define@key[autolatex]{mtable}{h!}[\relax]{\gdef\@autolatex@mtable@position{h!}}
+\define@key[autolatex]{mtable}{tb}[\relax]{\gdef\@autolatex@mtable@position{tb}}
+\define@key[autolatex]{mtable}{tp}[\relax]{\gdef\@autolatex@mtable@position{tp}}
+\define@key[autolatex]{mtable}{tH}[\relax]{\gdef\@autolatex@mtable@position{tH}}
+\define@key[autolatex]{mtable}{t!}[\relax]{\gdef\@autolatex@mtable@position{t!}}
+\define@key[autolatex]{mtable}{bp}[\relax]{\gdef\@autolatex@mtable@position{bp}}
+\define@key[autolatex]{mtable}{bH}[\relax]{\gdef\@autolatex@mtable@position{bH}}
+\define@key[autolatex]{mtable}{b!}[\relax]{\gdef\@autolatex@mtable@position{b!}}
+\define@key[autolatex]{mtable}{pH}[\relax]{\gdef\@autolatex@mtable@position{pH}}
+\define@key[autolatex]{mtable}{p!}[\relax]{\gdef\@autolatex@mtable@position{p!}}
+\define@key[autolatex]{mtable}{H!}[\relax]{\gdef\@autolatex@mtable@position{H!}}
+\define@key[autolatex]{mtable}{htb}[\relax]{\gdef\@autolatex@mtable@position{htb}}
+\define@key[autolatex]{mtable}{htp}[\relax]{\gdef\@autolatex@mtable@position{htp}}
+\define@key[autolatex]{mtable}{htH}[\relax]{\gdef\@autolatex@mtable@position{htH}}
+\define@key[autolatex]{mtable}{ht!}[\relax]{\gdef\@autolatex@mtable@position{ht!}}
+\define@key[autolatex]{mtable}{tbp}[\relax]{\gdef\@autolatex@mtable@position{tbp}}
+\define@key[autolatex]{mtable}{tbH}[\relax]{\gdef\@autolatex@mtable@position{tbH}}
+\define@key[autolatex]{mtable}{tb!}[\relax]{\gdef\@autolatex@mtable@position{tb!}}
+\define@key[autolatex]{mtable}{bpH}[\relax]{\gdef\@autolatex@mtable@position{bpH}}
+\define@key[autolatex]{mtable}{bp!}[\relax]{\gdef\@autolatex@mtable@position{bp!}}
+\define@key[autolatex]{mtable}{pH!}[\relax]{\gdef\@autolatex@mtable@position{pH!}}
+\define@key[autolatex]{mtable}{htbp}[\relax]{\gdef\@autolatex@mtable@position{htbp}}
+\define@key[autolatex]{mtable}{htbH}[\relax]{\gdef\@autolatex@mtable@position{htbH}}
+\define@key[autolatex]{mtable}{htb!}[\relax]{\gdef\@autolatex@mtable@position{htb!}}
+\define@key[autolatex]{mtable}{tbpH}[\relax]{\gdef\@autolatex@mtable@position{tbpH}}
+\define@key[autolatex]{mtable}{tbp!}[\relax]{\gdef\@autolatex@mtable@position{tbp!}}
+\define@key[autolatex]{mtable}{bpH!}[\relax]{\gdef\@autolatex@mtable@position{bph!}}
+\define@key[autolatex]{mtable}{htbpH}[\relax]{\gdef\@autolatex@mtable@position{htbpH}}
+\define@key[autolatex]{mtable}{htbp!}[\relax]{\gdef\@autolatex@mtable@position{htbp!}}
+\define@key[autolatex]{mtable}{htbpH!}[\relax]{\gdef\@autolatex@mtable@position{htbpH!}}
+%
+\newenvironment{mtable}[6][ht]{%
+ \global\let\@autolatex@mtable@position\relax%
+ \gdef\@autolatex@mtable@size{\normalsize}%
+ \setkeys[autolatex]{mtable}{#1}%
+ \ifx\@autolatex@mtable@position\relax%
+ \gdef\@autolatex@mtable@position{ht}%
+ \fi
+ %
+ \gdef\upm@table@caption{#5}%
+ \xdef\upm@table@label{tab:#6}%
+ \gdef\upm@table@note{}%
+ \newcommand{\captionastitle}{\tabulartitle{\upm@table@caption}}%
+ \newcommand{\tablenote}[1]{\gdef\upm@table@note{\bgroup ##1\egroup}}%
+ \expandafter\table[\@autolatex@mtable@position]%
+ \center\@autolatex@mtable@size%
+ \mtabular[#2]{#3}{#4}%
+}{%
+ \endmtabular\relax%
+ \caption{\upm@table@caption}%
+ \label{\upm@table@label}%
+ \endcenter%
+ \upm@table@note%
+ \endtable%
+ \global\let\upm@table@caption\relax%
+ \global\let\upm@table@label\relax%
+ \global\let\upm@table@note\relax%
+}
+
+%-----
+%\tabref{label}
+\newcommand{\tabref}[1]{\ref{tab:#1}}
+%-----
+%\tabpageref{label}
+\newcommand{\tabpageref}[1]{\pageref{tab:#1}}
+
+%----------------------------------------
+% PARAGRAPHS
+%----------------------------------------
+\setlength{\parindent}{0pt}
+\setlength{\parskip}{.2cm}
+
+%----------------------------------------
+% COLORIZED SECTION'S TITLES
+%----------------------------------------
+
+% PRIVATE COLORS
+\definecolor{sectiontitlecolor}{rgb}{0.93,0.41,0}
+\definecolor{chaptertitlecolor}{rgb}{0.24,0.33,0.48}
+\definecolor{parttitlecolor}{rgb}{0.24,0.33,0.48}
+
+% PRIVATE FORMATTING MACROS
+\newcounter{upm@format@section@sectionlevel}
+\setcounter{upm@format@section@sectionlevel}{0}
+
+\gdef\upm@format@partnum#1{\textcolor{parttitlecolor}{\expandafter\fontsize{40pt}{60pt}\selectfont#1\normalfont}}
+\gdef\upm@format@parttitle#1{\textcolor{parttitlecolor}{\huge\scshape #1}}
+\gdef\upm@format@chapternum#1{\textcolor{chaptertitlecolor}{\expandafter\fontsize{40pt}{60pt}\selectfont#1\normalfont}}
+\gdef\upm@format@chaptertitle#1{\textcolor{chaptertitlecolor}{\Huge\scshape #1}}
+\gdef\upm@format@sectionnum#1#2{\textcolor{sectiontitlecolor}{#2}}
+\gdef\upm@format@sectiontitle#1#2{\textcolor{sectiontitlecolor}{#2}}
+
+% PART
+\ifupmbookformat
+ \gdef\@part[#1]#2{%
+ \ifnum \c@secnumdepth >-2\relax
+ \refstepcounter{part}%
+ \addcontentsline{toc}{part}{\thepart\hspace{1em}#1}%
+ \else
+ \addcontentsline{toc}{part}{#1}%
+ \fi
+ \markboth{}{}%
+ {\huge\centering
+ \interlinepenalty \@M
+ \normalfont
+ \ifnum \c@secnumdepth >-2\relax
+ \upm@format@partnum{\thepart}
+ \par
+ \vskip 20\p@
+ \fi
+ \upm@format@parttitle{\nohyphens{#2}}\par}%
+ \@endpart}
+ \gdef\@spart#1{%
+ {\centering
+ \interlinepenalty \@M
+ \normalfont
+ \upm@format@parttitle{\nohyphens{#1}}\par}%
+ \@endpart}
+\fi
+
+% CHAPTER
+\ifupmarticleformat\else
+ \newcommand{\upm@format@makechapterhead}[2]{%
+ %\vspace*{50\p@}%
+ {\parindent \z@ \Huge \raggedleft \normalfont
+ \ifx\@empty#1\ifnum \c@secnumdepth >\m@ne
+ \upm@format@chapternum{\thechapter}
+ \par\nobreak
+ \vskip 20\p@
+ \fi\fi
+ \interlinepenalty\@M
+ %\ifupmbookformat\doublespacing\fi
+ \upm@format@chaptertitle{\nohyphens{#2}}\par\nobreak
+ \vskip 80\p@
+ }
+ }
+ %internal implementation of \chapter
+ \gdef\@makechapterhead#1{\upm@format@makechapterhead{\@empty}{#1}}
+ %internal implementation of \chapter*
+ \gdef\@makeschapterhead#1{\upm@format@makechapterhead{\relax}{#1}}
+\fi
+
+% SECTIONS
+\let\upm@format@sect@old\@sect
+\let\upm@format@ssect@old\@ssect
+
+% public implementation of sections.
+\renewcommand{\section}{\setcounter{upm@format@section@sectionlevel}{1}\@startsection{section}{1}{\z@}{-3.5ex \@plus -1ex \@minus -.2ex}{2.3ex \@plus.2ex}{\normalfont\Large\scshape}}
+\renewcommand{\subsection}{\setcounter{upm@format@section@sectionlevel}{2}\@startsection{subsection}{2}{\z@}{-3.25ex\@plus -1ex \@minus -.2ex}{1.5ex \@plus .2ex}{\normalfont\large\scshape}}
+\renewcommand{\subsubsection}{\setcounter{upm@format@section@sectionlevel}{3}\@startsection{subsubsection}{3}{\z@}{-3.25ex\@plus -1ex \@minus -.2ex}{1.5ex \@plus .2ex}{\normalfont\normalsize\scshape}}
+
+% internal implementations for sections.
+\gdef\@sect#1#2#3#4#5#6[#7]#8{\upm@format@sect@old{#1}{#2}{#3}{#4}{#5}{#6}[#7]{\upm@format@sectiontitle{\theupm@format@section@sectionlevel}{#8}}}
+\gdef\@ssect#1#2#3#4#5{\upm@format@ssect@old{#1}{#2}{#3}{#4}{\upm@format@sectiontitle{\theupm@format@section@sectionlevel}{#5}}}
+\gdef\@seccntformat#1{\upm@format@sectionnum{\theupm@format@section@sectionlevel}{\csname the#1\endcsname/}\quad}
+
+%----------------------------------------
+% PAGE LAYOUT
+%----------------------------------------
+
+% Change the factors for determining the element positions
+\renewcommand{\topfraction}{.99} % max fraction of floats at top
+\renewcommand{\bottomfraction}{.99} % max fraction of floats at bottom
+\renewcommand{\textfraction}{.5} % allow minimal text w. figs
+\renewcommand{\dbltopfraction}{.66} % fit big float above 2-col. text
+\renewcommand{\floatpagefraction}{0.99} % require fuller float pages | N.B.: floatpagefraction MUST be less than topfraction !!
+\renewcommand{\dblfloatpagefraction}{.66} % fit big float above 2-col. text
+
+% Update the format of the saved pages and sections
+\renewcommand{\sectionmark}[1]{\markright{\thesection\ \textsc{#1}}}
+\ifupmarticleformat\else
+\renewcommand{\chaptermark}[1]{\markboth{\textsc{#1}}{}}
+\renewcommand{\@mkboth}[2]{%
+ \let\upm@doc@MakeUppercase\MakeUppercase%
+ \gdef\MakeUppercase##1{##1}%
+ \chaptermark{#1}%
+ \let\MakeUppercase\upm@doc@MakeUppercase%
+ \let\upm@doc@MakeUppercase\relax%
+}
+\fi
+% Make sure that the page before a part or
+% a chapter title was empty
+\renewcommand{\cleardoublepage}{%
+ \clearpage%
+ \if@twoside\ifodd\c@page%
+ \else%
+ \thispagestyle{facingtochapter}%
+ \hbox{}\newpage%
+ \if@twocolumn\hbox{}\newpage%
+ \fi\fi\fi%
+}
+\newcommand{\ps@facingtochapter}{\ps@empty}
+
+%----------------------------------------
+% ADDITIONAL SECTIONS
+%----------------------------------------
+
+\gdef\upm@format@newsection@alignment{}
+
+%-----
+% Part without number but inside the TOC
+%\parttoc [toctitle]{title} % left-alignment inside TOC
+%\parttoc*[toctitle]{title} % right-alignment inside TOC
+\def\parttoc{\@ifstar%
+ {\gdef\upm@format@newsection@alignment{\protect\numberline{}}\expandafter\upm@format@newsection@part}%
+ {\gdef\upm@format@newsection@alignment{}\expandafter\upm@format@newsection@part}}
+\def\upm@format@newsection@part{\@ifnextchar [%
+ {\expandafter\upm@format@newsection@part@opt}%
+ {\expandafter\upm@format@newsection@part@nopt}}
+\def\upm@format@newsection@part@opt[#1]#2{%
+ \part*{#2\addcontentsline{toc}{part}{\upm@format@newsection@alignment{#1}}}%
+ \chaptermark{}%
+}
+\def\upm@format@newsection@part@nopt#1{%
+ \part*{#1\addcontentsline{toc}{part}{\upm@format@newsection@alignment{#1}}}%
+ \chaptermark{}%
+}
+
+%-----
+% Chapter without number but inside the TOC
+%\chaptertoc [toctitle]{title} % left-alignment inside TOC
+%\chaptertoc*[toctitle]{title} % right-alignment inside TOC
+\def\chaptertoc{\@ifstar%
+ {\gdef\upm@format@newsection@alignment{\protect\numberline{}}\expandafter\upm@format@newsection@chapter}%
+ {\gdef\upm@format@newsection@alignment{}\expandafter\upm@format@newsection@chapter}}
+
+\def\upm@format@newsection@chapter{\@ifnextchar[%
+ {\upm@format@newsection@chapter@a}%
+ {\upm@format@newsection@chapter@b}%
+}
+
+\def\upm@format@newsection@chapter@a[#1]#2{%
+ \expandafter\chapter*[#1]{#2}%
+ \addcontentsline{toc}{chapter}{\upm@format@newsection@alignment{#1}}%
+ \@ifundefined{minitoc}{}{%
+ \global\addtocounter{mtc}{1}%
+ }%
+}
+
+\def\upm@format@newsection@chapter@b#1{%
+ \expandafter\chapter*{#1}%
+ \addcontentsline{toc}{chapter}{\upm@format@newsection@alignment{#1}}%
+ \@ifundefined{minitoc}{}{%
+ \global\addtocounter{mtc}{1}%
+ }%
+}
+
+%-----
+% Section without number but inside the TOC
+%\sectiontoc [toctitle]{title} % left-alignment inside TOC
+%\sectiontoc*[toctitle]{title} % right-alignment inside TOC
+\def\sectiontoc{\@ifstar%
+ {\gdef\upm@format@newsection@alignment{\protect\numberline{}}\expandafter\upm@format@newsection@section}%
+ {\gdef\upm@format@newsection@alignment{}\expandafter\upm@format@newsection@section}}
+\def\upm@format@newsection@section{\@ifnextchar [%
+ {\expandafter\upm@format@newsection@section@opt}%
+ {\expandafter\upm@format@newsection@section@nopt}}
+\def\upm@format@newsection@section@opt[#1]#2{%
+ \section*{#2\addcontentsline{toc}{section}{\upm@format@newsection@alignment{#1}}}%
+}
+\def\upm@format@newsection@section@nopt#1{%
+ \section*{#1\addcontentsline{toc}{section}{\upm@format@newsection@alignment{#1}}}%
+}
+
+%-----
+% Subsection without number but inside the TOC
+%\subsectiontoc [toctitle]{title} % left-alignment inside TOC
+%\subsectiontoc*[toctitle]{title} % right-alignment inside TOC
+\def\subsectiontoc{\@ifstar%
+ {\gdef\upm@format@newsection@alignment{\protect\numberline{}}\expandafter\upm@format@newsection@subsection}%
+ {\gdef\upm@format@newsection@alignment{}\expandafter\upm@format@newsection@subsection}}
+\def\upm@format@newsection@subsection{\@ifnextchar [%
+ {\expandafter\upm@format@newsection@subsection@opt}%
+ {\expandafter\upm@format@newsection@subsection@nopt}}
+\def\upm@format@newsection@subsection@opt[#1]#2{%
+ \subsection*{#2\addcontentsline{toc}{subsection}{\upm@format@newsection@alignment{#1}}}%
+}
+\def\upm@format@newsection@subsection@nopt#1{%
+ \subsection*{#1\addcontentsline{toc}{subsection}{\upm@format@newsection@alignment{#1}}}%
+}
+
+%-----
+% Subsubsection without number but inside the TOC
+%\subsubsectiontoc [toctitle]{title} % left-alignment inside TOC
+%\subsubsectiontoc*[toctitle]{title} % right-alignment inside TOC
+\def\subsubsectiontoc{\@ifstar%
+ {\gdef\upm@format@newsection@alignment{\protect\numberline{}}\expandafter\upm@format@newsection@subsubsection}%
+ {\gdef\upm@format@newsection@alignment{}\expandafter\upm@format@newsection@subsubsection}}
+\def\upm@format@newsection@subsubsection{\@ifnextchar [%
+ {\expandafter\upm@format@newsection@subsubsection@opt}%
+ {\expandafter\upm@format@newsection@subsubsection@nopt}}
+\def\upm@format@newsection@subsubsection@opt[#1]#2{%
+ \subsubsection*{#2\addcontentsline{toc}{subsubsection}{\upm@format@newsection@alignment{#1}}}%
+}
+\def\upm@format@newsection@subsubsection@nopt#1{%
+ \subsubsection*{#1\addcontentsline{toc}{subsubsection}{\upm@format@newsection@alignment{#1}}}%
+}
+
+%-----
+% Chapter with different titles for in the TOC, the headers and on the pages
+%\chapterfull[in toc]{on page}{in header} % with number
+%\chapterfull*[in toc]{on page}{in header} % without number
+\def\chapterfull{\@ifstar%
+ {\gdef\upm@format@newsection@thesectionmacro{\chapter*}\upm@format@newsection@chapterfull}%
+ {\gdef\upm@format@newsection@thesectionmacro{\chapter}\upm@format@newsection@chapterfull}%
+}
+
+\def\upm@format@newsection@chapterfull{\@ifnextchar[%
+ \upm@format@newsection@chapterfull@a%
+ \upm@format@newsection@chapterfull@b%
+}
+
+\def\upm@format@newsection@chapterfull@a[#1]#2#3{%
+ \upm@format@newsection@thesectionmacro[#1]{#2}%
+ \chaptermark{#3}%
+}
+
+\def\upm@format@newsection@chapterfull@b#1#2{%
+ \upm@format@newsection@thesectionmacro{#1}%
+ \chaptermark{#2}%
+}
+
+%-----
+% Section with different titles for in the TOC, the headers and on the pages
+%\sectionfull[in toc]{on page}{in header} % with number
+%\sectionfull*[in toc]{on page}{in header} % without number
+\def\sectionfull{\@ifstar%
+ {\gdef\upm@format@newsection@thesectionmacro{\section*}\upm@format@newsection@sectionfull}%
+ {\gdef\upm@format@newsection@thesectionmacro{\section}\upm@format@newsection@sectionfull}%
+}
+
+\def\upm@format@newsection@sectionfull{\@ifnextchar[%
+ \upm@format@newsection@sectionfull@a%
+ \upm@format@newsection@sectionfull@b%
+}
+
+\def\upm@format@newsection@sectionfull@a[#1]#2#3{%
+ \upm@format@newsection@thesectionmacro[#1]{#2}%
+ \global\sectionmark{#3}%
+}
+
+\def\upm@format@newsection@sectionfull@b#1#2{%
+ \upm@format@newsection@thesectionmacro{#1}%
+ \global\sectionmark{#2}%
+}
+
+%----------------------------------------
+% BIBLIOGRAPHY
+%----------------------------------------
+
+%-----
+%\bibsize{size}
+\newcommand{\bibsize}[1]{\gdef\upm@bibsize{#1}}
+
+\gdef\upm@bibsize{\small}
+
+\gdef\@biblabel#1{{\upm@bibsize{[#1]}}}
+
+\gdef\@lbibitem[#1]#2{\item[\@biblabel{#1}\hfill]\upm@bibsize\if@filesw{%
+ \let\protect\noexpand\immediate\write\@auxout{\string\bibcite{#2}{#1}}}\fi\ignorespaces}
+
+\gdef\@bibitem#1{\item\upm@bibsize\if@filesw%
+ \immediate\write\@auxout{\string\bibcite{#1}{\the\value{\@listctr}}}\fi\ignorespaces}
+
+
+%----------------------------------------
+% TABLE OF CONTENT
+%----------------------------------------
+\setcounter{secnumdepth}{3}
+\setcounter{tocdepth}{3}
+
+% Change the color of the TOC for the "dotted" lines
+%\let\upm@format@dottedtocline@old\@dottedtocline
+%\gdef\@dottedtocline#1#2#3#4#5{%
+% %{depth}{left margin}{right margin}{text}{page number}
+% \upm@format@dottedtocline@old{#1}{#2}{#3}{#4}{#5}%
+%}
+
+% Change the color of the TOC for the parts
+\@ifundefined{l@part}{}{
+\let\upm@format@l@part@old\l@part
+\renewcommand*\l@part[2]{%
+ %{text}{page number}
+ \upm@format@l@part@old{\textcolor{parttitlecolor}{#1}}{\textcolor{parttitlecolor}{#2}}%
+}
+}
+
+% Change the color of the TOC for the chapters
+\@ifundefined{l@chapter}{}{
+\let\upm@format@l@chapter@old\l@chapter
+\renewcommand*\l@chapter[2]{%
+ %{text}{page number}
+ \upm@format@l@chapter@old{\textcolor{chaptertitlecolor}{#1}}{\textcolor{chaptertitlecolor}{#2}}%
+}
+}
+
+% Overide the color and font configurations of the MINITOC package
+\AtBeginDocument{
+ \@ifundefined{minitoc}{}{%
+ % Chapter
+ \gdef\mtifont{\normalfont\large\upshape\bfseries\color{chaptertitlecolor}}
+ % Section
+ \gdef\mtcSfont{\normalfont\small\upshape\bfseries\color{sectiontitlecolor}}
+ % Sub-Section and SubSub-Section
+ \gdef\mtcSSfont{\normalfont\small\upshape\mdseries\normalcolor}
+ \global\let\mtcSSSfont\mtcSSfont
+ }
+}
+
+%----------------------------------------
+% ENUMERATIONS
+%----------------------------------------
+\newcounter{upm@fmt@savedcounter}
+
+\newcommand{\savecounter}[1]{%
+ \setcounter{upm@fmt@savedcounter}{\value{#1}}%
+}
+\newcommand{\restorecounter}[1]{%
+ \setcounter{#1}{\theupm@fmt@savedcounter}%
+}
+\newcommand{\saveenumcounter}{\savecounter{\@enumctr}}
+\newcommand{\restoreenumcounter}{\restorecounter{\@enumctr}}
+\newcommand{\setenumcounter}[1]{\setcounter{\@enumctr}{#1}\addtocounter{\@enumctr}{-1}}
+\newcommand{\getenumcounter}{\value{\@enumctr}}
+
+%----------------------------------------
+% FOOTNOTE
+%----------------------------------------
+
+\gdef\upm@footnoteref#1{\upm@textsuperscript{#1}}
+\gdef\upm@footnotepageref#1#2{\upm@textsuperscript{{#1\tiny(#2)}}}
+
+\def\upm@savefootnote#1#2{%
+ \footnote{#1\label{\upm@protect{footnote:#2}}}%
+ \upm@nameundef{footnote:#2:cmd}%
+}
+\def\upm@savefootnotestar#1#2{%
+ \upm@namedef{footnote:#2:cmd}{\upm@savefootnote{#1}{#2}}%
+}
+
+\DeclareRobustCommand\savefootnote{\@ifstar\upm@savefootnotestar\upm@savefootnote}
+
+\def\upm@reffootnote#1{%
+ \upm@ifdefinedname{footnote:#1:cmd}{%
+ \upm@nameuse{footnote:#1:cmd}}{%
+ \upm@footnoteref{\upm@getref{\upm@protect{footnote:#1}}}%
+ }%
+ \xspace%
+}
+\def\upm@reffootnotestar#1{%
+ \upm@ifdefinedname{footnote:#1:cmd}{%
+ \upm@nameuse{footnote:#1:cmd}}{%
+ \xdef\upm@tmp@tmp{\upm@protect{footnote:#1}}%
+ \upm@footnotepageref{\expandafter\upm@getref{\upm@tmp@tmp}}{\expandafter\upm@getpageref{\upm@tmp@tmp}}%
+ \global\let\upm@tmp@tmp\relax%
+ }%
+ \xspace%
+}
+
+\DeclareRobustCommand\reffootnote{\@ifstar\upm@reffootnotestar\upm@reffootnote}
+
+%----------------------------------------
+% IMAGES IN PARAGRAPHS
+%----------------------------------------
+
+\newenvironment{umlinpar}[2][width=.45\linewidth]{%
+\begin{window}[0,r,{\mbox{\hspace{.5cm}\includegraphics[#1]{#2}\vspace{.5cm}}},{}]
+}{%
+\end{window}}
+
+%----------------------------------------
+% DATE
+%----------------------------------------
+
+%Build a date this a supported format
+%\makedate{day}{month}{year}
+\let\makedate\upm@format@lang@makedate
+
+%-----
+%Replies the year corresponding to the given supported date
+%\extractyear{date}
+\let\extractyear\upm@format@lang@extractyear
+
+%-----
+%Replies the month corresponding to the given supported date
+%\extractmonth{date}
+\let\extractmonth\upm@format@lang@extractmonth
+
+%-----
+%Replies the day corresponding to the given supported date
+%\extractday{date}
+\let\extractday\upm@format@lang@extractday
+
+% Redefine the today function
+\AtBeginDocument{\global\edef\today{\makedate{\the\day}{\the\month}{\the\year}}}
+
+%----------------------------------------
+% PEOPLE NAME
+%----------------------------------------
+
+\def\makenamespacing#1{%
+ \upm@format@makenamespacing{#1}\xspace%
+}
+
+\def\upm@format@makenamespacing#1{%
+ \upm@foreach.\in#1\do{%
+ \ignorespaces\upm@foreach@term.\,%
+ }{%
+ \ignorespaces\upm@foreach@term%
+ }%
+}
+
+\gdef\upm@format@people@title#1{\textsc{#1}}
+\def\upm@format@firstname@format#1{%
+ {\smaller\textsc{\upm@format@makenamespacing{#1}}}%
+}
+\def\upm@format@von@format#1{\mbox{\smaller\ignorespaces#1}}
+\def\upm@format@lastname@format#1{\textsc{\ignorespaces#1}}
+
+%\upmmakename[von]{firstname}{lastname}{separator}
+\newcommand{\upmmakename}[4][\relax]{%
+ \ifx#1\relax%
+ {\upm@format@firstname@format{#2}#4\upm@format@lastname@format{#3}}%
+ \else%
+ {\upm@format@firstname@format{#2}#4\upm@format@von@format{#1}#4\upm@format@lastname@format{#3}}%
+ \fi%
+ \xspace%
+}
+
+%\makename[von]{firstname}{lastname}
+\newcommand{\makename}[3][\relax]{%
+ \upmmakename[#1]{#2}{#3}{\ }%
+}
+
+%\makelastname[von]{lastname}
+\newcommand{\makelastname}[2][\relax]{%
+ \ifx#1\relax%
+ \upm@format@lastname@format{#2}%
+ \else%
+ \upm@format@von@format{#1}\ \upm@format@lastname@format{#2}%
+ \fi%
+ \xspace%
+}
+
+%\makefirstname{firstname}
+\newcommand{\makefirstname}[1]{%
+ \upm@format@firstname@format{#1}\xspace%
+}
+
+%\prname[von]{firstname}{lastname}
+%\prname*[von]{firstname}{lastname}
+\def\prname{\@ifstar\upm@prnamestar\upm@prname}
+\newcommand{\upm@prname}[3][\relax]{%
+ \upm@format@people@title{\upm@format@lang@professor}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@prnamestar}[3][\relax]{%
+ \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@professor}%
+}
+
+%\drname[von]{firstname}{lastname}
+%\drname*[von]{firstname}{lastname}
+\def\drname{\@ifstar\upm@drnamestar\upm@drname}
+\newcommand{\upm@drname}[3][\relax]{%
+ \upm@format@people@title{\upm@format@lang@doctor}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@drnamestar}[3][\relax]{%
+ \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@doctor}%
+}
+
+%\phdname[von]{firstname}{lastname}
+%\phdname*[von]{firstname}{lastname}
+\def\phdname{\@ifstar\upm@phdnamestar\upm@phdname}
+\newcommand{\upm@phdname}[3][\relax]{%
+ \upm@format@people@title{\upm@format@lang@phdoctor}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@phdnamestar}[3][\relax]{%
+ \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@phdoctor}%
+}
+
+%\scdname[von]{firstname}{lastname}
+%\scdname*[von]{firstname}{lastname}
+\def\scdname{\@ifstar\upm@scdnamestar\upm@scdname}
+\newcommand{\upm@scdname}[3][\relax]{%
+ \upm@format@people@title{\upm@format@lang@scdoctor}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@scdnamestar}[3][\relax]{%
+ \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@scdoctor}%
+}
+
+%\mdname[von]{firstname}{lastname}
+%\mdname*[von]{firstname}{lastname}
+\def\mdname{\@ifstar\upm@mdnamestar\upm@mdname}
+\newcommand{\upm@mdname}[3][\relax]{%
+ \upm@format@people@title{\upm@format@lang@mdoctor}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@mdnamestar}[3][\relax]{%
+ \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@mdoctor}%
+}
+
+%\pengname[von]{firstname}{lastname}
+%\pengname*[von]{firstname}{lastname}
+\def\pengname{\@ifstar\upm@pengnamestar\upm@pengname}
+\newcommand{\upm@pengname}[3][\relax]{%
+ \upm@format@people@title{\upm@format@lang@professionalengineer}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@pengnamestar}[3][\relax]{%
+ \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@professionalengineer}%
+}
+
+%\iengname[von]{firstname}{lastname}
+%\iengname*[von]{firstname}{lastname}
+\def\iengname{\@ifstar\upm@iengnamestar\upm@iengname}
+\newcommand{\upm@iengname}[3][\relax]{%
+ \upm@format@people@title{\upm@format@lang@incorporatedengineer}\,\upmmakename[#1]{#2}{#3}{\ }%
+}
+\newcommand{\upm@iengnamestar}[3][\relax]{%
+ \upmmakename[#1]{#2}{#3}{\ }, \upm@format@people@title{\upm@format@lang@incorporatedengineer}%
+}
+
+%----------------------------------------
+% INLINE ENUMERATION
+%----------------------------------------
+
+\newcounter{@@upm@fmt@inlineenumeration}
+\newcommand{\inlineenumerationlabel}[1]{(#1)}
+\let\upm@fmt@inlineenum@numberformat\roman
+\newenvironment{inlineenumeration}{%
+ \begingroup%
+ \let\upm@fmt@inlineenum@currentlabel\@currentlabel%
+ \renewcommand{\item}{\xdef\@currentlabel{\upm@fmt@inlineenum@numberformat{@@upm@fmt@inlineenumeration}}{\inlineenumerationlabel{\@currentlabel}{\addtocounter{@@upm@fmt@inlineenumeration}{1}}}~}%
+ \setcounter{@@upm@fmt@inlineenumeration}{1}%
+}{%
+ \global\let\@currentlabel\upm@fmt@inlineenum@currentlabel%
+ \endgroup%
+}
+
+%----------------------------------------
+% DESCRIPTION LIST WITH NUMBERS
+%----------------------------------------
+
+\newcounter{@upm@fmt@enumdescription@cnt@}
+\gdef\upm@fmt@enumdescription@savedlabel{}
+\gdef\upm@fmt@enumdescription@savedcounter{}
+\newcommand{\upm@fmt@enumdescription@fmt@}[1]{}
+\newcommand{\enumdescriptionlabel}[1]{\textbf{#1}}
+\newcommand{\enumdescriptioncounterseparator}{~-~}
+\newcommand{\enumdescriptionlabelseparator}{\upm@column@char}
+% #1: counter style.
+% #2: text before the counter.
+% #3: text after the counter.
+% #4: text between the counter and the description.
+% #5: text between the description and the rest of the text.
+% #6: text between the counter (no description) and the rest of the text.
+\newenvironment{upm@fmt@enumdescription}[6]{%
+ \begin{list}{}{%
+ \renewcommand{\upm@fmt@enumdescription@savedlabel}{\@currentlabel}%
+ \edef\upm@fmt@enumdescription@savedcounter{\the@upm@fmt@enumdescription@cnt@}%
+ \setcounter{@upm@fmt@enumdescription@cnt@}{1}%
+ \ifthenelse{\equal{#1}{a}}{%
+ \renewcommand{\upm@fmt@enumdescription@fmt@}[1]{#2\alph{##1}#3}%
+ }{%
+ \ifthenelse{\equal{#1}{A}}{%
+ \renewcommand{\upm@fmt@enumdescription@fmt@}[1]{#2\Alph{##1}#3}%
+ }{%
+ \ifthenelse{\equal{#1}{i}}{%
+ \renewcommand{\upm@fmt@enumdescription@fmt@}[1]{#2\roman{##1}#3}%
+ }{%
+ \ifthenelse{\equal{#1}{I}}{%
+ \renewcommand{\upm@fmt@enumdescription@fmt@}[1]{#2\Roman{##1}#3}%
+ }{%
+ \renewcommand{\upm@fmt@enumdescription@fmt@}[1]{#2\arabic{##1}#3}%
+ }%
+ }%
+ }%
+ }%
+ \renewcommand{\makelabel}[1]{%
+ \xdef\@currentlabel{\upm@fmt@enumdescription@fmt@{@upm@fmt@enumdescription@cnt@}}%
+ \enumdescriptionlabel{\@currentlabel#4##1\ifthenelse{\equal{a##1}{a}}{#6}{#5}}{\addtocounter{@upm@fmt@enumdescription@cnt@}{1}}}%
+ \expandafter\settowidth{\labelwidth}{#2iii#3}%
+ }
+}{%
+ \global\let\@currentlabel\upm@fmt@enumdescription@savedlabel%
+ \setcounter{@upm@fmt@enumdescription@cnt@}{\upm@fmt@enumdescription@savedcounter}%
+ \end{list}%
+}
+\newenvironment{enumdescriptionx}[3][i]{%
+ \begin{upm@fmt@enumdescription}{#1}{#2}{#3}{\enumdescriptioncounterseparator}{\enumdescriptionlabelseparator}{\enumdescriptionlabelseparator}%
+}{%
+ \end{upm@fmt@enumdescription}%
+}
+\newenvironment{enumdescription}[1][i]{%
+ \begin{upm@fmt@enumdescription}{#1}{}{}{\enumdescriptioncounterseparator}{\enumdescriptionlabelseparator}{\enumdescriptionlabelseparator}%
+}{%
+ \end{upm@fmt@enumdescription}%
+}
+
+%% Issue #14: enumerate behaves as enumdescription
+\ifupm@use@override@standard@lists
+
+ \AtBeginDocument{
+ \message{*** Overriding the 'enumerate' environment. Pass option 'standardlists' for avoiding this override.}
+ \global\let\enumerate\@undefined
+ \global\let\endenumerate\@undefined
+ \global\NewEnviron{enumerate}[1][1\string.~]{%
+ % Parse the parameter for extracting the type of the enumeration, the prefix and the postfix
+ \in@{a}{#1}\ifin@
+ \gdef\upm@fmt@enumerate@style{a}%
+ \def\reserved@a##1a##2\@nil{%
+ \def\upm@fmt@enumerate@prefix{##1}%
+ \def\upm@fmt@enumerate@postfix{##2}%
+ }%
+ \reserved@a#1\@nil%
+ \else\in@{1}{#1}\ifin@
+ \gdef\upm@fmt@enumerate@style{1}%
+ \def\reserved@a##11##2\@nil{%
+ \def\upm@fmt@enumerate@prefix{##1}%
+ \def\upm@fmt@enumerate@postfix{##2}%
+ }%
+ \reserved@a#1\@nil%
+ \else\in@{A}{#1}\ifin@
+ \gdef\upm@fmt@enumerate@style{A}%
+ \def\reserved@a##1A##2\@nil{%
+ \def\upm@fmt@enumerate@prefix{##1}%
+ \def\upm@fmt@enumerate@postfix{##2}%
+ }%
+ \reserved@a#1\@nil%
+ \else\in@{i}{#1}\ifin@
+ \gdef\upm@fmt@enumerate@style{i}%
+ \def\reserved@a##1i##2\@nil{%
+ \def\upm@fmt@enumerate@prefix{##1}%
+ \def\upm@fmt@enumerate@postfix{##2}%
+ }%
+ \reserved@a#1\@nil%
+ \else\in@{I}{#1}\ifin@
+ \gdef\upm@fmt@enumerate@style{I}%
+ \def\reserved@a##1I##2\@nil{%
+ \def\upm@fmt@enumerate@prefix{##1}%
+ \def\upm@fmt@enumerate@postfix{##2}%
+ }%
+ \reserved@a#1\@nil%
+ \else%
+ \errmessage{Invalid format of the enumerate counter}
+ \fi\fi\fi\fi\fi%
+ \protected@xdef\upm@tmp{\protect\protect\protect\begin{upm@fmt@enumdescription}{\upm@fmt@enumerate@style}{\upm@fmt@enumerate@prefix}{\upm@fmt@enumerate@postfix}{}{\protect\enumdescriptionlabelseparator}{}}%
+ %
+ \upm@tmp%
+ %\protect\begin{upm@fmt@enumdescription}{#1}{}{\string.~}{}{\enumdescriptionlabelseparator}{}%
+ \BODY%
+ \protect\end{upm@fmt@enumdescription}%
+ }
+ }
+\fi
+
+%----------------------------------------
+% DESCRIPTION LIST WITH BULLETS
+%----------------------------------------
+\ifupm@use@override@standard@lists
+ \gdef\upm@fmt@itemizeddescription@separator{\iflanguage{french}{ :}{:}\ }
+ \newcommand{\upm@fmt@itemizeddescription@formatdescription}[1]{\textbf{#1}}
+ \newcommand{\upm@fmt@itemizeddescription@desc}[2]{%
+ \upm@fmt@itemizeddescription@formatdescription{#1#2}%
+ }
+ \let\upm@fmt@olditem\item
+ \let\upm@item@param\upm@fmt@olditem
+ \let\upm@item@noparam\upm@fmt@olditem
+ \def\item{\@ifnextchar[\upm@item@param\upm@item@noparam}
+ \AtBeginDocument{
+ \message{*** Overriding the 'description' environment. Pass option 'standardlists' for avoiding this override.}
+ \global\let\description\@undefined
+ \global\let\enddescription\@undefined
+ \global\NewEnviron{description}[1][\upm@fmt@itemizeddescription@separator]{
+ \begin{itemize}%
+ \renewcommand{\upm@item@param}[1][]{\upm@fmt@olditem \upm@fmt@itemizeddescription@desc{##1}{#1}}%
+ \renewcommand{\upm@item@noparam}{\upm@fmt@olditem }%
+ \BODY%
+ \end{itemize}%
+ }
+ }
+\fi
+
+%----------------------------------------
+% SIZE MANAGEMENT
+%----------------------------------------
+\newenvironment{upmfontsize}[1]{%
+ \begingroup%
+ \let\upm@Huge\Huge%
+ \let\upm@huge\huge%
+ \let\upm@normalsize\normalsize%
+ \let\upm@small\small%
+ \let\upm@scriptsize\scriptsize%
+ \let\upm@footnotesize\footnotesize%
+ \let\upm@tiny\tiny%
+ %
+ \ifx#1\Huge%
+ \let\Huge\upm@Huge%
+ \let\huge\upm@Huge%
+ \let\small\upm@huge%
+ \let\scriptsize\upm@normalsize%
+ \let\footnotesize\upm@small%
+ \let\tiny\upm@scriptsize%
+ \else\ifx#1\huge%
+ \let\Huge\upm@Huge%
+ \let\huge\upm@Huge%
+ \let\small\upm@normalsize%
+ \let\scriptsize\upm@small%
+ \let\footnotesize\upm@scriptsize%
+ \let\tiny\upm@footnotesize%
+ \else\ifx#1\small%
+ \let\Huge\upm@huge%
+ \let\huge\upm@normalsize%
+ \let\small\upm@scriptsize%
+ \let\scriptsize\upm@footnotesize%
+ \let\footnotesize\upm@tiny%
+ \let\tiny\upm@tiny%
+ \else\ifx#1\scriptsize%
+ \let\Huge\upm@normalsize%
+ \let\huge\upm@small%
+ \let\small\upm@footnotesize%
+ \let\scriptsize\upm@tiny%
+ \let\footnotesize\upm@tiny%
+ \let\tiny\upm@tiny%
+ \else\ifx#1\footnotesize%
+ \let\Huge\upm@small%
+ \let\huge\upm@scriptsize%
+ \let\small\upm@tiny%
+ \let\scriptsize\upm@tiny%
+ \let\footnotesize\upm@tiny%
+ \let\tiny\upm@tiny%
+ \else\ifx#1\tiny%
+ \let\Huge\upm@scriptsize%
+ \let\huge\upm@footnotesize%
+ \let\small\upm@tiny%
+ \let\scriptsize\upm@tiny%
+ \let\footnotesize\upm@tiny%
+ \let\tiny\upm@tiny%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+ #1%
+}{\endgroup}
+
+%----------------------------------------
+% FRAMED MINIPAGE
+%----------------------------------------
+
+\newsavebox{\upm@framed@minipage}
+%\begin{framedminipage}{width}...\end{framedminipage}
+\newenvironment{framedminipage}[1]{%
+ \begin{lrbox}{\upm@framed@minipage}\begin{minipage}{#1}%
+ }{%
+ \end{minipage}\end{lrbox}\fbox{\usebox{\upm@framed@minipage}}}
+
+%\begin{framedcolorminipage}{width}{border}{background}...\end{framedcolorminipage}
+\newenvironment{framedcolorminipage}[3]{%
+ \newcommand{\upm@framed@minipage@border}{#2}%
+ \newcommand{\upm@framed@minipage@background}{#3}%
+ \begin{lrbox}{\upm@framed@minipage}\begin{minipage}{#1}%
+ }{%
+ \end{minipage}\end{lrbox}\fcolorbox{\upm@framed@minipage@border}{\upm@framed@minipage@background}{\usebox{\upm@framed@minipage}}}
+
+%----------------------------------------
+% HIGHLIGH BOXES
+%----------------------------------------
+
+\newsavebox{\upm@highlight@box@save}
+
+\newenvironment{upm@highligh@box}[2]{%
+ \par
+ \vspace{.5cm}
+ \begin{tabular}{|p{#1}|}
+ \hline
+ \begin{window}[0,l,{\mbox{\includegraphics[width=1cm]{#2}}},{}]
+}{%
+ \end{window}\\ \hline \end{tabular}
+ \vspace{.5cm}
+ \par
+}
+
+\newenvironment{upmcaution}[1][\linewidth]{%
+ \upm@highligh@box{#1}{caution.png}%
+}{%
+ \endupm@highligh@box%
+}
+
+\newenvironment{upminfo}[1][\linewidth]{%
+ \upm@highligh@box{#1}{info.png}%
+}{%
+ \endupm@highligh@box%
+}
+
+\newenvironment{upmquestion}[1][\linewidth]{%
+ \upm@highligh@box{#1}{question.png}%
+}{%
+ \endupm@highligh@box%
+}
+
+%----------------------------------------
+% PROVIDE URL MACROS, WHICH WILL BE
+% OVERRIDDEN BY THE DOCUMENT CLASS
+%----------------------------------------
+
+\newcommand{\url}[2][]{\texttt{#2}}
+\newcommand{\href}[3][]{\texttt{#3}}
+
+%----------------------------------------
+% Exponents and Indices
+%----------------------------------------
+\renewcommand{\textup}[1]{\textsuperscript{#1}\xspace}
+\def\@textsubscript#1{%
+ {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
+\newcommand{\textsubscript}[1]{\@textsubscript{\selectfont#1}}
+\newcommand{\textdown}[1]{\textsubscript{#1}\xspace}
+
+
+%----------------------------------------
+% UNDERLINE
+%----------------------------------------
+
+\let\upm@oldunderline\underline
+\renewcommand{\underline}[1]{\upm@oldunderline{\smash{#1}}}
+
+%----------------------------------------
+% ENVIRONMENT FOR DEFINITIONS
+%----------------------------------------
+
+%-----
+% Defining the style for the definitions
+\colorlet{definitionbackground}{backtableheader}
+\colorlet{definitionheaderforeground}{fronttableheader}
+\colorlet{definitionborder}{fronttableheader}
+\colorlet{definitiontextforeground}{fronttableheader}
+
+\iflanguage{french}{
+ \gdef\definitionname{D\'efinition}
+ \gdef\listdefinitionname{Liste des d\'efinitions}
+}{
+ \gdef\definitionname{Definition}
+ \gdef\listdefinitionname{List of Definitions}
+}
+
+\gdef\upm@definition@width{.9\linewidth}
+\gdef\upm@definition@rule@width{\linewidth}
+\gdef\upm@definition@rule@height{0.4pt}
+
+\newtheoremstyle{upmdefinition}% name of the style to be used
+ {}% measure of space to leave above the theorem. E.g.: 3pt
+ {}% measure of space to leave below the theorem. E.g.: 3pt
+ {\normalfont}% name of font to use in the body of the theorem
+ {}% measure of space to indent the head
+ {\normalfont\bfseries}% name of head font
+ {\\[-1em]{\textcolor{definitionborder}{\rule{\upm@definition@rule@width}{\upm@definition@rule@height}}}}% punctuation between head and body
+ {\newline}% space after theorem head
+ {\textcolor{definitionheaderforeground}{\thmname{#1}\thmnumber{~#2}\upm@column@char\thmnote{ #3}}\vspace{.25em}}% Manually specify head
+
+%-----
+% Declare a theorem with the standard UPM style
+% \declareupmtheorem[theorem_style]{name}{label}{list_label}
+\newcommand{\declareupmtheorem}[4][upmdefinition]{%
+ \global\declaretheorem[name={#3},style=#1]{upm#2}%
+ \global\newenvironment{#2}[1][]{%
+ \par\vspace{\parsep}\centering\begin{framedcolorminipage}{\upm@definition@width}{definitionborder}{definitionbackground}%
+ \color{definitiontextforeground}%
+ \begin{upm#2}[##1]%
+ }{%
+ \end{upm#2}%
+ \end{framedcolorminipage}\vspace{\parsep}\par%
+ }%
+ % Check the version of the thmtools because the TeXLive distribution
+ % gives a too old version.
+ \@ifpackagelater{thm-listof}{2012/05/03}{%
+ \global\@namedef{listof#2s}{%
+ \global\let\upm@definition@old@listtheoremname\listtheoremname%
+ \global\let\upm@definition@old@upmtheoremopt\upm@definition@upmtheoremopt%
+ \gdef\listtheoremname{#4}%
+ \renewcommand{\upm@definition@upmtheoremopt}[1]{}%
+ \expandafter\listoftheorems[ignoreall,show={upm#2}]%
+ \global\let\listtheoremname\upm@definition@old@listtheoremname%
+ \global\let\upm@definition@upmtheoremopt\upm@definition@old@upmtheoremopt%
+ }%
+ }{%
+ \@latex@warning{Your version of the thmtools is too old. I recommend you to install the version 2012/05/04, or later.}
+ \global\@namedef{listof#2s}{%
+ \global\let\upm@tmp\listtheoremname%
+ \gdef\listtheoremname{#4}%
+ \listoftheorems%
+ \global\let\listtheoremname\upm@tmp%
+ }%
+ }
+}
+\@onlypreamble\declareupmtheorem
+
+\gdef\thmtformatoptarg#1{\upm@column@char\ #1}%
+
+% Permits to define an part of the definition's name that is
+% rendered only in core part of the document, not in the
+% list of theorems
+\gdef\upm@definition@upmtheoremopt#1{#1}
+\gdef\upmtheoremopt#1{\protect\upm@definition@upmtheoremopt{#1}}
+
+%-----
+% Declare the definition environment
+\declareupmtheorem{definition}{\definitionname}{\listdefinitionname}
+
+%----------------------------------------
+% ENVIRONMENT FOR EMPHBOX
+%----------------------------------------
+
+%-----
+% Defining the style for the emphbox
+\colorlet{emphboxbackground}{backtableheader}
+\colorlet{emphboxborder}{fronttableheader}
+\colorlet{emphboxtext}{fronttableheader}
+
+\NewEnviron{emphbox}[1][\linewidth]{%
+ \begin{framedcolorminipage}{#1}{emphboxborder}{emphboxbackground}%
+ \centering\color{emphboxtext}\BODY%
+ \end{framedcolorminipage}%
+}
+
+\endinput
--- /dev/null
+% Front page for Unified Process Methodology
+%
+% Copyright (c) 2006-2009 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+
+\global\edef\upm@package@fp@ver{2009/10/30}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-frontpage}[\upm@package@fp@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%-----
+% Locales
+\def\upm@front@lang@english{
+ \gdef\upm@lang@@{\message{**** upmethodology-frontpage is using English language ****}}%
+ \gdef\upm@lang@front@authors{\upm@lang@document@authors}
+}
+\def\upm@front@lang@french{
+ \gdef\upm@lang@@{\message{**** upmethodology-frontpage is using French language ****}}%
+ \gdef\upm@lang@front@authors{\upm@lang@document@authors}
+}
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+ \upm@front@lang@french
+}
+\DeclareOption{francais}{%
+ \upm@front@lang@french
+}
+\DeclareOption{english}{%
+ \upm@front@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions
+\upm@lang@@
+
+\RequirePackage{upmethodology-extension}
+\RequirePackage{upmethodology-document}
+
+% Declare the temporary dimensions
+\newdimen\upm@front@tmpa
+\newdimen\upm@front@tmpb
+
+%-----
+% String format
+\def\upm@front@force@single@spacing#1{{\begin{singlespace}#1\end{singlespace}}}
+\def\upm@front@maintitle@fmt#1{\Huge \scshape #1}
+\def\upm@front@project@fmt#1{\textbf{\Large #1}}
+\def\upm@front@subproject@fmt#1{\textbf{\large #1}}
+\def\upm@front@document@fmt#1{\textbf{\normalsize #1}}
+\def\upm@front@info@fmt#1{{\normalsize #1}}
+\def\upm@front@author@fmt#1{%
+ \begin{upmfontsize}{\small}#1\end{upmfontsize}%
+ }
+
+%-----
+% Define the command to put the title with a classic layout
+\newcommand{\upm@front@layout@classic}{%
+ \message{************ USE CLASSIC FRONT COVER}
+ \begin{titlepage}%
+ \begin{center}
+
+ % Illustration picture
+ \Ifelsedefined{frontillustration}{%
+ \noindent\expandafter\includegraphics[width=\Get{frontillustrationsize}\expandafter\linewidth]{\Get{frontillustration}}
+ }{%
+ \Ifdefined{logo}{\noindent\vfill\expandafter\includegraphics[width=.4\linewidth]{\Get{logo}}}%
+ }%
+
+ % Project name
+ \vspace{1cm}
+ \upm@front@force@single@spacing{\upm@front@maintitle@fmt{\theupmproject}}
+ \vspace{1cm}
+
+ % Document title
+ \noindent\rule{\linewidth}{1mm} \\
+ \noindent\raggedleft\upm@front@project@fmt{\theupmproject} \\
+ \Ifnotempty{\theupmsubproject}{\noindent\raggedleft\upm@front@subproject@fmt{\theupmsubproject}\\}
+ \vspace{.5cm}
+ \noindent\raggedleft\upm@front@document@fmt{\theupmdocname} \\
+ \noindent\rule{\linewidth}{1mm} \\
+
+ \vspace{1cm}
+
+ % Document information
+ \noindent\raggedleft\begin{tabular}{rr}
+ \upm@front@info@fmt{\upm@lang@docref:} & \upm@front@info@fmt{\theupmdocref} \\
+ \upm@front@info@fmt{\upm@lang@version:} & \upm@front@info@fmt{\theupmversion} \\
+ \upm@front@info@fmt{\upm@lang@lastupdate@short:} & \upm@front@info@fmt{\theupmdate} \\
+ \upm@front@info@fmt{\upm@lang@status:} & \upm@front@info@fmt{\theupmstatus} \\
+ \end{tabular}
+
+ \vfill
+ \Ifelsedefined{frontillustration}{%
+ \Ifelsedefined{logo}{%
+ \noindent\begin{tabularx}{\linewidth}{l>{\raggedleft}X}%
+ \expandafter\includegraphics[width=.3\linewidth]{\Get{logo}} & %
+ \upm@front@author@fmt{\upm@lang@front@authors:~\theauthorlist} \\%
+ \end{tabularx}%
+ }{%
+ \noindent\raggedleft\upm@front@author@fmt{\upm@lang@front@authors:~\theauthorlist} \\%
+ }%
+ }{%
+ \noindent\raggedleft\upm@front@author@fmt{\upm@lang@front@authors:~\theauthorlist} \\%
+ }%
+
+ \end{center}
+ \end{titlepage}
+}
+
+
+%-----
+% Define the command to put the title with a classic layout
+\newcommand{\upm@front@layout@modern}{%
+ \message{************ USE MODERN FRONT COVER}
+ \begin{titlepage}%
+ % Project name
+ \upm@front@maintitle@fmt{\theupmproject} \\
+ \noindent\rule{\linewidth}{.5mm} \\
+
+ % Document title
+ \Ifnotempty{\theupmsubproject}{\noindent\raggedright\upm@front@subproject@fmt{\theupmsubproject}\\}
+ \vspace{.5cm}
+ \noindent\raggedright\upm@front@force@single@spacing{\upm@front@document@fmt{\theupmdocname}}
+
+ \vfill
+
+ \vbox{
+ \begin{picture}(0,0)
+ \Ifelsedefined{frontillustration}{%
+ \put(-110,-100){%
+ \includegraphics[width=\Get{frontillustrationsize}\expandafter\linewidth]{\Get{frontillustration}}%
+ }%
+ }{%
+ }
+ \upm@front@tmpa=\linewidth
+ \advance\upm@front@tmpa-.4\linewidth
+ \put(\strip@pt\upm@front@tmpa,75){
+ \begin{tabular*}{.4\linewidth}{lr}
+ \upm@front@info@fmt{\upm@lang@docref:} & \upm@front@info@fmt{\theupmdocref} \\
+ \upm@front@info@fmt{\upm@lang@version:} & \upm@front@info@fmt{\theupmversion} \\
+ \upm@front@info@fmt{\upm@lang@lastupdate@short:} & \upm@front@info@fmt{\theupmdate} \\
+ \upm@front@info@fmt{\upm@lang@status:} & \upm@front@info@fmt{\theupmstatus} \\
+ \end{tabular*}
+ }
+ \upm@front@tmpa=\linewidth
+ \advance\upm@front@tmpa-.3\linewidth
+ \Ifdefined{logo}{
+ \put(\strip@pt\upm@front@tmpa,-50){
+ \expandafter\includegraphics[width=.3\linewidth]{\Get{logo}}%
+ }
+ }
+ \end{picture}
+
+ }
+ \end{titlepage}
+}
+
+\newcommand{\upm@front@setfrontlayout}[2]{%
+ \ifthenelse{\equal{#1}{classic}}{%
+ \Set{frontillustrationsize}{.6}%
+ \global\let\upm@front@layout\upm@front@layout@classic%
+ }{%
+ \ifthenelse{\equal{#1}{modern}}{%
+ \Set{frontillustrationsize}{1}
+ \global\let\upm@front@layout\upm@front@layout@modern%
+ }{%
+ \ifthenelse{\equal{#1}{custom}}{#2}{\errmessage{invalid front layout theme: #1}}%
+ }%
+ }%
+}
+
+%----
+% Set the front page layout as the classic layout theme
+%\setfrontcover{layout_name}
+\newcommand{\setfrontcover}[1]{%
+ \upm@front@setfrontlayout{#1}{\errmessage{invalid front layout theme: #1}}%
+}
+\newcommand{\setfrontlayout}[1]{\errmessage{"\string\setfrontlayout" is deprecated. Use "\string\setfrontcover" insteed}}
+
+\setfrontcover{classic}
+
+\renewcommand{\maketitle}{%
+ \Ifdefined{frontpage}{
+ \upm@front@setfrontlayout{\Get{frontpage}}{%
+ \message{************ USE CUSTOM FRONT COVER}
+ \gdef\upm@front@layout{%
+ \begin{titlepage}%
+ \Get{frontpage@custom}%
+ \end{titlepage}%
+ }%
+ }%
+ }%
+ \upm@front@layout}%
+\newcommand{\makefrontcover}{\maketitle}
+
+%----
+% Set the illustration figure on the front page
+%\setfrontillustration[size_factor]{filename}
+\newcommand{\setfrontillustration}[2][1]{%
+ \Set{frontillustrationsize}{#1}%
+ \Set{frontillustration}{#2}%
+}
+
+%----
+% Clear the illustration figure on the front page
+%\clearfrontillustration
+\newcommand{\clearfrontillustration}{%
+ \Set{frontillustrationsize}{1}%
+ \Unset{frontillustration}%
+}
+
+\endinput
--- /dev/null
+% Copyright (c) 2009-13 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+
+\global\edef\upm@package@private@doctype@ver{2014/03/03}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-p-common}[\upm@package@private@doctype@ver]
+
+\RequirePackage{ifthen}
+\RequirePackage{xspace}
+\RequirePackage{xcolor}
+\RequirePackage{ifpdf}
+
+%----------------------------------------
+% UPMVERSION MACRO
+%----------------------------------------
+\input UPMVERSION.def
+\def\upm@common@parseversion@to@tex#1#2#3#4#5#6#7#8#9\@nil{#1#2#3#4/#5#6/#7#8}
+\def\upm@common@parseversion@major#1#2#3#4#5#6#7#8#9\@nil{#1#2#3#4#5#6#7#8}
+\edef\ver@UPMVERSION@major{\expandafter\upm@common@parseversion@major\UPMVERSION-\relax\@nil}
+\edef\ver@UPMVERSION{\expandafter\upm@common@parseversion@to@tex\UPMVERSION\@nil}
+\expandafter\let\csname ver@UPMVERSION.sty\endcsname\ver@UPMVERSION
+\expandafter\let\csname ver@UPMVERSION.cls\endcsname\ver@UPMVERSION
+
+\gdef\UPMVERSIONTEST{\ver@UPMVERSION\\\ver@UPMVERSION@major}
+
+%----------------------------------------
+% ARAKHNE.ORG MACRO
+%----------------------------------------
+\providecommand{\arakhneorg}{{\begingroup%
+ {\usefont{T1}{pzc}{m}{it}\selectfont Arakhn\^e}%
+ {\usefont{T1}{phv}{bc}{sc}\selectfont\tiny.org}\endgroup}\xspace}
+
+%----------------------------------------
+% CURRENT LANGUAGE
+%----------------------------------------
+\def\upmcurrentlang{english}
+
+%----------------------------------------
+% TEST MACROS
+%----------------------------------------
+\long\def\Ifnotempty#1{\ifthenelse{\equal{#1}{\@empty}}{}}
+\long\def\Ifempty#1#2{\ifthenelse{\equal{#1}{\@empty}}{#2}{}}
+\long\def\Ifelseempty#1#2#3{\ifthenelse{\equal{#1}{\@empty}}{#2}{#3}}
+
+%----------------------------------------
+% TOC MACROS
+%----------------------------------------
+\newcommand{\newpageintoc}{\addtocontents{toc}{\protect\newpage}}
+
+%----------------------------------------
+% DOCUMENT TYPE
+%----------------------------------------
+\newif\ifupmbookformat
+\newif\ifupmreportformat
+\newif\ifupmarticleformat
+
+\upmbookformatfalse
+\upmreportformattrue
+\upmarticleformatfalse
+
+%----------------------------------------
+% PDF COLORS
+%----------------------------------------
+\newcommand{\setpdfcolor}[1]{}
+
+%----------------------------------------
+% CREATE COMMAND WITH ID AS NAME
+%----------------------------------------
+\def\upm@protect#1{\upm@p@protect #1\relax}
+\def\upm@p@protect#1#2\relax{%
+ \ifx\relax #1%
+ \relax
+ \else%
+ \string #1%
+ \ifx\relax #2%
+ \relax
+ \else
+ \upm@p@protect #2\relax%
+ \fi
+ \fi}
+
+\def\upm@namedef#1#2{%
+ \@namedef{\upm@protect{#1}}{#2}%
+}
+
+\def\upm@nameuse#1{%
+ \@nameuse{\upm@protect{#1}}%
+}
+
+\def\upm@nameundef#1{%
+ \expandafter\let\csname\upm@protect{#1}\endcsname\relax%
+}
+
+\def\upm@namelet@ext#1#2{%
+ \expandafter\expandafter\let\expandafter\upm@tmp\csname#2\endcsname%
+ \global\expandafter\let\csname#1\endcsname\upm@tmp%
+}
+
+\def\upm@ifdefinedname#1#2#3{%
+ \expandafter\ifx\csname\upm@protect{#1}\endcsname\relax%
+ #3%
+ \else%
+ #2%
+ \fi%
+}
+
+\newcommand{\upm@column@char}{\iflanguage{french}{ :}{:}}
+
+%----------------------------------------
+% GET THE REFERENCE ID WITHOUT \REF
+%----------------------------------------
+\gdef\upm@getref#1{%
+ \expandafter\ifx\csname r@#1\endcsname\relax
+ \nfss@text{\reset@font\bfseries ??}%
+ \else
+ \expandafter\expandafter\expandafter\@car\csname r@#1\endcsname\@nil
+ \fi
+}
+
+\gdef\upm@getpageref@filter#1#2#3#4#5{#2}
+
+\gdef\upm@getpageref#1{%
+ \expandafter\ifx\csname r@#1\endcsname\relax
+ \nfss@text{\reset@font\bfseries ??}%
+ \else%
+ \protected@xdef\upm@p@tmp@tmp{\protect\upm@getpageref@filter\csname r@#1\endcsname}%
+ \upm@p@tmp@tmp%
+ \global\let\upm@p@tmp@tmp\relax%
+ \fi
+}
+
+%----------------------------------------
+% INTERNAL COMMAND FOR TEXT SUPPER/SUB SCRIPT
+%----------------------------------------
+
+\let\upm@textsuperscript\textsuperscript
+
+\def\upm@textsubscript#1{%
+ {\m@th\ensuremath{_{\mbox{\fontsize\sf@size\z@#1}}}}}
+
+
+%----------------------------------------
+% MACRO THAT PERMITS TO LOOP ON A SEPARATOR
+%----------------------------------------
+
+\newif\ifupm@foreach@hasseparator
+\newif\ifupm@foreach@oneseparator
+
+\let\upm@foreach@end\relax
+
+\def\upm@foreach@rec#1{%
+ {\upm@foreach@searchseparator#1\upm@foreach@end\@nil}%
+ \ifupm@foreach@hasseparator%
+ \protected@xdef\upm@foreach@continue{\protect\upm@foreach@rec{\upm@foreach@rest}}%
+ \upm@foreach@body%
+ \upm@foreach@continue%
+ \else%
+ \ifupm@foreach@oneseparator\else%
+ \upm@foreach@lastbody%
+ \fi%
+ \fi%
+}
+
+% Loop on parts of a text given a specific separator.
+% In the bodies, the macros \upm@foreach@term is the current data.
+% #1: is the separator to consider
+% #2: is the data set
+% #3: is the body to run for each loop, except the last.
+% #4: is the body to run for the last loop.
+\def\upm@foreach#1\in#2\do#3#4{%
+ \global\upm@foreach@oneseparatorfalse%
+ \gdef\upm@foreach@searchseparator##1#1##2\@nil{%
+ \gdef\upm@foreach@term{##1}%
+ \ifx\upm@foreach@end##2%
+ \global\upm@foreach@hasseparatorfalse%
+ \else%
+ \gdef\upm@foreach@rest{##2}%
+ \global\upm@foreach@hasseparatortrue%
+ \global\upm@foreach@oneseparatortrue%
+ \fi%
+ }%
+ \gdef\upm@foreach@body{#3}%
+ \gdef\upm@foreach@lastbody{#4}%
+ \upm@foreach@rec{#2#1}%
+}
+
+%----------------------------------------
+% MACRO THAT PERMITS TO FIND A STRING
+%----------------------------------------
+\def\upm@ifin#1#2{\begingroup\edef\upm@tmp{\endgroup\noexpand\in@{#1}{#2}}\upm@tmp\ifin@}
+
+%-----------------------------------------
+% Option parameters
+\newif\ifupm@common@optlist@needdefault
+\gdef\upm@common@optlist@parseparams#1=#2\@nil{%
+ \ifthenelse{\equal{#2}{===}}{%
+ \global\upm@common@optlist@needdefaulttrue%
+ }{%
+ \global\upm@common@optlist@needdefaultfalse%
+ }%
+}
+\DeclareRobustCommand{\upm@common@optlist}[1]{%
+ {\upm@common@optlist@parseparams #1====\@nil}%
+}
+\newcommand{\upm@setkeys}[3]{%
+ \upm@common@optlist{#3}%
+ \ifupm@common@optlist@needdefault%
+ \expandafter\setkeys{#1}{#2=#3}%
+ \else%
+ \expandafter\setkeys{#1}{#3}%
+ \fi%
+}
+
+\endinput
--- /dev/null
+% Specification Description for Unified Process Methodology
+%
+% Copyright (c) 2006-2007 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+% Creation date: 2006-04-27
+% Modifications:
+% 2009-10-30 Clean code.
+% 2007-03-19 Add localization.
+%
+
+\global\edef\upm@package@spec@ver{2009/10/30}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-spec}[\upm@package@spec@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+\RequirePackage[normalem]{ulem}
+
+\RequirePackage{upmethodology-fmt}
+\RequirePackage{upmethodology-code}
+
+%------------------------------------
+% LOCALIZATION
+%------------------------------------
+\def\upm@spec@lang@english {
+ \gdef\upm@lang@@{\message{**** upmethodology-spec is using English language ****}}%
+ \gdef\upm@spec@lang@description{Description}
+ \gdef\upm@spec@lang@returned@values{returned value(s)}
+ \gdef\upm@spec@lang@except@for{Except for}
+ \gdef\upm@spec@lang@modifier@public{{\tiny+}}
+ \gdef\upm@spec@lang@modifier@protected{{\tiny\#}}
+ \gdef\upm@spec@lang@modifier@private{{\tiny--}}
+ \gdef\upm@spec@lang@modifier@static##1{{\uline{##1}}}
+ \gdef\upm@spec@lang@modifier@const{query}
+ \gdef\upm@spec@lang@modifier@final{isLeaf}
+ \gdef\upm@spec@lang@modifier@abstract{abstract}
+ \gdef\upm@spec@lang@modifier@root{isRoot}
+ \gdef\upm@spec@lang@modifier@inout{\ensuremath{\leftrightarrow}}
+ \gdef\upm@spec@lang@modifier@in{\ensuremath{\rightarrow}}
+ \gdef\upm@spec@lang@modifier@out{\ensuremath{\leftarrow}}
+}
+\def\upm@spec@lang@french {
+ \gdef\upm@lang@@{\message{**** upmethodology-spec is using French language ****}}%
+ \gdef\upm@spec@lang@description{Description}
+ \gdef\upm@spec@lang@returned@values{valeur(s) retourn\'ee(s)}
+ \gdef\upm@spec@lang@except@for{Except\'e pour}
+ \gdef\upm@spec@lang@modifier@public{{\tiny+}}
+ \gdef\upm@spec@lang@modifier@protected{{\tiny\#}}
+ \gdef\upm@spec@lang@modifier@private{{\tiny--}}
+ \gdef\upm@spec@lang@modifier@static##1{{\uline{##1}}}
+ \gdef\upm@spec@lang@modifier@const{requ\^ete}
+ \gdef\upm@spec@lang@modifier@final{estFeuille}
+ \gdef\upm@spec@lang@modifier@abstract{abstra\^{\i}t}
+ \gdef\upm@spec@lang@modifier@root{estRacine}
+ \gdef\upm@spec@lang@modifier@inout{\ensuremath{\leftrightarrow}}
+ \gdef\upm@spec@lang@modifier@in{\ensuremath{\rightarrow}}
+ \gdef\upm@spec@lang@modifier@out{\ensuremath{\leftarrow}}
+}
+
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+ \upm@spec@lang@french
+}
+\DeclareOption{francais}{%
+ \upm@spec@lang@french
+}
+\DeclareOption{english}{%
+ \upm@spec@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions
+\upm@lang@@
+
+%------------------------------------
+% DETAILLED SPECIFICATION
+%------------------------------------
+
+\newlength{\upm@spec@detailspec@description@width}
+\setlength{\upm@spec@detailspec@description@width}{3cm}
+
+\newsavebox{\upm@spec@detailspec@savebox}
+\newlength{\upm@spec@detailspec@itrn@width}
+
+\newcounter{upm@detailspec@return@counter}
+\newcounter{upm@detailspec@function@counter}
+
+\newif\ifupm@spec@showdescription
+\newif\ifupm@spec@showparams
+\newif\ifupm@spec@showreturns
+\newif\ifupm@spec@firstparam
+\newif\ifupm@spec@modifier@has@static
+\newif\ifupm@spec@modifier@has@const
+\newif\ifupm@spec@modifier@has@final
+\newif\ifupm@spec@modifier@has@abstract
+\newif\ifupm@spec@modifier@has@root
+\newif\ifupm@spec@modifier@has@public
+\newif\ifupm@spec@modifier@has@protected
+\newif\ifupm@spec@modifier@has@private
+\newif\ifupm@spec@tmp@a
+
+\newcommand{\upm@spec@head}[2]{#1}
+\newcommand{\upm@spec@tail}[2]{#2}
+
+%-----
+%\upm@spec@func@modifiers{modifiers}
+\newcommand{\upm@spec@func@modifiers}[1]{%
+ \global\upm@spec@modifier@has@staticfalse%
+ \global\upm@spec@modifier@has@constfalse%
+ \global\upm@spec@modifier@has@finalfalse%
+ \global\upm@spec@modifier@has@abstractfalse%
+ \global\upm@spec@modifier@has@rootfalse%
+ \global\upm@spec@modifier@has@publicfalse%
+ \global\upm@spec@modifier@has@protectedfalse%
+ \global\upm@spec@modifier@has@privatefalse%
+ \upm@spec@func@modifiers@scan{#1}%
+}
+\newcommand{\upm@spec@func@modifiers@scan}[1]{%
+ \upm@ifnotempty{#1}{%
+ \edef\upm@reserved@a{\upm@spec@head #1\@empty\@empty}%
+ \edef\upm@reserved@b{\upm@spec@tail #1\@empty\@empty}%
+ \ifthenelse{\equal{\upm@reserved@a}{+}}{%
+ %public
+ \global\upm@spec@modifier@has@publictrue%
+ \global\upm@spec@modifier@has@protectedfalse%
+ \global\upm@spec@modifier@has@privatefalse%
+ }{%
+ \ifthenelse{\equal{\upm@reserved@a}{=}}{%
+ %protected
+ \global\upm@spec@modifier@has@publicfalse%
+ \global\upm@spec@modifier@has@protectedtrue%
+ \global\upm@spec@modifier@has@privatefalse%
+ }{%
+ \ifthenelse{\equal{\upm@reserved@a}{\#}}{%
+ %protected
+ \global\upm@spec@modifier@has@publicfalse%
+ \global\upm@spec@modifier@has@protectedtrue%
+ \global\upm@spec@modifier@has@privatefalse%
+ }{%
+ \ifthenelse{\equal{\upm@reserved@a}{-}}{%
+ %protected
+ \global\upm@spec@modifier@has@publicfalse%
+ \global\upm@spec@modifier@has@protectedfalse%
+ \global\upm@spec@modifier@has@privatetrue%
+ }{%
+ \ifthenelse{\equal{\upm@reserved@a}{s}}{%
+ %static
+ \global\upm@spec@modifier@has@statictrue%
+ }{%
+ \ifthenelse{\equal{\upm@reserved@a}{c}}{%
+ %query / const
+ \global\upm@spec@modifier@has@consttrue%
+ }{%
+ \ifthenelse{\equal{\upm@reserved@a}{l}}{%
+ %isLeaf
+ \global\upm@spec@modifier@has@finaltrue%
+ }{%
+ \ifthenelse{\equal{\upm@reserved@a}{a}}{%
+ %abstract
+ \global\upm@spec@modifier@has@abstracttrue%
+ }{%
+ \ifthenelse{\equal{\upm@reserved@a}{r}}{%
+ %isRoot
+ \global\upm@spec@modifier@has@roottrue%
+ }{}}}}}}}}}%
+ \expandafter\upm@spec@func@modifiers@scan{\upm@reserved@b}%
+ }%
+}
+
+%-----
+%\upm@spec@param@modifiers{modifiers}
+\newcommand{\upm@spec@param@modifiers}[1]{%
+ \upm@ifnotempty{#1}{%
+ \ifthenelse{\equal{#1}{out}}{%
+ %out
+ \upm@spec@lang@modifier@out%
+ }{
+ \ifthenelse{\equal{#1}{inout}}{%
+ %inout
+ \upm@spec@lang@modifier@inout%
+ }{
+ %in
+ \upm@spec@lang@modifier@in%
+ }}
+ }%
+}
+
+%-----
+\def\upm@spec@trim#1{#1}
+\newcommand{\upm@spec@splitparams}[1]{%
+ \upm@ifnotempty{#1}{%
+ \upm@spec@firstparamtrue
+ \@for\reserved@a:=#1\do{%
+ \ifupm@spec@firstparam\upm@spec@firstparamfalse\else, \fi%
+ \mbox{\upm@spec@trim{\reserved@a}}%
+ }%
+ \upm@spec@trim
+ }%
+}
+
+%-----
+%\begin{upm@spec@detailspec}[width]{title}...\end{detailspec}
+\newenvironment{upm@spec@detailspec}[2][\linewidth]{%
+
+ \setcounter{upm@detailspec@return@counter}{0}
+ \setcounter{upm@detailspec@function@counter}{0}
+
+ \gdef\upm@spec@detailspec@width{#1}
+ \gdef\upm@spec@detailspec@title{#2}
+ \gdef\upm@spec@functions{}
+ \gdef\upm@spec@parameters{}
+ \gdef\upm@spec@global@return{}
+ \gdef\upm@spec@local@return{}
+
+ %-----
+ %\speccons[modifiers]{name}{prototype}
+ \newcommand{\speccons}[3][]{\specfunc[##1]{}{##2}{##3}}
+
+ %-----
+ %\specget[modifiers]{return_type}{name}
+ \newcommand{\specget}[3][]{\specfunc[c##1]{##2}{##3}{}}
+
+ %-----
+ %\specset[modifiers]{name}{prototype}
+ \newcommand{\specset}[3][]{\specfunc[##1]{\jvoid}{##2}{##3}{}}
+
+ %-----
+ %\specfunc[modifiers]{return_type}{name}{prototype}
+ \newcommand{\specfunc}[4][+]{%
+ \addtocounter{upm@detailspec@function@counter}{1}%
+ \protected@xdef\upm@spec@reserved@a{\protect\csname upm@detailspec@return@ptr@\theupm@detailspec@function@counter\endcsname}%
+ \gdef\upm@spec@reserved@b{}
+ \upm@ifnotempty{##2}{\gdef\upm@spec@reserved@b{\string:\ }}
+
+ \gdef\upm@spec@reserved@c{}%
+ \upm@spec@func@modifiers{##1}%
+ \ifupm@spec@modifier@has@private\gdef\upm@spec@reserved@c{\upm@spec@lang@modifier@private}%
+ \else\ifupm@spec@modifier@has@protected\gdef\upm@spec@reserved@c{\upm@spec@lang@modifier@protected}%
+ \else\gdef\upm@spec@reserved@c{\upm@spec@lang@modifier@public}\fi\fi%
+
+ \gdef\upm@spec@reserved@d{##3}%
+ \ifupm@spec@modifier@has@static%
+ \protected@xdef\upm@spec@reserved@d{\protect\upm@spec@lang@modifier@static{\upm@spec@reserved@d}}%
+ \fi%
+
+ \gdef\upm@spec@reserved@e{}%
+ \upm@spec@tmp@afalse%
+ \ifupm@spec@modifier@has@const\upm@spec@tmp@atrue\fi%
+ \ifupm@spec@modifier@has@final\upm@spec@tmp@atrue\fi%
+ \ifupm@spec@modifier@has@abstract\upm@spec@tmp@atrue\fi%
+ \ifupm@spec@modifier@has@root\upm@spec@tmp@atrue\fi%
+ \ifupm@spec@tmp@a%
+ \ifupm@spec@modifier@has@const%
+ \gdef\upm@spec@reserved@e{\upm@spec@lang@modifier@const}%
+ \fi
+ \ifupm@spec@modifier@has@final%
+ \upm@ifnotempty{\upm@spec@reserved@e}{%
+ \xdef\upm@spec@reserved@e{\upm@spec@reserved@e,}}%
+ \protected@xdef\upm@spec@reserved@e{\upm@spec@reserved@e\protect\upm@spec@lang@modifier@final}%
+ \fi
+ \ifupm@spec@modifier@has@abstract%
+ \upm@ifnotempty{\upm@spec@reserved@e}{%
+ \xdef\upm@spec@reserved@e{\upm@spec@reserved@e,}}%
+ \protected@xdef\upm@spec@reserved@e{\upm@spec@reserved@e\protect\upm@spec@lang@modifier@abstract}%
+ \fi
+ \ifupm@spec@modifier@has@root%
+ \upm@ifnotempty{\upm@spec@reserved@e}{%
+ \xdef\upm@spec@reserved@e{\upm@spec@reserved@e,}}%
+ \protected@xdef\upm@spec@reserved@e{\upm@spec@reserved@e\protect\upm@spec@lang@modifier@root}%
+ \fi
+ \protected@xdef\upm@spec@reserved@e{ \protect\{\upm@spec@reserved@e\protect\}}
+ \fi%
+
+ \protected@xdef\upm@spec@functions{\upm@spec@functions {\upm@spec@reserved@c}\protect&%
+ {\upm@spec@reserved@d}\protect&%
+ \string(\protect&\protect\upm@spec@splitparams{##4}\string) {\upm@spec@reserved@b##2{\upm@spec@reserved@a}{\upm@spec@reserved@e}}\protect\\}%
+
+ \global\let\upm@spec@reserved@a\relax
+ \global\let\upm@spec@reserved@b\relax
+ \global\let\upm@spec@reserved@c\relax
+ \global\let\upm@spec@reserved@d\relax
+ \global\let\upm@spec@reserved@e\relax
+ \expandafter\gdef\csname upm@detailspec@return@ptr@\theupm@detailspec@function@counter\endcsname{}
+ }
+
+ %-----
+ %\specreturn{description}
+ \newcommand{\specreturn}[1]{%
+ \addtocounter{upm@detailspec@return@counter}{1}%
+ \expandafter\protected@xdef\csname upm@detailspec@return@ptr@\theupm@detailspec@function@counter\endcsname{%
+ {\protect\tiny\protect\ensuremath{_{\protect\string[\theupm@detailspec@return@counter\protect\string]}}}%
+ }%
+ \protected@xdef\upm@spec@local@return{\upm@spec@local@return {\protect\tiny\protect\string[\theupm@detailspec@return@counter\protect\string]} \protect& ##1 \protect\\}%
+ }
+
+ %-----
+ %\specglobalreturn{description}
+ \newcommand{\specglobalreturn}[1]{\gdef\upm@spec@global@return{##1}}
+
+ %-----
+ %\specparam[in|inout|out]{name}{description}
+ \newcommand{\specparam}[3][in]{%
+ \protected@xdef\upm@spec@parameters{\upm@spec@parameters \protect\upm@spec@param@modifiers{##1} \protect& {##2:} \protect& {##3} \protect\\}
+ }
+
+ %-----
+ %\specendhline
+ \newcommand{\specendhline}{\gdef\upm@detailspec@end@hline{\hline}}
+
+ %-----
+ %\specstarthline
+ \newcommand{\specstarthline}{\gdef\upm@detailspec@start@hline{\hline}}
+
+ \setlength{\upm@spec@detailspec@itrn@width}{#1}
+ \addtolength{\upm@spec@detailspec@itrn@width}{-\the\upm@spec@detailspec@description@width}
+ \addtolength{\upm@spec@detailspec@itrn@width}{-2\tabcolsep}
+
+ \begin{lrbox}{\upm@spec@detailspec@savebox}
+ \begin{minipage}[t]{\upm@spec@detailspec@itrn@width}%
+}{%
+ \end{minipage}
+ \end{lrbox}%
+
+ \gdef\upm@detailspec@separator{}
+ \upm@spec@showreturnsfalse%
+
+ \ifthenelse{\equal{\upm@spec@global@return}{\@empty}}{%
+ \gdef\upm@detailspec@return@section{}
+ \upm@ifnotempty{\upm@spec@local@return}{
+ \gdef\upm@detailspec@separator{ & & & \\}
+ \protected@xdef\upm@detailspec@return@section{\upm@spec@local@return}%
+ \upm@spec@showreturnstrue%
+ }%
+ }{%
+ \upm@ifnotempty{\upm@spec@local@return}{%
+ \gdef\upm@detailspec@separator{ & & & \\}
+ \gdef\upm@spec@reserved@a{ \upm@spec@lang@except@for:\protect\upm@spec@local@return}}%
+ \protected@xdef\upm@detailspec@return@section{%
+ \upm@spec@global@return\upm@spec@reserved@a%
+ }%
+ \upm@spec@showreturnstrue%
+ }
+
+ \ifthenelse{\equal{\upm@spec@detailspec@title}{\@empty}}{
+ \gdef\upm@spec@reserved@c{}
+ }{
+ \gdef\upm@spec@reserved@c{\hline%
+ \multicolumn{4}{>{\columncolor{backtableheader}}l}{\color{fronttableheader}{\large\textsc{\upm@spec@detailspec@title}}} \\%
+ }
+ \gdef\upm@detailspec@start@hline{\hline}%
+ \upm@spec@showdescriptiontrue%
+ }
+
+ \upm@spec@showparamsfalse%
+
+ \upm@ifnotempty{\upm@spec@parameters}{%
+ \ifupm@spec@showdescription%
+ \gdef\upm@detailspec@separator{ & & & \\}%
+ \fi%
+ \upm@ifnotempty{\upm@spec@functions}{%
+ \gdef\upm@detailspec@separator{ & & & \\}%
+ }%
+ \upm@spec@showparamstrue%
+ }%
+
+ \vspace{.5cm}\noindent\begin{tabularx}{\the\upm@spec@detailspec@width}{|clr@{}>{\raggedright\arraybackslash}X|}
+ \upm@spec@reserved@c%
+ \upm@detailspec@start@hline%
+ \ifupm@spec@showdescription
+ \multicolumn{4}{|X|}{%
+ \begin{tabularx}{\linewidth}{@{}lX@{}}%
+ \upm@spec@lang@description: & \usebox{\upm@spec@detailspec@savebox} \\%
+ \end{tabularx}%
+ } \\%
+ \hline%
+ \fi
+ \upm@spec@functions%
+ \upm@detailspec@separator%
+ \ifupm@spec@showparams%
+ \multicolumn{4}{|X|}{%
+ \begin{tabularx}{\linewidth}{@{}l@{}lX@{}}%
+ \upm@spec@parameters%
+ \end{tabularx}%
+ } \\%
+ \fi%
+ \ifupm@spec@showreturns%
+ \multicolumn{4}{|X|}{%
+ \textit{\upm@spec@lang@returned@values}: \newline%
+ \begin{tabularx}{\linewidth}{@{}lX@{}}%
+ \upm@detailspec@return@section%
+ \end{tabularx}%
+ } \\%
+ \fi%
+ \upm@detailspec@end@hline%
+ \end{tabularx}\vspace{.5cm}%
+
+ \global\let\@arraycr\upm@arraycr
+
+ \global\let\upm@spec@detailspec@width\relax%
+ \global\let\upm@spec@detailspec@title\relax%
+ \global\let\upm@spec@functions\relax%
+ \global\let\upm@spec@parameters\relax%
+ \global\let\upm@spec@global@return\relax%
+ \global\let\upm@spec@local@return\relax%
+ \global\let\upm@detailspec@return@section\relax%
+ \global\let\upm@spec@reserved@a\relax%
+ \global\let\upm@spec@reserved@b\relax%
+ \global\let\upm@spec@reserved@c\relax%
+ \global\let\upm@detailspec@separator\relax%
+ \global\let\upm@detailspec@start@hline\relax%
+ \global\let\upm@detailspec@end@hline\relax%
+}
+
+%-----
+%\begin{detailspec}}[width]{title}...\end{detailspec}....
+\newenvironment{detailspec}[2][\linewidth]
+{%
+ \upm@spec@showdescriptiontrue%
+ \gdef\upm@detailspec@start@hline{\hline}%
+ \gdef\upm@detailspec@end@hline{\hline}%
+ \begin{upm@spec@detailspec}[#1]{#2}%
+}
+{%
+ \end{upm@spec@detailspec}%
+}
+
+%-----
+%\begin{detailspec}}[width]{title}...\end{detailspec}....
+\newenvironment{detailspec*}[2][\linewidth]
+{%
+ \upm@spec@showdescriptionfalse%
+ \gdef\upm@detailspec@start@hline{}%
+ \gdef\upm@detailspec@end@hline{}%
+ \begin{upm@spec@detailspec}[#1]{#2}%
+}
+{%
+ \end{upm@spec@detailspec}%
+}
+
+\endinput
--- /dev/null
+% Task management for Unified Process Methodology
+%
+% Copyright (c) 2006-2007 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+% Creation date: 2006-04-20
+% Modifications:
+% 2009-10-30 Clean code.
+% 2007-03-19 Add localization.
+%
+
+\global\edef\upm@package@task@ver{2009/10/30}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-task}[\upm@package@task@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%----- LOCALIZATION
+\def\upm@task@lang@english{
+ \gdef\upm@lang@@{\message{**** upmethodology-task is using English language ****}}%
+ \gdef\upm@task@lang@task{Task}
+ \gdef\upm@task@lang@description{Description}
+ \gdef\upm@task@lang@startat{Start at}
+ \gdef\upm@task@lang@endat{End at}
+ \gdef\upm@task@lang@archieved{Archieved}
+ \gdef\upm@task@lang@managers{Managers}
+ \gdef\upm@task@lang@members{Members}
+ \gdef\upm@task@lang@milestones{Milestones}
+ \gdef\upm@task@lang@subtask{Sub-task of}
+}
+\def\upm@task@lang@french{
+ \gdef\upm@lang@@{\message{**** upmethodology-task is using French language ****}}%
+ \gdef\upm@task@lang@task{T\^ache}
+ \gdef\upm@task@lang@description{Description}
+ \gdef\upm@task@lang@startat{D\'ebut le}
+ \gdef\upm@task@lang@endat{Fin le}
+ \gdef\upm@task@lang@archieved{Termin\'ee}
+ \gdef\upm@task@lang@managers{R\'ef\'erent}
+ \gdef\upm@task@lang@members{Membres}
+ \gdef\upm@task@lang@milestones{\'Etapes}
+ \gdef\upm@task@lang@subtask{Sous-t\^ache de}
+}
+
+%----- OPTIONS
+\DeclareOption{french}{%
+ \upm@task@lang@french
+}
+\DeclareOption{francais}{%
+ \upm@task@lang@french
+}
+\DeclareOption{english}{%
+ \upm@task@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions
+\upm@lang@@
+
+\RequirePackage{upmethodology-version}
+
+%-----
+\newif\if@upm@task@displaydescription
+\newif\if@upm@task@rebuild
+\@upm@task@rebuildfalse
+
+\def\upm@task@define#1#2#3{%
+ \protected@write\@auxout{}{\string\global\string\@namedef{upm@task@#1@#2}{#3}}%
+ \ifthenelse{\equal{\csname upm@task@#1@#2\endcsname}{#3}}{}{\@upm@task@rebuildtrue}%
+ \global\@namedef{upm@task@#1@#2}{#3}%
+}
+
+\def\upm@task@define@list#1#2#3{%
+ \ifthenelse{\equal{\csname upm@task@#1@#2\endcsname}{\@empty}}{%
+ \expandafter\xdef\csname upm@task@#1@#2\endcsname{#3}%
+ }{%
+ \expandafter\xdef\csname upm@task@#1@#2\endcsname{%
+ \csname upm@task@#1@#2\endcsname, #3%
+ }%
+ }%
+ \AtEndDocument{\protected@write\@auxout{}{\string\global\string\@namedef{upm@task@#1@#2}{\csname upm@task@#1@#2\endcsname}}}
+}
+
+\newenvironment{upm@taskdescription}[1]{%
+ \global\@namedef{upm@task@#1@managers}{}%
+ \global\@namedef{upm@task@#1@members}{}%
+ \global\@namedef{upm@task@#1@milestones}{}%
+
+ \newcommand{\taskname}[1]{\upm@task@define{#1}{name}{##1}}
+ \newcommand{\tasksuper}[1]{\upm@task@define{#1}{super}{##1}}
+ \newcommand{\taskcomment}[1]{\upm@task@define{#1}{comment}{##1}}%
+ \newcommand{\taskprogress}[1]{\upm@task@define{#1}{progress}{##1}}%
+ \newcommand{\taskstart}[1]{\upm@task@define{#1}{startat}{##1}}%
+ \newcommand{\taskend}[1]{\upm@task@define{#1}{endat}{##1}}%
+ \newcommand{\taskmanager}[1]{\upm@task@define@list{#1}{managers}{##1}}
+ \newcommand{\taskmember}[1]{%
+ \upm@task@define@list{#1}{members}{##1}%
+ }
+ \newcommand{\taskmilestone}[2]{%
+ \upm@task@define@list{#1}{milestones}{##1}%
+ \upm@task@define{#1}{ml@##1}{##2}%
+ %\global\@namedef{upm@task@#1@description@milestones}{\upm@task@lang@milestones: & \multicolumn{2}{X|}{\parbox[t]{1.9\linewidth}{\thetaskmembers{#1}}} \\}
+ }
+
+
+ \def\upm@task@currenttask{#1}
+}{%
+ \if@upm@task@displaydescription\thetaskdescription{\upm@task@currenttask}\fi%
+ \let\upm@task@currenttask\relax%
+}
+
+%-----
+%\begin{taskdescription}{id}...\end{taskdescription}
+\newenvironment{taskdescription}[1]{%
+ \@upm@task@displaydescriptiontrue%
+ \upm@taskdescription{#1}%
+}{%
+ \endupm@taskdescription%
+}
+
+%-----
+%\begin{taskdescription*}{id}...\end{taskdescription*}
+\newenvironment{taskdescription*}[1]{%
+ \@upm@task@displaydescriptionfalse%
+ \upm@taskdescription{#1}%
+}{%
+ \endupm@taskdescription%
+}
+
+%-----
+%\thetasksuper{id}
+\newcommand{\thetasksuper}[1]{%
+ \expandafter\providecommand\csname upm@task@#1@super\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+ \expandafter\csname upm@task@#1@super\endcsname%
+}
+
+%-----
+%\thetaskname{id}
+\newcommand{\thetaskname}[1]{%
+ \expandafter\providecommand\csname upm@task@#1@name\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+ \expandafter\csname upm@task@#1@name\endcsname%
+}
+
+%-----
+%\thetaskcomment{id}
+\newcommand{\thetaskcomment}[1]{%
+ \expandafter\providecommand\csname upm@task@#1@comment\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+ \expandafter\csname upm@task@#1@comment\endcsname%
+}
+
+%-----
+%\thetaskprogress{id}
+\newcommand{\thetaskprogress}[1]{%
+ \expandafter\providecommand\csname upm@task@#1@progress\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+ \expandafter\csname upm@task@#1@progress\endcsname%
+}
+
+%-----
+%\thetaskstart{id}
+\newcommand{\thetaskstart}[1]{%
+ \expandafter\providecommand\csname upm@task@#1@startat\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+ \expandafter\csname upm@task@#1@startat\endcsname%
+}
+
+%-----
+%\thetaskend{id}
+\newcommand{\thetaskend}[1]{%
+ \expandafter\providecommand\csname upm@task@#1@endat\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+ \expandafter\csname upm@task@#1@endat\endcsname%
+}
+
+%-----
+%\thetaskmanagers{id}
+\newcommand{\thetaskmanagers}[1]{%
+ \expandafter\providecommand\csname upm@task@#1@managers\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+ \expandafter\csname upm@task@#1@managers\endcsname%
+}
+
+%-----
+%\thetaskmembers{id}
+\newcommand{\thetaskmembers}[1]{%
+ \expandafter\providecommand\csname upm@task@#1@members\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+ \expandafter\csname upm@task@#1@members\endcsname%
+}
+
+%-----
+%\thetaskmilestones{id}
+\newcommand{\thetaskmilestones}[1]{%
+ \expandafter\providecommand\csname upm@task@#1@milestones\endcsname{??\@latex@warning{The task identified by '#1' was not found.}\@upm@task@rebuildtrue}%
+ \expandafter\csname upm@task@#1@milestones\endcsname%
+}
+
+%-----
+%\thetaskmilestonecomment{id}{date}
+\newcommand{\thetaskmilestonecomment}[2]{%
+ \expandafter\providecommand\csname upm@task@#1@ml@#2\endcsname{??\@latex@warning{The task milestone identified by '#1' and '#2' was not found.}\@upm@task@rebuildtrue}%
+ \expandafter\csname upm@task@#1@ml@#2\endcsname%
+}
+
+\def\@upm@trim#1{#1}
+
+%-----
+%\thetaskdescription{id}
+\newcommand{\thetaskdescription}[2][\linewidth]{%
+ \ifthenelse{\equal{\csname upm@task@#2@members\endcsname}{\@empty}}{
+ \gdef\upm@task@tmp@a{}%
+ }{%
+ \gdef\upm@task@tmp@a{\upm@task@lang@members: & \multicolumn{2}{X|}{\parbox[t]{1.9\linewidth}{\thetaskmembers{#2}}} \\}%
+ }%
+ \ifthenelse{\equal{\csname upm@task@#2@milestones\endcsname}{\@empty}}{
+ \gdef\upm@task@tmp@b{}%
+ }{%
+ \gdef\upm@task@tmp@b{\hline \upm@task@lang@milestones: &%
+ \multicolumn{2}{X|}{\parbox[t]{1.95\linewidth}{%
+ \edef\upm@task@tmp@c{\csname upm@task@#2@milestones\endcsname}%
+ \def\upm@task@tmp@e{}%
+ \@for\reserved@a:=\upm@task@tmp@c\do{%
+ \edef\upm@task@tmp@d{\expandafter\@upm@trim\reserved@a}%
+ \protected@edef\upm@task@tmp@e{\upm@task@tmp@e \protect\item[\upm@task@tmp@d~:] \protect\thetaskmilestonecomment{#2}{\upm@task@tmp@d}}%
+ }%
+ \begin{description}\upm@task@tmp@e\end{description}%
+ }} \\}%
+ }%
+ \vspace{.25cm}\noindent\begin{mtabular}[#1]{3}{|X|X|X|}
+ \tabulartitle{{\upm@task@lang@task}~\textit{#2}: \thetaskname{#2}}
+ \hline
+ %description
+ \upm@task@lang@description: & \multicolumn{2}{X|}{\parbox[t]{1.9\linewidth}{\thetaskcomment{#2}}} \\
+ %sub-task
+ \expandafter\ifx\csname upm@task@#2@super\endcsname\relax\else%
+ \upm@task@lang@subtask: & \multicolumn{2}{X|}{\parbox[t]{1.9\linewidth}{{\upm@task@lang@task}~\textit{\csname upm@task@#2@super\endcsname}}} \\
+ \fi
+ \hline
+ %dates
+ \upm@task@lang@startat: & \upm@task@lang@endat: & \upm@task@lang@archieved: \\
+ \thetaskstart{#2} & \thetaskend{#2} & \thetaskprogress{#2}\% \\
+ \hline
+ %manager
+ \upm@task@lang@managers: & \multicolumn{2}{X|}{\parbox[t]{1.9\linewidth}{\thetaskmanagers{#2}}} \\
+ %members
+ \upm@task@tmp@a
+ %milestones
+ \upm@task@tmp@b
+ %\@nameuse{upm@task@#1@description@milestones}
+ \hline
+ \end{mtabular}\par\vspace{.5cm}%
+}
+
+\AtEndDocument{%
+ \if@upm@task@rebuild%
+ \@latex@warning@no@line{Project Task(s) may have changed.\MessageBreak%
+ Rerun to get cross-references right}\fi%
+
+}
+\endinput
--- /dev/null
+% Version management for Unified Process Methodology
+%
+% Copyright (c) 2006-2007 Stephane GALLAND <galland@arakhne.org>
+% Copyright (c) 2013 Stephane GALLAND <galland@arakhne.org>
+%
+% This program is free library; you can redistribute it and/or modify
+% it under the terms of the GNU Lesser General Public License as
+% published by the Free Software Foundation; either version 3 of the
+% License, or any later version.
+%
+% This library is distributed in the hope that it will be useful, but
+% WITHOUT ANY WARRANTY; without even the implied warranty of
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+% Lesser General Public License for more details.
+%
+% You should have received a copy of the GNU Lesser General Public
+% License along with this library; see the file COPYING. If not,
+% write to the Free Software Foundation, Inc., 59 Temple Place - Suite
+% 330, Boston, MA 02111-1307, USA.
+%
+
+\global\edef\upm@package@version@ver{2013/08/26}
+
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+\ProvidesPackage{upmethodology-version}[\upm@package@version@ver]
+
+\RequirePackage{upmethodology-p-common}
+
+%locales
+\def\upm@version@lang@english{
+ \gdef\upm@lang@@{\message{**** upmethodology-version is using English language ****}}%
+ \gdef\upm@lang@date{Date}
+ \gdef\upm@lang@updates{Updates}
+ \gdef\upm@lang@version{Version}
+ \gdef\upm@lang@version@history{Version History}
+ \gdef\upm@lang@restricted{Confidential}
+ \gdef\upm@lang@validable{Validable}
+ \gdef\upm@lang@validated{Validated}
+ \gdef\upm@lang@public{Public}
+}
+\def\upm@version@lang@french{
+ \gdef\upm@lang@@{\message{**** upmethodology-version is using French language ****}}%
+ \gdef\upm@lang@date{Date}
+ \gdef\upm@lang@updates{Modifications}
+ \gdef\upm@lang@version{Version}
+ \gdef\upm@lang@version@history{Historique}
+ \gdef\upm@lang@restricted{Confidentiel}
+ \gdef\upm@lang@validable{Validable}
+ \gdef\upm@lang@validated{Valid\'e}
+ \gdef\upm@lang@public{Publique}
+}
+
+%----------------------------------------
+% OPTIONS
+%----------------------------------------
+\DeclareOption{french}{%
+ \upm@version@lang@french
+}
+\DeclareOption{francais}{%
+ \upm@version@lang@french
+}
+\DeclareOption{english}{%
+ \upm@version@lang@english
+}
+\ExecuteOptions{english}
+\ProcessOptions*
+
+\upm@lang@@
+
+\RequirePackage{upmethodology-fmt}
+
+%tmp counter
+\newcount{\upm@tmp@a}
+
+% Internal information: first and last registered dates
+\let\upm@thefirstdate\@undefined
+\let\upm@thelastdate\@undefined
+
+%increment major part of version number
+\def\upm@incmajorversion#1.#2{%
+ \upm@tmp@a=#1\advance\upm@tmp@a + 1%
+ \global\edef\theupmversion{\the\upm@tmp@a.0}%
+}
+
+%increment minor part of version number
+\def\upm@incminorversion#1.#2{%
+ \upm@tmp@a=#2\advance\upm@tmp@a + 1%
+ \global\edef\theupmversion{#1.\the\upm@tmp@a}%
+}
+
+%list of updates
+\def\upm@update@list{}
+
+%add an update to the list
+\newcommand{\upm@addupdatetolist}[4]{%
+ \global\protected@edef\upm@update@list{%
+ \upm@update@list%
+ #1 & #2 & #3 \protect\\%
+ }
+}
+
+%-----
+% Available status' constants
+\def\upmrestricted{\upm@lang@restricted}
+\def\upmvalidable{\upm@lang@validable}
+\def\upmvalidated{\upm@lang@validated}
+\def\upmpublic{\upm@lang@public}
+
+%-----
+% Replies the modification date of the given version
+\newcommand{\upmdate}[1]{\@nameuse{upm@version@#1@updatedate}}
+
+%-----
+% Replies the modification description of the given version
+\newcommand{\upmdescription}[1]{\@nameuse{upm@version@#1@description}}
+
+%-----
+% Replies the status of the given version
+\newcommand{\upmstatus}[1]{\@nameuse{upm@version@#1@level}}
+
+%-----
+\newcommand{\upm@updateversion}[4]{%
+ \gdef\theupmdate{#2}%
+ \gdef\theupmlastmodif{#3}%
+ \gdef\theupmstatus{#4}%
+ \ifx\upm@thefirstdate\@undefined
+ \global\edef\upm@thefirstdate{#2}
+ \fi
+ \global\edef\upm@thelastdate{#2}
+ \@namedef{upm@version@#1@updatedate}{#2}%
+ \@namedef{upm@version@#1@description}{#3}%
+ \@namedef{upm@version@#1@level}{#4}%
+ \upm@addupdatetolist{#1}{#2}{#3}{#4}%
+}
+
+%-----
+%\updateversion{new_version}{update_date}{description}{status}
+\newcommand{\updateversion}[4]{%
+ \gdef\theupmversion{#1}%
+ \upm@updateversion{#1}{#2}{#3}{#4}%
+}
+
+%-----
+%\initialversion[version]{date}{description}{status}
+\newcommand{\initialversion}[4][0.1]{%
+ \updateversion{#1}{#2}{#3}{#4}%
+}
+
+%-----
+%\incversion{update_date}{description}{status}
+\newcommand{\incversion}[3]{%
+ \expandafter\upm@incmajorversion\theupmversion%
+ \upm@updateversion{\theupmversion}{#1}{#2}{#3}%
+}
+
+%-----
+%\incsubversion{update_date}{description}{status}
+\newcommand{\incsubversion}[3]{%
+ \expandafter\upm@incminorversion\theupmversion%
+ \upm@updateversion{\theupmversion}{#1}{#2}{#3}%
+}
+
+%-----
+% Version variables
+\def\theupmversion{0.1}
+\edef\theupmdate{\today}
+\def\theupmlastmodif{}
+\def\theupmstatus{\upmrestricted}
+
+%-----
+% Display the version history
+%\upmhistory[width]
+\newcommand{\upmhistory}[1][\linewidth]{%
+ \noindent\expandafter\begin{mtabular}[#1]{3}{|c|c|X|}
+ \tabulartitle{\upm@lang@version@history}%
+ \tabularheader{\upm@lang@version}{\upm@lang@date}{\upm@lang@updates}%
+ \upm@update@list
+ \hline
+ \expandafter\end{mtabular}\par\vspace{.5cm}%
+}
+
+%-----
+% Copyright date
+%\upmcopyrightdate
+\newcommand{\upmcopyrightdate}{%
+ \ifx\upm@thefirstdate\@undefined%
+ \edef\upm@tmp@copyright@a{\the\year}%
+ \else%
+ \edef\upm@tmp@copyright@a{\extractyear{\upm@thefirstdate}}%
+ \fi%
+ \ifx\upm@thelastdate\@undefined%
+ \def\upm@tmp@copyright@b{\the\year}%
+ \else%
+ \edef\upm@tmp@copyright@b{\extractyear{\upm@thelastdate}}%
+ \fi%
+ \ifthenelse{\equal{\upm@tmp@copyright@a}{\upm@tmp@copyright@b}}{%
+ \upm@tmp@copyright@a%
+ }{%
+ \upm@tmp@copyright@a-\upm@tmp@copyright@b%
+ }%
+}
+
+\endinput
--- /dev/null
+%%
+%% This is file `yfonts.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% yfonts.dtx (with options: `package')
+%%
+%% IMPORTANT NOTICE:
+%%
+%% For the copyright see the source file.
+%%
+%% Any modified versions of this file must be renamed
+%% with new filenames distinct from yfonts.sty.
+%%
+%% For distribution of the original source see the terms
+%% for copying and modification in the file yfonts.dtx.
+%%
+%% This generated file may be distributed as long as the
+%% original source files, as listed above, are part of the
+%% same distribution. (The sources need not necessarily be
+%% in the same archive or directory.)
+\ProvidesPackage{yfonts}
+ [2003/01/08 v1.3 (WaS)]
+\NeedsTeXFormat{LaTeX2e}[1994/12/01]
+\newif\ifyf@v
+\DeclareOption{varumlaut}{\yf@vtrue}
+\ProcessOptions\relax
+\DeclareFontEncoding{LY}{}{}
+\DeclareFontSubstitution{LY}{yfrak}{m}{n}
+\DeclareFontEncoding{LYG}{}{}
+\DeclareFontSubstitution{LYG}{ygoth}{m}{n}
+\DeclareFontFamily{LYG}{ygoth}{}
+\DeclareFontShape{LYG}{ygoth}{m}{n}{%
+<10><10.95><12><14.4><17.28><20.74><24.88>ygoth}{}
+\DeclareFontFamily{LY}{yfrak}{}
+\DeclareFontShape{LY}{yfrak}{m}{n}{%
+<10><10.95><12><14.4><17.28><20.74><24.88>yfrak}{}
+\DeclareFontFamily{LY}{ysmfrak}{}
+\DeclareFontShape{LY}{ysmfrak}{m}{n}{%
+ <10><10.95><12><14.4><17.28><20.74><24.88>ysmfrak}{}
+\DeclareFontFamily{LY}{yswab}{}
+\DeclareFontShape{LY}{yswab}{m}{n}{%
+<10><10.95><12><14.4><17.28><20.74><24.88>yswab}{}
+
+\DeclareFontFamily{U}{yinitas}{}
+\DeclareFontShape{U}{yinitas}{m}{n}{%
+<10>sfixed*yinitas%
+<10.95>sfixed*[42.34]yinitas%
+<12>sfixed*[46.39]yinitas%
+<14.4>sfixed*[55.68]yinitas%
+<17.28>sfixed*[66.82]yinitas%
+<20.74>sfixed*[80.19]yinitas%
+<24.88>sfixed*[96.20]yinitas%
+}{}
+\DeclareTextSymbol{\textemdash}{LYG}{124}
+\DeclareTextSymbol{\textendash}{LYG}{123}
+\DeclareTextComposite{\"}{LYG}{a}{91}
+\DeclareTextComposite{\"}{LYG}{o}{93}
+\DeclareTextComposite{\"}{LYG}{u}{94}
+\DeclareTextComposite{\"}{LYG}{e}{92}
+\DeclareTextSymbol{\ss}{LYG}{25}
+\DeclareTextCommand{\SS}{LYG}{SS}
+\DeclareTextSymbol{\i}{LYG}{16}
+\DeclareTextSymbol{\j}{LYG}{17}
+\DeclareTextSymbol{\textquotedblleft}{LYG}{95}
+\DeclareTextCommand{\grqq}{LYG}{\textquotedblleft}
+\DeclareTextSymbol{\textquotedblright}{LYG}{34}
+\DeclareTextCommand{\"}{LY}[1]{\UseTextAccent{OT1}{\"}{#1}}
+\DeclareTextAccent{\'}{LY}{19}
+\DeclareTextAccent{\.}{LY}{95}
+\DeclareTextAccent{\=}{LY}{22}
+\DeclareTextAccent{\^}{LY}{94}
+\DeclareTextAccent{\`}{LY}{18}
+\DeclareTextAccent{\~}{LY}{126}
+\DeclareTextAccent{\H}{LY}{125}
+\DeclareTextAccent{\u}{LY}{21}
+\DeclareTextAccent{\v}{LY}{20}
+\DeclareTextAccent{\r}{LY}{23}
+\DeclareTextSymbol{\textemdash}{LY}{124}
+\DeclareTextSymbol{\textendash}{LY}{123}
+\ifyf@v
+\DeclareTextComposite{\"}{LY}{a}{137}
+\DeclareTextComposite{\"}{LY}{o}{153}
+\DeclareTextComposite{\"}{LY}{u}{158}
+\DeclareTextComposite{\"}{LY}{e}{144}
+\else
+\DeclareTextComposite{\"}{LY}{a}{138}
+\DeclareTextComposite{\"}{LY}{o}{154}
+\DeclareTextComposite{\"}{LY}{u}{159}
+\DeclareTextComposite{\"}{LY}{e}{145}
+\fi
+\DeclareTextSymbol{\textsection}{LY}{60}
+\DeclareTextSymbol{\i}{LY}{16}
+\DeclareTextSymbol{\j}{LY}{17}
+\DeclareTextSymbol{\ss}{LY}{26}
+\DeclareTextSymbol{\etc}{LY}{201}
+\DeclareTextSymbol{\textquotedblleft}{LY}{34}
+\DeclareTextCommand{\grqq}{LY}{\textquotedblleft}
+\DeclareTextSymbol{\quotedblbase}{LY}{92}
+\DeclareTextSymbol{\textquoteleft}{LY}{`\`}
+\DeclareTextCommand{\grq}{LY}{\textquoteleft}
+\DeclareTextSymbol{\textquoteright}{LY}{`\'}
+\DeclareTextCommand{\SS}{LY}
+ {SS}
+\def\gothdefault{ygoth}
+\def\swabdefault{yswab}
+\def\frakdefault{yfrak}
+\def\initdefault{yinitas}
+\def\gothfamily{\usefont{LYG}{\gothdefault}{m}{n}}
+\def\swabfamily{\usefont{LY}{\swabdefault}{m}{n}}
+\def\frakfamily{\usefont{LY}{\frakdefault}{m}{n}}
+\def\initfamily{\usefont{U}{\initdefault}{m}{n}}
+\DeclareTextFontCommand{\textgoth}{\gothfamily}
+\DeclareTextFontCommand{\textswab}{\swabfamily}
+\DeclareTextFontCommand{\textfrak}{\frakfamily}
+\DeclareTextFontCommand{\textinit}{\initfamily}
+\newcommand{\yinipar}[1]{\par\noindent\yinitpar{#1}}
+\newcommand{\yinitpar}[1]{\setbox0=\hbox{\textinit{#1}}%
+\hangindent=\wd0\hangafter=-4\advance\hangindent by .25em
+{\dimen@=-3\baselineskip
+\dimen@=\baselinestretch\dimen@
+\hskip-\wd0 \hskip-.25em
+\raisebox{\dimen@}[0pt][0pt]{\unhbox0}\hskip.25em}}
+\def\fraklines{\baselineskip\f@size dd\relax}
+\endinput
+%%
+%% End of file `yfonts.sty'.