%\RequirePackage{pdftricks}% erfordert -shell-escape tut aber nicht bei mir
%
% bei Veröffentlichung in
% --> http://tug.org/applications/PSTricks/
% bekanntgeben
%
%\begin{psinputs}
\RequirePackage{pstricks}
\RequirePackage{pst-tree}
\RequirePackage{pst-plot}
%\end{psinputs}
\RequirePackage{ifthen}
%
% Speicher für Positionierung der Busstops
\newcounter{haltestelle.x}%x-Koordinate der Haltestelle
\newcounter{haltestelle.y}%y-Koordinate der Haltestelle
% Koordinate ro/Position Bezeichnung
\newcounter{haltestelle.x2}%x-Koordinate der Haltestelle
\newcounter{haltestelle.y2}%y-Koordinate der Haltestelle
% Increment für busstops
\newcounter{haltestelle.px}%Increment x-Koordinate der Haltestelle
\newcounter{haltestelle.py}%Increment y-Koordinate der Haltestelle

%
% Verschiedene Grundstyles
% Style für Haltestellen
\newpsstyle{haltestellenstyle}{arrows=cc-cc,linewidth=3}%
% Style für eine Strecke
% !!arrow wird in \linie erneut auf *-* gesetzt!
\newpsstyle{streckenstyle}{linewidth=0.8,arrows=*-*,dotsize=0pt 2}
%
% Verschiedene Textausgaben
% Mit \renewcommand kann hier eine andere Formatierung erfolgen
\newcommand{\writeHaltestelle}[1]{#1}%Haltestelle ausgeben
\newcommand\writeLinie[1]{#1}%Linientext ausgeben

\newcommand{\@haltestelle}{}%leere Initialisierung
% Ausgabe einer Haltestelle, hier ist eine Fontanpassung möglich.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Eine Haltestelle
% \haltestelle[Winkel](x,y)(Breite,Höhe)[Pos]{Name}[Bezug in Name]{Kurz}
%
\newcommand{\haltestelle}[1][0]{
\global\def\haltestellewinkel{#1}
\haltestelleII}
%
% Haltestelle mit Koordinaten/Größe
\def\haltestelleII(#1,#2)(#3,#4){
%   Setzen Positionen
    \setcounter{haltestelle.x}{#1}
    \setcounter{haltestelle.y}{#2}
    \setcounter{haltestelle.x2}{#1}\addtocounter{haltestelle.x2}{#3}
    \setcounter{haltestelle.y2}{#2}\addtocounter{haltestelle.y2}{#4}
    % Increment für X/Y setzen
    \ifnum #3 = 0
        \setcounter{haltestelle.px}{0}
    \else
        \ifnum #3 < 0
            \setcounter{haltestelle.px}{-1}
        \else
            \setcounter{haltestelle.px}{1}
        \fi
    \fi
    \ifnum #4 = 0
        \setcounter{haltestelle.py}{0}
    \else
        \ifnum #4 < 0
            \setcounter{haltestelle.py}{-1}
        \else
            \setcounter{haltestelle.py}{1}
        \fi
    \fi
    %
    \haltestelleIII
}

%
% Haltestelle: [Pos]Name
\newcommand{\@liniennext}{}
\newcommand{\haltestelleIII}[2][t]{
  \def\@tmp{#2}
  \ifx\@tmp\@empty%Wenn Name leer -> Stützpunkt
      \let\@liniennext\haltestelleV
      \renewcommand{\@haltestelle}{}
  \else
      \renewcommand{\@haltestelle}{#2}%Name zwischenspeichern für Ausgabe
      % Balken für Haltestelle
      \psline   [style=haltestellenstyle]%
                (\value{haltestelle.x},\value{haltestelle.y})
                (\value{haltestelle.x2},\value{haltestelle.y2})
      \def\@tmp{b}\def\@tmpII{#1}
      \ifx\@tmp\@tmpII%Haltestellenbeschriftung unten
          \setcounter{haltestelle.x2}{\value{haltestelle.x}}
          \setcounter{haltestelle.y2}{\value{haltestelle.y}}
          \addtocounter{haltestelle.x2}{-2}
          \addtocounter{haltestelle.y2}{-2}
      \fi
      \let\@liniennext\haltestelleIVa
  \fi
  \@liniennext
}
%
% Text ausgeben für Haltestelle
\newcommand{\haltestelleIVa}[1][lb]{
  %   Bezeichnung für Haltestelle ausgeben
     \rput[#1]{\haltestellewinkel}(\value{haltestelle.x2},\value{haltestelle.y2})
              {\writeHaltestelle{\@haltestelle}}
     \haltestelleV
}

\newcommand{\haltestelleV}[1]{
  % Parameter für \busstop setzen
  \renewcommand{\@haltestelle}{#1}%interner Name der Haltestelle merken
  %erste Haltestelle etwas einrücken, jeweils p-Faktor
  \addtocounter{haltestelle.x}{\value{haltestelle.px}}
  \addtocounter{haltestelle.y}{\value{haltestelle.py}}
 }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Eine Haltestelle/Bus Beziehung
\newcommand{\busstop}[2][xy]{%{kein x/y-Inkrement}{Liniennummer}
\rput(\value{haltestelle.x},\value{haltestelle.y}){\rnode{\@haltestelle-#2}{}}
\def\@tmp{#1}
\def\@tmpII{xy}
\ifx\@tmp\@tmpII
    \addtocounter{haltestelle.x}{\value{haltestelle.px}}
    \addtocounter{haltestelle.y}{\value{haltestelle.py}}
\else
    \def\@tmpII{x}
    \ifx\@tmp\@tmpII
        \addtocounter{haltestelle.x}{\value{haltestelle.px}}
    \else
        \def\@tmpII{y}
        \ifx\@tmp\@tmpII
            \addtocounter{haltestelle.y}{\value{haltestelle.py}}
        \fi
    \fi
\fi
}
%
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Diverse Bus- und Zugverbindungen
%\newcounter{@Bus}
%\newcommand{\Bus}[1]{
%    \setcounter{@Bus}{#1}
%    \edef\@@Bus{\Roman{@Bus}}
%    \csname Bus\@@Bus\endcsname
%    }

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definieren einer Farbe für eine Linie
\newcommand{\LinienRGBfarbe}[2]{
    \newrgbcolor{col#1}{#2}
%    \newhsbcolor{col#1}{#2}
    }
\newcommand{\LinienGrau}[2]{
    \newgray{col#1}{#2}
    }
% Ausgabe eines Textes im entsprechenden Format/Farbe
\newcommand{\LinienText}[1]{{\csname col#1\endcsname
    \writeLinie{#1}}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition einer Bus/Zuglinie
\newcommand{\Linie}[3]{%{Name}{Format}{Verbindungen}
%\step{
\bgroup
% Eine Streckenverbindung
    \newcommand*\strecke[3][*-*]{%[Typ]{von}{nach}
        \ncline{##1}{##2-#1}{##3-#1}
    }
    \psset{style=streckenstyle,linecolor=col#1}
    \def\@temp{#2}
    \ifx\@empty\@temp\else\psset{#2}\fi
    #3
\egroup
}% }

%
% Eine Folge von Haltestellen
\newcommand{\streckeNext}{}
\def\StreckeX{//Start//}
%
\newcommand{\Strecke}[2][*-*]{
\ifthenelse{
    \equal{#2}{Ende}
}{
    \let\streckeNext=\relax
    \def\StreckeX{//Start//}
}{
    \ifthenelse{\equal{\StreckeX}{//Start//}}{}{
        \strecke[#1]{\StreckeX}{#2}%Mache Verbindung
    }
    \let\streckeNext=\Strecke
    \def\StreckeX{#2}
}
\streckeNext
}
