diff options
author | Karl Berry <karl@freefriends.org> | 2008-11-17 01:38:47 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2008-11-17 01:38:47 +0000 |
commit | ff8d5e7c0f057c2c1a7abafc338b6f0b84020855 (patch) | |
tree | 09334977a91cf5a08dd455109fe2c2b40a8ecde6 /Master/texmf-dist/tex | |
parent | 47ba5bf6b12104310f5138e5fce3f33cf3e51049 (diff) |
new package chess-problem-diagrams, 16nov08
git-svn-id: svn://tug.org/texlive/trunk@11320 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/chess-problem-diagrams/diagram.sty | 2074 |
1 files changed, 2074 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/chess-problem-diagrams/diagram.sty b/Master/texmf-dist/tex/latex/chess-problem-diagrams/diagram.sty new file mode 100644 index 00000000000..d23dfded10e --- /dev/null +++ b/Master/texmf-dist/tex/latex/chess-problem-diagrams/diagram.sty @@ -0,0 +1,2074 @@ +%% +%% This is file `diagram.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% diagram.dtx (with options: `style') +%% +%% IMPORTANT NOTICE: +%% +%% For the copyright see the source file. +%% +%% Any modified versions of this file must be renamed +%% with new filenames distinct from diagram.sty. +%% +%% For distribution of the original source see the terms +%% for copying and modification in the file diagram.dtx. +%% +%% This generated file may be distributed as long as the +%% original source files, as listed above, are part of the +%% same distribution. (The sources need not necessarily be +%% in the same archive or directory.) +%% File 'diagram.dtx' +%% +%% 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. +%% +%% +%% +%% +\ProvidesPackage{diagram}[2008/03/09] +\DeclareOption{10pt}{\AtBeginDocument{\diagramx}} +\DeclareOption{11pt}{\AtBeginDocument{\diagramxi}} +\DeclareOption{12pt}{\AtBeginDocument{\diagramxii}} +\ExecuteOptions{10pt} +\ProcessOptions +\RequirePackage{ifthen} +\RequirePackage{calc} +%% +%% +%% +\chardef\f@ur=4 +\chardef\@ight=8 +\newcount\elchfont + +\chardef\@pkelch=0 +\chardef\@fselch=1 + +\newcount\dia@type + +\newif\if@textproblem\@textproblemfalse +\def\textproblem{\@textproblemtrue\let\@dia@stipulation=\relax} + +\newif\if@solafterdiagram\@solafterdiagramfalse +\def\solafterdiagram{\@solafterdiagramtrue\ignorespaces} + +\newif\if@vframe\@vframetrue +\newif\if@hframe\@hframetrue +\newif\if@leaveOuter\@leaveOutertrue + +\newif\if@shortform + +\newif\ifspace@vertical +\def\spacehorizontal{\space@verticalfalse} + +\newif\ifdi@no +\newcounter{board@nr} +\newboolean{piececounter} +\newcount\r@w +\newcount\lin@ +\newcount\pl@ne +\newcount\current@plane + +\newcount\w@cnt +\newcount\b@cnt +\newcount\n@cnt +\newboolean{cpd@checkPieceCounts} +\newcounter{cpd@defWhitePieces} +\newcounter{cpd@defBlackPieces} +\newcounter{cpd@defNeutralPieces} + +\newcounter{cpd@whitePieces} +\newcounter{cpd@blackPieces} +\newcounter{cpd@neutralPieces} + +\newcommand{\cpd@stepcounterWhite}{\stepcounter{cpd@whitePieces}} +\newcommand{\cpd@stepcounterBlack}{\stepcounter{cpd@blackPieces}} +\newcommand{\cpd@stepcounterNeutral}{\stepcounter{cpd@neutralPieces}} +\global\let\cpd@stepcounterPieces\relax + +\newcount\help@a +\newcount\help@b + +\newbox\dia@box +\newbox\@cnt@box +\newdimen\@cnt@wd +\newbox\@stip@box + +\newdimen\topdist\topdist\z@ +\newbox\@test@box +\newdimen\@test@dimen +\newif\if@left + +\newcount\brd@ff + +\newdimen\dia@lineskip + +\newdimen\board@width +\newdimen\bd@width +\newdimen\head@width +\newdimen\sq@width + +\newdimen\grid@width +\newdimen\inner@frame +\newdimen\outer@frame +\newdimen\space@frame +\newdimen\v@frame@dist +\newdimen\h@frame@dist +\newdimen\space@frame@dist +\newdimen\v@space@dist +\newdimen\h@space@dist + +\newbox\sq@box +\newbox\plane@box +\newtoks\typis@tk\typis@tk={\relax} +\newtoks\label@tk\label@tk={\relax} +\newtoks\sol@tk\sol@tk={\relax} +\newtoks\number@tk\number@tk={\relax} +\newtoks\aut@tk\aut@tk={\relax} +\newtoks\city@tk\city@tk={\relax} +\newtoks\sourcenr@tk\sourcenr@tk={\relax} +\newtoks\source@tk\source@tk={\relax} +\newtoks\day@tk\day@tk={\relax} +\newcount\from@month\from@month=\z@ +\newcount\to@month\to@month=\z@ +\newtoks\year@tk\year@tk={\relax} +\newtoks\issue@tk\issue@tk={\relax} +\newtoks\pages@tk\pages@tk={\relax} +\newtoks\tournament@tk\tournament@tk={\relax} +\newtoks\award@tk\award@tk={\relax} +\newtoks\after@tk\after@tk={\relax} +\newtoks\version@tk\version@tk={\relax} +\newtoks\correction@tk\correction@tk={\relax} +\newtoks\dedic@tk\dedic@tk={\relax} +\newtoks\fidealbum@tk\fidealbum@tk={\relax} +\newtoks\theme@tk\theme@tk={\relax} +\newtoks\twins@tk\twins@tk={\relax} +\newtoks\judgement@tk\judgement@tk={\relax} +\newtoks\comment@tk\comment@tk={\relax} +\newtoks\computer@tk\computer@tk={-} +\newtoks\nofields@tk\nofields@tk={\relax} +\newtoks\fieldframe@tk\fieldframe@tk={\relax} +\newtoks\gridlines@tk\gridlines@tk={\relax} +\newtoks\pieces@tk\pieces@tk={\relax} +\newtoks\fieldtext@tk\fieldtext@tk={\relax} +\newtoks\text@tk\text@tk={\relax} +\newtoks\stipulation@tk\stipulation@tk={\relax} +\newtoks\condition@tk\condition@tk={\relax} +\newtoks\remark@tk\remark@tk={\relax} +\newif\if@label\@labelfalse +\newif\if@number\@numberfalse +\newif\if@special\@specialfalse +\newif\ifauth@r\auth@rfalse +\newif\if@city\@cityfalse +\newif\if@sourcenr\@sourcenrfalse +\newif\if@source\@sourcefalse +\newif\if@date\@datefalse +\newif\if@day\@dayfalse +\newif\if@year\@yearfalse +\newif\if@issue\@issuefalse +\newif\if@pages\@pagesfalse +\newif\if@tournament\@tournamentfalse +\newif\if@award\@awardfalse +\newif\if@after\@afterfalse +\newif\if@version\@versionfalse +\newif\if@correction\@correctionfalse +\newif\if@dedication\@dedicationfalse +\newif\if@fidealbum\@fidealbumfalse +\newif\if@twins\@twinsfalse +\newif\if@theme\@themefalse +\newif\if@computer\@computerfalse +\newif\if@judgement\@judgementfalse +\newif\if@comment\@commentfalse +\newif\if@pieces\@piecesfalse +\newif\if@fieldtext\@fieldtextfalse +\newif\if@nofields\@nofieldsfalse +\newif\if@gridlines\@gridlinesfalse +\newif\if@fieldframe\@fieldframefalse +\newif\if@stdgrid\@stdgridfalse +\newif\if@show@computer\@show@computertrue +\newif\if@stipulation\@stipulationfalse +\newif\if@condition\@conditionfalse +\newif\if@remark\@remarkfalse +\newif\if@typis\@typisfalse +\newif\if@widedias\@widediasfalse +\newif\ifx@twins\x@twinsfalse +\newif\ifx@cond\x@condfalse +\newif\ifimitator\imitatorfalse +\newif\ifnormal@names\normal@namesfalse +\newif\ifs@lu +\newif\if@develop\@developfalse +\newif\if@notfirst +\newif\if@first +\newwrite\s@lfd +\let\below@newline=\relax +\newcount\@lines +\newcount\@rows +\newcount\lines@max +\newcount\rows@max +\newcount\planes@max +\newcounter{cpd@rowsmax} +\newcounter{cpd@linesmax} +\newcounter{cpd@current@row} +\newcounter{cpd@current@line} +\newcounter{cpd@maxsquare} +\newcounter{cpd@helper} +\newcounter{cpd@current@square@index} +\newcounter{cpd@current@square@value} +\newif\if@stereo\@stereofalse +\newif\if@space\@spacefalse +\newif\if@aindex\@aindexfalse +\newif\if@sindex\@sindexfalse +\newif\if@tindex\@tindexfalse +\newif\ifds@label +\def\diagram{% + \begingroup% + \@ifnextchar [{\@diagram}{\@diagram[\@ight x\@ight]}% +} + +\def\@diagram[#1x#2]{% + \lines@max=#1% + \rows@max=#2% + \setcounter{cpd@linesmax}{#1}% + \setcounter{cpd@rowsmax}{#2}% + \setcounter{cpd@maxsquare}{\value{cpd@rowsmax}*\value{cpd@linesmax}}% + \pl@ne=\z@% + \current@plane=\z@% + \let\put@sqs=\put@sqs@normal% + \let\read@plane=\read@plane@normal% + \@start@diagram% +} +\def\stereodiagram{% + \begingroup% + \@stereotrue% + \let\put@sqs=\put@sqs@stereo% + \let\read@plane=\read@plane@stereo% + \@start@diagram% +} +\def\spacediagram{% + \begingroup% + \@spacetrue% + \@ifnextchar [{\@spacediagram}{\@spacediagram[5x5x5]}% +} + +\def\@spacediagram[#1x#2x#3]{% + \lines@max=#1% + \rows@max=#2% + \planes@max=#3% + \let\put@sqs=\put@sqs@space% + \let\read@plane=\read@plane@space% + \@start@diagram% +} +\def\@start@diagram{% + \init@vars + \let\author=\ds@author + \let\day=\ds@day + \let\month=\ds@month + \let\year=\ds@year + \let\label=\ds@label + \ignorespaces% +} + +\def\showtypis#1{% + \@typistrue% + \typis@tk={#1}% + \ignorespaces% +} + +\def\enddiagram{% + \let\author=\orig@author +\let\day=\orig@day +\let\month=\orig@month +\let\year=\orig@year +\let\label=\orig@label + \if@number% + \else% + \refstepcounter{board@nr}% so \label and \ref work properly + \fi% + % + % Now \label@tk should be set, if wanted, so + % we can generate the index entries + % + \@aindex% + \@sindex% + \@tindex% + % + % Now \@currentlabel will be set right, so we can use + % the original label + \if@label% + \expandafter\@set@label\the\label@tk;% + \fi% + % + % Now we know, if we have frames so we can setup our dimensions + % + \global\sq@width=\fontdimen\tw@\chessfont% + \if@stereo% + \bd@width=\@ight\sq@width% + \board@width=\@ight\sq@width% + \ifdim\h@frame@dist<\sq@width% + \h@frame@dist=\sq@width% + \fi% + % We do already skip with \v@space@dist + % So we use the additional skip \space@frame@dist here + \v@frame@dist=\space@frame@dist% + \ifdim\space@frame>\outer@frame% + \outer@frame=\space@frame% + \fi% + \advance\bd@width\tw@\inner@frame + \advance\board@width\tw@\inner@frame + \advance\board@width\tw@\h@frame@dist% + \advance\board@width\tw@\outer@frame% + \else\if@space% + \ifdim\h@frame@dist<1.5\sq@width% + \h@frame@dist=1.5\sq@width% + \fi% + % We do already skip with \v@space@dist + % So we use the additional skip \space@frame@dist here + \v@frame@dist=\space@frame@dist% + \ifdim\space@frame>\outer@frame% + \outer@frame=\space@frame% + \fi% + \ifspace@vertical% + \bd@width=\lines@max\sq@width% + \board@width\bd@width% + \advance\bd@width\tw@\inner@frame + \advance\board@width\tw@\inner@frame + \advance\board@width\tw@\h@frame@dist% + \advance\board@width\tw@\outer@frame% + \else% + \bd@width=\lines@max\sq@width% + \advance\bd@width\tw@\inner@frame% + \ifdim\h@space@dist<1.5\sq@width% + \h@space@dist=1.5\sq@width% + \fi% + %\h@space@dist=0.7\sq@width% + % Now we can compute the width of the complete board + \board@width\bd@width% + \advance\board@width\h@space@dist% + \multiply\board@width\planes@max% + \advance\board@width\h@space@dist% + \advance\board@width\tw@\outer@frame% + \fi% + \else% + \bd@width=\lines@max\sq@width% + \ifnum\lines@max>\@ight% + % Make the board wider + \board@width=\lines@max\sq@width% + \else% + % Make a normal width + \board@width=\@ight\sq@width% + \fi% + \advance\bd@width\tw@\inner@frame% + \advance\board@width\tw@\inner@frame% + \advance\board@width\tw@\h@frame@dist% + \advance\board@width\tw@\outer@frame% + \fi\fi% + \if@widedias% + \head@width=\textwidth% + \else% + \head@width=\board@width% + \fi% + % + % Now we should build the diagram itself + % + \if@textproblem% + % Put the stipulation into the \sq@box + \setbox\sq@box=\hbox{\vbox to \board@width{\hsize\board@width% + \stipfont% + \raggedright% + \sloppy% + \the\stipulation@tk% + \vfil% + }}% + \else% + \put@sqs% This builds up the \sq@box + % Check, if the given number of pieces is reached + \ifthenelse{\boolean{cpd@checkPieceCounts}}{% + \ifthenelse{\value{cpd@defWhitePieces}=\value{cpd@whitePieces}}{}% + {\errmessage{Wrong number of white pieces}}% + \ifthenelse{\value{cpd@defBlackPieces}=\value{cpd@blackPieces}}{}% + {\errmessage{Wrong number of black pieces}}% + \ifthenelse{\value{cpd@defNeutralPieces}=\value{cpd@neutralPieces}}{}% + {\errmessage{Wrong number of neutral pieces}}% + }{}% + \fi% + % + \global\setbox\dia@box=\hbox{\vbox{% + \parindent\z@% + \parskip\z@% + \baselineskip11\p@\advance\baselineskip\dia@lineskip% + \hsize\head@width% + \centering% + % diagram header + \vskip\topdist% + \vbox{\hsize\board@width\hbox{% + \if@develop\if@label% + \noindent\raggedright\llap{\labelfont\the\label@tk\ }% + \fi\fi% + \vbox{% + \he@dpos\dia@above% + }% + }}% + \vskip\tw@\p@% + % diagram itself + \vtop{\hsize\board@width% + \hbox to \head@width{\hss\vbox{% + \hsize\board@width% + \if@textproblem% + \box\sq@box% + \else% + \outer@henbox{\box\sq@box}% + \fi% + }\hss}% + % diagram trailer + \hbox to \head@width{\hss\vtop{% + \hsize\board@width% + \parskip\z@% + \raggedright% + \put@count% + \dia@below% + }\hss}% + }% + }}% End of \dia@box + \do@dia@job% + \endgroup% +} + +\def\put@count{% + % First we build the box with the figure count + \ifthenelse{\boolean{piececounter}}{% + \global\setbox\@cnt@box=\hbox{% + \if@show@computer% + \ \ C\if@computer +\else --\fi% + \fi% + \ \ (\arabic{cpd@whitePieces}+\arabic{cpd@blackPieces}% + \ifthenelse{\value{cpd@neutralPieces}>0}{+\arabic{cpd@neutralPieces}}{})% + }% + \@cnt@wd=\wd\@cnt@box% + \hangindent-\@cnt@wd% + \hangafter\m@ne% + \noindent% + \hbox to \z@{% + \hbox to \board@width{\hfil\unhbox\@cnt@box}\hskip -\board@width% + }% + }{}% +} + +\let\endstereodiagram=\enddiagram +\let\endspacediagram=\enddiagram +\def\figurine{% + \begingroup + \init@vars + \let\author=\ds@author + \let\day=\ds@day + \let\month=\ds@month + \let\year=\ds@year + \let\label=\ds@label +} + +\def\endfigurine{% + \let\author=\orig@author + \let\day=\orig@day + \let\month=\orig@month + \let\year=\orig@year + \let\label=\orig@label + \if@number% + \else% + \refstepcounter{board@nr}% so \label and \ref work properly + \fi% + % + % Now \label@tk should be set, if wanted, so + % we can generate the index entries + % + \@aindex% + \@sindex% + \@tindex% + % + % Now \@currentlabel will be set right, so we can use + % the original label + % + \if@label% + \expandafter\@set@label\the\label@tk;% + \fi% + % + \@show@figurine% + \endgroup% +} +\gdef\selectelchfont#1{% + \global\elchfont\csname @#1elch\endcsname\defaultelchfont% +} +\newcommand*{\authorfont}{\bfseries} +\newcommand*{\cityfont}{\slshape} +\newcommand*{\sourcefont}{\bfseries\itshape} +\newcommand*{\awardfont}{\itshape} +\newcommand*{\dedicfont}{\itshape} +\newcommand*{\stipfont}{\rmfamily} +\newcommand*{\remfont}{\rmfamily} +\newcommand*{\labelfont}{\rmfamily} +\newcommand*{\boardfont}{\rmfamily} +\newcommand*{\diagramx}{ + \ifcase\elchfont\relax% + \font\chessfont=pkelch12 + \font\chtextfont=pkelch10 + \else% + \font\chessfont=fselch12 + \font\chtextfont=fselch10 + \fi% + \dia@lineskip\z@ + \dia@type\z@ +} + +\newcommand*{\diagramxi}{ + \ifcase\elchfont\relax% + \font\chessfont=pkelch14 + \font\chtextfont=pkelch11 + \else% + \font\chessfont=fselch14 + \font\chtextfont=fselch11 + \fi% + \dia@lineskip\@ne\p@ + \dia@type\@ne +} + +\newcommand*{\diagramxii}{ + \ifcase\elchfont\relax% + \font\chessfont=pkelch16 + \font\chtextfont=pkelch12 + \else% + \font\chessfont=fselch16 + \font\chtextfont=fselch12 + \fi% + \dia@lineskip\tw@\p@ + \dia@type\tw@ +} +\def\defaultelchfont{% + \ifcase\@ptsize\relax% + \diagramx\or% + \diagramxi\or% + \diagramxii% + \fi% +} +\def\dianamestyle#1{\def\@dianame{\csname @#1\endcsname}} +\def\solnamestyle#1{\def\@solname{\csname @#1\endcsname}} +\def\diagnum#1{\c@board@nr=#1\advance\c@board@nr\m@ne} +\def\ra{\mbox{$\rightarrow$}} +\def\lra{\mbox{$\leftrightarrow$}} +\let\rla=\lra +\def\x{\mbox{\ifmmode\times\else$\times$\fi}} +\def\set{\kern -.05em\raise .1ex\hbox{*}} +\def\@O{0\raise.25ex\hbox{-}\kern -.1em\relax} +\def\OO{\@O0} +\def\OOO{\@O\@O0} +\def\any{\ifmmode\sim\else$\sim$\fi} +\def\further{\ifmmode\Rightarrow\else$\Rightarrow$\fi\ \ignorespaces} +\def\spacelayout#1{\csname space@#1\endcsname} +\def\nodiagnumbering{\global\di@nofalse} +\def\diagnumbering#1{% + \di@notrue\diagnum{\@ne}% + \gdef\thediag{\csname @#1\endcsname\c@board@nr}% +} +\def\diagcenter{\def\he@dpos{\centering}} +\def\diagleft{\def\he@dpos{\raggedright}} +\def\diagright{\def\he@dpos{\raggedleft}} +\def\setmonthstyle#1{\def\write@month{\csname @#1\endcsname}} +\def\specialdiagnum#1{% + \@specialtrue% + \number@tk={#1}\@numbertrue\def\thediag{#1}\def\@currentlabel{#1}% + \ignorespaces% +} +\def\ds@label{% + \@ifstar{\ds@labelfalse\ds@xlabel}{\ds@labeltrue\ds@xlabel}% +} +\def\ds@author#1{% + \aut@tk={#1}\auth@rtrue% + \ignorespaces% +} +\def\city#1{% + \city@tk={#1}\@citytrue% + \ignorespaces% +} +\def\sourcenr#1{% + \sourcenr@tk={#1}\@sourcenrtrue% + \ignorespaces% +} +\def\source#1{% + \source@tk={#1}\@sourcetrue% + \ignorespaces% +} +\def\ds@day#1{% + \day@tk={#1}\@daytrue\@datetrue% + \ignorespaces% +} +\def\ds@month#1{% + \from@month=#1\@datetrue% + \ignorespaces% +} +\def\months#1{% + \@months#1;% + \ignorespaces% +} +\def\ds@year#1{% + \year@tk={#1}\@yeartrue\@datetrue% + \ignorespaces% +} +\def\issue#1{% + \issue@tk={#1}\@issuetrue% + \ignorespaces% +} +\def\pages#1{% + \pages@tk={#1}\@pagestrue% + \ignorespaces% +} +\def\tournament#1{% + \tournament@tk={#1}\@tournamenttrue% + \ignorespaces% +} +\def\award#1{% + \award@tk={#1}\@awardtrue% + \ignorespaces% +} +\def\version#1{% + \version@tk={#1}\@versiontrue% + \ignorespaces% +} +\def\after#1{% + \after@tk={#1}\@aftertrue% + \ignorespaces% +} +\def\correction#1{% + \correction@tk={#1}\@correctiontrue% + \ignorespaces% +} +\def\dedication#1{% + \dedic@tk={#1}\@dedicationtrue% + \ignorespaces% +} +\def\fidealbum#1{% + \fidealbum@tk={#1}\@fidealbumtrue% + \ignorespaces% +} +\def\pieces{% + \@ifnextchar[% + {\x@pieces}% + {\@pieces}% +} +\def\x@pieces[#1]{% + % We should parse the given piececounts + \setboolean{cpd@checkPieceCounts}{true}% + \@parseWhiteAndBlackCount#1+\e@list + \@pieces% +} +\def\@parseWhiteAndBlackCount#1+#2+{% + \setcounter{cpd@defWhitePieces}{#1}% + \setcounter{cpd@defBlackPieces}{#2}% + \futurelet\n@xt\cpd@checkNeutral% +} +\let\cpd@nextproc=\relax% +\def\cpd@checkNeutral{% + \if\n@xt\relax% + \let\cpd@nextproc=\relax% + \else% + \let\cpd@nextproc=\@parseNeutralCount% + \fi% + \cpd@nextproc% +} +\def\@parseNeutralCount#1+{% + \setcounter{cpd@defNeutralPieces}{#1}% +} +\def\@pieces#1{% + \pieces@tk={#1}\@piecestrue% + \ignorespaces% +} +\def\fieldtext#1{% + \fieldtext@tk={#1}\@fieldtexttrue% + \ignorespaces% +} +\def\nofields#1{% + \nofields@tk={#1}\@nofieldstrue% + \ignorespaces% +} +\let\nosquares\nofields +\def\gridlines#1{% + \gridlines@tk={#1}\@gridlinestrue% + \ignorespaces% +} +\def\fieldframe#1{% + \fieldframe@tk={#1}\@fieldframetrue% + \ignorespaces% +} +\def\stipulation#1{% + \stipulation@tk={#1}\@stipulationtrue% + \ignorespaces% +} +\def\condition{% + \@ifstar{\x@condtrue\@condition}{\@condition}% +} +\def\@condition#1{% + \condition@tk={#1}\@conditiontrue% + \ignorespaces% +} +\def\twins{% + \@ifstar{\x@twinstrue\@twins}{\@twins}% +} +\def\@twins#1{% + \twins@tk={#1}\@twinstrue% + \ignorespaces% +} +\def\remark#1{% + \remark@tk={#1}\@remarktrue% + \ignorespaces% +} +\def\Co#1{% + \ifx#1+\@computertrue\computer@tk={+}\fi% + \ignorespaces% +} +\long\def\solution#1{% + \sol@tk={#1}\global\s@lutrue% + \ignorespaces% +} +\def\themes#1{% + \theme@tk={#1}\@themetrue% + \ignorespaces% +} +\long\def\comment#1{% + \comment@tk={#1}\@commenttrue% + \ignorespaces% +} +\long\def\judgement#1{% + \judgement@tk={#1}\@judgementtrue% + \ignorespaces% +} +\def\noframe{% + \@vframefalse\@hframefalse% + \ignorespaces% +} +\def\noinnerframe{% + \@leaveOuterfalse\@vframefalse\@hframefalse% + \ignorespaces% +} +\def\verticalcylinder{% + \@vframefalse% + \ignorespaces% +} +\def\horizontalcylinder{% + \@hframefalse% + \ignorespaces% +} +\def\stdgrid{% + \@stdgridtrue% + \ignorespaces% +} +\let\gridchess=\stdgrid +\let\magic=\fieldframe +\let\tourn=\tournament +\let\dedic=\dedication +\let\stip=\stipulation +\let\cond=\condition +\let\rem=\remark +\let\sol=\solution +\def\develop{% + \@developtrue% + \ignorespaces% +} +\def\showcomputer{% + \@show@computertrue% + \ignorespaces% +} +\def\nocomputer{% + \@show@computerfalse% + \ignorespaces% +} +\def\putsol{\immediate\closeout\s@lfd\input\jobname.sol\cl@arsol} +\def\widedias{\@widediastrue\diagcenter} +\def\nowidedias{\@widediasfalse} +\def\normalnames{\normal@namestrue} +\def\reversednames{\normal@namesfalse} +\def\makeaindex{% + \@dia@index% + \newindex[thediag]{author}{adx}{and}{Autorenverzeichnis}% + \@aindextrue\reversednames% +} + +\def\makesindex{% + \@dia@index% + \newindex[thediag]{source}{sdx}{snd}{Quellenregister}% + \@sindextrue% +} + +\def\maketindex{% + \@dia@index% + \newindex[thediag]{theme}{tdx}{tnd}{Themenregister}% + \@tindextrue% +} + +\def\authorindex{{\let\@idxitem\@aidxitem\printindex[author]}} +\def\sourceindex{\printindex[source]} +\def\themeindex{\printindex[theme]} +\def\DefinePieces#1#2#3{% + \@setPieceColor#1\@setPieceSpec#2\@setPieceRotation#3% + \loop@rotation% + \expandafter\xdef\csname\ds@black\ds@white\ds@bishop\endcsname{% + \noexpand\ch@fig{20}% + }% + \expandafter\xdef\csname\ds@black\ds@black\ds@bishop\endcsname{% + \noexpand\ch@fig{32}% + }% + \expandafter\xdef\csname\ds@white F\endcsname{{\chessfont\ }} + \expandafter\xdef\csname\ds@black F\endcsname{{\chessfont\char144}} + \expandafter\xdef\csname\ds@white Nr\endcsname{% + \noexpand\ch@fig{109}% + }% + \expandafter\xdef\csname\ds@black Nr\endcsname{% + \noexpand\ch@fig{121}% + }% + \expandafter\xdef\csname\ds@white Gh\endcsname{% + \noexpand\ch@fig{112}% + }% + \expandafter\xdef\csname\ds@black Gh\endcsname{% + \noexpand\ch@fig{124}% + }% +} +\def\Imi{\ch@fig{157}} +\def\dia@above{% + \@dia@number% + \@dia@authors% + \@dia@city% + \@dia@after% + \@dia@version% + \@dia@source% + \@dia@correction% + \@dia@tournament% + \@dia@award% + \@dia@dedic% + \@dia@fidealbum% +} +\def\dia@below{% + \bgroup% + \if@stipulation% + \@dia@stipulation% + \fi% + \ifx@cond\else% + \@dia@condition% + \fi% + \ifx@twins\else% + \@dia@twins% + \fi% + \@dia@remark% + \if@solafterdiagram% + \below@newline% + \the\sol@tk% + \fi% + \noindent\hbox{}\newline\hbox{}% + \egroup% +} +\def\@dia@number{% + {\authorfont\thediag\par}% +} +\def\@dia@authors{% + \ifauth@r% + \bgroup% + \authorfont% + \ifnormal@names% + \the\aut@tk% + \else% + {\def\name@sep{\par}% + \@notfirstfalse% + \let\@action=\@writename% Parse the list of authors + \@parseTokenlist\aut@tk;} + \fi% + \egroup% + \fi% +} +\def\@show@city#1;{\if@notfirst\ \slash\ \else\@notfirsttrue\fi#1} + +\def\p@rsecity#1; {\@show@city#1;\l@@klist} + +\def\@dia@city{% + \if@city% + \bgroup% + \cityfont\@notfirstfalse% + \let\@action=\p@rsecity\@parseTokenlist\city@tk;% + \par% + \egroup% + \fi% +} + +\def\@dia@after{% + \if@after% + \bgroup% + \dedicfont\the\after@tk\par% + \egroup% + \fi% +} + +\def\@dia@version{% + \if@version% + \bgroup% + \dedicfont\the\version@tk\par% + \egroup% + \fi% +} + +\def\@dia@date{% + \ifnum\from@month>\z@% + \if@day% + \the\day@tk.\write@month\from@month% + \else% + \write@month\from@month% + \fi% + \ifnum\to@month>\z@--\write@month\to@month\fi% + \if@day.\else/\fi% + \fi% + \if@year\the\year@tk\fi% +} + +\def\@dia@source{% + \if@source% + \bgroup% + \sourcefont% + \if@sourcenr\the\sourcenr@tk\ \fi + \the\source@tk% + \if@date\ \ \fi\@dia@date% + \if@issue\ \ \the\issue@tk\fi% + \if@pages ,\ \the\pages@tk\fi% + \par% + \egroup% + \else% + \if@tournament\else\if@date% + \bgroup% + \sourcefont% + \@dia@date% + \par% + \egroup% + \fi\fi% + \fi% +} + +\def\@dia@correction{% + \if@correction% + \bgroup% + \dedicfont\the\correction@tk% + \par% + \egroup% + \fi% +} + +\def\@dia@tournament{% + \if@tournament + \bgroup% + \awardfont% + \the\tournament@tk + \if@source\else\if@date% + \ \ \@dia@date% + \fi\fi% + \par% + \egroup% + \fi% +} + +\def\@dia@award{% + \if@award% + \bgroup% + \awardfont\the\award@tk% + \par% + \egroup% + \fi% +} + +\def\@dia@dedic{% + \if@dedication% + \bgroup% + \dedicfont\the\dedic@tk% + \par% + \egroup% + \fi% +} + +\def\@show@album#1/#2;{#1 FIDE-Album #2} + +\def\@dia@fidealbum{% + \if@fidealbum{% + \expandafter\@show@album\the\fidealbum@tk;% + \par% + }\fi% +} + +\def\@twinskip{\ \ } + +\def\@dia@stipulation{% + \if@stipulation% + \bgroup% + \stipfont% + \the\stipulation@tk% + \ifx@twins% + \let\below@newline\@twinskip% + \@dia@twins% + \else\ifx@cond% + \let\below@newline\@twinskip% + \@dia@condition% + \fi\fi% + \egroup% + \let\below@newline\newline% + \else% + \x@twinsfalse% + \x@condfalse% + \let\below@newline\relax% + \fi% +} + +\def\x@write@twin#1; {% + \hskip1em#1% + \@lefttrue\let\below@newline\newline% + \let\@action\write@twins% + \l@@klist% +} + +\def\write@twins#1; {% + \setbox\@test@box=\hbox{#1\if@left~~\fi}% + \ifdim\wd\@test@box>4\sq@width% + \below@newline% + \@lefttrue% + #1% + \else% + \if@left% + \below@newline% + \fi% + \noindent\hbox to 4\sq@width{#1\hfil}% + \if@left% + \@leftfalse% + \else% + \@lefttrue% + \fi% + \fi% + \let\below@newline\newline + \l@@klist% +} + +\def\@dia@twins{% + \if@twins% + \bgroup% + \@lefttrue% + \remfont% + \ifx@twins% + \let\@action=\x@write@twin% + \else% + \let\@action=\write@twins% + \fi% + \@parseTokenlist\twins@tk;% + \egroup% + \let\below@newline\newline% + \fi% +} + +\def\@dia@condition{% + \if@condition% + \bgroup% + \@lefttrue% + \remfont% + \ifx@cond% + \let\@action=\x@write@twin% + \else% + \let\@action=\write@twins% + \fi% + \@parseTokenlist\condition@tk;% + \egroup% + \let\below@newline\newline% + \fi% +} + +\def\@dia@remark{% + \if@remark% + \bgroup% + \@lefttrue% + \remfont\let\@action=\write@twins% + \@parseTokenlist\remark@tk;% + \egroup% + \let\below@newline\newline% + \fi% +} + +\def\parse@params#1{% + \ifcase\help@a\relax + \label@tk={#1}\ifx\relax#1\else\@labeltrue\fi\or% + \number@tk={#1}\ifx\relax#1\else\@numbertrue\fi\or% + \aut@tk={#1}\ifx\relax#1\else\auth@rtrue\fi\or% + \city@tk={#1}\ifx\relax#1\else\@citytrue\fi\or% + \sourcenr@tk={#1}\ifx\relax#1\else\@sourcenrtrue\fi\or% + \source@tk={#1}\ifx\relax#1\else\@sourcetrue\fi\or% + \day@tk={#1}\ifx\relax#1\else\@daytrue\fi\or% + \from@month=#1\or% + \to@month=#1\or% + \year@tk={#1}\ifx\relax#1\else\@yeartrue\fi\or% + \issue@tk={#1}\ifx\relax#1\else\@issuetrue\fi\or% + \pages@tk={#1}\ifx\relax#1\else\@pagestrue\fi\or% + \tournament@tk={#1}\ifx\relax#1\else\@tournamenttrue\fi\or% + \award@tk={#1}\ifx\relax#1\else\@awardtrue\fi\or% + \after@tk={#1}\ifx\relax#1\else\@aftertrue\fi\or% + \version@tk={#1}\ifx\relax#1\else\@versiontrue\fi\or% + \correction@tk={#1}\ifx\relax#1\else\@correctiontrue\fi\or% + \dedic@tk={#1}\ifx\relax#1\else\@dedicationtrue\fi\or% + \theme@tk={#1}\ifx\relax#1\else\@themetrue\fi\or% + \twins@tk={#1}\ifx\relax#1\else\@twinstrue\fi\or% + \computer@tk={#1}\or% + \comment@tk={#1}\ifx\relax#1\else\@commenttrue\fi\or% + \judgement@tk={#1}\ifx\relax#1\else\@judgementtrue\fi\or% + \sol@tk={#1}% + \fi% + \advance\help@a \@ne% + \l@@klist% +} + +\def\split@param#1{% + \@labelfalse\@numberfalse\auth@rfalse\@cityfalse% + \@sourcenrfalse\@sourcefalse\@dayfalse\@yearfalse% + \@issuefalse\@pagesfalse\@tournamentfalse\@awardfalse% + \@afterfalse\@versionfalse\@correctionfalse\@dedicationfalse% + \@themefalse\@twinsfalse\@commentfalse\@judgementfalse% + \help@a=\z@% + \let\@action=\parse@params\l@@klist#1\e@list% +} +\def\@dia@solution{% + \bgroup% + \parindent\z@% + \parskip\tw@\p@% + {\bf + \noindent\if@label\showlabel{\the\label@tk}\fi% + \the\number@tk) % + \ifauth@r% + \ifnormal@names% + \the\aut@tk% + \else% + {\@notfirstfalse% We are the first one + \def\name@sep{, }% + \let\@action=\@writename% + \@parseTokenlist\aut@tk;}:% + \fi% + \par% + \fi% + }% + \if@develop\if@judgement\the\judgement@tk\par\fi\fi% + \the\sol@tk\par% + \if@comment\the\comment@tk\par\fi% + \egroup% +} +\grid@width=0.6\p@ +\inner@frame=0.6\p@ +\outer@frame=1.2\p@ +\space@frame=\outer@frame +\v@frame@dist=\tw@\p@% +\h@frame@dist=\tw@\p@% +\space@frame@dist=\z@ +\v@space@dist=1em +\def\@show@figurine{% + \noindent% + \@figurine@number% + \@figurine@author% + \@figurine@city% + \@figurine@after% + \@figurine@correction% + \@figurine@version% + \@figurine@source% + \@figurine@tournament% + \@figurine@award% + \@figurine@dedic% + \@figurine@pieces% + \@figurine@stip% + \@figurine@twins% + \@figurine@conditions% + \@figurine@remarks% + \@figurine@computer% +} +\def\@figurine@number{{\authorfont\thediag)}} + +\def\p@rseauthor@figurine#1,#2; {% + \if@notfirst, \else\@notfirsttrue\fi#2 #1% + \l@@klist% +} + +\def\@figurine@author{% + {\ifauth@r% + \authorfont\@notfirstfalse% + \let\@action=\p@rseauthor@figurine% + \@parseTokenlist\aut@tk;% + \ \ % + \fi}% +} + +\def\@figurine@city{% + {\if@city% + \cityfont\@notfirstfalse% + \let\@action=\p@rsecity\@parseTokenlist\city@tk;% + \ \ \ % + \fi}% +} + +\def\@figurine@after{\if@after{\dedicfont\ \ \the\after@tk}\fi} + +\def\@figurine@correction{% + \if@correction{\dedicfont\ \ \the\correction@tk}\fi% +} + +\def\@figurine@version{% + \if@version{\dedicfont\ \ \the\version@tk}\fi% +} + +\def\@figurine@source{% + {\if@source% + \sourcefont% + \if@sourcenr\the\sourcenr@tk\ \fi% + \the\source@tk% + \if@year% + \ \ % + \if@day% + \ifnum\from@month>\z@% + \the\day@tk.% + \write@month\from@month% + \ifnum\to@month>\z@% + -\write@month\to@month% + \fi% + .% + \fi% + \else% + \write@month\the\from@month% + \ifnum\to@month>\z@% + -\write@month\the\to@month% + \fi% + /% + \fi% + \the\year@tk% + \fi% + \if@issue , \the\issue@tk\fi% + \if@pages , \the\pages@tk\fi% + \fi}% +} + +\def\@figurine@tournament{% + \if@tournament{\awardfont\ \ \the\tournament@tk}\fi% +} + +\def\@figurine@award{% + \if@award{\awardfont\ \ \the\award@tk}\fi% +} + +\def\@figurine@dedic{% + \if@dedication{\awardfont\ \ \the\dedic@tk}\fi% +} +\def\show@squares#1\e@list{\ch@fig{\the\help@a}#1, } + +\def\@figurine@pieces{% + {\if@pieces% + \let\@action=\p@rsepieces% + \let\piece@job\show@squares% + \@parseTokenlist\pieces@tk,% + \fi}% +} +\def\@figurine@stip{% + \if@stipulation{\stipfont\ \ \the\stipulation@tk}\fi% +} + +\def\@figurine@conditions{% + \if@condition{\remfont\ \ \the\condition@tk}\fi% +} + +\def\@figurine@twins{% + \if@twins{\remfont\ \ \the\twins@tk}\fi% +} + +\def\@figurine@computer{% + \if@show@computer + \if@computer\ (Co)\fi% + \fi% +} + +\def\@figurine@remarks{% + \if@remark{\stipfont\ \ \the\remark@tk}\fi% +} +\def\do@dia@job{\@write@sol\ifvmode\noindent\fi\unhbox\dia@box} +\def\solhead#1{{\split@param{#1}\@dia@solution}} +\def\@write@sol{% + \ifs@lu% + \immediate\write\s@lfd{% + \noexpand\solhead{% + {\the\label@tk}% + {\thediag}% + {\the\aut@tk}% + {\the\city@tk}% + {\the\sourcenr@tk}% + {\the\source@tk}% + {\the\day@tk}% + {\the\from@month}% + {\the\to@month}% + {\the\year@tk}% + {\the\issue@tk}% + {\the\pages@tk}% + {\the\tournament@tk}% + {\the\award@tk}% + {\the\after@tk}% + {\the\version@tk}% + {\the\correction@tk}% + {\the\dedic@tk}% + {\the\theme@tk}% + {\the\twins@tk}% + {\the\computer@tk}% + {\the\comment@tk}% + {\the\judgement@tk}% + {\the\sol@tk}% + } %end of \solhead + }% + \fi +} +\def\@months#1-#2;{\from@month=#1\to@month=#2\@datetrue} +\def\@writename#1; {\sep@names\@dianame#1; \l@@klist} +\def\name@sep{,\ } +\def\sep@names{\if@notfirst\name@sep\else\@notfirsttrue\fi} +\def\@checkshort#1/#2#3;{% + \@shortformtrue% + \ifx#2\e@list\relax% + \@shortformfalse% + \fi% +} +\def\short@christian#1#2-{% + \if@notfirst -\else\@notfirsttrue\fi% + #1.% + \l@@klist% +} + +\def\@write@christian#1/#2;{#1} + +\def\write@christian#1;{% + \@checkshort#1/\e@list;% + \if@shortform\@write@christian#1;\else#1\fi% +} + +\def\@write@short#1/#2;{#2} + +\def\write@short#1;{% + \@checkshort#1/\e@list;% + \if@shortform% + \@write@short#1;% + \else% + {\@notfirstfalse\let\@action\short@christian\l@@klist#1-\e@list}% + \fi% +} +\def\@fullname#1, #2; {\hbox{\write@christian#2; #1}} +\def\@sirname#1, #2; {#1} +\def\@short#1, #2; {\write@short#2;\ #1} +\def\@noname#1, #2; {} +\def\@normalname#1; {#1} +\def\space@vertical{\space@verticaltrue} +\def\space@horizontal{\space@verticalfalse} +\def\cl@arsol{\immediate\openout\s@lfd=\jobname.sol} +\def\getc@lor#1{% + \if#1\ds@white% + \help@a\z@\global% + \let\cpd@stepcounterPieces\cpd@stepcounterWhite% + \else\if#1\ds@neutral% + \help@a=6\global% + \let\cpd@stepcounterPieces\cpd@stepcounterNeutral% + \else\if#1\ds@black% + \help@a=12\global% + \let\cpd@stepcounterPieces\cpd@stepcounterBlack% + \else\errmessage{invalid color!}% + \fi\fi\fi% + \getpi@ce% +} + +\def\get@text#1{\text@tk={#1}\read@square} + +\def\getpi@ce#1{\if#1B\relax\else + \if#1\ds@knight\advance\help@a\@ne% + \else\if#1\ds@bishop\advance\help@a\tw@% + \else\if#1\ds@rook\advance\help@a\thr@@% + \else\if#1\ds@queen\advance\help@a\f@ur% + \else\if#1\ds@king\advance\help@a 5% + \else\if#1C% + % An imitator should not count for any color. + \let\cpd@stepcounterPieces\relax + \advance\help@a 145% + \else% + \errmessage{invalid piece!}% + \fi\fi\fi\fi\fi\fi\fi% + \futurelet\r@tate\chkr@tate% +} + +\def\chkr@tate{% + \if\r@tate \ds@upsidedown\advance\help@a 108\let\nextpr@c=\skipr@t\else + \if\r@tate \ds@left\advance\help@a 36\let\nextpr@c=\skipr@t\else + \if\r@tate \ds@right\advance\help@a 72\let\nextpr@c=\skipr@t\else + \let\nextpr@c\piece@job\fi\fi\fi\nextpr@c% +} +\def\skipr@t#1{\piece@job} +\def\l@@k{\futurelet\whatsnext\parsefi@lds} +\def\parsefi@lds{% + \if\whatsnext\e@list% + \let\nextpr@c\relax% + \else + \let\nextpr@c\read@square% + \fi% + \nextpr@c% +} + +\def\set@current@square@index#1#2{% + \setcounter{cpd@current@square@index}{#1+\value{cpd@linesmax}*#2}% +} +\def\set@current@square@value#1{% + \expandafter% + \xdef\csname cpd@square@\roman{cpd@current@square@index}\endcsname{#1}% +} +\def\get@current@square@value{% + \setcounter{cpd@current@square@value}% + {\csname cpd@square@\roman{cpd@current@square@index}\endcsname}% +} +\def\set@piece{% + \ifnum\pl@ne=\current@plane% + \cpd@stepcounterPieces% + \set@current@square@index\lin@\r@w% + \get@current@square@value% + \ifthenelse{\value{cpd@current@square@value}=\m@ne} + {\set@current@square@value{\the\help@a}}% + {\ifthenelse{\value{cpd@current@square@value}=144}% + {\set@current@square@value{\the\help@a+18}}% + {\errmessage{Trying to set a piece to an occupied square}}}% + \fi% + \l@@k% +} +\def\set@nofield, {% + \ifnum\pl@ne=\current@plane% + \set@current@square@index\lin@\r@w% + \get@current@square@value% + \ifthenelse{\value{cpd@current@square@value}=\m@ne}% + {}% This is an empty white square, nothing to do + {\ifthenelse{\value{cpd@current@square@value}=144}% + {\set@current@square@value{\m@ne}}% + {\errmessage{Trying to set a piece to an occupied square}}}% + \fi% + \l@@klist% +} +\def\set@frame, {% + \ifnum\pl@ne=\current@plane% + \@vGrid{\the\lin@}{\the\r@w}\@ne% + \@hGrid{\the\lin@}{\the\r@w}\@ne% + \advance\lin@\@ne% + \@vGrid{\the\lin@}{\the\r@w}\@ne% + \advance\lin@\m@ne\advance\r@w\@ne% + \@hGrid{\the\lin@}{\the\r@w}\@ne% + \fi% + \l@@klist% +} +\def\e@list{\relax} +\def\l@@klist{\futurelet\nextlist\ch@cklst} +\def\ch@cklst{% + \ifx\nextlist\e@list% + \let\nextpr@c=\relax% + \else% + \let\nextpr@c=\@action% + \fi% + \nextpr@c% +} +\def\p@rsepieces#1, {\getc@lor#1\e@list\l@@klist} +\def\p@rsetext#1, {\get@text#1\e@list\l@@klist} +\def\set@text{% + \ifnum\pl@ne=\current@plane% + \raise\r@w\sq@width\hbox to \z@{% + \hskip\lin@\sq@width% + \vbox to \sq@width{\vss% + \hbox to \sq@width{% + \hss% + {\the\text@tk}% + \hss% + }\vss}% + \hss% + }% + \fi% + \l@@klist% +} +\def\p@rseauthor#1; {\sh@wauthor#1;\l@@klist} +\def\read@square#1#2{% + \lin@=`#1\advance\lin@ by -`a\relax% + \r@w=#2\advance\r@w by \m@ne% + \read@plane% +} +\def\read@plane@normal{\plane@job} + +\def\read@plane@stereo{\futurelet\plane@char\get@plane@stereo} + +\def\get@plane@stereo{% + \if\plane@char A% + \pl@ne=\@ne\advance\r@w-\tw@\advance\lin@-\tw@% + \let\@plane@job=\skip@plane% + \else\if\plane@char B% + \pl@ne=\tw@\advance\r@w-\tw@\advance\lin@-\tw@% + \let\@plane@job=\skip@plane% + \else\if\plane@char C% + \pl@ne=\thr@@\advance\r@w-\tw@\advance\lin@-\tw@% + \let\@plane@job=\skip@plane% + \else\if\plane@char D% + \pl@ne=\f@ur\advance\r@w-\tw@\advance\lin@-\tw@% + \let\@plane@job=\skip@plane% + \else% + \pl@ne=\z@\let\@plane@job=\plane@job% + \fi\fi\fi\fi% + \@plane@job% +} + +\def\skip@plane#1{\plane@job} + +\def\read@plane@space#1{\pl@ne=`#1\advance\pl@ne by -`A\relax\plane@job} +\def\@vGrid#1#2#3{% + \raise#2\sq@width\hbox to \z@{% + \hskip#1\sq@width\hskip-.5\grid@width% + \vrule height#3\sq@width width\grid@width\hss% + }% +} + +\def\@hGrid#1#2#3{% + \raise#2\sq@width\hbox to \z@{% + \hskip#1\sq@width% + \vrule width#3\sq@width height .5\grid@width depth% + .5\grid@width\hss% + }% +} +\def\@selGrid#1#2, {% + \ifnum\pl@ne=\current@plane% + \if#1h% + \@hGrid#2% + \else\if#1v% + \@vGrid#2% + \else% + \errmessage{Wrong GridSelector #1}% + \fi\fi% + \fi% + \l@@klist% +} +\def\@stdgrid{% + \setbox\plane@box=\vbox{\hbox{% + \help@a=\tw@% + \loop% + \ifnum\help@a<\lines@max% + \@vGrid{\the\help@a}{0}{\the\rows@max}% + \advance\help@a\tw@% + \repeat% + \help@a=\tw@% + \loop% + \ifnum\help@a<\rows@max% + \@hGrid{0}{\the\help@a}{\the\lines@max}% + \advance\help@a\tw@% + \repeat% + \box\plane@box + }}% +} +\def\ds@xlabel#1{% + \label@tk={#1}\@labeltrue% +} + +\def\@set@label#1;{\ifds@label\label{#1}\fi} +\def\init@vars{% + \global\s@lufalse + \setboolean{cpd@checkPieceCounts}{false}% + \setcounter{cpd@defWhitePieces}{\z@}% + \setcounter{cpd@defBlackPieces}{\z@}% + \setcounter{cpd@defNeutralPieces}{\z@}% + \setcounter{cpd@whitePieces}{\z@}% + \setcounter{cpd@blackPieces}{\z@}% + \setcounter{cpd@neutralPieces}{\z@}% + \lin@\z@ +} + +\def\clear@board{% + % Now the new style + \setcounter{cpd@current@row}{0}% + \whiledo{\value{cpd@current@row}<\value{cpd@rowsmax}}{% + \setcounter{cpd@current@line}{0}% + \whiledo{\value{cpd@current@line}<\value{cpd@linesmax}}{% + \set@current@square@index{\value{cpd@current@line}}{\value{cpd@current@row}}% + \setcounter{cpd@helper}{\the\current@plane+\value{cpd@current@line}+\value{cpd@current@row}}% + \ifthenelse{\isodd{\value{cpd@helper}}}% + {\set@current@square@value{-1}}% + {\set@current@square@value{144}}% + \addtocounter{cpd@current@line}{\@ne}% + }% + \addtocounter{cpd@current@row}{\@ne}% + }% +} + +\def\put@row#1{% + \lin@\z@% + \help@b=#1% + \advance\help@b\brd@ff% + \hbox{% + \if@stereo% + \ifnum\current@plane>\z@% + \ifnum\@rows=12% + \llap{\raise .5\sq@width\hbox{\boardfont c6\ }}% + \fi% + \fi% + \fi% + \hbox to \z@{\vbox to \sq@width{}}% + \set@current@square@index{\lin@}{#1}% + \loop% + \get@current@square@value% + \ifthenelse{\value{cpd@current@square@value}=\m@ne}% + {\wF}% + {\char\value{cpd@current@square@value}}% + % \ifnum\count\help@b=\m@ne\wF% + % \else\char\count\help@b\fi% + \advance\lin@\@ne% + \addtocounter{cpd@current@square@index}{1}% + % \advance\help@b\@ne% + \ifnum\lin@<\lines@max\repeat% + }% +} +\def\put@line#1{% + \lin@\z@% + \help@b=#1% + \advance\help@b\brd@ff% + \hbox{% + \if@stereo% + \ifnum\current@plane>\z@% + \ifnum\@rows=12% + \llap{\raise .5\sq@width\hbox{\boardfont c6\ }}% + \fi% + \fi% + \fi% + \hbox to \z@{\vbox to \sq@width{}}% + \loop% + \ifnum\count\help@b=\m@ne\wF% + \else\char\count\help@b\fi% + \advance\lin@\@ne\advance\help@b\@ne% + \ifnum\lin@<\lines@max\repeat% + }% +} +\def\@parseTokenlist#1#2{\expandafter\l@@klist\the#1#2 \e@list} +\def\@addToPlane#1{% + \setbox\plane@box=\vbox{\hbox{% + \@parseTokenlist#1,% + \box\plane@box% + }}% +} +\def\put@plane{% + % We might want gridchess + \if@stdgrid% + \@stdgrid% + \fi% + % Let us first set the fieldframes + \if@fieldframe% + \let\@action\read@square% + \let\plane@job\set@frame% + \@addToPlane\fieldframe@tk% + \fi% + % Now we set text to all squares which are given using \fieldtext + \if@fieldtext% + \let\@action\p@rsetext% + \let\plane@job\set@text% + \@addToPlane\fieldtext@tk% + \fi% + % Then we should add the gridlines + \if@gridlines% + \let\@action\read@plane% + \let\plane@job\@selGrid% + \@addToPlane\gridlines@tk% + \else% + \if@stereo% + \stereo@center% + \fi% + \fi% + % Now we should clear the board + \clear@board% + % Let us now parse the list of pieces + \if@pieces% + \let\@action\p@rsepieces% + \let\piece@job\l@@k\let\plane@job\set@piece% + \@parseTokenlist\pieces@tk,% + \fi% + % Now we clear all fields, which are given using \nofields + \if@nofields% + \let\@action\read@square% + \let\plane@job\set@nofield% + \@parseTokenlist\nofields@tk,% + \fi% + % Now we can put the pieces to the board + \global\setbox\plane@box=\hbox{% + \vbox{\rlap{\box\plane@box}}% + \vbox{% + \chessfont% + \baselineskip=\z@\lineskip=\z@% + \@rows=\rows@max% + % \multiply\@rows by \lines@max% + \loop% + % \advance\@rows -\lines@max% + % \put@line\@rows% + % Remove \put@line in future versions + \advance\@rows \m@ne% + \put@row\@rows% + \ifnum\@rows>\z@\repeat% + }% + }% +} +\def\put@sqs@normal{% + \put@plane% + \setbox\sq@box=\hbox{% + \inner@henbox{\box\plane@box}% + }% +} +\def\put@sqs@stereo{% + \setbox\sq@box=\hbox{\hfil\vbox{% + \current@plane=5% + \vskip\v@space@dist% + \loop% + \advance\current@plane\m@ne% + \ifnum\current@plane=\z@% + \lines@max=\@ight% + \rows@max=\@ight% + \else% + \lines@max=\f@ur% + \rows@max=\f@ur% + \fi% + % Now we should clear the board + \begingroup% We need this for inner loops! + \clear@board% + \put@plane% + \endgroup% + \hbox to \bd@width{% + \hfil% + \inner@henbox{\box\plane@box}% + \ifcase\current@plane\or% + \rlap{{\boardfont\ A}}\or% + \rlap{{\boardfont\ B}}\or% + \rlap{{\boardfont\ C}}\or% + \rlap{{\boardfont\ D}}% + \fi% + \hfil% + }% + \vskip\v@space@dist% + \ifnum\z@<\current@plane\repeat% + }\hfil}% +} + +\def\stereo@center{% + \ifnum\current@plane=\z@% + \setbox\plane@box=\vbox{\hbox{% + \@hGrid\tw@\tw@\f@ur\@hGrid\tw@ 6\f@ur% + \@vGrid\tw@\tw@\f@ur\@vGrid6\tw@\f@ur% + \box\plane@box% + }}% + \fi% +} +\def\put@sqs@space@vertical{% + \setbox\sq@box=\hbox{\hfil\vbox{% + \current@plane=\planes@max% + \vskip\v@space@dist% + \loop% + \advance\current@plane\m@ne% + % Now we should clear the board + \begingroup% We use inner loops! + \clear@board% + \put@plane% + \hbox to \bd@width{% + \inner@henbox{\box\plane@box}% + \advance\current@plane`A% + \rlap{{\boardfont\ \char\current@plane}}% + }% + \endgroup% + \vskip\v@space@dist% + \ifnum\z@<\current@plane\repeat% + }\hfil}% +} + +\def\put@sqs@space@horizontal{% + \setbox\sq@box=\hbox{% + \current@plane=\z@% + \hskip\h@space@dist% + \loop% + % Now we should clear the board + \begingroup% We use inner loops! + \clear@board% + \put@plane% + \hbox to \bd@width{% + \inner@henbox{\box\plane@box}% + \advance\current@plane`A% + \rlap{{\boardfont\ \char\current@plane}}% + }% + \endgroup% + \hskip\h@space@dist% + \advance\current@plane\@ne% + \ifnum\planes@max>\current@plane% + \repeat% + }% +} + +\def\put@sqs@space{% + \ifspace@vertical% + \put@sqs@space@vertical% + \else% + \put@sqs@space@horizontal% + \fi% +} +\def\@inner@vframe{% + \if@vframe% + \vrule width \inner@frame% + \else% + \hskip\inner@frame% + \fi% +} + +\def\@inner@hframe{% + \if@hframe% + \hrule height \inner@frame% + \else% + \vskip\inner@frame% + \fi% +} +\def\inner@v@frame@rule{% + \if@stereo% + \@inner@vframe% + \else\if@space% + \@inner@vframe% + \else\if@leaveOuter% + \vrule width \inner@frame% + \else% + \@inner@vframe% + \fi\fi\fi% +} + +\def\inner@h@frame@rule{% + \if@stereo% + \@inner@hframe% + \else\if@space% + \@inner@hframe% + \else\if@leaveOuter% + \hrule height \inner@frame% + \else% + \@inner@hframe% + \fi\fi\fi% +} + +\def\inner@henbox#1{% + \hbox{% + \inner@v@frame@rule% + \vbox{\inner@h@frame@rule#1\inner@h@frame@rule}% + \inner@v@frame@rule% + }% +} +\def\@outer@vrule{\vrule width \outer@frame} + +\def\@outer@hrule{\hrule height \outer@frame} +\def\outer@v@frame@rule{% + \if@stereo% + \@outer@vrule% + \else\if@space% + \@outer@vrule% + \else\if@leaveOuter% + \if@vframe\@outer@vrule\else\hskip\outer@frame\fi% + \else% + \@outer@vrule% + \fi\fi\fi% +} + +\def\outer@h@frame@rule{% + \if@stereo% + \@outer@hrule% + \else\if@space% + \@outer@hrule% + \else\if@leaveOuter% + \if@hframe\@outer@hrule\else\vskip\outer@frame\fi% + \else% + \@outer@hrule% + \fi\fi\fi% +} + +\def\outer@henbox#1{% + \outer@h@frame@rule% + \hbox{% + \outer@v@frame@rule% + \ifspace@vertical% + \hskip\h@frame@dist% + \fi% + \vbox{% + \ifspace@vertical% + \vskip\v@frame@dist% + \else% + \vskip\v@space@dist% + \fi% + #1% + \ifspace@vertical% + \vskip\v@frame@dist% + \else% + \vskip\v@space@dist% + \fi% + }% + \ifspace@vertical% + \hskip\h@frame@dist% + \fi% + \outer@v@frame@rule% + }% + \outer@h@frame@rule% +} +\def\ch@fig#1{% + \ifvmode\noindent\fi% + \hbox{\chtextfont\lower.3\fontdimen\tw@\chtextfont\hbox{\char#1}}% +} +\def\@dia@index{% + \@ifundefined{newindex}% + {\errmessage{You should add documentstyle-option 'index'}}{}% +} + +\def\showlabel#1{% + \if@develop% + \raise1ex\hbox{\labelfont#1}\penalty\exhyphenpenalty% + \fi% +} + +\def\@aidxitem#1, #2, #3{% + \par\medskip#1, \write@christian#2; \dotfill #3% +} + +\def\dia@index#1\@sep#2[#3]{\index[#3]{#2|showlabel{#1}}} + +\def\parse@aindex#1; {% + \expandafter\dia@index\the\label@tk\@sep#1[author]\l@@klist% +} + +\def\@aindex{% + \if@aindex% + \ifnormal@names% + \errmessage{Cannot create index entries with normalnames}% + \else\ifauth@r% + \let\@action=\parse@aindex\@parseTokenlist\aut@tk;% + \fi\fi% + \fi% +} + +\def\x@sindex#1\@sep{\expandafter\dia@index\the\label@tk\@sep#1[source]} + +\def\@sindex{% + \if@sindex\if@source% + \expandafter\x@sindex\the\source@tk\@sep% + \fi\fi% +} + +\def\parse@tindex#1, {% + \expandafter\dia@index\the\label@tk\@sep#1[theme]\l@@klist% +} + +\def\@tindex{% + \if@tindex\if@theme% + \let\@action=\parse@tindex\@parseTokenlist\theme@tk,% + \fi\fi% +} +\def\@setPieceColor#1#2#3{% + \gdef\ds@white{#1}\gdef\ds@black{#2}\gdef\ds@neutral{#3}% +} + +\def\@setPieceSpec#1#2#3#4#5#6{% + \gdef\ds@king{#1}\gdef\ds@queen{#2}\gdef\ds@rook{#3}% + \gdef\ds@bishop{#4}\gdef\ds@knight{#5}\gdef\ds@pawn{#6}% +} + +\def\@setPieceRotation#1#2#3{% + \gdef\ds@left{#1}\gdef\ds@right{#2}\gdef\ds@upsidedown{#3}% +} +\def\loop@rotation{% + \bgroup% + \n@cnt\z@% + \help@a\z@% + \loop% + \ifcase\n@cnt% + \def\@theRotation{}% + \or% + \def\@theRotation{\ds@left}% + \or% + \def\@theRotation{\ds@right}% + \or% + \def\@theRotation{\ds@upsidedown}% + \fi% + \loop@color% + \advance\n@cnt\@ne% + \advance\help@a by 36\relax% + \ifnum\n@cnt<\f@ur\repeat% + \egroup% +} + +\def\loop@color{% + \bgroup% + \w@cnt\z@% + \loop% + \ifcase\w@cnt% + \def\@theColor{\ds@white}% + \or% + \def\@theColor{\ds@neutral}% + \or% + \def\@theColor{\ds@black}% + \fi% + \loop@piece% + \advance\w@cnt\@ne% + \advance\help@a by 6% + \ifnum\w@cnt<\thr@@\repeat% + \egroup% +} + +\def\loop@piece{% + \bgroup% + \b@cnt\z@% + \loop% + \ifcase\b@cnt% + \def\@thePiece{\ds@pawn}% + \or% + \def\@thePiece{\ds@knight}% + \or% + \def\@thePiece{\ds@bishop}% + \or% + \def\@thePiece{\ds@rook}% + \or% + \def\@thePiece{\ds@queen}% + \or% + \def\@thePiece{\ds@king}% + \fi% + \expandafter\xdef\csname + \@theColor\@thePiece\@theRotation\endcsname{% + \noexpand\ch@fig{\the\help@a}% + } + \advance\b@cnt\@ne% + \advance\help@a by \@ne% + \ifnum\b@cnt<6\repeat% + \egroup% +} +\elchfont\@fselch + +\defaultelchfont% +\diagnum{\@ne} +%% \figcnttrue +\setboolean{piececounter}{true} +\def\@dianame{\@fullname} +\def\@solname{\@fullname} +\space@verticaltrue +\diagnumbering{arabic} +\def\write@month{\@arabic}% +\diagleft +\cl@arsol +\let\orig@author=\author +\let\orig@day=\day +\let\orig@month=\month +\let\orig@year=\year +\let\orig@label=\label +\DefinePieces{wsn}{KDTLSB}{LRU} +\newdimen\normalboardwidth +\def\setboardwidth{% + \normalboardwidth=\@ight\fontdimen\tw@\chessfont% + \advance\normalboardwidth\tw@\inner@frame + \advance\normalboardwidth\tw@\h@frame@dist + \advance\normalboardwidth\tw@\outer@frame +} + +\setboardwidth + +\endinput +%% +%% End of file `diagram.sty'. |