diff options
Diffstat (limited to 'macros/latex/contrib/wargame/source/wargame.dtx')
-rw-r--r-- | macros/latex/contrib/wargame/source/wargame.dtx | 2455 |
1 files changed, 2455 insertions, 0 deletions
diff --git a/macros/latex/contrib/wargame/source/wargame.dtx b/macros/latex/contrib/wargame/source/wargame.dtx new file mode 100644 index 0000000000..a2e7d06a94 --- /dev/null +++ b/macros/latex/contrib/wargame/source/wargame.dtx @@ -0,0 +1,2455 @@ +% \iffalse +%<*driver> +% This is the preamp used in various documents +\documentclass{ltxdoc} +%<symbols>\usepackage[noterrainpic]{wgdoc} +%<!symbols>\usepackage{wgdoc} +%</driver> +%\fi +%\iffalse +%<*doc> +% This is for the main documentation +\usepackage{wgdoc} +\input{testmap} +\input{testchits} +\usetikzlibrary{external} +\tikzexternalize[prefix=cache/] +\CodelineIndex +\EnableCrossrefs +\DisableCrossrefs +\DoNotIndex{\a,\advance,\args,\bfseries,\breakforeach,\cc,\ccc, + \divide,\def,\h,\filldraw,\node,\path,\RequirePackage,\ProvidesPackage, + \Large,\large,\huge,\Huge,\normalsize,\tiny, + \long,\n,\mc,\o,\p, + \usetikzlibrary,\draw,\foreach,\fv,\tikzinputsegmentfirst, + \tikzinputsegmentsupporta,\tikzinputsegmentsupportb, + \tikzinputsegmentlast,\pgfmathparse,\pgfpoint,\edef,\pgfmathresult, + \relax,\ifx,\else,\fi,\definecolor,\tikz,\tikzset,\tikzstyle, + \maxdimen,\pgfseteorule,\message,\global,\clip,\let,\end,\begin, + \sffamily,\selectfont,\fontsize,\DeclareTextFontCommand, + \selectfont,\define@key,\pgf@x,\pgf@y,\xdef,\expandafter,\@ifundefined, + \pgfpointxy,\csname,\endcsname,\pgfpointadd,\fill,\@empty,\@ifnextchar, + \@undefined,\@undefinedb,\arrow,\b,\c,\color,\fontfamily,\fontseries, + \gdef,\i,\k,\m,\newcommand,\newcount,\newif,\newlength + \pgf@pathmaxx,\pgf@pathminx,\pgf@pathmaxy,\pgf@pathminy, + \pgf@picmaxx,\pgf@picminx,\pgf@picmaxy,\pgf@picminy, + \pgf@relevantforpicturesizefalse,\pgf@relevantforpicturesizetrue, + \pic,\r,\setkeys,\setlength,\show,\t,\temp,\the, + \tikzdeclarecoordinatesystem,\tmp@x,\tmp@y,\v,\x,\y} +%% \OnlyDescription +\def\PrintMacroName#1{} +\def\PrintEnvName#1{} +\title{The \textsf{wargame} package} +\author{Christian Holm Christensen} +\date{\today} +\begin{document} +\maketitle +\begin{abstract} + This package provides tools to typesetting manuals, board, and + counters for wargames using \LaTeX{}. + + Licensed under + \href{http://creativecommons.org/licenses/by-sa/4.0}{Creative + Commons Attribution-ShareAlike International License, version 4} + \tikz[scale=.2,transform shape]{\pic{cc by sa};}. +\end{abstract} +\tableofcontents +\wargamedbglvl=0 +\hexdbglvl=0 +\chitdbglvl=0 +\natoappdbglvl=0 +% To avoid: Package multicol Error: Error saving partial page. +\setlength{\IndexMin}{100pt} +\DocInput{wargame.dtx} +\end{document} +%</doc> +%\fi +% +% \iffalse +% ==================================================================== +% +% Documentation +% +% ==================================================================== +% \fi +% +% \newif\ifShowSymbols\ShowSymbolsfalse +% \newif\ifShowCompat\ShowCompatfalse +% +% \iffalse +% -------------------------------------------------------------------- +% +% Introduction +% +% -------------------------------------------------------------------- +% \fi +% +% \section{Introduction} +% +% This package provides tools for typesetting classic, hex-based +% wargames. The package allows an author to design a board, or map, +% comprised of hex, using a relatively simple interface. Units are +% typeset using a similar interface. Unit types are identified using +% the NATO Joint Military Symbology \cite{app6c} standard. +% +% \iffalse +% -------------------------------------------------------------------- +% +% Hexes +% +% -------------------------------------------------------------------- +% \fi +% +% \section{Hex Boards} +% +% The package provides a number of facilities to set-up a board +% comprised of hexagon fields (``hexes''). +% +% \subsection{Placing hexes} +% +% A hex can be added to the current \texttt{tikzpicture} using the +% macro \cs{hex}. It takes up to 4 arguments +% +% \begin{MacroSyntax}{\hex} +% \cs{hex}\oarg{key-value-pairs}\parg{location}\parg{name} +% \end{MacroSyntax} +% +% The \meta{key-value-pairs} specify the hex. Valid options are +% \begin{description} +% \item[\keyval{terrain}{\meta{terrain-keys}}] specifies the terrain +% of the hex. More on in this in +% \sectionname~\ref{sec:hex:terrain}. +% \item[\keyval{ridges}{\meta{ridges-keys}}] specifies where ridges +% are drawn in the hex. \sectionname~\ref{sec:hex:ridges}. +% \item[\keyval{label}{\meta{label-keys}}] specifies the how to output +% the hex label, if any. This is expanded upon in +% \sectionname~\ref{sec:hex:label}. +% \item[\keyval{town}{\meta{town-keys}}] specifies that a town (or +% similar) is present in the hex. The various keys are described in +% \sectionname~\ref{sec:hex:town}. +% \item[\keyval{extra}{\meta{extra-keyx}} \textrm{and} \keyval{extra +% clipped}{\meta{extra-keyx}}] allows the user to put custom +% graphics in the hexes. See also \sectionname~\ref{sec:hex:extra} +% for more. +% \item any style key defined for \TikZ{} pictures. +% \end{description} +% +% The \meta{location} argument specifies the coordinates, in the hex +% coordinate system where to put the hex. More about the coordinate +% system is given in \sectionname~\ref{sec:hex:cs}. Note, the numbers +% starts from the lower--left corner. +% +% The elements are rendered in the following order +% \begin{enumerate} +% \item The terrain, clipped to the hex shape. +% \item The hex, including circumference and fill +% \item The ridges, if any +% \item The label, if any +% \item Extra graphics clipped to the hex +% \item Town, if any +% \item Extra graphics which may extend beyond the confines of the +% hex. +% \end{enumerate} +% +% \figurename~\ref{fig:hex:parts} illustrates some of the components +% of a hex. The hexes are 2 unit lengths wide. Typically, the unit +% length is one centimetre, which means the hexes are roughly +% $2\,\text{cm}\times 1.86\,\text{cmm}$ --- or roughly $3/4"\times +% 3/4"$ --- big. This allows the hexes to fit chits (see +% Section~\ref{sec:chit}) of size $12\,\mathrm{mm}\times12\,\mathrm{mm}$ +% --- or roughly $1/2"\times1/2"$ --- nicely. If one wants larger +% chits or hexes one should take care to scale both by a similar +% amount. +% +% {\makeatletter\global\let\hexyy\hex@yy} +% \tikzset{wg arrow/.style={red!50!black,thick,<-}} +% \begin{figure}[htbp] +% \centering +% \begin{tikzpicture}[scale=2] +% \hex[terrain={woods},label={text=A1},color=blue](r=0,c=0) +% \draw[red]($(hex cs:e=N)-(0,.2)$) +% ellipse [x radius=.8, y radius=.4] node(label){}; +% \draw[wg arrow] (label)--(1.3,1.2) +% node[align=right,anchor=south]{\texttt{label=\{text=A1\}}}; +% \draw[wg arrow] (0,0)--(-2,-1)node[align=right,anchor=base east]{ +% \texttt{terrain=\{woods\}}}; +% \pic[draw,transform shape]{wg/x axis={-1,1, -1.2,{0},}}; +% \pic[draw,transform shape]{wg/y axis={1.2, -1,1, {0},{-\hexyy,\hexyy}}}; +% \end{tikzpicture} +% \caption{Hex parts. The bar on the bottom and to the right +% indicate two units of length.} +% \label{fig:hex:parts} +% \end{figure} +% +% \subsection{Styling hexes} +% +% Typical \TikZ{} options can be passed to the \cs{hex} macro. For +% example, if you want to draw the hex borders in red, simply pass +% \spec{draw=red} in the \oarg{optional} arguments to +% \cs{hex}. Individual parts of the hexes can be styled separately. +% the default style used by \cs{hex} is \spec{tikz/hex/hex}. Users +% can redefine this style to suit their needs. If one does not want +% to change the default style, or pass the same argument to all +% \cs{hex}s one can define the style \spec{tikz/every hex}. For example, +% if one wants to auto label all hexes, one can do +% +% \begin{verbatim} +% \begin{tikzpicture} +% \begin{scope}[every hex/.style={label=auto}] +% % Hexes +% \end{scope} +% \end{tikzpicture} +% \end{verbatim} +% +% \subsection{Hex coordinate system} +% \label{sec:hex:cs} +% +% The package defines a coordinate system based on hexes. The centre +% of a hex is specified as \meta{column}-\meta{row} pairs, while +% vertexes and mid-point on edges can be specified separately. The +% syntax of the coordinates is +% +% \begin{Syntax} +% (hex cs:row=\meta{hex-row},column=\meta{hex-column},vertex=\meta{vertex},edge=\meta{edge}) +% \end{Syntax} +% +% where \meta{vertex} and \meta{edge} are optional. The hex row and +% column defaults both to 0 and can be decimal numbers. The +% \spec{row}, \spec{column}, \spec{vertex}, and \spec{edge} keywords +% may be shorted to \spec{r}, \spec{c}, \spec{v}, and \spec{e}, +% respectively. Possible vertexes and edges are listed in +% \tablename~\ref{tab:hex:ve}. +% +% \begin{table}[htbp] +% \centering +% \begin{tabular}{m{.3\linewidth}m{.65\linewidth}} +% \begin{tikzpicture} +% \hex(r=0,c=0) +% \foreach \v in {E,NE,NW,W,SW,SE}{ +% \fill(hex cs:v=\v) circle(0.05); +% \node[inner sep=2pt] (v\v) at ($1.6*(hex cs:v=\v)$){\spec{v=\v}}; +% \draw[<-](hex cs:v=\v)--(v\v); } +% \foreach \e in {NE,N,NW,SW,S,SE}{ +% \fill(hex cs:e=\e) circle(0.05); +% \node[inner sep=2pt] (e\e) at ($1.6*(hex cs:e=\e)$) {\spec{e=\e}}; +% \draw[<-](hex cs:e=\e) -- (e\e);} +% \end{tikzpicture} +% & +% \begin{tabular}{|ccr|ccr|} +% \hline +% \rowcolor{headbg} +% \multicolumn{2}{c}{\color{headfg}\spec{vertex=}} +% & {\color{headfg}\textbf{Angle}} +% & \multicolumn{2}{c}{\color{headfg}\spec{edge=}} +% & {\color{headfg}\textbf{Angle}} +% \\ +% \hline +% \rowcolor{white} +% \spec{east} & \spec{E} & $ 0^{\circ}$ & +% \spec{north east} & \spec{NE} & $ 30^{\circ}$\\ +% \spec{north east} & \spec{NE} & $ 60^{\circ}$ & +% \spec{north} & \spec{N} & $ 90^{\circ}$\\ +% \spec{north west} & \spec{NW} & $120^{\circ}$ & +% \spec{north west} & \spec{NW} & $150^{\circ}$\\ +% \spec{west} & \spec{W} & $180^{\circ}$ & +% \spec{south west} & \spec{SW} & $210^{\circ}$\\ +% \spec{south west} & \spec{SW} & $240^{\circ}$ & +% \spec{south} & \spec{S} & $270^{\circ}$\\ +% \spec{south east} & \spec{SE} & $300^{\circ}$ & +% \spec{south east} & \spec{SE} & $330^{\circ}$\\ +% \hline +% \end{tabular} +% \end{tabular} +% \caption{Vertex and edge positions} +% \label{tab:hex:ve} +% \end{table} +% +% In \figurename~\ref{fig:hex:cs} is an example of a picture drawn in +% this coordinate system. +% +% \begin{figure}[htbp] +% \begin{tabular}{m{.3\linewidth}m{.65\linewidth}} +% \begin{tikzpicture}[] +% \hex[color=lightgray](r=0,c=0) +% \hex[color=lightgray](r=0,c=1) +% \hex[color=lightgray](r=1,c=0) +% \hex[color=lightgray](r=1,c=1) +% \draw[blue!50!black] (hex cs:r=0,c=0) -- (hex cs:r=1,c=1); +% \draw[red!50!black] (hex cs:r=0,c=0,vertex=E) -- +% (hex cs:r=1,c=1,edge=north west); +% \fill (hex cs:r=0,c=0) circle(.1) +% node[color=gray,anchor=north] {\spec{(r=0,c=0)}}; +% \fill (hex cs:r=1,c=1) circle(.1) +% node[color=gray,anchor=west] {\spec{(r=1,c=1)}}; +% \fill (hex cs:r=0,c=0,v=east) circle(.1) +% node[color=gray,anchor=north west]{\spec{(r=0,c=0,v=E)}}; +% \fill (hex cs:r=1,c=1,e=north west) circle(.1) +% node[color=gray,anchor=south]{ +% \spec{(r=1,c=1,e=NW)}}; +% \fill[lightgray](hex cs:r= .3,c= .3) circle(0.1) +% node[anchor=south,inner sep=0]{(0.3,0.3)}; +% \fill[lightgray](hex cs:r=1.3,c= .3) circle(0.1) +% node[anchor=south,inner sep=0]{(1.3,0.3)}; +% \fill[lightgray](hex cs:r=0.3,c=1.3) circle(0.1) +% node[anchor=south,inner sep=0]{(0.3,1.3)}; +% \fill[lightgray](hex cs:r=1.3,c=1.3) circle(0.1) +% node[anchor=south,inner sep=0]{(1.3,1.3)}; +% \end{tikzpicture} +% & +% Hexes and lines drawn with +% \begin{verbatim} +% \hex(0,0)\hex(0,1)\hex(1,0)\hex(1,1) +% \draw[blue!50!black] (hex cs:r=0,c=0) -- +% (hex cs:r=1,c=1); +% \draw[red!50!black] (hex cs:r=0,c=0,vertex=E) -- +% (hex cs:r=1,c=1,edge=NW); +% \fill[lightgray](hex cs:r= .3,c= .3) circle(0.1); +% \fill[lightgray](hex cs:r=1.3,c= .3) circle(0.1); +% \fill[lightgray](hex cs:r=0.3,c=1.3) circle(0.1); +% \fill[lightgray](hex cs:r=1.3,c=1.3) circle(0.1); +% \end{verbatim} +% \end{tabular} +% \caption{Hex coordinate system} +% \label{fig:hex:cs} +% \end{figure} +% +% +% \textbf{Important}: When the horizontal distance to the centre of a +% hex becomes less than $-\cos60^{\circ}$ or larger than +% $b-\cos60^{\circ}$ we effectively have a new hex column, and the +% coordinates are shifted upward or downward for smaller or larger +% numbers. Figure~\ref{fig:hex:coord:nb} illustrates. this. This can +% make it a little hard to specify coordinates relative to a hex +% centre. Alternatively one may use vertex or edge specifciations +% together with a relative offset in those directions. +% \ +% \begin{figure} +% \centering +% \begin{tikzpicture} +% \begin{scope}[scale=2,every node/.style={inner sep=0}] +% \hex +% +% \begin{scope}[red,fill] +% \draw[anchor=south east](hex cs:c=-0.66,r=-0.67)circle(.01)node{(-2/3,-2/3)}; +% \draw[anchor=south east](hex cs:c=-0.67,r=-0.33)circle(.01)node{(-2/3,-1/3)}; +% \draw[anchor=south east](hex cs:c=-0.67,r=0)circle(.01)node{(-2/3,0)}; +% \draw[anchor=south east](hex cs:c=-0.67,r=0.33)circle(.01)node{(-2/3,1/3)}; +% \draw[anchor=north](hex cs:c=-0.33,r=-0.67)circle(.01)node{(-1/3,-2/3)}; +% \draw[anchor=north](hex cs:c=-0.33,r=-0.33)circle(.01)node{(-1/3,-1/3)}; +% \draw[anchor=south](hex cs:c=-0.33,r=0.33)circle(.01)node{(-1/3,1/3)}; +% \draw[anchor=south](hex cs:c=-0.33,r=0.67)circle(.01)node{(-1/3,2/3)}; +% \draw[anchor=south](hex cs:c=0.33,r=-0.67)circle(.01)node{(1/3,-2/3)}; +% \draw[anchor=south](hex cs:c=0.33,r=-0.33)circle(.01)node{(1/3,-1/3)}; +% \draw[anchor=north](hex cs:c=0.33,r=0.33)circle(.01)node{(1/3,1/3)}; +% \draw[anchor=north](hex cs:c=0.33,r=0.67)circle(.01)node{(1/3,2/3)}; +% \draw[anchor=north west](hex cs:c=0.67,r=-0.33)circle(.01)node{(2/3,-1/3)}; +% \draw[anchor=north west](hex cs:c=0.67,r=0)circle(.01)node{(2/3,0)}; +% \draw[anchor=north west](hex cs:c=0.67,r=0.33)circle(.01)node{(2/3,1/3)}; +% \draw[anchor=north west](hex cs:c=0.67,r=0.67)circle(.01)node{(2/3,2/3)}; +% \end{scope} +% +% \hex(c=2) +% \begin{scope}[blue,fill] +% \draw[anchor=south west](hex cs:c=2,v=NE,o=0.5)circle(.01)node{NE by 1/2}; +% \draw[anchor=south west](hex cs:c=2,v=NE,o=1.0)circle(.01)node{NE by 1}; +% \draw[anchor=south west](hex cs:c=2,v=NE,o=1.5)circle(.01)node{NE by 3/2}; +% \draw[anchor=south east](hex cs:c=2,v=NW,o=0.5)circle(.01)node{NW by 1/2}; +% \draw[anchor=south east](hex cs:c=2,v=NW,o=1.0)circle(.01)node{NW by 1}; +% \draw[anchor=south east](hex cs:c=2,v=NW,o=1.5)circle(.01)node{NW by 3/2}; +% \draw[anchor=north](hex cs:c=2,v=W,o=0.5)circle(.01)node{W by 1/2}; +% \draw[anchor=south](hex cs:c=2,v=W,o=1.0)circle(.01)node{W by 1}; +% \draw[anchor=north](hex cs:c=2,v=W,o=1.5)circle(.01)node{W by 3/2}; +% \draw[anchor=north east](hex cs:c=2,v=SW,o=0.5)circle(.01)node{SW by 1/2}; +% \draw[anchor=north east](hex cs:c=2,v=SW,o=1.0)circle(.01)node{SW by 1}; +% \draw[anchor=north east](hex cs:c=2,v=SW,o=1.5)circle(.01)node{SW by 3/2}; +% \draw[anchor=north west](hex cs:c=2,v=SE,o=0.5)circle(.01)node{SE by 1/2}; +% \draw[anchor=north west](hex cs:c=2,v=SE,o=1.0)circle(.01)node{SE by 1}; +% \draw[anchor=north west](hex cs:c=2,v=SE,o=1.5)circle(.01)node{SE by 3/2}; +% \draw[anchor=north](hex cs:c=2,v=E,o=0.5)circle(.01)node{E by 1/2}; +% \draw[anchor=south](hex cs:c=2,v=E,o=1.0)circle(.01)node{E by 1}; +% \draw[anchor=north](hex cs:c=2,v=E,o=1.5)circle(.01)node{E by 3/2}; +% \end{scope} +% \end{scope} +% \end{tikzpicture} +% \caption{Relative coordinates} +% \label{fig:hex:coords:nb} +% \end{figure} +% \subsection{Terrains} +% \label{sec:hex:terrain} +% +% Terrains are rendered using tile images or \TikZ{} +% \texttt{pic}tures. The available terrains are shown in +% \tablename{}s~\ref{tab:hex:terrain:image} +% and~\ref{tab:hex:terrain:pic}. Users can provide their own tile +% images and select those via \texttt{terrain=\{image=\meta{image}\}} +% or defined \TikZ{} \texttt{pic}tures and select those via +% \texttt{terrain=\{pic=\meta{pic-name}\}}. In all cases, the terrain +% graphics is clipped to the hex. +% +% The terrain of a hex is selected via the multi-valued key +% \spec{terrain}. Sub-keys of this key are +% +% \begin{description} +% \item[\spec{image=}\meta{graphics-file}] Specifies terrain tile +% image \meta{graphics-file}. +% \item[\spec{pic=}\meta{picture-key}] Specifies terrain tile \TikZ{} +% \spec{pic}ture. +% \item[\spec{code=}\meta{tikz-code}] Any valid \TikZ{} code +% \item[\spec{clip=}\meta{path(s)}] \TikZ{} path specification to clip +% the terrain within the hex. +% \end{description} +% +% \begin{table}[htbp] +% \centering +% \begin{tabular}{|m{2cm}|ll|m{2cm}|ll|} +% \hline +% \rowcolor{headbg} +% {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\textbf{Name}} +% & {\color{headfg}\texttt{terrain=\{image=\meta{image}\}}} +% & {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\textbf{Name}} +% & {\color{headfg}\texttt{terrain=\{image=\meta{image}\}}}\\ +% \hline +% &&&&&\\[-1ex] +% \tikz{\hex[](r=0,c=0) } +% & Clear +% & \texttt{} +% & \tikz{\hex[terrain={image=beach}](r=0,c=0) } +% & Beach +% & \texttt{\{image=beach\}}\\ +% \tikz{\hex[terrain={image=light_woods}](r=0,c=0) } +% & Light woods +% & \texttt{\{image=light\_woods\}} +% & \tikz{\hex[terrain={image=woods}](r=0,c=0)} +% & Woods +% & \texttt{\{image=woods\}}\\ +% \tikz{\hex[terrain={image=rough}](r=0,c=0) } +% & Rough +% & \texttt{\{image=rough\}} +% & \tikz{\hex[terrain={image=swamp}](r=0,c=0) } +% & Swamp +% & \texttt{\{image=swamp\}}\\ +% \tikz{\hex[terrain={image=mountains}](r=0,c=0) } +% & Mountains +% & \texttt{\{image=mountains\}} +% & \tikz{\hex[fill=blue!40!white](r=0,c=0) } +% & Sea +% & \texttt{\{image=sea\}}\\ +% \hline +% \end{tabular} +% \caption{Terrains specified via tile images} +% \label{tab:hex:terrain:image} +% \end{table} +% +% \begin{table}[htbp] +% \centering +% \begin{tabular}{|m{2cm}|l|l|} +% \hline +% \rowcolor{headbg} +% {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\textbf{Name}} +% & {\color{headfg}\texttt{terrain=\{pic=\meta{image}\}}}\\ +% \hline +% &&\\[-1ex] +% \tikz{\hex[terrain={pic=hex/terrain/mountain,line width=3pt}](r=0,c=0) } +% & Mountains +% & \texttt{\{pic=hex/terrain/mountain,line width=3pt\}}\\ +% \hline +% \end{tabular} +% \caption{Terrains specified via \TikZ{} \spec{pic}tures} +% \label{tab:hex:terrain:pic} +% \end{table} +% +% The terrain can be clipped by the sub-key \spec{clip}. This can be +% useful if the game specifies movement costs in terms of hex-edge +% crossing, for example \emph{First Blood}~\cite{fb}. In that case, a +% hex may be, for example, a jungle hex, but some edges a clear. Thus +% movements across such an edge would count as moving into clear +% territory while moving over other edges will count as moving into a +% jungle. This is, of course, not how most games count movement +% costs, but this package nonetheless facilitates such rules. +% \tablename~\ref{tab:hex:terrain:clip} shows a few examples of +% predefined clippings of terrain. +% +% Users can define \TikZ{} \spec{pic}tures that specify clipping paths +% as needed. For example, one could add clipping to the terrain to +% ensure that other graphics in the hex stands out. +% +% \begin{table}[htbp] +% \centering +% \begin{tabular}{|m{2cm}m{.3\linewidth}|m{2cm}m{.3\linewidth}|} +% \hline +% \rowcolor{headbg} +% {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\texttt{terrain=\{clip=,...\}}} +% & {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\texttt{terrain=\{clip=,...\}}}\\ +% \hline +% &&&\\ +% \tikz{\hex[terrain={woods, +% clip={hex/sextant=NE}}](r=0,c=0) } +% & \spec{\{hex/sextant=NE\}} +% & \tikz{\hex[terrain={woods, +% clip={ +% hex/large sextant=NE, +% hex/large sextant=N}}](r=0,c=0) } +% & \spec{\{hex/large sextant=NE,hex/large sextant=N\}}\\ +% \hline +% \tikz{\hex[terrain={woods, +% clip={hex/sextant=N}}](r=0,c=0) } +% & \spec{\{hex/sextant=N\}} +% & \tikz{\hex[terrain={woods, +% clip={hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=NW}}](r=0,c=0) } +% & \spec{\{hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=NW\}}\\ +% \hline +% \tikz{\hex[terrain={woods, +% clip={hex/sextant=NW}}](r=0,c=0) } +% & \spec{\{hex/sextant=NW\}} +% & \tikz{\hex[terrain={woods, +% clip={hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=NW, +% hex/sextant=SW}}](r=0,c=0) } +% & \spec{\{hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=NW, +% hex/sextant=SW\}}\\ +% \hline +% \tikz{\hex[terrain={woods, +% clip={hex/sextant=SW}}](r=0,c=0) } +% & \spec{\{hex/sextant=SW\}} +% & \tikz{\hex[terrain={woods, +% clip={hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=NW, +% hex/sextant=SW, +% hex/sextant=S}}](r=0,c=0) } +% & \spec{\{hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=NW, +% hex/sextant=SW, +% hex/sextant=S\}}\\ +% \hline +% \tikz{\hex[terrain={woods, +% clip={hex/sextant=S}}](r=0,c=0) } +% & \spec{\{hex/sextant=S\}} +% & \tikz{\hex[terrain={woods, +% clip={hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=NW, +% hex/sextant=SW, +% hex/sextant=S, +% hex/sextant=SE}}](r=0,c=0) } +% & \spec{\{hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=NW, +% hex/sextant=SW, +% hex/sextant=S, +% hex/sextant=SE\}}\\ +% \hline +% \tikz{\hex[terrain={woods, +% clip={hex/sextant=SE}}](r=0,c=0) } +% & \spec{\{hex/sextant=SE\}} +% & \tikz{\hex[terrain={woods, +% clip={hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=NW, +% hex/sextant=SW, +% hex/sextant=S, +% hex/sextant=SE, +% hex/sextant=C}}](r=0,c=0) } +% & \spec{\{hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=NW, +% hex/sextant=SW, +% hex/sextant=S, +% hex/sextant=SE, +% hex/sextant=C\}}\\ +% \hline +% \tikz{\hex[terrain={woods, +% clip={hex/sextant=C}}](r=0,c=0) } +% & \spec{\{hex/sextant=C\}} +% & \tikz{\hex[terrain={woods, +% clip={hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=S, +% hex/sextant=SE, +% hex/sextant=C}}](r=0,c=0) } +% & \spec{\{hex/sextant=NE, +% hex/sextant=N, +% hex/sextant=S, +% hex/sextant=SE, +% hex/sextant=C\}}\\ +% \hline +% \end{tabular} +% \caption{Terrain clipped via \spec{clip} sub-key} +% \label{tab:hex:terrain:clip} +% \end{table} +% +% \subsubsection{Styling terrains} +% +% Terrains use the key \spec{tikz/hex/terrain} to render the +% terrains. This is mainly useful for terrains made from \TikZ{} +% \spec{pic}tures. +% +% \subsection{Ridges} +% \label{sec:hex:ridges} +% +% Ridges, or hill or mountain slopes, can be added to a hex via the +% keyword \spec{ridges}. The keyword takes a list of hex edges and +% generates symbology for the ridge on the chosen edges. Note that +% the edges does not have to be continuous, as illustrated in the +% bottom right of \tablename~\ref{tab:hex:ridges}, nor in any +% particular order. The edges are specified as compass direction +% +% \begin{Syntax} +% north east, north, north west, south west, south, south east.\\ +% NE, N, NW, SW, S, SE +% \end{Syntax} +% +% \tablename~\ref{tab:hex:ridges} shows some examples. +% +% \begin{table}[htbp] +% \centering +% \begin{tabular}{|m{2cm}|c|m{2cm}|c|} +% \hline +% \rowcolor{headbg} +% {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\spec{ridges=}} +% & {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\spec{ridges=}}\\ +% \hline +% &&&\\[-1ex] +% \tikz{\hex[ridges=NE]} +% & \spec{NE} +% & \tikz{\hex[ridges={NE,N}]} +% & \spec{NE,N}\\ +% \tikz{\hex[ridges=N]} +% & \spec{N} +% & \tikz{\hex[ridges={NE,N,NW}]} +% & \spec{NE,N,NW}\\ +% \tikz{\hex[ridges=NW]} +% & \spec{NW} +% & \tikz{\hex[ridges={NE,N,NW,SW}]} +% & \spec{NE,N,NW,SW}\\ +% \tikz{\hex[ridges=SW]} +% & \spec{SW} +% & \tikz{\hex[ridges={NE,N,NW,SW,S,line width=3pt}]} +% & \spec{NE,N,NW,SW,S,line width=3pt}\\ +% \tikz{\hex[ridges=S]} +% & \spec{S} +% & \tikz{\hex[ridges={NE,N,NW,SW,S,SE,color=brown!70!black}]} +% & \spec{NE,N,NW,SW,S,SE,color=brown!70!black}\\ +% \tikz{\hex[ridges=SE]} +% & \spec{SE} +% & \tikz{\hex[ridges={N,S,NW,SE},terrain={rough}]} +% & \spec{N,S,NW,SE}\\ +% \hline +% \end{tabular} +% \caption{Ridges} +% \label{tab:hex:ridges} +% \end{table} +% +% \subsubsection{Styling ridges} +% +% Every ridge is drawn with the style \spec{tikz/hex/ridges}. Users +% can customise this style. The default is to draw thin black wave +% lines (\TikZ{} decoration \spec{waves}). The default style also +% takes care to auto scale line widths. +% +% \subsection{Labels} +% \label{sec:hex:label} +% +% Labels can be placed on the hexes via the keyword \spec{label}. The +% label can either be auto-generated or given explicitly. +% \tablename~\ref{tab:hex:label} shows the various choices. +% +% \begin{table}[htbp] +% \centering +% \begin{tabular}{|m{2cm}|l|c|m{6cm}|} +% \hline +% \rowcolor{headbg} +% {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\textbf{Name}} +% & {\color{headfg}\textbf{Column/Row}} +% & {\color{headfg}\spec{label=}}\\ +% \hline +% &&&\\[-1ex] +% \tikz{\hex[label=none](r=0,c=0) } +% & No label +% & n/a +% & \spec{none}\\ +% \tikz{\hex[label={text=B10}](r=0,c=0) } +% & User specified +% & n/a +% & \spec{text=B10}\\ +% \tikz{\hex[label={color=blue,text=A1}](r=0,c=0) } +% & User specified +% & n/a +% & \spec{\{color=blue,text=A1\}}\\ +% \tikz{\hex[label=auto](r=3,c=9) } +% & Two-digit, zero padded numbers +% & 9/3 +% & \spec{auto}\\ +% \tikz{\hex[label={auto=alpha column,font=\noexpand\rmfamily}](r=3,c=2)} +% & Column letter, number row +% & 2/3 +% & \spec{\{auto=alpha column,font=\cs{noexpand}\cs{rmfamily}\}} +% \textsuperscript{$\dag$}\\ +% \tikz{\hex[label={auto=alpha 2 column,anchor=north east}](r=24,c=6) } +% & Two letter column, two digit row +% & 6/24 +% & \spec{\{auto=alpha 2 column,anchor=north east\}}\\ +% \hline +% \end{tabular} +% \caption{Labels\newline +% \textsuperscript{$\dag$}When specifying macros as key values in +% the options, for example the value \cs{rmfamily} for the key +% \spec{font} above, we have to put a \cs{noexpand} in front if the +% macro. This is to prevent early expansion of the macro, which +% would cause errors. A minor nuisance.} +% \label{tab:hex:label} +% \end{table} +% +% The option \spec{auto=inv y x plus 1} will label the rows +% inversely, and add one to the column number. This requires that the +% key \spec{tikz/max hex row} has been set to the largest row number +% used. +% +% In addition to the sub-keys \spec{none}, \spec{auto}, and +% \spec{text}, one can also specify the following keys +% +% \begin{description} +% \item[\keyval{place}{\meta{coordinates}}] specifies the Location of +% label within the hex. The anchor point of the text will be placed +% at this point. +% \item[\oarg[options]] at the start of the option (but inside braces +% \spec{\{\textellipsis\}}) can be used to give additional style +% options. +% \end{description} +% +% \subsubsection{Styling labels} +% +% All labels use the style \spec{tikz/hex/label}. By default, this +% places the label at the top of the hex, and renders the text as gray +% script sized text. Users can customise this style. If a user does +% not want to change the default style, or want to pass the same +% option to all labels, then one can set the key \spec{tikz/every +% label} to those options. +% +% +% \subsection{Towns} +% \label{sec:hex:town} +% +% Towns in hexes are made via the key \spec{town}. This key takes +% several sub-keys, as illustrated in \tablename~\ref{tab:hex:town} +% +% +% \begin{table}[htbp] +% \centering +% \begin{tabular}{|m{2cm}l|m{2cm}l|} +% \hline +% \rowcolor{headbg} +% {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\spec{town=}} +% & {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\spec{town=}}\\ +% \hline +% &&&\\[-1ex] +% \tikz{\hex[town](r=0,c=0) } +% & \spec{} +% & \tikz{\hex[town={name=Copenhagen}](r=0,c=0) } +% & \spec{\{name=Copenhagen\}}\\ +% \tikz{\hex[town={pic=hex/town/city}](r=0,c=0) } +% & \spec{\{pic=hex/town/city\}} +% & \tikz{\hex[town={red,pic=hex/town/city}](r=0,c=0) } +% & \spec{\{red,pic=hex/town/city\}}\\ +% \tikz{\hex[town={fill=red}](r=0,c=0) } +% & \spec{\{fill=red\}} +% & \tikz{\hex[town={pic=hex/town/city,name=London}](r=0,c=0) } +% & \spec{\{name=London\}}\\ +% \tikz{\hex[town={color=red,name=Paris}](r=0,c=0) } +% & \spec{\{red,name=Paris\}} +% &\tikz{\hex[town={above=0.8,name=Berlin}](r=0,c=0) } +% & \spec{\{above=0.8,name=Berlin\}}\\ +% \tikz{\hex[town={place={(.2,.2)}}](r=0,c=0) } +% & \spec{\{place=\{(.2,.2)\}\}} +% &\tikz{\hex[town={font=\noexpand\itshape,name=Amsterdam}](r=0,c=0) } +% & \spec{\{font=\cs{noexpand}\cs{itshape},name=Amsterdam\}} +% \textsuperscript{$\dag$}\\ +% \hline +% \end{tabular} +% \caption{Towns\newline +% \textsuperscript{$\dag$}When specifying macros as key values in +% the options, for example the value \cs{rmfamily} for the key +% \spec{font} above, we have to put a \cs{noexpand} in front if the +% macro. This is to prevent early expansion of the macro, which +% would cause errors. A minor nuisance.} +% \label{tab:hex:town} +% \end{table} +% +% The sub-keys available for the \spec{town} key are +% +% \begin{description} +% \item[\keyval{pic}{\meta{town-pic}}] The name of a \TikZ{} +% \spec{pic}ture. Currently defined are \spec{hex/town/town} and +% \spec{hex/town/city}. Users can provide alternate definitions or new types +% by defining \TikZ{} \spec{pic}tures. +% \item[\keyval{place}{\meta{coordinates}}] Location of label within +% the hex. The anchor point of the text will be placed at this +% point. +% \item[\keyval{name}{\meta{name}}] Name of town +% \end{description} +% +% \subsubsection{Styling towns} +% +% Towns uses two styles: \spec{tikz/hex/town} for the town graphics, +% and \spec{tikz/hex/town name} for the name of the town. In addition, +% a user may set the key \spec{tikz/every hex town} to contain options +% to be passed to all towns. +% +% \subsection{Extra graphics for hexes} +% \label{sec:hex:extra} +% +% Additional graphics for hexes can be added by the two keys +% \spec{extra} and \spec{extra clipped}. The difference between the +% two are that graphics specified by \spec{extra clipped} are clipped +% (restricted) to the hex, while graphics given by \spec{extra} may +% extend beyond the hex. Both keys accept a comma separated list of +% arguments, where each element has the syntax +% +% \begin{Syntax} +% \oarg{options}\parg{placement}\meta{picture} +% \end{Syntax} +% +% Both \meta{options} and \meta{placement} are optional, and specifies +% keys to draw \meta{picture} with and the relative location in the +% hex, respectively. The required argument \meta{picture} must name a +% \TikZ{} \spec{pic}ture, for example \spec{hex/fortress}. This can +% be useful for marking hexes on the board. For example to mark a +% set-up hex for one faction of the game. +% +% One could for example define the following pictures to define set-up +% points for a Sovjet and German faction +% +% \tikzset{ +% setup/sovjet/.pic={ +% \path[fill=red,draw=yellow,pic actions] +% ( 90:.4)--(126:.15)-- +% (162:.4)--(198:.15)-- +% (234:.4)--(270:.15)-- +% (306:.4)--(342:.15)-- +% ( 18:.4)--( 54:.15)--cycle;}, +% setup/german/.pic={ +% \path[fill,pic actions] +% (-.4, -.1) rectangle(.4,.1) +% (-.1, -.4) rectangle(.1,.4); +% \path[draw,pic actions] +% (-.4,-.2) -- (-.2,-.2) -- (-.2,-.4) +% (-.4, .2) -- (-.2, .2) -- (-.2, .4) +% ( .4, .2) -- ( .2, .2) -- ( .2, .4) +% ( .4,-.2) -- ( .2,-.2) -- ( .2,-.4);}, +% foo/large/.pic={ +% \path[fill=gray,pic actions] (-1,-.5) rectangle(1,.5);}, +% } +% \begin{verbatim} +% setup/sovjet/.pic={ +% \path[fill=red,draw=yellow,pic actions] +% ( 90:.4)--(126:.15)-- +% (162:.4)--(198:.15)-- +% (234:.4)--(270:.15)-- +% (306:.4)--(342:.15)-- +% ( 18:.4)--( 54:.15)--cycle;}, +% setup/german/.pic={ +% \path[fill,pic actions] +% (-.4, -.1) rectangle(.4,.1) +% (-.1, -.4) rectangle(.1,.4); +% \path[draw,pic actions] +% (-.4,-.2) -- (-.2,-.2) -- (-.2,-.4) +% (-.4, .2) -- (-.2, .2) -- (-.2, .4) +% ( .4, .2) -- ( .2, .2) -- ( .2, .4) +% ( .4,-.2) -- ( .2,-.2) -- ( .2,-.4);} +% foo/large/.pic={ +% \path[fill=gray,pic actions] (-1,-.5) rectangle(1,.5);}, +% } +% \end{verbatim} +% +% We can place extra graphics in hexes as shown in +% \tablename~\ref{tab:hex:extra}. +% +% \begin{table}[htbp] +% \centering +% \begin{tabular}{|m{2cm}l|} +% \hline +% \rowcolor{headbg} +% {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\spec{extra=}}\\ +% \hline +% &\\[-1ex] +% \tikz{\hex[extra=hex/fortress](r=0,c=0) } +% & \spec{hex/fortress}\\ +% \tikz{\hex[extra=setup/sovjet](r=0,c=0) } +% & \spec{setup/sovjet}\\ +% \tikz{\hex[extra=setup/german](r=0,c=0) } +% & \spec{setup/german}\\ +% \tikz{\hex[extra={setup/german,hex/fortress}](r=0,c=0) } +% & \spec{\{setup/german,hex/fortress\}}\textsuperscript{$\dag$}\\ +% \tikz{\hex[extra={[{line width=2pt,color=brown}]hex/fortress 2}](r=0,c=0) } +% & \spec{\{[\{line width=2pt,brown\}] +% fortress 2\}}\textsuperscript{$\ddag$}\\ +% \tikz{\hex[extra={[shift={(.2,.2)}]setup/sovjet}](r=0,c=0) } +% & \spec{\{[shift=\{(.2,.2)\}]setup/sovjet\}}\textsuperscript{$\ddag$}\\ +% \tikz{\hex[extra={[{shift={(.2,.2)},scale=.5,color=gray}]setup/german}](r=0,c=0) } +% & \spec{\{[\{shift=\{(.2,.2)\},scale=.5,color=gray\}] +% setup/german\}}\textsuperscript{$\ddag$}\\ +% \tikz{\hex[extra=foo/large]} & \spec{foo/large}\\ +% \rowcolor{headbg} +% {\color{headfg}\textbf{Symbol}} +% & {\color{headfg}\spec{extra clipped=}}\\ +% \hline +% &\\[-1ex] +% \iftrue +% \tikz{\hex[extra clipped=foo/large]} & \spec{foo/large}\\ +% \fi +% \hline +% \end{tabular} +% \caption{Hex extra graphics. Note that in the last line we use +% the graphics \spec{foo/large} with \spec{extra clipped} (compare +% to line just above) to restrict the graphics to the hex.\newline% +% \textsuperscript{$\dag$}When specifying more than one item, the +% list must be enclosed in braces +% (\spec{\{\textellipsis\}})\newline% +% \textsuperscript{$\ddag$}When an item in the list of \spec{extra} +% contains a comma (\spec{,}), for example in a list of graphics +% options, then we need to enclose the inner list \emph{and} the +% whole list in braces (\spec{\{\textellipsis\}}) to protect against +% unwanted expansion.} +% \label{tab:hex:extra} +% \end{table} +% +% To finish off this part on hexes and what we can do with those, we +% generate a map in \figurename~\ref{fig:hex:placing}. +% +% \begin{figure}[htbp] +% \centering +% \begin{tabular}{m{.3\linewidth}m{.68\linewidth}} +% \begin{tikzpicture}[scale=.8] +% \hex[town={pic=hex/town/city,name=Berlin}](r=0,c=0) +% \hex[] (r=0,c=1) +% \hex[] (r=0,c=2) +% \hex[terrain={swamp},label=auto] (r=0,c=3) +% \hex[] (r=1,c=0) +% \hex[terrain={light woods}] (r=1,c=1) +% \hex[terrain={woods}] (r=1,c=2) +% \hex[terrain={swamp}] (r=1,c=3) +% \hex[town={name=Freiburg},extra=hex/fortress](r=2,c=0) +% \hex[extra=hex/fortress] (r=2,c=1) +% \hex[terrain={rough}] (r=2,c=2) +% \hex[] (r=2,c=3) +% \hex[terrain={mountains}] (r=3,c=0) +% \hex[terrain={mountains}] (r=3,c=1) +% \hex[terrain={mountains}] (r=3,c=2) +% \hex[] (r=3,c=3) +% \end{tikzpicture} +% & +% \begin{verbatim} +% \hex[town={pic=hex/town/city,name=Berlin}] (r=0,c=0) +% \hex[] (r=0,c=1) +% \hex[] (r=0,c=2) +% \hex[terrain={swamp},label=auto] (r=0,c=3) +% \hex[] (r=1,c=0) +% \hex[terrain={light woods}] (r=1,c=1) +% \hex[terrain={woods}] (r=1,c=2) +% \hex[terrain={swamp}] (r=1,c=3) +% \hex[town={name=Freiburg},extra=hex/fortress](r=2,c=0) +% \hex[extra=hex/fortress] (r=2,c=1) +% \hex[terrain={rough}] (r=2,c=2) +% \hex[] (r=2,c=3) +% \hex[terrain={mountains}] (r=3,c=0) +% \hex[terrain={mountains}] (r=3,c=1) +% \hex[terrain={mountains}] (r=3,c=2) +% \hex[] (r=3,c=3) +% \end{verbatim} +% \end{tabular} +% \caption{Placing hexes} +% \label{fig:hex:placing} +% \end{figure} +% +% \subsection{Rivers, borders, and roads} +% +% Rivers and borders follow the hex sides and are added to the current +% \spec{tikkzpicture} using \cs{river} and \cs{border} macros +% respectively. They are specified as regular \TikZ{} paths. It is +% useful to utilise the hex coordinate system for this. +% +% \begin{MacroSyntax}{\river,\border} +% \cs{river}\oarg{options} \meta{path};\\ +% \cs{border}\oarg{options} \meta{path}; +% \end{MacroSyntax} +% +% Rivers are essentially borders, but are randomized to giver a more +% aesthetically pleasing output. +% +% Roads and railroads typically go from hex--center to hex--center, +% and are added using the macro \cs{road}. The road or railroad is +% specified via a regular \TikZ{} path. +% +% \begin{MacroSyntax}{\addriver} +% \cs{road}\oarg{options} \meta{path};\\ +% \cs{railroad}\oarg{options} \meta{path}; +% \end{MacroSyntax} +% +% Towns and cities conveniently serve as places to split up a road at. +% +% \begin{figure}[htbp] +% \centering +% \begin{tikzpicture} +% \testmap +% \end{tikzpicture} +% \caption{Adding rivers, boarders, and roads} +% \end{figure} +% +% \subsection{Board clipping and frame} +% +% In the river, border, and road example above, the roads extend beyond +% the hexes, which does not look very nice. One way to deal with this, +% is to draw a clipping box around the hexes +% +% \begin{figure}[htbp] +% \centering +% \begin{tabular}{m{.\linewidth}m{.\linewidth}} +% \begin{tikzpicture} +% \draw[clip](-.5,-.5) rectangle (5,5); +% \testmap +% \end{tikzpicture} +% & +% \begin{verbatim} +% \draw[clip](-.5,-.5) rectangle (5,5); +% \testmap +% \end{verbatim} +% \end{tabular} +% \caption{Clipping for a manual using a \TikZ{} +% \cs{draw}\spec{[clip]} command.} +% \label{fig:hex:boxclip} +% \end{figure} +% +% This technique works fine for examples in a manual, it has a +% somewhat displeasing effect for a full board. The package therefor +% defines the macro \cs{boardclip} which clips the graphics +% according to the defined hexes. +% +% \begin{MacroSyntax}{\boardclip} +% \cs{boardclip}\parg{lower-left}\parg{upper-right}\marg{options} +% \end{MacroSyntax} +% +% A clipping path of that spans from the hex at \meta{lower-lest} to +% \meta{upper-right}. Note, that both of these arguments should only +% specify the column and row keys. If \meta{options} is non-empty, +% then the clipping path is drawn with those options. +% +% \begin{figure}[htbp] +% \centering +% \begin{tabular}{m{.4\linewidth}m{.4\linewidth}} +% \begin{tikzpicture} +% \begin{scope} +% \boardclip(c=0,r=0)(c=3,r=3){} +% \testmap +% \end{scope} +% \end{tikzpicture} +% & +% \begin{verbatim} +% \begin{scope} +% \boardclip(c=0,r=0)(c=3,r=3){} +% \testmap +% \end{scope} +% \end{verbatim} +% \end{tabular} +% \caption{Snug--fit clipping of board using the macro \cs{boardclip}} +% \label{fig:hex:clip} +% \end{figure} +% +% This is particularly useful together with the \cs{boardframe} macro. +% This macro will put a frame around the board, optionally with a +% margin. +% +% \begin{MacroSyntax}{\boardframe} +% \cs{boardframe}\oarg{margin}\parg{lower-left}{upper-right} +% \end{MacroSyntax} +% +% where \meta{lower-left} and \meta{upper-right} are as for +% \cs{boardclip}. The \meta{margin} must be a number, and specifies an +% optional margin around the hexes, The argument \meta{options} +% specifies how the frame is drawn. The idea is to first draw the +% frame, then the clipping shape, and then the hexes. One should take +% care to use the \meta{options} argument to \cs{boardclip} to specify +% a default background color. The frame is drawn with the style +% \spec{hex/board frame} +% +% \begin{figure}[htbp] +% \centering +% \begin{tabular}{m{4.\linewidth}m{4.\linewidth}} +% \begin{tikzpicture}[hex/border/.append style={color=red}, +% hex/board frame/.style={fill=Tan}] +% \begin{scope}[every hex/.style={label=auto}] +% \boardframe[0.5](c=0,r=0)(c=3,r=3){0.5} +% \boardclip(c=0,r=0)(c=3,r=3){fill=white} +% \testmap{} +% \end{scope} +% \end{tikzpicture} +% & +% \begin{verbatim} +% \begin{scope}[every hex/.style={label=auto}] +% \boardframe[0.5](c=0,r=0)(c=3,r=3) +% \boardclip(c=0,r=0)(c=3,r=3){fill=white} +% \testmap{} +% \end{scope} +% \end{verbatim} +% \end{tabular} +% \caption{Combining a frame and clipping} +% \label{fig:hex:frame} +% \end{figure} +% +% The \cs{boardframe} macro prints the position of the rectangle to +% the log output, if one needs to do some more stuff around the board. +% +% \iffalse +% -------------------------------------------------------------------- +% +% Chits +% +% -------------------------------------------------------------------- +% \fi +% +% \cleardoublepage +% \section{Chits} +% +% Chits, or playing counters\footnote{Since \TeX{} has the concept of +% counters as in `\cs{count}' and \LaTeX{}'s `\cs{newcounter}', we +% choose the name `chit' for playing pieces instead.}, can be made +% with the macro \cs{chit}. The syntax for rendering a chit is +% +% \begin{MacroSyntax}{\chit} +% \cs{chit}\oarg{key-value-pairs}\parg{location}\parg{name} +% \end{MacroSyntax} +% +% \figurename~\ref{fig:chit:overview} shows an example of a chit. +% +% \begin{figure}[htbp] +% \centering +% \begin{tikzpicture}[scale=2] +% \firstchit +% \pic[draw,transform shape]{wg/x axis={-1,1, -1.2,{0},{-.6,.6}}}; +% \pic[draw,transform shape]{wg/y axis={1.2,-1,1, {0},{-.6,.6}}}; +% \draw[wg arrow] (-.2,-.4)--(-0.9,-.6) +% node[anchor=east]{\spec{factors=\{chit/2 factors=\{4,8\}\}}}; +% \draw[wg arrow] (-.5,.2)--(-1.1,.6) +% node[anchor=east]{\spec{left=\{chit/identifier=\{1\}\}}}; +% \draw[wg arrow] (.5,.2)--(.7,1.2) +% node[anchor=south west]{\spec{right=\{chit/identifier=\{2\}\}}}; +% \draw[wg arrow] (-.2,.4)--(-1,1) +% node[anchor=east]{\spec{symbol=\{\meta{nato app 6(c) spec}\}}}; +% \end{tikzpicture} +% \caption{An example of a chit. The lines below and to the right +% shows two unit lengths. Other global options used are +% \spec{color=white} to set the foreground colour, \spec{fill=blue} +% for the background, and \spec{text=yellow} to set the font colour +% to yellow. The \spec{symbol} key also contains +% \spec{frame=\{fill=yellow!50!black} to set the frame fill colour, +% and \spec{ultra thick} to set the line width of the NATO App6(C) +% symbol. Note that the line width is automatically scaled.} +% \label{fig:chit:overview} +% \end{figure} +% +% +% The example in \figurename~\ref{fig:chit:overview} shows an infantry +% mountaineer army unit with attack factor 4, and movement factor 8. +% The NATO App6(c) symbol is given in terms of keywords for the +% \cs{natoapp} macro (see \sectionname~\ref{sec:nateoapp6c}). The +% other parts of the chit (\spec{factors}, \spec{left}, \spec{right}, +% and \spec{below}) are rendered onto the chit via \TikZ{} +% \spec{pic}tures. This allows for a great deal of flexibility in +% generating chits. For example, above we use the \spec{pic}tures +% \spec{chit/identifier} and \spec{chit/2 factors} to render the left- +% and right-hand identifiers, and the factors, respectively. +% +% Full frame chits --- that is chits which are not typically +% designating units or faction specific chits, e.g., a turn marker --- +% can be made by using the key \spec{full}. In that case, all other +% keys (\spec{symbol}, \spec{factors}, \spec{left}, \spec{right}, +% and \spec{below}) are ignored. \figurename~\ref{fig:chit:full} shows +% such an example. +% +% \begin{figure}[tbp] +% \centering +% \begin{tabular}{m{.45\linewidth}m{.45\linewidth}} +% \begin{tikzpicture}[scale=2] +% \turnchit +% \end{tikzpicture} +% & +% chit made with +% \begin{verbatim} +% \tikzset{ +% wg/big text/.pic={ +% \node[font=\sffamily\fontsize{18}{0}% +% \selectfont]{#1};}} +% \tikz{ +% \chit[full={wg/big text={Turn}}, +% black,fill=yellow!20!white](0,0)} +% \end{tikzpicture} +% \end{verbatim} +% \end{tabular} +% \caption{An example of a full-frame chit. } +% \label{fig:chit:full} +% \end{figure} +% +% The size of the chits are $1.2\times1.2$ unit lengths squared. This +% is tuned so that the chits will fit within the hexes produced by the +% \cs{hex} command (see \sectionname~\label{sec:hex}). In +% \figurename~\ref{fig:chit:hex} we illustrate this. Typically the +% unit is one centimetre. which means the chits are +% $12\,\text{mm}\times12\,\text{mm}$ --- or roughly $1/2"\times1/2"$, +% which is a fairly good size for most games. +% +% \begin{figure}[tbp] +% \centering +% \begin{tikzpicture} +% \hex +% \firstchit(hex cs:r=0,c=0) +% \hex(c=1,r=0) +% \secondchit(hex cs:r=0,c=1) +% \hex(c=2,r=0) +% \thirdchit(hex cs:r=0,c=2) +% \end{tikzpicture} +% \caption{Example of chits fit within hexes. } +% \label{fig:chit:hex} +% \end{figure} +% +% \subsection{Styling chits} +% +% Typical \TikZ{} options can be passed to the \cs{chit} macro. For +% example, if you want to draw the chit with a red foreground, simply pass +% \spec{draw=red} in the \oarg{optional} arguments to +% \cs{chits}. Individual parts of the hexes can be styled separately. +% +% \paragraph{Important:} To set the colours of the various elements, +% +% one should use +% \begin{description} +% \item[\spec{color}=\meta{foreground and text}] Selects the +% foreground colour of lines, text, and so on, including for the +% NATO App6(C) symbol. +% \item[\spec{fill}=\meta{background}] Selects the background colour +% of the full chit. By default this is transparent. +% \item[\spec{text}=\meta{text foreground}] Selects the colour used +% for text in the chit. This overrides \spec{color} for text. +% \item[\spec{draw}=\meta{foreground}] This sets the colour for +% foreground elements, excluding text. +% \end{description} +% \TikZ{} allows one to pass a \meta{colour} as arguments for drawing +% and understands that as giving the foreground and text colours. +% However, that key is \emph{deprecated} for this library, as it does +% not properly propagate through\footnote{The colour +% \spec{pgfstrokecolor} is not modified by that.}. +% +% The styles used by the \spec{left}, \spec{right}, \spec{setup}, +% \spec{factors}, and \spec{symbol} elements are +% \spec{tikz/chit/left}, \spec{tikz/chit/right}, \spec{tikz/setup}, +% \spec{tikz/factors}, and \spec{tikz/symbol} respectively. A user can +% redefine these to change the appearance of the chits. For example, +% one could make the symbol larger by setting a different +% \spec{scale}, move the factors to the side by changing \spec{shift}, +% and so on. +% +% Pictures used by these elements are also styled by +% similar keys. For example, the picture \spec{chit/identifier} is +% styled by \spec{tikz/chit/identifier}. +% +% In addition, one can define the key \spec{tikz/every chit} to be the +% default options for all chits. +% +% \subsection{Defining preset chit types} +% +% One can conveniently pre-define some chit styles. For example, +% given the style definition +% +% \begin{verbatim} +% \tikzset{ +% my chit/.style={/chit/symbol={[ +% faction=friendly, +% command=land, +% main=armoured]}, +% /chit/left={chit/identifier={Mine}}, +% /chit/factors={chit/2 factors={2,4}}}} +% \end{verbatim} +% +% We can use that to make different chits with some commonalities +% defined by that style. For example +% +% \begin{tikzpicture} +% \chit[my chit](0,-2) +% \chit[my chit,color=white,fill=red,right={chit/identifier=1}](2,-2) +% \end{tikzpicture} +% +% where, in the second example, we have passed additional options to +% \cs{chit}. Note that we \emph{must} give the full path to the +% \spec{chit} keys when defining a style like this. +% +% \iffalse +% -------------------------------------------------------------------- +% +% NATO App6(c) symbols +% +% -------------------------------------------------------------------- +% \fi +% +% \cleardoublepage +% \section{NATO App 6(c) symbols} +% \label{sec:nateoapp6c} +% +% The NATO markers are designed to fit within the template shown in +% \figurename~\ref{fig:natoapp:template}. The template is serves as a +% placement guide of the the various parts of the NATO marker as +% illustrated in \figurename{fig:natoapp:usage}. +% +% \begin{figure}[htbp] +% \centering +% \begin{tikzpicture}[scale=2] +% \node[natoapp6c={command=base}] {}; +% \end{tikzpicture} +% \caption{Template for NATO symbols} +% \label{fig:natoapp:template} +% \end{figure} +% +% \begin{MacroSyntax}{\natoapp} +% \cs{natoapp}\oarg{key-value-pairs}\parg{location}\parg{name} +% \end{MacroSyntax} +% +% where all arguments are optional. +% Keys are defined to fill in the various parts of the markers. These +% keys are +% \begin{description} +% \item[\keyval{faction}{\meta{faction}}] Selects the faction used for +% the symbol. See also +% \sectionname~\ref{sec:natoapp:faction:command}. +% \item[\keyval{command}{\meta{command}}] Selects the command used for +% the symbol. See also +% \sectionname~\ref{sec:natoapp:faction:command}. +% \item[\keyval{main}{\meta{mains}}] Specifies the main symbol(s). +% This can be a comma separated list of specifiers (delimited by +% braces \marg{first,second,\textellipsis}), and each symbol can be +% preceeded by an optional argument to shift, scale, rotate, etc., +% the individual symbols. \ifShowSymbols See also +% \sectionname~\ref{sec:natoapp:mains}\fi. +% \item[\keyval{left}{\meta{lefts}}, \keyval{right}{\meta{rights}}, +% \keyval{top}{\meta{tops}}, \keyval{bottom}{\meta{bottoms}}, +% \keyval{below}{\meta{belows}}] Specifies the left-, right-hand, +% top, bottom, and lower symbol(s). The format of the arguments +% \meta{lefts}, \meta{rights}, \meta{tops}, \meta{bottoms}, and +% \meta{belows} has the same format as \meta{mains}. +% \end{description} +% +% \begin{figure}[htbp] +% \begin{tabular}{m{.45\linewidth}m{.45\linewidth}} +% \begin{center} +% \begin{tikzpicture}[scale=2] +% \natoapp[ +% faction=none, +% command=base, +% echelon=army, +% main={text=M}, +% top={text=T}, +% bottom={text=B}, +% left={text=L}, +% right={text=R}, +% below={text=V}] +% \pic[draw,transform shape]{wg/x axis={-.5,.5,-.7,,}}; +% \pic[draw,transform shape]{wg/y axis={.7,-.62,.74,,{-.5,.5,-.2,.2}}}; +% \end{tikzpicture} +% \end{center} +% & The figure is typeset by +% \begin{verbatim} +% \natoapp[faction=none, +% command=base, +% echelon=army, +% main={text=M}, +% top={text=T}, +% bottom={text=B}, +% left={text=L}, +% right={text=R}, +% below={text=V}] +% \end{verbatim} +% \end{tabular} +% \caption{Main keys of \cs{natoapp}. The bottom and right hand +% bars indicate one unit of length.} +% \label{fig:natoapp:usage} +% \end{figure} +% +% Other keys are available to further customise the appearance of the +% symbols +% +% \begin{description} +% \item[\keyval{echelon}{\meta{size}}] The size of the unit described. +% Possible values are \spec{team}, \spec{squad}, \spec{section}, +% \spec{platoon}, \spec{company}, \spec{battalion}, \spec{regiment}, +% \spec{brigade}, \spec{division}, \spec{corps}, \spec{army}, +% \spec{army group}, \spec{theatre}, and \spec{command}. +% \item[\keyval{frame}{\meta{keys}}] Extra keys for frame. +% \end{description} +% +% \subsection{Faction and Command Selection} +% \label{sec:natoapp:faction:command} +% +% Table~\ref{tab:frames} shows the various bases used for the various +% {\ttfamily{\itshape faction}/{\itshape command}} combinations. Also +% shown in the table is the base template for main identifiers. +% +% \makeatletter +% \def\tabledata{} +% \foreach \c in {air,land,equipment,installation,sea surface,sub surface,space,activity}{% +% \protected@xappto\tabledata{\spec{\c}} +% \foreach \f in {friendly,hostile,neutral,unknown}{% +% \protected@xappto\tabledata{ +% &\noexpand\tikz[scale=.8]{% +% \noexpand\path (-.75,-.75) rectangle (.75,.75); +% \noexpand\node[natoapp6c={faction=\f,command=\c},fill=\f]{}; +% \noexpand\node[natoapp6c={command=base},draw=lightgray]{}; +% }}} +% \protected@xappto\tabledata{\\ \noexpand\hline}} +% \makeatother +% +% \begin{table}[htbp] +% \centering +% \begin{tabular}{|l|m{2cm}m{2cm}m{2cm}m{2cm}|} +% \hline +% \rowcolor{headbg} +% & \multicolumn{4}{c|}{{\color{headfg}\meta{faction}}}\\ +% \rowcolor{headbg} +% {\color{headfg}\meta{command}} +% & {\color{headfg}\spec{friendly}} +% & {\color{headfg}\spec{hostile}} +% & {\color{headfg}\spec{neutral}} +% & {\color{headfg}\spec{unknown}} +% \\ +% \hline +% \tabledata +% \end{tabular} +% \caption{Frames for various combinations of \meta{faction} and +% \meta{command} combinations. These are drawn with the +% \spec{pic} given by +% \spec{natoapp6c/\meta{faction}/\meta{command}} with the options +% \spec{draw=blue,fill=\meta{faction}}. If no \spec{fill} is +% specified, then the background will be transparent. Note, the +% template for main identifiers is also shown on top of each frame.} +% \label{tab:frames} +% \end{table} +% +% The fill color of the frame is set by the key \spec{frame}. If +% this is or contains the special value \spec{faction}, then the +% frame fill colour will be the standard for the faction as +% illustrated in figure~\ref{fig:faction:color}. +% +% \begin{figure}[htbp] +% \centering +% \begin{tikzpicture} +% \foreach[count=\i] \f in {friendly,hostile,neutral,unknown}{ +% \natoapp[frame=faction,faction=\f, +% command=space,main={infantry}](2*\i-2,0)} +% \end{tikzpicture} +% \caption{Illustration of using the special value \spec{faction} +% for the \spec{frame} key} +% \label{fig:faction:color} +% \end{figure} +% +% Elements of the frame can be controlled by the key \spec{frame}. +% \begin{description} +% \item[\keyval{frame}{\meta{keys}}] Additional keys to pass to the +% frame drawing. The special option \spec{faction} will make the +% frame be filled with the standard faction color. +% \end{description} +% +% \tablename~\ref{tab:frame:color} illustrates this. +% \begin{table}[htbp] +% \centering +% \begin{tabular}{|c|cccc|} +% \hline +% \rowcolor{headbg} +% {\color{headfg}\textbf{Example}} +% & {\color{headfg}\textbf{\spec{frame=\{color,...\}}}} +% & {\color{headfg}\textbf{\spec{frame=\{fill,...\}}}} +% & {\color{headfg}\textbf{\spec{frame=\{draw,...\}}}} +% & {\color{headfg}\textbf{\spec{frame=\{line width,...\}}}} +% \\ +% \hline +% \cellcolor{white} +% \tikz{\natoapp[main={fixed wing},command=air]} +% & +% & +% & +% & +% \\ +% \hline +% \rowcolor{altcol} +% \cellcolor{white} +% \tikz{\natoapp[main={fixed wing},command=air,color=red, +% frame={line width=2pt}]} +% & \spec{red} +% & +% & +% & \spec{thick} +% \\ +% \hline +% \cellcolor{white} +% \tikz{\natoapp[main={fixed wing},command=air, +% frame={fill=yellow,line width=.5pt}]} +% & +% & \spec{yellow} +% & +% & \spec{thin} +% \\ +% \hline +% \rowcolor{altcol} +% \cellcolor{white} +% \tikz{\natoapp[main={fixed wing},command=air,frame={blue}]} +% & +% & +% & \spec{blue} +% & +% \\ +% \hline +% \cellcolor{white} +% \tikz{\natoapp[main={fixed wing},command=air,frame={fill=pink,magenta}]} +% & +% & \spec{pink} +% & \spec{magenta} +% & +% \\ +% \hline +% \rowcolor{altcol} +% \cellcolor{white} +% \tikz{\natoapp[main={fixed wing},command=air,color=red, +% frame={fill=green,draw=blue,line width=3pt}]} +% & \spec{red} +% & \spec{green} +% & \spec{blue} +% & \spec{ultra thick} +% \\ +% \hline +% \end{tabular} +% \caption{Illustration of frame colour choices} +% \label{tab:frame:color} +% \end{table} +% +% \subsection{Unit Size (\spec{echelon})} +% +% The size of a unit a marker represents is given by the +% \spec{echelon} keyword. \tablename~\ref{tab:natoapp6c:echelon} +% shows the various markers and approximate unit sizes. +% +% \let\foo\empty +% \begin{table}[htbp] +% \centering +% \begin{tabular}{|m{1.2cm}|cr@{--}lm{.27\linewidth}m{.27\linewidth}|} +% \hline +% \rowcolor{headbg} +% {\color{headfg}\textbf{Example}} +% & {\color{headfg}\spec{echelon}} +% & \multicolumn{2}{c}{{\color{headfg}\textbf{Approx.~size}}} +% & \foo{} {\color{headfg}\textbf{Sub-units}} +% & \foo{} {\color{headfg}\textbf{Officer}} +% \\ +% \hline +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=team,lower=airborne]} +% & \spec{team} +% & 3 +% & 5 +% & \foo{} none +% & \foo{} Corporal or Sergeant +% \\ +% \hline +% \rowcolor{altcol} +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=squad]} +% & \spec{squad} +% & 5 +% & 10 +% & \foo{} 1--2 teams +% & \foo{} Sergeant +% \\ +% \hline +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=section]} +% & \spec{section} +% & 7 +% & 13 +% & \foo{} 2--3 teams +% & \foo{} Sergeant +% \\ +% \hline +% \rowcolor{altcol} +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=platoon]} +% & \spec{platoon} +% & $25$ +% & $40$ +% & \foo{} Several squads/sections +% & \foo{} Second Lieutenant +% \\ +% \hline\tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=company]} +% & \spec{company} +% & $60$ +% & $250$ +% & \foo{} Several platoons +% & \foo{} Captain +% \\ +% \hline +% \rowcolor{altcol} +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=battalion]} +% & \spec{battalion} +% & $300$ +% & $1\,000$ +% & \foo{} 2--6 companies +% & \foo{} Lieutenant colonel +% \\ +% \hline +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=regiment]} +% & \spec{regiment} +% & $500$ +% & $2\,000$ +% & \foo{} 3--7 battalions +% & \foo{} Colonel +% \\ +% \hline +% \rowcolor{altcol} +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=brigade]} +% & \spec{brigade} +% & $2\,000$ +% & $5\,000$ +% & \foo{} Several battalions +% & \foo{} Colonel +% \\ +% \hline +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=division]} +% & \spec{division} +% & $10\,000$ +% & $20\,000$ +% & \foo{} Several brigades/regiments +% & \foo{} Major General +% \\ +% \hline +% \rowcolor{altcol} +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=corps]} +% & \spec{corps} +% & $30\,000$ +% & $60\,000$ +% & \foo{} Several divisions +% & \foo{} Lieutenant General +% \\ +% \hline +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=army]} +% & \spec{army} +% & \multicolumn{2}{c}{$100\,000$} +% & \foo{} Several corps (5--10 divisions) +% & \foo{} General +% \\ +% \hline +% \rowcolor{altcol} +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=army group]} +% & \spec{army group} +% & $120\,000$ +% & $500\,000$ +% & \foo{} Several armies +% & \foo{} Field Marshal +% \\ +% \hline +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=theatre]} +% & \spec{theatre} +% & \multicolumn{2}{c}{$250\,000+$} +% & \foo{} Several army groups +% & \foo{} Field Marshal +% \\ +% \hline +% \rowcolor{altcol} +% \tikz[scale=.8]{\natoapp[command=land,faction=friendly,main=infantry,echelon=command]} +% & \spec{command} +% & \multicolumn{4}{c|}{Not a unit size, but designator} +% \\ +% \hline +% \end{tabular} +% \caption{Illustration of echelon values. Approximate sizes and +% command officer titles are typical modern day United States of +% America army values and identifiers. Historically the unit +% sizes have changed, as has officer titles. Furthermore, both +% the unit sizes, names, and command officer titles may vary from +% country to country, even across command.} +% \label{tab:natoapp6c:echelon} +% \end{table} +% +% \subsection{Unit type identification} +% +% \begin{table} +% \centering% +% \def\typemark#1{% +% \tikz[scale=.3]{\natoapp[faction=friendly,command=land,#1]}} +% \def\sizemark#1{% +% \tikz[scale=.2]{\pic{natoapp6c/s/echelon=#1};}} +% \begin{tabular}{|clc|} +% \rowcolor{headbg} +% {\color{headfg}\textbf{Symbol}} +% & \multicolumn{2}{c|}{\color{headfg}\textbf{Type \& Abbreviation}} +% \\ +% \hline +% \typemark{upper=air assault} +% & Air assault +% & AA\\ +% \rowcolor{altcol} +% \typemark{upper=air defence} +% & Air defence +% & ADA\\ +% \typemark{lower=airborne} +% & Airborne +% & AB\\ +% \rowcolor{altcol} +% \typemark{lower=amphibious} +% & Amphibious +% & AM\\ +% \typemark{main=anti tank anti armour} +% & Anti tank/armoured +% & AT\\ +% \rowcolor{altcol} +% \typemark{main=armoured} +% & Armoured +% & AR\\ +% \typemark{main=chemical biological radiological nuclear} +% & Chemical biological radiological nuclear +% & CB\\ +% \rowcolor{altcol} +% \typemark{main=combined arms} +% & Combined arms +% & CAR\\ +% \typemark{main=engineer} +% & Engineer +% & ENG\\ +% \rowcolor{altcol} +% \typemark{main={[fill=pgfstrokecolor]artillery}} +% & Field artillery +% & FA\\ +% \typemark{main=infantry} +% & Infantry +% & IN\\ +% \rowcolor{altcol} +% \typemark{main={infantry,armoured}} +% & Mechanised infantry +% & M\\ +% \typemark{lower=mountain} +% & Mountaineer +% & MTN\\ +% \rowcolor{altcol} +% \typemark{upper=naval} +% & Naval +% & N\\ +% \typemark{main=reconnaissance} +% & Reconnaissance +% & REC\\ +% \rowcolor{altcol} +% \typemark{main={text=sof}} +% & Special Operations Forces +% & SOF\\ +% \hline +% \rowcolor{headbg} +% {\color{headfg}\textbf{Symbol}} +% & \multicolumn{2}{c|}{\color{headfg}\textbf{Echelon \& Abbreviation}} +% \\ +% \hline +% \sizemark{army group} +% & Army group +% & AG\\ +% \rowcolor{altcol} +% \sizemark{army} +% & Army +% & A\\ +% \sizemark{corps} +% & Corps +% & -\\ +% \rowcolor{altcol} +% \sizemark{division} +% & Division +% & D\\ +% \sizemark{brigade} +% & Brigade +% & BD\\ +% \rowcolor{altcol} +% \sizemark{regiment} +% & Regiment +% & REGT\\ +% \sizemark{battalion} +% & Battalion +% & BN\\ +% \rowcolor{altcol} +% \sizemark{company} +% & Company +% & COY\\ +% \sizemark{platoon} +% & Platoon +% & PLT\\ +% \rowcolor{altcol} +% \sizemark{section} +% & Section +% & \\ +% \sizemark{squad} +% & Squad +% & \\ +% \hline +% \end{tabular} +% \caption{Some abbreviations of unit type identifications} +% \label{tab:natoapp6c:abbr} +% \end{table} +% +% +% \ifShowSymbols +% \subsection{Symbols Available} +% \label{sec:natoapp:mains} +% +% \tablename~\ref{tab:natoapp6c:main:symbols} lists all the symbols +% defined. Note, these do \emph{not} correspond to \emph{all} the +% symbols defined in NATO APP-6(C) \cite{app6c}. However, using +% combinations of these symbols one can construct \emph{all} of +% those symbols (and so more if so desired). +% +% \ifShowCompat +% See also +% Appendix~\ref{app:natoapp6c:compat} for compatibility charts +% between this library and \textsf{milsymb} \cite{milsymb}. +% \fi +% +% {\makeatletter\SymbolTable{land}{\n@to@pp@s@ll}} +% \fi +% +% \begin{thebibliography}{99} +% \bibitem{fb} Hanover,C., Hendrix,C.E., \& Llewelyn,S., +% \textit{First Blood}, 1997, \url{https://grognard.com/fb/} +% \bibitem{app6c} \textit{NATO Joint Military Symbology}, APP-6(C), +% May 2011, +% \url{https://en.wikipedia.org/wiki/NATO_Joint_Military_Symbology}. +% \bibitem{app6d} \textit{NATO Joint Military Symbology}, APP-6(D), +% October 2017, +% \url{https://nso.nato.int/nso/nsdd/main/standards/ap-details/1912/EN} +% \bibitem{milsymb} \textsf{milsymb} package, +% \url{https://www.ctan.org/pkg/MilSymb}. +% \end{thebibliography} +% +% \StopEventually{} +% +% +% \iffalse +% ==================================================================== +% +% Implementation +% +% ==================================================================== +% +% The wargame main package +% +% -------------------------------------------------------------------- +% \fi +% +% \section{Implementation} +% \label{sec:impl} +% +% \input{package.dtx} +% \input{util/core.dtx} +% \input{hex/core.dtx} +% \input{chit/core.dtx} +% \input{natoapp6c/core.dtx} +% +% \appendix +% +% \iffalse +% ==================================================================== +% +% Appendices +% +% ==================================================================== +% +% Compat tables +% +% -------------------------------------------------------------------- +% \fi +% +% \ifShowCompat +% \section{Compatibility tables} +% \label{app:natoapp6c:compat} +% +% The following tables provides compatibility with the the +% \textsf{milsymb} package available from CTAN. +% +% \let\CompatSection\subsection +% \let\CompatSubSection\subsubsection +% \input{cmp_air} +% \input{cmp_missile} +% \input{cmp_land} +% \input{cmp_equipment} +% \input{cmp_installation} +% \input{cmp_seasurface} +% \input{cmp_subsurface} +% \input{cmp_seamine} +% \input{cmp_space} +% \input{cmp_activity} +% \fi +% +% \iffalse +% ==================================================================== +% +% Draft VASSAL module +% +% -------------------------------------------------------------------- +% \fi +% \section{Generate draft VASSAL module} +% \label{app:vassal} +% +% We can use the code you wrote for your game pieces (counters, maps, +% tables), to generate a draft VASSAL module. To that end, use the +% document class \textsf{wgexport}, and some simple macros to export +% your graphics to a single PDF. A provided Python script then +% processes this to generate the draft VASSAL module. +% +% The generated VASSAL module is not the final thing, but it is a good +% start. +% +% \subsection{Example} +% +% Suppose we have defined counters and markers like +% \begin{verbatim} +% allied 1 id axis 1 ad out of supply +% allied 2 ad axis 2 ad game turn +% allied 3 abid axis 3 ic +% \end{verbatim} +% via Tikz styles. Also assume that we have macros +% \begin{verbatim} +% \board \oob \charts \front +% \end{verbatim} +% which produces \textsf{tikzpicture}s to the board, OOBs, charts, and +% cover, respectively. All this is defined in our package +% \texttt{mygame}. Of course that we have our rules in the file +% \texttt{game.pdf}. +% +% We prepare a simple \LaTeX{} source file +% +% \begin{verbatim} +% \documentclass{wgexport} +% \usepackage{mygame} +% \begin{document} +% \begin{imagelist} %% Records image meta info +% \chitimages{{% +% {allied 1 id,allied 2 ad,allied 3 abid}/Allied,% +% {axis 1 ad,axis 2 ad,axis 3 ic}/Axis,% +% {out of supply, game turn}/Markers}} +% \info{Board}{board}{} \board +% \info{OOB}{oob}{} \oob +% \info{Charts}{chart}{}\chart +% \info{Cover}{front}{} \front +% \end{imagelist} +% \end{document} +% \end{verbatim} +% +% When we run \LaTeX{} on this, we will get a PDF where each page is a +% separate image and the page is cropped to image. \emph{In addition} +% we will get a CSV (comma-separated-values) file \texttt{export.csv} +% which contains some meta information about each page. In +% particular, it identifies the name of each page, the category, and +% sub category of the image. +% +% For chits, the name of the image is the style name (e.g., \texttt{game +% turn}). For other images, it is the first argument to \cs{info} +% above. +% +% The category is for chits is always \texttt{counter}. For other +% images, it is the second argument to the \cs{info} macro (e.g., +% \texttt{board}). +% +% The category of an image is important later on when we generate the +% VASSAL module. Recognised categories are +% +% \begin{itemize} +% \item \texttt{counter} for counter images. Such an image will +% trigger the creation of a VASSAL game piece. +% \item \texttt{board} for board images. Images of this kind will +% result in VASSAL board (or Map) elements. +% \item \texttt{oob} for Order of Battle tables. This will also +% result in a VASSAL map being created, but one that is displayed as +% a pop-up and with a rectangular grid. This is useful for placing +% units in an Order of Battle chart. +% \item \texttt{chart} for charts. These images will be made VASSAL +% charts --- i.e., pop-up windows which contains some graphics for the +% players reference. +% \item \texttt{front} for the cover image. This will become the +% module splash image. Only one such image (the first) will be used. +% \end{itemize} +% +% Other categories may be used, and the corresponding image will be +% added to the VASSAL module. However, they will no be processed in +% any specific way. +% +% The \emph{sub-category} is mainly used for counters. Above, we gave +% the sub-categories \texttt{Allied}, \texttt{Axis}, and +% \texttt{Markers}. The sub-categories will help to identify the +% factions of the game, and counter prototypes will be made for each +% category. The sub-categories of \texttt{board}, \texttt{charts}, +% \texttt{oob}, and \texttt{front} has no or little effect. +% +% One we have processed the file above to generate our PDF (Say +% \texttt{export.pdf}), then we can process it (and the CSV file) with +% a Python script to make our draft VASSAL module +% +% \begin{verbatim} +% export.py export.pdf export.csv -o Game.vmod -t Game -v 0.1 \ +% -d "My game" -r rules.pdf +% \end{verbatim} +% +% This will generate the draft module \texttt{Game.vmod}. Note that +% we add the rules (\texttt{-r rules.pdf}) to the module so that the +% module is complete. +% +% Once the module has been generated, one can open it in the VASSAL +% editor and further customise it. For example, the grids used in +% the boards needs to be adjusted, and one may want to make initial +% set-ups or add all counters to the OOB. +% +% Of course, running the Python script will overwrite all changes, so +% perhaps it is a good idea to work on a copy of the output file. +% +% \iffalse +% This is the package used by the documentation +%<*docsty> +\ProvidesPackage{wgdoc} +\DeclareOption{noterrainpic}{% + \PassOptionsToPackage{noterrainpic}{wargame}} +\ProcessOptions\relax +% +\RequirePackage{etoolbox} +\RequirePackage{wargame} +\RequirePackage{longtable} +\RequirePackage{colortbl} +\RequirePackage{hyperref} +\RequirePackage{textcomp} +\RequirePackage{float} +\RequirePackage[a4paper,right=1cm,left=2cm]{geometry} +% +\usetikzlibrary{external} +\tikzexternalize[mode=graphics if exists,prefix=.cache-] +% +\newcommand\TikZ{{\mdseries Ti{\itshape k}Z}} +\newcommand\sectionname{Section} +\let\subsubsubsection\paragraph +% +\colorlet{headbg}{LightSlateGrey!50} +\colorlet{headfg}{black} +\colorlet{altcol}{LightSteelBlue!50} +\newcommand\spec[1]{{\obeyspaces\ttfamily #1}} +\newcommand\tspec[1]{{\ttfamily\footnotesize\obeyspaces #1}} +\newcommand\keyval[2]{\spec{#1}=#2} +% +\setlength{\parindent}{0pt} +\setlength{\parskip}{1ex} +\setlength\hfuzz{15pt} +\hbadness=7000 +% +\tikzset{ + cc name/.pic={ + \draw[fill=pgfstrokecolor,draw=none,even odd rule] + (0,0) circle(.5) circle(.41) + node[fill=none,transform shape, + font=\sffamily\bfseries\fontsize{16}{0}\selectfont] {cc} + ; + }, + cc by/.pic={ + \draw[fill=pgfstrokecolor,draw=none,even odd rule] + (0,0) circle(.5) circle(.41) (0,.26) circle(.07) + (0,.15) + --++(.11,0) + to[bend left] ++(.02,-.02) + --++(0,-.20) + --++(-.05,0) + --++(0,-.25) + --++(-.15,0) + --++(0,.25) + --++(-.05,0) + --++(0,.2) + to[bend left] ++(.02,.02) + --cycle + ; + }, + cc sa/.pic={ + \draw[fill=pgfstrokecolor,draw=none,even odd rule] + (0,0) circle(.5) circle(.41) + (-.22,-.08) + to[bend right=40] ++(.23,-.20) + to[bend right=40] ++(.23, .20) + to[bend right=10] ++(0, .16) + to[bend right=40] ++(-.23, .20) + to[bend right=40] ++(-.23, -.20) + --++(-.05,0) + --++(-45:.15) + --++( 45:.15) + --++(-.05,0) + to[bend left=40] ++(.12, .1) + to[bend left=40] ++(.12, -.1) + to[bend left=10] ++(0, -.16) + to[bend left=40] ++(-.12, -.1) + to[bend left=40] ++(-.12, .1) + --cycle + ; + }, + cc by sa/.pic={ + \pic at(-1,0) {cc name}; + \pic at( 0,0) {cc by}; + \pic at( 1,0) {cc sa}; + } +} + +% +\newcommand\Continued[1]{\multicolumn{#1}{c}{% + \textit{\small continued from previous page}}\\} +\newcommand\Continues[1]{\multicolumn{#1}{c}{% + \textit{\small continues on next page}}\\} +\newcommand\SymbolTable[3][]{% + \setlength{\LTcapwidth}{\linewidth} + \def\tabledata{} + \foreach \m in #3{% + \protected@xappto\tabledata{\spec{\m}} + \foreach \f in {friendly,hostile,neutral,unknown}{% + \protected@xappto\tabledata{ + &\noexpand\tikz[scale=.8]{% + \noexpand\natoapp[faction=\f,% + command=#2,% + main={\m},% + frame={faction},% + #1]}}} + \protected@xappto\tabledata{\\ \noexpand\hline}} + \def\colheaders{% + \hline% + & \multicolumn{4}{c|}{\meta{faction}}\\% + \meta{symbol}% + & \spec{friendly}% + & \spec{hostile}% + & \spec{neutral}% + & \spec{unknown}% + \\% + \hline} + \begin{longtable}{|l| + m{.1\linewidth} + m{.1\linewidth} + m{.1\linewidth} + m{.1\linewidth}|} + \caption{Symbols\label{tab:natoapp6c:main:symbols}}\\ + \colheaders + \endfirsthead + \Continued{5} + \colheaders + \endhead + \Continues{5} + \endfoot + \endlastfoot + \tabledata + \end{longtable} +} +% +\def\CompatSection#1{} +\def\CompatSubSection#1{} +\newcommand\CompatTable[3]{% command, where, list + \CompatSubSection{\spec{#2}} + \setlength{\LTcapwidth}{\linewidth} + \def\tabledata{} + \foreach \m/\s in #3{% + \n@to@pp@dbg{2}{Compatibility: `\m' -> `\s'} + \protected@xappto\tabledata{\tspec{\m} & \tspec{\s}} + \foreach \f in {{none,frame={draw=lightgray}},% + friendly,hostile,neutral,unknown}{% + \protected@xappto\tabledata{ + &\noexpand\tikz[scale=.5]{% + \noexpand\natoapp[faction=\f,command=#1,\s,frame={faction}]}}} + \protected@xappto\tabledata{\\ \noexpand\hline}} + \def\colheaders{% + \hline% + & + & \multicolumn{5}{c|}{\meta{faction}}\\% + \textsf{milsymb}% + &\textsf{wargame}% + & \spec{none}% + & \spec{friendly}% + & \spec{hostile}% + & \spec{neutral}% + & \spec{unknown}% + \\% + \hline} + \begin{longtable}{| + m{.15\linewidth}| + m{.20\linewidth}| + m{.08\linewidth} + m{.08\linewidth} + m{.08\linewidth} + m{.08\linewidth} + m{.08\linewidth}|} + \caption{Compatibility with \textsf{milsymb} \spec{#1},\spec{#2} + symbols\label{tab:compat:#1:#2}}\\ + \colheaders + \endfirsthead + \Continues{7} + \colheaders + \endhead + \Continues{7} + \endfoot + \endlastfoot + \tabledata + \end{longtable} +} +% +\newenvironment{Syntax}{% + \par + \vspace{1ex} + \hspace*{-1cm} + \ttfamily + \begin{tabular}{|>{\columncolor{altcol}}p{.8\textwidth}|} + \hline}{\\\hline\end{tabular}\par\vskip 1ex} +\def\MacroSyntax{% + \leavevmode\begingroup% + %\catcode`\\12 + \MakePrivateLetters\M@croSyntax} +\def\M@croSyntax#1{\endgroup% + \foreach \k in {#1}{\expandafter\Special@Usage@Index\k} + \Syntax} +\let\endMacroSyntax\endSyntax +% +\@ifundefined{SpecialIndex@}{ + \gdef\SpecialIndex@#1#2{% + \@SpecialIndexHelper@#1\@nil + \def\@tempb{ }% + \ifcat \@tempb\@gtempa + \special@index{\quotechar\space\actualchar + \string\verb\quotechar*\verbatimchar + \quotechar\bslash\quotechar\space\verbatimchar#2}% + \else + \def\@tempb##1##2\relax{\ifx\relax##2\relax + \def\@tempc{\special@index{\quotechar##1\actualchar + \string\verb\quotechar*\verbatimchar + \quotechar\bslash\quotechar##1\verbatimchar#2}}% + \else + \def\@tempc{\special@index{##1##2\actualchar + \string\verb\quotechar*\verbatimchar + \bslash##1##2\verbatimchar#2}}% + \fi}% + \expandafter\@tempb\@gtempa\relax + \@tempc + \fi}}{} +% +\def\Special@Usage@Index#1{\@bsphack + {\let\special@index\index\SpecialIndex@{#1}{}}% + \@esphack} +% +\def\Speci@lIndex#1#2#3#4{% + \@bsphack\special@index{% + #1\actualchar + {\string\ttfamily\space#1} + (#3)% + \encapchar main}% + \special@index{#4:\levelchar#2\actualchar{% + \string\ttfamily\space#2}\encapchar main}\@esphack} +% +\def\SpecialHexKeyIndex#1#2{\Speci@lIndex{#1}{#2}{key}{Hex keys}} +\def\SpecialNatoSymbolIndex#1#2{% + \Speci@lIndex{#1}{#2}{symbol}{NATO App6(c) symbols}} +\def\SpecialNatoFrameIndex#1#2{\Speci@lIndex{#1}{#2}{frame}{NATO App6(c) frame}} +\def\SpecialNatoKeyIndex#1#2{\Speci@lIndex{#1}{#2}{key}{NATO App6(c) keys}} +\def\SpecialKeyIndex#1{\Speci@lIndex{#1}{#1}{key}{TikZ keys}} +% +\def\get@third #1/#2/#3/{\gdef\curr@third{#3}} +\def\get@second #1/#2/#3/{\gdef\curr@second{#2}} +% +\def\KeyT@ble#1#2{ + \leavevmode + \par + \vspace{1ex} + \hspace*{-1cm} + \begin{tabular}{#1} + \hline + #2 + \hline + \end{tabular}\par} +% +\def\ShowKeyT@ble#1{ + \KeyT@ble{|p{.1\textwidth}|>{\columncolor{altcol}}p{.7\textwidth}|}{#1}} +% +\def\Macro{% + \begingroup% + \catcode`\\12 + \MakePrivateLetters\M@cro} +% +\def\M@cro#1{% + \endgroup + \def\tabledata{} + \foreach \k in {#1}{% + \protected@xappto\tabledata{% + \noexpand\spec{\noexpand\string\k}\noexpand\SpecialMainIndex{\k}\\}} + \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\noexpand\tabledata}} +\def\endMacro{} +% +\newenvironment{NatoAppSymbol}[1]{% + \def\tabledata{} + \foreach \k in {#1}{% + \expandafter\get@third\k/ + \protected@xappto\tabledata{% + \noexpand\tikz[scale=.5]{\noexpand\natoapp[main=\curr@third, + faction=none,command=base,frame={draw=lightgray}]} + &\noexpand\spec{\k} + \noexpand\SpecialNatoSymbolIndex{\k}{\curr@third}\\}} + \ShowKeyT@ble{\tabledata}}{} +\newenvironment{NatoAppFrame}[1]{% + \def\tabledata{} + \foreach \k in {#1}{% + %\expandafter\get@third\k/ + %\expandafter\get@second\k/ + \protected@xappto\tabledata{% + \noexpand\tikz[scale=.5]{\noexpand\node[shape=\k] {};} + &\noexpand\spec{\k} + \noexpand\SpecialNatoFrameIndex{\k}{\k}\\}} + \ShowKeyT@ble{\tabledata}}{} +\newenvironment{NatoAppKey}[1]{% + \def\tabledata{} + \foreach \k in {#1}{% + \expandafter\get@second\k// + \protected@xappto\tabledata{% + \noexpand\spec{\k}\noexpand\SpecialNatoKeyIndex{\k}{\curr@second}\\}} + \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{} +% +\newenvironment{HexKey}[1]{% + \def\tabledata{} + \foreach \k in {#1}{% + \expandafter\get@second\k// + \protected@xappto\tabledata{% + \noexpand\spec{\k}\noexpand\SpecialHexKeyIndex{\k}{\curr@second}\\}} + \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{} +\newenvironment{HexKey*}[1]{% + \def\tabledata{} + \foreach \k in {#1}{% + \expandafter\get@second\k/ + \expandafter\get@third\k/ + \protected@xappto\tabledata{% + \noexpand\spec{\k}\noexpand\SpecialHexKeyIndex{\k}{\curr@second/\curr@third}\\}} + \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{} +% +\newenvironment{TikzKey}[1]{% + \def\tabledata{} + \foreach \k in {#1}{% + \protected@xappto\tabledata{% + \noexpand\spec{\k}\noexpand\SpecialKeyIndex{\k}\\}} + \KeyT@ble{|>{\columncolor{altcol}}p{.8\textwidth}|}{\tabledata}}{} +% +\tikzset{ + pics/wg/x axis/.style args={#1,#2,#3,#4,#5}{ + code={ + \begin{scope}[/pgf/number format/.cd,fixed,precision=2] + \path[pic actions] (#1,#3)--(#2,#3) + \foreach \t in {#1,#2,#4}{ + \ifx\t\@empty\else + (\t,#3)--++(0,-.2) + node[anchor=north]{$\pgfmathprintnumber{\t}$}\fi} + \foreach \t in {#5}{ + \ifx\t\@empty\else + (\t,#3)--++(0,-.1) + node[anchor=north,font=\small]{$\pgfmathprintnumber{\t}$}\fi}; + \end{scope}}}, + pics/wg/y axis/.style args={#1,#2,#3,#4,#5}{ + code={ + \begin{scope}[/pgf/number format/.cd,fixed,precision=2] + \path[pic actions] (#1,#2)--(#1,#3) + \foreach \t in {#2,#3,#4}{ + \ifx\t\@empty\else + (#1,\t)--++(.2,0) + node[anchor=west]{$\pgfmathprintnumber{\t}$}\fi} + \foreach \t in {#5}{ + \ifx\t\@empty\else + (#1,\t)--++(.1,0) + node[anchor=west,font=\small]{$\pgfmathprintnumber{\t}$}\fi}; + \end{scope}}}, + pics/wg/xaxis/.style args={#1,#2,#3,#4}{% + code={ + \pic[draw]{wg/x axis={-#1,#1,#2,#3,#4}};}}, + pics/wg/yaxis/.style args={#1,#2,#3,#4}{% + code={ + \pic[draw]{wg/y axis={#1,-#2,#2,#3,#4}};}}, +} +%</docsty> +% +% \iffalse +% -------------------------------------------------------------------- +% +% Symbols documentation driver +% +% -------------------------------------------------------------------- +% \fi +% +% Driver for symbols only document +%<*symbols> +\title{The \textsf{wargame} package\\ + Symbols} +\author{Christian Holm Christensen} +\date{\today} +\begin{document} +\maketitle +% \natoappdbglvl=3 +{\makeatletter\SymbolTable{land}{\n@to@pp@s@ll}} +\end{document} +%</symbols> +% +% +% +% +% +% \iffalse +% -------------------------------------------------------------------- +% +% Compatibility documentation driver +% +% -------------------------------------------------------------------- +% \fi +% +% +%<*compat> +% Driver for compatibility only document +\title{The \textsf{wargame} package\\ + \textsf{milsymb} Compatibility} +\author{Christian Holm Christensen} +\date{\today} +\begin{document} +\newgeometry{margin=1cm} +\maketitle +% \natoappdbglvl=1 +\let\CompatSection\section +\let\CompatSubSection\subsection +\input{cmp_air} +\input{cmp_missile} +\input{cmp_land} +\input{cmp_equipment} +\input{cmp_installation} +\input{cmp_seasurface} +\input{cmp_subsurface} +\input{cmp_seamine} +\input{cmp_space} +\input{cmp_activity} +\restoregeometry +\end{document} +%</compat> +% \fi +% +% \PrintIndex +% \Finale +% +% +% +% \iffalse +% EOF +% Local Variables: +% TeX-command-extra-options: "-shell-escape" +% End: +% \fi |