summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tableaux/tableau.sty
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/tableaux/tableau.sty
Initial commit
Diffstat (limited to 'macros/latex/contrib/tableaux/tableau.sty')
-rw-r--r--macros/latex/contrib/tableaux/tableau.sty155
1 files changed, 155 insertions, 0 deletions
diff --git a/macros/latex/contrib/tableaux/tableau.sty b/macros/latex/contrib/tableaux/tableau.sty
new file mode 100644
index 0000000000..214ba50508
--- /dev/null
+++ b/macros/latex/contrib/tableaux/tableau.sty
@@ -0,0 +1,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}}