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