\NeedsTeXFormat{LaTeX2e}[1999/01/01] \ProvidesPackage{grafcet}[2007/03/05] \RequirePackage{tikz} \usetikzlibrary{shapes,arrows} \RequirePackage{ifthen} \RequirePackage{ifsym} %macros commande diverses \newcommand{\Etape}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) [draw, rectangle, minimum height=2.5em,minimum width=2.5em] (X#2) {#2}; \node (AX#2) at (X#2){}; \DecaleNoeudy[2.5]{X#2}{NoeudGraf} \node (VX#2) at (NoeudGraf) {}; } \newcommand{\EtapeSeule}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) [draw, rectangle, minimum height=2.5em,minimum width=2.5em] (X#2) {#2}; \node (AX#2) at (X#2){}; } \newcommand{\EtapeInit}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) [draw, rectangle, minimum height=2.5em,minimum width=2.5em] (X#2) {#2}; \path (X#2.north west) --++(0.3em,0) coordinate(NOh) -- (X#2.north east)--++(-0.3em,0)coordinate(NEh); \path (X#2.south west) --++(0.3em,0) coordinate(SOh) -- (X#2.south east)--++(-0.3em,0)coordinate(SEh); \path (X#2.north west) --++(0,-0.3em) coordinate(NOv) -- (X#2.south west)--++(0,0.3em)coordinate(SOv); \path (X#2.north east) --++(0,-0.3em) coordinate(NEv) -- (X#2.south east)--++(0,0.3em)coordinate(SEv); \draw (NOh|-NOv)coordinate(NO) -- (SOh|-SOv) coordinate (SO) -- (SEh|-SEv)coordinate(SE) -- (NEh|-NEv) -- cycle; %\node (coin1) at (X#2.north west)[minimum size=0.1em]{}{}; %\node (coin2) at (X#2.south east)[minimum size=0.1em]{}{}; %\draw (coin1.south east) rectangle (coin2.north west); \node (AX#2) at (X#2){}; \DecaleNoeudy[2.5]{X#2}{NoeudGraf} \node (VX#2) at (NoeudGraf) {}; } \newcommand{\MacroEtape}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) [draw, rectangle, minimum height=2.5em,minimum width=2.5em] (X#2) {#2}; \node (coin1) at (X#2.north west)[minimum size=0.1em]{}{}; \node (coin2) at (X#2.south east)[minimum size=0.1em]{}{}; \node (coin3) at (X#2.north east)[minimum size=0.1em]{}{}; \node (coin4) at (X#2.south west)[minimum size=0.1em]{}{}; \draw (coin1.south) -- (coin3.south); \draw (coin2.north) -- (coin4.north); \node (AX#2) at (X#2){}; \DecaleNoeudy[2.5]{X#2}{NoeudGraf} \node (VX#2) at (NoeudGraf) {}; } \newcommand{\MacroEtapeE}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) [draw, rectangle, minimum height=2.5em,minimum width=2.5em] (X#2) {#2}; \node (coin1) at (X#2.north west)[minimum size=0.1em]{}{}; \node (coin2) at (X#2.south east)[minimum size=0.1em]{}{}; \node (coin3) at (X#2.north east)[minimum size=0.1em]{}{}; \node (coin4) at (X#2.south west)[minimum size=0.1em]{}{}; \draw (coin1.south) -- (coin3.south); \node (AX#2) at (X#2){}; \DecaleNoeudy[2.5]{X#2}{NoeudGraf} \node (VX#2) at (NoeudGraf) {}; } \newcommand{\MacroEtapeS}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) [draw, rectangle, minimum height=2.5em,minimum width=2.5em] (X#2) {#2}; \node (coin1) at (X#2.north west)[minimum size=0.1em]{}{}; \node (coin2) at (X#2.south east)[minimum size=0.1em]{}{}; \node (coin3) at (X#2.north east)[minimum size=0.1em]{}{}; \node (coin4) at (X#2.south west)[minimum size=0.1em]{}{}; \draw (coin2.north) -- (coin4.north); \node (AX#2) at (X#2){}; \DecaleNoeudy[2.5]{X#2}{NoeudGraf} \node (VX#2) at (NoeudGraf) {}; } \newcommand{\EtapeEncapsulante}[2][NoeudGraf]{ \node[inner sep=0,outer sep=0] (NoeudGraf) at (#1) [draw, rectangle, minimum height=2.5em,minimum width=2.5em] (X#2) {#2}; \path (X#2.north west) --++(0.8em,0) coordinate(NOh) -- (X#2.north east)--++(-0.8em,0)coordinate(NEh); \path (X#2.south west) --++(0.8em,0) coordinate(SOh) -- (X#2.south east)--++(-0.8em,0)coordinate(SEh); \path (X#2.north west) --++(0,-0.8em) coordinate(NOv) -- (X#2.south west)--++(0,0.8em)coordinate(SOv); \path (X#2.north east) --++(0,-0.8em) coordinate(NEv) -- (X#2.south east)--++(0,0.8em)coordinate(SEv); \draw (X#2.north west) -- (NOh) -- (NOv) -- cycle; \draw (X#2.south west) -- (SOh) -- (SOv) -- cycle; \draw (X#2.north east) -- (NEh) -- (NEv) -- cycle; \draw (X#2.south east) -- (SEh) -- (SEv) -- cycle; \node (AX#2) at (X#2){}; \DecaleNoeudy[2.5]{X#2}{NoeudGraf} \node (VX#2) at (NoeudGraf) {}; } \newcommand{\EtapeEncapsulanteInit}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) [draw, rectangle, minimum height=2.5em,minimum width=2.5em] (X#2) {#2}; \path (X#2.north west) --++(0.3em,0) coordinate(NOh) -- (X#2.north east)--++(-0.3em,0)coordinate(NEh); \path (X#2.south west) --++(0.3em,0) coordinate(SOh) -- (X#2.south east)--++(-0.3em,0)coordinate(SEh); \path (X#2.north west) --++(0,-0.3em) coordinate(NOv) -- (X#2.south west)--++(0,0.3em)coordinate(SOv); \path (X#2.north east) --++(0,-0.3em) coordinate(NEv) -- (X#2.south east)--++(0,0.3em)coordinate(SEv); \draw (NOh|-NOv)coordinate(NO) -- (SOh|-SOv) coordinate (SO) -- (SEh|-SEv)coordinate(SE) -- (NEh|-NEv)coordinate(NE) -- cycle; \path (NO) --++(0.5em,0) coordinate(NOh) -- (NE)--++(-0.5em,0)coordinate(NEh); \path (SO) --++(0.5em,0) coordinate(SOh) -- (SE)--++(-0.5em,0)coordinate(SEh); \path (NO) --++(0,-0.5em) coordinate(NOv) -- (SO)--++(0,0.5em)coordinate(SOv); \path (NE) --++(0,-0.5em) coordinate(NEv) -- (SE)--++(0,0.5em)coordinate(SEv); \draw (NO) -- (NOh) -- (NOv) -- cycle; \draw (SO) -- (SOh) -- (SOv) -- cycle; \draw (NE) -- (NEh) -- (NEv) -- cycle; \draw (SE) -- (SEh) -- (SEv) -- cycle; \node (AX#2) at (X#2){}; \DecaleNoeudy[2.5]{X#2}{NoeudGraf} \node (VX#2) at (NoeudGraf) {}; } \newcommand{\LienActivation}[1]{ \DecaleNoeudx[-2]{#1}{LA} \node (LA#1) at (LA) {\textbf *}; } \newcommand{\EtapeActive}[1]{ \DecaleNoeudy[1]{#1}{EA} \node (EA#1) at (EA) {\textbullet}; } \newcommand{\CadreEncap}[4]{ \draw (#1) rectangle (#2); \DecaleNoeudx[3]{#1}{NumEtape} \node (NumEtape) at (NumEtape)[right,fill=white]{#3}{}; \DecaleNoeudx[-3]{#2}{NumEncap} \node (NumEncap) at (NumEncap)[left,fill=white]{#4}{}; } \newenvironment{Encap}[4][encapsulation] {\def\encap1{#1} \def\nometape{#3} \def\nomgraphe{#4} \matrix[matrix anchor=north west] (#1) at (#2) \bgroup \node(espace){};\\ \begin{scope} } { \end{scope}\\ \egroup; \path (\encap1.north west) -- node[pos=0.3](nometape){\nometape} (\encap1.north east); \path (\encap1.south west) -- node[pos=0.3](nomgraphe){\nomgraphe} (\encap1.south east); \draw (nometape) -- (\encap1.east|-nometape) --++(0.5em,0)|- (nomgraphe); \draw (nometape) -- (\encap1.west|-nometape) --++(-0.5em,0)|- (nomgraphe); } \newcommand{\Comment}[3][0]{ \DecaleNoeudx[#1]{#2}{comm#2} \draw (comm#2) node[text width=15em,text justified,right]{\og\textit{ #3 }\fg}; } \newcommand{\Transition}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) [minimum height=2.5em,minimum width=1em] (T#2) {}; \draw (T#2.west) -- (T#2.east); \draw (T#2.north) -- (T#2.south); \node (RT#2) at (T#2.east){}; \DecaleNoeudy[2.5]{T#2}{NoeudGraf} \node (VT#2) at (NoeudGraf) {}; } \newcommand{\TransitionSource}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) [minimum height=2.5em,minimum width=1em] (T#2) {}; \draw (T#2.west) -- (T#2.east); \draw (T#2.base) -- (T#2.south); \node (RT#2) at (T#2.east){}; \DecaleNoeudy[2.5]{T#2}{NoeudGraf} \node (VT#2) at (NoeudGraf) {}; } \newcommand{\TransitionPuits}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) [minimum height=2.5em,minimum width=1em] (T#2) {}; \draw (T#2.west) -- (T#2.east); \draw (T#2.north) -- (T#2.base); \node (RT#2) at (T#2.east){}; \DecaleNoeudy[2.5]{T#2}{NoeudGraf} \node (VT#2) at (NoeudGraf) {}; } \newcommand{\Action}[3][0]{ \foreach \x in {#3} {\node (NoeudGraf) at (A#2.east) [draw, rectangle, right,minimum height=2.5em, minimum width=2.5em] (A#2) {\x}; } } \newcommand{\ActionFranchissement}[2]{ \draw (#1.center) -- ++ (1.5em,-2em) node[name=A#1]{} ; \node[draw, rectangle, right,minimum height=2.5em, minimum width=2.5em] (A#1) at (A#1) {#2}; } \newcommand{\ActionActiv}[1]{ \node (coin1) at (A#1.north west)[minimum size=1.5em]{}{}; %\draw [-triangle 90] (coin1.base) -- (coin1.north); \draw[fill] (coin1.base)--++(0,0.3em)--++(0.3em,0)--++(-0.3em,0.4em) --++(-0.3em,-0.4em)--++(0.3em,0); } \newcommand{\ActionDesactiv}[1]{ \node (coin1) at (A#1.south west)[minimum size=1.2em]{}{}; %\draw [-triangle 90] (coin1.base) -- (coin1.south); %\draw [-triangle 90] (coin1.base) -- (coin1.north); \draw[fill] (coin1.base)--++(0,-0.3em)--++(0.3em,0)--++(-0.3em,-0.4em) --++(-0.3em,+0.4em)--++(0.3em,0); } \newcommand{\ActionCond}[2]{ \node (coin1) at (A#1.north west)[minimum size=1.5em]{}; \draw (coin1.east) -- (coin1.north east)[name=vcond]; \node (cond) at (coin1.east) [above right]{\small{#2}}; } \newcommand{\ActionEvenement}[2]{ \node (coin1) at (A#1.north west)[minimum size=1.5em]{}; \node (coin2) at (coin1.north east) [minimum size=0.5em]{}; \node (coin2) at (coin2.south) [minimum size=0.5em]{}; \draw [fill] (coin1.east) -- (coin2.north)--(coin2.west)--(coin2.south); \node (cond) at (coin1.east) [above right]{#2}; } \newcommand{\ActionX}[3][2.5]{ \DecaleNoeudx[#1]{#2}{A#2}; \draw (#2) -- (A#2.east); \foreach \x in {#3} {\node (NoeudGraf) at (A#2.east) [draw, rectangle, right,minimum height=2.5em, minimum width=2.5em] (A#2) {\x}; } } \newcommand{\ActionXV}[3][2.5]{ \DecaleNoeudx[#1]{#2}{A#2}; \draw (#2) --coordinate[midway](LA#2)coordinate[midway](LA#2b) (A#2.east); \foreach \x in {#3} {\DecaleNoeudy[2.5]{A#2}{NA#2}; \draw(LA#2) |- (A#2.east); \node (NoeudGraf) at (A#2.east) [draw, rectangle,right,minimum height=2.5em, minimum width=2.5em] (A#2) {\x}; \DecaleNoeudy[0]{NA#2}{A#2} } } \newcommand{\ActionEfface}[2][2.5]{ \DecaleNoeudx[#1]{#2}{A#2}; \draw [white] (#2) -- (A#2.east); {\node (NoeudGraf) at (A#2.east) [draw,fill, color=white ,rectangle, right,minimum height=2.5em, minimum width=2.5em] (A#2) { }; } } \newcommand{\Forcage}[3][0]{ \foreach \x in {#3} {\node (NoeudGraf) at (A#2.east) [draw, rectangle, right,minimum height=2.5em, minimum width=2.5em] (A#2) {\x}; \node (coin1) at (A#2.north west)[minimum size=0.1em]{}{}; \node (coin2) at (A#2.south east)[minimum size=0.1em]{}{}; \draw (coin1.south east) rectangle (coin2.north west); } } \newcommand{\ForcageX}[3][2.5]{ \DecaleNoeudx[#1]{#2}{A#2}; \draw (#2) -- (A#2.east); \foreach \x in {#3} {\node (noeudaction) at (A#2.east) [draw, rectangle, right,minimum height=2.5em, minimum width=2.5em] (A#2) {\x}; \node (coin1) at (A#2.north west)[minimum size=0.1em]{}{}; \node (coin2) at (A#2.south east)[minimum size=0.1em]{}{}; \draw (coin1.south east) rectangle (coin2.north west); } } \newcommand{\ForcageXV}[3][2.5]{ \DecaleNoeudx[#1]{#2}{A#2}; \draw (#2) --coordinate[midway](LA#2)coordinate[midway](LA#2b) (A#2.east); \foreach \x in {#3} {\DecaleNoeudy[2.5]{A#2}{NA#2}; \draw(LA#2) |- (A#2.east); \node (noeudaction) at (A#2.east) [draw, rectangle, right,minimum height=2.5em, minimum width=2.5em] (A#2) {\x}; \node (coin1) at (A#2.north west)[minimum size=0.1em]{}{}; \node (coin2) at (A#2.south east)[minimum size=0.1em]{}{}; \draw (coin1.south east) rectangle (coin2.north west); \DecaleNoeudy[0]{NA#2}{A#2}; } } \newcommand{\Recept}[2]{ \node (NoeudGraf) at (R#1.east) [right,minimum height=0em, minimum width=0em] (Rcp#1) {#2}; } \newcommand{\Recepts}[1]{ \foreach \trans / \receptivite in {#1}{ \Recept{T\trans}{\receptivite}; } } \newcommand{\TransitionRecept}[3][NoeudGraf]{ \Transition[#1]{#2} \Recept{T#2}{#3} } \newcommand{\Actions}[1]{ \foreach \etape / \action in {#1}{ \ActionX{X\etape}{\action}; } } \newcommand{\ActionRecept}[1]{ \foreach \etape / \action / \receptivite in {#1}{ \ifthenelse{\equal{\action}{}}{} {\ActionX{X\etape}{\action};} \Recept{T\etape}{\receptivite}; } } \newcommand{\EtapeAction}[3][NoeudGraf]{ \Etape[#1]{#2} \ifthenelse{\equal{#3}{}}{} {\ActionX{X#2}{#3}} } \newcommand{\EtapeInitAction}[3][NoeudGraf]{ \EtapeInit[#1]{#2} \ifthenelse{\equal{#3}{}}{} {\ActionX{X#2}{#3}} } \newcommand{\EtapeTransition}[4][NoeudGraf]{ \Etape[#1]{#2} \ifthenelse{\equal{#3}{}}{} {\ActionX{X#2}{#3}} \Transition{#2} \Recept{T#2}{#4} } \newcommand{\EtapeInitTransition}[4][NoeudGraf]{ \EtapeInit[#1]{#2} \ifthenelse{\equal{#3}{}}{} {\ActionX{X#2}{#3}} \Transition{#2} \Recept{T#2}{#4} } \newcommand{\SequenceET}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) {}; \foreach \x in {#2} {\Etape[NoeudGraf]{\x} \DecaleNoeudy[2.5]{X\x}{NoeudGraf} \Transition[NoeudGraf]{\x} \DecaleNoeudy[2.5]{T\x}{NoeudGraf} \node (VT\x) at (NoeudGraf) {}; } } \newcommand{\SequenceTT}[3][NoeudGraf]{ \node (NoeudGraf) at (#1) {}; \Transition[NoeudGraf]{#2} \DecaleNoeudy[2.5]{T#2}{NoeudGraf} \foreach \x in {#3} {\Etape[NoeudGraf]{\x} \DecaleNoeudy[2.5]{X\x}{NoeudGraf} \Transition[NoeudGraf]{\x} \node (Ts) at (T\x) [minimum height=2.5em,minimum width=1em]{}; \DecaleNoeudy[2.5]{T\x}{NoeudGraf} \node (VT\x) at (NoeudGraf) {}; \node (VTs) at (VT\x) [minimum height=2.5em,minimum width=1em]{}; } } \newcommand{\SequenceTE}[4][NoeudGraf]{ \node (NoeudGraf) at (#1) {}; \Transition[NoeudGraf]{#2} \SequenceEE{#3}{#4} } \newcommand{\SequenceEE}[3][NoeudGraf]{ \node (NoeudGraf) at (#1) {}; \foreach \x in {#2} {\Etape[NoeudGraf]{\x} \DecaleNoeudy[2.5]{X\x}{NoeudGraf} \Transition[NoeudGraf]{\x} \DecaleNoeudy[2.5]{T\x}{NoeudGraf} \node (VT\x) at (NoeudGraf) {}; } \Etape[NoeudGraf]{#3} \DecaleNoeudy[2.5]{X#3}{NoeudGraf} \node (VX#3) at (NoeudGraf) {}; } \newcommand{\Graphe}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) {}; \node (debut) at (#1)[minimum size=2.5em] {}; \foreach \x / \y / \z in {#2}{ \Etape[NoeudGraf]{\x} \DecaleNoeudy[2.5]{X\x}{NoeudGraf} \Transition[NoeudGraf]{\x} \DecaleNoeudy[2.5]{T\x}{NoeudGraf} } \ActionRecept{#2} } \newcommand{\GrapheBoucle}[2][NoeudGraf]{ \node (NoeudGraf) at (#1) {}; \node (debutgraphe) at (#1)[minimum size=2.5em] {}; \foreach \x / \y / \z in {#2}{ \Etape[NoeudGraf]{\x} \DecaleNoeudy[2.5]{X\x}{NoeudGraf} \Transition[NoeudGraf]{\x} \node (fingraphe) at (T\x)[minimum size=2.5em] {}; \DecaleNoeudy[2.5]{T\x}{NoeudGraf} } \ActionRecept{#2} \LienRetour{fingraphe}{debutgraphe} } \newcommand{\SautEtapes}[4][-5]{ \DivOU{#2}{#1/L#2s,2/L#2} \Transition[L#2s]{#2s} \SequenceTT[L#2]{#2}{#3} \DecaleNoeudy[-2.5]{NoeudGraf}{VNoeudGraf} \ConvOU[-2]{Ts}{T#2s}{#4} } \newcommand{\RepriseEtapes}[4][-5]{ \DecaleNoeudx[#1]{#2}{#2r} \DecaleNoeudx[-1]{#2r}{#2r} \DecaleNoeudx[#1]{V#2}{V#2r} \DecaleNoeudx[-1]{V#2r}{V#2r} \node(V#2r) at (V#2r) [minimum height=2.5em,minimum width=1em,rectangle]{}; \ConvOU[-1]{#2}{#2r}{noeudreprise} \SequenceEE[noeudreprise]{#3}{#4} \DivOU{X#4}{#1/L#4r,1/L#4} \Transition[L#4]{#4} \Transition[L#4r]{#4r} \LienRetour[2]{T#4r}{V#2r} } \newcommand{\DivET}[2]{ \node (div1) at (#1)[minimum height=2.5em,minimum width=1em]{}; \draw (div1.base) -- (div1.south){}; \DecaleNoeudy[2.5]{#1}{div1} \foreach \x / \y in {#2} { \DecaleNoeudx[\x]{div1}{div2} \node (V\y) at (div2)[minimum height=2.5em,minimum width=1em]{}; \draw (V\y.base) -- (V\y.north); \draw [double distance=0.15em,thick] (div1.north) -- (V\y.north east) --(V\y.north west) {}{}; \node (\y) at (V\y){}[minimum size=0]; \node (V\y) at (V\y.south){}; } } \newcommand{\BrancheOU}[2][0]{ \node[below of=V#2,node distance=1 em,minimum height=2.5em,minimum width=1em](NoeudGraf){}; \node [right of=NoeudGraf, node distance=#1 em,minimum height=2.5em,minimum width=1em] (NoeudGraf){}; \draw (#2.south) -- ++(0,-0.5em) -| (NoeudGraf); } \newcommand{\FinBrancheOU}[3][0]{ \ifthenelse{\equal{CountB}{}}{ \node[below of=V#3,node distance=2 em,minimum height=2.5em,minimum width=1em](NoeudGraf){}; \node [right of=NoeudGraf, node distance=#1 em,minimum height=2.5em,minimum width=1em] (NoeudGraf){}; \draw (#3.south) -- ++(0,-0.5em) -| (NoeudGraf);} { aaa} } \newcommand{\FinBrancheOUa}[3][0]{ \newboolean{TestBoucle} \ifthenelse{\boolean{TestBoucle}{true}}{\draw(T53) -- (#3);}{ \node[below of=V#2,node distance=2 em,minimum height=2.5em,minimum width=1em](NoeudGraf){}; \node [right of=NoeudGraf, node distance=#1 em,minimum height=2.5em,minimum width=1em] (NoeudGraf){}; \node[minimum height=2.5em,minimum width=1em] (#3) at (NoeudGraf){}; \draw (#2.south) -- ++(0,-0.5em) -| (NoeudGraf); with: \setboolean{TestBoucle}{true} } } \newcommand{\DivOU}[2]{ \node (div1) at (V#1)[minimum height=2.5em,minimum width=1em]{}; \draw (div1.base) -- (div1.north) {}{}; \foreach \x / \y in {#2} { \DecaleNoeudx[\x]{div1}{div2} \node (div2) at (div2)[minimum height=2.5em,minimum width=1em]{}; \node (\y) at (div2)[minimum height=2.5em,minimum width=1em]{}; \draw (div1.base) -- (\y.east) --(\y.west) {}{}; \node (\y) at (div2.south)[minimum height=2.5em,minimum width=1em]{}; \draw(\y.base)--(\y.north){}{}; } } \newcommand{\ConvET}[4][0]{ \node (div) at (#2) [minimum height=2.5em,minimum width=1em]{}; \DecaleNoeudy[2.5]{div}{div} \foreach \x in {#3}{ \draw (#2) -- (div.base) -| (\x);\node (int\x) at (div.base -|\x) {}; } \DecaleNoeudx[#1]{div}{#4} \DecaleNoeudy[1.5]{#4}{#4} \draw (#4.base) |- (div.base); \foreach \x in {#3}{ \draw [double distance=0.15em,thick](int\x.east) -- (int\x.west); \draw [double distance=0.15em,thick](int\x.east) -- (div.east); } \draw [double distance=0.15em,thick](div.west) -- (div.east); } \newcommand{\ConvOU}[4][0]{ \node (div#2) at (#2.base)[minimum height=2.5em,minimum width=1em]{}; \DecaleNoeudx[0]{div#2}{div#2} \DecaleNoeudy[1.3]{div#2}{div} \DecaleNoeudx[#1]{V#2}{#4} \foreach \x in {#3} { \draw (div.base)--(div.east)--(div.west) -| (\x.base); \node (divi) at (div.west -| \x.base) [minimum width=1em,minimum height=2.5em]{}; \draw (divi.west) -- (divi.east); } \DecaleNoeudy[1.5]{#4}{#4} \draw (div#2.base)--(div.base)-|(#4.north); } \newcommand{\DecaleNoeudx}[3][0]{ \node [right of=#2, node distance=#1em](#3) {}; \node (#3) at (#3) [rectangle,minimum height=2.5em,minimum width=1em]{}; } \newcommand{\DecaleNoeudy}[3][0]{ \node [below of=#2, node distance=#1em](#3) {}; \node (#3) at (#3) [rectangle,minimum height=2.5em,minimum width=1em]{}; } \newcommand{\LienRetour}{\@ifstar\LienRetourUp\LienRetourN} \newcommand{\LienRetourN}[3][4]{ \node [left of=#2, node distance=#1em, minimum size=0cm](retourb#2) {}; \node [above of=#3, node distance=2.5em, minimum size=0cm](retourh#2) {}; %\DecaleNoeudx[-#1]{retourh#2}{retourh#2} \draw[->,>=latex'](#2.base)--(#2.south)-|(retourb#2.north)--(retourb#2|-#3)|-(retourh#2.base)-| (#3.north); } \newcommand{\LienRetourUp}[4][4]{ \node [left of=#2, node distance=#1em, minimum size=0cm](retourb#2) {}; \node [above of=#3, node distance=#4em, minimum size=0cm](retourh#2) {}; %\DecaleNoeudx[-#1]{retourh#2}{retourh#2} \draw[->,>=latex'](#2.base)--(#2.south)-|(retourb#2.north)--(retourb#2|-#3)|-(retourh#2.base)-| (#3.north); } \newcommand{\LienRetoura}[3][4]{ \node [left of=#3, node distance=#1em, minimum size=0cm](retourb#2) {}; \node [above of=retourb#2, node distance=2.5em, minimum size=0cm](retourh#2) {}; %\DecaleNoeudx[-#1]{retourh#2}{retourh#2} \draw [->,>=latex'] (#2.base)--(#2.south)-| (retourh#2.base) -| node[name=#2-#3,near end,right] {} (#3.north) ; } \newcommand{\Lien}[4][0]{ \node [above of=#4, node distance=2.5em, minimum size=0cm](retourh#3) {}; \DecaleNoeudy[#1]{retourh#3}{retourh#3} \draw [->,>=latex'] (#2.base) -- (#2.south) -| (#3.base) |- (retourh#3.base) -- (#4.north); } \newcommand{\Lieny[2]}[2.5]{ \DecaleNoeudy[#1]{#2}{V#2} \draw (#2.base) -- (V#2.base) {}; \DecaleNoeudy[#1]{#2}{#2} } \newcommand{\LienET[2]}[2.5]{ \DecaleNoeudy[#1]{#2}{V#2} \draw (#2) -- (V#2.base) {}; } \newcommand{\LienTE[2]}[2.5]{ \DecaleNoeudy[#1]{#2}{V#2} \draw (#2.base) -- (V#2) {}; } \newcommand{\LienRetourOU}[3][4]{ \coordinate [left of=#2, node distance=#1em, minimum size=0cm](retourb#2) {}; \coordinate [above of=#3, node distance=3.5em, minimum size=0cm](retourh#2) {}; \coordinate [above of=#3, node distance=2.5em, minimum size=0cm](retourh#3) {}; %\DecaleNoeudx[-#1]{retourh#2}{retourh#2} \draw (#2.base) -- (#2.south) -| (retourb#2) -- (retourb#2 |- #3)coordinate[pos=0.5,name=df]coordinate[pos=0.55,name=ff] |- (retourh#2-|#2) -- (retourh#3 -|#2) --++(-0.5em,0) -++ (1em,0) -|(#3.north) ; \draw[-latex] (df) -- (ff) ; } \newcommand{\EspaceV}[2][2.5]{ \node[below of=V#2,node distance=#1 em,minimum height=2.5em,minimum width=1em](NoeudGraf){}; \draw (#2.south) -- (NoeudGraf); \node[minimum height=2.5em,minimum width=1em] (V#2) at (NoeudGraf){}; }