\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.1}
\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}.
Solutions to known problems can be found in this page.  In particular, some problems which
started with TeXLive 2021 and related to the use of the document class
\textsf{lipics-v2021}, or the package \textsf{todonotes}, or the library \textsf{shadows} of
\textsf{tikz}, and possibly other contexts.


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}[htb]
  \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}

