summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/fast-diagram
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-03-02 01:15:13 +0000
committerKarl Berry <karl@freefriends.org>2013-03-02 01:15:13 +0000
commitda2c8ff952eba16f1ee9be9fb3ce9b7d3698e139 (patch)
treee7f2d6aad7680b61d8951b35d2eee5448e634492 /Master/texmf-dist/tex/latex/fast-diagram
parente77fff9dbd365d2a2cf838b2a1f3d71ef5ecfad7 (diff)
fast-diagram (27feb13)
git-svn-id: svn://tug.org/texlive/trunk@29264 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/fast-diagram')
-rw-r--r--Master/texmf-dist/tex/latex/fast-diagram/fast-diagram.sty340
1 files changed, 340 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/fast-diagram/fast-diagram.sty b/Master/texmf-dist/tex/latex/fast-diagram/fast-diagram.sty
new file mode 100644
index 00000000000..d5ddbbc2c1b
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/fast-diagram/fast-diagram.sty
@@ -0,0 +1,340 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Package fast-diagram.sty
+%
+% Version 1.1 (27/02/13)
+% Ce package est destiné à réaliser facilement des diagrammes FAST
+% (voir http://fr.wikipedia.org/wiki/Function_Analysis_System_Technique ).
+%
+% Réalisé par Raphaël ALLAIS (Lycée G.Eiffel de Dijon),
+% avec l'importante contribution de Yannick Le Bras (Lycée Montesquieu du Mans)
+% et les conseils de Robert Papanicola (Lycée Jacques Amyot d'Auxerre)
+% et de Xavier Pessoles (Lycée Rouvière de Toulon).
+%
+% Ce package est proposé en licence LPPL (LaTeX Project Public License), version 1.3c 2008-05-04.
+% Cela implique que vous pouvez UTILISER ce package autant que vous le voulez,
+% mais que vous ne pouvez le MODIFIER que SOUS UN AUTRE NOM (créer un dérivé).
+% Toutefois, je suis totalement ouvert à toute contribution.
+% Je souhaite juste être prévenu si vous souhaitez apporter votre pierre à l'édifice.
+%
+% Pour toute question/conseil/commentaire/reproche/menace de mort ou autre :
+% allais.raphael -arobase- free.fr
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Mise à jour :
+% V1.0 (25/02/13) :
+% Uplaod du package "FAST.sty"
+% V1.1 (27/02/13) :
+% Renommage du package en "fast-diagram.sty"
+% ainsi que pour l'appel du package (\usepackage{fast-diagram})
+% Changement des noms des commandes (ex : \FASTFT --> \fastFT).
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Entête
+%-----------------------------------------
+%% Informations générales
+%-----------------------------------------
+\NeedsTeXFormat{LaTeX2e}[1999/01/01]
+\ProvidesPackage{fast-diagram}[2013/02/27]
+
+
+
+
+
+%% Chargement des extensions
+%--------------------------------------
+\RequirePackage{tikz}
+\RequirePackage{ifthen}
+\usetikzlibrary{calc,fit,shapes}
+\RequirePackage{relsize}
+\RequirePackage{xargs}
+
+\newif\if@fastRaccourcis \@fastRaccourcisfalse
+\DeclareOption{raccourcis} {\@fastRaccourcistrue}
+\ProcessOptions
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Paramètres divers
+%--------------------------
+%Dimentsions
+%........................
+
+\newcommand*{\fastInterligne} {} %Longueur d'interligne
+\newcommand*{\fastEspaceColonne} {} %Espace entre colonne (de coin supérieur droit à coin supérieur droit)
+\newcommand*{\fastLargeurBoite} {} %Largeur des boites
+\newcommand*{\fastHauteurBoite} {} %Largeur des boites
+\newcommand*{\fastDecalageTrait} {} %Décalage des connecteur vers le bas, par rapport au sommet de la boite
+\newcommand*{\fastDecalageOuVertical} {} %Décalage vertical du connecteur ``OU''
+\newcommand*{\fastDecalageOuHorizontal} {} %Décalage horizontal du connecteur ``OU''
+
+%Styles
+%.........................
+\newcommand*{\fastFSarrondi} {} %Rayon des arrondis des angles de la boite ``fonction de service'' (la 1ere boite)
+\newcommand*{\fastFTarrondi} {} %Rayon des arrondis des angles de la boite ``fonction de technique''
+\newcommand*{\fastSTarrondi} {} %Rayon des arrondis des angles de la boite ``solution technique''
+\newcommand*{\fastFSStyle} {}
+\newcommand*{\fastFTStyle} {}
+\newcommand*{\fastSTStyle} {}
+\newcommand*{\fastFVStyle} {}
+\newcommand*{\fastFStexteStyle} {} %Style du texte de la boite ``fonction de service'' (la 1ere boite)
+\newcommand*{\fastFTtexteStyle} {} %Style du texte de la boite ``fonction de technique''
+\newcommand*{\fastSTtexteStyle} {} %Style du texte de la boite ``solution technique''
+\newcommand*{\fastFVtexteStyle} {} %Style du texte de la boite ``vide''
+\newcommand*{\fastEpaisseurTraits} {} %Epaisseur des traits
+%Couleurs
+%.......................................
+\definecolor{fastCouleurTexteFS}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de service'' (la 1ere boite)
+\definecolor{fastCouleurBorduresFS}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de service'' (la 1ere boite)
+\definecolor{fastCouleurFondFS}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de service'' (la 1ere boite)
+\definecolor{fastCouleurTexteFT}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de technique''
+\definecolor{fastCouleurBorduresFT}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de technique''
+\definecolor{fastCouleurFondFT}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de technique''
+\definecolor{fastCouleurTexteST}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de service''
+\definecolor{fastCouleurBorduresST}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de service''
+\definecolor{fastCouleurFondST}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de service''
+\definecolor{fastCouleurConnecteurs}{rgb}{0,0,0}%Couleur des connecteurs
+\definecolor{fastCouleurTexteFV}{rgb}{0,0,0} %Couleur du texte de la boite ``vide''
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\newcommand*{\fastSetCouleurBordures}[2][named] %Commande qui change les couleurs de toutes les bordures
+ {\definecolor{fastCouleurBorduresFS}{#1}{#2}
+ \definecolor{fastCouleurBorduresFT}{#1}{#2}
+ \definecolor{fastCouleurBorduresST}{#1}{#2}}
+
+\newcommand*{\fastSetCouleurTexte}[2][named] %Commande qui change la couleur du texte
+ {\definecolor{fastCouleurTexteFS}{#1}{#2}
+ \definecolor{fastCouleurTexteFT}{#1}{#2}
+ \definecolor{fastCouleurTexteST}{#1}{#2}
+ \definecolor{fastCouleurTexteFV}{#1}{#2}}
+
+\newcommand*{\fastSetCouleurFond}[2][named] %Commande qui change la couleur de tous les fonds de boite
+ {\definecolor{fastCouleurFondFS}{#1}{#2}
+ \definecolor{fastCouleurFondFT}{#1}{#2}
+ \definecolor{fastCouleurFondST}{#1}{#2}}
+
+\newcommand*{\fastSetCouleurConnecteurs}[2][named] %Commande qui change la couleur du texte
+ {\definecolor{fastCouleurConnecteurs}{rgb}{#1}}
+
+\newcommand*{\fastSetCouleurTraits}[2][named] %Commande qui change la couleur à la fois des bordures et des connecteurs
+ {\fastSetCouleurConnecteurs[#1]{#2}
+ \fastSetCouleurBordures[#1]{#2}}
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Commandes internes
+%-----------------------------
+
+\newcommand*{\fastReset} %Remet tous les paramètres à zéro (utilisé une fois au début pour initialisé)
+ {
+ \renewcommand*{\fastInterligne} {0.5em}
+ \renewcommand*{\fastEspaceColonne} {10em}
+ \renewcommand*{\fastLargeurBoite} {7em}
+ \renewcommand*{\fastHauteurBoite} {0}
+ \renewcommand*{\fastDecalageTrait} {-0.6em}
+ \renewcommand*{\fastDecalageOuVertical} {0.4em}
+ \renewcommand*{\fastDecalageOuHorizontal} {-0.4em}
+ \renewcommand*{\fastFSarrondi} {0em}
+ \renewcommand*{\fastFTarrondi} {0em}
+ \renewcommand*{\fastSTarrondi} {0.5em}
+ \renewcommand*{\fastEpaisseurTraits} {0.05em}
+
+ \renewcommand*{\fastFStexteStyle} {\scalefont{1}\selectfont\bfseries}
+ \renewcommand*{\fastFTtexteStyle} {\smaller}
+ \renewcommand*{\fastSTtexteStyle} {\smaller\itshape}
+ \renewcommand*{\fastFVtexteStyle} {}
+ \renewcommand*{\fastFSStyle} {}
+ \renewcommand*{\fastFTStyle} {}
+ \renewcommand*{\fastSTStyle} {}
+ \renewcommand*{\fastFVStyle} {}
+
+
+ \definecolor{fastCouleurTexteFS}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de service'' (la 1ere boite)
+ \definecolor{fastCouleurBorduresFS}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de service'' (la 1ere boite)
+ \definecolor{fastCouleurFondFS}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de service'' (la 1ere boite)
+ \definecolor{fastCouleurTexteFT}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de technique''
+ \definecolor{fastCouleurBorduresFT}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de technique''
+ \definecolor{fastCouleurFondFT}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de technique''
+ \definecolor{fastCouleurTexteST}{rgb}{0,0,0} %Couleur du texte de la boite ``fonction de service''
+ \definecolor{fastCouleurBorduresST}{rgb}{0,0,0} %Couleur de bordures de la boite ``fonction de service''
+ \definecolor{fastCouleurFondST}{rgb}{1,1,1} %Couleur de fond de la boite ``fonction de service''
+ \definecolor{fastCouleurConnecteurs}{rgb}{0,0,0}%Couleur des connecteurs
+ \definecolor{fastCouleurTexteFV}{rgb}{0,0,0} %Couleur du texte de la boite ``vide''
+ }
+\fastReset %On lance le reset une fois au chargement du package pour initialiser toutes les variables.
+
+
+
+
+\newcounter{cptAbscisse} %Compteur d'abscisse (a quelle colonne sommes-nous ?) - Sert notamment à nommer les noeuds
+\newcounter{cptAbscisseParent} %abscisse parent
+\newcounter{cptBoite} %Compteur de boite (pour leur donner un nom different)
+\newlength\posX
+\posX=0em
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+\newcommand{\ttt}{\newcommand[1][ddd]{\lolo}{Hello !!!}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%Environnement fast
+%-----------------------------
+\newenvironment{fast}[1]
+ {
+
+
+ \newcommand*{\fastAvanceColonne} %Avance à la colonne suivant
+ { \setcounter{cptAbscisseParent}{\thecptAbscisse} %On enregistre le compteur actuel (qui correspond encore au parent)
+ \addtocounter{cptAbscisse}{1} %puis on décale le compteur d'une colonne
+ %\advance \posX by \fastEspaceColonne %On se décale l'abscisse géométrique d'une colonne
+ %\setlength{\posX}{\posX + \fastEspaceColonne}
+ \addtolength{\posX}{\fastEspaceColonne}
+ }
+
+ \newcommand*{\fastEnregistreMinimum} % Enregistre la position minimum de la ligne en cours (pour aligner la ligne suivante)
+ { %Attention, c'est compliqué : le but est de chercher le minimum absolu des nodes de la ligne en cours, qui nous servira d'ordonnee pour la ligne suivante
+ \coordinate (SudBoite) at ($(noeud \thecptAbscisse.south)+(0,-\fastInterligne)$);%Sud de la boite + interligne
+ \node[inner sep=0,fit=(SudBoite) (BoiteMinimums)] (BoiteMinimumsAnnexe) {}; %On cree une boite qui contient le point minimum du node courant ainsi que le dernier minimum enregistré
+ \path let \p1=(BoiteMinimumsAnnexe.south) in coordinate (BoiteMinimums) at (0,\y1) ; %On enregistre ce minimum dans BoiteMinimums
+ }
+
+ \newcommand*{\fastReculeColonne}
+ { %\advance \posX by -\fastEspaceColonne %On recule l'abscisse géométrique d'une colonne
+ \addtolength{\posX}{-\fastEspaceColonne}
+ \addtocounter{cptAbscisse}{-1} %On recule le compteur d'une colonne
+ }
+
+ \newcommand*{\fastTraceConnecteurs}[1][]
+ {
+ \ifthenelse{\equal{##1}{tempo}} %Option ``tempo''
+ {\draw [color=fastCouleurConnecteurs,line width=\fastEpaisseurTraits] (noeud \thecptAbscisse.north) -- ($(noeud \thecptAbscisse.north)+(0,\fastInterligne)$); }{}
+
+ \ifthenelse{\equal{##1}{ou}}
+ {
+ \path ($(noeud \thecptAbscisse.north west)+(\fastDecalageOuHorizontal,\fastDecalageTrait)$) -- ($(noeud \thecptAbscisseParent.north east)+(0,\fastDecalageTrait)+(\fastDecalageOuHorizontal,-\fastDecalageOuVertical)$) coordinate[pos=.5] (milieu); %On cherche le point milieu du connecteur
+ \draw [color=fastCouleurConnecteurs,line width=\fastEpaisseurTraits] ($(noeud \thecptAbscisse.north west)+(0,\fastDecalageTrait)$) -| (milieu) |- ($(noeud \thecptAbscisseParent.north east)+(0,\fastDecalageTrait)+(0,-\fastDecalageOuVertical)$); %On trace le connecteur en faisant un zig
+ }
+ { \path ($(noeud \thecptAbscisse.north west)+(0,\fastDecalageTrait)$) -- ($(noeud \thecptAbscisseParent.north east)+(0,\fastDecalageTrait)$) coordinate[pos=.5] (milieu); %On cherche le point milieu du connecteur
+ \draw [color=fastCouleurConnecteurs,line width=\fastEpaisseurTraits]($(noeud \thecptAbscisse.north west)+(0,\fastDecalageTrait)$) -| (milieu) |- ($(noeud \thecptAbscisseParent.north east)+(0,\fastDecalageTrait)$); %On trace le connecteur en faisant un zig-zag par le milieu
+ }
+ }
+
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %Fonction technique
+ %---------------------------------------------
+ \newcommand*\fastFT[3][]{%Argument 1=option, Argument 2 = contenu de la fonction, Argument 3 = descendance)
+ \fastAvanceColonne
+ \addtocounter{cptBoite}{1} %//On incremente le numero de la boite
+ \ifthenelse{\equal{##2}{}}%Si la fonction est vide
+ { \node[text width=\fastLargeurBoite,anchor=north west] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {}; %Un node vide (parce que les enfants vont en avoir besoin)
+ \draw [color=fastCouleurConnecteurs,line width=\fastEpaisseurTraits]($(noeud \thecptAbscisse.north east)+(0,\fastDecalageTrait)$)--($(noeud \thecptAbscisse.north west)+(0,\fastDecalageTrait)$);
+ \fastTraceConnecteurs
+ }%Si la fonction n'est pas vide
+ { \node[draw,rounded corners=\fastFTarrondi,text width=\fastLargeurBoite,minimum size=\fastHauteurBoite,text centered,anchor=north west,fastCouleurBorduresFT,fill=fastCouleurFondFT,text=fastCouleurTexteFT,line width=\fastEpaisseurTraits,\fastFTStyle] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {\fastFTtexteStyle ##2}; %On écrit le contenu de la fonction}
+ \fastTraceConnecteurs[##1]
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west) (noeud \thecptAbscisse.south east)] (fastBoite\thecptBoite) {};%On créer une boite vide par dessus, aux bonne dimension, afin de lui donner un nom
+ }
+ ##3 %Il s'agit de la descendance passée en argument, et affichée ici.
+ \fastEnregistreMinimum
+ \fastReculeColonne
+ }
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %Solution technique
+ %---------------------------
+ \newcommandx*\fastST[3][1=,3=]{%Argument 1 = option,Argument 2 = contenu de la solution technique)
+ \fastAvanceColonne %On avance d'une colonne
+ \addtocounter{cptBoite}{1} %//On incremente le numero de la boite
+ \node[dashed,rounded corners=\fastSTarrondi,draw,text width=\fastLargeurBoite,minimum size=\fastHauteurBoite,line width=\fastEpaisseurTraits,text centered,anchor=north west,fastCouleurBorduresST,fill=fastCouleurFondST,text=fastCouleurTexteST,\fastSTStyle] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {\fastSTtexteStyle ##2}; %On écrit le contenu de la fonction
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west) (noeud \thecptAbscisse.south east)] (fastBoite\thecptBoite) {};%On créer une boite vide par dessus, aux bonne dimension, afin de lui donner un nom
+ \fastTraceConnecteurs[##1]
+ ##3
+ \fastEnregistreMinimum
+ \fastReculeColonne
+ }
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %Boite vide
+ %---------------------------
+ \newcommandx*\fastVide[3][1=,3=]{%Argument 1 = option,Argument 2 = contenu de la solution technique)
+ \fastAvanceColonne %On avance d'une colonne
+ \addtocounter{cptBoite}{1} %//On incremente le numero de la boite
+ \node[text width=\fastLargeurBoite,minimum size=\fastHauteurBoite,text centered,anchor=north west,text=fastCouleurTexteFV,\fastFVStyle] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {\fastFVtexteStyle ##2}; %On écrit le contenu de la fonction
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west) (noeud \thecptAbscisse.south east)] (fastBoite\thecptBoite) {};%On créer une boite vide par dessus, aux bonne dimension, afin de lui donner un nom
+ ##3
+ \fastEnregistreMinimum
+ \fastReculeColonne
+ }
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ %Ligne droite simple
+ %---------------------------
+ \newcommand*\fastTrait[1]{%
+ \fastAvanceColonne
+ \node[text width=\fastLargeurBoite,anchor=north west] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {}; %Un node vide (parce que les enfants vont en avoir besoin)
+ \draw [color=fastCouleurConnecteurs,line width=\fastEpaisseurTraits] ($(noeud \thecptAbscisse.north east)+(0,\fastDecalageTrait)$)--($(noeud \thecptAbscisse.north west)+(0,\fastDecalageTrait)$);
+ \fastTraceConnecteurs
+ ##1 %Il s'agit de la descendance passée en argument, et affichée ici.
+ \fastEnregistreMinimum
+ \fastReculeColonne
+ }
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+ \if@fastRaccourcis
+ \newcommand*{\FT}[3][] {\fastFT[##1]{##2}{##3}}
+ \newcommandx*{\ST}[3][1=,3=] {\fastST[##1]{##2}[##3]}
+ \newcommandx*{\FV}[3][1=,3=] {\fastVide[##1]{##2}[##3]}
+ \newcommand*{\trait}[1] {\fastTrait{##1}}
+ \fi
+
+
+ \begin{tikzpicture} %On commence le dessin
+ \setcounter{cptAbscisse}{0}
+ \setcounter{cptAbscisseParent}{0}
+ \setcounter{cptBoite}{0}
+ \posX=0em %Abscisse des boites (0 au début)
+ \coordinate (BoiteMinimums) at (0,0); %noeud ou coordonnees, dont le south correspond au minimum de la ligne en cours (utile pour positionner la ligne suivante)
+ \node[draw,rounded corners=\fastFSarrondi,minimum size=\fastHauteurBoite,line width=\fastEpaisseurTraits,text width=\fastLargeurBoite,text centered,anchor=north west,fastCouleurBorduresFS,fill=fastCouleurFondFS,text=fastCouleurTexteFS,\fastFSStyle] (noeud \thecptAbscisse) at ($(\posX,0)+(BoiteMinimums)$) {\fastFStexteStyle #1}; %Fonction de service que l'on va développer dans ce FAST
+ \node[inner sep=0,fit=(noeud \thecptAbscisse.north west) (noeud \thecptAbscisse.south east)] (fastBoite\thecptBoite) {};%On créer une boite vide par dessus, aux bonne dimension, afin de lui donner un nom
+
+ }
+ { \end{tikzpicture} %Fin du dessin
+
+ }
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+
+
+
+%Fin du package
+\endinput
+
+
+
+
+
+
+
+
+
+
+