diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/havannah/havannah.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/havannah/havannah.sty | 396 |
1 files changed, 396 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/havannah/havannah.sty b/Master/texmf-dist/tex/latex/havannah/havannah.sty new file mode 100644 index 00000000000..7f3ab204848 --- /dev/null +++ b/Master/texmf-dist/tex/latex/havannah/havannah.sty @@ -0,0 +1,396 @@ +%% +%% This is file `havannah.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% havannah.dtx (with options: `package') +%% +%% This is a generated file. +%% +%% Copyright (C) 2012-2015 by Marcin Ciura +%% +%% This file may be distributed and/or modified under the +%% conditions of the LaTeX Project Public License, either +%% version 1.2 of this license or (at your option) any later +%% version. The latest version of this license is in: +%% +%% http://www.latex-project.org/lppl.txt +%% +%% and version 1.2 or later is part of all distributions of +%% LaTeX version 1999/12/01 or later. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{havannah}[2010/06/06 LaTeX havannah package] +\RequirePackage{tikz} +\newcommand\HLetterCoordinates{% + a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z} +\newcommand\HCoordinateStyle[1]{\sffamily#1} +\newcommand\HMoveNumberStyle[1]{\sffamily#1} +\newcommand\HDrawHex{\shadedraw[ + shading=radial,inner color=gray!30,outer color=gray!70]} +\newcommand\HWhiteStone{\node[ + circle,draw=black,inner sep=0.6pt,fill=white, + minimum size=\HStoneDiameter]} +\newcommand\HBlackStone{\node[ + circle,draw=black,inner sep=0.6pt,fill=black,text=white, + minimum size=\HStoneDiameter]} +\newcommand\HTransparentStone{\node[ + circle,draw=black,inner sep=0.6pt, + minimum size=\HStoneDiameter]} +\newcommand\HBeforeOddMove{} +\newcommand\HBeforeEvenMove{} +\newcommand\HBeforeStone{} +\newcommand{\h@draw@hex}[1]{% + \HDrawHex (#1) + ++(-2\h@one@third@hex@wd,0)-- + ++(\h@one@third@hex@wd,-\h@half@hex@ht)-- + ++(2\h@one@third@hex@wd,0)-- + ++(\h@one@third@hex@wd,\h@half@hex@ht)-- + ++(-\h@one@third@hex@wd,\h@half@hex@ht)-- + ++(-2\h@one@third@hex@wd,0)-- + cycle; +} +\newif\ifh@numbered@moves +\newif\ifh@show@coordinates +\newif\ifh@show@hexes +\pgfkeys{% + /h@havannah@board/.cd, + board size/.store in=\hv@board@size, + coordinate style/.is choice, + coordinate style/classical/.code={% + \def\h@draw@board{\h@draw@classical@board}}, + coordinate style/little golem/.code={% + \def\h@draw@board{\h@draw@little@golem@board}}, + hex height/.store in=\h@hex@height, + prefix/.store in=\h@prefix, + show coordinates/.is if=h@show@coordinates, + show hexes/.is if=h@show@hexes, + x/.store in=\h@xx, + y/.store in=\h@yy, + board size=10, + coordinate style=classical, + hex height=17.5pt, + prefix=, + show coordinates=true, + show hexes=true, + x=0, + y=0, + /h@hex@board/.cd, + top left color/.is choice, + top left color/white/.code={% + \def\h@top@left@color{\HWhiteStone}% + \def\h@bottom@left@color{\HBlackStone}% + }, + top left color/black/.code={% + \def\h@top@left@color{\HBlackStone}% + \def\h@bottom@left@color{\HWhiteStone}% + }, + board size/.store in=\hx@board@size, + hex height/.store in=\h@hex@height, + prefix/.store in=\h@prefix, + relative stone size/.store in=\h@relative@stone@size, + show coordinates/.is if=h@show@coordinates, + show hexes/.is if=h@show@hexes, + x/.store in=\h@xx, + y/.store in=\h@yy, + top left color=black, + board size=11, + hex height=17.5pt, + relative stone size=0.75, + show coordinates=true, + show hexes=true, + /h@game/.cd, + first move label/.store in=\h@first@move@label, + first player/.is choice, + first player/white/.code={% + \def\h@odd@player{\HWhiteStone}% + \def\h@even@player{\HBlackStone}% + }, + first player/black/.code={% + \def\h@odd@player{\HBlackStone}% + \def\h@even@player{\HWhiteStone}% + }, + numbered moves/.is if=h@numbered@moves, + relative stone size/.store in=\h@relative@stone@size, + first move label=1, + numbered moves=true, + relative stone size=0.75, + /h@stone@group/.cd, + color/.is choice, + color/white/.code={\def\h@player{\HWhiteStone}}, + color/black/.code={\def\h@player{\HBlackStone}}, + color/transparent/.code={\def\h@player{\HTransparentStone}}, + label/.store in=\h@label, + relative stone size/.store in=\h@relative@stone@size, + relative stone size=0.75, + /h@hex@group/.cd, + label/.store in=\h@label, +} +\newcount\h@board@diagonal +\newdimen\h@half@hex@ht +\newdimen\h@one@third@hex@wd +\newenvironment{InnerHavannahBoard}[1][]{% + \def\h@odd@player{\HWhiteStone}% + \def\h@even@player{\HBlackStone}% + \pgfqkeys{/h@havannah@board}{#1}% + \setlength\h@half@hex@ht{\h@hex@height}% + \divide\h@half@hex@ht by 2 + \setlength\h@one@third@hex@wd{0.577350269\h@half@hex@ht}% + \h@board@diagonal=\hv@board@size + \multiply\h@board@diagonal by 2 + \advance\h@board@diagonal by -1 + \h@draw@board +} +{} +\newenvironment{HavannahBoard}[1][]{% + \begin{tikzpicture} + \begin{InnerHavannahBoard}[#1,prefix=,x=0,y=0] +} +{ \end{InnerHavannahBoard} + \end{tikzpicture} +} +\newcount\h@l +\newcount\h@a@corner +\newcount\h@b@corner +\newcommand\h@draw@classical@board{% + \h@l=0 + \h@b@corner=\hv@board@size + \foreach \h@letter in \HLetterCoordinates {% + \global\advance\h@l by 1 + \ifnum \h@l > \h@board@diagonal + \breakforeach + \else + \global\advance\h@b@corner by 1 + \h@a@corner=\hv@board@size + \foreach \h@n in {1,...,\h@board@diagonal} {% + \global\advance\h@a@corner by 1 + \ifnum \h@l < \h@a@corner + \ifnum \h@n < \h@b@corner + \coordinate (\h@prefix\h@letter\h@n) at + (\h@xx+3*\h@n\h@one@third@hex@wd-3*\h@l\h@one@third@hex@wd, + \h@yy+\h@n\h@half@hex@ht+\h@l\h@half@hex@ht); + \ifh@show@hexes + \h@draw@hex{\h@prefix\h@letter\h@n}% + \fi + \fi + \fi + }% + \ifh@show@coordinates + \ifnum \h@l < \hv@board@size\relax + \node at + (\h@xx-3*\h@l\h@one@third@hex@wd,\h@yy+\h@l\h@half@hex@ht) + {\HCoordinateStyle{\h@letter}}; + \else + \node at + (\h@xx-3*\hv@board@size\h@one@third@hex@wd, + \h@yy+2*\h@l\h@half@hex@ht-\hv@board@size\h@half@hex@ht) + {\HCoordinateStyle{\h@letter}}; + \fi + \fi + \fi + }% + \ifh@show@coordinates + \foreach \h@n in {1,...,\h@board@diagonal} {% + \ifnum \h@n < \hv@board@size + \node at + (\h@xx+3*\h@n\h@one@third@hex@wd,\h@yy+\h@n\h@half@hex@ht) + {\HCoordinateStyle{\h@n}}; + \else + \node at + (\h@xx+3*\hv@board@size\h@one@third@hex@wd, + \h@yy+2*\h@n\h@half@hex@ht-\hv@board@size\h@half@hex@ht) + {\HCoordinateStyle{\h@n}}; + \fi + }% + \fi +} +\newcommand\h@draw@little@golem@board{% + \h@a@corner=\hv@board@size + \h@b@corner=\hv@board@size + \multiply\h@b@corner by 3 + \h@l=0 + \foreach \h@letter in \HLetterCoordinates {% + \global\advance\h@l by 1 + \ifnum \h@l > \h@board@diagonal + \breakforeach + \else + \global\advance\h@a@corner by 1 + \global\advance\h@b@corner by -1 + \foreach \h@n in {1,...,\h@board@diagonal} {% + \ifnum \h@n < \h@a@corner + \ifnum \h@n < \h@b@corner + \ifnum \h@l < \hv@board@size + \coordinate (\h@prefix\h@letter\h@n) at + (\h@xx+3*\h@l\h@one@third@hex@wd, + \h@yy+2*\hv@board@size\h@half@hex@ht+ + 2*\h@n\h@half@hex@ht-\h@l\h@half@hex@ht); + \ifh@show@hexes + \h@draw@hex{\h@prefix\h@letter\h@n}% + \fi + \else + \coordinate (\h@prefix\h@letter\h@n) at + (\h@xx+3*\h@l\h@one@third@hex@wd, + \h@yy+2*\h@n\h@half@hex@ht+\h@l\h@half@hex@ht); + \ifh@show@hexes + \h@draw@hex{\h@prefix\h@letter\h@n}% + \fi + \fi + \fi + \fi + } + \ifh@show@coordinates + \ifnum \h@l < \hv@board@size + \node at + (\h@xx+3*\h@l\h@one@third@hex@wd, + \h@yy+2*\hv@board@size\h@half@hex@ht-\h@l\h@half@hex@ht) + {\HCoordinateStyle{\h@letter}}; + \else + \node at + (\h@xx+3*\h@l\h@one@third@hex@wd,\h@yy+\h@l\h@half@hex@ht) + {\HCoordinateStyle{\h@letter}}; + \fi + \fi + \fi + }% + \ifh@show@coordinates + \foreach \h@n in {1,...,\h@board@diagonal} {% + \ifnum \h@n < \hv@board@size + \node at + (\h@xx, + \h@yy+2*\h@n\h@half@hex@ht+ + \h@board@diagonal\h@half@hex@ht+\h@half@hex@ht) + {\HCoordinateStyle{\h@n}}; + \node at + (\h@xx+3*\h@board@diagonal\h@one@third@hex@wd+ + 3*\h@one@third@hex@wd, + \h@yy+2*\h@n\h@half@hex@ht+ + \h@board@diagonal\h@half@hex@ht+\h@half@hex@ht) + {\HCoordinateStyle{\h@n}}; + \else + \node at + (\h@xx+3*\h@n\h@one@third@hex@wd- + 3*\hv@board@size\h@one@third@hex@wd, + \h@yy+\h@n\h@half@hex@ht+3*\hv@board@size\h@half@hex@ht) + {\HCoordinateStyle{\h@n}}; + \node at + (\h@xx-3*\h@n\h@one@third@hex@wd+ + 9*\hv@board@size\h@one@third@hex@wd, + \h@yy+\h@n\h@half@hex@ht+3*\hv@board@size\h@half@hex@ht) + {\HCoordinateStyle{\h@n}}; + \fi + }% + \fi +} +\newenvironment{InnerHexBoard}[1][]{% + \def\h@odd@player{\HBlackStone}% + \def\h@even@player{\HWhiteStone}% + \pgfqkeys{/h@hex@board}{#1}% + \tracingcommands=1 + \setlength\h@half@hex@ht{\h@hex@height}% + \divide\h@half@hex@ht by 2 + \setlength\h@one@third@hex@wd{0.577350269\h@half@hex@ht}% + \HStoneDiameter=\h@relative@stone@size\h@half@hex@ht + \multiply\HStoneDiameter by 2 + \h@l=0 + \foreach \h@letter in \HLetterCoordinates {% + \global\advance\h@l by 1 + \ifnum \h@l > \hx@board@size + \breakforeach + \else + \foreach \h@n in {1,...,\hx@board@size} {% + \coordinate (\h@letter\h@n) at + (3*\h@l\h@one@third@hex@wd+3*\h@n\h@one@third@hex@wd, + \h@l\h@half@hex@ht-\h@n\h@half@hex@ht); + \ifh@show@hexes + \h@draw@hex{\h@letter\h@n}% + \fi + }% + \coordinate (\h@letter) at + (3*\h@l\h@one@third@hex@wd, + 2\h@half@hex@ht-2\h@half@hex@ht+\h@l\h@half@hex@ht); + \coordinate (-\h@letter) at + (3*\hx@board@size\h@one@third@hex@wd+ + 3\h@one@third@hex@wd+3*\h@l\h@one@third@hex@wd, + -\hx@board@size\h@half@hex@ht- + \h@half@hex@ht+\h@l\h@half@hex@ht); + \ifh@show@coordinates + \h@top@left@color at (\h@letter) + {\HCoordinateStyle{\h@letter}}; + \h@top@left@color at (-\h@letter) + {\HCoordinateStyle{\h@letter}}; + \fi + \fi + }% + \ifh@show@coordinates + \foreach \h@n in {1,...,\hx@board@size} {% + \coordinate (\h@n) at + (3*\h@n\h@one@third@hex@wd,-1*\h@n\h@half@hex@ht); + \coordinate (-\h@n) at + (3*\hx@board@size\h@one@third@hex@wd+3\h@one@third@hex@wd+ + 3*\h@n\h@one@third@hex@wd, + \hx@board@size\h@half@hex@ht+\h@half@hex@ht-\h@n\h@half@hex@ht); + \h@bottom@left@color at (\h@n) + {\HCoordinateStyle{\h@n}}; + \h@bottom@left@color at (-\h@n) + {\HCoordinateStyle{\h@n}}; + }% + \fi +} +{} +\newenvironment{HexBoard}[1][]{% + \begin{tikzpicture} + \begin{InnerHexBoard}[#1,prefix=,x=0,y=0] +} +{ \end{InnerHexBoard} + \end{tikzpicture} +} +\newcount\h@move@number +\newdimen\HStoneDiameter +\newcommand\HGame[2][]{% + \pgfqkeys{/h@game}{#1}% + \HStoneDiameter=\h@relative@stone@size\h@half@hex@ht + \multiply\HStoneDiameter by 2 + \h@move@number=0 + \ifh@numbered@moves + \def\h@label{\HMoveNumberStyle{\h@first@move@label}% + \global\def\h@label{\HMoveNumberStyle{\the\h@move@number}}} + \else + \def\h@label{} + \fi + \foreach \h@coord in {#2} {% + \global\advance\h@move@number by 1 + \ifodd\h@move@number + \HBeforeOddMove + \h@odd@player at (\h@coord) {\h@label}; + \else + \HBeforeEvenMove + \h@even@player at (\h@coord) {\h@label}; + \fi + } +} +\newcommand\HStoneGroup[2][]{% + \let\h@player\empty + \let\h@label\empty + \pgfqkeys{/h@stone@group}{#1}% + \ifx\h@player\empty + \errmessage{No color specified for HStoneGroup} + \fi + \HStoneDiameter=\h@relative@stone@size\h@half@hex@ht + \multiply\HStoneDiameter by 2 + \foreach \h@coord in {#2} {% + \HBeforeStone + \h@player at (\h@coord) {\h@label}; + }% +} +\newcommand\HHexGroup[2][]{% + \let\h@label\empty + \pgfqkeys{/h@hex@group}{#1}% + \foreach \h@coord in {#2} {% + \node at (\h@coord) {\h@label}; + \h@draw@hex{\h@coord}% + }% +} +\endinput +%% +%% End of file `havannah.sty'. |