summaryrefslogtreecommitdiff
path: root/macros/generic/misc/chessmin.tex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/generic/misc/chessmin.tex
Initial commit
Diffstat (limited to 'macros/generic/misc/chessmin.tex')
-rw-r--r--macros/generic/misc/chessmin.tex171
1 files changed, 171 insertions, 0 deletions
diff --git a/macros/generic/misc/chessmin.tex b/macros/generic/misc/chessmin.tex
new file mode 100644
index 0000000000..49b03d31b4
--- /dev/null
+++ b/macros/generic/misc/chessmin.tex
@@ -0,0 +1,171 @@
+% These are two TeX macros which may be useful for writing about
+% chess. \bore creates a chess diagram from Forsyth notation, with
+% Z used as a terminator. For example,
+%
+% $$\bore r1bqkbnr pppp1ppp 2n5 1B2p3 4P3 5N2 PPPP1PPP RNBQK2R Z$$
+%
+% shows the Ruy Lopez after white's third move.
+%
+% \VAR (number) (moves separated by spaces) Z may be used to write
+% a variation. The macro inserts the move numbers, starting with
+% (number). For example,
+%
+% Continuing from the diagram above, \VAR 3 \dots{} a6 Ba4 Nf6 O--O
+% Be7 Re1 b5 Bb3 O-O c3 d5 Z is the Marshall gambit.
+%
+% Note the \dots{} to indicate that Black made the first move.
+%
+% The diagrams created by \bore have pieces made up of a small number
+% of rectangles. Much nicer diagrams and more powerful macros were
+% created by Piet Tutelaers, available by anonymous ftp
+% at sol.cs.ruu.nl (131.211.80.5). However, the ones offered here
+% do not require additional fonts, and may be easier to use.
+%
+% I authorize circulation of these macros by ftp sites and similar
+% nonprofit media. Improvements are welcome. An earlier version of
+% the macros (with letters for pieces) was done several years ago,
+% with substantial modifications by Steve Cochran.
+%
+% Charles Blair (ceblair@ux1.cso.uiuc.edu)
+% macros start below--- you may cut here --------------------------
+%
+% \fun is the fundamental length unit for the diagrams. If you
+% replace 1.2pt by something else, the scale is changed.
+% The box rf is not used, except to provide something with which to
+% refer to \fun.
+%
+\newdimen\fun \dimen\fun=1.2pt
+\newbox\rf \setbox\rf=\vbox to \dimen\fun{
+\hrule height \dimen\fun width \dimen\fun}
+%
+\def\oil{\offinterlineskip} % I needed to use this in all my vboxes
+%
+% Black pieces are made from solid boxes of specified height and
+% width (the \filbox macro). For White pieces, \filbox is replaced by a
+% macro (\blbox) which draws the lines around the border of such a box.
+% (the white knight is an exception to this)
+% The macro \tbo is defined as \blbox or \filbox as needed.
+%
+\def\filbox#1#2{\vbox{\oil \hrule height #1\ht\rf width #2\ht\rf}}
+%
+\newdimen\adjust
+\def\blbox#1#2{\dimen\adjust=#1\ht\rf \advance\dimen\adjust by-0.4\ht\rf
+\vbox{\oil \hrule height 0.2\ht\rf width #2\wd\rf
+\hbox to #2\wd\rf{\vrule height \dimen\adjust width 0.2\wd\rf\hfil
+\vrule height \dimen\adjust width 0.2\wd\rf}
+\hrule height 0.2\ht\rf width #2\wd\rf}}
+%
+% Each piece is 12 units wide. \scen produces an hbox with this width
+% and either a \blbox or a \filbox in the center.
+%
+\def\scen#1#2{\hbox to 12\wd\rf{\hfil\tbo{#1}{#2}\hfil}}
+%
+% Definitions (color independent) of each piece
+%
+\def\pawn{\vbox{\oil \scen{2.5}{4}\scen{3}{8}\scen{4.5}{4}\scen{3}{10}}}
+%
+\def\bishop{\vbox{\oil \scen{2}{2.5}\scen{3}{8}\scen{4}{10}%
+\scen{3}{6}\scen{1.5}{12}}}
+%
+\def\rook{\vbox{\oil
+\hbox to 12\wd\rf{\tbo2{2.5}\hfil\tbo2{2.5}\hfil\tbo2{2.5}}
+\scen{3}{12}\scen{5.5}{7}\scen{3}{12}}}
+%
+\def\queen{\vbox{\oil \hbox to 12\wd\rf{\tbo{6}{2}\hfil\tbo{8}{2}%
+\hfil\tbo{8}{2}\hfil\tbo{6}{2}}\scen{4}{10}}}
+%
+\def\king{\vbox{\oil% Next 4 lines are the cross part (improvement wanted)
+\hbox to 12\wd\rf{\rlap%
+{\hbox to 12\wd\rf{\hfil\vrule height 3\ht\rf width 0.2\wd\rf\hfil}}%
+\hfil\raise 1.5\ht\rf%
+\hbox{\vrule width 3\ht\rf height 0.2\ht\rf}\hfil}
+\hbox to 12\wd\rf{\tbo{6}{4.5}\hfil\tbo{6}{4.5}}
+\scen{4}{10}}}
+%
+\def\knight{\vbox{\oil \hbox{\hskip 7\wd\rf\tbo{1}{1}}
+\hbox{\hskip2\wd\rf\tbo{2.5}{7}}\hbox{\hskip 2\wd\rf
+\vbox to 3\ht\rf{\tbo{1}{1.5}\vfil}\hskip3\wd\rf\tbo{3}{2.5}}
+\hbox{\hskip 3.4\wd\rf\tbo{4}{5.6}}
+\tbo{2.5}{12}}}
+%
+% Creation of the boxes for the pieces
+%
+\newbox\WP \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WP=\pawn
+\newbox\BP \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BP=\pawn
+\newbox\WB \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WB=\bishop
+\newbox\BB \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BB=\bishop
+\newbox\WR \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WR=\rook
+\newbox\BR \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BR=\rook
+\newbox\WQ \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WQ=\queen
+\newbox\BQ \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BQ=\queen
+\newbox\WK \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WK=\king
+\newbox\BK \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BK=\king
+\newbox\BN \def\tbo#1#2{\filbox{#1}{#2}} \setbox\BN=\knight
+%
+% The exceptional white knight (a lot of work to avoid a line at neck!)
+%
+\newbox\WN \def\tbo#1#2{\blbox{#1}{#2}} \setbox\WN=
+\vbox{\oil \hbox{\hskip 7\wd\rf\tbo{1}{1}}
+\hbox{\hskip2\wd\rf\vrule height 2.5\ht\rf width 0.2\ht\rf
+\vbox to 2.5\ht\rf{\hrule height 0.2\ht\rf width 6.6\wd\rf\vfil
+\hrule height 0.2\ht\rf width 4.5\wd\rf}%
+\vrule height 2.5\ht\rf width 0.2\wd\rf}
+\hbox{\hskip 2\wd\rf
+\vbox to 3\ht\rf{\tbo{1}{1.5}\vfil}\hskip3\wd\rf
+\hbox to 2.5\wd\rf{\vrule height 3\ht\rf width 0.2\wd\rf\hfil
+\vrule height 3\ht\rf width 0.2\wd\rf}}
+\hbox{\hskip 3.4\wd\rf\tbo{4}{5.6}}
+\tbo{2.5}{12}}
+%
+% \ver is the line used for square boundaries on the board
+% \nver is thinner line used to shade dark squares (if no piece on them)
+% \hor draws horizontal lines for each rank
+%
+\def\ver{\vrule height 15\ht\rf width 0.4\wd\rf}
+\def\nver{\vrule height 15\ht\rf width 0.1\wd\rf}
+\def\hor{\hrule height 0.4\wd\rf width 120\wd\rf}
+%
+ \newcount\color \newcount\blanks
+\def\blanksquare{\ifodd\color \hbox to 15\wd\rf{\hfil\nver%
+\hfil\nver\hfil\ver}\else\hbox to 15\wd\rf{\hfil\ver}\fi
+\advance\color by 1}
+%
+% Each piece is centered inside a 15-unit square
+%
+\def\cen#1{\hbox to 15\wd\rf{\hfil\vbox to 15\ht\rf{\vfil\copy#1\vfil}%
+\hfil\ver}}
+%
+% This processes the characters specifying a row of the diagram. It
+% is patterned after the \length example at the end of chapter 20
+% of The TeXbook
+\def\nextchar#1{\let\nex=\nextchar%
+\ifcat7#1%
+\blanks=#1\loop\ifnum\blanks>0 \blanksquare%
+\advance\blanks by -1\repeat\else
+\advance\color by 1%
+\ifx#1P\cen{\WP}\else\ifx#1p\cen{\BP}\else%
+\ifx#1N\cen{\WN}\else\ifx#1n\cen{\BN}\else%
+\ifx#1B\cen{\WB}\else\ifx#1b\cen{\BB}\else%
+\ifx#1Q\cen{\WQ}\else\ifx#1q\cen{\BQ}\else%
+\ifx#1R\cen{\WR}\else\ifx#1r\cen{\BR}%
+\else\ifx#1K\cen{\WK}\else\ifx#1k\cen{\BK}\else\let\nex=\relax%
+\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\nex}
+%
+% \bore carries out preliminary steps for making the diagram.
+% \rgc reads in a string of non-blank characters, checks that the
+% first character is not the terminator Z, gives the string to \nextchar,
+% and then processes the next string. (again patterned after \length)
+%
+\def\bore#1Z{\color=1\vbox{\oil \hor\rgc#1 Z }}
+\def\rgc#1#2 {\advance\color by 1\let\nx=\rgc\ifx#1Z\let\nx=\relax
+\else\hbox{\ver\nextchar#1#2Z}\hor\fi\nx}
+%
+% This macro prints a variation. It is supposed to use the ideas of
+% \length and seems to work, but there is something I don't understand:
+% if the {} following the \else is deleted, something goes wrong. Why?
+%
+\newcount\move \newcount\iswhite
+\def\VAR#1 #2Z{\move=#1\iswhite=1\listem #2 Z }
+\def\listem#1#2 {\ifx#1Z\let\nx=\relax\else{}%
+\ifodd\iswhite{} \number\move~#1#2\else%
+~#1#2\advance\move by 1\fi\advance\iswhite by 1\let\nx=\listem\fi\nx}