From 0243f0be4a16e57c5592e4dcdd13632201dc14ca Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 18 Mar 2021 21:14:35 +0000 Subject: gastex (18mar21) (branch) git-svn-id: svn://tug.org/texlive/branches/branch2020.0@58526 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/gastex/README | 64 ++- .../doc/latex/gastex/ex-beamer-gastex.tex | 107 ----- Master/texmf-dist/doc/latex/gastex/ex-gastex.tex | 469 ------------------- Master/texmf-dist/doc/latex/gastex/gastex-doc.pdf | Bin 0 -> 130953 bytes Master/texmf-dist/doc/latex/gastex/gastex-doc.tex | 189 ++++++++ Master/texmf-dist/dvips/gastex/gastex.pro | 285 ++++++------ Master/texmf-dist/tex/latex/gastex/gastex.sty | 514 ++++++++++++++++----- 7 files changed, 766 insertions(+), 862 deletions(-) delete mode 100644 Master/texmf-dist/doc/latex/gastex/ex-beamer-gastex.tex delete mode 100644 Master/texmf-dist/doc/latex/gastex/ex-gastex.tex create mode 100644 Master/texmf-dist/doc/latex/gastex/gastex-doc.pdf create mode 100644 Master/texmf-dist/doc/latex/gastex/gastex-doc.tex diff --git a/Master/texmf-dist/doc/latex/gastex/README b/Master/texmf-dist/doc/latex/gastex/README index 1f14e8cb6d2..193e52ad9f2 100644 --- a/Master/texmf-dist/doc/latex/gastex/README +++ b/Master/texmf-dist/doc/latex/gastex/README @@ -7,51 +7,49 @@ automata, nets, diagrams, etc... under the picture environment of LaTeX. Author: ------- -Paul Gastin +Paul Gastin -Copyright: 2006 by Paul Gastin +Copyright: 2021 by Paul Gastin ---------- This program can be redistributed and/or modified under the terms -of the LaTeX Project Public License Distributed from CTAN -archives in directory macros/latex/base/lppl.txt. +of the LaTeX Project Public License Distributed from CTAN: +https://www.ctan.org/license/lppl1.3 Installation: ------------- In order to use gastex you only need two files: -- gastex.sty which contains the definition of all the LaTeX macros (this file -could be in your working folder or where other .sty files are). -- gastex.pro which contains all the postscript procedures (this file could -be in your working folder but it is best placed where the tex.pro file is). - -Usage: latex+dvips(+ps2pdf) +- gastex.sty which contains the definition of all the LaTeX macros. This file +could be in your working folder or where other .sty files are, e.g., + .../texmf-dist/tex/latex/gastex/gastex.sty + or + .../texmf-local/tex/latex/gastex/gastex.sty +- gastex.pro which contains all the postscript procedures. This file +could be in your working folder or where other .pro files are, e.g., + .../texmf-dist/dvips/gastex/gastex.pro + or + .../texmf-local/dvips/gastex/gastex.pro + +Usage: latex+dvips(+ps2pdf) filename.tex ------ - Compile the source file with latex (not pdflatex) and generate the ps file with dvips. One may then use ps2pdf to get a pdf file. +Usage: pdflatex --shell-escape filename.tex +------ +- Requires the package auto-pst-pdf. + Remarks: -------- -- gastex mainly generates postscript code so the pictures cannot be seen with a -dvi-viewer. One has to generate a ps file (latex+dvips) and view it with a -ps-viewer. One can also generate a pdf file (latex+dvips+ps2pdf) and view -it with a pdf-viewer. -- gastex does not work with pdflatex since it produces postscript code -which cannot be interpreted by a pdf viewer. Instead, one should generate -the pdf file with latex+dvips+ps2pdf. - -Examples: ---------- -- Several examples are provided on the gastex web page at -http://www.lsv.ens-cachan.fr/~gastin/gastex/gastex.html -- ex-gastex.tex contains some examples to learn gastex and to test your -installation. -- ex-beamer-gastex.tex shows how gastex may be used with beamer in order to -produce very nice animated slides. You have to compile the file through -latex-dvips-ps2pdf (not pdflatex). - -Documentation: --------------- -See http://www.lsv.ens-cachan.fr/~gastin/gastex/gastex.html -The best is to learn with the examples (see above). -Comments in the file gastex.sty provide documentation for all macros. +- gastex mainly generates postscript code so the pictures cannot be seen +with a dvi-viewer. One has to generate a ps file (latex+dvips) or a pdf +file (latex+dvips+ps2pdf or pdflatex --shell-escape) and view it with a +ps-viewer or a pdf-viewer. + +Documentation and examples: +--------------------------- +- See http://www.lsv.fr/~gastin/gastex/index.html +- See also gastex-doc.tex for a quick startup guide on how to use gastex +with pdflatex and a few examples. +- Comments in the file gastex.sty also provide documentation for all macros. Enjoy! \ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/gastex/ex-beamer-gastex.tex b/Master/texmf-dist/doc/latex/gastex/ex-beamer-gastex.tex deleted file mode 100644 index d35ab955a4c..00000000000 --- a/Master/texmf-dist/doc/latex/gastex/ex-beamer-gastex.tex +++ /dev/null @@ -1,107 +0,0 @@ -% \documentclass[10pt,mathserif,handout]{beamer} -\documentclass[10pt,mathserif,display]{beamer} -\usepackage{gastex} -\gasset{linewidth=0.21,AHdist=2.1,AHLength=2.25,AHlength=2.1} -\gasset{ATdist=2.1,ATLength=2.25,ATlength=2.1} -% \usepackage{beamerthemeEPIT} -\usepackage{beamerthemeplain} - -\beamersetleftmargin{3mm} -\beamersetrightmargin{3mm} -\abovedisplayskip=1ex -\belowdisplayskip=1ex -\parskip=.5ex -\parindent=0pt - -\newcommand{\Auto}{\mathcal{A}} -\newcommand{\F}{\mathop{\mathsf{F}\vphantom{a}}\nolimits} -\newcommand{\G}{\mathop{\mathsf{G}\vphantom{a}}\nolimits} -\newcommand{\X}{\mathop{\mathsf{X}\vphantom{a}}\nolimits} -\newcommand{\True}{\top} -\newcommand{\False}{\bot} - -\newcommand{\Blue}[1]{\textcolor{blue}{#1}} -\newcommand{\Red}[1]{\textcolor{red}{#1}} -\newcommand{\Green}[1]{\textcolor{PineGreen}{#1}} - -\begin{document} - - -%%%%%%%%%%%%%%%%%%%%%% -\frame{ - \frametitle{Automaton $\Auto_\varphi$} - \vspace{-7mm} - \begin{center}\scalebox{0.9}{ - \begin{picture}(130,71)(-12,0)\nullfont -% \put(-12,0){\framebox(130,71){}} - \gasset{Nadjust=w,Nadjustdist=2,Nh=8,fillcolor=White,Nfill=y,ilength=7} - {\only<7-| handout:0>{\gasset{fillcolor=yellow}} - \node[Nmarks=i](1)(10,45){$\varphi=\G(\neg p\vee\F q)$}} - \node(2)(10,25){$\neg p\vee\F q, \X\varphi$}\drawedge(1,2){} - \node(3)(10,05){$\neg p, \X\varphi$}\drawedge(2,3){} - \node(4)(40,25){$\F q, \X\varphi$}\drawedge(2,4){} - \node(5)(40,45){$q, \X\varphi$}\drawedge(4,5){} - \node(6)(40,05){$\X\F q, \X\varphi$}\drawedge(4,6){\Blue{$\F q$}} - - \only<2->{ - \only<2| handout:0>{\gasset{linecolor=Red}} - \drawedge[curvedepth=15](3,1){$\neg p$} - \drawedge[ELside=r,ELpos=35](5,1){$q$} - {\only<7-| handout:0>{\gasset{fillcolor=yellow}} - \node(7)(70,05){$\F q, {\only<3| handout:0>{\color{red}}\varphi}$}} - \drawedge(6,7){$\True$} - } - \only<3->{ - \only<3| handout:0>{\gasset{linecolor=Red}} - \node(8)(70,25){$\F q, - {\only<3-4| handout:0>{\color{red}}\neg p\vee\F q}, - {\only<3| handout:0>{\color{red}}\X\varphi}$} - \drawedge(7,8){} - } - \only<4->{ - \only<4| handout:0>{\gasset{linecolor=Red}} - \node(9)(70,45){${\only<5| handout:0>{\color{red}}\F q}, - {\only<4| handout:0>{\color{red}}\neg p}, - \X\varphi$} - \drawedge[ELpos=55](8,4){} - \drawedge(8,9){} - } - \only<5->{ - \node(10)(105,25){${\only<5| handout:0>{\color{red}}\X\F q}, - \neg p, \X\varphi$} - \node(11)(40,65){${\only<5| handout:0>{\color{red}}q}, - \neg p, \X\varphi$} - \only<5| handout:0>{\gasset{linecolor=Red}} - \drawedge(9,10){\Blue{$\F q$}} - \drawedge(9,11){} - } - \only<6->{ - \only<6| handout:0>{\gasset{linecolor=Red}} - \drawedge(10,7){$\neg p$} - \drawedge[ELside=r](11,1){$\neg p\wedge q$} - } - \only<7->{\put(18,18){ -% \drawrect(58,33,100,53) - \gasset{loopdiam=5,Nw=7,Nh=7} - \gasset{fillcolor=yellow} - \node[Nmarks=i,ilength=5](A)(72,40){1} - \node(B)(92,40){2} - \drawedge[curvedepth=2,linecolor=blue](A,B){$\True$} - \drawedge[curvedepth=2](B,A){$q$} - \only<7>{\drawedge[curvedepth=8](B,A){$\neg p\wedge q$}} - \drawloop(A){$\neg p\vee q$} - \drawloop[linecolor=blue](B){$\True$} - \only<7>{\drawloop[ELpos=75,linecolor=blue,loopangle=0](B){$\neg p$}} - }} - \end{picture}} - \end{center} - - \vspace{-2mm} - \uncover<2->{{\only<2>{\color{red}} - Transition = check litterals and move forward.}} - - \uncover<8->{{\only<8>{\color{red}} - Simplification}} -} - -\end{document} diff --git a/Master/texmf-dist/doc/latex/gastex/ex-gastex.tex b/Master/texmf-dist/doc/latex/gastex/ex-gastex.tex deleted file mode 100644 index 42cbd1155f5..00000000000 --- a/Master/texmf-dist/doc/latex/gastex/ex-gastex.tex +++ /dev/null @@ -1,469 +0,0 @@ -%&latex -\documentclass{article} -\usepackage[usenames]{color} -\usepackage{gastex} - -\begin{document} - -% Peterson automaton - -\begin{center} -\begin{picture}(85,33)(-20,-28) -% \put(-20,-28){\framebox(85,33){}} - \gasset{Nadjust=w,Nadjustdist=2,Nh=6,Nmr=1} - \node[Nmarks=i](A)(0,0){idle} - \node(B)(50,0){wait} - \node(C)(50,-20){wait} - \node[Nmarks=r](D)(0,-20){critical} - - \drawedge(A,B){req1:=true} - \drawedge(B,C){turn:=2} - \drawedge[syo=-1,eyo=-1](C,D){turn=1?} - \drawedge[syo=1,eyo=1,ELside=r](C,D){req2=false?} - \drawedge(D,A){req1:=false} -\end{picture} -\end{center} - -% Petri Net and offsets - -\begin{center} -\begin{picture}(110,50)(-25,-24) -% \put(-25,-24){\framebox(110,50){}} - \node(A)(-20,-7){$\bullet \bullet$} - \node(B)(-20, 7){$\bullet$} - \node(C)( 20,-7){} - \node(D)( 20, 7){} - \gasset{Nw=.7,Nh=7,Nmr=0,fillgray=0} % black rectangle - \gasset{ExtNL=y,NLdist=1,NLangle=90} % external label above the node - \node(Ta)(0, 0){$a$} - \node(Tb)(0,-20){$b$} - \node(Tc)(0, 20){$c$} - - \gasset{ELdistC=y,ELdist=0} - \drawedge[ELside=r,eyo=-1](A,Ta){\colorbox{white}{2}}\drawedge[eyo=1](B,Ta){} - \drawedge[syo=-1](Ta,C){}\drawedge[syo=1](Ta,D){} - {\gasset{curvedepth=4}\drawedge(C,Tb){}\drawedge(Tb,A){\colorbox{white}{2}}} - {\gasset{curvedepth=-4}\drawedge(D,Tc){}\drawedge[syo=1](Tc,B){}} - \drawbpedge[syo=-1,ELpos=70](Tc,-160,15,D,170,20){\colorbox{white}{3}} -% offsets - \put(40,-15){\unitlength=1.2mm - \gasset{Nmr=0,Nfill=y,fillgray=0} - \node[Nw= 1,Nh=10](B)(0,20){} - \node[Nw= 1,Nh=10](C)(30,20){} - \node[Nw=10,Nh= 1](D)(15,0){} - \drawedge[syo=3,eyo=3,curvedepth=3](B,C){} - \drawedge[syo=1,eyo=1](B,C){} - \drawedge[syo=-1,eyo=-1](C,B){} - \drawbpedge[syo=4,eyo=4](B,165,30,C,15,30){} - \drawbpedge[syo=-3,exo=-3](B,0,10,D,90,10){} - \drawbpedge[syo=-3](C,180,10,D,90,10){} - \drawbpedge[sxo=3,eyo=-5](D,90,10,C,-90,10){} - \drawloop[sxo=-3,loopdiam=4,loopangle=-90](D){} - \drawloop[sxo= 3,loopdiam=4,loopangle=-90](D){} - } -\end{picture} -\end{center} - -% Diagram - -\begin{center} -\begin{picture}(105,28)(-33,-3) -% \put(-33,-3){\framebox(105,28){}} - \gasset{Nframe=n,Nadjust=w,Nh=6,Nmr=0} - \node(L)(0,20){$\mathcal{L}$} - \node(F)(30,20){$[F^V\to F]$} - \node(O1)( 20,0){$(\mathcal{P}(R)^V\to 2^{M\times\mathcal{P}(R)})$} - \node(O2)(-20,0){$(\mathcal{P}(R)^V\to 2^M)$} - \node(B1)( 60,0){$(\mathcal{P}(R)^V\to F)$} - - \drawedge[ELpos=40](L,F){$[\![ -]\!]$} - \drawedge(L,O1){$X_F$} - \drawedge(F,O1){$\chi$} - \drawedge[ELside=r](L,O2){$X_M$} - \drawedge[ELpos=55](O1,B1){$\sqcup$} - \drawedge[ELside=r,ELpos=53](O1,O2){$\mathrm{Re}$} -\end{picture} -\end{center} - -% and more ... - -\begin{center} -\begin{picture}(120,52)(-35,-37) -% \put(-35,-37){\framebox(120,52){}} - \node[Nw=16,linecolor=Yellow,fillcolor=Yellow](A)(-20,0){initial} - \imark[iangle=200,linecolor=Peach](A) - \node[Nmr=0,Nw=14,fillgray=0.85, - dash={1}0](B)( 20,0){\textcolor{RedViolet}{final}} - \fmark[flength=10,fangle=-30,dash={3 1 1 1}0](B) - \node[Nadjust=wh,Nadjustdist=2,Nmr=3,Nmarks=r,linecolor=Green](C)(60,-20){$\left( - \begin{array}{ccc} - 2 & 1 & 0 \\ - -1 & 0 & 1 \\ - 0 & -1 & 2 - \end{array} - \right)$} - \rmark[linecolor=Green,rdist=1.4](C) - - \drawedge[curvedepth=5,linecolor=Red](A,B){\textcolor{Cyan}{curved}} - \drawedge[ELside=r,ELpos=35](A,B){straight} - \drawedge[curvedepth=-25,ELside=r,dash={1.5}0](A,B){far} - \drawloop[ELpos=75, loopangle=150, dash={0.2 0.5}0](A){loopCW} - \drawloop[loopCW=n,ELside=r,loopangle=30,dash={3 1.5}{1.5}](B){loopCCW} - \drawqbpedge[ELside=r,ELdist=0,dash={4 1 1 1}0](B,-90,C,180){qbpedge} - \drawloop[ELpos=70,loopangle=0](C){$b / 01$} - \drawloop[loopCW=n,ELpos=75,ELside=r,loopangle=-90,sxo=6](C){$a / 01$} - \drawloop[ELpos=75,loopangle=-90,sxo=-6](C){$b / 10 $} - \drawloop[loopangle=50](C){$b / 01$} - \drawloop[ELpos=75,loopangle=148](C){$b / 01$} -\end{picture} -\end{center} - -% Edges - -\begin{center} -\begin{picture}(120,60)(-32,-14) -% \put(-32,-14){\framebox(120,60){}} - \node(A)(10,0){}\node(B)(40,0){} - \drawedge(A,B){straight} - \drawedge[curvedepth=8](A,B){positive curve depth} - \drawedge[curvedepth=-8,ELside=r](A,B){negative curve depth} - \drawloop[loopangle=180](A){180} - \drawloop[loopangle=0](B){0} - - \node(A)(-15,30){}\node(B)(15,30){} - \drawqbedge(A,-15,50,B){qbedge} - \drawbcedge(A,-20,10,B,20,10){bcedge} - \drawloop[loopangle=210](A){210} - \drawloop[loopangle=90,loopCW=n,ELside=r](B){90} - - \node(A)(40,30){}\node(B)(70,30){} - \drawbpedge[ELpos=30,ELdist=0](A,45,20,B,225,20){bpedge} - \drawbpedge[ELpos=30,ELside=r](A,210,30,B,-30,30){30} - \drawbpedge[ELpos=70,ELside=r](A,210,30,B,-30,30){70} - \drawloop[loopdiam=5,loopangle=120,ELpos=60](A){smaller} - \drawloop[loopdiam=10,loopangle=30,ELpos=30](B){larger} -\end{picture} -\end{center} - -% Nodes, colors, etc... - -\begin{center} -\begin{picture}(105,70)(-15,-65) -% \put(-15,-65){\framebox(105,70){}} - \node[Nmarks=if](A)(0,0){1} - \node[Nw=15,Nh=6,Nmr=0](A)(25,0){rectangle} - \node[Nw=12,Nh=6,Nmr=3](A)(50,0){oval} - - \node(B)(0,-15){Nadjust=n} - \node[Nadjust=w,Nmr=2](B)(25,-15){Nadjust=w} - \node[Nadjust=wh,Nmr=1](B)(50,-15){Nadjust=wh} - - \gasset{Nadjust=w,Nadjustdist=3} - \node[Nmarks=i,iangle=210,ilength=5](C)(0,-30){imark} - \imark[iangle=150,ilength=10,linecolor=Red](C) - \node[Nmarks=f,fangle=30,flength=5,linecolor=Green](C)(25,-30){fmark} - \fmark[fangle=-30,flength=10,linecolor=Blue](C) - \node(C)(50,-30){rmark} - \rmark[linecolor=Red](C)\rmark[rdist=1.4,linecolor=Green](C) - \node[Nmarks=ifr](C)(75,-30){all} - - \node(D)(0,-45){framed} - \node[Nframe=n,fillcolor=Yellow](D)(25,-45){filled} - \node[fillcolor=Yellow](D)(50,-45){both} - \node[fillcolor=Yellow, - linecolor=Green](D)(75,-45){\textcolor{RedViolet}{RedViolet}} - - \node[linewidth=0.5](E)(0,-60){Thick} - \node[linewidth=1,linegray=0.8](E)(25,-60){Gray} - \node[dash={1.5}0](E)(50,-60){Dash} - \node[dash={4 1 1 1}0,linecolor=Red](E)(75,-60){More dash} -\end{picture} -\end{center} - -% Arrows - -\begin{center}\unitlength=0.85mm -\begin{picture}(60,40)(-30,-17) -% \put(-30,-17){\framebox(60,40){}} - \drawline[AHangle=30,AHLength=3,AHlength=0, - ATnb=1,ATangle=90,ATLength=2,ATlength=0](-15,20)(15,20) - \drawline[AHnb=2,ATnb=2](-15,15)(15,15) - \drawline[AHnb=2,AHangle=30,AHLength=3,AHlength=0,AHdist=1, - ATnb=2,ATangle=30,ATLength=3,ATlength=0,ATdist=1](-15,10)(15,10) - \drawline[AHnb=1,AHangle=30,AHLength=3,AHlength=1, - ATnb=1,ATangle=140,ATLength=3,ATlength=1.5](-15,5)(15,5) - \drawline[AHnb=2,AHangle=30,AHLength=3,AHlength=0,AHdist=1, - ATnb=2,ATangle=150,ATLength=3,ATlength=0,ATdist=1](-15,0)(15,0) - \node(A)(-15,-10){}\node(B)( 15,-10){} - \drawbpedge[AHnb=6,ATnb=6](A,60,25,B,240,25){} - \gasset{AHnb=1,AHangle=30,AHLength=3,AHlength=0, - ATnb=1,ATangle=30,ATLength=3,ATlength=0} - \drawloop[loopangle=180](A){} - \gasset{AHnb=3,AHangle=30,AHLength=3,AHlength=1.5,AHdist=1.8, - ATnb=3,ATangle=30,ATLength=3,ATlength=1.5,ATdist=1.8} - \drawloop[loopangle=0](B){} -\end{picture} -% \end{center} -% -% % Node label -% -% \begin{center} -\begin{picture}(80,40)(-20,-20) -% \put(-20,-20){\framebox(80,40){}} - \node[Nh=30,Nw=30,Nmr=15](D)(0,0){} - \gasset{ExtNL=y,NLdist=1,AHnb=0,ilength=-2} - \nodelabel[NLangle= 0](D){3} \imark[iangle= 0](D) - \nodelabel[NLangle= 30](D){2} \imark[iangle= 30](D) - \nodelabel[NLangle= 60](D){1} \imark[iangle= 60](D) - \nodelabel[NLangle= 90](D){12} \imark[iangle= 90](D) - \nodelabel[NLangle=120](D){11} \imark[iangle=120](D) - \nodelabel[NLangle=150](D){10} \imark[iangle=150](D) - \nodelabel[NLangle=180](D){9} \imark[iangle=180](D) - \nodelabel[NLangle=210](D){8} \imark[iangle=210](D) - \nodelabel[NLangle=240](D){7} \imark[iangle=240](D) - \nodelabel[NLangle=270](D){6} \imark[iangle=270](D) - \nodelabel[NLangle=300](D){5} \imark[iangle=300](D) - \nodelabel[NLangle=330](D){4} \imark[iangle=330](D) - - \node[Nh=30,Nw=30,Nmr=15](B)(40,0){} - \gasset{ExtNL=n,NLdist=13} - \nodelabel[NLangle= 0](B){3} - \nodelabel[NLangle= 30](B){2} - \nodelabel[NLangle= 60](B){1} - \nodelabel[NLangle= 90](B){12} - \nodelabel[NLangle=120](B){11} - \nodelabel[NLangle=150](B){10} - \nodelabel[NLangle=180](B){9} - \nodelabel[NLangle=210](B){8} - \nodelabel[NLangle=240](B){7} - \nodelabel[NLangle=270](B){6} - \nodelabel[NLangle=300](B){5} - \nodelabel[NLangle=330](B){4} -\end{picture} -\end{center} - -% Nodes whose shape is a regular polygon - -\begin{center} -\begin{picture}(120,30)(0,0) -% \put(0,0){\framebox(120,30){}} - \rpnode[polyangle=90,Nmarks=i,iangle=-90](A)(5,14)(3,5){A} - \rpnode[arcradius=2,Nmarks=r](B)(35,17)(6,10){B} - \nodelabel[ExtNL=y,NLangle=30,NLdist=0.5](B){B} - \nodelabel[ExtNL=y,NLangle=60,NLdist=0.5](B){B} - \rpnode[arcradius=2,polyangle=90](C)(70,12)(5,7){C} - \imark[iangle=198](C)\fmark[fangle=18](C) - \rpnode[Nmarks=fr,fangle=45](D)(105,15)(4,7){D} - \drawloop(A){$a$} - \drawloop[loopangle=90](C){$c$} - \drawloop[loopangle=-45](D){$d$} - \drawedge(A,B){$x$} - \drawbpedge(B,-30,30,C,140,30){$y$} - \drawqbpedge(C,37,D,83){$z$} - \drawedge[curvedepth=14,ELside=r](D,A){} -\end{picture} -\end{center} - -% polygons and closed curves - -\begin{center} -\begin{picture}(120,40)(0,0) -% \put(0,0){\framebox(120,40){}} - \put(3,3){ - \unitlength=8mm - \drawpolygon[fillcolor=Green,Nframe=n,arcradius=.3](0,0)(0,2)(1,3)(0,4)(2,4)(2,2)(4,0)(2,0)(1,1) - \drawpolygon(0,0)(0,2)(1,3)(0,4)(2,4)(2,2)(4,0)(2,0)(1,1) - \drawccurve[linecolor=Red](0,0)(0,2)(1,3)(0,4)(2,4)(2,2)(4,0)(2,0)(1,1) - } - \put(55,20){ - \unitlength=1.4mm - \drawpolygon[fillcolor=Green,Nframe=n,arcradius=2](-10,-10)(10,10)(-10,10)(10,-10) - \drawpolygon(-10,-10)(10,10)(-10,10)(10,-10) - \drawccurve[linecolor=Red](-10,-10)(10,10)(-10,10)(10,-10) - } - \put(100,19){ - \unitlength=20mm - \drawccurve[fillcolor=Yellow,linecolor=Red](0,1)(0.59,-0.8)(-0.95,0.3)(0.95,0.3)(-0.59,-0.8) - \drawpolygon(0,1)(0.59,-0.8)(-0.95,0.3)(0.95,0.3)(-0.59,-0.8) - } -\end{picture} -\end{center} - -% curves - -\begin{center} -\begin{picture}(120,40)(0,0) -% \put(0,0){\framebox(120,40){}} - \put(2,3){ - \unitlength=8mm - \drawline[AHnb=0](0,0)(0,2)(1,3)(0,4)(2,4)(2,2)(4,0)(2,0)(1,1) - \drawcurve[linecolor=Red,AHnb=0](0,0)(0,2)(1,3)(0,4)(2,4)(2,2)(4,0)(2,0)(1,1) - } - \put(55,16){ - \unitlength=1.5mm - \drawline[AHnb=0](-10,-10)(10,10)(-10,10)(10,-10) - \drawcurve[linecolor=Red,ATnb=3,AHnb=4](-10,-10)(10,10)(-10,10)(10,-10) - } - \put(100,19){ - \unitlength=20mm - \drawline[AHnb=0](0.95,0.3)(-0.59,-0.8)(0,1)(0.59,-0.8)(-0.95,0.3) - \drawcurve[linecolor=Red](0.95,0.3)(-0.59,-0.8)(0,1)(0.59,-0.8)(-0.95,0.3) - } -\end{picture} -\end{center} - -% Various macros - -\begin{center} -\begin{picture}(120,60)(-60,-30) -% \put(-60,-30){\framebox(120,60){}} - \drawline(-60,0)(60,0) - \drawline(0,-30)(0,30) - \drawrpolygon[polyangle=90,fillcolor=Blue](-9,5)(3,8) - \drawrpolygon(-9,22)(8,7) - \drawrpolygon(-9,22)(8,6) - \drawrpolygon(-9,22)(8,5) - \drawrpolygon[polyangle=18,arcradius=5](-27,7)(5,7) - \drawrpolygon[fillcolor=Green](-27,23)(4,7) - \put(-48,15){ - \unitlength=14mm - \gasset{Nfill=y,fillcolor=Yellow,Nframe=y,arcradius=.1} - \drawpolygon(0,1)(0.59,-0.8)(-0.95,0.3)(0.95,0.3)(-0.59,-0.8) - } - \drawline[AHLength=4,AHlength=0,AHangle=30,linewidth=.8](5,25)(15,15)(5,15)(15,5) - \drawline[AHLength=4,AHlength=0,AHangle=30,linecolor=White](5,25)(15,15)(5,15)(15,5) - \drawline[arcradius=1](17,25)(27,15)(17,15)(27,5) - \drawline[linecolor=Red](30,10)(50,20)(25,25)(55,5) - \drawline[AHLength=4,AHlength=0,AHangle=30,linewidth=.3](10,28)(35,28) - \drawline[AHnb=0,linewidth=.9](10,28)(34.5,28) - \drawline[AHnb=0,linewidth=.2,linecolor=White](10,28)(34.5,28) - \drawcbezier[ATnb=1](-50,-5,-30,-5,-30,-25,-10,-25) - \drawcbezier[AHnb=0,dash={1.5}0](-50,-25,-30,-25,-30,-5,-10,-5) - \drawqbezier(31,-20,50,-20,50,-1) - \drawqbezier[AHnb=0,linecolor=Green](31,-20,31,-1,50,-1) - \drawcircle[Nfill=y,fillcolor=Yellow](40,-25,10) - \drawrect[Nfill=y,fillcolor=Yellow,dash={1.5}0](5,-5,25,-15) - \drawoval(15,-25,20,10,3) -\end{picture} -\end{center} - -% Tricks: multiput and variables - -\begin{center} - \unitlength=0.7mm -\begin{picture}(60,46)(0,-3) -% \put(0,-3){\framebox(60,46){}} - {\gasset{AHnb=0} - \drawline(0,0)(60,0) - \drawline(0,20)(60,20) - \drawline(0,40)(60,40)} - \gasset{Nw=1.5,Nh=1.5,Nframe=n,Nfill=y} - \multiput(0,0)(10,0){5}{% - \node(A)(0,0){}\node(B)(5,20){} - \drawedge(A,B){} - } - \multiput(10,20)(10,0){5}{% - \node(A)(0,0){}\node(B)(5,20){} - \drawedge(A,B){} - } -\end{picture} - \qquad - \unitlength=1mm -\begin{picture}(50,30)(-5,0) -% \put(-5,0){\framebox(50,30){}} - \def\ax{5}\def\ay{5}\def\bx{35}\def\by{25}% - \node(a)(\ax,\ay){$a$}\node(b)(\bx,\by){$b$} - \drawedge(a,b){} - \drawloop[loopdiam=6,loopangle=180](a){} - \drawloop[loopdiam=6,loopangle=0](b){} - - \def\ax{5}\def\ay{25}\def\bx{35}\def\by{5}% - \node(a)(\ax,\ay){$a$}\node(b)(\bx,\by){$b$} - \drawedge(a,b){} - \drawloop[loopdiam=6,loopangle=180](a){} - \drawloop[loopdiam=6,loopangle=0](b){} -\end{picture} -\end{center} - -% Compatibility with gastex 1.0 - -\begin{center}\compatiblegastexun -\begin{picture}(80,55)(-20,-15) -\thinlines -\put(-20,-15){\framebox(80,55){}} - -\letstate A=(0,0) \drawinitialstate(A){1}\drawfinalstate[b](A){} -\letstate B=(20,0) \drawrepeatedstate(B){2} -\letstate C=(40,0) \drawfinalstate(C){3} -\letstate D=(0,20) \drawrepeatedstate(D){4} -\letstate E=(20,18) \drawstate(E){5} -\letstate[8,6] F=(40,20) \drawrepeatedstate(F){6} - -\drawloop[b](B){$A,a,\alpha$} \drawloop[l](D){$A,\varepsilon$} -{ \setpsdash(1) \drawloop(E){$B,b,\beta$} } -\drawloop[r](F){$B,\varepsilon$} - -\drawtrans[r](A,B){$D,d,\delta$} \drawtrans[r](B,C){$D,\varepsilon$} -{ \settransdecal{1} - \drawtrans(C,F){$F,f,\varphi$} \drawtrans(F,C){$G,g,\gamma$} } -\drawtrans(B,E){$\varepsilon$} \drawtrans(E,F){$E,\varepsilon$} -{ \setprofcurve{0} \drawcurvedtrans[r](E,D){$F,\varepsilon$} } - -\drawcurvedtrans(A,D){$C,c,\gamma$} -{ \setpsdash(3) \drawcurvedtrans(D,A){$C,\varepsilon$} } -{ \setprofcurve{-15} \drawcurvedtrans[r](F,D){$G_1,g_1,\gamma_1$} } -\end{picture} -\end{center} - -\begin{center}\compatiblegastexun -\unitlength=1mm -\begin{picture}(90,30)(-5,-16) -\thinlines -\put(-5,-16){\framebox(90,30){}} - -\setvertexdiam{6} -\letvertex A=(0,0) \drawcircledvertex(A){$a$} -\letvertex B=(20,0) \drawvertex(B){$b$} -\letvertex[9] C=(40,0) \drawcircledvertex(C){$c$} -\letvertex D=(60,0) \drawcircledvertex(D){$d$} -\letvertex E=(80,0) \drawcircledvertex(E){$e$} - -\drawundirectededge(A,B){7} -\drawundirectededge(B,C){-11} -\drawundirectededge(C,D){13} -\drawundirectededge(D,E){2} - -\setprofcurve{10} -\drawundirectedcurvededge(A,C){3} -\drawundirectedcurvededge(C,E){8} -\setprofcurve{-10} -\drawundirectedcurvededge[r](B,D){-5} - -\drawundirectedloop[b](A){17} -\end{picture} -\end{center} - -% Compatibility with pspictpg -\begin{center}\compatiblepspictpg -\begin{picture}(80,80)(-40,-40) -% \put(-40,-40){\framebox(80,80){}} - \drawvector(-40,0)(40,0) - \drawvector(0,-40)(0,40) - \drawline(-30,-30)(30,30) - \cbeziervector(-30,-20)(-30,0)(-10,0)(-10,20) - {\setpsdash(3)\cbezier(-30,20)(-30,0)(-10,0)(-10,-20)} - \qbeziervector(1,-20)(20,-20)(20,-1) - \qbezier(1,-20)(1,-1)(20,-1) - \drawcircle(10,30)(10) - \put(-20,-30){\circle{10}} - \put(25,5){\line(1,3){8}} - \put(25,5){\vector(1,2){8}} - \setpsgray{0.5} - \drawdisk(-30,30)(10) - \put(20,-30){\circle*{10}} -\end{picture} -\end{center} - -\end{document} - - diff --git a/Master/texmf-dist/doc/latex/gastex/gastex-doc.pdf b/Master/texmf-dist/doc/latex/gastex/gastex-doc.pdf new file mode 100644 index 00000000000..c331528fcf9 Binary files /dev/null and b/Master/texmf-dist/doc/latex/gastex/gastex-doc.pdf differ diff --git a/Master/texmf-dist/doc/latex/gastex/gastex-doc.tex b/Master/texmf-dist/doc/latex/gastex/gastex-doc.tex new file mode 100644 index 00000000000..712f98f22ee --- /dev/null +++ b/Master/texmf-dist/doc/latex/gastex/gastex-doc.tex @@ -0,0 +1,189 @@ +\documentclass[12pt]{article} +\usepackage{url,xspace} +\usepackage[a4paper,text={16cm,22.7cm},centering]{geometry} + +\usepackage[pdflatex,recompilepics=true]{gastex} +\gasset{frame=false,Nw=6,Nh=6,loopdiam=5} + +\parindent=0pt +\parskip=1.5ex + +\newcommand\GasTeX{\textsf{GasTeX}\xspace} +\newcommand{\leftend}{{\vdash}} +\newcommand{\rightend}{{\dashv}} + +\title{\GasTeX: Graphs and Automata Simplified in \TeX} +\author{Paul Gastin \\[1ex] + LMF, ENS Paris-Saclay \\ + {\small\texttt{paul.gastin@ens-paris-saclay.fr}}} +\date{v3.0} +\begin{document} +\maketitle +\begin{abstract} + This is a very minimal startup guide including some examples. +\end{abstract} + +\begin{gpicture}[name=gpic:LR-concat,ignore] + \gasset{Nframe=n} + \node(ui)(15,3){$u$} + \node(ui+1)(45,3){$v$} + \gasset{AHnb=0} + \drawline(0,2)(0,-31) + \drawline(30,2)(30,-31) + \drawline(60,2)(60,-31) + \gasset{AHnb=1,arcradius=0.8} + \drawline(0,-1)(20,-1)(20,-3)(5,-3)(5,-5)(30,-5) + \node(x0)(23,-2){$\rho_0$} + \drawline[linecolor=red](30,-5)(50,-5)(50,-7)(35,-7)(35,-9)(45,-9)(45,-11)(30,-11) + \node(x0)(53,-6){\color{red}$\rho_1$} + \drawline[linecolor=red](30,-11)(20,-11)(20,-13)(25,-13)(25,-15)(18,-15)(18,-17)(30,-17) + \node(x1)(17,-12){\color{red}$\rho_2$} + \drawline[linecolor=red](30,-17)(40,-17)(40,-19)(30,-19) + \node(x2)(43,-18){\color{red}$\rho_3$} + \drawline[linecolor=red](30,-19)(15,-19)(15,-21)(22,-21)(22,-23)(10,-23)(10,-25)(30,-25) + \node(x3)(12,-20){\color{red}$\rho_4$} + \drawline(30,-25)(50,-25)(50,-27)(40,-27)(40,-29)(60,-29) + \node(x2)(53,-26){$\rho_5$} + \gasset{Nw=1.6,Nh=1.6,Nfill=y,ExtNL=y,NLdist=.7} + \node[NLangle=45](p)(0,-1){$p$} + \node[fillcolor=red,NLangle=45](p1)(30,-5){\color{red}$p_1$} + \node[fillcolor=red,NLangle=135](p2)(30,-11){\color{red}$p_2$} + \node[fillcolor=red,NLangle=45](p3)(30,-17){\color{red}$p_3$} + \node[fillcolor=red,NLangle=-135](p4)(30,-19){\color{red}$p_4$} + \node[fillcolor=red,NLangle=45](p5)(30,-25){\color{red}$p_5$} + \node[NLangle=0](q)(60,-29){$q$} +\end{gpicture} +\begin{gpicture}[name=gpic:LL-concat,ignore] + \gasset{Nframe=n} + \node(ui)(15,3){$u$} + \node(ui+1)(45,3){$v$} + \gasset{AHnb=0} + \drawline(0,2)(0,-31) + \drawline(30,2)(30,-31) + \drawline(60,2)(60,-31) + \gasset{AHnb=1,arcradius=0.8} + \drawline(0,-1)(20,-1)(20,-3)(5,-3)(5,-5)(30,-5) + \node(x0)(23,-2){$\rho_0$} + \drawline[linecolor=red](30,-5)(50,-5)(50,-7)(35,-7)(35,-9)(45,-9)(45,-11)(30,-11) + \node(x0)(53,-6){\color{red}$\rho_1$} + \drawline[linecolor=red](30,-11)(20,-11)(20,-13)(25,-13)(25,-15)(18,-15)(18,-17)(30,-17) + \node(x1)(17,-12){\color{red}$\rho_2$} + \drawline[linecolor=red](30,-17)(40,-17)(40,-19)(30,-19) + \node(x2)(43,-18){\color{red}$\rho_3$} + \drawline[linecolor=black](30,-19)(15,-19)(15,-21)(22,-21)(22,-23)(10,-23)(10,-25)(15,-25) + (15,-27)(0,-27) + \node(x3)(12,-20){\color{black}$\rho_4$} + \gasset{Nw=1.6,Nh=1.6,Nfill=y,ExtNL=y,NLdist=.7} + \node[NLangle=45](p)(0,-1){$p$} + \node[fillcolor=red,NLangle=45](p1)(30,-5){\color{red}$p_1$} + \node[fillcolor=red,NLangle=135](p2)(30,-11){\color{red}$p_2$} + \node[fillcolor=red,NLangle=45](p3)(30,-17){\color{red}$p_3$} + \node[fillcolor=red,NLangle=-135](p4)(30,-19){\color{red}$p_4$} + \node[NLangle=180](q)(0,-27){$q$} +\end{gpicture} + + +For the documentation, please see +\url{http://www.lsv.fr/~gastin/gastex/index.html}. + +The package consists of two files \verb|gastex.sty| and \verb|gastex.pro|. +\begin{itemize} + \item \verb|gastex.sty| contains the definition of all \GasTeX macros. + This file could be in your working folder but it is best placed where \verb|.sty| files are, e.g., + + \verb|.../texmf-dist/tex/latex/gastex/gastex.sty| \\ + or \\ + \verb|.../texmf-local/tex/latex/gastex/gastex.sty| + + \item \verb|gastex.pro| which contains all the postscript procedures used to actually draw the pictures. + This file could be in your working folder but it is best placed where \verb|.pro| files are, e.g., + + \verb|.../texmf-dist/dvips/gastex/gastex.pro| \\ + or \\ + \verb|.../texmf-local/dvips/gastex/gastex.pro| +\end{itemize} + +This documentation file simply contains a few simple examples on how to make figures with +\GasTeX. It should be compiled with +\begin{quote} + \verb|pdflatex --shell-escape gastex-doc.tex| \\ + or \\ + \verb|pdflatex --enable-write18 gastex-doc.tex| +\end{quote} + +The first example below is a 2-way deterministic finite state transducer. It consists of +a \verb|gpicture| environment which contains the \GasTeX commands for nodes and +transitions. + +\begin{center} + \begin{gpicture}[name=gpic:2DFT] + \gasset{Nframe=y,Nw=8,Nh=8,loopdiam=6} + \unitlength=2.8mm + \node[Nmarks=i](0)(0,0){$q_0$} + \node(1)(10,0){$q_1$} + \node[Nmarks=r](2)(20,0){$q_2$} + \node(6)(30,0){$q_3$} + \node(3)(30,-8){$q_4$} + \node(4)(20,-8){$q_5$} + \node(5)(10,-8){$q_6$} + + \drawloop(0){$\leftend/\varepsilon,+1$} + \drawloop(1){$a/\varepsilon,+1$} + \drawloop(2){$\rightend/\varepsilon,+1$} + \drawloop(6){$a/\varepsilon,+1$} + \drawloop[loopangle=-90](3){$a/a,-1$} + \drawloop[loopangle=-90](4){$a/b,-1$} + \drawloop[loopangle=-90](5){$a/\varepsilon,+1$} + + \drawedge(0,1){$b/\varepsilon,+1$} + \drawedge(1,2){$b/\varepsilon,+1$} + \drawedge[ELpos=25,ELdist=0,ELside=r](2,3){$b/\varepsilon,-1$} + \drawedge[ELpos=50](6,3){$b/\varepsilon,-1$} + \drawedge[ELside=l](3,4){$b/\varepsilon,-1$} + \drawedge[ELpos=50](4,5){$b/\varepsilon,+1$} + \drawedge[ELpos=50](5,1){$b/\varepsilon,+1$} + \drawedge(2,6){$a/\varepsilon,+1$} + \end{gpicture} +\end{center} + +The second one is in Figure~\ref{fig:LR-concat}. The pictures have been defined at the +beginning of the \LaTeX\ document, with the \verb|name| and \verb|ignore| optional +parameters given to the \verb|gpicture| environment. These pictures are generated but not +inserted immediately. Instead, the \verb|\gusepicture| command allows to include each +named picture, possibly multiple times at different places. + +All pictures defined in \verb|gpicture| environments are compiled and stored in a file +called \verb|filename-pics.pdf|, one picture per page. These pictures could be included +in any \LaTeX\ file, possibly another \LaTeX\ file which need not use the \GasTeX package, +simply by using \verb|\includegraphics| as follows: +\begin{quote} + \verb|\includegraphics[page=2,scale=0.6]{gastex-doc-pics.pdf}| + + \includegraphics[page=2,scale=0.6]{gastex-doc-pics.pdf} +\end{quote} +This is convenient for instance when sending the \LaTeX\ file to \verb|Arxiv| or to an +editor (journal, proceedings) which does not allow the \verb|--shell-escape| option when +compiling with \verb|pdflatex|. Actually, \GasTeX does this automatically for you. When +loading the package, set the \verb|recompilepics| option to \verb|false| as follows: +\begin{quote} + \verb|\usepackage[pdflatex,recompilepics=false]{gastex}| +\end{quote} +then you may compile without the \verb|--shell-escape| option +\begin{quote} + \verb|pdflatex gastex-doc.tex| +\end{quote} +and \GasTeX automatically calls \verb|\includegraphics| to include the pictures that have +been previously generated and stored in the file \verb|gastex-doc-pics.pdf|. + +\begin{figure}[b] + \centering + \gusepicture{gpic:LR-concat} + \hfill + \gusepicture{gpic:LL-concat} + \caption{Decomposition of a left-right run and a left-left run over the product $w=uv$.} + \label{fig:LR-concat} +\end{figure} + + +\end{document} + diff --git a/Master/texmf-dist/dvips/gastex/gastex.pro b/Master/texmf-dist/dvips/gastex/gastex.pro index e2ae122440e..672c184c723 100644 --- a/Master/texmf-dist/dvips/gastex/gastex.pro +++ b/Master/texmf-dist/dvips/gastex/gastex.pro @@ -10,153 +10,154 @@ sub dup mul !xp !x0 sub dup mul add sqrt 2 div def } { /!xp !x1 !x0 !x1 sub !d2 mul !d0 div add def /!yp !y1 !y0 !y1 sub !d2 mul !d0 div add def /!d !yp !y2 sub dup mul !xp !x2 sub dup mul add sqrt 2 div def } ifelse } { /!d 0 def } ifelse !d !r lt { /!r !d def } if !x1 -!y1 !x2 !y2 !r arct } def /!psarrow { gsave 2 copy translate 3 -1 roll -sub neg /!y exch def sub /!x exch def !x 0 eq !y 0 eq and {/!x 1 def} -if !y !x atan rotate /L2 exch def /L1 exch def /ang exch def /dist -exch def /nb exch def 1 1 nb { pop L2 0 eq { newpath L1 ang cos mul -L1 ang sin mul 2 copy moveto 0 0 lineto neg lineto stroke } { newpath -0 0 moveto L1 ang cos mul L1 ang sin mul 2 copy lineto L2 0 lineto -neg lineto closepath fill } ifelse dist 0 translate } for grestore -} def /!psvect { /y exch def /x exch def newpath 0 0 moveto x y lineto -stroke 0 0 x y !psarrow x y 0 0 !psarrow } def /!pslines { /ra exch -def /n exch def /yn exch def /xn exch def /yn_1 exch def /xn_1 exch -def /x xn def /y yn def /xx xn_1 def /yy yn_1 def newpath xn yn moveto -3 1 n { pop /x xx def /y yy def /yy exch def /xx exch def x y xx yy -ra !smartarct } for xx yy lineto stroke xn_1 yn_1 xn yn !psarrow x -y xx yy !psarrow } def /!psrectpath { /y1 exch def /x1 exch def /y0 -exch def /x0 exch def newpath x0 y0 moveto x1 y0 lineto x1 y1 lineto -x0 y1 lineto closepath } def /!pscirclepath { newpath 0 360 arc closepath -} def /!psovalpath { /rmax exch dup 0.1 le { pop 0.1 } if def /H exch -2 div dup 0.1 le { pop 0.1 } if def /W exch 2 div dup 0.1 le { pop -0.1 } if def /y exch def /x exch def H W le { /R H def }{ /R W def -} ifelse rmax R le { /R rmax def } if newpath x y H add moveto x W -add y H add x W add y R arct x W add y H sub x y H sub R arct x W sub -y H sub x W sub y R arct x W sub y H add x y H add R arct closepath -} def /!pspolygonpath { /ra exch def /n exch def dup n 2 mul 1 add -1 roll 1 index n 2 mul 2 add 1 roll n 2 mul 1 sub index n 2 mul 1 sub -index /yy exch def /xx exch def /y exch def /x exch def newpath xx -x add 2 div yy y add 2 div moveto 1 1 n { pop /yy exch def /xx exch -def x y x xx add 2 div y yy add 2 div ra !smartarct /x xx def /y yy -def } for closepath } def /!psrpolygonpath { /rd exch def /ra exch -def /a exch def /r exch def /n exch def /y exch def /x exch def /b -360 n div def /c b def x y translate a rotate rd 0 ne { r rd b 2 div -cos div sub r div dup scale } if /x1 r b cos mul def /y1 r b sin mul -def newpath r x1 add 2 div y1 2 div moveto 1 1 n { pop /c c b add def -/x2 r c cos mul def /y2 r c sin mul def x1 y1 x1 x2 add 2 div y1 y2 -add 2 div ra !smartarct /x1 x2 def /y1 y2 def } for closepath rd 0 -ne { r r rd b 2 div cos div sub div dup scale } if a neg rotate x neg -y neg translate } def /!psccurvepath { /n exch def n 2 mul 1 sub index +!y1 !x2 !y2 !r arct } def /!psarrow { gsave [] 0 setdash 2 copy translate +3 -1 roll sub neg /!y exch def sub /!x exch def !x 0 eq !y 0 eq and +{/!x 1 def} if !y !x atan rotate /L2 exch def /L1 exch def /ang exch +def /dist exch def /nb exch def 1 1 nb { pop L2 0 eq { newpath L1 ang +cos mul L1 ang sin mul 2 copy moveto 0 0 lineto neg lineto stroke } +{ newpath 0 0 moveto L1 ang cos mul L1 ang sin mul 2 copy lineto L2 +0 lineto neg lineto closepath fill } ifelse dist 0 translate } for +grestore } def /!psvect { /y exch def /x exch def newpath 0 0 moveto +x y lineto stroke 0 0 x y !psarrow x y 0 0 !psarrow } def /!pslines +{ /ra exch def /n exch def /yn exch def /xn exch def /yn_1 exch def +/xn_1 exch def /x xn def /y yn def /xx xn_1 def /yy yn_1 def newpath +xn yn moveto 3 1 n { pop /x xx def /y yy def /yy exch def /xx exch +def x y xx yy ra !smartarct } for xx yy lineto stroke xn_1 yn_1 xn +yn !psarrow x y xx yy !psarrow } def /!psrectpath { /y1 exch def /x1 +exch def /y0 exch def /x0 exch def newpath x0 y0 moveto x1 y0 lineto +x1 y1 lineto x0 y1 lineto closepath } def /!pscirclepath { newpath +0 360 arc closepath } def /!psovalpath { /rmax exch dup 0.1 le { pop +0.1 } if def /H exch 2 div dup 0.1 le { pop 0.1 } if def /W exch 2 +div dup 0.1 le { pop 0.1 } if def /y exch def /x exch def H W le { +/R H def }{ /R W def } ifelse rmax R le { /R rmax def } if newpath +x y H add moveto x W add y H add x W add y R arct x W add y H sub x +y H sub R arct x W sub y H sub x W sub y R arct x W sub y H add x y +H add R arct closepath } def /!pspolygonpath { /ra exch def /n exch +def dup n 2 mul 1 add 1 roll 1 index n 2 mul 2 add 1 roll n 2 mul 1 +sub index n 2 mul 1 sub index /yy exch def /xx exch def /y exch def +/x exch def newpath xx x add 2 div yy y add 2 div moveto 1 1 n { pop +/yy exch def /xx exch def x y x xx add 2 div y yy add 2 div ra !smartarct +/x xx def /y yy def } for closepath } def /!psrpolygonpath { /rd exch +def /ra exch def /a exch def /r exch def /n exch def /y exch def /x +exch def /b 360 n div def /c b def x y translate a rotate rd 0 ne { +r rd b 2 div cos div sub r div dup scale } if /x1 r b cos mul def /y1 +r b sin mul def newpath r x1 add 2 div y1 2 div moveto 1 1 n { pop +/c c b add def /x2 r c cos mul def /y2 r c sin mul def x1 y1 x1 x2 +add 2 div y1 y2 add 2 div ra !smartarct /x1 x2 def /y1 y2 def } for +closepath rd 0 ne { r r rd b 2 div cos div sub div dup scale } if a +neg rotate x neg y neg translate } def /!psccurvepath { /n exch def n 2 mul 1 sub index n 2 mul 1 sub index n 2 mul 1 sub index n 2 mul -4 add array astore /coef exch def /alpha 3.5 def /px0 coef n 2 mul -2 sub get def /py0 coef n 2 mul 1 sub get def /px1 coef 0 get def /py1 -coef 1 get def /px2 coef 2 get def /py2 coef 3 get def /d0 px1 px0 -sub dup mul py1 py0 sub dup mul add sqrt def /d2 px1 px2 sub dup mul -py1 py2 sub dup mul add sqrt def /ppx d2 d0 div px0 px1 sub mul px1 +1 sub index n 2 mul 4 add array astore /coef exch def /alpha 3.5 def +/px0 coef n 2 mul 2 sub get def /py0 coef n 2 mul 1 sub get def /px1 +coef 0 get def /py1 coef 1 get def /px2 coef 2 get def /py2 coef 3 +get def /d0 px1 px0 sub dup mul py1 py0 sub dup mul add sqrt def /d2 +px1 px2 sub dup mul py1 py2 sub dup mul add sqrt def /ppx d2 d0 div +px0 px1 sub mul px1 add def /ppy d2 d0 div py0 py1 sub mul py1 add +def /d1 ppx px2 sub dup mul ppy py2 sub dup mul add sqrt def /qx d2 +d1 div px2 ppx sub mul alpha div px1 add def /qy d2 d1 div py2 ppy +sub mul alpha div py1 add def newpath px1 py1 moveto 4 2 n 2 mul 2 +add { /i exch def /px0 px1 def /px1 px2 def /px2 coef i get def /py0 +py1 def /py1 py2 def /py2 coef i 1 add get def /d0 d2 def /d2 px1 px2 +sub dup mul py1 py2 sub dup mul add sqrt def /ppx d0 d2 div px2 px1 +sub mul px1 add def /ppy d0 d2 div py2 py1 sub mul py1 add def /d1 +ppx px0 sub dup mul ppy py0 sub dup mul add sqrt def /rx d0 d1 div +px0 ppx sub mul alpha div px1 add def /ry d0 d1 div py0 ppy sub mul +alpha div py1 add def qx qy rx ry px1 py1 curveto /ppx d2 d0 div px0 +px1 sub mul px1 add def /ppy d2 d0 div py0 py1 sub mul py1 add def +/d1 ppx px2 sub dup mul ppy py2 sub dup mul add sqrt def /qx d2 d1 +div px2 ppx sub mul alpha div px1 add def /qy d2 d1 div py2 ppy sub +mul alpha div py1 add def } for closepath } def /!pscurve { /n exch +def n 2 mul array astore /coef exch def /alpha 3.5 def /px1 coef 0 +get def /py1 coef 1 get def /px2 coef 2 get def /py2 coef 3 get def +/d2 px1 px2 sub dup mul py1 py2 sub dup mul add sqrt def /qx px1 def +/qy py1 def newpath px1 py1 moveto 4 2 n 2 mul 2 sub { /i exch def +/px0 px1 def /px1 px2 def /px2 coef i get def /py0 py1 def /py1 py2 +def /py2 coef i 1 add get def /d0 d2 def /d2 px1 px2 sub dup mul py1 +py2 sub dup mul add sqrt def /ppx d0 d2 div px2 px1 sub mul px1 add +def /ppy d0 d2 div py2 py1 sub mul py1 add def /d1 ppx px0 sub dup +mul ppy py0 sub dup mul add sqrt def /rx d0 d1 div px0 ppx sub mul +alpha div px1 add def /ry d0 d1 div py0 ppy sub mul alpha div py1 add +def qx qy rx ry px1 py1 curveto /ppx d2 d0 div px0 px1 sub mul px1 add def /ppy d2 d0 div py0 py1 sub mul py1 add def /d1 ppx px2 sub dup mul ppy py2 sub dup mul add sqrt def /qx d2 d1 div px2 ppx sub mul alpha div px1 add def /qy d2 d1 div py2 ppy sub mul alpha div py1 -add def newpath px1 py1 moveto 4 2 n 2 mul 2 add { /i exch def /px0 -px1 def /px1 px2 def /px2 coef i get def /py0 py1 def /py1 py2 def -/py2 coef i 1 add get def /d0 d2 def /d2 px1 px2 sub dup mul py1 py2 -sub dup mul add sqrt def /ppx d0 d2 div px2 px1 sub mul px1 add def -/ppy d0 d2 div py2 py1 sub mul py1 add def /d1 ppx px0 sub dup mul -ppy py0 sub dup mul add sqrt def /rx d0 d1 div px0 ppx sub mul alpha -div px1 add def /ry d0 d1 div py0 ppy sub mul alpha div py1 add def -qx qy rx ry px1 py1 curveto /ppx d2 d0 div px0 px1 sub mul px1 add +add def } for /px1 coef n 2 mul 2 sub get def /py1 coef n 2 mul 1 sub +get def /rx px1 def /ry py1 def qx qy rx ry px1 py1 curveto stroke +/px0 coef n 2 mul 6 sub get def /py0 coef n 2 mul 5 sub get def /px1 +coef n 2 mul 4 sub get def /py1 coef n 2 mul 3 sub get def /px2 coef +n 2 mul 2 sub get def /py2 coef n 2 mul 1 sub get def /d0 px1 px0 sub +dup mul py1 py0 sub dup mul add sqrt def /d2 px1 px2 sub dup mul py1 +py2 sub dup mul add sqrt def /ppx d2 d0 div px0 px1 sub mul px1 add def /ppy d2 d0 div py0 py1 sub mul py1 add def /d1 ppx px2 sub dup mul ppy py2 sub dup mul add sqrt def /qx d2 d1 div px2 ppx sub mul alpha div px1 add def /qy d2 d1 div py2 ppy sub mul alpha div py1 add -def } for closepath } def /!pscurve { /n exch def n 2 mul array astore -/coef exch def /alpha 3.5 def /px1 coef 0 get def /py1 coef 1 get def -/px2 coef 2 get def /py2 coef 3 get def /d2 px1 px2 sub dup mul py1 -py2 sub dup mul add sqrt def /qx px1 def /qy py1 def newpath px1 py1 -moveto 4 2 n 2 mul 2 sub { /i exch def /px0 px1 def /px1 px2 def /px2 -coef i get def /py0 py1 def /py1 py2 def /py2 coef i 1 add get def -/d0 d2 def /d2 px1 px2 sub dup mul py1 py2 sub dup mul add sqrt def -/ppx d0 d2 div px2 px1 sub mul px1 add def /ppy d0 d2 div py2 py1 sub -mul py1 add def /d1 ppx px0 sub dup mul ppy py0 sub dup mul add sqrt -def /rx d0 d1 div px0 ppx sub mul alpha div px1 add def /ry d0 d1 div -py0 ppy sub mul alpha div py1 add def qx qy rx ry px1 py1 curveto /ppx -d2 d0 div px0 px1 sub mul px1 add def /ppy d2 d0 div py0 py1 sub mul -py1 add def /d1 ppx px2 sub dup mul ppy py2 sub dup mul add sqrt def -/qx d2 d1 div px2 ppx sub mul alpha div px1 add def /qy d2 d1 div py2 -ppy sub mul alpha div py1 add def } for /px1 coef n 2 mul 2 sub get -def /py1 coef n 2 mul 1 sub get def /rx px1 def /ry py1 def qx qy rx -ry px1 py1 curveto stroke /px0 coef n 2 mul 6 sub get def /py0 coef -n 2 mul 5 sub get def /px1 coef n 2 mul 4 sub get def /py1 coef n 2 -mul 3 sub get def /px2 coef n 2 mul 2 sub get def /py2 coef n 2 mul -1 sub get def /d0 px1 px0 sub dup mul py1 py0 sub dup mul add sqrt -def /d2 px1 px2 sub dup mul py1 py2 sub dup mul add sqrt def /ppx d2 -d0 div px0 px1 sub mul px1 add def /ppy d2 d0 div py0 py1 sub mul py1 -add def /d1 ppx px2 sub dup mul ppy py2 sub dup mul add sqrt def /qx -d2 d1 div px2 ppx sub mul alpha div px1 add def /qy d2 d1 div py2 ppy -sub mul alpha div py1 add def px1 py1 qx qy px2 py2 px2 py2 !ps_cbezier_arrow -/px0 coef 0 get def /py0 coef 1 get def /px1 coef 2 get def /py1 coef -3 get def /px2 coef 4 get def /py2 coef 5 get def /d0 px1 px0 sub dup -mul py1 py0 sub dup mul add sqrt def /d2 px1 px2 sub dup mul py1 py2 -sub dup mul add sqrt def /ppx d0 d2 div px2 px1 sub mul px1 add def -/ppy d0 d2 div py2 py1 sub mul py1 add def /d1 ppx px0 sub dup mul -ppy py0 sub dup mul add sqrt def /rx d0 d1 div px0 ppx sub mul alpha -div px1 add def /ry d0 d1 div py0 ppy sub mul alpha div py1 add def -px1 py1 rx ry px0 py0 px0 py0 !ps_cbezier_arrow } def /!ps_cbezier -{ /y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def -/x1 exch def /y0 exch def /x0 exch def newpath x0 y0 moveto x1 y1 x2 -y2 x3 y3 curveto stroke x0 y0 x1 y1 x2 y2 x3 y3 !ps_cbezier_arrow x3 -y3 x2 y2 x1 y1 x0 y0 !ps_cbezier_arrow } def /!ps_cbezier_arrow { /y3 -exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1 exch -def /y0 exch def /x0 exch def /xa x1 x2 sub 3 mul x3 x0 sub add def -/xb x0 x1 sub x1 sub x2 add 3 mul def /xc x1 x0 sub 3 mul def /ya y1 -y2 sub 3 mul y3 y0 sub add def /yb y0 y1 sub y1 sub y2 add 3 mul def -/yc y1 y0 sub 3 mul def /L2 exch def /L1 exch def /ang exch def /dist -exch def /nb exch def L2 0 le { /L L1 ang cos mul 2 div def } { /L -L2 def } ifelse /t4 1 def 1 1 nb { pop /x4 t4 !calculx def /y4 t4 !calculy -def L 0 le { /dx t4 !calculdx def /dy t4 !calculdy def dx dup mul dy -dup mul add sqrt dup 0 eq { /dx 1 def /dy 0 def pop 1 } if L1 exch -div dup dx neg mul /xx exch def dy neg mul /yy exch def } { /t1 0 def -/t2 t4 def 0 1 !max { pop /t t1 t2 add 2 div def t !calculx x4 sub -dup mul t !calculy y4 sub dup mul add sqrt L ge { /t1 t def } { /t2 -t def } ifelse } for /x6 t !calculx def /y6 t !calculy def L1 L div -dup x6 x4 sub mul /xx exch def y6 y4 sub mul /yy exch def } ifelse -/x5 x4 xx ang cos mul add yy ang sin mul sub def /y5 y4 xx ang sin -mul add yy ang cos mul add def /x7 x4 xx ang cos mul add yy ang sin -mul add def /y7 y4 xx ang sin mul sub yy ang cos mul add def L2 0 le -{ newpath x5 y5 moveto x4 y4 lineto x7 y7 lineto stroke } { newpath -x4 y4 moveto x5 y5 lineto x6 y6 lineto x7 y7 lineto closepath fill -} ifelse /t1 0 def /t2 t4 def 0 1 !max { pop /t t1 t2 add 2 div def -t !calculx x4 sub dup mul t !calculy y4 sub dup mul add sqrt dist ge -{ /t1 t def } { /t2 t def } ifelse } for /t4 t def } for } def /!ps_qbezier -{ /y3 exch def /x3 exch def /yy exch def /xx exch def /y0 exch def -/x0 exch def /x1 xx 2 mul x0 add 3 div def /y1 yy 2 mul y0 add 3 div -def /x2 xx 2 mul x3 add 3 div def /y2 yy 2 mul y3 add 3 div def x0 -y0 x1 y1 x2 y2 x3 y3 !ps_cbezier } def /!max 10 def /!ps_r_cbezier -{ /y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def -/x1 exch def /y0 exch def /x0 exch def /xa x1 x2 sub 3 mul x3 x0 sub -add def /xb x0 x1 sub x1 sub x2 add 3 mul def /xc x1 x0 sub 3 mul def -/ya y1 y2 sub 3 mul y3 y0 sub add def /yb y0 y1 sub y1 sub y2 add 3 -mul def /yc y1 y0 sub 3 mul def /t1 0 def /t2 1 def 0 1 !max { pop -/t t1 t2 add 2 div def t !calculx t !calculy path!a inufill { /t1 t -def } { /t2 t def } ifelse } for /ta t def /t1 0 def /t2 1 def 0 1 -!max { pop /t t1 t2 add 2 div def t !calculx t !calculy path!b inufill -{ /t2 t def } { /t1 t def } ifelse } for /tb t def ta !calculx ta !calculy -ta !calculdx 3 div tb ta sub mul ta !calculx add ta !calculdy 3 div -tb ta sub mul ta !calculy add tb !calculdx 3 div ta tb sub mul tb !calculx -add tb !calculdy 3 div ta tb sub mul tb !calculy add tb !calculx tb -!calculy !ps_cbezier } def /!calculx { dup dup xa mul xb add mul xc -add mul x0 add } def /!calculy { dup dup ya mul yb add mul yc add mul -y0 add } def /!calculdx { dup 3 xa mul mul 2 xb mul add mul xc add -} def /!calculdy { dup 3 ya mul mul 2 yb mul add mul yc add } def /!node_mark -{ /ma exch def /ml exch def /y exch def /x exch def /x1 x def /y1 y -def /x2 x 500 ma cos mul add def /y2 y 500 ma sin mul add def 0 1 !max -{ pop /x x1 x2 add 2 div def /y y1 y2 add 2 div def x y path!a inufill -{ /x1 x def /y1 y def } { /x2 x def /y2 y def } ifelse } for /x1 x -def /y1 y def /x2 x ml ma cos mul add def /y2 y ml ma sin mul add def -newpath x1 y1 moveto x2 y2 lineto stroke x2 y2 x1 y1 !psarrow x1 y1 -x2 y2 !psarrow } def /!sign {dup 0 lt {pop -1} {0 eq {0} {1} ifelse} -ifelse} def /!pslatexline { /L exch def /b exch def /a exch def a 0 -eq {0 L b !sign mul} {L a !sign mul dup b mul a div} ifelse newpath -0 0 moveto lineto stroke } def /!pslatexvector { /L exch def /b exch -def /a exch def a 0 eq {0 L b !sign mul} {L a !sign mul dup b mul a -div} ifelse !psvect } def /!pscircle { 2 div newpath 0 0 3 2 roll 0 -360 arc stroke } def /!psdisk { 2 div newpath 0 0 3 2 roll 0 360 arc -fill } def +def px1 py1 qx qy px2 py2 px2 py2 !ps_cbezier_arrow /px0 coef 0 get +def /py0 coef 1 get def /px1 coef 2 get def /py1 coef 3 get def /px2 +coef 4 get def /py2 coef 5 get def /d0 px1 px0 sub dup mul py1 py0 +sub dup mul add sqrt def /d2 px1 px2 sub dup mul py1 py2 sub dup mul +add sqrt def /ppx d0 d2 div px2 px1 sub mul px1 add def /ppy d0 d2 +div py2 py1 sub mul py1 add def /d1 ppx px0 sub dup mul ppy py0 sub +dup mul add sqrt def /rx d0 d1 div px0 ppx sub mul alpha div px1 add +def /ry d0 d1 div py0 ppy sub mul alpha div py1 add def px1 py1 rx +ry px0 py0 px0 py0 !ps_cbezier_arrow } def /!ps_cbezier { /y3 exch +def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1 exch def +/y0 exch def /x0 exch def newpath x0 y0 moveto x1 y1 x2 y2 x3 y3 curveto +stroke x0 y0 x1 y1 x2 y2 x3 y3 !ps_cbezier_arrow x3 y3 x2 y2 x1 y1 +x0 y0 !ps_cbezier_arrow } def /!ps_cbezier_arrow { gsave [] 0 setdash +/y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1 +exch def /y0 exch def /x0 exch def /xa x1 x2 sub 3 mul x3 x0 sub add +def /xb x0 x1 sub x1 sub x2 add 3 mul def /xc x1 x0 sub 3 mul def /ya +y1 y2 sub 3 mul y3 y0 sub add def /yb y0 y1 sub y1 sub y2 add 3 mul +def /yc y1 y0 sub 3 mul def /L2 exch def /L1 exch def /ang exch def +/dist exch def /nb exch def L2 0 le { /L L1 ang cos mul 2 div def } +{ /L L2 def } ifelse /t4 1 def 1 1 nb { pop /x4 t4 !calculx def /y4 +t4 !calculy def L 0 le { /dx t4 !calculdx def /dy t4 !calculdy def +dx dup mul dy dup mul add sqrt dup 0 eq { /dx 1 def /dy 0 def pop 1 +} if L1 exch div dup dx neg mul /xx exch def dy neg mul /yy exch def +} { /t1 0 def /t2 t4 def 0 1 !max { pop /t t1 t2 add 2 div def t !calculx +x4 sub dup mul t !calculy y4 sub dup mul add sqrt L ge { /t1 t def +} { /t2 t def } ifelse } for /x6 t !calculx def /y6 t !calculy def +L1 L div dup x6 x4 sub mul /xx exch def y6 y4 sub mul /yy exch def +} ifelse /x5 x4 xx ang cos mul add yy ang sin mul sub def /y5 y4 xx +ang sin mul add yy ang cos mul add def /x7 x4 xx ang cos mul add yy +ang sin mul add def /y7 y4 xx ang sin mul sub yy ang cos mul add def +L2 0 le { newpath x5 y5 moveto x4 y4 lineto x7 y7 lineto stroke } { +newpath x4 y4 moveto x5 y5 lineto x6 y6 lineto x7 y7 lineto closepath +fill } ifelse /t1 0 def /t2 t4 def 0 1 !max { pop /t t1 t2 add 2 div +def t !calculx x4 sub dup mul t !calculy y4 sub dup mul add sqrt dist +ge { /t1 t def } { /t2 t def } ifelse } for /t4 t def } for grestore +} def /!ps_qbezier { /y3 exch def /x3 exch def /yy exch def /xx exch +def /y0 exch def /x0 exch def /x1 xx 2 mul x0 add 3 div def /y1 yy +2 mul y0 add 3 div def /x2 xx 2 mul x3 add 3 div def /y2 yy 2 mul y3 +add 3 div def x0 y0 x1 y1 x2 y2 x3 y3 !ps_cbezier } def /!max 10 def +/!ps_r_cbezier { /y3 exch def /x3 exch def /y2 exch def /x2 exch def +/y1 exch def /x1 exch def /y0 exch def /x0 exch def /xa x1 x2 sub 3 +mul x3 x0 sub add def /xb x0 x1 sub x1 sub x2 add 3 mul def /xc x1 +x0 sub 3 mul def /ya y1 y2 sub 3 mul y3 y0 sub add def /yb y0 y1 sub +y1 sub y2 add 3 mul def /yc y1 y0 sub 3 mul def /t1 0 def /t2 1 def +0 1 !max { pop /t t1 t2 add 2 div def t !calculx t !calculy path!a +inufill { /t1 t def } { /t2 t def } ifelse } for /ta t def /t1 0 def +/t2 1 def 0 1 !max { pop /t t1 t2 add 2 div def t !calculx t !calculy +path!b inufill { /t2 t def } { /t1 t def } ifelse } for /tb t def ta +!calculx ta !calculy ta !calculdx 3 div tb ta sub mul ta !calculx add +ta !calculdy 3 div tb ta sub mul ta !calculy add tb !calculdx 3 div +ta tb sub mul tb !calculx add tb !calculdy 3 div ta tb sub mul tb !calculy +add tb !calculx tb !calculy !ps_cbezier } def /!calculx { dup dup xa +mul xb add mul xc add mul x0 add } def /!calculy { dup dup ya mul yb +add mul yc add mul y0 add } def /!calculdx { dup 3 xa mul mul 2 xb +mul add mul xc add } def /!calculdy { dup 3 ya mul mul 2 yb mul add +mul yc add } def /!node_mark { /ma exch def /ml exch def /y exch def +/x exch def /x1 x def /y1 y def /x2 x 500 ma cos mul add def /y2 y +500 ma sin mul add def 0 1 !max { pop /x x1 x2 add 2 div def /y y1 +y2 add 2 div def x y path!a inufill { /x1 x def /y1 y def } { /x2 x +def /y2 y def } ifelse } for /x1 x def /y1 y def /x2 x ml ma cos mul +add def /y2 y ml ma sin mul add def newpath x1 y1 moveto x2 y2 lineto +stroke x2 y2 x1 y1 !psarrow x1 y1 x2 y2 !psarrow } def /!sign {dup +0 lt {pop -1} {0 eq {0} {1} ifelse} ifelse} def /!pslatexline { /L +exch def /b exch def /a exch def a 0 eq {0 L b !sign mul} {L a !sign +mul dup b mul a div} ifelse newpath 0 0 moveto lineto stroke } def +/!pslatexvector { /L exch def /b exch def /a exch def a 0 eq {0 L b +!sign mul} {L a !sign mul dup b mul a div} ifelse !psvect } def /!pscircle +{ 2 div newpath 0 0 3 2 roll 0 360 arc stroke } def /!psdisk { 2 div +newpath 0 0 3 2 roll 0 360 arc fill } def end \ No newline at end of file diff --git a/Master/texmf-dist/tex/latex/gastex/gastex.sty b/Master/texmf-dist/tex/latex/gastex/gastex.sty index a9f0a8ad43b..9fbb83909b1 100644 --- a/Master/texmf-dist/tex/latex/gastex/gastex.sty +++ b/Master/texmf-dist/tex/latex/gastex/gastex.sty @@ -1,41 +1,118 @@ -\NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{gastex}[2006/11/28 v2.8] -\newif\ifgastexslide\gastexslidefalse -\DeclareOption{slide}{\global\gastexslidetrue} -\DeclareOption{paper}{\global\gastexslidefalse} -\ProcessOptions -\RequirePackage{calc,trig} -\special{header=gastex.pro} -% \input gastex.ps - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% GasTeX : Graphs and Automata Simplified in TeX %% %% Macros for drawing easily graphs and automata under the picture -%% environment of LaTeX2e. -%% See the README file +%% environment of LaTeX. +%% See the README file. %% %% Paul Gastin -%% LSV -%% ENS de Cachan -%% 61, avenue du Prˇsident Wilson -%% F-94235 CACHAN Cedex +%% LMF +%% ENS Paris-Saclay +%% 4, Avenue des Sciences +%% F-91190 Gif-sur-Yvette %% FRANCE -%% http://www.lsv.ens-cachan.fr/~gastin/ +%% mail: paul.gastin@ens-paris-saclay.fr +%% http://www.lsv.fr/~gastin/ %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -% -% A lot of changes has been made since gastex 1.0 and as a result, -% these new macros are no longer compatible with the previous ones. -% To be able to use old pictures, a compatible mode is provided -% (see \compatiblegastexun at the end of the file). The compatibility -% is almost 100% and should be sufficient in most cases. -% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{gastex}[2013/10/01 v3.0] +\RequirePackage{ifpdf} +\RequirePackage{xkeyval} +\RequirePackage{xifthen} +\RequirePackage{calc} +\RequirePackage{trig} +\RequirePackage{environ} +\RequirePackage{xcolor} +\RequirePackage{graphicx} +\newif\ifgastexslide\gastexslidefalse +\DeclareOptionX{slide}{\global\gastexslidetrue} +\DeclareOptionX{paper}{\global\gastexslidefalse} +% +\define@boolkey{gastex.sty}[gastex@]{pdflatex}[true]{} +\PassOptionsToPackage{final}{pst-pdf} +% +\newif\ifgastex@autopstpdf\gastex@autopstpdffalse +\newif\ifgastex@mdfive\gastex@mdfivefalse +\define@choicekey*{gastex.sty}{recompilepics}[\g@val\g@nr]{auto,true,false}[auto]{% + \ifcase\g@nr\relax +% During the latex+dvips+ps2pdf run, the md5 computations and checks should not +% be executed. Hence, we check whether pdftex is running in pdf mode. + \ifpdf\gastex@mdfivetrue\else\gastex@mdfivefalse\fi + \gastex@autopstpdftrue + \PassOptionsToPackage{off}{auto-pst-pdf} + \or + \ifpdf\gastex@mdfivetrue\else\gastex@mdfivefalse\fi + \gastex@autopstpdftrue + \PassOptionsToPackage{on}{auto-pst-pdf} + \or + \gastex@mdfivefalse + \gastex@autopstpdffalse + \PassOptionsToPackage{off}{auto-pst-pdf} + \fi +} +\ExecuteOptionsX{recompilepics=false} % if not set when loading gastex.sty, this option is off +% +\define@choicekey*{gastex.sty}{pst-pdf}[\g@val\g@nr]{md5,auto,final,draft,off}[md5]{% + \PackageWarning{gastex}{Option pst-pdf is depreciated. Use options pdflatex + and recompilepics instead.}{} +} +% \ExecuteOptionsX{pst-pdf=off} % if not set when loading gastex.sty, this option is off +% +\DeclareOptionX*{\PassOptionsToPackage{\CurrentOption}{auto-pst-pdf}} +\ProcessOptionsX +% if it exists, the md5 file should be read now to set the option of +% auto-pst-pdf to on if some pictures have changed +\def\g@hashfilename{\jobname-md5.txt}% +\def\g@extract@mdfive:#1:#2:#3:{\expandafter\edef\csname g@oldmdfive@#2\endcsname{#3}}% +\def\g@changed@mdfive!#1!{\PassOptionsToPackage{on}{auto-pst-pdf}}% +\def\g@read@mdfive#1{\@ifnextchar:{\g@extract@mdfive}{\g@changed@mdfive}#1}% +\def\g@process@mdfivefile{% + \newif\ifnot@eof\not@eoffalse + \IfFileExists{\g@hashfilename}{% + \openin2 = "\g@hashfilename"% + \loop% + \read 2 to \g@md% + \ifeof 2 \not@eoffalse\else\not@eoftrue\fi% + \ifnot@eof% + \expandafter\g@read@mdfive\expandafter{\g@md}% + \repeat% + \closein2}{}}% +\ifgastex@mdfive\g@process@mdfivefile\fi +% +\ifgastex@pdflatex + \ifgastex@autopstpdf + \RequirePackage{auto-pst-pdf} + \else + \RequirePackage{pst-pdf} + \fi +\else + \special{header=gastex.pro} +\fi +% \input gastex.ps %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % History since version 2.0 % +% 3.0 +% Many changes in this release. +% - Compatibility with pdflatex using auto-pst-pdf. +% - New gpicture environment and new gusepicture command. +% - New command to draw an arc of circle or a pie (See ex-gastex.tex) +% \drawarc[linecolor=black](0,10,20,0,45) +% \drawarc[arcPie=y,linecolor=blue](0,10,20,-50,-15) +% - New command to draw a snaky line (See ex-gastex.tex) +% \drawsnake[linecolor=red,snakeh=.8,snakew=.8](20,15.5)(20,8.5) +% \drawsnake[linecolor=red,snakeh=.8,snakew=.8](0,7.5)(0,0.5) +% +% 2.9: +% - added the parameters loopwidth and loopheight to be able to set +% independently the width and height of loops. loopdiam still exists and set +% both loopwidth and loopheight to the same value. +% - added the example "ex-gastex-pdflatex.tex" which contains instructions how +% to use gastex directly with pdflatex using the package auto-pst-pdf +% % 2.8: % - packaged for CTAN % @@ -131,6 +208,14 @@ % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % +% A lot of changes has been made since gastex 1.0 and as a result, +% these new macros are no longer compatible with the previous ones. +% To be able to use old pictures, a compatible mode is provided +% (see \compatiblegastexun at the end of the file). The compatibility +% is almost 100% and should be sufficient in most cases. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% % Known problems and (hopefully) solutions. % % 21/10/99: Frank Goertzen (frank.goertzen@unibw-muenchen.de) has @@ -279,8 +364,12 @@ % With a positive/negative value the curved edge is on the left/right % of the line joining the two nodes. % +% loopwidth=number +% width in \unitlength of (vertical) loops +% loopheight=number +% height in \unitlength of (vertical) loops % loopdiam=number -% diameters in \unitlength of loops +% width and height in \unitlength of (vertical) loops % loopangle=number % direction in degree of loops % loopCW=y or n @@ -375,57 +464,56 @@ % angle in degrees with respect to the x axis of the first vertex % of the regular polygon. % -\def\gasset#1{\gas@set#1,&}% -\def\gas@set#1=#2,{\ignorespaces% - \@ifundefined{gasset@#1} - {\PackageWarning{gastex}{Parameter #1 undefined}{}} - {\csname gasset@#1\endcsname{#2}}% - \@ifnextchar&{\gas@gobble}{\gas@set}} +\def\gasset#1{\setkeys*[]{gastex}{#1}}% -\def\gasset@Nw#1{% +\define@key[]{gastex}{Nw}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\N@w{\thecnt@a}}% -\def\gasset@Nh#1{% +\define@key[]{gastex}{Nh}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\N@h{\thecnt@a}}% -\def\gasset@Nmr#1{% +\define@key[]{gastex}{Nmr}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\N@mr{\thecnt@a}}% \newif\if@wadjust \newif\if@hadjust \newif\if@nadjust -\def\gasset@Nadjust#1{% +\define@key[]{gastex}{Nadjust}{% \@wadjustfalse \@hadjustfalse \gasset@@Nadjust #1&} \def\gasset@@Nadjust#1{% \@ifundefined{if@#1adjust} {\PackageWarning{gastex}{Node adjust #1 undefined}{}} {\csname @#1adjusttrue\endcsname}% \@ifnextchar&{\gas@gobble}{\gasset@@Nadjust}} -\def\gasset@Nadjustdist#1{% +\define@key[]{gastex}{Nadjustdist}{% \setcounter{cnt@a}{2*\ratio{#1\unitlength}{\d@my@unit}} \edef\N@adjustdist{\thecnt@a}}% -\newif\if@frame \newif\if@fill \newif\if@ExtNL +\newif\if@frame \newif\if@fill \newif\if@ExtNL \newif\if@arcPie \def\flag@y{\relax}\def\flag@n{\relax} -\def\gasset@Nframe#1{% +\define@key[]{gastex}{Nframe}{% \@ifundefined{flag@#1} {\PackageWarning{gastex}{Nframe value should be y or n}{}} {\if#1y \@frametrue \else \@framefalse \fi}} -\def\gasset@Nfill#1{% +\define@key[]{gastex}{Nfill}{% \@ifundefined{flag@#1} {\PackageWarning{gastex}{Nfill value should be y or n}{}} {\if#1y \@filltrue \else \@fillfalse \fi}} -\def\gasset@ExtNL#1{% +\define@key[]{gastex}{ExtNL}{% \@ifundefined{flag@#1} {\PackageWarning{gastex}{ExtNL value should be y or n}{}} {\if#1y \@ExtNLtrue \else \@ExtNLfalse \fi}} +\define@key[]{gastex}{arcPie}{% + \@ifundefined{flag@#1} + {\PackageWarning{gastex}{arcPie value should be y or n}{}} + {\if#1y \@arcPietrue \else \@arcPiefalse \fi}} -\def\gasset@NLangle#1{\edef\NL@angle{#1}}% -\def\gasset@NLdist#1{% +\define@key[]{gastex}{NLangle}{\edef\NL@angle{#1}}% +\define@key[]{gastex}{NLdist}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\NL@dist{\thecnt@a}}% \newif\if@imark \newif\if@fmark \newif\if@rmark \newif\if@nmark -\def\gasset@Nmarks#1{% +\define@key[]{gastex}{Nmarks}{% \@imarkfalse \@fmarkfalse \@rmarkfalse \gasset@@Nmarks #1&} \def\gasset@@Nmarks#1{% \@ifundefined{if@#1mark} @@ -433,79 +521,86 @@ {\csname @#1marktrue\endcsname}% \@ifnextchar&{\gas@gobble}{\gasset@@Nmarks}} -\def\gasset@ilength#1{% +\define@key[]{gastex}{ilength}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\i@length{\thecnt@a}}% -\def\gasset@iangle#1{\edef\i@angle{#1}}% -\def\gasset@flength#1{% +\define@key[]{gastex}{iangle}{\edef\i@angle{#1}}% +\define@key[]{gastex}{flength}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\f@length{\thecnt@a}}% -\def\gasset@fangle#1{\edef\f@angle{#1}}% -\def\gasset@rdist#1{% +\define@key[]{gastex}{fangle}{\edef\f@angle{#1}}% +\define@key[]{gastex}{rdist}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\rep@dist{\thecnt@a}}% -\def\gasset@sxo#1{% +\define@key[]{gastex}{sxo}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\E@sxo{\thecnt@a}}% -\def\gasset@syo#1{% +\define@key[]{gastex}{syo}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\E@syo{\thecnt@a}}% -\def\gasset@exo#1{% +\define@key[]{gastex}{exo}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\E@exo{\thecnt@a}}% -\def\gasset@eyo#1{% +\define@key[]{gastex}{eyo}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\E@eyo{\thecnt@a}}% -\def\gasset@curvedepth#1{% +\define@key[]{gastex}{curvedepth}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\curve@depth{\thecnt@a}}% -\def\gasset@loopdiam#1{% +\define@key[]{gastex}{loopwidth}{% + \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} + \edef\loop@width{\thecnt@a}}% +\define@key[]{gastex}{loopheight}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} - \edef\loop@diam{\thecnt@a}}% -\def\gasset@loopangle#1{\edef\loop@angle{#1}}% + \edef\loop@height{\thecnt@a}}% +\define@key[]{gastex}{loopdiam}{% + \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} + \edef\loop@width{\thecnt@a}% + \edef\loop@height{\thecnt@a}}% +\define@key[]{gastex}{loopangle}{\edef\loop@angle{#1}}% \newif\if@loopCW -\def\gasset@loopCW#1{% +\define@key[]{gastex}{loopCW}{% \@ifundefined{flag@#1} {\PackageWarning{gastex}{loopCW value should be y or n}{}} {\if#1y \@loopCWtrue \else \@loopCWfalse \fi}} -\def\gasset@AHnb#1{\edef\AH@nb{#1\space}}% -\def\gasset@AHdist#1{% +\define@key[]{gastex}{AHnb}{\edef\AH@nb{#1\space}}% +\define@key[]{gastex}{AHdist}{% \dim@x=#1\unitlength \edef\AH@d{\strip@PT\dim@x}}% -\def\gasset@AHangle#1{\edef\AH@angle{#1\space}}% -\def\gasset@AHLength#1{% +\define@key[]{gastex}{AHangle}{\edef\AH@angle{#1\space}}% +\define@key[]{gastex}{AHLength}{% \dim@x=#1\unitlength \edef\AH@L{\strip@PT\dim@x}}% -\def\gasset@AHlength#1{% +\define@key[]{gastex}{AHlength}{% \dim@x=#1\unitlength \edef\AH@l{\strip@PT\dim@x}}% -\def\gasset@ATnb#1{\edef\AT@nb{#1\space}}% -\def\gasset@ATdist#1{% +\define@key[]{gastex}{ATnb}{\edef\AT@nb{#1\space}}% +\define@key[]{gastex}{ATdist}{% \dim@x=#1\unitlength \edef\AT@d{\strip@PT\dim@x}}% -\def\gasset@ATangle#1{\edef\AT@angle{#1\space}}% -\def\gasset@ATLength#1{% +\define@key[]{gastex}{ATangle}{\edef\AT@angle{#1\space}}% +\define@key[]{gastex}{ATLength}{% \dim@x=#1\unitlength \edef\AT@L{\strip@PT\dim@x}}% -\def\gasset@ATlength#1{% +\define@key[]{gastex}{ATlength}{% \dim@x=#1\unitlength \edef\AT@l{\strip@PT\dim@x}}% \def\ELside@l{\relax}\def\ELside@r{\relax} -\def\gasset@ELside#1{% +\define@key[]{gastex}{ELside}{% \@ifundefined{ELside@#1} {\PackageWarning{gastex}{ELside value should be l or r}{}} {\edef\EL@s{#1}}}% -\def\gasset@ELpos#1{ +\define@key[]{gastex}{ELpos}{ \ifnum#1>100 \PackageWarning{gastex}{ELpos value should be between 0 and 100}{} \else\ifnum#1<0 \PackageWarning{gastex}{ELpos value should be between 0 and 100}{} \else\edef\EL@p{#1}\fi\fi}% -\def\gasset@ELdist#1{% +\define@key[]{gastex}{ELdist}{% \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} \edef\EL@dist{\thecnt@a}}% \newif\if@ELdistC -\def\gasset@ELdistC#1{% +\define@key[]{gastex}{ELdistC}{% \@ifundefined{flag@#1} {\PackageWarning{gastex}{ELdistC value should be y or n}{}} {\if#1y \@ELdistCtrue \else \@ELdistCfalse \fi}} @@ -520,8 +615,8 @@ \def\gas@recode#1,{\edef\gas@tmp@col{\gas@tmp@col #1 }% \@ifnextchar&{\gas@gobble}{\gas@recode}} -\def\gasset@linegray#1{\edef\line@color{#1 setgray\space}}% -\def\gasset@linecolor#1{\@ifundefined{extractcolorspec}% +\define@key[]{gastex}{linegray}{\edef\line@color{#1 setgray\space}}% +\define@key[]{gastex}{linecolor}{\@ifundefined{extractcolorspec}% {\@ifundefined{\string\color @#1} {\PackageWarning{gastex}{Color #1 undefined}{}} {\edef\line@color{#1\space}}}% @@ -529,8 +624,8 @@ \expandafter\gas@color\gas@tmp@color% \edef\line@color{\gas@tmp@col\space}}}% -\def\gasset@fillgray#1{\@filltrue\edef\fill@color{#1 setgray\space}}% -\def\gasset@fillcolor#1{\@ifundefined{extractcolorspec}% +\define@key[]{gastex}{fillgray}{\@filltrue\edef\fill@color{#1 setgray\space}}% +\define@key[]{gastex}{fillcolor}{\@ifundefined{extractcolorspec}% {\@ifundefined{\string\color @#1} {\PackageWarning{gastex}{Color #1 undefined}{}} {\@filltrue\edef\fill@color{#1\space}}}% @@ -538,9 +633,9 @@ \expandafter\gas@color\gas@tmp@color% \@filltrue\edef\fill@color{\gas@tmp@col\space}}}% -\def\gasset@linewidth#1{% +\define@key[]{gastex}{linewidth}{% \dim@x=#1\unitlength \edef\line@width{\strip@PT\dim@x}}% -\def\gasset@dash#1{\gasset@@dash #1}% +\define@key[]{gastex}{dash}{\gasset@@dash #1}% \def\gasset@@dash#1#2{% \def\gas@dash{[}% \gas@convert 0 #1 & @@ -551,15 +646,23 @@ \ifdim\dim@x=0pt\else\edef\gas@dash{\gas@dash\strip@PT\dim@x}\fi% \@ifnextchar&{\gas@gobble}{\gas@convert}} -\def\gasset@arcradius#1{% +\define@key[]{gastex}{arcradius}{% \dim@x=#1\unitlength \edef\arc@radius{\strip@PT\dim@x}}% -\def\gasset@polyangle#1{\edef\poly@angle{#1}}% +\define@key[]{gastex}{polyangle}{\edef\poly@angle{#1}}% + +\define@key[]{gastex}{snakew}{% + \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} + \edef\snake@w{\thecnt@a}}% + +\define@key[]{gastex}{snakeh}{% + \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} + \edef\snake@h{\thecnt@a}}% %----------------------------------------------------------------------- % Default settings \unitlength=1mm \gasset{Nw=8,Nh=8,Nmr=4} % circle -\gasset{Nframe=y} +\gasset{Nframe=y,arcPie=n} \gasset{fillgray=0,Nfill=n} % Not filled but black if filled \gasset{ExtNL=n,NLangle=90,NLdist=0} \gasset{iangle=180,ilength=5} @@ -577,6 +680,7 @@ \gasset{linegray=0} % black lines \gasset{linewidth=0.14,dash={}0} % continuous path \gasset{arcradius=0,polyangle=0} % sharp angles +\gasset{snakew=2,snakeh=1} % width and height of snake waves % Settings for slides \ifgastexslide @@ -585,6 +689,84 @@ \gasset{ATdist=2.1,ATLength=2.25,ATlength=2.1} \fi +%%%%%%%%%%% NEW FOR MD5 %%%%%%%%%%%%%%%%%%%%%%%%%%% +\newif\if@picthavechanged\@picthavechangedfalse +\def\g@cstocheckmdfive#1{\expandafter\def\csname cs@#1\endcsname{\relax}}% +\def\g@check@mdfive#1#2{% #1 is the pict number, #2 is the new md5 + \@ifundefined{g@oldmdfive@#1}{\global\@picthavechangedtrue% + \immediate\write 2 {!pict #1 has changed!}}{% +% This is my way of testing whether the old and new md5 are equal + \g@cstocheckmdfive{\csname g@oldmdfive@#1\endcsname}% + \@ifundefined{cs@#2}{\global\@picthavechangedtrue% + \immediate\write 2 {!pict #1 has changed!}}{}}% +} +\def\g@mdfivemsg{\if@picthavechanged% + \PackageWarning{gastex}{Pictures have changed. Compile once more}% + \fi} +\ifgastex@mdfive + \AtBeginDocument{\immediate\openout2 = "\g@hashfilename"}% + \AtEndDocument{\immediate\closeout2 \g@mdfivemsg}% +\fi +%%%%%%%%%%% NEW FOR AUTO-PST-PDF %%%%%%%%%%%%%%%%%%%%%%%%%%% +\newcounter{g@cnt@pict}\setcounter{g@cnt@pict}{0}% +\define@cmdkeys[]{gastex}{name} +\define@boolkey[]{gastex}{frame}[true]{\ifgastex@pdflatex\setkeys*{Gin}{frame=#1}\fi} +% +\long\def\g@normalpicture(#1)(#2)#3&g@stex&{% + \begin{picture}(#1)(#2)\nullfont% + \ifgastex@frame\put(#2){{\unitlength=1mm\gasset{linewidth=0.05}}\drawrect[Nfill=n](0,0,#1)}\fi + #3 + \end{picture}}% +% +\long\def\g@pdfpicture(#1,#2)(#3,#4)#5&g@stex&{{% + \begin{postscript}\special{header=gastex.pro}% + \begin{picture}(#1,#2)(#3,#4)\nullfont% + #5 + \end{picture}% + \end{postscript}% +}}% +% +\long\def\g@picture#1{\@ifnextchar({\g@@picture}{\g@@picture(10,10)}#1&g@stex&}% +% +\long\def\g@@picture(#1)#2&g@stex&{% + \ifgastex@pdflatex% + \@ifnextchar({\g@pdfpicture(#1)}{\g@pdfpicture(#1)(0,0)}#2&g@stex&% + \else% + \@ifnextchar({\g@normalpicture(#1)}{\g@normalpicture(#1)(0,0)}#2&g@stex&% + \fi% +}% +% +\NewEnviron{gpicture}[1][]{{% + \gasset{#1}% +% \let\g@opt@Gin=\XKV@rm% + \setrmkeys*{Gin}% + \expandafter\g@picture\expandafter{\BODY}% + \refstepcounter{g@cnt@pict}% + \ifgastex@mdfive% + \xdef\g@lastmdfive{\pdfmdfivesum{\meaning\BODY}}% + \gsavepicture{\g@lastmdfive}% + \immediate\write 2 {:md5 of pict:\theg@cnt@pict:\g@lastmdfive:}% + \g@check@mdfive{\theg@cnt@pict}{\g@lastmdfive}% + \fi% + \@ifundefined{cmdgastex@name}{}{\gsavepicture{\cmdgastex@name}}% +% \ifGin@ignore\else\gusepicture[\g@opt@Gin]{\g@lastmdfive}\fi% +}} % [\gusepicture[\g@opt@Gin]{\g@lastmdfive}\ignorespacesafterend] +% +% I define alternate versions of \savepicture and \usepicture since the ones +% from pst-pdf do not work properly (at least not as I expect). +\def\gsavepicture#1{\expandafter\xdef\csname ppf@@@#1\endcsname{\theg@cnt@pict}}% +% +\newcommand\gusepicture[2][]{% + \ifgastex@pdflatex% + \@ifundefined{ppf@@@#2}{\usepicture[#1]{#2}}{% + \usepicture[#1]{\csname ppf@@@#2\endcsname}}% + \else% + \PackageWarning{gastex}{gusepicture is not available when pdflatex option of gastex.sty is not set (to true)}\relax% + \fi} +% \tracingonline=1 +% \tracingmacros=1 +% \tracingcommands=1 + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Nodes %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -607,7 +789,7 @@ % and the parameters Nframe=n,Nfill=n \def\rpnode#1(#2)(#3)(#4)#5{{% \@ifnextchar[{\process@rpnodeopt}{\rp@node}#1(#2)(#3)(#4){#5}}} -\def\process@rpnodeopt[#1]{\gas@set#1,&\rp@node}% +\def\process@rpnodeopt[#1]{\gasset{#1}\rp@node}% \def\rp@node(#1)(#2,#3)(#4,#5)#6{{% % The value -1 assigned to node@#1@w characterizes polygonal nodes \global\expandafter\edef\csname node@#1@w\endcsname{-1}% @@ -658,7 +840,7 @@ % and the parameters Nframe=n,Nfill=n \def\node#1(#2)(#3,#4)#5{{% \@ifnextchar[{\process@nodeopt}{\i@node}#1(#2)(#3,#4){#5}}} -\def\process@nodeopt[#1]{\gas@set#1,&\i@node}% +\def\process@nodeopt[#1]{\gasset{#1}\i@node}% \def\i@node(#1)(#2,#3)#4{% \let@node(#1)(#2,#3){#4}\draw@node(#1){#4}} @@ -744,7 +926,7 @@ % [parameter=value,...] \def\imark#1(#2){{% \@ifnextchar[{\process@imarkopt}{\i@mark}#1(#2)}} -\def\process@imarkopt[#1]{\gas@set#1,&\i@mark}% +\def\process@imarkopt[#1]{\gasset{#1}\i@mark}% \def\i@mark(#1){{% \dim@x=\csname node@#1@x\endcsname\d@my@unit \edef\ps@par{\strip@PT\dim@x}% \dim@x=\csname node@#1@y\endcsname\d@my@unit \edef\ps@par{\ps@par \strip@PT\dim@x}% @@ -770,7 +952,7 @@ % [parameter=value,...] \def\fmark#1(#2){{% \@ifnextchar[{\process@fmarkopt}{\f@mark}#1(#2)}} -\def\process@fmarkopt[#1]{\gas@set#1,&\f@mark}% +\def\process@fmarkopt[#1]{\gasset{#1}\f@mark}% \def\f@mark(#1){{% \dim@x=\csname node@#1@x\endcsname\d@my@unit \edef\ps@par{\strip@PT\dim@x}% \dim@x=\csname node@#1@y\endcsname\d@my@unit \edef\ps@par{\ps@par \strip@PT\dim@x}% @@ -796,7 +978,7 @@ % [parameter=value,...] \def\rmark#1(#2){{% \@ifnextchar[{\process@rmarkopt}{\r@mark}#1(#2)}} -\def\process@rmarkopt[#1]{\gas@set#1,&\r@mark}% +\def\process@rmarkopt[#1]{\gasset{#1}\r@mark}% \def\r@mark(#1){{% \ifnum\csname node@#1@w\endcsname=-1 % then it's a polygonal node \dim@x=\csname node@#1@x\endcsname\d@my@unit @@ -847,7 +1029,7 @@ \newif\if@cosneg \newif\if@sinneg \def\nodelabel#1(#2)#3{{% \@ifnextchar[{\process@nodelabelopt}{\node@label}#1(#2){#3}}} -\def\process@nodelabelopt[#1]{\gas@set#1,&\node@label}% +\def\process@nodelabelopt[#1]{\gasset{#1}\node@label}% \def\node@label(#1)#2{{% \unitlength=\d@my@unit \edef\cs@x{\csname node@#1@x\endcsname}% @@ -950,7 +1132,7 @@ % [parameter=value,...] \def\drawedge#1(#2)#3{{% \@ifnextchar[{\process@edgeopt}{\draw@edge}#1(#2){#3}}} -\def\process@edgeopt[#1]{\gas@set#1,&\draw@edge}% +\def\process@edgeopt[#1]{\gasset{#1}\draw@edge}% \def\draw@edge(#1,#2)#3{% % Control points of the cubic Bezier curve \setcounter{cnt@a}{\csname node@#1@x\endcsname + \E@sxo}% @@ -998,7 +1180,7 @@ % [parameter=value,...] \def\drawqbedge#1(#2)#3{{% \@ifnextchar[{\process@qbedgeopt}{\draw@qbedge}#1(#2){#3}}} -\def\process@qbedgeopt[#1]{\gas@set#1,&\draw@qbedge}% +\def\process@qbedgeopt[#1]{\gasset{#1}\draw@qbedge}% \def\draw@qbedge(#1,#2,#3,#4)#5{% % Control points of the cubic Bezier curve \setcounter{cnt@a}{\csname node@#1@x\endcsname + \E@sxo}% @@ -1038,7 +1220,7 @@ % [parameter=value,...] \def\drawqbpedge#1(#2)#3{{% \@ifnextchar[{\process@qbpedgeopt}{\draw@qbpedge}#1(#2){#3}}} -\def\process@qbpedgeopt[#1]{\gas@set#1,&\draw@qbpedge}% +\def\process@qbpedgeopt[#1]{\gasset{#1}\draw@qbpedge}% \def\draw@qbpedge(#1,#2,#3,#4)#5{% % Control points of the cubic Bezier curve \setcounter{cnt@a}{\csname node@#1@x\endcsname + \E@sxo}% @@ -1095,7 +1277,7 @@ % [parameter=value,...] \def\drawbpedge#1(#2)#3{{% \@ifnextchar[{\process@bpedgeopt}{\draw@bpedge}#1(#2){#3}}} -\def\process@bpedgeopt[#1]{\gas@set#1,&\draw@bpedge}% +\def\process@bpedgeopt[#1]{\gasset{#1}\draw@bpedge}% \def\draw@bpedge(#1,#2,#3,#4,#5,#6)#7{% % Control points of the cubic Bezier curve \setcounter{cnt@a}{\csname node@#1@x\endcsname + \E@sxo}% @@ -1146,7 +1328,7 @@ % [parameter=value,...] \def\drawbcedge#1(#2)#3{{% \@ifnextchar[{\process@bcedgeopt}{\draw@bcedge}#1(#2){#3}}} -\def\process@bcedgeopt[#1]{\gas@set#1,&\draw@bcedge}% +\def\process@bcedgeopt[#1]{\gasset{#1}\draw@bcedge}% \def\draw@bcedge(#1,#2,#3,#4,#5,#6)#7{% % Control points of the cubic Bezier curve \setcounter{cnt@a}{\csname node@#1@x\endcsname + \E@sxo}% @@ -1183,7 +1365,7 @@ % [parameter=value,...] \def\drawloop#1(#2)#3{{% \@ifnextchar[{\process@loopopt}{\draw@loop}#1(#2){#3}}} -\def\process@loopopt[#1]{\gas@set#1,&\draw@loop}% +\def\process@loopopt[#1]{\gasset{#1}\draw@loop}% \def\draw@loop(#1)#2{% % Control points of the cubic Bezier curve \unitlength=\d@my@unit @@ -1194,8 +1376,8 @@ \edef\cs@xd{\cs@xa}% \edef\cs@yd{\cs@ya}% \node@diam(#1,\loop@angle) - \setcounter{cnt@a}{2*(\cs@nd+2*\loop@diam)/3} - \setcounter{cnt@b}{\loop@diam*1732/1000} % approx of sqrt(3) + \setcounter{cnt@a}{2*(\cs@nd+2*\loop@height)/3} + \setcounter{cnt@b}{\loop@width*1732/1000} % approx of sqrt(3) % Rotation \setcounter{cnt@c} {\cs@xa+\thecnt@a*\real{\cs@cos}-\thecnt@b*\real{\cs@sin}} @@ -1247,7 +1429,7 @@ \def\drawline#1(#2){\begingroup% \setcounter{cnt@a}{0} \edef\ps@param{}% \@ifnextchar[{\process@drawlineopt}{\draw@line}#1(#2)} -\def\process@drawlineopt[#1]{\gas@set#1,&\draw@line}% +\def\process@drawlineopt[#1]{\gasset{#1}\draw@line}% \def\draw@line(#1,#2){% \setcounter{cnt@a}{\thecnt@a+1} \dim@x=#1\unitlength \edef\ps@param{\ps@param \strip@PT\dim@x}% @@ -1256,12 +1438,122 @@ \put(0,0){\special{" \gas@initps \line@color \gas@ATparam \gas@AHparam \ps@param \thecnt@a\space \arc@radius !pslines}} \endgroup + } +} + +%----------------------------------------------------------------------- +% Draw a line with snake waves between two points. +% width and height of the waves are controlled by parameters snakeh and snakeh +% The line may have arrowhead(s), arrowtail(s), color, ... +% depending of the current settings +% +% \drawsnake(x1,y1)(x2,y2) +% \drawsnake[parameter=value,...](x1,y1)(x2,y2) +% +% Required arguments in \unitlengh: +% (x1,y1)(x2,y2) : coordinates of the points. +% Optional argument: +% [parameter=value,...] +\def\drawsnake#1(#2)(#3){{% + \@ifnextchar[{\process@drawsnakeopt}{\draw@snake}#1(#2)(#3)}} +\def\process@drawsnakeopt[#1]{\gasset{#1}\draw@snake}% +\def\draw@snake(#1,#2)(#3,#4){% + \setcounter{cnt@a}{1*\ratio{#1\unitlength}{\d@my@unit}} % x1 + \edef\snake@x{\thecnt@a} + \setcounter{cnt@a}{1*\ratio{#2\unitlength}{\d@my@unit}} % x1 + \edef\snake@y{\thecnt@a} + \setcounter{cnt@a}{1*\ratio{#3\unitlength}{\d@my@unit}} % x1 + \edef\snake@X{\thecnt@a} + \setcounter{cnt@a}{1*\ratio{#4\unitlength}{\d@my@unit}} % x1 + \edef\snake@Y{\thecnt@a} + % + \edef\ps@param{} + \dim@x=\snake@x\d@my@unit \edef\ps@param{\ps@param \strip@PT\dim@x}% + \dim@x=\snake@y\d@my@unit \edef\ps@param{\ps@param \strip@PT\dim@x}% + % + \setcounter{cnt@a}{\snake@X-\snake@x} + \edef\snake@A{\thecnt@a} + \setcounter{cnt@a}{\snake@Y-\snake@y} + \edef\snake@B{\thecnt@a} + \setcounter{cnt@a}{\snake@A*\snake@A+\snake@B*\snake@B} + \gas@sqrt{\thecnt@a} + \edef\snake@L{\the@sqrt} + % + \setcounter{cnt@@a}{\snake@w/2} + \setcounter{cnt@a}{\snake@x+\snake@A*\thecnt@@a/\snake@L} + \setcounter{cnt@b}{\snake@y+\snake@B*\thecnt@@a/\snake@L} + \dim@x=\thecnt@a\d@my@unit \edef\ps@param{\ps@param \strip@PT\dim@x}% + \dim@x=\thecnt@b\d@my@unit \edef\ps@param{\ps@param \strip@PT\dim@x}% + \setcounter{cnt@@a}{\thecnt@@a+3*\snake@w/4} + \setcounter{cnt@@c}{1} + % + \setcounter{cnt@c}{(\snake@L-5*\snake@w/2)/\snake@w} % nb iteration + \@whilenum\thecnt@c>0\do{% + \setcounter{cnt@@b}{\thecnt@@c*\snake@h} + \setcounter{cnt@a}{\snake@x+(\snake@A*\thecnt@@a-\snake@B*\thecnt@@b)/\snake@L} + \setcounter{cnt@b}{\snake@y+(\snake@B*\thecnt@@a+\snake@A*\thecnt@@b)/\snake@L} + \dim@x=\thecnt@a\d@my@unit \edef\ps@param{\ps@param \strip@PT\dim@x}% + \dim@x=\thecnt@b\d@my@unit \edef\ps@param{\ps@param \strip@PT\dim@x}% + \setcounter{cnt@@a}{\thecnt@@a+\snake@w} + \setcounter{cnt@@c}{-\thecnt@@c} + \setcounter{cnt@c}{\thecnt@c-1} + } + \setcounter{cnt@@a}{\thecnt@@a-\snake@w/4} + \setcounter{cnt@a}{\snake@x+\snake@A*\thecnt@@a/\snake@L} + \setcounter{cnt@b}{\snake@y+\snake@B*\thecnt@@a/\snake@L} + \dim@x=\thecnt@a\d@my@unit \edef\ps@param{\ps@param \strip@PT\dim@x}% + \dim@x=\thecnt@b\d@my@unit \edef\ps@param{\ps@param \strip@PT\dim@x}% + \dim@x=\snake@X\d@my@unit \edef\ps@param{\ps@param \strip@PT\dim@x}% + \dim@x=\snake@Y\d@my@unit \edef\ps@param{\ps@param \strip@PT\dim@x}% + % + \setcounter{cnt@c}{4+(\snake@L-5*\snake@w/2)/\snake@w} % nb iteration + \put(0,0){\special{" \gas@initps \line@color + \gas@ATparam \gas@AHparam + \ps@param \thecnt@c\space !pscurve}} +} + +%----------------------------------------------------------------------- +% Draw an arc of a circle. +% +% \drawarc(x,y,r,a,b) +% \drawarc[parameter=value,...](x,y,r,a,b) +% +% Required arguments: +% x,y : coordinates of the circle center (in \unitlengh). +% r : radius of the circle (in \unitlengh). +% a : starting angle of the arc (in degree) +% b : ending angle of the arc (in degree) +% Optional argument: +% [parameter=value,...] +\def\drawarc#1(#2){{% + \@ifnextchar[{\process@arcopt}{\draw@arc}#1(#2)}} +\def\process@arcopt[#1]{\gasset{#1}\draw@arc}% +\def\draw@arc(#1,#2,#3,#4,#5){{% + \dim@x=#1\unitlength \edef\ps@x{\strip@PT\dim@x}% + \dim@x=#2\unitlength \edef\ps@y{\strip@PT\dim@x}% + \dim@x=#3\unitlength \edef\ps@r{\strip@PT\dim@x}% + \put(0,0){\special{" \gas@initps + \if@fill \fill@color + newpath + \if@arcPie \ps@x \ps@y moveto \fi + \ps@x \ps@y \ps@r #4 #5 arc + \if@arcPie closepath \fi + fill + \fi + \if@frame \line@color + newpath + \if@arcPie \ps@x \ps@y moveto \fi + \ps@x \ps@y \ps@r #4 #5 arc + \if@arcPie closepath \fi + stroke + \fi }} +}} %----------------------------------------------------------------------- % Draw a circle. % -% \drawcircle(x,y,r) +% \drawcircle(x,y,d) % \drawcircle[parameter=value,...](x,y,d) % % Required arguments in \unitlengh: @@ -1271,7 +1563,7 @@ % [parameter=value,...] \def\drawcircle#1(#2){{% \@ifnextchar[{\process@circleopt}{\draw@circle}#1(#2)}} -\def\process@circleopt[#1]{\gas@set#1,&\draw@circle}% +\def\process@circleopt[#1]{\gasset{#1}\draw@circle}% \def\draw@circle(#1,#2,#3){{% \dim@x=#1\unitlength \edef\ps@x{\strip@PT\dim@x}% \dim@x=#2\unitlength \edef\ps@y{\strip@PT\dim@x}% @@ -1301,7 +1593,7 @@ % [parameter=value,...] \def\drawrect#1(#2){{% \@ifnextchar[{\process@rectopt}{\draw@rect}#1(#2)}} -\def\process@rectopt[#1]{\gas@set#1,&\draw@rect}% +\def\process@rectopt[#1]{\gasset{#1}\draw@rect}% \def\draw@rect(#1,#2,#3,#4){{% \dim@x=#1\unitlength \edef\ps@x{\strip@PT\dim@x}% \dim@x=#2\unitlength \edef\ps@y{\strip@PT\dim@x}% @@ -1333,7 +1625,7 @@ % [parameter=value,...] \def\drawoval#1(#2){{% \@ifnextchar[{\process@ovalopt}{\draw@oval}#1(#2)}} -\def\process@ovalopt[#1]{\gas@set#1,&\draw@oval}% +\def\process@ovalopt[#1]{\gasset{#1}\draw@oval}% \def\draw@oval(#1,#2,#3,#4,#5){{% \dim@x=#1\unitlength \edef\ps@path{\strip@PT\dim@x}% \dim@x=#2\unitlength \edef\ps@path{\ps@path \strip@PT\dim@x}% @@ -1365,7 +1657,7 @@ \def\drawpolygon#1(#2){\begingroup% \setcounter{cnt@a}{0} \edef\ps@param{}% \@ifnextchar[{\process@polygonopt}{\draw@polygon}#1(#2)} -\def\process@polygonopt[#1]{\gas@set#1,&\draw@polygon}% +\def\process@polygonopt[#1]{\gasset{#1}\draw@polygon}% \def\draw@polygon(#1,#2){% \setcounter{cnt@a}{\thecnt@a+1} \dim@x=#1\unitlength \edef\ps@param{\ps@param \strip@PT\dim@x}% @@ -1399,7 +1691,7 @@ % [parameter=value,...] \def\drawrpolygon#1(#2)(#3){\begingroup% \@ifnextchar[{\process@rpolygonopt}{\draw@rpolygon}#1(#2)(#3)} -\def\process@rpolygonopt[#1]{\gas@set#1,&\draw@rpolygon}% +\def\process@rpolygonopt[#1]{\gasset{#1}\draw@rpolygon}% \def\draw@rpolygon(#1,#2)(#3,#4){% \dim@x=#1\unitlength \dim@y=#2\unitlength \edef\ps@path{\strip@PT\dim@x \strip@PT\dim@y #3\space}% @@ -1434,7 +1726,7 @@ \def\drawccurve#1(#2){\begingroup% \setcounter{cnt@a}{0} \edef\ps@param{}% \@ifnextchar[{\process@drawccurveopt}{\draw@c@curve}#1(#2)} -\def\process@drawccurveopt[#1]{\gas@set#1,&\draw@c@curve}% +\def\process@drawccurveopt[#1]{\gasset{#1}\draw@c@curve}% \def\draw@c@curve(#1,#2){% \setcounter{cnt@a}{\thecnt@a+1} \dim@x=#1\unitlength \edef\ps@param{\ps@param \strip@PT\dim@x}% @@ -1470,7 +1762,7 @@ \def\drawcurve#1(#2){\begingroup% \setcounter{cnt@a}{0} \edef\ps@param{}% \@ifnextchar[{\process@drawcurveopt}{\draw@curve}#1(#2)} -\def\process@drawcurveopt[#1]{\gas@set#1,&\draw@curve}% +\def\process@drawcurveopt[#1]{\gasset{#1}\draw@curve}% \def\draw@curve(#1,#2){% \setcounter{cnt@a}{\thecnt@a+1} \dim@x=#1\unitlength \edef\ps@param{\ps@param \strip@PT\dim@x}% @@ -1495,7 +1787,7 @@ % [parameter=value,...] \def\drawqbezier#1(#2){{% \@ifnextchar[{\process@drawqbezieropt}{\draw@q@bezier}#1(#2)}} -\def\process@drawqbezieropt[#1]{\gas@set#1,&\draw@q@bezier}% +\def\process@drawqbezieropt[#1]{\gasset{#1}\draw@q@bezier}% \def\draw@q@bezier(#1,#2,#3,#4,#5,#6){{% \dim@x=#1\unitlength \edef\ps@xa{\strip@PT\dim@x}% \dim@x=#2\unitlength \edef\ps@ya{\strip@PT\dim@x}% @@ -1521,7 +1813,7 @@ % [parameter=value,...] \def\drawcbezier#1(#2){{% \@ifnextchar[{\process@drawcbezieropt}{\draw@c@bezier}#1(#2)}} -\def\process@drawcbezieropt[#1]{\gas@set#1,&\draw@c@bezier}% +\def\process@drawcbezieropt[#1]{\gasset{#1}\draw@c@bezier}% \def\draw@c@bezier(#1,#2,#3,#4,#5,#6,#7,#8){{% \dim@x=#1\unitlength \edef\ps@xa{\strip@PT\dim@x}% \dim@x=#2\unitlength \edef\ps@ya{\strip@PT\dim@x}% @@ -1727,7 +2019,7 @@ \def\AH@l{\strip@PT\@wholewidth 9 mul 20 cos mul } \def\line@width{\strip@PT\@wholewidth} % - \def\setstatediam##1{\gasset@Nw{##1}\gasset@Nh{##1}\gasset@Nmr{##1}} + \def\setstatediam##1{\gasset{Nw=##1,Nh=##1,Nmr=##1}} \def\setvertexdiam{\setstatediam} \setstatediam{6} % @@ -1736,11 +2028,11 @@ \edef\repeated@diam{\thecnt@a}}% \setrepeatedstatediam{5} % - \def\setloopdiam{\gasset@loopdiam}% + \def\setloopdiam##1{\gasset{loopdiam=##1}}% \setloopdiam{6} % - \def\settranslabelskip{\gasset@ELdist}% - \def\setedgelabelskip{\gasset@ELdist} + \def\settranslabelskip##1{\gasset{ELdist=##1}}% + \def\setedgelabelskip##1{\gasset{ELdist=##1}} \settranslabelskip{1} % \def\setprofcurve##1{% @@ -1769,7 +2061,7 @@ \def\pcolor{} \def\pictcolor##1##2{} % - \def\setpsgray##1{\gasset@linegray{##1}\gasset@fillgray{##1}}% + \def\setpsgray##1{\gasset{linegray=##1,fillgray=##1}}% \setpsgray{0} % black %----------------------------------------------------------------------- % States @@ -1901,7 +2193,7 @@ \def\pcolor{} \def\pictcolor##1##2{} % - \def\setpsgray##1{\gasset@linegray{##1}\gasset@fillgray{##1}}% + \def\setpsgray##1{\gasset{linegray=##1,fillgray=##1}}% \setpsgray{0} % black % % Redefinition of latex \line(a,b){L}. -- cgit v1.2.3