From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Mon, 2 Sep 2019 13:46:59 +0900
Subject: Initial commit

---
 macros/latex/contrib/cchess/cchess.sty | 163 +++++++++++++++++++++++++++++++++
 1 file changed, 163 insertions(+)
 create mode 100644 macros/latex/contrib/cchess/cchess.sty

(limited to 'macros/latex/contrib/cchess/cchess.sty')

diff --git a/macros/latex/contrib/cchess/cchess.sty b/macros/latex/contrib/cchess/cchess.sty
new file mode 100644
index 0000000000..e36c2be3dc
--- /dev/null
+++ b/macros/latex/contrib/cchess/cchess.sty
@@ -0,0 +1,163 @@
+%
+% Most of the code in this package was literally copied from the example
+% file cchessboard.tex provided with the cchess46.mf font designed by
+% Jacques Richer (see cchessboard.tex for details)
+%
+% i only added the following:
+%
+%  position environment 
+%
+%  \smallboard \normalboard \largeboard
+%
+%  \textpiece  (for setting a piece in running text)
+%
+%  in addition i changed the \piece command so that the first arg takes letters
+%  eg a position on the board is described by
+%
+%    \piece{a}{1}{r} rather than \piece{1}{1}{r}
+%
+%  (this is like the notation of chess and that's the way i know chinese chess
+%   notation)
+%
+% enjoy
+%
+%     Frank Mittelbach 96/12/28
+%
+% below is an example ...
+%
+% \smallboard
+% \begin{position}
+%   \piece{a}{1}{r}  \piece{i}{1}{r}
+%   \piece{b}{1}{n}  \piece{h}{1}{n}
+%   \piece{c}{1}{b}  \piece{g}{1}{b}
+%   \piece{d}{1}{g}  \piece{f}{1}{g}
+%   \piece{e}{5}{c}  \piece{e}{7}{c}
+%   \piece{a}{4}{p}  \piece{c}{4}{p}
+%   \piece{e}{4}{p}  \piece{g}{4}{p}
+%   \piece{i}{4}{p}  \piece{e}{1}{k}
+%   \piece{a}{9}{R}  \piece{i}{10}{R}
+%   \piece{a}{8}{N}  \piece{g}{8}{N}
+%   \piece{c}{10}{B} \piece{g}{10}{B}
+%   \piece{d}{10}{G} \piece{f}{10}{G}
+%   \piece{b}{8}{C}  \piece{h}{8}{C}
+%   \piece{a}{7}{P}  \piece{c}{7}{P}
+%   \piece{g}{7}{P}
+%   \piece{i}{7}{P}  \piece{e}{10}{K}
+% \end{position}
+%
+% ----------------------------------------------------------
+%
+\ProvidesPackage{cchess}
+   [1996/12/28 v1.0b chinese chess support (FMi/SPQR)]
+%
+%
+
+\newcounter{piecex}\newcounter{piecey}
+
+
+\newcommand\largeboard{%
+% The 3 dimensions in this command must be proportionnal to each other
+% \cchessunit is the edge size of individual squares on the board, 
+% in centimeters.
+   \def\cchessunit{2.2}%
+   \font\EchecsChinois cchess46\relax
+}
+\newcommand\normalboard{%
+% The 3 dimensions in this command must be proportionnal to each other
+   \def\cchessunit{1.1}%
+   \font\EchecsChinois cchess46 at 23pt\relax
+}
+\newcommand\smallboard{%
+% The 3 dimensions in this command must be proportionnal to each other
+   \def\cchessunit{0.55}%
+   \font\EchecsChinois cchess46 at 12pt\relax
+}
+% It would be preferable to replace the set \largeboard, \normalboard, \smallboard
+% by a single command with one argument, the edge size of the board, say.
+
+
+\normalboard
+
+\newcommand{\piece}[3]{%   macro pour afficher une piece
+%FMi dirty trick
+  \setcounter{piecex}{\expandafter`\csname#1\endcsname}%
+  \addtocounter{piecex}{-97}%   ascii value of `a'
+  \setcounter{piecey}{#2}\addtocounter{piecey}{-1}%
+  \setbox0=\hbox{\EchecsChinois #3}%
+% work out a masking circle by getting the width of the piece and
+% drawing a white circle of that diameter; the units here are
+% plain PS but if we convert to bp, we get the right result.
+  \@tempdima\wd0\@tempdimc1bp\divide\@tempdima\@tempdimc
+  \put(\value{piecex},\value{piecey}){\special{" 
+    [] 0 setdash 0 setlinejoin 0 setlinecap 
+    0.95 setgray 
+    newpath 0. 0. \number\@tempdima\space 2 div 0 360. arc closepath fill}}%
+  \put(\value{piecex},\value{piecey})%
+  {\kern-0.5\wd0\box0}%
+}
+
+% font for stones in text (this is rather experimental)
+
+\font\CCH=cchess46 scaled 300\relax
+\newcommand\textpiece[1]{\raisebox{3pt}[16pt]{\makebox[30pt][c]{\CCH #1}}}
+
+
+\newsavebox{\Something}%
+\newsavebox{\SW}\newsavebox{\SE}\newsavebox{\NE}\newsavebox{\NW}%
+
+\newenvironment{position}
+   {%
+  \setlength{\unitlength}{\cchessunit cm}%
+  \begin{picture}(9.1,10.1)(-0.6,-0.5)%
+  \put(0,0){\framebox(8,9){}}%
+  \put(-0.05,-0.05){\framebox(8.1,9.1){}}%
+  %
+  \savebox{\Something}(8,1)[bl]{%
+  \multiput(0,0)(1,0){8}{\framebox(1,1){}}}%
+  %
+  \multiput(0,0)(0,1){4}{\usebox{\Something}}%
+  \multiput(0,5)(0,1){4}{\usebox{\Something}}%
+  %
+  \savebox{\SW}(1,1)[bl]{%
+  \put(0.1,0.1){\line(1,0){0.2}}\put(0.1,0.1){\line(0,1){0.2}}}%
+  \savebox{\SE}(1,1)[bl]{%
+  \put(0.9,0.1){\line(-1,0){0.2}}\put(0.9,0.1){\line(0,1){0.2}}}%
+  \savebox{\NE}(1,1)[bl]{%
+  \put(0.9,0.9){\line(-1,0){0.2}}\put(0.9,0.9){\line(0,-1){0.2}}}%
+  \savebox{\NW}(1,1)[bl]{%
+  \put(0.1,0.9){\line(1,0){0.2}}\put(0.1,0.9){\line(0,-1){0.2}}}%
+  % On va commencer par faire les "croix" completes
+  \savebox{\Something}(2,2)[bl]{%
+  \put(0,0){\usebox{\NE}}\put(1,0){\usebox{\NW}}\put(1,1){\usebox{\SW}}\put(0,1){\usebox{\SE}}}%
+  %
+  \put(0,1){\usebox{\Something}}%
+  \put(6,1){\usebox{\Something}}%
+  \put(1,2){\usebox{\Something}}%
+  \put(3,2){\usebox{\Something}}%
+  \put(5,2){\usebox{\Something}}%
+  %
+  \put(0,6){\usebox{\Something}}%
+  \put(6,6){\usebox{\Something}}%
+  \put(1,5){\usebox{\Something}}%
+  \put(3,5){\usebox{\Something}}%
+  \put(5,5){\usebox{\Something}}%
+  % Maintenant les demi-croix gauches
+  \savebox{\Something}(1,2)[bl]{%
+  \put(0,0){\usebox{\NW}}\put(0,1){\usebox{\SW}}}%
+  \put(0,2){\usebox{\Something}}%
+  \put(0,5){\usebox{\Something}}%
+  % ...les demi-croix droites
+  \savebox{\Something}(1,2)[bl]{%
+  \put(0,0){\usebox{\NE}}\put(0,1){\usebox{\SE}}}%
+  \put(7,2){\usebox{\Something}}%
+  \put(7,5){\usebox{\Something}}%
+  %
+  % et pour finir, les camps des generaux:
+  \savebox{\Something}(2,2)[bl]{%
+  \put(0,0){\line(1,1){2}}% La "longueur" a fournir est celle de la projection horizontale
+  \put(2,0){\line(-1,1){2}}}%
+  \put(3,0){\usebox{\Something}}%
+  \put(3,7){\usebox{\Something}}%
+}{\end{picture}}
+
+\endinput
-- 
cgit v1.2.3

