]> AND Private Git Repository - ThesisAli.git/blob - algorithme.sty
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
Update on the general introduction
[ThesisAli.git] / algorithme.sty
1 %%%%%% ************** line 192
2
3
4 %%--------------------------------------------------------------------------------------------------------------
5 %%                                              ALGORITHME 1.1
6 %%--------------------------------------------------------------------------------------------------------------
7 %% Quoi de neuf depuis Algorithm 1.0 / What's new since Algorithm 1.0
8 %%
9 %% Meilleure boîte de cadrage
10 %% Meilleure gestion des largeurs, permettant l'utilisation du mode multicolonnes, et permettant la césure
11 %% automatique des longues lignes de pseudo-instructions.
12 %% Widths are better handled, allowing the use of multicolumn mode, and also allowing auto line splitting into
13 %% long lines of pseudo-code.
14 %%--------------------------------------------------------------------------------------------------------------
15 %%
16 %% Copyleft Pierre Chatelier
17 %%       e-mail: pierre.chatelier@club-internet.fr
18 %%   page perso: http://perso.club-internet.fr/ktd
19 %%
20 %%Un package pour ecrire du code algorithmique
21 %%Il propose, dans l'environnement "algorithme", d'utiliser
22 %%  -Des remarques, pour commenter le code          ( \Rem{Remarque}                                         )
23 %%  -Des blocs, pour indenter le code               ( \Block{code}                                           )
24 %%  -Des boucles "Tant Que...faire...Fait"          ( \While{condition}{code}                                )
25 %%  -Des boucles "Repeter...jusqu'a"                ( \Repeat{code}{condition} ou \RepeatUntil{}{}           )
26 %%  -Des boucles "Pour...de...a...faire...Fin Pour" ( \ForFromTo{variable}{valeur début}{valeur fin}{code}   )
27 %%  -Des boucles "Pour...faire...Fin Pour"          ( \For{controle de boucle}{code}                         )
28 %%  -Des Si...Alors...Fin Si                        ( \If{condition}{code} ou \IfThen{condition}{code}       )
29 %%  -Des Si...Alors...Sinon...Fin Si                ( \IfThenElse{condition}{code de alors}{code de sinon}   )
30 %%  -Des Selon que ... Fin Selon que                ( \Switch{code}                                          )
31 %%  -Des fonctions                                  ( \Function{parametres}{type de retour}{code}            )
32 %%  -Des procédures                                 ( \Procedure{parametres}{code}                           )
33 %%  -Une instruction de declaration de type         ( \Type{nom ou liste de variable}{nom de type}           )
34 %%  -Quelques mots-clefs d'usage courant : \True, \False, \And, \Or et \Not
35 %% Les versions étoilées des commandes (\WhileDo*{}, \IfThen*{}, ... ; toutes sauf \Rem, \Block \Switch,
36 %% \Function et \Procedure) font tout sur la meme ligne
37 %%
38 %% Une table des algorithmes est disponible via \listofalgorithms.
39 %% Pour introduire un algorithme dans cette table, il faut taper la commande "\caption{texte...}" dans un
40 %% environnemment "algorithme"
41 %%
42 %% On peut passer une option au package : [french] ou [english] pour la langue des mots-clef
43 %%
44 %%---------------------------------------------------------------------------------------------------------------
45 %%This is a package to write some algorithms.
46 %%It provides, within an "algorithm" environment, to use
47 %%  -Comments                         ( \Rem{text}                                               )
48 %%  -Blocks, to indent code           ( \Block{text}                                             )
49 %%  -While ... do ... done            ( \While{condition}{code}                                  )
50 %%  -Repeat ... until                 ( \Repeat{code}{condition} or \RepeatUntil{}{}             )
51 %%  -Repeat ... until                 ( \RepeatUntil{code}{condition}                            )
52 %%  -For...from...to...do...done      ( \ForFromTo{variable}{initial value}{final value}{code}   )
53 %%  -For...do...done                  ( \For{loop control}{code}                                 )
54 %%  -If...then...end if               ( \If{condition}{code} or \IfThen{condition}{code}         )
55 %%  -If...then...else...end if        ( \IfThenElse{condition}{then code}{else code}             )
56 %%  -Switch                           ( \Switch{code}                                            )
57 %%  -Function                         ( \Function{parameters}{return type}{code}                 )
58 %%  -Procedure                        ( \Procedure{parametres}{code}                             )
59 %%  -A type declaration instruction   ( \Type{name or list of variables}{type name}              )
60 %%  -Some useful keywords: \True, \False, \And, \Or and \Not.
61 %% Most of these commands have a star-form (\WhileDo*{}, \IfThen*{}, ... ; all but \Rem, \Block \Switch
62 %% \Function and \Procedure). These star-forms are single-lined.
63 %%
64 %% A list of algorithms is provided through \listofalgorithms.
65 %% To add an entry in this table, the matching algorithm must have a caption, thanks to "\caption{text}".
66 %%
67 %% You can specifiy an option to the package : [french] ou [english] for the language of the keywords.
68 %%
69 %%---------------------------------------------------------------------------------------------------------------
70
71
72 %%-----------------------------------------------------------------%%
73 %%---------------------- Identification ---------------------------%%
74 \NeedsTeXFormat{LaTeX2e}
75 \ProvidesClass{algorithme} %Nom de la classe / Class name
76 %%-----------------------------------------------------------------%%
77 %%
78 %%
79 %%-----------------------------------------------------------------%%
80 %%------------------------ Inclusions -----------------------------%%
81 \RequirePackage{float, ifthen, calc}
82 %%
83 %%
84 %%-----------------------------------------------------------------%%
85 %%------------------------ Langage/Language -----------------------%%
86
87 %% Changer le langage dans le contexte de babel /Change langage according to babel
88 \@ifpackageloaded{babel}
89 {
90   %\iflanguage{french}{\def\alg@language{french}}{}
91   \iflanguage{english}{\def\alg@language{english}}{}
92   \iflanguage{american}{\def\alg@language{english}}{}
93 }
94 {
95  % \def\alg@language{french} %Langage par defaut / Default language
96 }
97
98 %% Tenir compte de l'option specifiee explicitement / Handle explicit langage option
99 %\DeclareOption{french}{\def\alg@language{french}}
100 \DeclareOption{english}{\def\alg@language{english}}
101 \DeclareOption{american}{\def\alg@language{english}}
102 \ProcessOptions\relax
103
104
105 %% Declaration des commandes / Commands declaration
106 \ifthenelse{\equal{\alg@language}{french}}
107 {
108   \def\alg@floatname{Algorithme}
109   \def\alg@listname{Liste des Algorithmes}
110
111   \newcommand{\@TRUE}{\textbf{vrai}}%
112   \newcommand{\@FALSE}{\textbf{faux}}%
113   \newcommand{\@AND}{\textbf{ET }}%
114   \newcommand{\@OR}{\textbf{OU }}%
115   \newcommand{\@NOT}{\textbf{$\neg$}}%
116
117   \newcommand{\@WHILE}{\textbf{Tant que }}%
118   \newcommand{\@DO}{\textbf{faire }}%
119   \newcommand{\@ENDWHILE}{\textbf{Fait}}%
120
121   \newcommand{\@REPEAT}{\textbf{R\'ep\'eter }}%
122   \newcommand{\@UNTIL}{\textbf{jusqu'\`a ce que }}%
123
124   \newcommand{\@FOR}{\textbf{Pour }}%
125   \newcommand{\@FROM}{\textbf{de }}%
126   \newcommand{\@TO}{\textbf{\`a }}%
127   \newcommand{\@ENDFOR}{\textbf{Fin Pour}}%
128  
129   \newcommand{\@IF}{\textbf{Si }}%
130   \newcommand{\@THEN}{\textbf{Alors }}%
131   \newcommand{\@ELSE}{\textbf{Sinon }}%
132   \newcommand{\@ENDIF}{\textbf{Fin Si}}%
133
134   \newcommand{\@SWITCH}{\textbf{Selon que }}%
135   \newcommand{\@ENDSWITCH}{\textbf{Fin Selon que}}%
136  
137   \newcommand{\@FUNCTION}{\textbf{Fonction }}%
138   \newcommand{\@RETURN}{\textbf{Retourner }}%
139   \newcommand{\@ENDFUNCTION}{\textbf{Fin}}%
140  
141   \newcommand{\@PROCEDURE}{\textbf{Proc\'edure }}%
142   \newcommand{\@ENDPROCEDURE}{\textbf{Fin}}%
143 }{}
144 \ifthenelse{\equal{\alg@language}{english}}
145 {
146   \def\alg@floatname{Algorithm}
147   \def\alg@listname{List of Algorithms}
148
149   \newcommand{\@TRUE}{\textbf{true}}%
150   \newcommand{\@FALSE}{\textbf{false}}%
151   \newcommand{\@AND}{\textbf{AND }}%
152   \newcommand{\@OR}{\textbf{OR }}%
153   \newcommand{\@NOT}{\textbf{$\neg$}}%
154
155   \newcommand{\@WHILE}{\textbf{While }}%
156   \newcommand{\@DO}{\textbf{do }}%
157   \newcommand{\@ENDWHILE}{\textbf{done}}%
158
159   \newcommand{\@REPEAT}{\textbf{Repeat }}%
160   \newcommand{\@UNTIL}{\textbf{until }}%
161
162   \newcommand{\@FOR}{\textbf{For }}%
163   \newcommand{\@FROM}{\textbf{from }}%
164   \newcommand{\@TO}{\textbf{to }}%
165   \newcommand{\@ENDFOR}{\textbf{end For}}%
166  
167   \newcommand{\@IF}{\textbf{If }}%
168   \newcommand{\@THEN}{\textbf{then }}%
169   \newcommand{\@ELSE}{\textbf{else }}%
170   \newcommand{\@ENDIF}{\textbf{end If}}%
171
172   \newcommand{\@SWITCH}{\textbf{Switch }}%
173   \newcommand{\@ENDSWITCH}{\textbf{end Switch}}%
174  
175   \newcommand{\@FUNCTION}{\textbf{Function }}%
176   \newcommand{\@RETURN}{\textbf{return }}%
177   \newcommand{\@ENDFUNCTION}{\textbf{End}}%
178  
179   \newcommand{\@PROCEDURE}{\textbf{Procedure }}%
180   \newcommand{\@ENDPROCEDURE}{\textbf{End}}%
181 }{}
182
183 %%
184 %%
185 %%-----------------------------------------------------------------%%
186 %%----------------------- Commandes/Commands ----------------------%%
187
188 %% Adequation au package "float" / Match "float" package
189 \newcommand\floatc@alg[2]{\begin{center}{\bfseries\rmfamily #1:} #2\end{center}}
190 \newcommand\fs@alg{
191    \let\@fs@capt\floatc@alg
192    \def\@fs@pre{}\def\@fs@post{}\def\@fs@mid{\vspace{3pt}}
193    \let\@fs@iftopcapt\iftrue}
194 \newfloat{algorithmfloat}{h}{loa}
195 \floatname{algorithmfloat}{\alg@floatname}
196 %\newcommand{\listofalgorithms}{\listof{algorithmfloat}{\alg@listname}}
197 \newlength{\alglength}
198
199 %% Les commandes disponibles / Provided commands
200 \newenvironment{algorithme}[1][H]
201 {
202  \setlength{\alglength}{.95\linewidth}
203  \begin{algorithmfloat}[#1]
204  
205  %%Rem{texte} : ecrit une remarque
206  %%Rem{text}  : puts a comment
207  \newcommand{\@Rem}[1]{\begin{minipage}[t]{\alglength}
208                         \emph{[##1]}
209                         \vspace*{.5ex}
210                        \end{minipage}
211                       }%
212
213  %%Bloc{code} : Encapsule quelques lignes / encapsulate some lines
214  \newcommand{\@Block}[1]{\begin{minipage}[t]{\alglength}
215                          ##1
216                          \vspace*{.5ex}
217                          \end{minipage}
218                         }%
219
220  %%WhileDo{condition}{code}
221  \newcommand{\@WhileDo}[2]{\begin{minipage}[t]{\alglength}
222                            \@WHILE (##1) \@DO \\
223                            \hspace*{1em}
224                            \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
225                            \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
226                            \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
227                            \\ \@ENDWHILE%
228                            \vspace*{.5ex}
229                           \end{minipage}
230                          }%
231  %%WhileDo{condition}{code} sur une seule ligne / on a single line
232  \newcommand{\@ShortWhileDo}[2]{\begin{minipage}[t]{\alglength}
233                                 \@WHILE (##1) \@DO ##2 \@ENDWHILE
234                                 \vspace*{.5ex}
235                                 \end{minipage}
236                                }%
237
238  %%RepeatUntil{code}{condition}
239  \newcommand{\@RepeatUntil}[2]{\begin{minipage}[t]{\alglength}
240                                \@REPEAT \\
241                                \hspace*{1em}
242                                \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
243                                \begin{tabular}{|p{\alglength}} ##1\\ \end{tabular}%
244                                \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
245                                \\ \@UNTIL (##2)%
246                                \vspace*{.5ex}
247                               \end{minipage}
248                              }%
249  %%RepeatUntil{code}{condition} sur une seule ligne / on a single line
250  \newcommand{\@ShortRepeatUntil}[2]{\begin{minipage}[t]{\alglength}
251                                     \@REPEAT ##1 \@UNTIL (##2)%
252                                     \vspace*{.5ex}
253                                     \end{minipage}
254                                    }%                             
255
256  %%ForFromToDo{variable}{valeur initiale}{valeur finale}{code}
257  %%ForFromToDo{variable}{initial value}{final value}{code}
258  \newcommand{\@ForFromToDo}[4]{\begin{minipage}[t]{\alglength}
259                                \@FOR ##1 \@FROM ##2 \@TO ##3 \@DO \\
260                                \hspace*{.3em}
261                                \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
262                                \begin{tabular}{|p{\alglength}} ##4\\ \end{tabular}%
263                                \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
264                                \\ \@ENDFOR%
265                                \vspace*{.5ex}
266                               \end{minipage}
267                              }%
268  %%ForFromToDo{variable}{valeur initiale}{valeur finale}{code} sur une seule ligne
269  %%ForFromToDo{variable}{initial value}{final value}{code} on a single line
270  \newcommand{\@ShortForFromToDo}[4]{\begin{minipage}[t]{\alglength}
271                                     \@FOR ##1 \@FROM ##2 \@TO ##3 \@DO ##4 \@ENDFOR%
272                                     \vspace*{.5ex}
273                                     \end{minipage}
274                                    }%
275
276  %%For{controle de boucle style C}{code}
277  %%For{C-like loop control}{code}
278  \newcommand{\@ForDo}[2]{\begin{minipage}[t]{\alglength}
279                          \@FOR ##1 \@DO \vspace*{.5ex}\\
280                          \hspace*{.3em}
281                          \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
282                          \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
283                          \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
284                          \\ \@ENDFOR%
285                          \vspace*{.5ex}
286                          \end{minipage}
287                        }%
288  %%For{controle de boucle style C}{code} sur une seule ligne
289  %%For{C-like loop control}{code} on a single line
290  \newcommand{\@ShortForDo}[2]{\begin{minipage}[t]{\alglength}
291                               \@FOR ##1 \@DO ##2 \@ENDFOR%
292                               \vspace*{.5ex}
293                               \end{minipage}
294                              }%
295
296  %%IfThen{condition}{code}
297  \newcommand{\@IfThen}[2]{\begin{minipage}[t]{\alglength}
298                           \@IF (##1) \@THEN \\
299                           \hspace*{.5em}
300                           \addtolength{\alglength}{-1.5em-\tabcolsep-\arrayrulewidth}
301                           \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
302                           \addtolength{\alglength}{1.5em+\tabcolsep+\arrayrulewidth}
303                           \\ \@ENDIF%
304                           \vspace*{.5ex}
305                          \end{minipage}
306                         }%
307  %%IfThen{condition}{code} sur une seule ligne / on a single line
308  \newcommand{\@ShortIfThen}[2]{\begin{minipage}[t]{\alglength}
309                                \@IF (##1) \@THEN ##2 \@ENDIF%
310                                \vspace*{.5ex}
311                                \end{minipage}
312                               }%
313                               
314  %%IfThenElse{condition}{code du then}{code du else} NE PAS CONFONDRE avec le \ifthenelse de LaTeX
315  %%IfThenElse{condition}{then-code}{else-code} DO NOT CONFUSE with \ifthenelse from LaTeX
316  \newcommand{\@IfThenElse}[3]{\begin{minipage}[t]{\alglength}
317                               \@IF (##1) \@THEN \\
318                               \hspace*{.5em}
319                               \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
320                               \begin{tabular}{|p{\alglength}} ##2\\ \end{tabular}%
321                               \\ \@ELSE\\
322                               \hspace*{.5em}
323                               \begin{tabular}{|p{\alglength}} ##3\\ \end{tabular}%
324                               \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
325                               \\ \@ENDIF%
326                               \vspace*{.5ex}
327                               \end{minipage}
328                             }%
329  %%IfThenElse{condition}{code du then}{code du else} sur une seule ligne
330  %%IfThenElse{condition}{then-code}{else-code} on a single line
331  \newcommand{\@ShortIfThenElse}[3]{\begin{minipage}[t]{\alglength}
332                                    \@IF (##1) \@THEN ##2 \@ELSE ##3 \@ENDIF%
333                                    \vspace*{.5ex}
334                                    \end{minipage}
335                                   }%
336
337  %%Switch{code} (C'est le selon que)
338  \newcommand{\@Switch}[1]{\begin{minipage}[t]{\alglength}
339                           \@SWITCH \\
340                           \hspace*{1em}
341                           \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
342                           \begin{tabular}{|p{\alglength}} ##1\\ \end{tabular}%
343                           \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
344                           \\ \@ENDSWITCH%
345                           \vspace*{.5ex}
346                           \end{minipage}
347                         }%
348
349  %%Function{parametres}{type de retour}{code}
350  %%Function{parameters}{return type}{code}
351  \newcommand{\@Function}[4]{\begin{minipage}[t]{\alglength}
352                             \@FUNCTION  ##1(##2) : \textbf{##3}\\
353                             \hspace*{1em}
354                             \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
355                             \begin{tabular}{|p{\alglength}} ##4\\ \end{tabular}%
356                             \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
357                             \\ \@ENDFUNCTION%
358                             \vspace*{.5ex}
359                             \end{minipage}
360                            }%
361
362  %%Procedure{parametres}{code}
363  %%Procedure{parameters}{code}
364  \newcommand{\@Procedure}[3]{\begin{minipage}[t]{\alglength}
365                              \@PROCEDURE ##1(##2)\\
366                              \hspace*{1em}
367                              \addtolength{\alglength}{-2em-\tabcolsep-\arrayrulewidth}
368                              \begin{tabular}{|p{\alglength}} ##3\\ \end{tabular}%
369                              \addtolength{\alglength}{2em+\tabcolsep+\arrayrulewidth}
370                              \\ \@ENDPROCEDURE%
371                              \vspace*{.5ex}
372                              \end{minipage}
373                             }%
374
375  %%Type{nom ou liste de variable}{nom de type}
376  %%Type{name or list of variables}{type name}
377  \newcommand{\@Type}[2]{##1 : \textbf{##2}}                            
378                            
379  %%Definition des macro-commandes pratiques pour l'utilisateur.
380  %%La forme etoilee de certaines commandes est un alias de leur version courte (sur une seule ligne)
381  %%Definition of macro-commands useful for the user.
382  %%The star-from of some commands is an alias towards ther short form (on a single line)
383  \def\True{       \@TRUE}%
384  \def\False{      \@FALSE}%
385  \def\And{        \@AND}%
386  \def\Or{         \@OR}%
387  \def\Not{        \@NOT}%
388  \def\Rem{        \@Rem}
389  \def\Block{      \@Block}
390  \def\While{      \@ifstar{\@ShortWhileDo}     {\@WhileDo}}
391  \def\WhileDo{    \@ifstar{\@ShortWhileDo}     {\@WhileDo}}
392  \def\Repeat{     \@ifstar{\@ShortRepeatUntil} {\@RepeatUntil}}
393  \def\RepeatUntil{\@ifstar{\@ShortRepeatUntil} {\@RepeatUntil}}
394  \def\ForFromTo{  \@ifstar{\@ShortForFromToDo} {\@ForFromToDo}} 
395  \def\ForFromToDo{\@ifstar{\@ShortForFromToDo} {\@ForFromToDo}} 
396  \def\ForDo{      \@ifstar{\@ShortForDo}       {\@ForDo}} 
397  \def\For{        \@ifstar{\@ShortForDo}       {\@ForDo}} 
398  \def\If{         \@ifstar{\@ShortIfThen}      {\@IfThen}} 
399  \def\IfThen{     \@ifstar{\@ShortIfThen}      {\@IfThen}} 
400  \def\IfThenElse{ \@ifstar{\@ShortIfThenElse}  {\@IfThenElse}} 
401  \def\Switch{     \@ifstar{\@Switch}           {\@Switch}} 
402  \def\Function{   \@ifstar{\@Function}         {\@Function}} 
403  \def\Return{     \@RETURN}
404  \def\Procedure{  \@ifstar{\@Procedure}        {\@Procedure}} 
405  \def\Type{       \@Type}
406  
407  \begin{minipage}[t]{\alglength}
408  \begin{center}\begin{tabular}{|c|}\hline\\
409  \hspace*{.5em}
410  \begin{minipage}[t]{\alglength}
411 }
412 %% Fin de l'environnement "algorithme" / end of "algorithme" environnment
413 {
414  \end{minipage}\hspace*{.5em}
415  \\\\\hline\end{tabular}\end{center}
416  \end{minipage}
417  \end{algorithmfloat}
418 }
419
420 %% ----------------------------- FIN / END ---------------------------------------