summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/chess/chess.sty
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:53:00 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:53:00 +0000
commit8d1fca7ebd497342658b1df326e930b14ec42864 (patch)
tree30abc621178710f96cb4b8a8c2f6a6fd6ea25a03 /Master/texmf-dist/tex/latex/chess/chess.sty
parent43bd11e0e6d534e3bde778f6e02a1de5375dbcbc (diff)
chess
git-svn-id: svn://tug.org/texlive/trunk@755 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/chess/chess.sty')
-rw-r--r--Master/texmf-dist/tex/latex/chess/chess.sty566
1 files changed, 566 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/chess/chess.sty b/Master/texmf-dist/tex/latex/chess/chess.sty
new file mode 100644
index 00000000000..b584d4469bc
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/chess/chess.sty
@@ -0,0 +1,566 @@
+% - removed spaces inside macros that might show up in output
+
+% replaced
+% width by \@width
+% height by \@height
+% depth by \@depth
+% "by 1" by \@ne
+
+% added:
+%
+% dimen \boardrule holding the width of the rule around the board
+
+% put \global into \Whitetrue and \Whitefalse
+
+
+
+\message{FMi updated chess version 96/07/21!!!}
+%
+% chess.sty
+% ---------
+% Style file for writing about chess games
+% Author : Piet Tutelaers (internet: rcpt@urc.tue.nl)
+% Version: 1.2 (Febr. 1992)
+% Improvements over version 1.1
+% - added `\v{S}ahovski Informator' symbols
+% -`en passant capture' bug fixed (reported by Jonathan Mestel)
+% -change {--} into \hbox{--} to prevent hyphenation within move
+% -\move's lined up on last row (or digit in case of castling)
+% -handling of promotion improved
+% * Black promotion problem solved (plain TeX)
+% * comment allowed also with promotion
+% * if no promotion piece is provided a default Q(ueen) is supposed
+% Thanks to: Jan Jaap Spreij (puls@cs.rug.nl)
+% -improved interface to plain TeX
+% -language support using the babel package from Johannes Braams
+% (currently support for english, dutch, german and french but you
+% can add an extra language `foreign' by:
+% 1. creating `foreign.sty' for cooperating with `babel'
+% 2. search for FOREIGN and follow the instructions in the comments)
+% - \begin{nochess} ... \end{nochess}
+% -chessfig10 renamed to chessf10 (service to MSDOS users)
+% Version: 1.1 (17 Nov 1990)
+% Improvements over version 1.0:
+% -TeX code cleaned up (thanks to TeX-wizzard Victor Eijkhout)
+% -moving a King does not generate a castling move when this
+% King already moved
+% -renamed internal macro `\\' because LaTeX uses that
+% -better hooks for foreign languages (look for lines marked with
+% %%FOREIGN%%)
+% Torture test:
+% If you change something in the chess.sty style check if everything
+% else is still working with torture-test.ltx (LaTeX) or
+% torture-test.tex (plain TeX).
+% Known problems:
+% -The analysis mode can not be used within arguments of macros
+% not: \centerline{|21.N5*f3|} but: |\centerline{21.N5*f3}|
+% Version: 1.0 (5 Jan 1990)
+%
+
+
+%
+% Do we have language support? Otherwise take default language!
+%
+%\ifx\undefined\babel@core@loaded\input english.sty\fi
+
+
+
+\def\@set[#1#2](#3){%arguments: [a-h1-8](<letter>)
+ \expandafter\xdef\csname#1#2\endcsname{#3}}
+
+\def\@get#1[#2#3]{%arguments:\cs[a-h1-8]
+ \edef#1{\csname#2#3\endcsname}}
+
+\font\Chess=chess20
+
+\newcount\@c % column
+\newcount\@r % row
+\newcount\@sum % row+column
+
+\def\@col{\ifcase\@c\or a\or b\or c\or d\or e\or f\or g\or h\fi}
+
+\def\@showchar{%
+ \@get\piece[\@col\the\@r]%
+ \if\piece E\ifodd\@sum 0\else Z\fi\else
+ \if\piece P\ifodd\@sum P\else O\fi\else
+ \if\piece p\ifodd\@sum p\else o\fi\else
+ \if\piece R\ifodd\@sum R\else S\fi\else
+ \if\piece B\ifodd\@sum B\else A\fi\else
+ \if\piece N\ifodd\@sum N\else M\fi\else
+ \if\piece r\ifodd\@sum r\else s\fi\else
+ \if\piece b\ifodd\@sum b\else a\fi\else
+ \if\piece n\ifodd\@sum n\else m\fi\else
+ \if\piece K\ifodd\@sum K\else J\fi\else
+ \if\piece Q\ifodd\@sum Q\else L\fi\else
+ \if\piece k\ifodd\@sum k\else j\fi\else
+ \if\piece q\ifodd\@sum q\else l\fi\else
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
+
+\def\@showrow#1{%
+ \@r=#1\@c=1
+ \@sum=\@r\advance\@sum by\@c
+ \loop
+ \@showchar
+ \ifnum\@c<8 \advance\@c \@ne\advance\@sum \@ne
+ \repeat
+}
+
+\newdimen\boardrule
+\setlength\boardrule{1pt}
+
+\def\showboard{%
+\vbox{\offinterlineskip
+ \hrule \@height \boardrule
+ \hbox{\vrule \@width \boardrule\Chess
+ \vbox{\hbox{\@showrow8}%
+ \hbox{\@showrow7}%
+ \hbox{\@showrow6}%
+ \hbox{\@showrow5}%
+ \hbox{\@showrow4}%
+ \hbox{\@showrow3}%
+ \hbox{\@showrow2}%
+ \hbox{\@showrow1}}%
+ \vrule \@width \boardrule}%
+ \hrule \@height \boardrule}%
+}
+
+% inner loop needs extra { ... }
+
+\def\@emptyboard{%
+ \@r\@ne
+ \loop
+ {\@c\@ne
+ \loop
+ \@set[\@col\the\@r](E)%
+ \ifnum\@c<8 \advance\@c \@ne
+ \repeat}%
+ \ifnum\@r<8 \advance\@r \@ne
+ \repeat
+}
+
+\def\@initboard{%
+% empty squares
+ \@r\thr@@
+ \loop
+ {\@c\@ne
+ \loop
+ \@set[\@col\the\@r](E)%
+ \ifnum\@c<8 \advance\@c \@ne
+ \repeat}%
+ \ifnum\@r<6 \advance\@r \@ne
+ \repeat
+% pawns
+ \@c\@ne
+ \loop
+ \@set[\@col2](P)\@set[\@col7](p)%
+ \ifnum\@c<8 \advance\@c \@ne
+ \repeat
+% pieces
+ \@set[a1](R)\@set[h1](R)%
+ \@set[a8](r)\@set[h8](r)%
+ \@set[b1](N)\@set[g1](N)%
+ \@set[b8](n)\@set[g8](n)%
+ \@set[c1](B)\@set[f1](B)%
+ \@set[c8](b)\@set[f8](b)%
+ \@set[d1](Q)\@set[e1](K)%
+ \@set[d8](q)\@set[e8](k)%
+}
+
+%
+% The next part defines a user friendly notation for chess moves.
+% Some examples: |21. Nf3-e5, Ke8*f8 22. 0-0-0+, Bh8*a1|
+% : |21.: Ke8*f8 22. Bh8*a1, 0-0|
+% : |21 Nfe5 K*f8 22 0-0-0! B*a1|
+% : |21: K*f8 22 B*a1 0-0|
+%
+
+\font\Fig=chessf10
+
+\gdef\@king{{\Fig K}}
+\gdef\@queen{{\Fig Q}}
+\gdef\@rook{{\Fig R}}
+\gdef\@bishop{{\Fig B}}
+\gdef\@knight{{\Fig N}}
+\gdef\@dash{\hbox{--}}
+\gdef\@capt{$\times$}
+\gdef\@dots{~$\ldots$,}
+\gdef\@dot{\char46 }
+
+%
+% Make character codes for pieces depending on current language.
+% (I cann't derive the Black values from the White using `\lowercase'!)
+%
+
+\def\define@White@pieces#1#2#3#4#5#6{% define character codes for White pieces
+ \chardef\king@=`#1 \def\uc@king{#1}
+ \chardef\queen@=`#2 \def\uc@queen{#2}
+ \chardef\rook@=`#3 \def\uc@rook{#3}
+ \chardef\bishop@=`#4\def\uc@bishop{#4}
+ \chardef\knight@=`#5\def\uc@knight{#5}
+ \chardef\pawn@=`#6 \def\uc@pawn{#6}}
+\def\define@Black@pieces#1#2#3#4#5#6{% and now the Black pieces
+ \def\lc@king{#1}\def\lc@queen{#2}\def\lc@rook{#3}
+ \def\lc@bishop{#4}\def\lc@knight{#5}\def\lc@pawn{#6}}
+\def\activate@pieces{% make them active
+ \catcode\king@=\active\catcode\queen@=\active\catcode\rook@=\active%
+ \catcode\bishop@=\active\catcode\knight@=\active}
+\def\deactivate@pieces{% make them inactive
+ \catcode\king@=11\catcode\queen@=11\catcode\rook@=11%
+ \catcode\bishop@=11\catcode\knight@=11}
+\def\ifcurrentlanguage#1#2{%if language defined then compare with \language
+ \expandafter\ifx\csname l@#1\endcsname\relax%
+ \else\ifnum\language=\expandafter\csname l@#1\endcsname\relax#2\fi\fi}
+\def\select@pieces{% select pieces depending on language
+ \define@White@pieces{K}{Q}{R}{B}{N}{P}
+ \define@Black@pieces{k}{q}{r}{b}{n}{p}
+ }
+\def\let@pieces#1#2#3#4#5{% let character codes be macros
+ \let#1=\@king\let#2=\@queen\let#3=\@rook%
+ \let#4=\@bishop\let#5=\@knight}
+
+\catcode`|=\active\select@pieces
+{\catcode`:=\active\catcode`.=\active\catcode`*=\active\catcode`-=\active
+ \activate@pieces
+ \gdef\trigger@pieces{
+ \catcode`:=\active\catcode`.=\active\catcode`*=\active\catcode`-=\active
+ \activate@pieces
+ % I would like to say ``\let\king@=\@king'' but how?
+ \let@pieces{K}{Q}{R}{B}{N}%
+ \let-=\@dash\let*=\@capt\let:=\@dots\let.=\@dot}%
+ \gdef\@notation{\begingroup\let|=\endgroup\trigger@pieces}%
+%
+% Provide a `nochess' environment in which the `|' character becomes
+% inactive for situations where the `|' is already in use (like in
+% the LaTeX `tabular' environment for example).
+%
+ \gdef\nochess{\begingroup\let|=\relax\catcode`\|=12\relax
+ \catcode`:=12 \catcode`.=12 \catcode`*=12 \catcode`-=12
+ \deactivate@pieces\let\endnochess=\endgroup}
+ \gdef\chess{\begingroup\let\endchess=\endgroup\trigger@pieces}
+}
+\let|=\@notation
+
+%
+% Next part provides a ply (half move) generator
+%
+
+\newif\ifWhite \newif\ifFigure \newif\ifcapture
+
+%FMi
+\def\Whitetrue{\global\let\ifWhite\iftrue}
+\def\Whitefalse{\global\let\ifWhite\iffalse}
+
+%
+% next newif's needed for castling
+%
+\newif\ifKnotmoved \newif\ifknotmoved
+\newif\ifcastling \newif\ifoo
+
+%
+% Globals for special pawn moves (en passant capture and promotion)
+%
+
+\newif\ifenpassant \newif\ifpromotion
+
+\def\@color#1{% Color of a piece 0: none, -1: black, 1: white
+ \if #1E0\else
+ \ifnum`#1=\uccode`#11\else-1\fi\fi}
+
+%
+% No checking is done for validity of moves, only legal moves behave well!!
+%
+
+\def\@ply#1#2#3#4#5 {% Syntax: [a-h][1-8][a-h][1-8]{Q|R|B|N}{Comment}
+ \@get\piece[#1#2]\@get\capture[#3#4]\Figuretrue
+ \if\capture E\capturefalse\else\capturetrue\fi
+ \ifWhite
+ \if\piece P\Figurefalse
+ \if#46
+ \if\eprow#3\capturetrue\enpassanttrue\fi
+ \xdef\eprow{x}%
+ \else
+ \xdef\eprow{x}%
+ \if#22
+ \if#44\xdef\eprow{#3}\fi
+ \else
+ \if#48\promotiontrue\fi
+ \fi
+ \fi
+ \else\xdef\eprow{x}
+ \if\piece K% check for possible castling
+ \ifKnotmoved
+ \if#3g\if#41\castlingtrue\ootrue\fi
+ \else\if#3c\if#41\castlingtrue\oofalse\fi\fi
+ \fi
+ \global\Knotmovedfalse
+ \fi
+ \fi
+ \fi
+ \ifcastling
+ \@set[#1#2](E)\@set[#3#4](K)%
+ \ifoo 0\@dash0\rlap{#5}\@set[f1](R)\@set[h1](E)%
+ \else 0\@dash0\@dash0\rlap{#5}\@set[d1](R)\@set[a1](E)\fi
+ \castlingfalse
+ \else
+ \ifFigure{\Fig\piece}\fi
+ #1#2\ifcapture\@capt\else\@dash\fi#3#4%
+ \rlap{\ifpromotion\expandafter\promovendus#5XYZ\else#5\fi}%
+ \@set[#1#2](E)%
+ \ifpromotion\@set[#3#4](\PROM)\else\@set[#3#4](\piece)\fi
+ \ifenpassant\@set[#3#2](E)\enpassantfalse\fi
+ \fi
+ \Whitefalse
+ \else % ``same'' for Black
+ \if\piece p\Figurefalse
+ \if#43
+ \if\eprow#3\capturetrue\enpassanttrue\fi
+ \xdef\eprow{x}%
+ \else
+ \xdef\eprow{x}%
+ \if#27
+ \if#45\xdef\eprow{#3}\fi
+ \else
+ \if#41\promotiontrue\fi
+ \fi
+ \fi
+ \else\xdef\eprow{x}
+ \if\piece k
+ \ifknotmoved
+ \if#3g\if#48\castlingtrue\ootrue\fi
+ \else\if#3c\if#48\castlingtrue\oofalse\fi\fi
+ \fi
+ \global\knotmovedfalse
+ \fi
+ \fi
+ \fi
+ \ifcastling
+ \@set[#1#2](E)\@set[#3#4](k)%
+ \ifoo 0\@dash0\rlap{#5}\@set[f8](r)\@set[h8](E)%
+ \else 0\@dash0\@dash0\rlap{#5}\@set[d8](r)\@set[a8](E)\fi%
+ \castlingfalse
+ \else
+ \ifFigure{\Fig\if\piece rR\else\if\piece bB\else\if\piece nN\else
+ \if\piece qQ\else K\fi\fi\fi\fi}\fi
+ #1#2\ifcapture\@capt\else\@dash\fi#3#4%
+ \rlap{\ifpromotion\expandafter\promovendus#5XYZ\else#5\fi}%
+ \@set[#1#2](E)%
+ \ifpromotion\@set[#3#4](\prom)\else\@set[#3#4](\piece)\fi
+ \ifenpassant\@set[#3#2](E)\enpassantfalse\fi
+ \fi
+ \Whitetrue
+ \fi}
+
+%
+% Promovendus: treat first char of argument as promotion piece if queen,
+% rook, knight or bishop; otherwise consider it as comment and take queen
+% as default promotion. Leave in \PROM White promoting piece (Q|R|B|N)
+% and in \prom Black's version (q|r|b|n).
+%
+
+\def\promovendus#1#2Z{%
+ \if#1X\def\C{}\gdef\PROM{Q}\gdef\prom{q}%
+ \else
+ \ifnum`#1=\queen@ \gdef\PROM{Q}\gdef\prom{q}\def\C{\@comment#2}\else
+ \ifnum`#1=\rook@ \gdef\PROM{R}\gdef\prom{r}\def\C{\@comment#2}\else
+ \ifnum`#1=\bishop@\gdef\PROM{B}\gdef\prom{b}\def\C{\@comment#2}\else
+ \ifnum`#1=\knight@\gdef\PROM{N}\gdef\prom{n}\def\C{\@comment#2}\else
+ \gdef\PROM{Q}\gdef\prom{q}\def\C{\comment#1#2}%
+ \fi\fi\fi\fi\fi%
+ {\Fig\PROM}{\C}}
+\def\@comment#1XY{#1}
+
+\newcount\movecount \movecount=0
+
+%FMi LaTeX name: allows \setcounter....
+\let\c@movecount\movecount
+
+%FMi LaTeX name \@@line not \line
+\def\showmove#1#2{\par
+ \@@line{\strut\hbox to1cm{\hfil\the\movecount.}%
+ \hbox to2.8cm{\hfil#1}\hbox to2.8cm{\hfil#2}\hfil}\par}
+
+\def\move#1 #2 {
+ \advance\movecount \@ne
+ \showmove{\@ply#1 }{\@ply#2 }}
+
+\def\ply#1 {
+ \ifWhite
+ \advance\movecount \@ne
+ \showmove{\@ply#1 }{}
+ \else
+ \showmove{$\ldots$}{\@ply#1 }
+ \fi}
+
+\def\newgame{\vskip0pt\movecount=0 \@initboard
+ \Whitetrue\castlingfalse\xdef\eprow{x}
+ \Knotmovedtrue\knotmovedtrue
+ \promotionfalse\enpassantfalse}
+
+\def\@dolist{\afterassignment\@dodolist\let\@@next= } % Answer 11.5 TeXbook
+\def\@dodolist{\ifx\@@next\@endlist \let\@@next\relax % adapted to generate
+ \else \@nextitem\let\@@next\@dolist \fi % chess diagrams
+ \@@next}
+
+\def\@endlist{\@endlist}
+
+\def\@nextitem{%
+ \if\@@next\space \@set[\@col\the\@r](E)\else
+ \if\@@next * \@set[\@col\the\@r](E)\else
+ \if\@@next\uc@pawn \@set[\@col\the\@r](P)\else
+ \if\@@next\lc@pawn \@set[\@col\the\@r](p)\else
+ \if\@@next\uc@rook \@set[\@col\the\@r](R)\else
+ \if\@@next\lc@rook \@set[\@col\the\@r](r)\else
+ \if\@@next\uc@bishop \@set[\@col\the\@r](B)\else
+ \if\@@next\lc@bishop \@set[\@col\the\@r](b)\else
+ \if\@@next\uc@knight \@set[\@col\the\@r](N)\else
+ \if\@@next\lc@knight \@set[\@col\the\@r](n)\else
+ \if\@@next\uc@queen \@set[\@col\the\@r](Q)\else
+ \if\@@next\lc@queen \@set[\@col\the\@r](q)\else
+ \if\@@next\uc@king \@set[\@col\the\@r](K)\else
+ \if\@@next\lc@king \@set[\@col\the\@r](k)\else
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \advance\@c \@ne}
+
+\def\@initrow#1#2{\@r=#1\@c=1\@dolist#2\@endlist}
+
+%
+% For setting up a position
+%
+\def\board#1#2#3#4#5#6#7#8{
+ \@initrow8{#1}
+ \@initrow7{#2}
+ \@initrow6{#3}
+ \@initrow5{#4}
+ \@initrow4{#5}
+ \@initrow3{#6}
+ \@initrow2{#7}
+ \@initrow1{#8}}
+
+%
+% Next macros for defining chess position (thanks to Victor Eijkhout)
+%
+\def\White(#1){\def\match{xxx}\xWhite#1,xxx,}
+\def\xWhite#1,{\def\temp{#1}
+ \ifx\temp\match \else \WhitePieceOrPawn#1XY \expandafter\xWhite \fi}
+\def\WhitePieceOrPawn#1#2#3#4Y{%
+ \if#3X \@set[#1#2](P)
+ \else\ifnum`#1=\king@ \@set[#2#3](K)\else % King
+ \ifnum`#1=\queen@ \@set[#2#3](Q)\else % Queen
+ \ifnum`#1=\rook@ \@set[#2#3](R)\else % Rook
+ \ifnum`#1=\bishop@\@set[#2#3](B)\else % Bishop
+ \ifnum`#1=\knight@\@set[#2#3](N)\else % kNight
+ \fi\fi\fi\fi\fi
+ \fi}
+
+\def\Black(#1){\def\match{xxx}\xBlack#1,xxx,}
+\def\xBlack#1,{\def\temp{#1}
+ \ifx\temp\match \else \BlackPieceOrPawn#1XY \expandafter\xBlack \fi}
+\def\BlackPieceOrPawn#1#2#3#4Y{
+ \if#3X\@set[#1#2](p)
+ \else\ifnum`#1=\king@ \@set[#2#3](k)\else % King
+ \ifnum`#1=\queen@ \@set[#2#3](q)\else % Queen
+ \ifnum`#1=\rook@ \@set[#2#3](r)\else % Rook
+ \ifnum`#1=\bishop@\@set[#2#3](b)\else % Bishop
+ \ifnum`#1=\knight@\@set[#2#3](n)\else % kNight
+ \fi\fi\fi\fi\fi
+ \fi}
+
+\def\position{\begingroup%
+ \@emptyboard\movecount=0\xdef\eprow{x}
+ \Whitetrue\global\castlingfalse
+ \global\Knotmovedtrue\global\knotmovedtrue
+ \global\promotionfalse\global\enpassantfalse}
+\def\endposition{\endgroup}
+
+% And now we define most symbols that are used in `\v{S}ahovski Informator'
+% (Chess Informant). For a complete list see Informant#51 (1991) pp 10-12.
+% If you add symbols realize that the macros should be usable by plain TeX
+% and LaTeX and that the (La)TeX names should be suggestive and clear!
+% But don't use uppercase letters or existing names (center)!
+% Thanks go to John Saba (saba@ccit.arizona.edu) and Henry Thomas
+% (hthomas@irisa.fr) for their help in defining next symbols.
+\font\symbolten=cmsy10 \font\smrm=cmr6 \font\symbolsix=cmsy6
+\def\wbetter{\mbox{\baselineskip0pt$\vcenter{\vbox{\hbox{+}\hbox{=}}}$}}
+\def\bbetter{\mbox{\baselineskip0pt
+ $\vcenter{\vbox{\hbox{=}\kern-.3ex\hbox{+}}}$}}
+\def\wupperhand{\mbox{$\pm$}}
+\def\bupperhand{\mbox{$\mp$}}
+\def\wdecisive{\mbox{$+\hbox{}-$}}
+\def\bdecisive{\mbox{$-\hbox{}+$}}
+\def\equal{=}
+\def\unclear{\mbox{$\infty$}}
+\def\compensation{\mbox{\baselineskip0pt$\vcenter{\vbox{%
+ \hbox{\kern.056em\vbox{\hrule \@width 0.89em\kern0.35ex\hrule \@width 0.89em}}
+ \kern.2ex\hbox{$\infty$}}}$}}
+% next symbol should be build using METAFONT
+\def\devadvantage{{\symbolten\char'015}\kern-4.8pt
+ \vrule \@width 2.4pt \@height 6pt \@depth -5.6pt
+ \vrule \@width .4pt \@height 8pt \@depth -5.6pt\kern2.4pt}
+\def\moreroom{{\symbolten\char'015}}
+\def\withattack{$\rightarrow$}
+\def\withinit{$\uparrow$}
+\def\counterplay{\hbox{\baselineskip0pt%
+ $\vcenter{\vbox{\hbox{$\leftarrow$}\hbox{$\rightarrow$}}}$}}
+\def\zugzwang{$\odot$}
+\def\mate{\kern.4pt\mbox{%
+ \vrule \@width 2ex \@height 1.18ex \@depth -1.1ex\kern-2ex
+ \vrule \@width 2ex \@height .52ex \@depth -.44ex\kern-1.381ex
+ \vrule \@width .08ex \@height 1.8ex \@depth .2ex\kern0.615ex
+ \vrule \@width .08ex \@height 1.8ex \@depth .2ex\kern0.406ex}\kern.4pt}
+\def\withidea{$\triangle$}
+\def\onlymove{$\Box$}
+\def\betteris{\mbox{\baselineskip0pt
+ $\vcenter{\vbox{\hbox{$\frown$}\kern-0.35ex\hrule \@width 0.95em}}$}}
+\def\file{$\Leftrightarrow$}
+% next symbol should be build using METAFONT
+\def\diagonal{$\nearrow$}
+\def\centre{$\Box$\kern-.6em\raise.54ex\hbox{\smrm\char'053}}
+\def\kside{$\gg$}
+\def\qside{$\ll$}
+\def\weakpt{$\times$}
+\def\ending{$\perp$}
+% John Saba's method:
+\def\blackbox{\vrule \@height .8ex \@width 1.2ex \@depth 0ex}
+\def\whitebox{\vbox{\hrule \@height .1pt\hbox{\vrule \@width .1pt\kern.6ex
+ \vbox{\kern.8ex}\kern.6ex\vrule \@width .1pt}\hrule \@height .1pt}}
+\def\bishoppair{\whitebox\kern-2pt\raise1.8pt\hbox{\whitebox}}
+\def\opposbishops{\whitebox\kern-2pt\raise1.8pt\hbox{\blackbox}}
+\def\samebishops{\blackbox\kern-2pt\raise1.8pt\hbox{\blackbox}}
+% My method
+%\def\bishoppair{\setbox0=\hbox{%
+% \vrule \@width 1.4ex \@height 1ex \@depth -.92ex\kern-1.4ex
+% \vrule \@width 1.4ex \@height .08ex \@depth 0pt\kern-1.4ex
+% \vrule \@width .08ex \@height 1ex \@depth 0ex\kern1.24ex
+% \vrule \@width .08ex \@height 1ex \@depth 0ex}%
+% \kern.4pt\mbox{\copy0\kern-.6ex\raise0.56ex\box0}\kern.4pt}
+%\def\opposbishops{\kern.4pt\mbox{%
+% \vrule \@width 1.4ex \@height 1ex \@depth -.92ex\kern-1.4ex
+% \vrule \@width 1.4ex \@height .08ex \@depth 0pt\kern-1.4ex
+% \vrule \@width .08ex \@height 1ex \@depth 0ex\kern1.24ex
+% \vrule \@width .08ex \@height 1ex \@depth 0ex\kern-.6ex
+% \vrule \@width 1.4ex \@height 1.56ex \@depth -0.56ex}\kern.4pt }
+%\def\samebishops{\kern.4pt\mbox{%
+% \vrule \@width 1.4ex \@height 1ex \@depth 0ex\kern-.6ex
+% \vrule \@width 1.4ex \@height 1.56ex \@depth -0.56ex}\kern.4pt}
+\def\unitedpawns{$\circ\kern-.05em\circ$}
+\def\seppawns{$\circ\kern-.3em\cdot\kern-.35em\cdot\kern-.1em\circ$}
+\def\doublepawns{\mbox{\baselineskip0pt
+ $\vcenter{\vbox{\hbox{$\circ$}\vskip.8pt\hbox{$\circ$}}}$}}
+% Next symbol still not perfect ...
+\def\passedpawn{\mbox{\baselineskip0pt
+ $\vcenter{\vbox{\hbox{\kern0.14em\symbolsix\char'042}\hbox{$\circ$}}}$}}
+\def\morepawns{$>$}
+\def\timelimit{$\oplus$}
+\def\novelty{{\sc N}}
+\def\comment{{\sc RR}}
+\def\various{{\sc R}}
+\def\without{\kern.4pt\mbox{%
+ \vrule \@width 1ex \@height .08ex \@depth 0ex\kern-0.08ex
+ \vrule \@width 0.08ex \@height 1.5ex \@depth 0ex}\kern.4pt}
+\def\with{\kern.4pt\mbox{%
+ \vrule \@width 0.08ex \@height 1.5ex \@depth 0ex\kern-0.08ex
+ \vrule \@width 1ex \@height .08ex \@depth 0ex}\kern.4pt}
+\def\etc{$\parallel$}
+\def\see{\kern.4pt\mbox{\vrule \@width 1em \@height .54ex \@depth -.46ex}\kern.4pt}
+
+