summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tableaux/tableau.sty
blob: 214ba5050828273fb29164615efca31bd13bef3e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% Nouvelles marcros et environnement %%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


\newcounter{TabNodeX}                          % Compte les colonnes
\renewcommand{\theTabNodeX}{\Alph{TabNodeX}}   % Compte en A B C ...

\newcounter{TabNoLigne}[TabNodeX]              % Compte les lignes dans une colonne
\newcounter{TabVieux}                          % Ancienne ligne

\newcounter{TabShowLabel}
\newcommand{\TabShowLabelOn}{
    \setcounter{TabShowLabel}{1}
    \psgrid[gridcolor=blue,subgridcolor=blue,subgriddiv=10,%
                gridwidth=.5pt,subgridwidth=.1pt,%
                gridlabels=0pt](-1cm,-1)(1,\NbLignesH)}
\newcommand{\TabShowLabelOff}{\setcounter{TabShowLabel}{0}}

\newlength{\TabLargeur}             % Largeur du tableau en cm
\newlength{\TabColX}                % Abscisse de la colonnne
\newlength{\TabNodeX}               % Abscisse du node

\newlength{\TabTitreL}              % Largeur de la colonne de gauche
\setlength{\TabTitreL}{1.5cm}       % de 1.5cm par défaut

\newlength{\TabHautLigne}           % Hauteur d'une ligne en cm
\newlength{\TabNodeY}               % Ordonnée du node

\newcommand{\TabNewCol}[1]{%
    \setcounter{TabVieux}{-1}
	\stepcounter{TabNodeX}              % Incrémente le numéro de colonne
    \setlength{\TabColX}{#1\TabLargeur} % place la colonne horizontalement
    }
    
\newcommand{\rTabPut}[5][0]{%           % #1 type de ligne qui traverse
                                        %    la case. 0 rien (défaut),
                                        %    1 pointillé, 2 filet, 3 dbl barre
                                        % #2 point de référence
                                        % #3 Correction horizontale
                                        % #4 Correction verticale 
                                        % #5 ce qu'il faut afficher
    
    % Calcule l'ordonnée du node avec la correction verticale
    
    \setlength{\TabNodeY}{#4\TabHautLigne}
    \addtolength{\TabNodeY}{-\theTabNoLigne\TabHautLigne}
    
    
    % Calcule l'abscisse du node avec la correction horizoncale
    
    \setlength{\TabNodeX}{#3cm}
    \addtolength{\TabNodeX}{\TabColX}
        
        % Affiche le nom des nodes à la place de ce qu'il faudrait
        % Plus une grille pour les positionner

        \ifthenelse%           ligne en pointillé dans la case
		{\equal{#1}{1}}%
		{\psline[style=TabLigneP]%
			(\TabNodeX,\theTabVieux)%
			(\TabNodeX,\theTabNoLigne)}%
		{}%

		\ifthenelse%           ligne en continue dans la case
		{\equal{#1}{2}}%
		{\psline[style=TabLigne]%
			(\TabNodeX,\theTabVieux)%
			(\TabNodeX,\theTabNoLigne)}%
		{}%

		\ifthenelse%           ligne double dans la case
		{\equal{#1}{3}}%
		{\psline[style=TabDblBarre]%
			(\TabNodeX,\theTabVieux)%
			(\TabNodeX,\theTabNoLigne)}%
		{}%
        \ifthenelse%
        {\equal{\theTabShowLabel}{0}}%
        {    % Pour que les nodes se déplacent dynamiquement avec le changement
             % de hauteur de ligne sauf sur la ligne au dessus du tableau. 

            \ifthenelse%
            {\equal{\theTabNoLigne}{0}}%
            {\rput[#2](\TabNodeX,#4cm)%
                {\rnode{\theTabNodeX\theTabNoLigne}{#5}}}%
            {\rput[#2](\TabNodeX,\TabNodeY)%
                {\rnode{\theTabNodeX\theTabNoLigne}{#5}}}%

		\stepcounter{TabVieux}
        \stepcounter{TabNoLigne}            % numéro de ligne suivante
		
        }%
        {    % Pour que les nodes se déplacent dynamiquement avec le changement
             % de hauteur de ligne sauf sur la ligne au dessus du tableau. 
            \ifthenelse%
            {\equal{\theTabNoLigne}{0}}%
            {\uput{.2}[90](\TabNodeX,#4cm){\bf\footnotesize\theTabNodeX\theTabNoLigne}
			 \rput[#2](\TabNodeX,#4cm)%
                {\rnode{\theTabNodeX\theTabNoLigne}{\small$\bullet$}}}%
            {\uput{.2}[90](\TabNodeX,\TabNodeY){\bf\footnotesize\theTabNodeX\theTabNoLigne}
			 \rput[#2](\TabNodeX,\TabNodeY)%
                {\rnode{\theTabNodeX\theTabNoLigne}{\small$\bullet$}}}%
        
        \stepcounter{TabNoLigne}            % numéro de ligne suivante
        
        }%

    
    }

\newenvironment{MonTableau}[3]{%        % #1 est le nombre de lignes
                                        % #2 est la largeur du tableau
                                        % #3 est la hauteur d'une ligne
    
    \setcounter{TabNodeX}{0}            % On repart de 0
	
	\setlength{\TabLargeur}{#2cm}       % Largeur du tableau
    \setlength{\TabHautLigne}{#3cm}     % Hauteur des lignes
    \psset{xunit=#2,yunit=-#3}          % Unités pour que chaque case du tableau
                                        % ait les dimension 1x1
                                        
    \begin{pspicture}(-\TabTitreL,#1)(1,.8cm)   % Début de PSpicture
    
    \def\NbLignesH{#1}
    }%
    {\psline(-\TabTitreL,0)(1,0)                % Dessin des lignes horizontales
    \multido{\i=1+1}{\NbLignesH}{%
        \psline[linewidth=.3pt](0,\i)(1,\i)}
    
	% Dessin des lignes verticales et de la dernière ligne
    \psline(0,.8cm)(0,\NbLignesH)(1,\NbLignesH)(1,0)
	
	\end{pspicture}                    % Fin de PSpicture
    }

\newcommand{\TabFleche}[2]{%            % Flèche entre deux nodes
    \ncline[nodesep=3pt,linewidth=.5pt]{->}{#1}{#2}}

\newcommand{\TabTitre}[2]{%             % Titre de ligne var. ou sgn. de f
	$\stackrel{\rule[-5pt]{0pt}{5pt}\text{\normalsize\bf#1}}{#2}$}

\newcommand{\TabFerme}{%      % ferme le tableau pour ceux qui on froid
	\psline(1,\NbLignesH)(1,.8cm)(-\TabTitreL,.8cm)(-\TabTitreL,\NbLignesH)%
	(1,\NbLignesH)}

\newcommand{\TabTitreFerme}{%      % lignes horizontales dans la col. de gauche
    \multido{\i=1+1}{\NbLignesH}{%
        \psline[linewidth=.3pt](-\TabTitreL,\i)(0,\i)}}

\newpsstyle{TabDblBarre}{linewidth=.4pt,doubleline=true,doublesep=.6pt}
\newpsstyle{TabLigne}{linewidth=.4pt}
\newpsstyle{TabLigneP}{linewidth=.4pt,linestyle=dashed,dash=3pt 2pt}

\newcommand{\TabZ}[1][$0$]{\pscirclebox*{#1}}