summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/wargame/source/natoapp6c/shape.dtx')
-rw-r--r--macros/latex/contrib/wargame/source/natoapp6c/shape.dtx647
1 files changed, 647 insertions, 0 deletions
diff --git a/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx b/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
new file mode 100644
index 0000000000..029be911b7
--- /dev/null
+++ b/macros/latex/contrib/wargame/source/natoapp6c/shape.dtx
@@ -0,0 +1,647 @@
+% \iffalse
+% --------------------------------------------------------------------
+%<*natoapp6c>
+% \fi
+% \subsubsection{Text \texttt{natoapp6c} namespace}
+%
+% \begin{NatoAppKey}{/natoapp6c}
+%
+% Here, we set up the key path \spec{/natoapp6c}
+%
+% \begin{macrocode}
+\def\natoapp@report{}
+\tikzset{
+ /natoapp6c/.search also={/tikz},
+ /natoapp6c/.cd,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \subsubsubsection{Choices of faction, command, and echelon}
+%
+% \begin{NatoAppKey}{natoapp6c/id,
+% natoapp6c/fac,
+% natoapp6c/cmd,
+% natoapp6c/ech}
+%
+% The keys \spec{id}, spec{fac}, \spec{cmd}, and \spec{ech} are
+% internal keys used to store the choice of faction, command, and
+% echelon, respectively, in.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ id/.store in=\natoapp@id,
+ fac/.store in=\natoapp@fac,
+ cmd/.store in=\natoapp@cmd,
+ ech/.store in=\natoapp@ech,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/faction}
+%
+% Choice of \meta{faction}. This is limited to predefined values.
+% The choice is stored in the key \spec{natoapp6c/fac}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ faction/.is choice,
+ faction/none/.code={\let\natoapp@fac\@undefined},
+ faction/friendly/.style={fac=friendly},
+ faction/friend/.style={fac=friendly},
+ faction/hostile/.style={fac=hostile},
+ faction/enemy/.style={fac=hostile},
+ faction/neutral/.style={fac=neutral},
+ faction/unknown/.style={fac=unknown},
+ faction/?/.style={fac=unknown},
+ faction/.initial=friendly,
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/command}
+%
+% Choice of \meta{command}. This is limited to predefined values.
+% The choice is stored in the key \spec{natoapp6c/cmd}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ command/.is choice,
+ command/base/.style={cmd=base},
+ command/activity/.style={cmd=activity},
+ command/air/.style={cmd=air},
+ command/missile/.style={cmd=air},
+ command/equipment/.style={cmd=equipment},
+ command/installation/.style={cmd=installation},
+ command/land/.style={cmd=land},
+ command/sea surface/.style={cmd=sea surface},
+ command/space/.style={cmd=space},
+ command/sub surface/.style={cmd=sub surface},
+ command/sea mine/.style={cmd=sub surface},
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/echolon}
+%
+% Unit size. The choice is limited to one of the below. The choice
+% is stored in the key \spec{natoapp6c/ech}.
+%
+% \begin{macrocode}
+\tikzset{
+ /natoapp6c/.cd,
+ echelon/.is choice,
+ echelon/none/.style={ech=},
+ echelon/team/.style={ech=},
+ echelon/squad/.style={ech=squad},
+ echelon/section/.style={ech=section},
+ echelon/platoon/.style={ech=platoon},
+ echelon/company/.style={ech=company},
+ echelon/battalion/.style={ech=battalion},
+ echelon/regiment/.style={ech=regiment},
+ echelon/brigade/.style={ech=brigade},
+ echelon/division/.style={ech=division},
+ echelon/corps/.style={ech=corps},
+ echelon/army/.style={ech=army},
+ echelon/army group/.style={ech=army group},
+ echelon/theatre/.style={ech=theatre},
+ echelon/command/.style={ech=command},
+ echelon/dummy/.style={ech=dummy},
+}
+% \end{macrocode}
+% \end{NatoAppKey}
+%
+% \begin{NatoAppKey}{natoapp6c/main,
+% natoapp6c/left,
+% natoapp6c/right,
+% natoapp6c/top,
+% natoapp6c/bottom,
+% natoapp6c/below,
+% natoapp6c/frame}
+% \begin{Macro}{\natoapp@main,
+% \natoapp@left,
+% \natoapp@right,
+% \natoapp@upper,
+% \natoapp@lower,
+% \natoapp@below}
+%
+% The various parts of the symbols. The keys \spec{upper} and
+% \spec{lower} are aliases for \spec{top} and \spec{bottom},
+% respectively. The choices are stored in macros
+%
+% \begin{macrocode}
+\newif\ifnatoapp@decoy\natoapp@decoyfalse
+\tikzset{
+ /natoapp6c/.cd,
+ main/.store in=\natoapp@main, main/.initial=,%
+ left/.store in=\natoapp@left, left/.initial=,%
+ right/.store in=\natoapp@right, right/.initial=,%
+ upper/.store in=\natoapp@upper, upper/.initial=,%
+ lower/.store in=\natoapp@lower, lower/.initial=,%
+ top/.store in=\natoapp@upper,%
+ bottom/.store in=\natoapp@lower,%
+ below/.store in=\natoapp@below, below/.initial=,%
+ frame/.store in=\natoapp@frame, frame/.initial=,%
+ decoy/.is if=natoapp@decoy,%
+}
+% \end{macrocode}
+% \end{Macro}
+% \end{NatoAppKey}
+%
+% \begin{TikzKey}{/tikz/natoapp6c/main,
+% /tikz/natoapp6c/modifiers,
+% /tikz/natoapp6c/lower,
+% /tikz/natoapp6c/upper,
+% /tikz/natoapp6c/left,
+% /tikz/natoapp6c/right,
+% /tikz/natoapp6c/echelon,
+% /tikz/natoapp6c/below}
+%
+% Styles used by the various parts of the symbol.
+%
+% \begin{macrocode}
+\tikzset{
+ natoapp6c/parts/.style={draw,shape=rectangle,transform shape},
+ natoapp6c/main/.style={natoapp6c/parts},
+ natoapp6c/modifiers/.style={natoapp6c/parts,scale=.6},
+ natoapp6c/lower/.style={natoapp6c/parts},
+ natoapp6c/upper/.style={natoapp6c/parts},
+ natoapp6c/left/.style={natoapp6c/parts},
+ natoapp6c/right/.style={natoapp6c/parts},
+ natoapp6c/echelon/.style={natoapp6c/parts},
+ natoapp6c/below/.style={natoapp6c/parts}
+}
+% \end{macrocode}
+% \end{TikzKey}
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+%
+% \subsubsection{The \texttt{natoapp6c} styles}
+%
+% \begin{TikzKey}{/tikz/natoapp6c}
+% This key sets up a node to make a NATO App6(c) symbol. The key
+% takes a single argument which in turn must contain key--value
+% pairs in the \texttt{/natoapp6c} (or \texttt{/tikz}) namespace(s). We
+% set the \texttt{shape} parameter of the node, and calls the passed
+% keys in the \texttt{/natoapp6c} namespace to set-up elements of the
+% chit.
+%
+% \begin{macrocode}
+\tikzset{%
+ natoapp6c/.code={%
+ \pgfkeys{/tikz/transform shape,/tikz/shape=natoapp6c}
+ \pgfkeys{/natoapp6c/.cd,#1}}}
+% \end{macrocode}
+% \end{TikzKey}
+%
+% We define a counter to set-up unique names for symbol nodes.
+%
+% \begin{macrocode}
+\newcounter{natoappid}\setcounter{natoappid}{0}
+% \end{macrocode}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{natoapp6c} shape}
+%
+% \begin{Macro}{\ifn@to@pp@below,\ifn@to@pp@mod}
+%
+% We define an \cs{if} to allow us to detect if something is
+% rendered below the frame
+%
+% \begin{macrocode}
+\newif\ifn@to@pp@below\n@to@pp@belowfalse%
+\newif\ifn@to@pp@mod\n@to@pp@modfalse%
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{NatoAppFrame}{natoapp6c}
+%
+% Next, we define the mother shape of NATO App6(c) nodes. This is a
+% composite node with sub-nodes for the various parts (including the
+% frame) of the symbol.
+%
+% It is quite complex so we will go through the implementation in
+% bits.
+%
+% First, we make some saved anchors (the centre) and macros
+% (identifier, frame type, and frame options).
+%
+% \begin{macrocode}
+\pgfdeclareshape{natoapp6c}{%
+ \savedanchor\center{\pgf@x=0cm\pgf@y=0cm}
+ \savedmacro\id{%
+ \n@to@pp@dbg{3}{NATO App6(c) id (set): \meaning\natoapp@id}
+ \@ifundefined{natoapp@id}{\let\natoapp@id\pgfutil@empty}{}%
+ \ifx\natoapp@id\pgfutil@empty\relax%
+ \wg@r@ndom@id%
+ \edef\id{natoapp6c\wg@uuid}%
+ \else%
+ \edef\id{\natoapp@id}%
+ \fi%
+ \n@to@pp@dbg{3}{NATO App6(c) id: \meaning\id}}
+ \savedmacro\frameshape{%
+ \let\frameshape\pgfutil@empty%
+ \@ifundefined{natoapp@cmd}{\def\frameshape{base}}{%
+ \edef\frameshape{\natoapp@cmd}
+ \@ifundefined{natoapp@fac}{\def\frameshape{base}}{%
+ \edef\frameshape{\natoapp@fac\space\frameshape}}}
+ \n@to@pp@dbg{3}{NATO App6(c) frame shape: \meaning\frameshape}}
+ \savedmacro\frameopt{%
+ \let\frameopt\pgfutil@empty%
+ \@ifundefined{natoapp@frame}{}{%
+ \edef\frameopt{\natoapp@frame}}
+ \n@to@pp@dbg{3}{NATO App6(c) Frame options: \meaning\frameopt}%
+ }
+% \end{macrocode}
+%
+% Then we define a number of regular anchors
+%
+% \begin{macrocode}
+ \anchor{center} {\center}
+% \end{macrocode}
+%
+% The remaining anchors depend on the shape being used. We reference
+% the anchors of the embedded node of the frame.
+%
+% \begin{macrocode}
+ \anchor{north east}{\wg@sub@nchor{M\id}{north east}}
+ \anchor{north west}{\wg@sub@nchor{M\id}{north west}}
+ \anchor{south east}{\wg@sub@nchor{M\id}{south east}}
+ \anchor{south west}{\wg@sub@nchor{M\id}{south west}}
+ \anchor{north} {\wg@sub@nchor{M\id}{north}}
+ \anchor{west} {\wg@sub@nchor{M\id}{west}}
+ \anchor{south} {\wg@sub@nchor{M\id}{south}}
+ \anchor{east} {\wg@sub@nchor{M\id}{east}}
+ \anchor{upper} {\wg@sub@nchor{M\id}{upper}}
+ \anchor{lower} {\wg@sub@nchor{M\id}{lower}}
+ \anchor{left} {\wg@sub@nchor{M\id}{left}}
+ \anchor{right} {\wg@sub@nchor{M\id}{right}}
+% \end{macrocode}
+%
+% The next two anchors are a little funny.
+%
+% \begin{macrocode}
+ \anchor{echelon} {%
+ \n@to@pp@dbg{3}{NATO App6(c) get echelon anchor}%
+ \wg@sub@nchor{M\id}{north}%
+ \wg@tmpa=\n@to@pp@e@y cm%
+ \advance\pgf@y\wg@tmpa%
+ }%
+ \anchor{below} {%
+ \n@to@pp@dbg{3}{NATO App6(c) get below anchor}%
+ \wg@sub@nchor{M\id}{south}
+ \wg@tmpa=\n@to@pp@e@yy cm%
+ \advance\pgf@y-\wg@tmpa}
+% \end{macrocode}
+%
+% All right, so time to make the actual frame. Note that we do this
+% in a `behind' path so we can actually draw stuff. First, we flag
+% that we're not in a modifier, nor in the `below' part.
+%
+% \begin{macrocode}
+ \behindbackgroundpath{%
+ \n@to@pp@dbg{3}{NATO App6(c) background path: \meaning\id
+ ^^J ID: \meaning\natoapp@id
+ ^^J Faction: \meaning\natoapp@fac
+ ^^J Command: \meaning\natoapp@cmd
+ ^^J Echelon: \meaning\natoapp@ech
+ ^^J Main: \meaning\natoapp@main
+ ^^J Left: \meaning\natoapp@left
+ ^^J Right: \meaning\natoapp@right
+ ^^J Upper: \meaning\natoapp@upper
+ ^^J Lower: \meaning\natoapp@lower
+ ^^J Below: \meaning\natoapp@below
+ ^^J Shape: \meaning\frameshape
+ ^^J Options: \meaning\frameopt}
+ \natoapp@report
+ \n@to@pp@modfalse
+ \n@to@pp@belowfalse
+% \end{macrocode}
+%
+% If the symbol is empty, then do nothing.
+%
+% \begin{macrocode}
+ \ifx\frameshape\pgfutil@empty%
+ \n@to@pp@dbg{2}{NATO App6(c) has no frame!}
+ \else
+% \end{macrocode}
+%
+% We start a scope because we want to do some clipping here. Then, we
+% use the frame to clip the remaining part. Note that we do this via
+% a node which we give the identifier \spec{M}. Various elements of
+% the symbol can then refer to this shape to define paths, etc.
+%
+% \begin{macrocode}
+ \begin{scope}
+ \pgfinterruptboundingbox
+ %% Clip to shape in scope
+ %% \message{^^JClipping to NATO App6(c) shape}
+ \n@to@pp@iscliptrue%
+ \n@to@pp@dbg{2}{NATO App6(c) frame node M (clip)}
+ \pgfnode{natoapp6c \frameshape}{center}{}{M}{\pgfusepath{clip}}
+ \n@to@pp@isclipfalse%
+% \end{macrocode}
+%
+% Next, we should see if we need to fill the frame. We do that by
+% expanding the passed \spec{frame} key-values in a scope, and
+% \emph{then} get the fill colour.
+%
+% \begin{macrocode}
+ %% Start new scope including frame key options
+ \edef\tmp@opt{[\frameopt]}
+ \expandafter\scope\tmp@opt
+ % Get fill color {possibly from frame key}
+ \expandafter\let\expandafter\tmp@fill%
+ \csname\string\color@pgffillcolor\endcsname%
+% \end{macrocode}
+%
+% If the fill colour is not \cs{relax}, then we fill the frame. Note
+% that this is done in the background, so when we draw in the
+% foreground we will render on top of the fill.
+%
+% \begin{macrocode}
+ % Check if we need to fill shape (fill colour us not \relax)
+ \ifx\tmp@fill\relax\else%
+ \n@to@pp@dbg{2}{NATO App6(c) frame fill}
+ \pgfnode{natoapp6c \frameshape}{center}{}{}{\pgfusepath{fill}}%
+ \fi%
+ % End the fill scope
+ \endscope%
+% \end{macrocode}
+%
+% Now we need to render some of the elements of the symbol. We start
+% with the main elements. We can specify many main elements (to make
+% composite symbols).
+%
+% \begin{macrocode}
+ % Render mains
+ \@ifundefined{natoapp@main}{}{
+ \n@to@pp@dbg{2}{NATO App6(c) mains: \meaning\natoapp@main}
+ \begin{scope}[natoapp6c/main]
+ \wg@pic@all{\natoapp@main}{natoapp6c/s/}{M.center}{natoapp6c/main}%
+ \end{scope}}%
+ % Modififiers flagged
+% \end{macrocode}
+%
+% The next thing is to render the various modifiers. We start by
+% flagging this globally.
+%
+% \begin{macrocode}
+ \n@to@pp@modtrue
+ \n@to@pp@dbg{2}{NATO App6(c) modifiers}
+% \end{macrocode}
+%
+% Below we render the lower, upper, left, and right elements. This is
+% all done in the same way. Note that the elements positions are
+% dictated by anchors of the frame shape (via shape identifier
+% \spec{M}).
+%
+% \begin{macrocode}
+ % Render lowers
+ \@ifundefined{natoapp@lower}{}{%
+ \begin{scope}%
+ \wg@pic@all{\natoapp@lower}{natoapp6c/s/}{M.lower}{%
+ natoapp6c/modifiers,natoapp6c/lower}%
+ \end{scope}}%
+ % Render uppers
+ \@ifundefined{natoapp@upper}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@upper}{natoapp6c/s/}{M.upper}{%
+ natoapp6c/modifiers,natoapp6c/upper}%
+ \end{scope}}%
+ % Render lefts
+ \@ifundefined{natoapp@left}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@left}{natoapp6c/s/}{M.left}{%
+ natoapp6c/modifiers,natoapp6c/left}%
+ \end{scope}}%
+ % Render rights
+ \@ifundefined{natoapp@right}{}{%
+ \begin{scope}[]
+ \wg@pic@all{\natoapp@right}{natoapp6c/s/}{M.right}{%
+ natoapp6c/modifiers,natoapp6c/right}%
+ \end{scope}}%
+ % Modififiers end
+ \n@to@pp@modfalse%
+ \endpgfinterruptboundingbox
+ \end{scope}%
+ \fi%
+ }
+% \end{macrocode}
+%
+% That concludes rendering most of the symbol. We have not put in the
+% echelon, below element, or drawn the frame yet. That we will do on
+% the foreground path.
+%
+% \begin{macrocode}
+% \end{macrocode}
+%
+% In the foreground `behind' path we render the echelon, below
+% element, and draw the frame.
+%
+% \begin{macrocode}
+ \behindforegroundpath{%
+ \n@to@pp@dbg{2}{NATO App6(c) foreground path:
+ ^^J Echelon: \meaning\natoapp@ech
+ ^^J Symbol: \meaning\frameshape
+ ^^J Below: \meaning\natoapp@below
+ ^^J Frame: \meaning\frameopt}
+ %
+% \end{macrocode}
+%
+% We check if we have a frame. If not, stop.
+%
+% \begin{macrocode}
+ \ifx\frameshape\pgfutil@empty%
+ \n@to@pp@dbg{2}{NATO App6(c) has no frame shape!}%
+ \else%
+% \end{macrocode}
+%
+% We want to draw the rest of the symbol as a part of the frame, so we
+% expand the \spec{frame} options in a scope.
+%
+% \begin{macrocode}
+
+ \edef\tmp@opt{[\frameopt]}
+ \expandafter\scope\tmp@opt
+% \end{macrocode}
+%
+% First thing in this scope is to draw the actual frame. Again, this
+% is done via a node with the right shape. Note that we label this
+% node as \spec{M}\meta{id} so we way refer to it later on.
+%
+% \begin{macrocode}
+ \n@to@pp@dbg{2}{NATO App6(c) inner node `M\id' ===}
+ \pgfnode{natoapp6c \frameshape}{center}{}{M\id}{\pgfusepath{stroke}}
+% \end{macrocode}
+%
+% If the user gave an echelon, then put that in. Note that echelons
+% are limited to predefined values.
+%
+% \begin{macrocode}
+ % Put in the echelon
+ \@ifundefined{natoapp@ech}{}{%
+ \ifx\natoapp@ech\pgfutil@empty\else%
+ \def\args{echelon=\natoapp@ech}
+ \expandafter\wg@pic\args\@endwg@pic%
+ {natoapp6c/s/}{$(M.north)+(0,1.2*\n@to@pp@e@y)$}{natoapp6c/echelon}
+ \fi%
+ }
+% \end{macrocode}
+%
+% If the user want something under the frame, put that in.
+%
+% \begin{macrocode}
+ % Put in stuff below main
+ \@ifundefined{natoapp@below}{}{%
+ \n@to@pp@belowtrue
+ \begin{scope}
+ \wg@pic@all{\natoapp@below}{natoapp6c/s/}{%
+ $(M.south)+(0,-\n@to@pp@e@yy)$}{%
+ natoapp6c/below}%
+ \end{scope}%
+ \n@to@pp@belowfalse}
+% \end{macrocode}
+%
+% If the \spec{decoy} flag was set, we draw that.
+%
+% \begin{macrocode}
+ \ifnatoapp@decoy%
+ \scope[dash pattern=on 3\pgflinewidth off 2\pgflinewidth]%
+ \n@to@pp@dbg{1}{Drawing decoy modifier}%
+ \wg@sub@nchor{M\id}{north east}
+ \wg@tmpa=\pgf@x%
+ \wg@tmpb=\pgf@y%
+ \pgfpathmoveto{\pgfqpoint{\wg@tmpa}{\wg@tmpb}}%
+ \wg@tmpc=\n@to@pp@e@yy cm%
+ \advance\wg@tmpc\n@to@pp@e@yy cm%
+ \advance\wg@tmpc\wg@tmpb%
+ \pgfpathlineto{\pgfqpoint{0cm}{\wg@tmpc}}%
+ \pgfpathlineto{\pgfqpoint{-\wg@tmpa}{\wg@tmpb}}%
+ \pgfusepath{stroke}%
+ \endscope%
+ \fi%
+ \endscope%
+ \fi%
+ }
+}
+% \end{macrocode}
+%
+% That finished the shape for NATO App6(c) symbols. We could stop
+% here, but for convenience we define a wrapper macro.
+%
+% \end{NatoAppFrame}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{The \cs{natoapp} wrapper macro}
+%
+% \begin{Macro}{\natoapp}
+%
+% This is a wrapper macro for inserting a node with a NATO App6(c)
+% symbol in it. The syntax of the macro is
+%
+% \begin{Syntax}
+% \cs{natoapp}\oarg{natoapp6c options}\parg{position}\parg{identifier};
+% \end{Syntax}
+%
+% Note that the trailing semi-colon (\spec{;}) is optional.
+%
+% This macro forwards to \cs{n@toapp}.
+%
+% \begin{macrocode}
+\newcommand\natoapp[1][]{%
+ \n@to@pp@dbg{2}{NATO App6(c) macro -> `#1'}
+ \tikzset{/natoapp6c/.cd,faction=friendly,command=land}%
+ \@ifnextchar({\n@toapp{#1}}{\n@toapp{#1}(0,0)}%)
+}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\n@toapp}
+%
+% This macro takes care to parse the location argument --- if any.
+% It forwards to \cs{n@to@pp}.
+%
+% \begin{macrocode}
+\def\n@toapp#1(#2){%
+ \n@to@pp@dbg{2}{NATO App6(c) second macro -> `#1', `#2'}
+ \@ifnextchar({\n@to@pp{#1}{#2}}{\n@to@pp{#1}{#2}()}%)
+}
+% \end{macrocode}
+% \end{Macro}
+%
+%
+% \begin{Macro}{\n@to@pp}
+% This is the main work-horse of the wrapper. It makes a node with
+% the shape \spec{natoapp6c} passing the relevant parameters. The
+% syntax of the macro is
+%
+% \begin{macrocode}
+\def\n@to@pp#1#2(#3){%
+ %\let\name\pgfutil@empty%
+ %\ifx|#3|\else\edef\name{(#3)}\fi%
+ %\n@to@pp@dbg{3}{Arguments: #1}%
+ %\edef\args{[natoapp6c={#1},transform shape] \name at (#2) {}}
+ %\expandafter\node\args;%
+ \node[draw,transform shape,natoapp6c={#1}] (#3) at (#2) {};%
+ \@ifnextchar;{\@gobble}{}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \iffalse
+% --------------------------------------------------------------------
+% \fi
+% \subsubsection{Macros for markings}
+%
+% \begin{Macro}{\natoappmark}
+%
+% A macro for making NATO App6(c) markings.
+%
+% \begin{macrocode}
+\providecommand\natoappmark[2][]{%
+ \tikz[scale=.25,#1]{\natoapp[faction=friendly,command=land,main=#2]}}
+% \end{macrocode}
+% \end{Macro}
+%
+% \begin{Macro}{\echelonmark}
+% \begin{macrocode}
+\providecommand\echelonmark[2][]{\tikz[scale=.5,#1]{%
+ \pic[scale line widths,line width=1pt] {natoapp6c/s/echelon=#2};}}
+% \end{macrocode}
+% \end{Macro}
+%
+% Some specific NATO App6(c) markers.
+%
+% \begin{macrocode}
+\DeclareRobustCommand\armouredmark[1][]{\natoappmark[#1]{armoured}}
+\DeclareRobustCommand\infantrymark[1][]{\natoappmark[#1]{infantry}}
+\DeclareRobustCommand\artillerymark[1][]{%
+ \natoappmark[#1]{{[fill=pgfstrokecolor]artillery}}}
+\DeclareRobustCommand\combinedmark[1][]{\natoappmark[#1]{combined arms}}
+\DeclareRobustCommand\pgmark[1][] {\natoappmark[#1]{{armoured,infantry}}}
+\DeclareRobustCommand\reconnaissancemark[1][]{\natoappmark[#1]{reconnaissance}}
+\DeclareRobustCommand\corpsmark[1][]{\natoappmark[#1]{,echelon=corps}}
+\DeclareRobustCommand\divisionmark[1][]{\natoappmark[#1]{,echelon=division}}
+\DeclareRobustCommand\brigademark[1][] {\natoappmark[#1]{,echelon=brigade}}
+\DeclareRobustCommand\regimentmark[1][]{\natoappmark[#1]{,echelon=regiment}}
+\DeclareRobustCommand\sofmark[1][] {\natoappmark[#1]{{infantry,text=SOF}}}
+\DeclareRobustCommand\mountaineermark[1][]{%
+ \natoappmark[#1]{infantry,lower=mountain}}
+\DeclareRobustCommand\airbornemark[1][]{%
+ \natoappmark[#1]{infantry,lower=airborne}}
+\DeclareRobustCommand\amphibiousmark[1][]{\natoappmark[#1]{,lower=amphibious}}
+\DeclareRobustCommand\airassaultmark[1][]{%
+ \natoappmark[#1]{infantry,upper=air assault}}
+% \end{macrocode}
+% \iffalse
+% </natoapp6c>
+% --------------------------------------------------------------------
+% \fi