[comp.text.tex] Chess Typesetting macros

daved@cbnewsl.att.com (david.dougherty) (07/31/90)

The following shell archive contains macros for typesetting chess.
These macros were written by Piet Tutelaers in the Netherlands. His
address appears below.

The archive contains

	1. chess.sty	the actual typesetting macros,
	2. tal.ltx	an excerpt from Bobby Fischer's "60 of my
			Most Memorable Games,"
	3. tal.ltx.diff a context diff of tal.ltx and tal.tex. That
			is, 'patch < tal.ltx.diff' yields tal.tex,
			for those who do not have LaTeX.
	4. 2side.tex	a set of Plain TeX macros to typeset in two-
			column mode (ala LaTeX).

The fonts that go with these macros (also done by Piet) can be found
on ymir.claremont.edu in the local:[anonymous.mf.chess] directory.

--
David W. Dougherty @ AT&T Bell Laboratories
ARPA: dwd@attunix.att.COM
UUCP: ...!att!attunix!dwd

and

uucp:   rcpt@urc.tue.nl       | Piet Tutelaers        Room  RC 1.82
bitnet: rcpt@heithe5.BITNET   | Eindhoven University of  Technology
phone:  +31 (0)40 474541      | P.O. Box 513, 5600 MB Eindhoven, NL

