diff options
author | Karl Berry <karl@freefriends.org> | 2013-03-02 01:15:13 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2013-03-02 01:15:13 +0000 |
commit | da2c8ff952eba16f1ee9be9fb3ce9b7d3698e139 (patch) | |
tree | e7f2d6aad7680b61d8951b35d2eee5448e634492 /Master/texmf-dist/tex | |
parent | e77fff9dbd365d2a2cf838b2a1f3d71ef5ecfad7 (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')
-rw-r--r-- | Master/texmf-dist/tex/latex/fast-diagram/fast-diagram.sty | 340 |
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 + + + + + + + + + + + |