% % code from VietTUG code corner ( http://viettug.org/code/ ) % author: vanchutr % date: Mon, 26 May 2008 23:52:14 +0700 % description: % tabvar.tex % view: http://viettug.org/code/code.6b3788b00e.html % download: http://viettug.org/code/code.6b3788b00e.txt % %-- Macros tabvar créées par Denis Léger \newrgbcolor{gristabvar}{0.7669 0.7669 0.7669} \newdimen\tabdim \newdimen\tabblanc \catcode`\@=11 \newdimen\tv@mydimen \newdimen\tv@mydimendeux \newdimen\tv@dimYHaut \newdimen\tv@dimYMilieu \newdimen\tv@dimYBas \newdimen\tv@dimX \newdimen\tv@Xdim \newdimen\tv@YTotal \newcount\tv@countLigne \newdimen\tv@DX \tabdim=0.8cm \tabblanc=2pt \newif\iftv@calcul \def\psdefaut{\psset{xunit=1cm,yunit=1cm,runit=1cm,linewidth=0.4pt,linestyle=solid,linecolor=black}} \let\dsp=\displaystyle \let\spt=\scriptstyle \def\initY#1{% \setbox100=\hbox{#1}% \global\tv@mydimen=\ht100\global\advance\tv@mydimen by\dp100} \def\initX#1{\setbox100=\hbox{#1}% \ifdim\wd100>\tabdim \global\tv@mydimen=\wd100 \else \global\tv@mydimen=\tabdim \fi} \def\initx#1{\setbox100=\hbox{#1}\global\tv@mydimen=\wd100} \def\calculeYTotal{% \global\tv@YTotal=\tv@dimYHaut\global\advance\tv@YTotal by\tv@dimYMilieu\global\advance\tv@YTotal by\tv@dimYBas} \def\setY#1#2#3{\global\tv@dimYHaut=#1\global\tv@dimYMilieu=#2\global\tv@dimYBas=#3\relax} \def\max#1#2{\ifdim#2>#1\global#1=#2\fi} \def\GererX#1{% \initX{#1}\tv@mydimen=1.1\tv@mydimen% \max{\tv@Xdim}{\tv@mydimen}} \def\GererXDimension#1{% \tv@mydimen=#1% \tv@mydimen=1.1\tv@mydimen% \max{\tv@Xdim}{\tv@mydimen}% \max{\tv@Xdim}{\tabdim}% } \def\GererDXSimple#1{% \initX{#1}\tv@mydimen=1.1\tv@mydimen \tv@mydimen=0.5\tv@mydimen \max{\tv@DX}{\tv@mydimen}% } \def\GererDXDimension#1{% \tv@mydimen=#1% \max{\tv@DX}{\tv@mydimen}% \max{\tv@DX}{0.5\tabdim}% } \def\tabvarputhaut#1{% \iftv@calcul \initY{#1}% \max{\tv@dimYHaut}{\tv@mydimen}% \fi \rput(\tv@DX,-0.5\tv@dimYHaut){#1}} \def\tabvarputmilieu#1{% \iftv@calcul \initY{#1}% \max{\tv@dimYMilieu}{\tv@mydimen}% \fi% \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by 0.5\tv@dimYMilieu \rput(\tv@DX,-\tv@mydimen){#1}} \def\tabvarputbas#1{% \iftv@calcul \initY{#1}% \max{\tv@dimYBas}{\tv@mydimen}% \fi% \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by \tv@dimYMilieu\advance\tv@mydimen by 0.5\tv@dimYBas \rput(\tv@DX,-\tv@mydimen){#1}} \def\traithaut{\psline(\tv@DX,0)(\tv@DX,-\tv@dimYHaut)} \def\traitmilieu{\tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu \psline(\tv@DX,-\tv@dimYHaut)(\tv@DX,-\tv@mydimen)} \def\traitbas{\tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu \dimen100=\tv@mydimen\advance\tv@mydimen by\tv@dimYBas \psline(\tv@DX,-\dimen100)(\tv@DX,-\tv@mydimen)} \def\doubletraithaut{\psline[doubleline=true,doublesep=1pt](\tv@DX,0)(\tv@DX,-\tv@dimYHaut)} \def\doubletraitmilieu{\tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu \psline[doubleline=true,doublesep=1pt](\tv@DX,-\tv@dimYHaut)(\tv@DX,-\tv@mydimen)} \def\doubletraitbas{\tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu \dimen100=\tv@mydimen\advance\tv@mydimen by\tv@dimYBas \psline[doubleline=true,doublesep=1pt](\tv@DX,-\dimen100)(\tv@DX,-\tv@mydimen)} \def\trait{\traithaut\traitmilieu\traitbas} \def\dbt{\doubletraithaut\doubletraitmilieu\doubletraitbas} \def\fm{% \iftv@calcul \GererXDimension{\tabdim}% \GererDXDimension{0.5\tabdim}% \fi \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu \tv@dimX=\tv@Xdim\advance\tv@dimX by -\tv@DX % \hbox to\tv@Xdim{\rput(\tv@DX,0){\psline{->}(-0.9\tv@DX,-\tv@mydimen)(0.9\tv@dimX,-\tv@dimYHaut)}\hfil}} \def\fd{% \iftv@calcul \GererXDimension{\tabdim}% \GererDXDimension{0.5\tabdim}% \fi \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu \tv@dimX=\tv@Xdim\advance\tv@dimX by -\tv@DX % \hbox to\tv@Xdim{\rput(\tv@DX,0){\psline{->}(-0.9\tv@DX,-\tv@dimYHaut)(0.9\tv@dimX,-\tv@mydimen)}\hfil}} \def\fhh{% \iftv@calcul \GererXDimension{\tabdim}% \GererDXDimension{0.5\tabdim}% \fi \tv@dimX=\tv@Xdim\advance\tv@dimX by -\tv@DX % \hbox to\tv@Xdim{\rput(\tv@DX,0){\psline{->}(-0.9\tv@DX,-0.5\tv@dimYHaut)(0.9\tv@dimX,-0.5\tv@dimYHaut)}\hfil}} \def\fhm{% \iftv@calcul \GererXDimension{\tabdim}% \GererDXDimension{0.5\tabdim}% \fi \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by 0.5\tv@dimYMilieu \tv@dimX=\tv@Xdim\advance\tv@dimX by -\tv@DX \hbox to\tv@Xdim{\rput(\tv@DX,0){\psline{->}(-0.9\tv@DX,-\tv@mydimen)(0.9\tv@dimX,-\tv@mydimen)}\hfil}} \def\fhb{% \iftv@calcul \GererXDimension{\tabdim}% \GererDXDimension{0.5\tabdim}% \fi \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu\advance\tv@mydimen by0.5\tv@dimYBas \tv@dimX=\tv@Xdim\advance\tv@dimX by -\tv@DX % \hbox to\tv@Xdim{\rput(\tv@DX,0){\psline{->}(-0.9\tv@DX,-\tv@mydimen)(0.9\tv@dimX,-\tv@mydimen)}\hfil}} \def\fmb{% \iftv@calcul \GererXDimension{\tabdim}% \GererDXDimension{0.5\tabdim}% \fi \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu\advance\tv@mydimen by 0.5\tv@dimYBas \tv@mydimendeux=\tv@dimYHaut\advance\tv@mydimendeux by 0.5\tv@dimYMilieu \tv@dimX=\tv@Xdim\advance\tv@dimX by -\tv@DX % \hbox to\tv@Xdim{\rput(\tv@DX,0){\psline{->}(-0.9\tv@DX,-\tv@mydimen)(0.9\tv@dimX,-\tv@mydimendeux)}\hfil}} \def\fdb{% \iftv@calcul \GererXDimension{\tabdim}% \GererDXDimension{0.5\tabdim}% \fi \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu\advance\tv@mydimen by 0.5\tv@dimYBas \tv@mydimendeux=\tv@dimYHaut\advance\tv@mydimendeux by 0.5\tv@dimYMilieu \tv@dimX=\tv@Xdim\advance\tv@dimX by -\tv@DX % \hbox to\tv@Xdim{\rput(\tv@DX,0){\psline{->}(-0.9\tv@DX,-\tv@mydimendeux)(0.9\tv@dimX,-\tv@mydimen)}\hfil}} \def\fmh{% \iftv@calcul \GererXDimension{\tabdim}% \GererDXDimension{0.5\tabdim}% \fi \tv@mydimen=0.5\tv@dimYHaut\tv@mydimendeux=\tv@dimYHaut\advance\tv@mydimendeux by 0.5\tv@dimYMilieu \tv@dimX=\tv@Xdim\advance\tv@dimX by -\tv@DX % \hbox to\tv@Xdim{\rput(\tv@DX,0){\psline{->}(-0.9\tv@DX,-\tv@mydimendeux)(0.9\tv@dimX,-\tv@mydimen)}\hfil}} \def\fdh{% \iftv@calcul \GererXDimension{\tabdim}% \GererDXDimension{0.5\tabdim}% \fi \tv@mydimen=0.5\tv@dimYHaut\tv@mydimendeux=\tv@dimYHaut\advance\tv@mydimendeux by 0.5\tv@dimYMilieu \tv@dimX=\tv@Xdim\advance\tv@dimX by -\tv@DX % \hbox to\tv@Xdim{\rput(\tv@DX,0){\psline{->}(-0.9\tv@DX,-\tv@mydimen)(0.9\tv@dimX,-\tv@mydimendeux)}\hfil}} \def\tx#1{% \iftv@calcul \GererX{$\dsp#1$}% \GererDXSimple{$\dsp#1$}% \fi \hbox to \tv@Xdim{\tabvarputmilieu{$\dsp #1$}\hfil}% } \def\txh#1{% \iftv@calcul \GererX{$\dsp#1$}% \GererDXSimple{$\dsp#1$}% \fi \hbox to\tv@Xdim{\tabvarputhaut{$\dsp #1$}\hfil}% } \def\txb#1{% \iftv@calcul \GererX{$\dsp#1$}% \GererDXSimple{$\dsp#1$}% \fi \hbox to\tv@Xdim{\tabvarputbas{$\dsp#1$}\hfil}% } \def\txt#1{% \iftv@calcul \GererX{$\dsp#1$}% \GererDXSimple{$\dsp#1$}% \fi \hbox to\tv@Xdim{\traithaut\tabvarputmilieu{$\dsp #1$}\traitbas\hfil}% } \def\txht#1{% \iftv@calcul \GererX{$\dsp#1$}% \GererDXSimple{$\dsp#1$}% \fi \hbox to\tv@Xdim{\tabvarputhaut{$\dsp #1$}\traitmilieu\traitbas\hfil}% } \def\txbt#1{% \iftv@calcul \GererX{$\dsp#1$}% \GererDXSimple{$\dsp#1$}% \fi \hbox to\tv@Xdim{\traithaut\traitmilieu\tabvarputbas{$\dsp #1$}\hfil}% } \def\xt#1{% \iftv@calcul \GererX{$\dsp#1$}% \GererDXSimple{$\dsp#1$}% \fi \hbox to\tv@Xdim{\tabvarputmilieu{$\dsp#1$}\traitbas\hfil}% } \def\xdbt#1{% \iftv@calcul \GererX{$\dsp#1$}% \GererDXSimple{$\dsp#1$}% \fi \hbox to\tv@Xdim{\tabvarputmilieu{$\dsp#1$}\doubletraitbas\hfil}% } \def\txdbthb#1#2{% \iftv@calcul \initY{$\dsp #1$}\max{\tv@dimYHaut}{\tv@mydimen}% \initY{$\dsp #2$}\max{\tv@dimYBas}{\tv@mydimen}% \initx{$\dsp#1$}\advance\tv@mydimen by 3 pt\relax \GererDXDimension{\tv@mydimen}% \initx{$\dsp#1$}\max{\tv@mydimen}{\tv@DX}% \global\advance\tv@mydimen by 3pt\global\tv@dimX=\tv@mydimen \initx{$\dsp#2$}\global\advance\tv@mydimen by\tv@dimX \GererXDimension{\tv@mydimen}% \fi% \hbox to\tv@Xdim{% \rput[r](\tv@DX,0){\rput[r](-3pt,-0.5\tv@dimYHaut){$\dsp#1$}}% % \dbt % \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by \tv@dimYMilieu\advance\tv@mydimen by 0.5\tv@dimYBas \rput[l](\tv@DX,0){\rput[l](3pt,-\tv@mydimen){$\dsp #2$}}% \hfil}% } \def\txdbthh#1#2{% \iftv@calcul \initY{$\dsp #1$}\max{\tv@dimYHaut}{\tv@mydimen}% \initY{$\dsp #2$}\max{\tv@dimYHaut}{\tv@mydimen}% \initx{$\dsp#1$}\advance\tv@mydimen by 3 pt\relax \GererDXDimension{\tv@mydimen}% \initx{$\dsp#1$}\max{\tv@mydimen}{\tv@DX}% \global\advance\tv@mydimen by 3pt\global\tv@dimX=\tv@mydimen \initx{$\dsp#2$}\global\advance\tv@mydimen by\tv@dimX \GererXDimension{\tv@mydimen}% \fi% \hbox to\tv@Xdim{% \rput[r](\tv@DX,0){\rput[r](-3pt,-0.5\tv@dimYHaut){$\dsp#1$}}% % \dbt % \rput[l](\tv@DX,0){\rput[l](3pt,-0.5\tv@dimYHaut){$\dsp #2$}} \hfil}% }% \def\txdbtbh#1#2{% \iftv@calcul \initY{$\dsp #1$}\max\tv@dimYBas\tv@mydimen% \initY{$\dsp #2$}\max\tv@dimYHaut\tv@mydimen% \initx{$\dsp#1$}\advance\tv@mydimen by 3 pt\relax \GererDXDimension{\tv@mydimen}% \initx{$\dsp#1$}\max{\tv@mydimen}{\tv@DX}% \global\advance\tv@mydimen by 3pt\global\tv@dimX=\tv@mydimen \initx{$\dsp#2$}\global\advance\tv@mydimen by\tv@dimX \GererXDimension{\tv@mydimen}% \fi% \hbox to\tv@Xdim{% \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by \tv@dimYMilieu\advance\tv@mydimen by 0.5\tv@dimYBas \rput[r](\tv@DX,0){\rput[r](-3pt,-\tv@mydimen){$\dsp#1$}}% % \dbt % \rput[l](\tv@DX,0){\rput[l](3pt,-0.5\tv@dimYHaut){$\dsp #2$}} \hfil}% }% \def\txdbtbb#1#2{% \iftv@calcul% \initY{$\dsp #1$}\max{\tv@dimYBas}{\tv@mydimen}% \initY{$\dsp #2$}\max{\tv@dimYBas}{\tv@mydimen}% \initx{$\dsp#1$}\advance\tv@mydimen by 3 pt% \GererDXDimension{\tv@mydimen}% \initx{$\dsp#1$}\max{\tv@mydimen}{0.90909\tv@DX}% \global\advance\tv@mydimen by 3pt\global\tv@dimX=\tv@mydimen% \initx{$\dsp#2$}\global\advance\tv@mydimen by\tv@dimX% \GererXDimension{\tv@mydimen}% \fi% \hbox to\tv@Xdim{% \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu\advance\tv@mydimen by 0.5\tv@dimYBas\relax% \rput[r](\tv@DX,0){\rput[r](-3pt,-\tv@mydimen){$\dsp#1$}}% % \dbt % \tv@mydimen=\tv@dimYHaut\advance\tv@mydimen by\tv@dimYMilieu\advance\tv@mydimen by 0.5\tv@dimYBas\relax \rput[l](\tv@DX,0){\rput[l](3pt,-\tv@mydimen){$\dsp #2$}}% \hfil}% }% \def\grise{% \iftv@calcul \GererXDimension{\tabdim}% \GererDXDimension{0.5\tabdim}% \fi% \hbox to\tv@Xdim{\psframe[linecolor=gristabvar,fillstyle=solid,fillcolor=gristabvar](0,0)(\tv@Xdim,-\tv@YTotal)\hfil}} \toksdef\ta=0 \toksdef\tb=2 \long\def\rightappenditem#1\to#2{\ta={\\{#1}}\tb=\expandafter{#2}% \xdef#2{\the\tb\the\ta}} \long\def\leftappenditem#1\to#2{\ta={\\{#1}}\tb=\expandafter{#2}% \xdef#2{\the\ta\the\tb}} \def\lop#1\to#2{\expandafter\lopoff#1\lopoff#1#2} \long\def\lopoff\\#1#2\lopoff#3#4{\gdef#4{#1}\gdef#3{#2}} \def\clearListes{\gdef\listeY{}\gdef\listeX{}\gdef\listeDX{}} \def\savedimsY{% \expandafter\rightappenditem\the\tv@dimYHaut\to\listeY \expandafter\rightappenditem\the\tv@dimYMilieu\to\listeY \expandafter\rightappenditem\the\tv@dimYBas\to\listeY} \def\litY{% \lop\listeY\to\a \tv@dimYHaut=\a \lop\listeY\to\a \tv@dimYMilieu=\a \lop\listeY\to\a \tv@dimYBas=\a \global\advance\tv@dimYHaut by 2\tabblanc \global\advance\tv@dimYMilieu by 2\tabblanc \global\advance\tv@dimYBas by 2\tabblanc \calculeYTotal} \def\ajouteX#1{% \expandafter\rightappenditem\the #1\to\listeX} \def\ajouteXAGauche#1{% \expandafter\leftappenditem\the #1\to\listeX} \def\extraitX{\lop\listeX\to\a\tv@Xdim=\a} \def\ajouteDX#1{% \expandafter\rightappenditem\the #1\to\listeDX} \def\ajouteDXAGauche#1{% \expandafter\leftappenditem\the #1\to\listeDX} \def\extraitDX{\lop\listeDX\to\a\tv@DX=\a} \def\initListeXListeDX#1{% \global\tv@countLigne=0 \setbox150=\vbox{\halign{% \global\advance\tv@countLigne by 1 \ifnum\tv@countLigne=1 \tv@mydimen=0pt \ajouteXAGauche{\tv@mydimen}% \ajouteDXAGauche{\tv@mydimen}% \fi ##\hfil\vrule&&% \hfil \ifnum\tv@countLigne=1 \tv@mydimen=0pt \ajouteXAGauche{\tv@mydimen}% \ajouteDXAGauche{\tv@mydimen}% \fi ##\hfil\cr% #1}}} \def\TABVAR#1{% \vbox{\vglue\smallskipamount\nobreak% {\offinterlineskip\everycr{\noalign{\hrule}}% \iftv@calcul \else \litY \fi% \hbox{\vrule\vbox{\halign{% \iftv@calcul \savedimsY \setY{0pt}{0pt}{0pt}% \else \litY% \fi \vrule height 0pt depth \tv@YTotal width 0pt\extraitX\extraitDX##\ajouteX{\tv@Xdim}\ajouteDX{\tv@DX}% \vrule&&% \extraitX\extraitDX##\ajouteX{\tv@Xdim}\ajouteDX{\tv@DX}\cr% #1}}\vrule}} \iftv@calcul \savedimsY% \fi \medbreak% }} \def\tabvar#1{{\clearListes\initListeXListeDX{#1}\tv@calcultrue% \psset{linewidth=.4pt}% \setbox150=\hbox{\TABVAR{#1}}\tv@calculfalse\TABVAR{#1}}} \catcode`\@=12 %-- Fin Macros tabvar