From 027668ae0269a68a604395640ca7ebd51e554c4a Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Thu, 16 Jan 2020 22:01:23 +0000
Subject: tikz-trackschematic (16jan20)

git-svn-id: svn://tug.org/texlive/trunk@53426 c570f23f-e606-0410-a88d-b1316a301751
---
 ...kzlibrarytrackschematic.trafficcontrol.code.tex | 606 +++++++++++++++++++++
 1 file changed, 606 insertions(+)
 create mode 100644 Master/texmf-dist/tex/latex/tikz-trackschematic/tikzlibrarytrackschematic.trafficcontrol.code.tex

(limited to 'Master/texmf-dist/tex/latex/tikz-trackschematic/tikzlibrarytrackschematic.trafficcontrol.code.tex')

diff --git a/Master/texmf-dist/tex/latex/tikz-trackschematic/tikzlibrarytrackschematic.trafficcontrol.code.tex b/Master/texmf-dist/tex/latex/tikz-trackschematic/tikzlibrarytrackschematic.trafficcontrol.code.tex
new file mode 100644
index 00000000000..4d32c178aa6
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/tikz-trackschematic/tikzlibrarytrackschematic.trafficcontrol.code.tex
@@ -0,0 +1,606 @@
+%% symbol library for TikZ track schematics
+%
+% Copyright (c) 2018 - 2020, Martin Scheidt (ISC license)
+%
+% Permission to use, copy, modify, and/or distribute this file for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies.
+%
+\ProvidesFileRCS{tikzlibrarytrackschematic.trafficcontrol.code.tex}%
+%
+%%%%%%%%%%%%%%%
+% Requirements
+%%%%%%%%%%%%%%%
+\RequirePackage{tikz,etoolbox,lmodern}%
+\usetikzlibrary{calc}%
+%
+% https://tex.stackexchange.com/questions/56353/extract-x-y-coordinate-of-an-arbitrary-point-on-curve-in-tikz
+\providecommand{\gettikzxy}[3]{%
+  \tikz@scan@one@point\pgfutil@firstofone#1\relax%
+  \edef#2{\the\pgf@x}%
+  \edef#3{\the\pgf@y}%
+}%
+%
+%%%%%%%%%%%%%%%
+% tikz keys for multiple use
+%%%%%%%%%%%%%%%
+\pgfkeys{%
+  /tikz/trackschematic/.is family,%
+  /tikz/trackschematic/.cd,%
+  %% color \foreground
+  foreground/.store in=\foreground,%
+  foreground=black,% DEFAULT
+  /tikz/foreground/.forward to=/tikz/trackschematic/foreground,%
+  %% color \background
+  background/.store in=\background,%
+  background=white,% DEFAULT
+  /tikz/background/.forward to=/tikz/trackschematic/background,%
+  %% face
+  face/.value required,% forward OR backward
+  face/.store in=\face,% forward OR backward
+  /tikz/face/.forward to=/tikz/trackschematic/face,%
+  /tikz/forward/.code={\pgfkeys{/tikz/trackschematic/face=forward}},%
+  /tikz/backward/.code={\pgfkeys{/tikz/trackschematic/face=backward}},%
+  /tikz/bidirectional/.code={\pgfkeys{/tikz/trackschematic/face=bidirectional}},%
+  %% traffic practice
+  traffic practice/.value required,% left OR right
+  traffic practice/.store in=\trafficpractice,%
+  traffic practice=right,% DEFAULT
+  /tikz/traffic practice/.forward to=/tikz/trackschematic/traffic practice,%
+  /tikz/position/.forward to=/tikz/trackschematic/traffic practice,%
+  %% label
+  shift label/.store in=\labelcoord,% (coord)
+  shift label=(none),% DEFAULT
+  /tikz/shift label/.forward to=/tikz/trackschematic/shift label,%
+}%
+%
+\pgfkeys{%
+  /tikz/trackschematic/trafficcontrol/.is family,%
+  /tikz/trackschematic/trafficcontrol/.cd,%
+  %% type
+  type/.value required,% balise OR loop
+  type/.store in=\type,% balise OR loop
+  /tikz/type/.forward to=/tikz/trackschematic/trafficcontrol/type,%
+  %% block signal type
+  block type/.value forbidden,%
+  block type/.code={\settoggle{is_block_type}{true}},%
+  /tikz/block/.forward to=/tikz/trackschematic/trafficcontrol/block type,%
+  %% route signal type
+  route type/.value forbidden,%
+  route type/.code={\settoggle{is_route_type}{true}},%
+  /tikz/route/.forward to=/tikz/trackschematic/trafficcontrol/route type,%
+}%
+% options
+\newtoggle{is_block_type}\settoggle{is_block_type}{false}%
+\newtoggle{is_route_type}\settoggle{is_route_type}{false}%
+%%%%%%%%%%%%%%%
+% symbol signal
+%%%%%%%%%%%%%%%
+% command
+\newcommand\signal{}% just for safety
+\def\signal[#1]#2(#3)#4(#5){% \signal[options] at (coord) label (name);
+  \pic[#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+\newcommand\distantsignal{}% just for safety
+\def\distantsignal[#1]#2(#3)#4(#5){% \distantsignal[options] at (coord) label (name);
+  \pic[distant,#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+\newcommand\speedsign{}% just for safety
+\def\speedsign[#1]#2(#3)#4(#5){% \speedsign[options] at (coord) label (name);
+  \pic[speed type,#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+\newcommand\speedsignal{}% just for safety
+\def\speedsignal[#1]#2(#3)#4(#5){% \speedsignal[options] at (coord) label (name);
+  \pic[speed type,#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+\newcommand\speeddistantsignal{}% just for safety
+\def\speeddistantsignal[#1]#2(#3)#4(#5){% \speedsignal[options] at (coord) label (name);
+  \pic[speed type,distant,#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+\newcommand\blocksignal{}% just for safety
+\def\blocksignal[#1]#2(#3)#4(#5){% \blocksignal[options] at (coord) label (name);
+  \pic[block,#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+\newcommand\routesignal{}% just for safety
+\def\routesignal[#1]#2(#3)#4(#5){% \routesignal[options] at (coord) label (name);
+  \pic[route,#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+\newcommand\shuntsignal{}% just for safety
+\def\shuntsignal[#1]#2(#3)#4(#5){% \shuntsignal[options] at (coord) label (name);
+  \pic[shunting,#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+\newcommand\shuntlimit{}% just for safety
+\def\shuntlimit[#1]#2(#3)#4(#5){% \shuntlimit[options] at (coord) label (name);
+  \pic[shunt limit,#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+\newcommand\berthsignal{}% just for safety
+\def\berthsignal[#1]#2(#3)#4(#5){% \berthsignal[options] at (coord) label (name);
+  \pic[berth,#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+\newcommand\berthsign{}% just for safety
+\def\berthsign[#1]#2(#3)#4(#5){% \berthsign[options] at (coord) label (name);
+  \pic[berth,#1] at (#3) {signal={#2/#4/#5}}% symbol
+}%
+% tikz keys
+\pgfkeys{%
+  /tikz/trackschematic/trafficcontrol/signal/.is family,%
+  /tikz/trackschematic/trafficcontrol/signal/.cd,%
+  %% distant signal type
+  distant type/.value forbidden,%
+  distant type/.code={\settoggle{is_distant_type}{true}},%
+  /tikz/distant/.forward to=/tikz/trackschematic/trafficcontrol/signal/distant type,%
+  %% block signal type
+  speed type/.value forbidden,%
+  speed type/.code={\settoggle{is_speed_type}{true}},%
+  /tikz/speed type/.forward to=/tikz/trackschematic/trafficcontrol/signal/speed type,%
+  %% shunting signal type
+  shunting type/.value forbidden,%
+  shunting type/.code={\settoggle{is_shunting_type}{true}},%
+  /tikz/shunting/.forward to=/tikz/trackschematic/trafficcontrol/signal/shunting type,%
+  %% shunting signal type
+  shunt limit/.value forbidden,%
+  shunt limit/.code={\settoggle{is_shunt_limit}{true}},%
+  /tikz/shunt limit/.forward to=/tikz/trackschematic/trafficcontrol/signal/shunt limit,%
+  %% berth signal type
+  berth type/.value forbidden,%
+  berth type/.code={\settoggle{is_berth_type}{true}},%
+  /tikz/berth/.forward to=/tikz/trackschematic/trafficcontrol/signal/berth type,%
+  %% speed value
+  speed/.store in=\speed,% number
+  speed=,% number
+  /tikz/speed/.forward to=/tikz/trackschematic/trafficcontrol/signal/speed,%
+  %% speed value
+  distant speed/.store in=\distantspeed,% number
+  distant speed=,% number
+  /tikz/distant speed/.forward to=/tikz/trackschematic/trafficcontrol/signal/distant speed,%
+  %% locked signal
+  locked/.value forbidden,%
+  locked/.code={\settoggle{is_locked}{true}},%
+  /tikz/locked/.forward to=/tikz/trackschematic/trafficcontrol/signal/locked,%
+}%
+% options
+\newtoggle{is_distant_type}\settoggle{is_distant_type}{false}%
+\newtoggle{is_speed_type}\settoggle{is_speed_type}{false}%
+\newtoggle{is_shunting_type}\settoggle{is_shunting_type}{false}%
+\newtoggle{is_shunt_limit}\settoggle{is_shunt_limit}{false}%
+\newtoggle{is_berth_type}\settoggle{is_berth_type}{false}%
+\newtoggle{is_locked}\settoggle{is_locked}{false}%
+% symbol definition
+\tikzset{% generic symbol
+  pics/signal/.default=,%
+  pics/signal/.style args={#1/#2/#3}{code={%
+    %% settings
+    \def\coordcommand{#1}% beware of leading and tailing spaces!
+    \def\labelcommand{#2}% beware of leading and tailing spaces!
+    \def\labelcontent{#3}%
+    %
+    %% traffic practice setup
+    \ifdefstring{\trafficpractice}{left}{% branch
+      \pgfmathsetmacro{\trafficfactor}{-1}%
+    }{%
+      \ifdefstring{\trafficpractice}{right}{% branch
+        \pgfmathsetmacro{\trafficfactor}{1}%
+      }{% error message
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/trafficcontrol/traffic practice}{“left“ OR “right“ as key required}}%
+      }%
+    }% end \ifdefstring{\trafficpractice}
+    %% face setup
+    \ifdefstring{\face}{forward}{% face
+      \pgfmathsetmacro{\facefactor}{1}%
+      \def\align{left}%
+      \def\rotate{-90}%
+    }{%
+      \ifdefstring{\face}{backward}{% face
+        \pgfmathsetmacro{\facefactor}{-1}%
+        \def\align{right}%
+        \def\rotate{90}%
+      }{% error message
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/face}{“forward“ OR “backward“ as key required}}%
+      }%
+    }% end \ifdefstring{\face}
+    \tikzset{every path/.style={draw=\foreground,line width=1pt}};%
+    \tikzset{every node/.style={text=\foreground,inner sep=1pt}};%
+    %% signal pole
+    \path (0,0) -- ++($\trafficfactor*\facefactor*(0,-0.4)$) -- ++($\facefactor*(0.7,0)$);% signal pole
+    %
+    %% label
+    \ifdefstring{\labelcontent}{}{}{% label NOT empty
+      \coordinate (ts-s-l) at ($\trafficfactor*\facefactor*(0,-0.4)$);%
+      \ifdefstring{\labelcoord}{(none)}{}{% initialize if NOT default
+        \gettikzxy{\labelcoord}{\labelcoordX}{\labelcoordY}%
+        \coordinate (ts-s-l) at ($(ts-s-l)+(\labelcoordX,\labelcoordY)$);%
+      }%
+      \node[\align] at (ts-s-l) {\footnotesize \labelcontent};%
+    }%
+    \tikzset{every path/.style={draw=\foreground,line width=1pt,fill=\background},rounded corners=0.1pt};%
+    %% signal marker
+    \iftoggle{is_distant_type}{% marker for distant signal
+      \path ($\trafficfactor*\facefactor*(0,-0.4) + \facefactor*(0.35,0)$) --%
+          ++($\trafficfactor*\facefactor*(0,-0.2) + \facefactor*(0.35,0)$) --%
+          ++($\trafficfactor*\facefactor*(0, 0.4)$) -- cycle;% signal marker
+    %
+    }{}%
+    \iftoggle{is_speed_type}{% marker for speed signal
+      \path ($\trafficfactor*\facefactor*(0,-0.2) + \facefactor*(0.35,0)$) --%
+          ++($\trafficfactor*\facefactor*(0,-0.4)$) --%
+          ++($\trafficfactor*\facefactor*(0, 0.2) + \facefactor*(0.35,0)$) -- cycle;% signal marker
+      %
+    }{}%
+    \iftoggle{is_block_type}{% marker for block signal
+      \path ($\trafficfactor*\facefactor*(0,-0.6) + \facefactor*(0.7,0)$) rectangle%
+          ++($\trafficfactor*\facefactor*(0, 0.4) + \facefactor*(0.4,0)$);% signal marker
+      %
+    }{}%
+    \iftoggle{is_route_type}{% marker for route signal
+      \path ($\trafficfactor*\facefactor*(0,-0.4) + \facefactor*(0.9,0)$) circle (0.2);% signal marker
+      %
+    }{}%
+    \iftoggle{is_shunting_type}{% marker for shunting signal
+      \path ($\trafficfactor*\facefactor*(0,-0.3) + \facefactor*(0.6,0)$) circle (0.1);% signal marker
+      %
+    }{}%
+    \iftoggle{is_shunt_limit}{% marker for shunting signal
+      \tikzset{semicircle/.pic={\path (0,0) arc (180:0:0.1) -- cycle;};}%
+      \pgfmathsetmacro{\trafficfactorTEST}{-1}%
+      \ifdefequal{\trafficfactor}{\trafficfactorTEST}{%
+        \pgfmathsetmacro{\trafficfactorX}{-2}%
+      }{%
+        \pgfmathsetmacro{\trafficfactorX}{1}%
+      }%
+      \pic[rotate=\rotate] at ($\trafficfactorX*\facefactor*(0,-0.2) + \facefactor*(0.6,0)$) {semicircle}; % signal marker
+      %
+    }{}%
+    \iftoggle{is_berth_type}{% marker for berth signal
+      \path ($\trafficfactor*\facefactor*(0,-0.575) + \facefactor*(0.3,0)$) rectangle%
+          ++($\trafficfactor*\facefactor*(0, 0.35 ) + \facefactor*(0.5,0)$);% % signal marker
+      \path[line width=0.75pt] ($\trafficfactor*\facefactor*(0,-0.3) + \facefactor*(0.375,0)$) -- ++($\facefactor*(0.35,0)$);%
+      \path[line width=0.75pt] ($\trafficfactor*\facefactor*(0,-0.5) + \facefactor*(0.55 ,0)$) -- ++($\trafficfactor*\facefactor*(0,0.2)$);%
+      \path[line width=0.75pt] ($\trafficfactor*\facefactor*(0,-0.5) + \facefactor*(0.375,0)$) -- ++($\facefactor*(0.35,0)$);%
+      %
+    }{}%
+    %% speed indicator
+    \ifdefstring{\speed}{}{}{% speed NOT empty
+      \tikzset{every node/.style={font=\sffamily,text=\foreground}};%
+      \iftoggle{is_speed_type}{% marker for speed signal
+        \node[rotate=\rotate] at ($\trafficfactor*\facefactor*(0,-0.4) + \facefactor*(0.85,0)$) {\speed};%
+      }{%
+        \iftoggle{is_shunting_type}{}{% is NOT shunting tyoe
+          \node[rotate=\rotate] at ($\trafficfactor*\facefactor*(0,-0.4) + \facefactor*(1.3,0)$) {\speed};%
+        }%
+      }%
+    }%
+    \ifdefstring{\distantspeed}{}{}{% distant speed NOT empty
+      \tikzset{every node/.style={font=\sffamily,text=\foreground,fill=\background,inner sep=0.5pt}};%
+      \node[rotate=\rotate] at ($\trafficfactor*\facefactor*(0,-0.4) + \facefactor*(0.2,0)$) {\distantspeed};%
+    }%
+    %% locked
+    \iftoggle{is_locked}{% marker for route signal
+      \iftoggle{is_block_type}{% marker for block signal
+        \path ($\trafficfactor*\facefactor*(0,-0.2) + \facefactor*(0.9,0)$) --%
+            ++($\trafficfactor*\facefactor*(0,-0.4)$);% signal aspect
+      }{}%
+      \iftoggle{is_route_type}{% marker for route signal
+        \path ($\trafficfactor*\facefactor*(0,-0.2) + \facefactor*(0.9,0)$) --%
+            ++($\trafficfactor*\facefactor*(0,-0.4)$);% signal aspect
+      }{}%
+      \iftoggle{is_shunting_type}{%
+        \path ($\trafficfactor*\facefactor*(0,-0.2) + \facefactor*(0.6,0)$) --%
+            ++($\trafficfactor*\facefactor*(0,-0.2)$);% signal aspect
+      }{}%
+    }{}%
+  }},% end pics/signal/.style args={#1/#2/#3}
+}%
+%
+%%%%%%%%%%%%%%%
+% symbol clearing point
+%%%%%%%%%%%%%%%
+% command
+\newcommand\clearingpoint{}% just for safety
+\def\clearingpoint[#1]#2(#3)#4(#5){% \clearingpoint[options] at (coord) label (name);
+  \pic[standard,#1] at (#3) {clearing_point={#2/#4/#5}}% symbol
+}%
+\newcommand\blockclearing{}% just for safety
+\def\blockclearing[#1]#2(#3)#4(#5){% \blockclearing[options] at (coord) label (name);
+  \pic[block,#1] at (#3) {clearing_point={#2/#4/#5}}% symbol
+}%
+\newcommand\routeclearing{}% just for safety
+\def\routeclearing[#1]#2(#3)#4(#5){% \routeclearing[options] at (coord) label (name);
+  \pic[route,#1] at (#3) {clearing_point={#2/#4/#5}}% symbol
+}%
+\pgfkeys{%
+  /tikz/trackschematic/trafficcontrol/clearing point/.is family,%
+  /tikz/trackschematic/trafficcontrol/clearing point/.cd,%
+  %% standard type
+  standard type/.value forbidden,%
+  standard type/.code={\settoggle{is_standard_type}{true}},%
+  /tikz/standard/.forward to=/tikz/trackschematic/trafficcontrol/clearing point/standard type,%
+}%
+% options
+\newtoggle{is_standard_type}\settoggle{is_standard_type}{false}%
+% symbol definition
+\tikzset{%
+  pics/clearing_point/.default=,%
+  pics/clearing_point/.style args={#1/#2/#3}{code={%
+    %% settings
+    \def\coordcommand{#1}% beware of leading and tailing spaces!
+    \def\labelcommand{#2}% beware of leading and tailing spaces!
+    \def\labelcontent{#3}%
+    %
+    %% traffic practice setup
+    \ifdefstring{\trafficpractice}{left}{% branch
+      \pgfmathsetmacro{\trafficfactor}{-1}%
+    }{%
+      \ifdefstring{\trafficpractice}{right}{% branch
+        \pgfmathsetmacro{\trafficfactor}{1}%
+      }{% error message
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/trafficcontrol/traffic practice}{“left“ OR “right“ as key required}}%
+      }%
+    }% end \ifdefstring{\trafficpractice}
+    %% face setup
+    \ifdefstring{\face}{backward}{% face
+      \pgfmathsetmacro{\facefactor}{-1}%
+    }{% default case
+      \pgfmathsetmacro{\facefactor}{1}%
+    }% end \ifdefstring{\face}
+    \tikzset{every path/.style={draw=\foreground,line width=1pt}};%
+    %% marker
+    \path ($\trafficfactor*\facefactor*(0,-0.1)$) -- ++($\trafficfactor*\facefactor*(0,0.2)$);% marker
+    %% sign
+    \iftoggle{is_standard_type}{% marker for block signal
+      \path ($\trafficfactor*\facefactor*(0,-0.1) + \facefactor*(0.1,0)$) -- ++($\facefactor*(-0.2,0)$);% sign
+    }{}%
+    \iftoggle{is_block_type}{% marker for block signal
+      \path ($\trafficfactor*\facefactor*(0,-0.1)$) --%
+          ++($\trafficfactor*\facefactor*(0,-0.1) + \facefactor*(-0.1,0)$) --%
+          ++($\trafficfactor*\facefactor*(0,-0.1) + \facefactor*( 0.1,0)$) --%
+          ++($\trafficfactor*\facefactor*(0, 0.1) + \facefactor*( 0.1,0)$) -- cycle;% sign
+    }{}%
+    \iftoggle{is_route_type}{% marker for route signal
+      \path ($\trafficfactor*\facefactor*(0,-0.2)$) circle (0.1);% sign
+    }{}%
+    %% label
+    \ifdefstring{\labelcontent}{}{}{% label NOT empty
+      \tikzset{every node/.style={font=\sffamily,text=\foreground}};%
+      \coordinate (ts-cp-l) at ($\trafficfactor*\facefactor*(0,0.25)$);%
+      \ifdefstring{\labelcoord}{(none)}{}{% initialize if NOT default
+        \gettikzxy{\labelcoord}{\labelcoordX}{\labelcoordY}%
+        \coordinate (ts-cp-l) at ($(ts-cp-l)+(\labelcoordX,\labelcoordY)$);%
+      }%
+      \node at (ts-cp-l) {\footnotesize \labelcontent};%
+    }%
+  }},% end pics/clearing_point/.style args={#1/#2/#3}
+}%
+%
+%%%%%%%%%%%%%%%
+% symbol transmitter
+%%%%%%%%%%%%%%%
+% command
+\newcommand\transmitter{}% just for safety
+\def\transmitter[#1]#2(#3)#4(#5){% \transmitter[options] at (coord) label (name);
+  \pic[#1] at (#3) {transmitter={#2/#4/#5}}% symbol
+}%
+\newcommand\balise{}% just for safety
+\def\balise[#1]#2(#3)#4(#5){% \balise[options] at (coord) label (name);
+  \pic[type=balise,#1] at (#3) {transmitter={#2/#4/#5}}% symbol
+}%
+\newcommand\trackloop{}% just for safety
+\def\trackloop[#1]#2(#3)#4(#5){% \trackloop[options] at (coord) label (name);
+  \pic[type=loop,#1] at (#3) {transmitter={#2/#4/#5}}% symbol
+}%
+% symbol definition
+\tikzset{%
+  pics/transmitter/.default=,%
+  pics/transmitter/.style args={#1/#2/#3}{code={%
+    %% settings
+    \def\coordcommand{#1}% beware of leading and tailing spaces!
+    \def\labelcommand{#2}% beware of leading and tailing spaces!
+    \def\labelcontent{#3}%
+    %% traffic practice setup
+    \ifdefstring{\trafficpractice}{left}{% branch
+      \pgfmathsetmacro{\trafficfactor}{-1}%
+    }{%
+      \ifdefstring{\trafficpractice}{right}{% branch
+        \pgfmathsetmacro{\trafficfactor}{1}%
+      }{% error message
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/trafficcontrol/traffic practice}{“left“ OR “right“ as key required}}%
+      }%
+    }% end \ifdefstring{\trafficpractice}
+    %% marker
+    \tikzset{every path/.style={draw=\foreground}};%
+    \ifdefstring{\type}{balise}{% type balise
+      \path[line width=1pt,fill=\background] ($(-0.25,0)$) rectangle%
+                                             ($\trafficfactor*(0,-0.25) + (0.25,0)$);% balise marker
+      \ifdefstring{\face}{forward}{% face
+        \path ($\trafficfactor*(0,-0.05) + (0.1,0)$) -- ($\trafficfactor*(0,-0.125) + (0.2,0)$) --%
+              ($\trafficfactor*(0,-0.2) + (0.1,0)$) -- cycle;% arrow forward
+      }{%
+        \ifdefstring{\face}{backward}{% face
+          \path ($\trafficfactor*(0,-0.05) + (-0.1,0)$) -- ($\trafficfactor*(0,-0.125) + (-0.2,0)$) --%
+                ($\trafficfactor*(0,-0.2) + (-0.1,0)$) -- cycle;% arrow backward
+        }{
+          \ifdefstring{\face}{bidirectional}{% face
+            \path ($\trafficfactor*(0,-0.05) + (0.1,0)$) -- ($\trafficfactor*(0,-0.125) + (0.2,0)$) --%
+                  ($\trafficfactor*(0,-0.2) + (0.1,0)$) -- cycle;% arrow forward
+            \path ($\trafficfactor*(0,-0.05) + (-0.1,0)$) -- ($\trafficfactor*(0,-0.125) + (-0.2,0)$) --%
+                  ($\trafficfactor*(0,-0.2) + (-0.1,0)$) -- cycle;% arrow backward
+          }{}%
+        }%
+      }% end \ifdefstring{\face}
+    }{%
+      \ifdefstring{\type}{loop}{% type loop
+        \path[line width=1pt] ($\trafficfactor*(0,-0.175)$) -- ++(-0.0625,-0.0625) -- ++(-0.2,0) -- ++(-0.125,0.125) -- ++(-0.1,0) -- ++(0,-0.125) -- ++(0.1,0) -- ++(0.125,0.125) -- ++(0.2,0) -- ++(0.125,-0.125) -- ++(0.2,0) -- ++(0.125,0.125) -- ++(0.1,0) -- ++(0,-0.125) -- ++(-0.1,0) -- ++(-0.125,0.125) -- ++(-0.2,0) -- cycle;% loop marker
+      }{% error message
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/trafficcontrol/transmitter/type}{“balise“ OR “loop“ as key required}}%
+      }%
+    }% end \ifdefstring{\type}
+    %% label
+    \ifdefstring{\labelcontent}{}{}{% label NOT empty
+      \tikzset{every node/.style={font=\sffamily,text=\foreground}};%
+      \coordinate (ts-tm-l) at ($\trafficfactor*(0,0.25)$);%
+      \ifdefstring{\labelcoord}{(none)}{}{% initialize if NOT default
+        \gettikzxy{\labelcoord}{\labelcoordX}{\labelcoordY}%
+        \coordinate (ts-tm-l) at ($(ts-tm-l) + (\labelcoordX,\labelcoordY)$);%
+      }%
+      \node at (ts-tm-l) {\footnotesize \labelcontent};%
+    }%
+  }},% end pics/transmitter/.style args={#1/#2/#3}
+}%
+%
+%%%%%%%%%%%%%%%
+% symbol view point
+%%%%%%%%%%%%%%%
+% command
+\newcommand\viewpoint{}% just for safety
+\def\viewpoint[#1]#2(#3){% \viewpoint[options] at (coord);
+  \pic[#1] at (#3) {view_point={#2}};% symbol
+}%
+% symbol definition
+\tikzset{%
+  pics/view_point/.default=,%
+  pics/view_point/.style args={#1}{code={%
+    %% face setup
+    \ifdefstring{\face}{forward}{% face
+      \pgfmathsetmacro{\facefactor}{1}%
+    }{%
+      \ifdefstring{\face}{backward}{% face
+        \pgfmathsetmacro{\facefactor}{-1}%
+      }{% error message
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/face}{“forward“ OR “backward“ as key required}}%
+      }%
+    }% end \ifdefstring{\face}
+    %% traffic practice setup
+    \ifdefstring{\trafficpractice}{left}{% branch
+      \pgfmathsetmacro{\trafficfactor}{-1}%
+    }{%
+      \ifdefstring{\trafficpractice}{right}{% branch
+        \pgfmathsetmacro{\trafficfactor}{1}%
+      }{% error message
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/trafficcontrol/traffic practice}{“left“ OR “right“ as key required}}%
+      }%
+    }% end \ifdefstring{\trafficpractice}
+    %% arrow
+    \path[draw=\foreground,<-,>=latex,line width=1pt]%
+      ($\facefactor*\trafficfactor*(0,-0.1)$) -- ++($\facefactor*\trafficfactor*(0,-0.3)$) -- ++($\facefactor*(0.2,0)$);% arrow
+    %% eye
+    \filldraw[\foreground] ($\facefactor*(0.4,0) + \facefactor*\trafficfactor*(0,-0.4)$) circle (0.1);% pupil
+    \path[draw=\foreground, line width=1pt]% eye contour
+      ($\facefactor*(0.4, 0) + \facefactor*\trafficfactor*(0,-0.15)$) .. controls%
+      ($\facefactor*(0.25,0) + \facefactor*\trafficfactor*(0,-0.25)$) and%
+      ($\facefactor*(0.25,0) + \facefactor*\trafficfactor*(0,-0.55)$) ..%
+      ($\facefactor*(0.4, 0) + \facefactor*\trafficfactor*(0,-0.65)$) .. controls%
+      ($\facefactor*(0.55,0) + \facefactor*\trafficfactor*(0,-0.55)$) and%
+      ($\facefactor*(0.55,0) + \facefactor*\trafficfactor*(0,-0.25)$) ..%
+      ($\facefactor*(0.4, 0) + \facefactor*\trafficfactor*(0,-0.15)$) --cycle;% eye contour
+  }},%
+}%
+%
+%%%%%%%%%%%%%%%
+% symbol end of authority marker
+%%%%%%%%%%%%%%%
+% command
+\newcommand\movementauthority{}% just for safety
+\def\movementauthority[#1]#2(#3)#4(#5){% \movementauthority[options] at (coord) label (name);
+  \pic[#1] at (#3) {movement_authority_marker={#2/#4/#5}}% symbol
+}%
+% tikz keys
+\pgfkeys{%
+  /tikz/trackschematic/trafficcontrol/EoA/.is family,%
+  /tikz/trackschematic/trafficcontrol/EoA/.cd,%
+  %% option \directionarrow
+  direction arrow/.store in=\directionarrow,% true or false
+  direction arrow=true,% true or false
+  /tikz/direction arrow/.forward to=/tikz/trackschematic/trafficcontrol/EoA/direction arrow,%
+}%
+% symbol definition
+\tikzset{%
+  pics/movement_authority_marker/.default=,%
+  pics/movement_authority_marker/.style args={#1/#2/#3}{code={%
+    %% settings
+    \def\coordcommand{#1}% beware of leading and tailing spaces!
+    \def\labelcommand{#2}% beware of leading and tailing spaces!
+    \def\labelcontent{#3}%
+    %
+    %% traffic practice setup
+    \ifdefstring{\trafficpractice}{left}{% branch
+      \pgfmathsetmacro{\trafficfactor}{-1}%
+    }{%
+      \ifdefstring{\trafficpractice}{right}{% branch
+        \pgfmathsetmacro{\trafficfactor}{1}%
+      }{% error message
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/trafficcontrol/traffic practice}{“left“ OR “right“ as key required}}%
+      }%
+    }% end \ifdefstring{\trafficpractice}
+    %% face setup
+    \ifdefstring{\face}{forward}{% face
+      \pgfmathsetmacro{\facefactor}{1}%
+      \def\align{left}%
+    }{%
+      \ifdefstring{\face}{backward}{% face
+        \pgfmathsetmacro{\facefactor}{-1}%
+        \def\align{right}%
+      }{% error message
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/face}{“forward“ OR “backward“ as key required}}%
+      }%
+    }% end \ifdefstring{\face}
+    \tikzset{every path/.style={draw=\foreground,line width=1pt}};%
+    %% marker
+    \path (0,0) -- ++($\trafficfactor*\facefactor*(0,-0.5)$);% marker
+    \path ($\trafficfactor*\facefactor*(0,-0.7) + \facefactor*(-0.1,0)$) rectangle%
+        ++($\trafficfactor*\facefactor*(0, 0.2) + \facefactor*(0.2,0)$);% sign
+    %% arrow
+    \ifdefstring{\directionarrow}{true}{%
+      \path[line width=0.5pt] ($\trafficfactor*\facefactor*(0,-0.2) + \facefactor*(-0.2,0)$) --%
+                            ++($\facefactor*(0.2,0)$);% arrow body
+      \path[draw=none,fill=\foreground]% arrow tip
+          ($\trafficfactor*\facefactor*(0,-0.2)$) --%
+          ++($\trafficfactor*\facefactor*(0,-0.04) + \facefactor*(-0.1,0)$) -- ++($\trafficfactor*\facefactor*(0,0.08)$) -- cycle;%
+    }{% error message
+      \ifdefstring{\directionarrow}{false}{}{%
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/trafficcontrol/EoA/direction arrow}{'true' OR 'false' as key required}}%
+      }%
+    }%
+    %% label
+    \ifdefstring{\labelcontent}{}{}{% label NOT empty
+      \tikzset{every node/.style={font=\sffamily,text=\foreground}};%
+      \coordinate (ts-ma-l) at ($\trafficfactor*\facefactor*(0,-0.6) + \facefactor*(-0.05,0)$);%
+      \ifdefstring{\labelcoord}{(none)}{}{% initialize if NOT default
+        \gettikzxy{\labelcoord}{\labelcoordX}{\labelcoordY}%
+        \coordinate (ts-ma-l) at ($(ts-ma-l) + (\labelcoordX,\labelcoordY)$);%
+      }%
+      \node[\align] at (ts-ma-l) {\footnotesize \labelcontent};%
+    }%
+  }},% end pics/movement_authority_marker/.style args={#1/#2/#3}
+}%
+%
+%%%%%%%%%%%%%%%
+% symbol route
+%%%%%%%%%%%%%%%
+% command
+\newcommand\route{}% just for safety
+\def\route[#1]#2(#3){% \route[options] at (coord);
+  \pic[#1] at (#3) {route={#2}}% symbol
+}%
+% symbol definition
+\tikzset{%
+  pics/route/.default=,%
+  pics/route/.style args={#1}{code={%
+    %% settings
+    \def\coordcommand{#1} % beware of leading and tailing spaces!
+    %% face setup
+    \ifdefstring{\face}{forward}{% face
+      \pgfmathsetmacro{\facefactor}{1}%
+    }{%
+      \ifdefstring{\face}{backward}{% face
+        \pgfmathsetmacro{\facefactor}{-1}%
+      }{% error message
+        \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/face}{“forward“ OR “backward“ as key required}}%
+      }%
+    }% end \ifdefstring{\face}
+    %% symbol
+    \fill[\foreground] ($\facefactor*(-0.175,0)+(0,-0.15)$) --%
+                       ($\facefactor*(-0.175,0)+(0, 0.15)$) --%
+                       ($\facefactor*( 0.175,0)+(0, 0   )$) -- cycle;%
+  }},%
+}%
+%
+%%%%%%%%%%%%%%%
+\endinput%
+%
\ No newline at end of file
-- 
cgit v1.2.3

