www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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 }