rapport.sty (11245B)
1 \def\@maketitle{% 2 \newpage 3 %\null 4 \vskip -12em% 5 \begin{center}% 6 \let \footnote \thanks 7 {\LARGE \@title \par}% 8 \vskip 1.5em% 9 {\large 10 \lineskip .5em% 11 \begin{tabular}[t]{c}% 12 \@author 13 \end{tabular}\par}% 14 \vskip 1em% 15 {\large \@date}% 16 \end{center}% 17 \par 18 \vskip 1.5em} 19 20 \tikzset{ 21 bloc/.style={ 22 rectangle, 23 rounded corners, 24 draw=black, 25 very thick, 26 }, 27 bloc-line/.style={ 28 minimum height=0.9em, 29 }, 30 bloc-label/.style={ 31 bloc-label-pos, 32 }, 33 bloc-label-pos/.style={ 34 color=blue, 35 inner sep=0, 36 inner xsep=1em, 37 }, 38 input-bloc/.style={ 39 bloc-label-pos/.append style={ 40 inner xsep=0.3333em, 41 } 42 }, 43 ports/.style={ 44 }, 45 in-ports/.style={ 46 ports, 47 anchor=east, 48 }, 49 out-ports/.style={ 50 ports, 51 anchor=west, 52 }, 53 dot/.style={ 54 coordinate, 55 circle, 56 inner sep=0pt, 57 outer sep=0pt,% Pour que les liaisons aillent jusque dans les cercles. 58 minimum size=2pt, 59 fill=black, 60 anchor=center, 61 }, 62 port-dot/.style={ 63 dot, 64 }, 65 port-label/.style={ 66 port-label-pos, 67 }, 68 port-label-pos/.style={ 69 color=black!66!white, 70 }, 71 in-port-dot/.style={ 72 port-dot, 73 }, 74 in-port-label/.style={ 75 port-label, 76 }, 77 in-port-label-pos/.style={ 78 port-label-pos, 79 }, 80 out-port-dot/.style={ 81 port-dot, 82 }, 83 out-port-label/.style={ 84 port-label, 85 }, 86 out-port-label-pos/.style={ 87 port-label-pos, 88 }, 89 } 90 91 92 93 \newcount\bloc@counter 94 95 \let\bloc@false\@nil 96 \def\bloc@true{t} 97 98 \def\bloc@cell@split#1#2#3#4{% 99 \def\bloc@cell@present{#1}% 100 \def\bloc@cell@iotype{#2}% 101 \def\bloc@cell@name{#3}% 102 \def\bloc@cell@value{$#4$}% 103 } 104 105 \def\bloc@cell@getvalues#1{% 106 \advance\bloc@counter by #1% 107 \getlistelement{\the\bloc@counter}{\bloc@elements}% 108 \expandafter\bloc@cell@split\listelement% 109 } 110 111 \def\@bloc@makecells@dolabel{% 112 \ifx\bloc@cell@present\bloc@true% 113 \node[\bloc@cell@iotype-label] (\bloc@cell@name-label) at (\bloc@cell@name-label-pos) {\bloc@cell@value};% 114 \fi% 115 } 116 117 % Columns : <Vertical-space><left-dot><in-port><label><out-port><right-dot> 118 \def\bloc@cell{% 119 \ifnum\pgfmatrixcurrentcolumn=1% 120 \node[bloc-line,inner xsep=0pt]{};% 121 \fi% 122 % 123 \bloc@counter=\pgfmatrixcurrentrow% 124 \multiply\bloc@counter by 3% 125 % 126 \ifnum\pgfmatrixcurrentcolumn=2% 127 \bloc@cell@getvalues{-2}% 128 \ifx\bloc@cell@present\bloc@true% 129 \node[in-port-dot,alias=\bloc@cell@name-dot] (\bloc@cell@name) {};% 130 \fi% 131 \fi% 132 \ifnum\pgfmatrixcurrentcolumn=3% 133 \bloc@cell@getvalues{-2}% 134 \ifx\bloc@cell@present\bloc@true% 135 \node[in-port-label-pos] (\bloc@cell@name-label-pos) {\hphantom{\bloc@cell@value}};% 136 \fi% 137 \fi% 138 \ifnum\pgfmatrixcurrentcolumn=4% 139 \bloc@cell@getvalues{-1}% 140 \ifx\bloc@cell@present\bloc@true% 141 \node[bloc-label-pos] (\bloc@cell@name-label-pos) {\hphantom{\bloc@cell@value}};% 142 \fi% 143 \fi% 144 \ifnum\pgfmatrixcurrentcolumn=5% 145 \bloc@cell@getvalues{0}% 146 \ifx\bloc@cell@present\bloc@true% 147 \node[out-port-label-pos] (\bloc@cell@name-label-pos) {\hphantom{\bloc@cell@value}};% 148 \fi% 149 \fi% 150 \ifnum\pgfmatrixcurrentcolumn=6% 151 \bloc@cell@getvalues{0}% 152 \ifx\bloc@cell@present\bloc@true% 153 \node[out-port-dot,alias=\bloc@cell@name-dot] (\bloc@cell@name) {};% 154 \fi% 155 \fi% 156 } 157 158 \def\bloc@@makecells{% 159 \ifnum\bloc@count@column<6% 160 \bloc@counter=\bloc@count@column% 161 \advance\bloc@counter by 1% 162 \xdef\bloc@count@column{\the\bloc@counter}% 163 \expandafter\pgfmatrixnextcell\expandafter\bloc@@makecells% 164 \else% 165 \ifnum\bloc@count@row<\bloc@maxlines% 166 \xdef\bloc@count@column{0}% 167 \bloc@counter=\bloc@count@row% 168 \advance\bloc@counter by 1% 169 \xdef\bloc@count@row{\the\bloc@counter}% 170 \expandafter\expandafter\pgfmatrixendrow\expandafter\expandafter\bloc@@makecells% 171 \else% 172 \relax% Last cell, relax guy ! 173 \fi% 174 \fi% 175 } 176 177 \def\bloc@makecells{% 178 \xdef\bloc@count@row{2}% 179 \xdef\bloc@count@column{0}% 180 \bloc@@makecells% 181 } 182 183 \def\@bloc@makecells@labels{% 184 \ifx\getlistlength@list\empty% 185 \else% 186 % 187 \xdef\listelement{\expandafter\@car\getlistlength@list\@nil}% 188 \expandafter\bloc@cell@split\listelement% 189 \@bloc@makecells@dolabel% 190 \relax\relax% 191 % 192 \xdef\getlistlength@list{\expandafter\@cdr\getlistlength@list\@nil}% 193 \expandafter\@bloc@makecells@labels% 194 \fi% 195 } 196 197 \def\bloc@makecells@labels#1{% 198 \bloc@counter=1% 199 \edef\getlistlength@list{#1{\relax}}% 200 \@bloc@makecells@labels% 201 } 202 203 \def\@getlistelement{% 204 \ifx\getlistlength@list\empty% 205 \else% 206 % 207 \ifnum\bloc@counter=\getlistlength@index% 208 \xdef\listelement{\expandafter\@car\getlistlength@list\@nil}% 209 \fi% 210 \advance\bloc@counter by 1% 211 % 212 \xdef\getlistlength@list{\expandafter\@cdr\getlistlength@list\@nil}% 213 \expandafter\@getlistelement% 214 \fi% 215 } 216 217 \def\getlistelement#1#2{% 218 \xdef\getlistlength@index{#1}% 219 \bloc@counter=1% 220 \edef\getlistlength@list{#2{\relax}}% 221 \@getlistelement% 222 } 223 224 %\newcount\bloc@counter% 225 \def\@getlistlength{% 226 \ifx\getlistlength@list\empty% 227 \let\listlength\bloc@counter% 228 \else% 229 % 230 \advance\bloc@counter by 1% 231 % 232 \xdef\getlistlength@list{\expandafter\@cdr\getlistlength@list\@nil}% 233 \expandafter\@getlistlength% 234 \fi% 235 } 236 237 \def\getlistlength#1{% 238 \bloc@counter=-1% 239 \def\getlistlength@list{#1{\relax}}% 240 \@getlistlength% 241 } 242 243 \def\@@bloc@scanelement@split#1/#2/{% 244 \def\bloc@cell@name{#1}% 245 \ifx\bloc@scanelement@split@same\bloc@true% 246 \def\bloc@cell@value{#1}% 247 \else 248 \def\bloc@cell@value{#2}% 249 \expandafter\@gobble% 250 \fi 251 } 252 \def\@bloc@scanelement@split#1/#2/{% 253 \def\bloc@cell@name{#1}% 254 \def\bloc@cell@value{#2}% 255 \ifx\bloc@cell@value\empty% 256 \let\bloc@scanelement@split@same\bloc@true% 257 \else% 258 \let\bloc@scanelement@split@same\bloc@false% 259 \expandafter\@gobble% 260 \fi% 261 } 262 263 \def\bloc@scanelement@split#1{% 264 \expandafter\@bloc@scanelement@split#1{\relax}// 265 \expandafter\@@bloc@scanelement@split#1// 266 } 267 268 \def\bloc@makeelements{% 269 % A-t-on fait la dernière ligne ? 270 \bloc@counter=\bloc@backupcounter% 271 \ifnum\bloc@backupcounter<\bloc@maxlines% 272 \let\bloc@exitloop\bloc@fale 273 \else 274 \let\bloc@exitloop\bloc@true 275 \fi 276 % 277 % S'il reste des lignes à faire, on les fait : 278 \ifx\bloc@exitloop\bloc@false% 279 % Est-on sur un rang où on affiche les ports d'entrée ? 280 \ifx\bloc@inports@print\bloc@true% 281 \let\bloc@inports@print\bloc@false% 282 % Est-ce qu'on est entre le startline et le endline pour les ports d'entrée ? 283 \ifnum\bloc@counter>\bloc@inports@startline% 284 \ifnum\bloc@counter<\bloc@inports@endline% 285 % Si oui, on ajoute le port, dans les autres cas, on ajoute une cellule vide 286 \xdef\bloc@scan@inport{\expandafter\@car\bloc@inports\@nil}% 287 \expandafter\bloc@scanelement@split{\bloc@scan@inport}% 288 \xdef\bloc@elements{\bloc@elements{{t}{in-port}{\bloc@label@name-in-\bloc@cell@name}{\bloc@cell@value}}}% 289 \xdef\bloc@inports{\expandafter\@cdr\bloc@inports\@nil}% 290 \else% 291 \g@addto@macro\bloc@elements{{{f}{}{}{}}}% 292 \fi% 293 \else% 294 \g@addto@macro\bloc@elements{{{f}{}{}{}}}% 295 \fi% 296 \else% 297 \let\bloc@inports@print\bloc@true% 298 \g@addto@macro\bloc@elements{{{f}{}{}{}}}% 299 \fi% 300 % Fin port entrée 301 % 302 % Est-on sur le rang où on doit afficher le nom du bloc ? 303 \ifnum\bloc@counter=\bloc@labelline% 304 \xdef\bloc@elements{\bloc@elements{{t}{bloc}{\bloc@label@name}{\bloc@label@value}}}% 305 \else% 306 \g@addto@macro\bloc@elements{{{f}{}{}{}}}% 307 \fi% 308 % Fin nom du bloc 309 % 310 % Est-on sur un rang où on affiche les ports de sortie ? 311 \ifx\bloc@outports@print\bloc@true% 312 \let\bloc@outports@print\bloc@false% 313 % Est-ce qu'on est entre le startline et le endline pour les ports de sortie ? 314 \ifnum\bloc@counter>\bloc@outports@startline% 315 \ifnum\bloc@counter<\bloc@outports@endline% 316 % Si oui, on ajoute le port, dans les autres cas, on ajoute une cellule vide 317 \xdef\bloc@scan@outport{\expandafter\@car\bloc@outports\@nil}% 318 \expandafter\bloc@scanelement@split{\bloc@scan@outport}% 319 \xdef\bloc@elements{\bloc@elements{{t}{out-port}{\bloc@label@name-out-\bloc@cell@name}{\bloc@cell@value}}}% 320 \xdef\bloc@outports{\expandafter\@cdr\bloc@outports\@nil}% 321 \else% 322 \g@addto@macro\bloc@elements{{{f}{}{}{}}}% 323 \fi% 324 \else% 325 \g@addto@macro\bloc@elements{{{f}{}{}{}}}% 326 \fi% 327 \else% 328 \let\bloc@outports@print\bloc@true% 329 \g@addto@macro\bloc@elements{{{f}{}{}{}}}% 330 \fi% 331 % Fin port sortie 332 % 333 % On passe à la ligne suivante 334 \advance\bloc@counter by 1% 335 \xdef\bloc@backupcounter{\the\bloc@counter} 336 % Et on boucle 337 \expandafter\bloc@makeelements% 338 \fi% 339 } 340 341 \def\@bloc#1#2#3{% 342 \expandafter\bloc@scanelement@split{#1}% 343 \let\bloc@label@name\bloc@cell@name% 344 \let\bloc@label@value\bloc@cell@value% 345 \def\bloc@inports{#2{}{}{}}% 346 \def\bloc@outports{#3{}{}{}}% 347 \getlistlength{#2}\edef\bloc@nbinports{\the\listlength}% 348 \getlistlength{#3}\edef\bloc@nboutports{\the\listlength}% 349 % 350 \ifnum\bloc@nbinports>\bloc@nboutports% 351 \bloc@counter=\bloc@nbinports% 352 \edef\bloc@labelline{\the\bloc@counter}% 353 \multiply\bloc@counter by 2% 354 \edef\bloc@maxlines{\the\bloc@counter}% 355 % 356 \bloc@counter=\bloc@nbinports% 357 \advance\bloc@counter by -\bloc@nboutports% 358 \edef\bloc@outports@startline{\the\bloc@counter}% 359 \advance\bloc@counter by \bloc@nboutports% 360 \advance\bloc@counter by \bloc@nboutports% 361 \edef\bloc@outports@endline{\the\bloc@counter}% 362 % 363 \edef\bloc@inports@startline{0}% 364 \edef\bloc@inports@endline{\bloc@maxlines}% 365 % 366 \def\bloc@inports@print{t}% 367 \ifodd\bloc@nboutports% 368 \ifodd\bloc@nbinports \let\bloc@outports@print\bloc@true \else \let\bloc@outports@print\bloc@false \fi% 369 \else% 370 \ifodd\bloc@nbinports \let\bloc@outports@print\bloc@false \else \let\bloc@outports@print\bloc@true \fi% 371 \fi% 372 \else% 373 \bloc@counter=\bloc@nboutports% 374 \edef\bloc@labelline{\the\bloc@counter}% 375 \multiply\bloc@counter by 2% 376 \edef\bloc@maxlines{\the\bloc@counter}% 377 % 378 \bloc@counter=\bloc@nboutports% 379 \advance\bloc@counter by -\bloc@nbinports% 380 \edef\bloc@inports@startline{\the\bloc@counter}% 381 \advance\bloc@counter by \bloc@nbinports% 382 \advance\bloc@counter by \bloc@nbinports% 383 \edef\bloc@inports@endline{\the\bloc@counter}% 384 % 385 \edef\bloc@outports@startline{0}% 386 \edef\bloc@outports@endline{\bloc@maxlines}% 387 % 388 \def\bloc@outports@print{t}% 389 \ifodd\bloc@nbinports% 390 \ifodd\bloc@nboutports \let\bloc@inports@print\bloc@true \else \let\bloc@inports@print\bloc@false \fi% 391 \else% 392 \ifodd\bloc@nboutports \let\bloc@inports@print\bloc@false \else \let\bloc@inports@print\bloc@true \fi% 393 \fi% 394 \fi% 395 % 396 \bloc@counter=1 % numéro de ligne 397 \xdef\bloc@backupcounter{\the\bloc@counter}% 398 % 399 \gdef\bloc@elements{}% 400 \bloc@makeelements% 401 % 402 \tikzset{\bloc@label@name/.append style={}}% 403 \matrix[bloc,execute at begin cell=\bloc@cell,\bloc@label@name] (\bloc@label@name) {% 404 \bloc@makecells\\% 405 };% 406 % 407 \bloc@makecells@labels\bloc@elements% 408 } 409 410 \newcommand{\bloc}[1][f]{ 411 \def\bloc@mathnodes{#1} 412 \@bloc 413 }