From 21026040a1cc3dd5ff3f0e30d7c2c6e592e6a4b5 Mon Sep 17 00:00:00 2001 From: martin Date: Mon, 30 Sep 2019 15:16:20 +0200 Subject: [PATCH] new syntax for library topology, new folder structure, draft documentation --- README.md | 15 +- doc/authors.tex | 8 + doc/doc.pdf | Bin 0 -> 59170 bytes doc/doc.tex | 130 ++++ {examples => doc/examples}/network.pdf | Bin {examples => doc/examples}/network.tex | 0 {examples => doc/examples}/network.tikz | 0 {examples => doc/examples}/station_berg.pdf | Bin {examples => doc/examples}/station_berg.tex | 0 .../examples}/station_chamstadt.pdf | Bin .../examples}/station_chamstadt.tex | 0 .../examples}/station_okerbach.pdf | Bin .../examples}/station_okerbach.tex | 0 .../examples}/station_okerbach.tikz | 0 .../examples}/station_pockelsdorf.pdf | Bin .../examples}/station_pockelsdorf.tex | 0 .../examples}/station_pockelsdorf.tikz | 0 .../examples}/station_rebenau.pdf | Bin .../examples}/station_rebenau.tex | 0 .../examples}/station_rebenau.tikz | 0 .../examples}/station_schleinitz.pdf | Bin .../examples}/station_schleinitz.tex | 0 .../examples}/station_schleinitz.tikz | 0 snippets.pdf => doc/snippets.pdf | Bin snippets.tex => doc/snippets.tex | 0 .../block_clearing_point_backward.tikz | 0 .../block_clearing_point_forward.tikz | 0 .../snippets}/block_end_marker_backward.tikz | 0 .../snippets}/block_end_marker_forward.tikz | 0 .../snippets}/block_signal_backward.tikz | 0 .../snippets}/block_signal_forward.tikz | 0 {snippets => doc/snippets}/bridge.tikz | 0 .../snippets}/bridge_track_beneath.tikz | 0 .../snippets}/bufferstop_backward.tikz | 0 .../snippets}/bufferstop_forward.tikz | 0 .../snippets}/clearing_point.tikz | 0 .../snippets}/combined_signal_forward.tikz | 0 .../snippets}/derailer_left_backward.tikz | 0 .../snippets}/derailer_left_forward.tikz | 0 .../snippets}/derailer_right_backward.tikz | 0 .../snippets}/derailer_right_forward.tikz | 0 .../snippets}/diamond_crossing_left.tikz | 0 .../snippets}/diamond_crossing_right.tikz | 0 .../snippets}/distant_signal_backward.tikz | 0 .../snippets}/distant_signal_forward.tikz | 0 .../distant_speed_signal_backward.tikz | 0 .../distant_speed_signal_forward.tikz | 0 .../snippets}/double-slip_turnout_left.tikz | 0 .../snippets}/double-slip_turnout_right.tikz | 0 .../ghost_train_direction_backward.tikz | 0 .../ghost_train_direction_forward.tikz | 0 {snippets => doc/snippets}/hump.tikz | 0 {snippets => doc/snippets}/interlocking.tikz | 0 .../snippets}/level_crossing_double.tikz | 0 .../level_crossing_double_full_closure.tikz | 0 .../snippets}/level_crossing_single.tikz | 0 {snippets => doc/snippets}/main_line.tikz | 0 {snippets => doc/snippets}/main_track.tikz | 0 {snippets => doc/snippets}/platform_left.tikz | 0 .../snippets}/platform_middle.tikz | 0 .../snippets}/platform_right.tikz | 0 .../route_clearing_point_backward.tikz | 0 .../route_clearing_point_forward.tikz | 0 .../snippets}/route_signal_backward.tikz | 0 .../snippets}/route_signal_forward.tikz | 0 .../snippets}/secondary_track.tikz | 0 .../snippets}/shunt_limit_backward.tikz | 0 .../snippets}/shunt_limit_forward.tikz | 0 .../snippets}/shunt_signal_backward.tikz | 0 .../shunt_signal_backward_locked.tikz | 0 .../snippets}/shunt_signal_forward.tikz | 0 .../shunt_signal_forward_locked.tikz | 0 .../snippets}/speed_signal_backward.tikz | 0 .../snippets}/speed_signal_forward.tikz | 0 .../snippets}/track_distance.tikz | 0 {snippets => doc/snippets}/track_number.tikz | 0 {snippets => doc/snippets}/train_berth.tikz | 0 .../snippets}/train_berth_shape.tikz | 0 .../train_berth_shape_bidirectional.tikz | 0 .../train_berth_shape_different.tikz | 0 .../snippets}/train_berth_sign_backward.tikz | 0 .../snippets}/train_berth_sign_forward.tikz | 0 .../snippets}/train_direction_backward.tikz | 0 .../snippets}/train_direction_forward.tikz | 0 .../snippets}/train_drive_automatic.tikz | 0 .../snippets}/train_drive_human.tikz | 0 .../snippets}/train_moving_backward.tikz | 0 .../snippets}/train_moving_fast_backward.tikz | 0 .../snippets}/train_moving_fast_forward.tikz | 0 .../snippets}/train_moving_forward.tikz | 0 .../snippets}/train_moving_slow_backward.tikz | 0 .../snippets}/train_moving_slow_forward.tikz | 0 .../snippets}/train_shunt_mode_backward.tikz | 0 .../snippets}/train_shunt_mode_forward.tikz | 0 .../snippets}/train_shunting_backward.tikz | 0 .../snippets}/train_shunting_forward.tikz | 0 {snippets => doc/snippets}/transmitter.tikz | 0 .../snippets}/transmitter_backward.tikz | 0 .../snippets}/transmitter_below.tikz | 0 .../transmitter_below_bidirectional.tikz | 0 .../snippets}/transmitter_below_forward.tikz | 0 .../transmitter_below_with_signal.tikz | 0 .../snippets}/transmitter_bidirectional.tikz | 0 .../snippets}/transmitter_forward.tikz | 0 .../snippets}/turnout_left_backward.tikz | 0 .../turnout_left_backward_left_position.tikz | 0 .../turnout_left_backward_moving_points.tikz | 0 .../turnout_left_backward_right_position.tikz | 0 .../snippets}/turnout_left_forward.tikz | 0 .../turnout_left_forward_left_position.tikz | 0 .../turnout_left_forward_moving_points.tikz | 0 .../turnout_left_forward_right_position.tikz | 0 .../snippets}/turnout_right_backward.tikz | 0 .../turnout_right_backward_left_position.tikz | 0 .../turnout_right_backward_moving_points.tikz | 0 ...turnout_right_backward_right_position.tikz | 0 .../snippets}/turnout_right_forward.tikz | 0 .../turnout_right_forward_left_position.tikz | 0 .../turnout_right_forward_moving_points.tikz | 0 .../turnout_right_forward_right_position.tikz | 0 .../turnout_with_fouling_left_backward.tikz | 0 .../turnout_with_fouling_left_forward.tikz | 0 .../turnout_with_fouling_right_backward.tikz | 0 .../turnout_with_fouling_right_forward.tikz | 0 {snippets => doc/snippets}/vehicle.tikz | 0 {snippets => doc/snippets}/vehicles.tikz | 0 .../snippets}/vehicles_with_label.tikz | 0 .../snippets}/view_point_backward.tikz | 0 .../snippets}/view_point_forward.tikz | 0 symbology.pdf => doc/symbology.pdf | Bin symbology.tex => doc/symbology.tex | 0 doc/versionhistory.tex | 25 + src/tikzlibrarytrackschematic.code.tex | 25 +- ...ikzlibrarytrackschematic.topology.code.tex | 700 ++++++++++++------ test/crossing.tikz | 58 ++ test/misc_topology.tikz | 45 ++ test/slipturnout.tikz | 94 +++ test/test.pdf | Bin 0 -> 68366 bytes test/test.tex | 26 + test/turnout.tikz | 83 +++ 140 files changed, 983 insertions(+), 226 deletions(-) create mode 100644 doc/authors.tex create mode 100644 doc/doc.pdf create mode 100644 doc/doc.tex rename {examples => doc/examples}/network.pdf (100%) rename {examples => doc/examples}/network.tex (100%) rename {examples => doc/examples}/network.tikz (100%) rename {examples => doc/examples}/station_berg.pdf (100%) rename {examples => doc/examples}/station_berg.tex (100%) rename {examples => doc/examples}/station_chamstadt.pdf (100%) rename {examples => doc/examples}/station_chamstadt.tex (100%) rename {examples => doc/examples}/station_okerbach.pdf (100%) rename {examples => doc/examples}/station_okerbach.tex (100%) rename {examples => doc/examples}/station_okerbach.tikz (100%) rename {examples => doc/examples}/station_pockelsdorf.pdf (100%) rename {examples => doc/examples}/station_pockelsdorf.tex (100%) rename {examples => doc/examples}/station_pockelsdorf.tikz (100%) rename {examples => doc/examples}/station_rebenau.pdf (100%) rename {examples => doc/examples}/station_rebenau.tex (100%) rename {examples => doc/examples}/station_rebenau.tikz (100%) rename {examples => doc/examples}/station_schleinitz.pdf (100%) rename {examples => doc/examples}/station_schleinitz.tex (100%) rename {examples => doc/examples}/station_schleinitz.tikz (100%) rename snippets.pdf => doc/snippets.pdf (100%) rename snippets.tex => doc/snippets.tex (100%) rename {snippets => doc/snippets}/block_clearing_point_backward.tikz (100%) rename {snippets => doc/snippets}/block_clearing_point_forward.tikz (100%) rename {snippets => doc/snippets}/block_end_marker_backward.tikz (100%) rename {snippets => doc/snippets}/block_end_marker_forward.tikz (100%) rename {snippets => doc/snippets}/block_signal_backward.tikz (100%) rename {snippets => doc/snippets}/block_signal_forward.tikz (100%) rename {snippets => doc/snippets}/bridge.tikz (100%) rename {snippets => doc/snippets}/bridge_track_beneath.tikz (100%) rename {snippets => doc/snippets}/bufferstop_backward.tikz (100%) rename {snippets => doc/snippets}/bufferstop_forward.tikz (100%) rename {snippets => doc/snippets}/clearing_point.tikz (100%) rename {snippets => doc/snippets}/combined_signal_forward.tikz (100%) rename {snippets => doc/snippets}/derailer_left_backward.tikz (100%) rename {snippets => doc/snippets}/derailer_left_forward.tikz (100%) rename {snippets => doc/snippets}/derailer_right_backward.tikz (100%) rename {snippets => doc/snippets}/derailer_right_forward.tikz (100%) rename {snippets => doc/snippets}/diamond_crossing_left.tikz (100%) rename {snippets => doc/snippets}/diamond_crossing_right.tikz (100%) rename {snippets => doc/snippets}/distant_signal_backward.tikz (100%) rename {snippets => doc/snippets}/distant_signal_forward.tikz (100%) rename {snippets => doc/snippets}/distant_speed_signal_backward.tikz (100%) rename {snippets => doc/snippets}/distant_speed_signal_forward.tikz (100%) rename {snippets => doc/snippets}/double-slip_turnout_left.tikz (100%) rename {snippets => doc/snippets}/double-slip_turnout_right.tikz (100%) rename {snippets => doc/snippets}/ghost_train_direction_backward.tikz (100%) rename {snippets => doc/snippets}/ghost_train_direction_forward.tikz (100%) rename {snippets => doc/snippets}/hump.tikz (100%) rename {snippets => doc/snippets}/interlocking.tikz (100%) rename {snippets => doc/snippets}/level_crossing_double.tikz (100%) rename {snippets => doc/snippets}/level_crossing_double_full_closure.tikz (100%) rename {snippets => doc/snippets}/level_crossing_single.tikz (100%) rename {snippets => doc/snippets}/main_line.tikz (100%) rename {snippets => doc/snippets}/main_track.tikz (100%) rename {snippets => doc/snippets}/platform_left.tikz (100%) rename {snippets => doc/snippets}/platform_middle.tikz (100%) rename {snippets => doc/snippets}/platform_right.tikz (100%) rename {snippets => doc/snippets}/route_clearing_point_backward.tikz (100%) rename {snippets => doc/snippets}/route_clearing_point_forward.tikz (100%) rename {snippets => doc/snippets}/route_signal_backward.tikz (100%) rename {snippets => doc/snippets}/route_signal_forward.tikz (100%) rename {snippets => doc/snippets}/secondary_track.tikz (100%) rename {snippets => doc/snippets}/shunt_limit_backward.tikz (100%) rename {snippets => doc/snippets}/shunt_limit_forward.tikz (100%) rename {snippets => doc/snippets}/shunt_signal_backward.tikz (100%) rename {snippets => doc/snippets}/shunt_signal_backward_locked.tikz (100%) rename {snippets => doc/snippets}/shunt_signal_forward.tikz (100%) rename {snippets => doc/snippets}/shunt_signal_forward_locked.tikz (100%) rename {snippets => doc/snippets}/speed_signal_backward.tikz (100%) rename {snippets => doc/snippets}/speed_signal_forward.tikz (100%) rename {snippets => doc/snippets}/track_distance.tikz (100%) rename {snippets => doc/snippets}/track_number.tikz (100%) rename {snippets => doc/snippets}/train_berth.tikz (100%) rename {snippets => doc/snippets}/train_berth_shape.tikz (100%) rename {snippets => doc/snippets}/train_berth_shape_bidirectional.tikz (100%) rename {snippets => doc/snippets}/train_berth_shape_different.tikz (100%) rename {snippets => doc/snippets}/train_berth_sign_backward.tikz (100%) rename {snippets => doc/snippets}/train_berth_sign_forward.tikz (100%) rename {snippets => doc/snippets}/train_direction_backward.tikz (100%) rename {snippets => doc/snippets}/train_direction_forward.tikz (100%) rename {snippets => doc/snippets}/train_drive_automatic.tikz (100%) rename {snippets => doc/snippets}/train_drive_human.tikz (100%) rename {snippets => doc/snippets}/train_moving_backward.tikz (100%) rename {snippets => doc/snippets}/train_moving_fast_backward.tikz (100%) rename {snippets => doc/snippets}/train_moving_fast_forward.tikz (100%) rename {snippets => doc/snippets}/train_moving_forward.tikz (100%) rename {snippets => doc/snippets}/train_moving_slow_backward.tikz (100%) rename {snippets => doc/snippets}/train_moving_slow_forward.tikz (100%) rename {snippets => doc/snippets}/train_shunt_mode_backward.tikz (100%) rename {snippets => doc/snippets}/train_shunt_mode_forward.tikz (100%) rename {snippets => doc/snippets}/train_shunting_backward.tikz (100%) rename {snippets => doc/snippets}/train_shunting_forward.tikz (100%) rename {snippets => doc/snippets}/transmitter.tikz (100%) rename {snippets => doc/snippets}/transmitter_backward.tikz (100%) rename {snippets => doc/snippets}/transmitter_below.tikz (100%) rename {snippets => doc/snippets}/transmitter_below_bidirectional.tikz (100%) rename {snippets => doc/snippets}/transmitter_below_forward.tikz (100%) rename {snippets => doc/snippets}/transmitter_below_with_signal.tikz (100%) rename {snippets => doc/snippets}/transmitter_bidirectional.tikz (100%) rename {snippets => doc/snippets}/transmitter_forward.tikz (100%) rename {snippets => doc/snippets}/turnout_left_backward.tikz (100%) rename {snippets => doc/snippets}/turnout_left_backward_left_position.tikz (100%) rename {snippets => doc/snippets}/turnout_left_backward_moving_points.tikz (100%) rename {snippets => doc/snippets}/turnout_left_backward_right_position.tikz (100%) rename {snippets => doc/snippets}/turnout_left_forward.tikz (100%) rename {snippets => doc/snippets}/turnout_left_forward_left_position.tikz (100%) rename {snippets => doc/snippets}/turnout_left_forward_moving_points.tikz (100%) rename {snippets => doc/snippets}/turnout_left_forward_right_position.tikz (100%) rename {snippets => doc/snippets}/turnout_right_backward.tikz (100%) rename {snippets => doc/snippets}/turnout_right_backward_left_position.tikz (100%) rename {snippets => doc/snippets}/turnout_right_backward_moving_points.tikz (100%) rename {snippets => doc/snippets}/turnout_right_backward_right_position.tikz (100%) rename {snippets => doc/snippets}/turnout_right_forward.tikz (100%) rename {snippets => doc/snippets}/turnout_right_forward_left_position.tikz (100%) rename {snippets => doc/snippets}/turnout_right_forward_moving_points.tikz (100%) rename {snippets => doc/snippets}/turnout_right_forward_right_position.tikz (100%) rename {snippets => doc/snippets}/turnout_with_fouling_left_backward.tikz (100%) rename {snippets => doc/snippets}/turnout_with_fouling_left_forward.tikz (100%) rename {snippets => doc/snippets}/turnout_with_fouling_right_backward.tikz (100%) rename {snippets => doc/snippets}/turnout_with_fouling_right_forward.tikz (100%) rename {snippets => doc/snippets}/vehicle.tikz (100%) rename {snippets => doc/snippets}/vehicles.tikz (100%) rename {snippets => doc/snippets}/vehicles_with_label.tikz (100%) rename {snippets => doc/snippets}/view_point_backward.tikz (100%) rename {snippets => doc/snippets}/view_point_forward.tikz (100%) rename symbology.pdf => doc/symbology.pdf (100%) rename symbology.tex => doc/symbology.tex (100%) create mode 100644 doc/versionhistory.tex create mode 100644 test/crossing.tikz create mode 100644 test/misc_topology.tikz create mode 100644 test/slipturnout.tikz create mode 100644 test/test.pdf create mode 100644 test/test.tex create mode 100644 test/turnout.tikz diff --git a/README.md b/README.md index 89de0a9..1d95b1d 100644 --- a/README.md +++ b/README.md @@ -10,13 +10,14 @@ todo \begin{document} \begin{tikzpicture} + \coordinate (A) at (0,0); \coordinate (B) at (6,0); - \coordinate (T) at (5,0); - \draw[MainTrack] (A) -- (B); - \pic at (T) {train_moving_forward}; + \maintrack (A) -- (B); + \train[moving,forward] at (T) label (train); + \end{tikzpicture} \end{document} @@ -25,6 +26,10 @@ todo ------------ # History +## Version 0.5 + + * new improved syntax + ## Version 0.4 * added document for symbology @@ -53,7 +58,5 @@ todo ------------ # Roadmap - * encapsulation of symbols in package for tex infrastructure * provide option for internationalziation (i18n) - * write usefull documentation - * re-think syntax \ No newline at end of file + * write usefull documentation \ No newline at end of file diff --git a/doc/authors.tex b/doc/authors.tex new file mode 100644 index 0000000..4727b5f --- /dev/null +++ b/doc/authors.tex @@ -0,0 +1,8 @@ +%!TEX TS-program = pdflatexmk +%!TEX root = doc.tex + +% Copyright 2018,2019 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. + +\newcommand{\MS}{Martin Scheidt} diff --git a/doc/doc.pdf b/doc/doc.pdf new file mode 100644 index 0000000000000000000000000000000000000000..765e660974c985e9080a5c37d5e4ed997268ca41 GIT binary patch literal 59170 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 literal 0 HcmV?d00001 diff --git a/doc/doc.tex b/doc/doc.tex new file mode 100644 index 0000000..191323f --- /dev/null +++ b/doc/doc.tex @@ -0,0 +1,130 @@ +%% symbol library for TikZ track schematics +% +% Copyright 2018,2019 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. + +\documentclass[ + draft, + paper=a4, + version=3.25, + pagesize=pdftex, + twoside=false, + toc=listof, +]{scrartcl} +% --------[ Coding and Language ]---------- +\usepackage{scrhack} +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage[main=english]{babel} +% --------[ revision history ]---------- +\usepackage[tocentry]{vhistory} +\input{authors.tex} +% --------[ Layout ]----------- +\pretolerance=8000 +\tolerance=9500 +\hbadness=8000 +\vbadness=10000 +\displaywidowpenalty=10000 +\clubpenalty=10000 +\widowpenalty=10000 +\usepackage{lmodern,microtype,mathptmx,courier} +\usepackage[scaled=0.92]{helvet} +\usepackage[ + automark, + headsepline, + draft=false +]{scrlayer-scrpage} +\pagestyle{scrheadings} +% -----------[ PDF linking ]---------------- +\usepackage[ + pdftex, + pdfpagelabels, % modify PDF page labels + hyperindex, + hyperfigures, + bookmarksopen, + bookmarksnumbered, + draft=false, + pageanchor=true, % Determines whether every page is given an implicit anchor at the top left corner + %pagebackref, % Adds ‘backlink’ text to the end of each item in the bibliography, as a list of page numbers + %linktocpage, % make page number, not text, be link on TOC, LOF and LOT + breaklinks=true, % allow links to break over lines by making links over multiple lines into PDF links to the same target + colorlinks=true, % Colors the text of links and anchors + linkcolor=base01, % Color for normal internal links + urlcolor=blue, % Color for web links +]{hyperref} % PDF with a linked TableOfContent +\usepackage{bookmark} % Adding package bookmark improves bookmarks handling. +\usepackage{url} +% -------[ PDF Informations ]--------- +\hypersetup{% + pdftitle={tikz/trackschematic}, + pdfsubject={A tikz toolbox for track schematics}, + pdfauthor={Martin Scheidt}, + pdfkeywords={latex, tikz, library, railway, track, layout} +} + +\usepackage[inline]{enumitem} +\usepackage{tikz} + +\usepackage[prefix=]{xcolor-solarized} +\def\rootTrackschematic{../../tikz-trackschematic} +\def\srcTrackschematic{\rootTrackschematic/src/tikzlibrarytrackschematic} +\input{\srcTrackschematic.topology.code.tex} +\input{\srcTrackschematic.trafficcontrol.code.tex} +\input{\srcTrackschematic.vehicles.code.tex} +\input{\srcTrackschematic.constructions.code.tex} + +\begin{document} + +\title{\tikz\node[scale=1.2]{\color{gray}\Huge\sffamily \{\textcolor{black}{Ti\textcolor{orange}{\emph{k}}Z}/\textcolor{blue}{trackschematic}\}};} +\subtitle{A Ti\emph{k}Z library for track schematics} +\author{\vhListAllAuthorsLong} +\date{Version \vhCurrentVersion~ from \vhCurrentDate} + +\maketitle + +\tableofcontents + +\section{Introduction}\label{sec:intro} + +\subsection[About]{About tikz/trackschematic} + + The Ti\emph{k}Z \emph{trackschematic} library is a toolbox of symbols geared primarily towards creating track schematic for either research or educational purposes. + It provides a tikz frontends to some of the symbols which maybe needed to describe situations and layouts in railway operation. + The library is divided into four sublibraries: + \begin{itemize*}[label={}] + \item topology, + \item traffic control, + \item vehicles, and + \item constructions. + \end{itemize*} + + +\subsection{Requirements}\label{sec:require} + + The library uses Ti\emph{k}Z and it is based the following packages: + \begin{itemize*}[label={}] + \item tikz, + \item xcolor, and + \item etoolbox. + \end{itemize*} + Further more it uses the following Ti\emph{k}Z libraries: + \begin{itemize*}[label={}] + \item calc, + \item patterns, and + \item arrows.meta. + \end{itemize*} + + +\subsection{License} + + Copyright 2018, 2019 \MS. 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 (\href{https://www.tldrlegal.com/l/isc}{ISC license}). + +\section{Usage}\label{sec:use} + + loading ther library + +% \appendix +\input{versionhistory.tex} +\vhListAllAuthorsLongWithAbbrev +\end{document} \ No newline at end of file diff --git a/examples/network.pdf b/doc/examples/network.pdf similarity index 100% rename from examples/network.pdf rename to doc/examples/network.pdf diff --git a/examples/network.tex b/doc/examples/network.tex similarity index 100% rename from examples/network.tex rename to doc/examples/network.tex diff --git a/examples/network.tikz b/doc/examples/network.tikz similarity index 100% rename from examples/network.tikz rename to doc/examples/network.tikz diff --git a/examples/station_berg.pdf b/doc/examples/station_berg.pdf similarity index 100% rename from examples/station_berg.pdf rename to doc/examples/station_berg.pdf diff --git a/examples/station_berg.tex b/doc/examples/station_berg.tex similarity index 100% rename from examples/station_berg.tex rename to doc/examples/station_berg.tex diff --git a/examples/station_chamstadt.pdf b/doc/examples/station_chamstadt.pdf similarity index 100% rename from examples/station_chamstadt.pdf rename to doc/examples/station_chamstadt.pdf diff --git a/examples/station_chamstadt.tex b/doc/examples/station_chamstadt.tex similarity index 100% rename from examples/station_chamstadt.tex rename to doc/examples/station_chamstadt.tex diff --git a/examples/station_okerbach.pdf b/doc/examples/station_okerbach.pdf similarity index 100% rename from examples/station_okerbach.pdf rename to doc/examples/station_okerbach.pdf diff --git a/examples/station_okerbach.tex b/doc/examples/station_okerbach.tex similarity index 100% rename from examples/station_okerbach.tex rename to doc/examples/station_okerbach.tex diff --git a/examples/station_okerbach.tikz b/doc/examples/station_okerbach.tikz similarity index 100% rename from examples/station_okerbach.tikz rename to doc/examples/station_okerbach.tikz diff --git a/examples/station_pockelsdorf.pdf b/doc/examples/station_pockelsdorf.pdf similarity index 100% rename from examples/station_pockelsdorf.pdf rename to doc/examples/station_pockelsdorf.pdf diff --git a/examples/station_pockelsdorf.tex b/doc/examples/station_pockelsdorf.tex similarity index 100% rename from examples/station_pockelsdorf.tex rename to doc/examples/station_pockelsdorf.tex diff --git a/examples/station_pockelsdorf.tikz b/doc/examples/station_pockelsdorf.tikz similarity index 100% rename from examples/station_pockelsdorf.tikz rename to doc/examples/station_pockelsdorf.tikz diff --git a/examples/station_rebenau.pdf b/doc/examples/station_rebenau.pdf similarity index 100% rename from examples/station_rebenau.pdf rename to doc/examples/station_rebenau.pdf diff --git a/examples/station_rebenau.tex b/doc/examples/station_rebenau.tex similarity index 100% rename from examples/station_rebenau.tex rename to doc/examples/station_rebenau.tex diff --git a/examples/station_rebenau.tikz b/doc/examples/station_rebenau.tikz similarity index 100% rename from examples/station_rebenau.tikz rename to doc/examples/station_rebenau.tikz diff --git a/examples/station_schleinitz.pdf b/doc/examples/station_schleinitz.pdf similarity index 100% rename from examples/station_schleinitz.pdf rename to doc/examples/station_schleinitz.pdf diff --git a/examples/station_schleinitz.tex b/doc/examples/station_schleinitz.tex similarity index 100% rename from examples/station_schleinitz.tex rename to doc/examples/station_schleinitz.tex diff --git a/examples/station_schleinitz.tikz b/doc/examples/station_schleinitz.tikz similarity index 100% rename from examples/station_schleinitz.tikz rename to doc/examples/station_schleinitz.tikz diff --git a/snippets.pdf b/doc/snippets.pdf similarity index 100% rename from snippets.pdf rename to doc/snippets.pdf diff --git a/snippets.tex b/doc/snippets.tex similarity index 100% rename from snippets.tex rename to doc/snippets.tex diff --git a/snippets/block_clearing_point_backward.tikz b/doc/snippets/block_clearing_point_backward.tikz similarity index 100% rename from snippets/block_clearing_point_backward.tikz rename to doc/snippets/block_clearing_point_backward.tikz diff --git a/snippets/block_clearing_point_forward.tikz b/doc/snippets/block_clearing_point_forward.tikz similarity index 100% rename from snippets/block_clearing_point_forward.tikz rename to doc/snippets/block_clearing_point_forward.tikz diff --git a/snippets/block_end_marker_backward.tikz b/doc/snippets/block_end_marker_backward.tikz similarity index 100% rename from snippets/block_end_marker_backward.tikz rename to doc/snippets/block_end_marker_backward.tikz diff --git a/snippets/block_end_marker_forward.tikz b/doc/snippets/block_end_marker_forward.tikz similarity index 100% rename from snippets/block_end_marker_forward.tikz rename to doc/snippets/block_end_marker_forward.tikz diff --git a/snippets/block_signal_backward.tikz b/doc/snippets/block_signal_backward.tikz similarity index 100% rename from snippets/block_signal_backward.tikz rename to doc/snippets/block_signal_backward.tikz diff --git a/snippets/block_signal_forward.tikz b/doc/snippets/block_signal_forward.tikz similarity index 100% rename from snippets/block_signal_forward.tikz rename to doc/snippets/block_signal_forward.tikz diff --git a/snippets/bridge.tikz b/doc/snippets/bridge.tikz similarity index 100% rename from snippets/bridge.tikz rename to doc/snippets/bridge.tikz diff --git a/snippets/bridge_track_beneath.tikz b/doc/snippets/bridge_track_beneath.tikz similarity index 100% rename from snippets/bridge_track_beneath.tikz rename to doc/snippets/bridge_track_beneath.tikz diff --git a/snippets/bufferstop_backward.tikz b/doc/snippets/bufferstop_backward.tikz similarity index 100% rename from snippets/bufferstop_backward.tikz rename to doc/snippets/bufferstop_backward.tikz diff --git a/snippets/bufferstop_forward.tikz b/doc/snippets/bufferstop_forward.tikz similarity index 100% rename from snippets/bufferstop_forward.tikz rename to doc/snippets/bufferstop_forward.tikz diff --git a/snippets/clearing_point.tikz b/doc/snippets/clearing_point.tikz similarity index 100% rename from snippets/clearing_point.tikz rename to doc/snippets/clearing_point.tikz diff --git a/snippets/combined_signal_forward.tikz b/doc/snippets/combined_signal_forward.tikz similarity index 100% rename from snippets/combined_signal_forward.tikz rename to doc/snippets/combined_signal_forward.tikz diff --git a/snippets/derailer_left_backward.tikz b/doc/snippets/derailer_left_backward.tikz similarity index 100% rename from snippets/derailer_left_backward.tikz rename to doc/snippets/derailer_left_backward.tikz diff --git a/snippets/derailer_left_forward.tikz b/doc/snippets/derailer_left_forward.tikz similarity index 100% rename from snippets/derailer_left_forward.tikz rename to doc/snippets/derailer_left_forward.tikz diff --git a/snippets/derailer_right_backward.tikz b/doc/snippets/derailer_right_backward.tikz similarity index 100% rename from snippets/derailer_right_backward.tikz rename to doc/snippets/derailer_right_backward.tikz diff --git a/snippets/derailer_right_forward.tikz b/doc/snippets/derailer_right_forward.tikz similarity index 100% rename from snippets/derailer_right_forward.tikz rename to doc/snippets/derailer_right_forward.tikz diff --git a/snippets/diamond_crossing_left.tikz b/doc/snippets/diamond_crossing_left.tikz similarity index 100% rename from snippets/diamond_crossing_left.tikz rename to doc/snippets/diamond_crossing_left.tikz diff --git a/snippets/diamond_crossing_right.tikz b/doc/snippets/diamond_crossing_right.tikz similarity index 100% rename from snippets/diamond_crossing_right.tikz rename to doc/snippets/diamond_crossing_right.tikz diff --git a/snippets/distant_signal_backward.tikz b/doc/snippets/distant_signal_backward.tikz similarity index 100% rename from snippets/distant_signal_backward.tikz rename to doc/snippets/distant_signal_backward.tikz diff --git a/snippets/distant_signal_forward.tikz b/doc/snippets/distant_signal_forward.tikz similarity index 100% rename from snippets/distant_signal_forward.tikz rename to doc/snippets/distant_signal_forward.tikz diff --git a/snippets/distant_speed_signal_backward.tikz b/doc/snippets/distant_speed_signal_backward.tikz similarity index 100% rename from snippets/distant_speed_signal_backward.tikz rename to doc/snippets/distant_speed_signal_backward.tikz diff --git a/snippets/distant_speed_signal_forward.tikz b/doc/snippets/distant_speed_signal_forward.tikz similarity index 100% rename from snippets/distant_speed_signal_forward.tikz rename to doc/snippets/distant_speed_signal_forward.tikz diff --git a/snippets/double-slip_turnout_left.tikz b/doc/snippets/double-slip_turnout_left.tikz similarity index 100% rename from snippets/double-slip_turnout_left.tikz rename to doc/snippets/double-slip_turnout_left.tikz diff --git a/snippets/double-slip_turnout_right.tikz b/doc/snippets/double-slip_turnout_right.tikz similarity index 100% rename from snippets/double-slip_turnout_right.tikz rename to doc/snippets/double-slip_turnout_right.tikz diff --git a/snippets/ghost_train_direction_backward.tikz b/doc/snippets/ghost_train_direction_backward.tikz similarity index 100% rename from snippets/ghost_train_direction_backward.tikz rename to doc/snippets/ghost_train_direction_backward.tikz diff --git a/snippets/ghost_train_direction_forward.tikz b/doc/snippets/ghost_train_direction_forward.tikz similarity index 100% rename from snippets/ghost_train_direction_forward.tikz rename to doc/snippets/ghost_train_direction_forward.tikz diff --git a/snippets/hump.tikz b/doc/snippets/hump.tikz similarity index 100% rename from snippets/hump.tikz rename to doc/snippets/hump.tikz diff --git a/snippets/interlocking.tikz b/doc/snippets/interlocking.tikz similarity index 100% rename from snippets/interlocking.tikz rename to doc/snippets/interlocking.tikz diff --git a/snippets/level_crossing_double.tikz b/doc/snippets/level_crossing_double.tikz similarity index 100% rename from snippets/level_crossing_double.tikz rename to doc/snippets/level_crossing_double.tikz diff --git a/snippets/level_crossing_double_full_closure.tikz b/doc/snippets/level_crossing_double_full_closure.tikz similarity index 100% rename from snippets/level_crossing_double_full_closure.tikz rename to doc/snippets/level_crossing_double_full_closure.tikz diff --git a/snippets/level_crossing_single.tikz b/doc/snippets/level_crossing_single.tikz similarity index 100% rename from snippets/level_crossing_single.tikz rename to doc/snippets/level_crossing_single.tikz diff --git a/snippets/main_line.tikz b/doc/snippets/main_line.tikz similarity index 100% rename from snippets/main_line.tikz rename to doc/snippets/main_line.tikz diff --git a/snippets/main_track.tikz b/doc/snippets/main_track.tikz similarity index 100% rename from snippets/main_track.tikz rename to doc/snippets/main_track.tikz diff --git a/snippets/platform_left.tikz b/doc/snippets/platform_left.tikz similarity index 100% rename from snippets/platform_left.tikz rename to doc/snippets/platform_left.tikz diff --git a/snippets/platform_middle.tikz b/doc/snippets/platform_middle.tikz similarity index 100% rename from snippets/platform_middle.tikz rename to doc/snippets/platform_middle.tikz diff --git a/snippets/platform_right.tikz b/doc/snippets/platform_right.tikz similarity index 100% rename from snippets/platform_right.tikz rename to doc/snippets/platform_right.tikz diff --git a/snippets/route_clearing_point_backward.tikz b/doc/snippets/route_clearing_point_backward.tikz similarity index 100% rename from snippets/route_clearing_point_backward.tikz rename to doc/snippets/route_clearing_point_backward.tikz diff --git a/snippets/route_clearing_point_forward.tikz b/doc/snippets/route_clearing_point_forward.tikz similarity index 100% rename from snippets/route_clearing_point_forward.tikz rename to doc/snippets/route_clearing_point_forward.tikz diff --git a/snippets/route_signal_backward.tikz b/doc/snippets/route_signal_backward.tikz similarity index 100% rename from snippets/route_signal_backward.tikz rename to doc/snippets/route_signal_backward.tikz diff --git a/snippets/route_signal_forward.tikz b/doc/snippets/route_signal_forward.tikz similarity index 100% rename from snippets/route_signal_forward.tikz rename to doc/snippets/route_signal_forward.tikz diff --git a/snippets/secondary_track.tikz b/doc/snippets/secondary_track.tikz similarity index 100% rename from snippets/secondary_track.tikz rename to doc/snippets/secondary_track.tikz diff --git a/snippets/shunt_limit_backward.tikz b/doc/snippets/shunt_limit_backward.tikz similarity index 100% rename from snippets/shunt_limit_backward.tikz rename to doc/snippets/shunt_limit_backward.tikz diff --git a/snippets/shunt_limit_forward.tikz b/doc/snippets/shunt_limit_forward.tikz similarity index 100% rename from snippets/shunt_limit_forward.tikz rename to doc/snippets/shunt_limit_forward.tikz diff --git a/snippets/shunt_signal_backward.tikz b/doc/snippets/shunt_signal_backward.tikz similarity index 100% rename from snippets/shunt_signal_backward.tikz rename to doc/snippets/shunt_signal_backward.tikz diff --git a/snippets/shunt_signal_backward_locked.tikz b/doc/snippets/shunt_signal_backward_locked.tikz similarity index 100% rename from snippets/shunt_signal_backward_locked.tikz rename to doc/snippets/shunt_signal_backward_locked.tikz diff --git a/snippets/shunt_signal_forward.tikz b/doc/snippets/shunt_signal_forward.tikz similarity index 100% rename from snippets/shunt_signal_forward.tikz rename to doc/snippets/shunt_signal_forward.tikz diff --git a/snippets/shunt_signal_forward_locked.tikz b/doc/snippets/shunt_signal_forward_locked.tikz similarity index 100% rename from snippets/shunt_signal_forward_locked.tikz rename to doc/snippets/shunt_signal_forward_locked.tikz diff --git a/snippets/speed_signal_backward.tikz b/doc/snippets/speed_signal_backward.tikz similarity index 100% rename from snippets/speed_signal_backward.tikz rename to doc/snippets/speed_signal_backward.tikz diff --git a/snippets/speed_signal_forward.tikz b/doc/snippets/speed_signal_forward.tikz similarity index 100% rename from snippets/speed_signal_forward.tikz rename to doc/snippets/speed_signal_forward.tikz diff --git a/snippets/track_distance.tikz b/doc/snippets/track_distance.tikz similarity index 100% rename from snippets/track_distance.tikz rename to doc/snippets/track_distance.tikz diff --git a/snippets/track_number.tikz b/doc/snippets/track_number.tikz similarity index 100% rename from snippets/track_number.tikz rename to doc/snippets/track_number.tikz diff --git a/snippets/train_berth.tikz b/doc/snippets/train_berth.tikz similarity index 100% rename from snippets/train_berth.tikz rename to doc/snippets/train_berth.tikz diff --git a/snippets/train_berth_shape.tikz b/doc/snippets/train_berth_shape.tikz similarity index 100% rename from snippets/train_berth_shape.tikz rename to doc/snippets/train_berth_shape.tikz diff --git a/snippets/train_berth_shape_bidirectional.tikz b/doc/snippets/train_berth_shape_bidirectional.tikz similarity index 100% rename from snippets/train_berth_shape_bidirectional.tikz rename to doc/snippets/train_berth_shape_bidirectional.tikz diff --git a/snippets/train_berth_shape_different.tikz b/doc/snippets/train_berth_shape_different.tikz similarity index 100% rename from snippets/train_berth_shape_different.tikz rename to doc/snippets/train_berth_shape_different.tikz diff --git a/snippets/train_berth_sign_backward.tikz b/doc/snippets/train_berth_sign_backward.tikz similarity index 100% rename from snippets/train_berth_sign_backward.tikz rename to doc/snippets/train_berth_sign_backward.tikz diff --git a/snippets/train_berth_sign_forward.tikz b/doc/snippets/train_berth_sign_forward.tikz similarity index 100% rename from snippets/train_berth_sign_forward.tikz rename to doc/snippets/train_berth_sign_forward.tikz diff --git a/snippets/train_direction_backward.tikz b/doc/snippets/train_direction_backward.tikz similarity index 100% rename from snippets/train_direction_backward.tikz rename to doc/snippets/train_direction_backward.tikz diff --git a/snippets/train_direction_forward.tikz b/doc/snippets/train_direction_forward.tikz similarity index 100% rename from snippets/train_direction_forward.tikz rename to doc/snippets/train_direction_forward.tikz diff --git a/snippets/train_drive_automatic.tikz b/doc/snippets/train_drive_automatic.tikz similarity index 100% rename from snippets/train_drive_automatic.tikz rename to doc/snippets/train_drive_automatic.tikz diff --git a/snippets/train_drive_human.tikz b/doc/snippets/train_drive_human.tikz similarity index 100% rename from snippets/train_drive_human.tikz rename to doc/snippets/train_drive_human.tikz diff --git a/snippets/train_moving_backward.tikz b/doc/snippets/train_moving_backward.tikz similarity index 100% rename from snippets/train_moving_backward.tikz rename to doc/snippets/train_moving_backward.tikz diff --git a/snippets/train_moving_fast_backward.tikz b/doc/snippets/train_moving_fast_backward.tikz similarity index 100% rename from snippets/train_moving_fast_backward.tikz rename to doc/snippets/train_moving_fast_backward.tikz diff --git a/snippets/train_moving_fast_forward.tikz b/doc/snippets/train_moving_fast_forward.tikz similarity index 100% rename from snippets/train_moving_fast_forward.tikz rename to doc/snippets/train_moving_fast_forward.tikz diff --git a/snippets/train_moving_forward.tikz b/doc/snippets/train_moving_forward.tikz similarity index 100% rename from snippets/train_moving_forward.tikz rename to doc/snippets/train_moving_forward.tikz diff --git a/snippets/train_moving_slow_backward.tikz b/doc/snippets/train_moving_slow_backward.tikz similarity index 100% rename from snippets/train_moving_slow_backward.tikz rename to doc/snippets/train_moving_slow_backward.tikz diff --git a/snippets/train_moving_slow_forward.tikz b/doc/snippets/train_moving_slow_forward.tikz similarity index 100% rename from snippets/train_moving_slow_forward.tikz rename to doc/snippets/train_moving_slow_forward.tikz diff --git a/snippets/train_shunt_mode_backward.tikz b/doc/snippets/train_shunt_mode_backward.tikz similarity index 100% rename from snippets/train_shunt_mode_backward.tikz rename to doc/snippets/train_shunt_mode_backward.tikz diff --git a/snippets/train_shunt_mode_forward.tikz b/doc/snippets/train_shunt_mode_forward.tikz similarity index 100% rename from snippets/train_shunt_mode_forward.tikz rename to doc/snippets/train_shunt_mode_forward.tikz diff --git a/snippets/train_shunting_backward.tikz b/doc/snippets/train_shunting_backward.tikz similarity index 100% rename from snippets/train_shunting_backward.tikz rename to doc/snippets/train_shunting_backward.tikz diff --git a/snippets/train_shunting_forward.tikz b/doc/snippets/train_shunting_forward.tikz similarity index 100% rename from snippets/train_shunting_forward.tikz rename to doc/snippets/train_shunting_forward.tikz diff --git a/snippets/transmitter.tikz b/doc/snippets/transmitter.tikz similarity index 100% rename from snippets/transmitter.tikz rename to doc/snippets/transmitter.tikz diff --git a/snippets/transmitter_backward.tikz b/doc/snippets/transmitter_backward.tikz similarity index 100% rename from snippets/transmitter_backward.tikz rename to doc/snippets/transmitter_backward.tikz diff --git a/snippets/transmitter_below.tikz b/doc/snippets/transmitter_below.tikz similarity index 100% rename from snippets/transmitter_below.tikz rename to doc/snippets/transmitter_below.tikz diff --git a/snippets/transmitter_below_bidirectional.tikz b/doc/snippets/transmitter_below_bidirectional.tikz similarity index 100% rename from snippets/transmitter_below_bidirectional.tikz rename to doc/snippets/transmitter_below_bidirectional.tikz diff --git a/snippets/transmitter_below_forward.tikz b/doc/snippets/transmitter_below_forward.tikz similarity index 100% rename from snippets/transmitter_below_forward.tikz rename to doc/snippets/transmitter_below_forward.tikz diff --git a/snippets/transmitter_below_with_signal.tikz b/doc/snippets/transmitter_below_with_signal.tikz similarity index 100% rename from snippets/transmitter_below_with_signal.tikz rename to doc/snippets/transmitter_below_with_signal.tikz diff --git a/snippets/transmitter_bidirectional.tikz b/doc/snippets/transmitter_bidirectional.tikz similarity index 100% rename from snippets/transmitter_bidirectional.tikz rename to doc/snippets/transmitter_bidirectional.tikz diff --git a/snippets/transmitter_forward.tikz b/doc/snippets/transmitter_forward.tikz similarity index 100% rename from snippets/transmitter_forward.tikz rename to doc/snippets/transmitter_forward.tikz diff --git a/snippets/turnout_left_backward.tikz b/doc/snippets/turnout_left_backward.tikz similarity index 100% rename from snippets/turnout_left_backward.tikz rename to doc/snippets/turnout_left_backward.tikz diff --git a/snippets/turnout_left_backward_left_position.tikz b/doc/snippets/turnout_left_backward_left_position.tikz similarity index 100% rename from snippets/turnout_left_backward_left_position.tikz rename to doc/snippets/turnout_left_backward_left_position.tikz diff --git a/snippets/turnout_left_backward_moving_points.tikz b/doc/snippets/turnout_left_backward_moving_points.tikz similarity index 100% rename from snippets/turnout_left_backward_moving_points.tikz rename to doc/snippets/turnout_left_backward_moving_points.tikz diff --git a/snippets/turnout_left_backward_right_position.tikz b/doc/snippets/turnout_left_backward_right_position.tikz similarity index 100% rename from snippets/turnout_left_backward_right_position.tikz rename to doc/snippets/turnout_left_backward_right_position.tikz diff --git a/snippets/turnout_left_forward.tikz b/doc/snippets/turnout_left_forward.tikz similarity index 100% rename from snippets/turnout_left_forward.tikz rename to doc/snippets/turnout_left_forward.tikz diff --git a/snippets/turnout_left_forward_left_position.tikz b/doc/snippets/turnout_left_forward_left_position.tikz similarity index 100% rename from snippets/turnout_left_forward_left_position.tikz rename to doc/snippets/turnout_left_forward_left_position.tikz diff --git a/snippets/turnout_left_forward_moving_points.tikz b/doc/snippets/turnout_left_forward_moving_points.tikz similarity index 100% rename from snippets/turnout_left_forward_moving_points.tikz rename to doc/snippets/turnout_left_forward_moving_points.tikz diff --git a/snippets/turnout_left_forward_right_position.tikz b/doc/snippets/turnout_left_forward_right_position.tikz similarity index 100% rename from snippets/turnout_left_forward_right_position.tikz rename to doc/snippets/turnout_left_forward_right_position.tikz diff --git a/snippets/turnout_right_backward.tikz b/doc/snippets/turnout_right_backward.tikz similarity index 100% rename from snippets/turnout_right_backward.tikz rename to doc/snippets/turnout_right_backward.tikz diff --git a/snippets/turnout_right_backward_left_position.tikz b/doc/snippets/turnout_right_backward_left_position.tikz similarity index 100% rename from snippets/turnout_right_backward_left_position.tikz rename to doc/snippets/turnout_right_backward_left_position.tikz diff --git a/snippets/turnout_right_backward_moving_points.tikz b/doc/snippets/turnout_right_backward_moving_points.tikz similarity index 100% rename from snippets/turnout_right_backward_moving_points.tikz rename to doc/snippets/turnout_right_backward_moving_points.tikz diff --git a/snippets/turnout_right_backward_right_position.tikz b/doc/snippets/turnout_right_backward_right_position.tikz similarity index 100% rename from snippets/turnout_right_backward_right_position.tikz rename to doc/snippets/turnout_right_backward_right_position.tikz diff --git a/snippets/turnout_right_forward.tikz b/doc/snippets/turnout_right_forward.tikz similarity index 100% rename from snippets/turnout_right_forward.tikz rename to doc/snippets/turnout_right_forward.tikz diff --git a/snippets/turnout_right_forward_left_position.tikz b/doc/snippets/turnout_right_forward_left_position.tikz similarity index 100% rename from snippets/turnout_right_forward_left_position.tikz rename to doc/snippets/turnout_right_forward_left_position.tikz diff --git a/snippets/turnout_right_forward_moving_points.tikz b/doc/snippets/turnout_right_forward_moving_points.tikz similarity index 100% rename from snippets/turnout_right_forward_moving_points.tikz rename to doc/snippets/turnout_right_forward_moving_points.tikz diff --git a/snippets/turnout_right_forward_right_position.tikz b/doc/snippets/turnout_right_forward_right_position.tikz similarity index 100% rename from snippets/turnout_right_forward_right_position.tikz rename to doc/snippets/turnout_right_forward_right_position.tikz diff --git a/snippets/turnout_with_fouling_left_backward.tikz b/doc/snippets/turnout_with_fouling_left_backward.tikz similarity index 100% rename from snippets/turnout_with_fouling_left_backward.tikz rename to doc/snippets/turnout_with_fouling_left_backward.tikz diff --git a/snippets/turnout_with_fouling_left_forward.tikz b/doc/snippets/turnout_with_fouling_left_forward.tikz similarity index 100% rename from snippets/turnout_with_fouling_left_forward.tikz rename to doc/snippets/turnout_with_fouling_left_forward.tikz diff --git a/snippets/turnout_with_fouling_right_backward.tikz b/doc/snippets/turnout_with_fouling_right_backward.tikz similarity index 100% rename from snippets/turnout_with_fouling_right_backward.tikz rename to doc/snippets/turnout_with_fouling_right_backward.tikz diff --git a/snippets/turnout_with_fouling_right_forward.tikz b/doc/snippets/turnout_with_fouling_right_forward.tikz similarity index 100% rename from snippets/turnout_with_fouling_right_forward.tikz rename to doc/snippets/turnout_with_fouling_right_forward.tikz diff --git a/snippets/vehicle.tikz b/doc/snippets/vehicle.tikz similarity index 100% rename from snippets/vehicle.tikz rename to doc/snippets/vehicle.tikz diff --git a/snippets/vehicles.tikz b/doc/snippets/vehicles.tikz similarity index 100% rename from snippets/vehicles.tikz rename to doc/snippets/vehicles.tikz diff --git a/snippets/vehicles_with_label.tikz b/doc/snippets/vehicles_with_label.tikz similarity index 100% rename from snippets/vehicles_with_label.tikz rename to doc/snippets/vehicles_with_label.tikz diff --git a/snippets/view_point_backward.tikz b/doc/snippets/view_point_backward.tikz similarity index 100% rename from snippets/view_point_backward.tikz rename to doc/snippets/view_point_backward.tikz diff --git a/snippets/view_point_forward.tikz b/doc/snippets/view_point_forward.tikz similarity index 100% rename from snippets/view_point_forward.tikz rename to doc/snippets/view_point_forward.tikz diff --git a/symbology.pdf b/doc/symbology.pdf similarity index 100% rename from symbology.pdf rename to doc/symbology.pdf diff --git a/symbology.tex b/doc/symbology.tex similarity index 100% rename from symbology.tex rename to doc/symbology.tex diff --git a/doc/versionhistory.tex b/doc/versionhistory.tex new file mode 100644 index 0000000..6326b44 --- /dev/null +++ b/doc/versionhistory.tex @@ -0,0 +1,25 @@ +%!TEX TS-program = pdflatexmk +%!TEX root = doc.tex + +% Copyright 2018,2019 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. + +\begin{versionhistory} + %\vhEntry{}{}{||...}{} + \vhEntry{0.1}{2018-09-14}{MS}{ + Basic concept of a library with railway topology symbols and some examples. + } + \vhEntry{0.2}{2018-12-19}{MS}{ + Added transmitters and minor improvements. + } + \vhEntry{0.3}{2019-04-04}{MS}{ + Moved snippet folder to root folder and defined and used color foreground and background. + } + \vhEntry{0.4}{2019-07-21}{MS}{ + Reworked library for common tikz library layout. + } + \vhEntry{0.5}{2019-12-19}{MS}{ + Introduced new syntax. + } +\end{versionhistory} diff --git a/src/tikzlibrarytrackschematic.code.tex b/src/tikzlibrarytrackschematic.code.tex index fb61928..8170e3c 100644 --- a/src/tikzlibrarytrackschematic.code.tex +++ b/src/tikzlibrarytrackschematic.code.tex @@ -6,9 +6,32 @@ \ProvidesFileRCS{tikzlibrarytrackschematic.code.tex} +%%%%%%%%%%%%%%% +% global settings +%%%%%%%%%%%%%%% +\RequirePackage{tikz,xcolor} + +\colorlet{background}{white} +\colorlet{foreground}{black} + +\pgfkeys{% + /tikz/trackschematic/.is family,% + /tikz/trackschematic/.cd,% + %% face + face/.value required,% forward OR backward + face/.store in=\face, + /tikz/face/.forward to=/tikz/trackschematic/face,% + /tikz/forward/.code={\pgfkeys{/tikz/trackschematic/face=forward}},% + /tikz/backward/.code={\pgfkeys{/tikz/trackschematic/face=backward}},% + % +} + +%%%%%%%%%%%%%%% +% symbol definitions +%%%%%%%%%%%%%%% \usetikzlibrary{trackschematic.topology}% \usetikzlibrary{trackschematic.trafficcontrol}% \usetikzlibrary{trackschematic.vehicles}% -\usetikzlibrary{trackschematic.construction}% +\usetikzlibrary{trackschematic.constructions}% \endinput diff --git a/src/tikzlibrarytrackschematic.topology.code.tex b/src/tikzlibrarytrackschematic.topology.code.tex index d2cec05..d47ca35 100644 --- a/src/tikzlibrarytrackschematic.topology.code.tex +++ b/src/tikzlibrarytrackschematic.topology.code.tex @@ -6,237 +6,499 @@ \ProvidesFileRCS{tikzlibrarytrackschematic.topology.code.tex} -\colorlet{background}{white} -\colorlet{foreground}{black} +%%%%%%%%%%%%%%% +% local +%%%%%%%%%%%%%%% + +\RequirePackage{etoolbox} +\usetikzlibrary{calc,patterns,arrows.meta} + +%%%%%%%%%%%%%%% +% symbol track +%%%%%%%%%%%%%%% + +% tracks +\newcommand\maintrack{}% just for safety +\def\maintrack{\path[draw,MainTrack]}% +\newcommand\secondarytrack{}% just for safety +\def\secondarytrack{\path[draw,SecondaryTrack]}% +\newcommand\sidetrack{}% just for safety +\def\sidetrack{\path[draw,SecondaryTrack]}% alias for \secondarytrack \tikzset{MainTrack/.style={line width=2pt,foreground}}% \tikzset{SecondaryTrack/.style={line width=0.7pt,foreground}}% -\tikzset{ - pics/track_number/.default=, - pics/track_number/.style args={#1}{% - code={% - \node[fill=background,font=\sffamily,text=foreground] at (0,0) {#1}; % speed indicator - } - }, +%%%%%%%%%%%%%%% +% symbol track number +%%%%%%%%%%%%%%% + +%% command +\newcommand\tracklabel{}% just for safety +\def\tracklabel#1(#2)#3(#4){% \tracknumber[options] at (coord) label (name); + \pic at (#2) {track_label={#1/#3/#4}};% symbol +}% +%% tikz keys +% \pgfkeys{% +% /tikz/trackschematic/.is family,% +% /tikz/trackschematic/.cd,% +% }% +%% symbol definition +\tikzset{% + pics/track_label/.default=,% + pics/track_label/.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} + %% label + \node[fill=background,text=foreground] at (0,0) {\labelcontent};% label + }% + },% }% -\tikzset{ - pics/track_distance/.default=, - pics/track_distance/.style args={#1}{ - code={ - \fill[foreground] (0,0.96) -- ++(-0.1,-0.15) -- ++(0.2,0) -- cycle; % upper triangle - \node[baseline=(current bounding box.center),font=\sffamily,text=foreground] at (0,0.5) {#1}; % distance indicator - \fill[foreground] (0,0.04) -- ++(-0.1,0.15) -- ++(0.2,0) -- cycle; % lower triangle +%%%%%%%%%%%%%%% +% symbol track distance +%%%%%%%%%%%%%%% + +%% command +\newcommand\trackdistance{}% just for safety +\def\trackdistance#1(#2)#3(#4)#5(#6){% \trackdistance between (coord1) and (coord2) label (distance); + \path[draw=background,<->,>={Stealth[foreground,inset=0pt,angle=50:0.3cm]},shorten <=1pt,shorten >=1pt] (#2) -- (#4)% arrow tips + node[baseline=(current bounding box.center),text=foreground,midway,sloped,rotate=90] {#6};% label +}% + +%%%%%%%%%%%%%%% +% symbol turnout +%%%%%%%%%%%%%%% + +% command +\newcommand\turnout{}% just for safety +\def\turnout[#1]#2(#3)#4(#5){% \turnout[type] at (coord) label (name); + \pic[#1] at (#3) {turnout={#2/#4/#5}};% symbol +}% +% options +\newtoggle{fouling_point}\settoggle{fouling_point}{false} +\newtoggle{manual_operated}\settoggle{fouling_point}{false} +% tikz keys +\pgfkeys{% + /tikz/trackschematic/turnout/.is family,% + /tikz/trackschematic/turnout/.cd,% + % + %% branch + branch/.value required,% left OR right + branch/.store in=\branch,% left OR right + /tikz/branch/.forward to=/tikz/trackschematic/turnout/branch,% + % + %% fouling point + fouling point/.value forbidden,% + fouling point/.code={\settoggle{fouling_point}{true}},% + /tikz/fouling point/.forward to=/tikz/trackschematic/turnout/fouling point,% + % + %% points + points/.store in=\points,% moving, left, right OR none + points=none,% moving, left, right OR none + /tikz/points/.forward to=/tikz/trackschematic/turnout/points,% + % + %% manual operated + manual operated/.value forbidden,% + manual operated/.code={\settoggle{manual_operated}{true}},% + /tikz/manual operated/.forward to=/tikz/trackschematic/turnout/manual operated,% + % +}% +% symbol definition +\tikzset{% + pics/turnout/.default=, + pics/turnout/.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} + %% 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} + %% branch setup + \ifdefstring{\branch}{left}{% branch + \ifdefstring{\face}{forward}{% + \pgfmathsetmacro{\branchfactor}{1}% + }{% + \pgfmathsetmacro{\branchfactor}{-1}% + }% + }{% + \ifdefstring{\branch}{right}{% branch + \ifdefstring{\face}{forward}{% + \pgfmathsetmacro{\branchfactor}{-1}% + }{% + \pgfmathsetmacro{\branchfactor}{1}% + }% + }{% error message + \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/turnout/branch}{left OR right as key required}} + }% + }% end \ifdefstring{\branch} + %% turnout marker + \iftoggle{manual_operated}{% manual operated + \ifdefstring{\branch}{left}{% branch + \def\patterntype{north west lines}% + }{% + \def\patterntype{north east lines}% + }% + \path[draw,pattern=\patterntype, pattern color=foreground] (0,0) -- ++($\facefactor*(0.4,0)$) -- ++($\branchfactor*(0,0.4)$) -- cycle;% turnout marker + }{% operated automaticly + \path[fill=foreground] (0,0) -- ++($\facefactor*(0.4,0)$) -- ++($\branchfactor*(0,0.4)$) -- cycle;% turnout marker + }% + % + %% label + %TODO + % \ifdefstring{\labelcommand}{label}{% label + \node at ($\branchfactor*(0,-8pt)$) {\footnotesize \labelcontent};% + % }{ + % \node[red] at ($\branchfactor*(0,-8pt)$) {\tiny +\labelcommand+ != +label+};% + % }% + % + %% fouling point indicator + \iftoggle{fouling_point}{% + \path[draw=foreground] ($\facefactor*(0.7,0)$) -- ++($\branchfactor*(0,0.7)$);% fouling point indicator + }{}% + % + %% points + \ifdefstring{\points}{left}{% points left + \ifdefstring{\branch}{left}{% + \path[draw=foreground,line width=1.5pt] ($\facefactor*(-0.035,0) + \branchfactor*(0,0.1)$) -- ++($\branchfactor*(0.2,0.2)$);% + }{% + \path[draw=foreground,line width=1.5pt] ($\facefactor*( 0.035,0.1)$) -- ++($\facefactor*(0.265,0)$);% + }% + }{% + \ifdefstring{\points}{right}{% points right + \ifdefstring{\branch}{left}{% + \path[draw=foreground,line width=1.5pt] ($\facefactor*( 0.035,-0.1)$) -- ++($\facefactor*(0.265,0)$); + }{% + \path[draw=foreground,line width=1.5pt] ($\facefactor*(-0.035,0) + \branchfactor*(0,0.1)$) -- ++($\branchfactor*(-0.2,0.2)$);% + }% + }{% + \ifdefstring{\points}{moving}{% moving points + \fill[foreground] ($\facefactor*(0.075,0) + \branchfactor*(0,-0.1 )$) circle (0.05);% points indicator left + \fill[foreground] ($\facefactor*(0.225,0) + \branchfactor*(0,-0.1 )$) circle (0.05);% points indicator left + \fill[foreground] ($\facefactor*(0.015,0) + \branchfactor*(0, 0.15)$) circle (0.05);% points indicator right + \fill[foreground] ($\facefactor*(0.115,0) + \branchfactor*(0, 0.25)$) circle (0.05);% points indicator right + }{% error message + \ifdefstring{\points}{none}{% + }{% + \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/points}{left, right OR moving as key required}} + }% + }% + }% + }% end \ifdefstring{\points} + % + }},% end pics/turnout/.style args={#1/#2/#3} +}% + + +%%%%%%%%%%%%%%% +% symbol crossing - using parts of turnout +%%%%%%%%%%%%%%% + +\newcommand\crossing{}% just for safety +\def\crossing[#1]#2(#3)#4(#5){% \crossing[type] at (coord) label (name); + \pic[#1] at (#3) {crossing={#2/#4/#5}};% symbol +}% +% symbol definition +\tikzset{% + pics/crossing/.default=, + pics/crossing/.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} + %% face setup + %% branch setup + \ifdefstring{\branch}{left}{% branch + \pgfmathsetmacro{\branchfactor}{1}% + }{% + \ifdefstring{\branch}{right}{% branch + \pgfmathsetmacro{\branchfactor}{-1}% + }{% error message + \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/branch}{left OR right as key required}} + }% + }% + % + %% crossing marker + \path[draw=foreground] (0,0) -- ++( 0.4,0) -- ++($\branchfactor*(0, 0.4)$) -- cycle;% turnout marker + \path[draw=foreground] (0,0) -- ++(-0.4,0) -- ++($\branchfactor*(0,-0.4)$) -- cycle;% turnout marker + % + %% label + %TODO + % \ifdefstring{\labelcommand}{label}{% label + \node[right] at ($(2pt,0) + \branchfactor*(0,-9pt)$) {\footnotesize \labelcontent};% + % }{ + % \node[red] at ($\branchfactor*(0,-8pt)$) {\tiny +\labelcommand+ != +label+};% + % }% + % + %% fouling point indicator + \iftoggle{fouling_point}{% + \path[draw=foreground] ( 0.7,0) -- ++($\branchfactor*(0, 0.7)$);% fouling point indicator + \path[draw=foreground] (-0.7,0) -- ++($\branchfactor*(0,-0.7)$);% fouling point indicator + }{}% + % + }},% end of pics/crossing/.style args={#1/#2/#3}{ +}% + +%%%%%%%%%%%%%%% +% symbol slip switch turnout - using parts of turnout +%%%%%%%%%%%%%%% + +\newcommand\slipturnout{}% just for safety +\def\slipturnout[#1]#2(#3)#4(#5)(#6){% \crossing[type] at (coord) label (name); + \pic[slip=double,#1] at (#3) {slipturnout={#2/#4/#5/#6}};% symbol +}% +% tikz keys +\pgfkeys{% + /tikz/trackschematic/slipturnout/.is family,% + /tikz/trackschematic/slipturnout/.cd,% + % + %% points + forward points/.store in=\forwardpoints,% moving, left, right OR none + forward points=none,% moving, left, right OR none + /tikz/forward points/.forward to=/tikz/trackschematic/slipturnout/forward points,% + backward points/.store in=\backwardpoints,% moving, left, right OR none + backward points=none,% moving, left, right OR none + /tikz/backward points/.forward to=/tikz/trackschematic/slipturnout/backward points,% + % + %% slips + slip/.store in=\slip,% double, left, right OR none + slip=none,% double, left, right OR none + /tikz/slip/.forward to=/tikz/trackschematic/slipturnout/slip,% + % +}% +% symbol definition +\tikzset{% + pics/slipturnout/.default=, + pics/slipturnout/.style args={#1/#2/#3/#4}{code={ + %% settings + \def\coordcommand{#1} % beware of leading and tailing spaces! + \def\labelcommand{#2} % beware of leading and tailing spaces! + \def\labelcontentA{#3} + \def\labelcontentB{#4} + %% branch setup + \ifdefstring{\branch}{left}{% branch + \pgfmathsetmacro{\branchfactor}{1}% + }{% + \ifdefstring{\branch}{right}{% branch + \pgfmathsetmacro{\branchfactor}{-1}% + }{% error message + \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/turnout/branch}{left OR right as key required}} + }% + }% end \ifdefstring{\branch} + %% turnout marker + \iftoggle{manual_operated}{% manual operated + \ifdefstring{\branch}{left}{% branch + \def\patterntype{north west lines}% + }{% + \def\patterntype{north east lines}% + }% + \path[draw,pattern=\patterntype, pattern color=foreground] (0,0) -- ++($( 0.4,0)$) -- ++($\branchfactor*(0, 0.4)$) -- cycle;% turnout marker + \path[draw,pattern=\patterntype, pattern color=foreground] (0,0) -- ++($(-0.4,0)$) -- ++($\branchfactor*(0,-0.4)$) -- cycle;% turnout marker + }{% operated automaticly + \path[fill=foreground] (0,0) -- ++($( 0.4,0)$) -- ++($\branchfactor*(0, 0.4)$) -- cycle;% turnout marker + \path[fill=foreground] (0,0) -- ++($(-0.4,0)$) -- ++($\branchfactor*(0,-0.4)$) -- cycle;% turnout marker } - }, -} + % + %% label + %TODO + % \ifdefstring{\labelcommand}{label}{% label + \node[right] at ($(2pt,0) + \branchfactor*(0,-9pt)$) {\footnotesize \labelcontentA};% + \node[left] at ($(2pt,0) + \branchfactor*(0,10pt)$) {\footnotesize \labelcontentB};% + % }{ + % \node[red] at ($\branchfactor*(0,-8pt)$) {\tiny +\labelcommand+ != +label+};% + % }% + % + %% fouling point indicator + \iftoggle{fouling_point}{% + \path[draw=foreground] ( 0.7,0) -- ++($\branchfactor*(0, 0.7)$);% fouling point indicator + \path[draw=foreground] (-0.7,0) -- ++($\branchfactor*(0,-0.7)$);% fouling point indicator + }{}% + % + %% points + \ifdefstring{\forwardpoints}{left}{% points left + \ifdefstring{\branch}{left}{% + \path[draw=foreground,line width=1.5pt] (-0.035,0.1) -- ++(0.2,0.2);% + }{% + \path[draw=foreground,line width=1.5pt] ( 0.035,0.1) -- ++(0.265,0);% + }% + }{% + \ifdefstring{\forwardpoints}{right}{% points right + \ifdefstring{\branch}{left}{% + \path[draw=foreground,line width=1.5pt] ( 0.035,-0.1) -- ++(0.265,0); + }{% + \path[draw=foreground,line width=1.5pt] (-0.035,-0.1) -- ++(0.2,-0.2);% + }% + }{% + \ifdefstring{\forwardpoints}{moving}{% moving points + \fill[foreground] ($(0.075,0) + \branchfactor*(0,-0.1 )$) circle (0.05);% points indicator left + \fill[foreground] ($(0.225,0) + \branchfactor*(0,-0.1 )$) circle (0.05);% points indicator left + \fill[foreground] ($(0.015,0) + \branchfactor*(0, 0.15)$) circle (0.05);% points indicator right + \fill[foreground] ($(0.115,0) + \branchfactor*(0, 0.25)$) circle (0.05);% points indicator right + }{% error message + \ifdefstring{\forwardpoints}{none}{% + }{% + \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/slipturnout/forward points}{left, right OR moving as key required}} + }% + }% + }% + }% end of \ifdefstring{\forwardpoints} + \ifdefstring{\backwardpoints}{left}{% points left + \ifdefstring{\branch}{left}{% + \path[draw=foreground,line width=1.5pt] (0.035,-0.1) -- ++(-0.2,-0.2);% + }{% + \path[draw=foreground,line width=1.5pt] (-0.035,-0.1) -- ++(-0.265,0);% + }% + }{% + \ifdefstring{\backwardpoints}{right}{% points right + \ifdefstring{\branch}{left}{% + \path[draw=foreground,line width=1.5pt] (-0.035,0.1) -- ++(-0.265,0); + }{% + \path[draw=foreground,line width=1.5pt] (0.035,0.1) -- ++(-0.2,0.2);% + }% + }{% + \ifdefstring{\backwardpoints}{moving}{% moving points + \fill[foreground] ($(-0.075,0) + \branchfactor*(0, 0.1 )$) circle (0.05);% points indicator left + \fill[foreground] ($(-0.225,0) + \branchfactor*(0, 0.1 )$) circle (0.05);% points indicator left + \fill[foreground] ($(-0.015,0) + \branchfactor*(0,-0.15)$) circle (0.05);% points indicator right + \fill[foreground] ($(-0.115,0) + \branchfactor*(0,-0.25)$) circle (0.05);% points indicator right + }{% error message + \ifdefstring{\backwardpoints}{none}{% + }{% + \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/slipturnout/forward points}{left, right OR moving as key required}} + }% + }% + }% + }% end of \ifdefstring{\backwardpoints} + % + %% slips + \ifdefstring{\slip}{double}{% slip + \path[draw=foreground,line width=0.75pt] ($\branchfactor*(-0.4,0) + (0, 0.1)$) -- ($\branchfactor*( 0.3,0) + (0, 0.4)$);% slip + \path[draw=foreground,line width=0.75pt] ($\branchfactor*( 0.4,0) + (0,-0.1)$) -- ($\branchfactor*(-0.3,0) + (0,-0.4)$);% slip + }{% + \ifdefstring{\slip}{left}{% + \path[draw=foreground,line width=0.75pt] ($\branchfactor*(-0.4,0) + (0,0.1)$) -- ($\branchfactor*(0.3,0) + (0,0.4)$);% slip + }{% + \ifdefstring{\slip}{right}{% + \path[draw=foreground,line width=0.75pt] ($\branchfactor*(0.4,0) + (0,-0.1)$) -- ($\branchfactor*(-0.3,0) + (0,-0.4)$);% slip + }{% + \ifdefstring{\slip}{none}{% + % + }{%error message + \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/slipturnout/slip}{double, left, right OR none as key required}} + }% + }% + }% + }% + % + }},% end of pics/slipturnout/.style args={#1/#2/#3/#4}{ +}% -\tikzset{ - pics/turnout_left_forward/.default=foreground, - pics/turnout_left_forward/.style args={#1}{ - code={ - \path[draw=foreground,line width=1pt,fill=#1] (0,0) -- ++(0.4,0.4) -- ++(0,-0.4); % turnout marker - } - }, -} -\tikzset{ - pics/turnout_left_backward/.default=foreground, - pics/turnout_left_backward/.style args={#1}{ - code={ - \path[draw=foreground,line width=1pt,fill=#1] (0,0) -- ++(-0.4,-0.4) -- ++(0,0.4); % turnout marker - } - }, -} +%%%%%%%%%%%%%%% +% symbol derailer +%%%%%%%%%%%%%%% -\tikzset{ - pics/turnout_right_forward/.default=foreground, - pics/turnout_right_forward/.style args={#1}{ - code={ - \path[draw=foreground,line width=1pt,fill=#1] (0,0) -- ++(0.4,-0.4) -- ++(0,0.4); % turnout marker - } - }, -} - -\tikzset{ - pics/turnout_right_backward/.default=foreground, - pics/turnout_right_backward/.style args={#1}{ - code={ - \path[draw=foreground,line width=1pt,fill=#1] (0,0) -- ++(-0.4,0.4) -- ++(0,-0.4); % turnout marker - } - }, -} - -\tikzset{ - fouling_point_right_backward/.pic={ - \path[draw=foreground,line width=0.75pt] (-0.7,0) -- ++(0,0.7); % fouling point indicator - }; -} - -\tikzset{ - fouling_point_left_backward/.pic={ - \path[draw=foreground,line width=0.75pt] (-0.7,0) -- ++(0,-0.7); % fouling point indicator - }; -} - -\tikzset{ - fouling_point_right_forward/.pic={ - \path[draw=foreground,line width=0.75pt] (0.7,0) -- ++(0,-0.7); % fouling point indicator - }; -} - -\tikzset{ - fouling_point_left_forward/.pic={ - \path[draw=foreground,line width=0.75pt] (0.7,0) -- ++(0,0.7); % fouling point indicator - }; -} - -\tikzset{ - slip_left_forward/.pic={ - \path[draw=foreground,line width=0.75pt] (-0.4,0.1) -- (0.3,0.4); % fouling point indicator - }; -} - -\tikzset{ - slip_left_backward/.pic={ - \path[draw=foreground,line width=0.75pt] (-0.3,-0.4) -- (0.4,-0.1); % fouling point indicator - }; -} - -\tikzset{ - slip_right_forward/.pic={ - \path[draw=foreground,line width=0.75pt] (-0.4,-0.1) -- (0.3,-0.4); % fouling point indicator - }; -} - -\tikzset{ - slip_right_backward/.pic={ - \path[draw=foreground,line width=0.75pt] (0.4,0.1) -- (-0.3,0.4); % fouling point indicator - }; -} -\tikzset{ - turnout_left_forward_points_right/.pic={ - \path[draw=foreground,line width=1.5pt] (0,-0.1) -- ++(0.3,0); % points indicator - }; -} - -\tikzset{ - turnout_left_forward_points_left/.pic={ - \path[draw=foreground,line width=1.5pt] (-0.035, 0.1) -- ++(0.2,0.2); % points indicator - }; -} - -\tikzset{ - turnout_left_forward_points_moving/.pic={ - \fill[foreground] (0.075,-0.1) circle (0.05); % points indicator left - \fill[foreground] (0.225,-0.1) circle (0.05); - \fill[foreground] (0.015, 0.15) circle (0.05); % points indicator right - \fill[foreground] (0.115, 0.25) circle (0.05); - }; -} - -\tikzset{ - turnout_left_backward_points_right/.pic={ - \path[draw=foreground,line width=1.5pt] (0,0.1) -- ++(-0.3,0); % points indicator - }; -} - -\tikzset{ - turnout_left_backward_points_left/.pic={ - \path[draw=foreground,line width=1.5pt] (0.035,-0.1) -- ++(-0.2,-0.2); % points indicator - }; -} - -\tikzset{ - turnout_left_backward_points_moving/.pic={ - \fill[foreground] (-0.075,0.1) circle (0.05); % points indicator left - \fill[foreground] (-0.225,0.1) circle (0.05); - \fill[foreground] (-0.015,-0.15) circle (0.05); % points indicator right - \fill[foreground] (-0.115,-0.25) circle (0.05); - }; -} - -\tikzset{ - turnout_right_forward_points_right/.pic={ - \path[draw=foreground,line width=1.5pt] (-0.035,-0.1) -- ++(0.2,-0.2); % points indicator - }; -} - -\tikzset{ - turnout_right_forward_points_left/.pic={ - \path[draw=foreground,line width=1.5pt] (0,0.1) -- ++(0.3,0); % points indicator - }; -} - -\tikzset{ - turnout_right_forward_points_moving/.pic={ - \fill[foreground] (0.075, 0.1) circle (0.05); % points indicator left - \fill[foreground] (0.225, 0.1) circle (0.05); - \fill[foreground] (0.015,-0.15) circle (0.05); % points indicator right - \fill[foreground] (0.115,-0.25) circle (0.05); - }; -} - -\tikzset{ - turnout_right_backward_points_right/.pic={ - \path[draw=foreground,line width=1.5pt] (0.035,0.1) -- ++(-0.2,0.2); % points indicator - }; -} - -\tikzset{ - turnout_right_backward_points_left/.pic={ - \path[draw=foreground,line width=1.5pt] (0,-0.1) -- ++(-0.3,0); % points indicator - }; -} - -\tikzset{ - turnout_right_backward_points_moving/.pic={ - \fill[foreground] (-0.075,-0.1) circle (0.05); % points indicator left - \fill[foreground] (-0.225,-0.1) circle (0.05); - \fill[foreground] (-0.015,0.15) circle (0.05); % points indicator right - \fill[foreground] (-0.115,0.25) circle (0.05); - }; -} - -\tikzset{ - derailer_right_forward/.pic={ +% command +\newcommand\derailer{}% just for safety +\def\derailer[#1]#2(#3)#4(#5){% \bufferstop[options] at (coord) label (name); + \pic[#1] at (#3) {derailer={#2/#4/#5}};% symbol +}% +% symbol definition +\tikzset{% + pics/derailer/.default=,% + pics/derailer/.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} + %% 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} + %% branch setup + \ifdefstring{\branch}{left}{% branch + \ifdefstring{\face}{forward}{% + \pgfmathsetmacro{\branchfactor}{1}% + }{% + \pgfmathsetmacro{\branchfactor}{-1}% + }% + }{% + \ifdefstring{\branch}{right}{% branch + \ifdefstring{\face}{forward}{% + \pgfmathsetmacro{\branchfactor}{-1}% + }{% + \pgfmathsetmacro{\branchfactor}{1}% + }% + }{% error message + \pgfkeys{/errors/unknown choice value={/tikz/trackschematic/turnout/branch}{left OR right as key required}} + }% + }% end \ifdefstring{\branch} + %% symbol \path[draw=foreground, line width=1pt] (0,0.2) -- ++(0,-0.4); % derailer marker - \path[draw=foreground,->,>=latex,line width=1pt,dashed] (0,0) -- ++(0.4,-0.4); % derailer arrow - }; -} + \path[draw=foreground,->,>=latex,line width=1pt,dashed] (0,0) -- ++($\facefactor*(0.4,0) + \branchfactor*(0,0.4)$); % derailer arrow + }},% +}% -\tikzset{ - derailer_right_backward/.pic={ - \path[draw=foreground, line width=1pt] (0,0.2) -- ++(0,-0.4); % derailer marker - \path[draw=foreground,->,>=latex,line width=1pt,dashed] (0,0) -- ++(-0.4,0.4); % derailer arrow - }; -} +%%%%%%%%%%%%%%% +% symbol buffer stop +%%%%%%%%%%%%%%% -\tikzset{ - derailer_left_forward/.pic={ - \path[draw=foreground, line width=1pt] (0,0.2) -- ++(0,-0.4); % derailer marker - \path[draw=foreground,->,>=latex,line width=1pt,dashed] (0,0) -- ++(0.4,0.4); % derailer arrow - }; -} - -\tikzset{ - derailer_left_backward/.pic={ - \path[draw=foreground, line width=1pt] (0,0.2) -- ++(0,-0.4); % derailer marker - \path[draw=foreground,->,>=latex,line width=1pt,dashed] (0,0) -- ++(-0.4,-0.4); % derailer arrow - }; -} - -\tikzset{ - bufferstop_forward/.pic={ - \path[draw=foreground, line width=1pt] (-0.1,0.2) -- ++(0.1,0) -- ++(0,-0.4) -- ++ (-0.1,0); % bufferstop marker - }; -} - -\tikzset{ - bufferstop_backward/.pic={ - \path[draw=foreground, line width=1pt] (0.1,0.2) -- ++(-0.1,0) -- ++(0,-0.4) -- ++ (0.1,0); % bufferstop marker - }; -} +% command +\newcommand\bufferstop{}% just for safety +\def\bufferstop[#1]#2(#3){% \bufferstop[options] at (coord); + \pic[#1] at (#3) {bufferstop={#2}};% symbol +}% +\newlength{\friction}\setlength{\friction}{0cm} +% tikz keys +\pgfkeys{% + /tikz/trackschematic/bufferstop/.is family,% + /tikz/trackschematic/bufferstop/.cd,% + % + %% points + friction/.store in=\friction,% length OR none + friction=none,% length OR none + /tikz/friction/.forward to=/tikz/trackschematic/bufferstop/friction,% + % +}% +% symbol definition +\tikzset{% + pics/bufferstop/.default=,% + pics/bufferstop/.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 + \ifdefstring{\friction}{none}{% friction + \path[draw=foreground, line width=1pt] ($\facefactor*(-0.1,0) + (0,0.2)$) -- ++($\facefactor*( 0.1,0)$) -- ++(0,-0.4) -- ++ ($\facefactor*(-0.1,0)$); % bufferstop marker + }{ + \path[draw=foreground, line width=1pt] ($\facefactor*(-\friction,0) + \facefactor*( 0.1,0) + (0,0.2)$) -- ++($\facefactor*(-0.1,0)$) -- ++(0,-0.4) -- ++ ($\facefactor*( 0.1,0)$); % bufferstop marker + } + }},% +}% +%%%%%%%%%%%%%%% \endinput diff --git a/test/crossing.tikz b/test/crossing.tikz new file mode 100644 index 0000000..080c0c8 --- /dev/null +++ b/test/crossing.tikz @@ -0,0 +1,58 @@ +%!TEX TS-program = pdflatexmk +%!TEX root = test.tex + +% Copyright 2019 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. + +\node[blue] at (4,0) {\large test crossings}; + +\foreach \i in {1,2}{% base coordinate + \coordinate (A\i) at ($(0,0) + 2*(0,-\i)$);% base coordinate + \coordinate (B\i) at ($(8,0) + 2*(0,-\i)$);% base coordinate +} + +\foreach \i in {1}{% draw main tracks on base coordinate + \maintrack (A\i) -- (B\i); +} + +\foreach \i in {2}{% draw secondary tracks on base coordinate + \secondarytrack (A\i) -- (B\i); +} + +\foreach \i in {1,2}{% coordinates for testing symbols + \coordinate (X\i-1) at ($(1,0) + 2*(0,-\i)$); + \coordinate (X\i-2) at ($(3,0) + 2*(0,-\i)$); + \coordinate (X\i-3) at ($(5,0) + 2*(0,-\i)$); + \coordinate (X\i-4) at ($(7,0) + 2*(0,-\i)$); +} + +\foreach \i in {1}{% coordinates for testing symbols + \maintrack (X\i-1) -- ++( 0.75,-0.75); + \maintrack (X\i-1) -- ++(-0.75, 0.75); + \maintrack (X\i-2) -- ++( 0.75, 0.75); + \maintrack (X\i-2) -- ++(-0.75,-0.75); + \maintrack (X\i-3) -- ++( 0.75,-0.75); + \maintrack (X\i-3) -- ++(-0.75, 0.75); + \maintrack (X\i-4) -- ++( 0.75, 0.75); + \maintrack (X\i-4) -- ++(-0.75,-0.75); +} +\foreach \i in {2}{% coordinates for testing symbols + \secondarytrack (X\i-1) -- ++( 0.75,-0.75); + \secondarytrack (X\i-1) -- ++(-0.75, 0.75); + \secondarytrack (X\i-2) -- ++( 0.75, 0.75); + \secondarytrack (X\i-2) -- ++(-0.75,-0.75); + \secondarytrack (X\i-3) -- ++( 0.75,-0.75); + \secondarytrack (X\i-3) -- ++(-0.75, 0.75); + \secondarytrack (X\i-4) -- ++( 0.75, 0.75); + \secondarytrack (X\i-4) -- ++(-0.75,-0.75); +} + +\crossing[branch=right] at (X1-1) label (X1-1); +\crossing[branch=left ] at (X1-2) label (X1-2); +\crossing[branch=right,fouling point] at (X1-3) label (X1-3); +\crossing[branch=left ,fouling point] at (X1-4) label (X1-4); + +\crossing[branch=right] at (X2-1) label (X2-1); +\crossing[branch=left ] at (X2-2) label (X2-2); +\crossing[branch=right,fouling point] at (X2-3) label (X2-3); +\crossing[branch=left ,fouling point] at (X2-4) label (X2-4); diff --git a/test/misc_topology.tikz b/test/misc_topology.tikz new file mode 100644 index 0000000..29fd88c --- /dev/null +++ b/test/misc_topology.tikz @@ -0,0 +1,45 @@ +%!TEX TS-program = pdflatexmk +%!TEX root = test.tex + +% Copyright 2019 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. + +\node[blue] at (4,0) {\large test misc. topology symbols}; + +\foreach \i in {1,2,...,3}{% base coordinate + \coordinate (A\i) at ($(0,0) + 2*(0,-\i)$);% base coordinate + \coordinate (B\i) at ($(8,0) + 2*(0,-\i)$);% base coordinate +} + +\foreach \i in {1}{% draw main tracks on base coordinate + \maintrack (A\i) -- (B\i); +} + +\foreach \i in {2,3}{% draw secondary tracks on base coordinate + \secondarytrack (A\i) -- (B\i); +} + +\foreach \i in {1,2,...,3}{% coordinates for testing symbols + \coordinate (X\i-1) at ($(1,0) + 2*(0,-\i)$); + \coordinate (X\i-2) at ($(3,0) + 2*(0,-\i)$); + \coordinate (X\i-3) at ($(5,0) + 2*(0,-\i)$); + \coordinate (X\i-4) at ($(7,0) + 2*(0,-\i)$); +} + +\tracklabel at (X1-1) label (12); +\tracklabel at (X1-3) label (really long text); +\tracklabel at (X2-2) label (22); +\trackdistance between (X1-2) and (X2-3) label (\SI[math-rm=\mathsf]{6,50}{\metre}); +\trackdistance between (X1-4) and (X2-4) label (4,50); + +\derailer[forward ,branch=left ] at (X3-1) label (X3-1); +\derailer[backward,branch=left ] at (X3-2) label (X3-2); +\derailer[forward ,branch=right] at (X3-3) label (X3-3); +\derailer[backward,branch=right] at (X3-4) label (X3-4); + +\bufferstop[backward] at (A1); +\bufferstop[forward] at (B1); +\bufferstop[backward,friction=.5] at (A2); +\bufferstop[forward ,friction=.5] at (B2); +\bufferstop[backward] at (A3); +\bufferstop[forward] at (B3); \ No newline at end of file diff --git a/test/slipturnout.tikz b/test/slipturnout.tikz new file mode 100644 index 0000000..d064b60 --- /dev/null +++ b/test/slipturnout.tikz @@ -0,0 +1,94 @@ +%!TEX TS-program = pdflatexmk +%!TEX root = test.tex + +% Copyright 2019 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. + +\node[blue] at (4,0) {\large test slip turnouts}; + +\foreach \i in {1,2,...,9}{% base coordinate + \coordinate (A\i) at ($(0,0) + 2*(0,-\i)$);% base coordinate + \coordinate (B\i) at ($(8,0) + 2*(0,-\i)$);% base coordinate +} + +\foreach \i in {1,2,...,6}{% draw main tracks on base coordinate + \maintrack (A\i) -- (B\i); +} + +\foreach \i in {7,8,...,9}{% draw secondary tracks on base coordinate + \secondarytrack (A\i) -- (B\i); +} + +\foreach \i in {1,2,...,9}{% coordinates for testing symbols + \coordinate (X\i-1) at ($(1,0) + 2*(0,-\i)$); + \coordinate (X\i-2) at ($(3,0) + 2*(0,-\i)$); + \coordinate (X\i-3) at ($(5,0) + 2*(0,-\i)$); + \coordinate (X\i-4) at ($(7,0) + 2*(0,-\i)$); +} + +\foreach \i in {1,2,...,6}{% coordinates for testing symbols + \maintrack (X\i-1) -- ++( 0.75,-0.75); + \maintrack (X\i-1) -- ++(-0.75, 0.75); + \maintrack (X\i-2) -- ++( 0.75, 0.75); + \maintrack (X\i-2) -- ++(-0.75,-0.75); + \maintrack (X\i-3) -- ++( 0.75,-0.75); + \maintrack (X\i-3) -- ++(-0.75, 0.75); + \maintrack (X\i-4) -- ++( 0.75, 0.75); + \maintrack (X\i-4) -- ++(-0.75,-0.75); +} + +\foreach \i in {7,8,...,9}{% coordinates for testing symbols + \secondarytrack (X\i-1) -- ++( 0.75,-0.75); + \secondarytrack (X\i-1) -- ++(-0.75, 0.75); + \secondarytrack (X\i-2) -- ++( 0.75, 0.75); + \secondarytrack (X\i-2) -- ++(-0.75,-0.75); + \secondarytrack (X\i-3) -- ++( 0.75,-0.75); + \secondarytrack (X\i-3) -- ++(-0.75, 0.75); + \secondarytrack (X\i-4) -- ++( 0.75, 0.75); + \secondarytrack (X\i-4) -- ++(-0.75,-0.75); +} + +\slipturnout[branch=right] at (X1-1) label (X1-1a)(X1-1b); +\slipturnout[branch=left ] at (X1-2) label (X1-2a)(X1-2b); +\slipturnout[branch=right,slip=none,fouling point] at (X1-3) label (X1-3a)(X1-3b); +\slipturnout[branch=left ,slip=none,fouling point] at (X1-4) label (X1-4a)(X1-4b); + +\slipturnout[branch=right,slip=left ,fouling point] at (X2-1) label (X2-1a)(X2-1b); +\slipturnout[branch=left ,slip=left ,fouling point] at (X2-2) label (X2-2a)(X2-2b); +\slipturnout[branch=right,slip=right,fouling point] at (X2-3) label (X2-3a)(X2-3b); +\slipturnout[branch=left ,slip=right,fouling point] at (X2-4) label (X2-4a)(X2-4b); + +\slipturnout[branch=right,forward points=right,backward points=left] at (X3-1) label (X3-1a)(X3-1b); +\slipturnout[branch=left ,forward points=right,backward points=left] at (X3-2) label (X3-2a)(X3-2b); +\slipturnout[branch=right,forward points=right,backward points=left] at (X3-3) label (X3-3a)(X3-3b); +\slipturnout[branch=left ,forward points=right,backward points=left] at (X3-4) label (X3-4a)(X3-4b); + +\slipturnout[branch=right,forward points=left,backward points=right] at (X4-1) label (X4-1a)(X4-1b); +\slipturnout[branch=left ,forward points=left,backward points=right] at (X4-2) label (X4-2a)(X4-2b); +\slipturnout[branch=right,forward points=left,backward points=right] at (X4-3) label (X4-3a)(X4-3b); +\slipturnout[branch=left ,forward points=left,backward points=right] at (X4-4) label (X4-4a)(X4-4b); + +\slipturnout[branch=right,forward points=right,backward points=right] at (X5-1) label (X5-1a)(X5-1b); +\slipturnout[branch=left ,forward points=left ,backward points=left] at (X5-2) label (X5-2a)(X5-2b); +\slipturnout[branch=right,forward points=left ,backward points=left ] at (X5-3) label (X5-3a)(X5-3b); +\slipturnout[branch=left ,forward points=right,backward points=right] at (X5-4) label (X5-4a)(X5-4b); + +\slipturnout[branch=right,forward points=moving,backward points=moving] at (X6-1) label (X6-1a)(X6-1b); +\slipturnout[branch=left ,forward points=moving,backward points=moving] at (X6-2) label (X6-2a)(X6-2b); +\slipturnout[branch=right,manual operated] at (X6-3) label (X6-3a)(X6-3b); +\slipturnout[branch=left ,manual operated] at (X6-4) label (X6-4a)(X6-4b); + +\slipturnout[branch=right,manual operated] at (X7-1) label (X7-1a)(X7-1b); +\slipturnout[branch=left ,manual operated] at (X7-2) label (X7-2a)(X7-2b); +\slipturnout[branch=right,manual operated,fouling point] at (X7-3) label (X7-3a)(X7-3b); +\slipturnout[branch=left ,manual operated,fouling point] at (X7-4) label (X7-4a)(X7-4b); + +\slipturnout[branch=right,manual operated,slip=right] at (X8-1) label (X8-1a)(X8-1b); +\slipturnout[branch=left ,manual operated,slip=right] at (X8-2) label (X8-2a)(X8-2b); +\slipturnout[branch=right,manual operated,slip=left ] at (X8-3) label (X8-3a)(X8-3b); +\slipturnout[branch=left ,manual operated,slip=left ] at (X8-4) label (X8-4a)(X8-4b); + +\slipturnout[branch=right,slip=right] at (X9-1) label (X9-1a)(X9-1b); +\slipturnout[branch=left ,slip=right] at (X9-2) label (X9-2a)(X9-2b); +\slipturnout[branch=right,slip=left ] at (X9-3) label (X9-3a)(X9-3b); +\slipturnout[branch=left ,slip=left ] at (X9-4) label (X9-4a)(X9-4b); diff --git a/test/test.pdf b/test/test.pdf new file mode 100644 index 0000000000000000000000000000000000000000..37d20b4823b98c5326fc219a5a2ee4bfe8c262b0 GIT binary patch literal 68366 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 Az5oCK literal 0 HcmV?d00001 diff --git a/test/test.tex b/test/test.tex new file mode 100644 index 0000000..8ed633e --- /dev/null +++ b/test/test.tex @@ -0,0 +1,26 @@ +%!TEX TS-program = pdflatexmk + +% Copyright 2019 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. + +\documentclass[tikz,border=2]{standalone} + +\usepackage{lmodern,siunitx} +\usepackage[prefix=]{xcolor-solarized} + +\usetikzlibrary{trackschematic} + +\begin{document} + \begin{tikzpicture}[font=\sffamily] + \input{turnout.tikz} + \end{tikzpicture} + \begin{tikzpicture}[font=\sffamily] + \input{crossing.tikz} + \end{tikzpicture} + \begin{tikzpicture}[font=\sffamily] + \input{slipturnout.tikz} + \end{tikzpicture} + \begin{tikzpicture}[font=\sffamily] + \input{misc_topology.tikz} + \end{tikzpicture} +\end{document} \ No newline at end of file diff --git a/test/turnout.tikz b/test/turnout.tikz new file mode 100644 index 0000000..398e1ed --- /dev/null +++ b/test/turnout.tikz @@ -0,0 +1,83 @@ +%!TEX TS-program = pdflatexmk +%!TEX root = test.tex + +% Copyright 2019 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. + +\node[blue] at (4,0) {\large test turnouts}; + +\foreach \i in {1,2,...,10}{% base coordinate + \coordinate (A\i) at ($(0,0) + 2*(0,-\i)$); + \coordinate (B\i) at ($(8,0) + 2*(0,-\i)$); +} + +\foreach \i in {1,2,...,5}{% draw main tracks on base coordinate + \maintrack (A\i) -- (B\i); +} + +\foreach \i in {6,7,...,10}{% draw secondary tracks on base coordinate + \secondarytrack (A\i) -- (B\i); +} + +\foreach \i in {1,2,...,10}{% coordinates for testing symbols + \coordinate (Y\i-1) at ($(1,0) + 2*(0,-\i)$); + \coordinate (Y\i-2) at ($(3,0) + 2*(0,-\i)$); + \coordinate (Y\i-3) at ($(5,0) + 2*(0,-\i)$); + \coordinate (Y\i-4) at ($(7,0) + 2*(0,-\i)$); +} + +\foreach \i in {1,2,...,5}{% coordinates for testing symbols + \maintrack (Y\i-1) -- ++( 0.75, 0.75); + \maintrack (Y\i-2) -- ++(-0.75,-0.75); + \maintrack (Y\i-3) -- ++( 0.75,-0.75); + \maintrack (Y\i-4) -- ++(-0.75, 0.75); +} + +\foreach \i in {6,7,...,10}{% coordinates for testing symbols + \secondarytrack (Y\i-1) -- ++( 0.75, 0.75); + \secondarytrack (Y\i-2) -- ++(-0.75,-0.75); + \secondarytrack (Y\i-3) -- ++( 0.75,-0.75); + \secondarytrack (Y\i-4) -- ++(-0.75, 0.75); +} + +\turnout[forward ,branch=left ] at (Y1-1) label (Y1-1); +\turnout[backward,branch=left ] at (Y1-2) label (Y1-2); +\turnout[forward ,branch=right] at (Y1-3) label (Y1-3); +\turnout[backward,branch=right] at (Y1-4) label (Y1-4); +\turnout[forward ,branch=left ,fouling point] at (Y2-1) label (Y2-1); +\turnout[backward,branch=left ,fouling point] at (Y2-2) label (Y2-2); +\turnout[forward ,branch=right,fouling point] at (Y2-3) label (Y2-3); +\turnout[backward,branch=right,fouling point] at (Y2-4) label (Y2-4); +\turnout[forward ,branch=left ,points=right] at (Y3-1) label (Y3-1); +\turnout[backward,branch=left ,points=right] at (Y3-2) label (Y3-2); +\turnout[forward ,branch=right,points=right] at (Y3-3) label (Y3-3); +\turnout[backward,branch=right,points=right] at (Y3-4) label (Y3-4); +\turnout[forward ,branch=left ,points=left ] at (Y4-1) label (Y4-1); +\turnout[backward,branch=left ,points=left ] at (Y4-2) label (Y4-2); +\turnout[forward ,branch=right,points=left ] at (Y4-3) label (Y4-3); +\turnout[backward,branch=right,points=left ] at (Y4-4) label (Y4-4); +\turnout[forward ,branch=left ,points=moving] at (Y5-1) label (Y5-1); +\turnout[backward,branch=left ,points=moving] at (Y5-2) label (Y5-2); +\turnout[forward ,branch=right,points=moving] at (Y5-3) label (Y5-3); +\turnout[backward,branch=right,points=moving] at (Y5-4) label (Y5-4); + +\turnout[forward ,branch=left ,manual operated] at (Y6-1) label (Y6-1); +\turnout[backward,branch=left ,manual operated] at (Y6-2) label (Y6-2); +\turnout[forward ,branch=right,manual operated] at (Y6-3) label (Y6-3); +\turnout[backward,branch=right,manual operated] at (Y6-4) label (Y6-4); +\turnout[forward ,branch=left ,manual operated,fouling point] at (Y7-1) label (Y7-1); +\turnout[backward,branch=left ,manual operated,fouling point] at (Y7-2) label (Y7-2); +\turnout[forward ,branch=right,manual operated,fouling point] at (Y7-3) label (Y7-3); +\turnout[backward,branch=right,manual operated,fouling point] at (Y7-4) label (Y7-4); +\turnout[forward ,branch=left ,manual operated,points=right] at (Y8-1) label (Y8-1); +\turnout[backward,branch=left ,manual operated,points=right] at (Y8-2) label (Y8-2); +\turnout[forward ,branch=right,manual operated,points=right] at (Y8-3) label (Y8-3); +\turnout[backward,branch=right,manual operated,points=right] at (Y8-4) label (Y8-4); +\turnout[forward ,branch=left ,manual operated,points=left ] at (Y9-1) label (Y9-1); +\turnout[backward,branch=left ,manual operated,points=left ] at (Y9-2) label (Y9-2); +\turnout[forward ,branch=right,manual operated,points=left ] at (Y9-3) label (Y9-3); +\turnout[backward,branch=right,manual operated,points=left ] at (Y9-4) label (Y9-4); +\turnout[forward ,branch=left ,manual operated,points=moving] at (Y10-1) label (Y10-1); +\turnout[backward,branch=left ,manual operated,points=moving] at (Y10-2) label (Y10-2); +\turnout[forward ,branch=right,manual operated,points=moving] at (Y10-3) label (Y10-3); +\turnout[backward,branch=right,manual operated,points=moving] at (Y10-4) label (Y10-4);