------------------------------cut here------------------------------
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then unpack
# it by saving it into a file and typing "sh file".  To overwrite existing
# files, type "sh file -c".  You can also feed this as standard input via
# unshar, or by typing "sh <file", e.g..  If this archive is complete, you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  chess.sty tal.ltx tal.ltx.diff 2side.tex
# Wrapped by rcpt@rw3.urc.tue.nl on Thu Jul 26 16:40:40 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'chess.sty' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'chess.sty'\"
else
echo shar: Extracting \"'chess.sty'\" \(12040 characters\)
sed "s/^X//" >'chess.sty' <<'END_OF_FILE'
X%
X% chess.sty
X% ---------
X% Style for writing about chess games
X% Author : Piet Tutelaers (UUCP: rcpt@urc.tue.nl)
X% Version: 1 (5 Jan 1990)
X%
X\def\@digits{
X\catcode`0=11
X\catcode`1=11
X\catcode`2=11
X\catcode`3=11
X\catcode`4=11
X\catcode`5=11
X\catcode`6=11
X\catcode`7=11
X\catcode`8=11
X\catcode`9=11}
X
X\def\@nodigits{
X\catcode`0=12
X\catcode`1=12
X\catcode`2=12
X\catcode`3=12
X\catcode`4=12
X\catcode`5=12
X\catcode`6=12
X\catcode`7=12
X\catcode`8=12
X\catcode`9=12}
X
X\def\@set[#1#2](#3){%arguments: [a-h1-8](<letter>)
X    \@digits\expandafter\xdef\csname#1\number#2\endcsname{#3}\@nodigits}
X
X% Finding next macro was not simple ... (See Excercise 7.10 TeXbook.)
X\def\@get#1[#2#3]{%arguments:\cs[a-h1-8]
X    \@digits\edef#1{\def\noexpand#1{\csname#2\number#3\endcsname}}#1\@nodigits}
X
X\font\Chess=chess20
X
X\newcount\@c % column
X\newcount\@r % row
X\newcount\@sum % row+column
X
X\def\@col{\ifcase\@c\or a\or b\or c\or d\or e\or f\or g\or h\fi}
X
X\def\@showchar{
X   \@get\piece[\@col\the\@r]
X   \if\piece E \ifodd\@sum 0\else Z\fi\else
X   \if\piece P \ifodd\@sum P\else O\fi\else
X   \if\piece p \ifodd\@sum p\else o\fi\else
X   \if\piece R \ifodd\@sum R\else S\fi\else
X   \if\piece B \ifodd\@sum B\else A\fi\else
X   \if\piece N \ifodd\@sum N\else M\fi\else
X   \if\piece r \ifodd\@sum r\else s\fi\else
X   \if\piece b \ifodd\@sum b\else a\fi\else
X   \if\piece n \ifodd\@sum n\else m\fi\else
X   \if\piece K \ifodd\@sum K\else J\fi\else
X   \if\piece Q \ifodd\@sum Q\else L\fi\else
X   \if\piece k \ifodd\@sum k\else j\fi\else
X   \if\piece q \ifodd\@sum q\else l\fi\else
X   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
X
X\def\@showrow#1{
X   \@r=#1\@c=1
X   \@sum=\@r\advance\@sum by\@c
X   \loop
X      \@showchar
X      \ifnum\@c<8 \advance\@c by1\advance\@sum by1
X   \repeat
X}
X	
X\def\showboard{
X\vbox{\offinterlineskip
X   \hrule height1pt
X   \hbox{\vrule width1pt\Chess
X         \vbox{\hbox{\@showrow8}
X               \hbox{\@showrow7}
X               \hbox{\@showrow6}
X               \hbox{\@showrow5}
X               \hbox{\@showrow4}
X               \hbox{\@showrow3}
X               \hbox{\@showrow2}
X               \hbox{\@showrow1}}%
X         \vrule width1pt}
X   \hrule height1pt}
X}
X
X% inner loop needs extra { ... }
X
X\def\@emptyboard{
X   \@r=1
X   \loop
X      {\@c=1
X       \loop
X         \@set[\@col\the\@r](E)
X         \ifnum\@c<8 \advance\@c by1
X       \repeat}
X       \ifnum\@r<8 \advance\@r by 1
X   \repeat
X}
X
X\def\@initboard{
X% empty squares
X   \@r=3
X   \loop
X     {\@c=1
X      \loop
X         \@set[\@col\the\@r](E)
X         \ifnum\@c<8 \advance\@c by1
X      \repeat}
X      \ifnum\@r<6 \advance\@r by 1
X   \repeat
X% pawns
X   \@c=1
X   \loop
X      \@set[\@col2](P)\@set[\@col7](p)
X      \ifnum\@c<8 \advance\@c by1
X   \repeat 
X% pieces
X   \@set[a1](R)\@set[h1](R)
X   \@set[a8](r)\@set[h8](r)
X   \@set[b1](N)\@set[g1](N)
X   \@set[b8](n)\@set[g8](n)
X   \@set[c1](B)\@set[f1](B)
X   \@set[c8](b)\@set[f8](b)
X   \@set[d1](Q)\@set[e1](K)
X   \@set[d8](q)\@set[e8](k)
X}
X
X%
X% The next part defines a user friendly notation for chess moves.
X% Moves works only in chess-environment: \begin{chess} ... \end{chess}
X% in LaTeX, or \chess ... \endchess in TeX.
X% Some examples:  |21. Nf3-e5, Ke8*f8 22. 0-0-0+, Bh8*a1|
X%              :  |21.: Ke8*f8 22. Bh8*a1, 0-0|
X%              :  |21 Nfe5 K*f8 22 0-0-0! B*a1|
X%              :  |21: K*f8 22 B*a1 0-0|
X%
X
X\font\Fig=chessfig10
X
X\gdef\@king{{\Fig K}}
X\gdef\@queen{{\Fig Q}}
X\gdef\@rook{{\Fig R}}
X\gdef\@bishop{{\Fig B}}
X\gdef\@knight{{\Fig N}}
X\gdef\@dash{--}
X\gdef\@capt{$\times$}
X\gdef\@dots{~$\ldots$,}
X\gdef\@dot{\char46}
X
X\newif\ifnotation \notationfalse
X\catcode`|=\active
X{%
X \catcode`:=\active\catcode`.=\active\catcode`*=\active\catcode`-=\active
X \catcode`K=\active\catcode`Q=\active\catcode`R=\active\catcode`B=\active
X \catcode`N=\active\catcode`D=\active\catcode`T=\active\catcode`L=\active
X \catcode`P=\active
X \gdef\@notation{%
X   \ifnotation
X     \endgroup\notationfalse
X   \else
X     \begingroup\notationtrue
X     \catcode`:=\active\catcode`.=\active\catcode`*=\active\catcode`-=\active
X     \catcode`K=\active\catcode`Q=\active\catcode`R=\active\catcode`B=\active
X     \catcode`N=\active\catcode`D=\active\catcode`T=\active\catcode`L=\active
X     \catcode`P=\active
X     \let K=\@king\let Q=\@queen\let R=\@rook\let B=\@bishop\let N=\@knight
X     \let D=\@queen\let T=\@rook\let L=\@bishop\let P=\@knight\let-=\@dash
X     \let*=\@capt\let:=\@dots\let.=\@dot
X   \fi}
X%
X% Provide a chess environment in which the `|' character is active, because
X% the `|' is used by LaTeX in the `tabular' environment!
X%
X \gdef\chess{\catcode`|=\active\let|=\@notation}
X \gdef\endchess{\catcode`|=12}
X}
X\catcode`|=12
X
X%
X% Next part provides a ply (half move) generator
X%
X
X\newif\ifWhite     \newif\ifFigure    \newif\ifcapture   
X
X%
X% next newif's needed for castling
X%
X\newif\ifKnotmoved \newif\ifknotmoved
X\newif\ifcastling  \newif\ifoo
X
X%
X% Globals for special pawn moves (en passant capture and promotion)
X%
X
X\newif\ifenpassant \newif\ifpromotion 
X
X\def\@color#1{ %  Color of a piece     0: none, -1: black, 1: white
X   \if #1E0\else
X   \if #1P1\else\if #1R1\else\if #1N1\else\if #1B1
X   \else\if #1K1\else\if #1Q1\else
X   \if #1p-1\else\if #1r-1\else\if #1n-1\else\if #1b-1\else
X   \if #1q-1\else\if #1k-1
X   \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
X
X%
X% No checking is done for validity of moves, only legal moves behave well!!
X%
X
X\def\@ply#1#2#3#4#5 {% Syntax: [a-h][1-8][a-h][1-8]{QRBN}
X   \@get\piece[#1#2]\@get\capture[#3#4]\Figuretrue
X   \if\capture E\capturefalse\else\capturetrue\fi
X   \ifWhite
X      \if\piece P\Figurefalse
X         \if#46
X             \if\eprow#3\capturetrue\enpassanttrue\fi
X             \xdef\eprow{x}
X         \else
X            \xdef\eprow{x}
X            \if#22
X               \if#44\xdef\eprow{#3}\fi
X            \else
X               \if#48\promotiontrue\fi
X            \fi
X         \fi
X      \else 
X         \if\piece K% check for possible castling
X            \ifKnotmoved
X               \if#3g\if#41\castlingtrue\ootrue\fi
X               \else\if#3c\if#41\castlingtrue\oofalse\fi\fi
X               \fi
X            \fi
X         \fi
X      \fi
X      \ifcastling
X          \@set[#1#2](E)\@set[#3#4](K)
X          \ifoo 0\@dash0#5\@set[f1](R)\@set[h1](E)
X          \else 0\@dash0#5\@dash0\@set[d1](R)\@set[a1](E)\fi
X          \castlingfalse\Knotmovedfalse
X      \else
X          \ifFigure{\Fig\piece}\fi
X            #1#2\ifcapture\@capt\else\@dash\fi#3#4
X            \ifpromotion{\Fig#5}\else#5\fi
X          \@set[#1#2](E)
X          \ifpromotion\@set[#3#4](#5)\else\@set[#3#4](\piece)\fi
X          \ifenpassant\@set[#3#2](E)\enpassantfalse\fi
X      \fi
X      \global\Whitefalse
X   \else
X      \if\piece p\Figurefalse
X         \if#43
X             \if\eprow#3\capturetrue\enpassanttrue\fi
X             \xdef\eprow{x}
X         \else
X            \xdef\eprow{x}
X            \if#27
X               \if#45\xdef\eprow{#3}\fi
X            \else
X               \if#41\promotiontrue\fi
X            \fi
X         \fi
X      \else
X         \if\piece k
X            \ifknotmoved
X               \if#3g\if#48\castlingtrue\ootrue\fi
X               \else\if#3c\if#48\castlingtrue\oofalse\fi\fi
X               \fi
X            \fi
X         \fi
X      \fi
X      \ifcastling
X          \@set[#1#2](E)\@set[#3#4](k)
X          \ifoo 0\@dash0#5\@set[f8](r)\@set[h8](E)
X          \else 0\@dash0#5\@dash0\@set[d8](r)\@set[a8](E)\fi
X          \castlingfalse\knotmovedfalse
X      \else
X          \ifFigure{\Fig\if\piece rR\else\if\piece bB\else\if\piece nN\else
X                        \if\piece qQ\else K\fi\fi\fi\fi}\fi%
X            #1#2\ifcapture\@capt\else\@dash\fi#3#4
X            \ifpromotion{\Fig#5}\else#5\fi
X          \@set[#1#2](E)\ifpromotion\@set[#3#4](#5)\else\@set[#3#4](\piece)\fi
X          \ifenpassant\@set[#3#2](E)\enpassantfalse\fi
X      \fi
X      \global\Whitetrue
X   \fi
X}
X
X\newcount\movecount \movecount=0
X
X\def\move#1 #2 {\frenchspacing
X    \ifWhite\advance\movecount by 1\fi
X    \hskip1cm\llap{\the\movecount.}\hskip.5cm
X    \hbox to 2.3cm{\hfil\@ply#1 \hfil}\hskip.5cm
X    \hbox to 2.3cm{\hfil\@ply#2 \hfil}
X    \par}
X	
X\def\ply#1 {\frenchspacing
X    \ifWhite\advance\movecount by 1
X       \hskip1cm\llap{\the\movecount.}\hskip.5cm
X       \hbox to 2.3cm{\hfil\@ply#1 \hfil}
X    \else\hskip1cm\llap{\the\movecount.}\hskip.5cm
X       \hbox to 2.3cm{\hfil$\ldots$\hfil}\hskip.5cm
X       \hbox to 2.3cm{\hfil\@ply#1 \hfil}
X    \fi\par}
X	
X\def\newgame{\movecount=0 \@initboard
X    \Whitetrue\castlingfalse
X    \Knotmovedtrue\knotmovedtrue
X    \promotionfalse\enpassantfalse}
X
X\def\@dolist{\afterassignment\@dodolist\let\@next= } % Answer 11.5 TeXbook
X\def\@dodolist{\ifx\@next\@endlist \let\@next\relax  % adapted to generate
X  \else \\\let\@next\@dolist \fi                     % chess diagrams
X  \@next}
X  
X\def\@endlist{\@endlist}
X
X\def\\{\if\@next\space\@set[\@col\the\@r](E)\else
X       \if\@next *    \@set[\@col\the\@r](E)\else
X       \if\@next P    \@set[\@col\the\@r](P)\else
X       \if\@next p    \@set[\@col\the\@r](p)\else
X       \if\@next R    \@set[\@col\the\@r](R)\else
X       \if\@next r    \@set[\@col\the\@r](r)\else
X       \if\@next B    \@set[\@col\the\@r](B)\else
X       \if\@next b    \@set[\@col\the\@r](b)\else
X       \if\@next N    \@set[\@col\the\@r](N)\else
X       \if\@next n    \@set[\@col\the\@r](n)\else
X       \if\@next K    \@set[\@col\the\@r](K)\else
X       \if\@next k    \@set[\@col\the\@r](k)\else
X       \if\@next Q    \@set[\@col\the\@r](Q)\else
X       \if\@next q    \@set[\@col\the\@r](q)\else
X       \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
X       \advance\@c by1}
X
X\def\@initrow#1#2{\@r=#1\@c=1\@dolist#2\@endlist}
X
X%
X% For setting up a position
X%	
X\def\board#1#2#3#4#5#6#7#8{
X	\@initrow8{#1}
X	\@initrow7{#2}
X	\@initrow6{#3}
X	\@initrow5{#4}
X	\@initrow4{#5}
X	\@initrow3{#6}
X	\@initrow2{#7}
X	\@initrow1{#8}}
X
X%
X% Next macros for defining chess position (thanks to Victor Eijkhout)
X%
X\newcount\@L
X\def\White(#1){\xWhite#1,xxx,}
X\def\xWhite#1,{\def\temp{#1}\def\match{xxx}
X  \ifx\temp\match \else \WhitePieceOrPawn#1XY \expandafter\xWhite \fi}
X\def\WhitePieceOrPawn#1#2#3#4Y{%
X  \if#3X \@set[#1#2](P)
X  \else\@L=`#1\advance\@L by-`A %
X      \ifcase\@L\or
X       \@set[#2#3](B)\or%                     Bishop
X       \@set[#2#3](N)\or%                     Cavalier
X       \@set[#2#3](Q)\or\or%                  Dame
X       \@set[#2#3](B)\or\or\or\or\or%         Fou
X       \@set[#2#3](K)\or%                     King Koning K"onig
X       \@set[#2#3](B)\or\or%                  Loper L"aufer
X       \@set[#2#3](N)\or\or %                 kNight
X       \@set[#2#3](N)\or%                     Paard
X       \@set[#2#3](Q)\or%                     Queen
X       \@set[#2#3](R)\or%                     Rook  (no Roi....)
X       \@set[#2#3](N)\or%                     Springer
X       \@set[#2#3](R)\or\or\or\or\or\or\fi%   Toren T"urm Tour
X  \fi}
X
X\def\Black(#1){\xBlack#1,xxx,}
X\def\xBlack#1,{\def\temp{#1}\def\match{xxx}
X  \ifx\temp\match \else \BlackPieceOrPawn#1XY \expandafter\xBlack \fi}
X\def\BlackPieceOrPawn#1#2#3#4Y{
X  \if#3X\@set[#1#2](p)
X  \else\@L=`#1\advance\@L by-`A %
X      \ifcase\@L\or
X       \@set[#2#3](b)\or%                     Bishop
X       \@set[#2#3](n)\or%                     Cavalier
X       \@set[#2#3](q)\or\or%                  Dame
X       \@set[#2#3](b)\or\or\or\or\or%         Fou
X       \@set[#2#3](k)\or%                     King Koning K"onig
X       \@set[#2#3](b)\or\or%                  Loper L"aufer
X       \@set[#2#3](n)\or\or %                 kNight
X       \@set[#2#3](n)\or%                     Paard
X       \@set[#2#3](q)\or%                     Queen
X       \@set[#2#3](r)\or%                     Rook  (no Roi....)
X       \@set[#2#3](n)\or%                     Springer
X       \@set[#2#3](r)\or\or\or\or\or\or\fi%   Toren T"urm Tour
X  \fi}
X
X\def\beginposition{\begingroup%
X    \@emptyboard\movecount=0
X    \Whitetrue\castlingfalse
X    \Knotmovedtrue\knotmovedtrue
X    \promotionfalse\enpassantfalse}
X\def\endposition{\endgroup}
X
X\let\Wit=\White   \let\Zwart=\Black
X\let\Weiss=\White \let\Schwarz=\Black
X\let\Blanc=\White \let\Noir=\Black
END_OF_FILE
if test 12040 -ne `wc -c <'chess.sty'`; then
    echo shar: \"'chess.sty'\" unpacked with wrong size!
fi
# end of 'chess.sty'
fi
if test -f 'tal.ltx' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'tal.ltx'\"
else
echo shar: Extracting \"'tal.ltx'\" \(6850 characters\)
sed "s/^X//" >'tal.ltx' <<'END_OF_FILE'
X\documentstyle[a4wide,chess,twocolumn]{article}
X\font\sc=cmcsc10
X
X\begin{document}
X\subsection*{Fischer -- Tal}
X\centerline{Candidates' Tournament 1959}\medskip
X\begin{chess}   % this activates  the | character 
X{\sl A very near miss\smallskip
X
XThis is one of the four games that Fisher lost to Tal who, in winning
Xthis tournament, earned the right to meet and trounce Botvinnik for the
Xworld championship.
X
XIn jest the whimsical Tal signed Fisher's name, in addition to his own,
Xwhen asked for an autograph. ``Why not?'' he quipped; ``I've beaten
XBobby so often |:| that gives me the right to sign for him!''
X
XA carefull reading of Fisher's notes will reveal a clear echo of the
Xstrong emotions that engulfed him during this tense encounter. He misses
Xa win in the opening and several draws along the way, demonstrating
Xdramatically how a continuously advantageous position can abruptly be
Xturned into defeat by seemingly insignificant miscalculations.}
X
X{\sc Sicilian Defense}\medskip
X
X\newgame
X\move e2e4 c7c5
X\move g1f3 d7d6
X\move d2d4 c5d4
X\move f3d4 g8f6
X\move b1c3 a7a6
X\move f1c4 e7e6
X\ply  c4b3
X
XI had no better luck against Blackstone, in an exhibition game at Davis,
XCalifornia, 1964, with |7. 0-0, Be7; 8. Bb3, Qc7; 9. f4, b5; 10. f5, b4;
X11. f*e6!? (11. Nce2, e5; 12. Ng3, Bb7| is bad for White), |b*c3; 12. e*f7+, 
XKf8; 13. Bg5, Ng4!| and Black should win.
X
X\ply       b7b5!
X
XThis reaction must be prompt! 
X
XIn our first lap game here Tal played the weaker |7.: Be7?; 8. f4, 0-0|
X(for |8.: b5| see the note to Black's 8th move); |9. Qf3, Qc7 and now
X10. f5! (instead of 10. 0-0?, b5; 11. f5, b4!; 12. Na4, e5; 13. Ne2,
XBb7| and Black stands better), |e5 (not 10.: Nc6; 11. Be3 with a bind);
X11. N4e2, b5; 12. a3, Bb7; 13. g4| with a strong attack.
X
X\move f2f4!? b5b4!
XIndirectly undermining White's center.
X
X\move c3a4 f6e4
X\move e1g1 g7g6?
XCorrect is |10.: Bb7|.
X
X\ply  f4f5!
XThis riposte caught Tal completely unaware. Black's king trapped in the
Xcenter, will soon be subject to mayhem.
X
X\ply       g6f5
XNot |11.: e*f5; 12. Bd5, Ra7; 13. N*f5!, g*f5; 14. Qd4|.
X
X\ply  d4f5!
XPanov, with typical iron curtain ``objectivity'', commented in the
XSoviet tournament bulletins: ``Almost all game Fischer played in Tal
Xstyle. But all his trouble was in vain because Tal did not defend in
XFischer style---instead he found the one and only saving
Xcounterchance!'' 
X
X$$\showboard$$
X
X\ply       h8g8
XWoozy, Tal stumbles into a dubious defense. Better is |12.: d5 (not 12.:
Xe*f5?; 13. Qd5, Ra7; 14. Qd4 spearing a rook); Nh6, B*h6; 14. B*h6|.
X
X\ply  b3d5!
XA shot!
X
X\ply       a8a7
X``|13.: e*d5; 14. Q*d5, B*f5; 15. R*f5, Ra7; 16. Qe4+; Re7; 17. Q*b4,
XRe2; 18. Bg5!, R*g5; 19. R*g5, Q*g5; 20. Q*b8+ wins|'' ({\sc PANOV}).  
X
X\ply  d5e4?
XCorrect is |14. Be3!, Nc5; 15. Qh5!, Rg6 (if 15.: N*a4, 16. B*a7, e*d5;
XRae1+); 16. Rae1!| and White's every piece is bearing down on Black's
Xking ({\sc KEVITZ}).
X
X\ply       e6f5
X\ply  e4f5
XProbably it's better to avoid exchanges with |15. Bd5 or Bf3|.
X
X\ply       a7e7!
XA unique way of shielding the K-file.
X
X\move f5c8 d8c8
X\ply  c1f4?
XThe right move is simply |17. c3! (not 17. Q*d6?, R*g2+; 18. K*g2, Re2+;
X19. Kf3, B*d6; 20. K*e2, Q*c2+ wins), and if : Qc6; 18. Rf2|.
X
X\ply       c8c6!
X\move d1f3 c6a4
XSuch a surprise that I didn't dare believe my eyes! I had expected |18.:
XQ*f3; 19. R*f3, Re2; 20. Rf2, R*f2; 21. K*f2| and White has a slight
Xedge after a3 because of Black's disconnected pawns.
X
X\move f4d6 a4c6!
XTal finds a inspired defense.
X
X\move d6b8 c6b6+
XWhite remains a clear pawn ahead after |20.: D*f3; 21. R*f3, Bg7; 22. c3|.
X
X\move g1h1 b6b8
XThe crowd was shouting and whistling with each move. Later I was
Xinformed that many sport fans were in the audience. Maybe some soccer
Xmatch had been canceled. As a consequence chess was the main attraction 
Xthat day in Belgrade.
X
X\ply  f3c6+
XMany annotators believed that |22. Rae1| was the winning move. Tal
Xhimself confessed he thougt Black was lost after that. But |22.: Kd8!|
Xholds in all lines (not |22.: Rg6?; 23. Q*f7+, Kd7; 24. Rd1+!, Rd6; 25.
XR*d6+, K*d6; 26. Rf6+!| wins). I've studied this position for ages, it
Xseems, and the best I can find is |23. Rd1+, Kc7! (23.: Kc8?; Qc6+
Xwins); 24. Qf4+ (if 24. Rd4, Qb7!), Kb7; 25. Rd6, Qc7; 26. Q*b4+, Kc8;
X27. R*a6, Qb7!; 28, Q*b7+, K*b7; 29. Raf6, Rg7|=.
X
X\ply       e7d7
X\ply  a1e1+
XBlack holds after |23. Rad1, Bd6; 24. R*f7 (if 24. Rf6, Rg6; 25. R1*d6?,
XQ*d6!), Qc7,| etc. And on |23. R*f7, Qd6|.
X
X\ply       f8e7
XFinally Tal ``develops'' his bishop. Not |23.: Kd8; 24. R*f7!, Be7; 25.
XR7*e7, R*e7; 26. Rd1+| wins.
X
X\move f1f7 e8f7
X\move c6e6+ f7f8!
XI thought he had to go to g7, whereupon |26. Q*d7| wins easily. 
X
X$$\showboard$$
X
X\ply  e6d7
XNot |26. Rf1+. Kg7; 27. Rf7+, Kh8; and if 28. Q*d7, Rd8; 29. Qg4, Qe5|
Xwins. 
X
X\ply       b8d6
X\move d7b7 g8g6
XWithin a handfull of moves the game has changed its complexion. Now
Xit is White who must fight for a draw!
X
X\ply  c2c3!
XBlack's extra piece means less with each pawn that's exchanged.
X
X\ply       a6a5
XOn |28.: b*c3; 29. Qb8+, Qd1; 30. Q*a6|=. 
X
X\ply  b7c8+
XOn the wrong track. Right is |29. c*b4!, Q*b4 (if 29.: a*b4; 30. a3!,
Xb*a3; 31. b*a3, Q*a3 draws); 30. Qf3+, Kg7; 31. Qe2| draws, since Black
Xcan't possibly build up a winning K-side attack and his own king is to
Xexposed.  
X
X\ply       f8g7
X\move c8c4 e7d8
X\move c3b4 a5b4
XOn |31.: Q*b4; 32. Qe2| White should draw with best play.
X
X\ply  g2g3?
XCreating loosing chances. I don't see how Black can make any progress
Xafter |32. Qe4|. If |32.: Bc7; 33. Qe7+, Kg8; 34. Qe8+, Qf8; 35. Qe4|,
Xetc. 
X
X\ply       d6c6+
X\move e1e4 c6c4
X\move e4c4 g6b6!
XI overlooked this. Now Black has winning chances. I had planned on a
Xdraw after |34.: Be7?; 35. a3!| dissolving Black's b--pawn (|35.: b3 is
Xanswerred by 36. Rc7 followed by Rb7|).
X
X\move h1g2 g7f6
X\move g2f3 f6e5
X\ply  f3e3
X|37. a3| is met as always, by b3. Once White can eliminate Black's
Xb--pawn it's a theoretical draw.
X
X\ply       d8g5+
X\move e3e2 e5d5
X\move e2d3 g5f6
XWhite might be able to draw this ending, but it's an ugly defensive chore.
X
X\ply  c4c2?
XToo passive. I wanted to avoid immobilizing my Q--pawns with |40. b3|
Xbut it's the best hope now. On |40.: Be7; 41. Rd4+| preserves drawing
Xchances. 
X
X$$\showboard$$
X
X\ply       f6e5
X\move c2e2 b6f6
X\move e2c2 f6f3+
X\move d3e2 f3f7
X\move e2d3 e5d4!
XLittle by little Tal inches his way in.
X
X\ply  a2a3
XOn |45. b3, Rf3+; 46. Ke2, Rf2+; 47. Qd3, R*c2; 48. Ke4| wins.
X
X\ply       b4b3
X\ply  c2c8
XEqually hopeless is |46. Re2 (or 46. Rd2, Rf3+; 47. Ke2, Rf2+), Rf3+;
X47. Kd2, B*b2| etc.
X
X\ply       d4b2
X\move c8d8+ d5c6
X\move d8b8 f7f3+
X\move d3c4 f3c3+
X\move c4b4 b2a1
X\move a3a4 b3b2! 
X
X$$\showboard$$
X
XWhite resigns.
X
XIf |52. K*c3, b1Q+!|
X\end{chess}
X
XFrom: {\sl My 60 Memorable Games}, by Bobby Fischer; Faber and Faber,
XLondon. 1969. {\sc ISBN} 0 571 09312 4
X\end{document}
END_OF_FILE
if test 6850 -ne `wc -c <'tal.ltx'`; then
    echo shar: \"'tal.ltx'\" unpacked with wrong size!
fi
# end of 'tal.ltx'
fi
if test -f 'tal.ltx.diff' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'tal.ltx.diff'\"
else
echo shar: Extracting \"'tal.ltx.diff'\" \(1366 characters\)
sed "s/^X//" >'tal.ltx.diff' <<'END_OF_FILE'
X*** tal.ltx	Thu Jul 26 16:01:32 1990
X--- tal.tex	Thu Jul 26 16:03:51 1990
X***************
X*** 1,10 ****
X! \documentstyle[a4wide,chess,twocolumn]{article}
X  \font\sc=cmcsc10
X  
X! \begin{document}
X! \subsection*{Fischer -- Tal}
X! \centerline{Candidates' Tournament 1959}\medskip
X! \begin{chess}   % this activates  the | character 
X  {\sl A very near miss\smallskip
X  This is one of the four games that Fisher lost to Tal who, in winning
X  this tournament, earned the right to meet and trounce Botvinnik for the
X--- 1,13 ----
X! \catcode`@=11
X! \input chess.sty
X! \catcode`@=12
X! \input 2side
X! \gutter{15pt}
X  \font\sc=cmcsc10
X  
X! {\bf Fischer -- Tal}\smallskip
X! Candidates' Tournament 1959\medskip
X! \chess   % this activates  the | character 
X  {\sl A very near miss\smallskip
X  This is one of the four games that Fisher lost to Tal who, in winning
X  this tournament, earned the right to meet and trounce Botvinnik for the
X***************
X*** 222,229 ****
X  White resigns.
X  
X  If |52. K*c3, b1Q+!|
X! \end{chess}
X  
X  From: {\sl My 60 Memorable Games}, by Bobby Fischer; Faber and Faber,
X  London. 1969. {\sc ISBN} 0 571 09312 4
X! \end{document}
X--- 225,232 ----
X  White resigns.
X  
X  If |52. K*c3, b1Q+!|
X! \endchess	% | not active anymore
X  
X  From: {\sl My 60 Memorable Games}, by Bobby Fischer; Faber and Faber,
X  London. 1969. {\sc ISBN} 0 571 09312 4
X! \bye
END_OF_FILE
if test 1366 -ne `wc -c <'tal.ltx.diff'`; then
    echo shar: \"'tal.ltx.diff'\" unpacked with wrong size!
fi
# end of 'tal.ltx.diff'
fi
if test -f '2side.tex' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'2side.tex'\"
else
echo shar: Extracting \"'2side.tex'\" \(1607 characters\)
sed "s/^X//" >'2side.tex' <<'END_OF_FILE'
X%
X%   This is a 2-side format for TeX.  Simply
X%
X%   \input 2side
X%   \gutter{5pt}
X%
X%   You want to have set your hsize, vsize, hoffset, and voffset
X%   (and magnification) *before* inputting this file.
X%
X%   You can also say `\top{...}' and the `...' will be placed at
X%   the top of the page, and the columns will be reduced
X%   proportionally.  This is useful for the title of the document,
X%   and any comments you might want to put later in the document.
X%   Note that if you put this command after the first half of the
X%   page has been `shipped', it will be postponed until the next
X%   page.
X%
X\newdimen\fullsize\fullsize=\hsize
X\newdimen\realvsize\realvsize=\vsize
X\def\gutter#1{\global\advance\hsize by-#1 \global\divide\hsize by 2}%
X\def\makefootline{\baselineskip24pt\hbox to\fullsize{\the\footline}}%
X\let\lr=L \newbox\leftcolumn
X\let\ntop=\relax
X\output={\if L\lr
X \global\setbox\leftcolumn=\columnbox \global\let\lr=R
X \else\global\let\lr=L\doubleformat\global\fi
X \ifnum\outputpenalty>-20000\else\dosupereject\fi
X \global\let\ntop=\relax}%
X\def\doubleformat{\shipout\vbox{\hbox{\box\topbox}%
X   \hbox to\fullsize{\box\leftcolumn\hfil\columnbox}%
X   \makefootline}%
X \global\vsize=\realvsize\ntop
X \advancepageno}%
X\def\columnbox{\leftline{\pagebody}}%
X\newbox\topbox
X\def\top#1{\if L\lr\message{Setting...}
X   {\hsize=\fullsize\global\setbox\topbox=\vbox{#1}%
X   \global\vsize=\realvsize
X   \global\advance\vsize by-\ht\topbox
X   \global\advance\vsize by-\baselineskip}%
X  \else\global\def\ntop{\top{#1}}\message{Saving...}%
X  \fi}%
X\def\bye{\vfill\eject\if R\lr\null\vfill\eject\fi\end}%
END_OF_FILE
if test 1607 -ne `wc -c <'2side.tex'`; then
    echo shar: \"'2side.tex'\" unpacked with wrong size!
fi
# end of '2side.tex'
fi
echo shar: End of shell archive.
exit 0
# end of shell archive
-- 
--
David W. Dougherty @ AT&T Bell Laboratories
ARPA: dwd@attunix.att.COM
UUCP: ...!att!attunix!dwd