texlive[51432] Master: xskak (23jun19)

commits+karl at tug.org commits+karl at tug.org
Sun Jun 23 22:59:18 CEST 2019


Revision: 51432
          http://tug.org/svn/texlive?view=revision&revision=51432
Author:   karl
Date:     2019-06-23 22:59:18 +0200 (Sun, 23 Jun 2019)
Log Message:
-----------
xskak (23jun19)

Modified Paths:
--------------
    trunk/Master/texmf-dist/source/latex/xskak/xskak.ins
    trunk/Master/texmf-dist/tex/latex/xskak/xskak-keys.sty
    trunk/Master/texmf-dist/tex/latex/xskak/xskak-nagdef.sty
    trunk/Master/texmf-dist/tex/latex/xskak/xskak.sty
    trunk/Master/tlpkg/libexec/ctan2tds

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/latex/xskak/README.md
    trunk/Master/texmf-dist/doc/latex/xskak/UF-xskak-documentation.sty
    trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.pdf
    trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.tex
    trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.pdf
    trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.tex
    trunk/Master/texmf-dist/doc/latex/xskak/xskak.pdf
    trunk/Master/texmf-dist/doc/latex/xskak/xskak.tex
    trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.pdf
    trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.tex
    trunk/Master/texmf-dist/doc/latex/xskak/xskakgames.xsk
    trunk/Master/texmf-dist/source/latex/xskak/xskak.dtx

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/xskak/README
    trunk/Master/texmf-dist/doc/latex/xskak/README.TEXLIVE
    trunk/Master/texmf-dist/source/latex/xskak/xskak-src.dtx

Deleted: trunk/Master/texmf-dist/doc/latex/xskak/README
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/README	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/doc/latex/xskak/README	2019-06-23 20:59:18 UTC (rev 51432)
@@ -1,43 +0,0 @@
-xskak --- An extention to the package skak for chess typesetting
-Version 1.4 Ulrike Fischer 2006-2015
-
-LICENSE
-LaTeX Project Public License
-
-CONTENTS AND INSTALLATION
-
-- Readme (this file)
-- xskak-scr.dtx
-- xskak.ins
-- xskak.pdf
-
-Run TeX/LaTeX on xskak.ins to unpack the dtx.
-
-Put the three extracted files in tex/latex/xskak/.
-
-The dtx-file doesn't contain any documentation.
-So running LaTeX on it makes no sense!
-
-Put xskak.pdf in
- doc/latex/xskak/
-
-Update the filename database
-
-DOCUMENTATION
-
-xskak.pdf. There isn't a source for the documentation as it use some
-local fonts and styles.
-
-DESCRIPTION
-
-The main point of xskak is to save informations about a chess game
-for later use e.g. to loop through a game to make an animated board.
-It also extend the input that the parsing commands can handle and
-offer an interface to define and switch between indefinite levels
-of styles.
-
-
-REQUIREMENTS
-xskak uses some primitives of e\TeX. It needs version 1.4 of skak,
-a recent version of chessfss and xkeyval, version 1.5 of chessboard (which in turns
-needs xifthen and pgf).

Deleted: trunk/Master/texmf-dist/doc/latex/xskak/README.TEXLIVE
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/README.TEXLIVE	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/doc/latex/xskak/README.TEXLIVE	2019-06-23 20:59:18 UTC (rev 51432)
@@ -1,7 +0,0 @@
-The following files have been removed in the TeX Live installation of
-the current package, typically due to duplication, lack of space, or
-missing source code.  You can find these files on CTAN at
-	http://mirror.ctan.org/macros/latex/contrib/xskak
-If questions or concerns, email tex-live at tug.org.
-
-	xskak.pdf

Added: trunk/Master/texmf-dist/doc/latex/xskak/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/README.md	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xskak/README.md	2019-06-23 20:59:18 UTC (rev 51432)
@@ -0,0 +1,46 @@
+# xskak --- An extention to the package skak for chess typesetting
+
+Packageversion: 1.5 
+Packagedate: 2019-06-23
+Ulrike Fischer 2006-2019
+
+## LICENSE
+LaTeX Project Public License
+
+## CONTENTS AND INSTALLATION
+
+- README.md (this file)
+- xskak.dtx
+- xskak.ins
+- xskak.tex, xskak.pdf (the main documentation file)
+- some files needed to typeset the documentation
+
+Run TeX/LaTeX on xskak.ins to unpack the dtx.
+
+Put the three extracted files in tex/latex/xskak/.
+
+The dtx-file doesn't contain any documentation.
+So running LaTeX on it makes no sense!
+
+Put the other files  in
+ doc/latex/xskak/
+
+Update the filename database
+
+## DOCUMENTATION
+
+xskak.pdf. 
+
+## DESCRIPTION
+
+The main point of xskak is to save informations about a chess game
+for later use e.g. to loop through a game to make an animated board.
+It also extend the input that the parsing commands can handle and
+offer an interface to define and switch between indefinite levels
+of styles.
+
+
+## REQUIREMENTS
+xskak uses some primitives of e\TeX. It needs version 1.4 of skak,
+a recent version of chessfss and xkeyval, version 1.5 of chessboard (which in turns
+needs xifthen and pgf).


Property changes on: trunk/Master/texmf-dist/doc/latex/xskak/README.md
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xskak/UF-xskak-documentation.sty
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/UF-xskak-documentation.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xskak/UF-xskak-documentation.sty	2019-06-23 20:59:18 UTC (rev 51432)
@@ -0,0 +1,220 @@
+\ProvidesFile{UF-xskak-documentation.sty}[2008/01/09 local style for documentations]
+\DeclareOption{codemargin}{\AtEndOfPackage{%
+    \advance\oddsidemargin by 0.5in\relax
+    \advance\marginparwidth by 1in\relax}}
+\ProcessOptions
+\newcommand\filetype[1]     {\upshape\texttt{#1}} %e.g. \filetype{.pdf}
+\newcommand\programm[1]     {\upshape\textsf{#1}} %e.g. \programm{afm2tfm}
+\newcommand\chessfontname[1]{\upshape\textsf{#1}} %e.g. chessfontname{maya}
+\newcommand\konzept[1]      {\upshape\textsf{#1}} %e.g. \konzept{nfss}
+\newcommand\packagename[1]  {\upshape\textsf{#1}}
+
+\newcommand\skaksty{the  package \packagename{skak}\xspace}
+\newcommand\Skaksty{The  package \packagename{skak}\xspace}
+
+\newcommand\xskak{the  package \packagename{xskak}\xspace}
+\newcommand\Xskak{The  package \packagename{xskak}\xspace}
+
+\newcommand\chessfss{the package \packagename{chessfss}\xspace}
+\newcommand\Chessfss{The package \packagename{chessfss}\xspace}
+
+\newcommand\pchessboard{the package \packagename{chessboard}\xspace}
+\newcommand\Pchessboard{The package \packagename{chessboard}\xspace}
+
+
+\newcommand\mynobreakpar{\par\nobreak\@afterheading}
+\newcommand\key[1]{\texttt{#1}}
+\newcommand\obsoletekey[1]{\key{#1}\index{#1 (obsolete)}}
+\providecommand\gobble[1]{}
+\newcommand\keyoarg{\oarg{key=value list}}
+\newcommand\keymarg{\marg{key=value list}}
+\newcommand\keylist{\textit{key=value list}\xspace}
+\newcommand\keylists{\textit{key=value lists}\xspace}
+\newcommand\keyvalue{\textit{key=value}\xspace}
+
+\AtBeginDocument{%
+  \renewcommand*\lstlistlistingname{Examples}
+  \renewcommand*\lstlistingname{Example}
+}
+
+%
+\setcounter{secnumdepth}{4}
+\renewcommand{\theparagraph}{\alph{paragraph})}
+
+
+%% standard needed packages
+\RequirePackage[english]{babel}
+\RequirePackage{microtype}
+
+\RequirePackage{array}
+\RequirePackage{booktabs}
+\RequirePackage{xspace}
+\RequirePackage{ifluatex}
+
+%% fonts
+\ifluatex
+\else
+\RequirePackage[scaled=0.85]{luximono}
+\RequirePackage{fourier}
+\RequirePackage[scaled=0.86]{helvet}
+\fi
+%\addtokomafont{sectioning}{\rmfamily}
+\renewcommand*\descfont{\rmfamily\bfseries}
+
+%% colors
+\RequirePackage{xcolor}
+\colorlet{hellgelb}{yellow!15}
+
+
+% Quotes
+\RequirePackage[babel]{csquotes}
+\MakeAutoQuote {«}{»}
+
+
+%% index
+\RequirePackage{makeidx}
+\makeindex % number of columns set after doc
+
+\begin{filecontents}{\jobname.mst}
+actual '='
+quote '!'
+level '>'
+preamble
+"\n \\begin{theindex} \n \\makeatletter\\scan at allowedfalse\n"
+postamble
+"\n\n \\end{theindex}\n"
+item_x1   "\\efill \n \\subitem "
+item_x2   "\\efill \n \\subsubitem "
+delim_0   "\\pfill "
+delim_1   "\\pfill "
+delim_2   "\\pfill "
+% The next lines will produce some warnings when
+% running Makeindex as they try to cover two different
+% versions of the program:
+lethead_prefix   "{\\bfseries\\hfil "
+lethead_suffix   "\\hfil}\\nopagebreak\n"
+lethead_flag       1
+heading_prefix   "{\\bfseries\\hfil "
+heading_suffix   "\\hfil}\\nopagebreak\n"
+headings_flag       1
+%%
+%%
+\end{filecontents}
+
+
+%% codes and examples
+\begin{filecontents}{UFlstlocal.cfg}
+\ProvidesFile{UFlstlocal.cfg}[2005/07/01 lokale Listingsdefinitionen (UF)]
+
+\RequirePackage{xcolor}
+
+
+\colorlet{UFkeyscolor}{black}
+\colorlet{UFidentifiercolor}{black}
+\colorlet{UFcommentscolor}{red}
+\colorlet{UFstringcolor}{green!50}
+\colorlet{UFbackgroundcolor}{yellow!10}
+
+\lstdefinestyle{inline}{%
+    basicstyle=\ttfamily,
+    keywordstyle={}}
+
+
+\lstdefinestyle{UFdocu}{% mehr oder weniger kopiert aus showexpl.cfg
+     language=[LaTeX]TeX,%
+     float=hbp,%
+     basicstyle=\ttfamily,%
+     identifierstyle=\color{UFidentifiercolor},%
+     keywordstyle=\color{UFkeyscolor},%
+     stringstyle=\color{UFstringcolor},%
+     commentstyle=\itshape,%
+     columns=flexible,%
+     tabsize=4,%
+     frame=single,%
+     extendedchars=true,%
+     showspaces=false,%
+     showstringspaces=false,%
+     numbers=none,%
+     %numberstyle=\tiny\ttfamily,%
+     breaklines=true,%
+     breakindent=10pt,%
+     backgroundcolor=\color{UFbackgroundcolor},%
+     breakautoindent=true,%
+     captionpos=t,%
+     xleftmargin=1em,%
+     xrightmargin=\fboxsep,%
+     %numbersep=1em,%
+     breakatwhitespace=true,
+     preset=\raggedright\setlength{\parskip}{1ex},%
+     explpreset={numbers=none, basicstyle=\footnotesize\ttfamily},% ueberschreibt default
+     rframe={},% code ist im Rahmen
+     varwidth=true,% Breite des Beispiels
+     pos=o,
+     overhang=4em,%
+     literate={ü}{{\"u}}1{ö}{{\"o}}1{ä}{{\"a}}1
+}
+
+\lstdefinestyle{inline}{%
+    basicstyle=\ttfamily,
+    keywordstyle={}}
+
+\newcommand\mylstinline{\lstinline[style=inline]}
+
+\endinput
+%%
+%% End of file `UFlstlocal.cfg'.
+\end{filecontents}
+
+\RequirePackage[final]{showexpl}
+\input{UFlstlocal.cfg}
+\lstset{style=UFdocu}
+
+\newcommand\UFleftexamples{%
+\let\OriisSX at odd\isSX at odd
+\renewcommand*{\isSX at odd}[2]{##2}}
+
+\UFleftexamples
+
+\RequirePackage{doc}
+\def\meta at font@select{\rmfamily\itshape}
+\c at IndexColumns = 2
+\renewcommand\MacroFont{\scriptsize\ttfamily}
+\renewcommand\encapchar{ -- }
+% from ltxdoc.sty
+\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
+\providecommand\marg[1]{%
+  {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}}
+\providecommand\oarg[1]{%
+  {\ttfamily[}\meta{#1}{\ttfamily]}}
+\providecommand\parg[1]{%
+  {\ttfamily(}\meta{#1}{\ttfamily)}}
+
+
+%% pagestyle and layout
+\providecommand\UFcurrentpackage{unknown}
+\providecommand\UFcurrentversion{version unknown}
+
+\reversemarginpar
+
+\RequirePackage{fancyhdr}
+\pagestyle{fancy}
+
+\renewcommand\headrulewidth{0pt}
+\fancyhf{}
+\cfoot{\thepage}
+\lfoot{\today}
+\rfoot{\packagename{\UFcurrentpackage} \UFcurrentversion}
+
+
+%% captions
+\RequirePackage[tableposition=top]{caption}
+\captionsetup{singlelinecheck=false,format=hang,belowskip=1em}
+
+
+
+%% pdf-goodies:
+\RequirePackage{animate}
+\RequirePackage[colorlinks=true, %options are passed to hyperref
+               linkcolor=black,
+               hyperindex=true% true clashes with doc.sty
+               ]{attachfile}


Property changes on: trunk/Master/texmf-dist/doc/latex/xskak/UF-xskak-documentation.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.pdf	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.pdf	2019-06-23 20:59:18 UTC (rev 51432)

Property changes on: trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.tex	2019-06-23 20:59:18 UTC (rev 51432)
@@ -0,0 +1,7 @@
+\documentclass[12pt]{article}
+\usepackage{skak} %=skak version 1.5
+\begin{document}
+\newgame
+\newcommand\mycomment{ What else?}
+\mainline{1.e4!\wbetter{}\mycomment{} e5 2.Nf3 Nc6}
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xskak/skak-comment-test.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.pdf	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.pdf	2019-06-23 20:59:18 UTC (rev 51432)

Property changes on: trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.tex	2019-06-23 20:59:18 UTC (rev 51432)
@@ -0,0 +1,8 @@
+\documentclass[12pt]{article}
+\usepackage{skak}%=skak version 1.5
+\begin{document}
+\newgame\longmoves
+\mainline{1.e4 e5 2.Nf3 Nf6}
+
+\variation{2... d5}
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xskak/skak-longmoves-test-new.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xskak/xskak.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xskak/xskak.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/xskak.pdf	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/doc/latex/xskak/xskak.pdf	2019-06-23 20:59:18 UTC (rev 51432)

Property changes on: trunk/Master/texmf-dist/doc/latex/xskak/xskak.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xskak/xskak.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/xskak.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xskak/xskak.tex	2019-06-23 20:59:18 UTC (rev 51432)
@@ -0,0 +1,3490 @@
+% !Mode:: "TeX:DE:UTF-8:Main"
+% -*- mode: TeX -*- -*- coding: UTF-8 -*-
+\def\UFcurrentpackage{xskak}
+\newcommand\UFcurrentversion{1.5}
+
+\RequirePackage{fix-cm}
+
+\documentclass[pagesize,parskip=half-,fontsize=12pt]{scrartcl}
+\usepackage[utf8]{inputenc}
+
+%% xskak specific commands
+\usepackage[LSB1,LSB2, LSB3,LSBC2,LSBC3,LSBC4,LSBC5, T1]{fontenc}
+\usepackage{xskak}
+%\usepackage{eqparbox}
+\usepackage{tabularx}
+
+\usepackage{framed}
+\colorlet{shadecolor}{lightgray!25}
+
+
+\makeatletter
+\newcommand\Describefillkey[4][]{\par\index{#2  (\textbackslash chessboard key)}%
+\makebox[0pt][r]{\tiny #1\hspace{1em}}%
+ \colorbox{green!25}{\makebox[\dimexpr\textwidth-2\fboxsep\relax]{\ttfamily%
+    \eqparbox{fillkey}{#2=\meta{#3}}\hfill
+    \eqparbox{fillexample}{%
+     \ifthenelse{\equal{#4}{}}%
+     {#2}
+     {#2={#4}}}}}%
+    \par\nobreak\@afterheading}
+\makeatother
+
+\usepackage{filecontents}
+\usepackage{UF-xskak-documentation}
+
+\setchessboard{smallboard, showmover=false}
+\xskakset{style=UF}
+
+\usepackage{showexpl}
+\makeatletter
+\renewcommand\board at pgf@extractangle[2]{%#1 command, #2 pgfpoint
+   \pgfextracty{\len at board@tempy}{#2}%
+   \pgfextractx{\len at board@tempx}{#2}%
+  \ifdim\len at board@tempx=0pt\relax
+  %\len at board@tempy= 1 or unchanged?
+  \else
+   %\divide \len at board@tempy by \strip at pt\len at board@tempx\relax
+   \pgfmathsetlength{\len at board@tempy}{\len at board@tempy/\len at board@tempx}%
+  \fi
+   \ifdim\len at board@tempx=0pt\relax
+     \ifdim\len at board@tempy=0pt\relax
+      \def#1{0}%
+     \else
+      \ifdim\len at board@tempy>0pt\relax
+       \def#1{90}%
+      \else
+       \def#1{-90}%
+      \fi
+     \fi
+   \fi
+   \ifdim\len at board@tempy=0pt\relax
+    \ifdim\len at board@tempx=0pt\relax
+      \def#1{0}%
+    \else
+      \ifdim\len at board@tempx>0pt\relax
+       \def#1{0}%
+      \else
+       \def#1{180}%
+      \fi
+    \fi
+   \fi
+   \ifdim\len at board@tempx>0pt\relax
+    \ifdim\len at board@tempy>0pt\relax
+     \pgfmathatan{\len at board@tempy}%
+     \edef#1{\pgfmathresult}%
+    \fi
+    \ifdim\len at board@tempy<0pt\relax
+     \pgfmathatan{\len at board@tempy}%
+     \edef#1{\pgfmathresult}%
+    \fi
+  \fi
+  \ifdim\len at board@tempx<0pt\relax
+    \ifdim\len at board@tempy>0pt\relax
+     \pgfmathatan{-\len at board@tempy}%
+     \pgfmathadd{-\pgfmathresult}{180}%
+     \edef#1{\pgfmathresult}%
+    \fi
+    \ifdim\len at board@tempy<0pt\relax
+     \pgfmathatan{\len at board@tempy}%
+     \pgfmathadd{\pgfmathresult}{180}%
+     \edef#1{\pgfmathresult}%
+    \fi
+  \fi
+   }
+
+\makeatother
+
+\begin{document}
+
+\title{\packagename{xskak}: An extension to \skaksty}
+\author{Ulrike Fischer}
+\maketitle
+
+\tableofcontents
+
+\section{Changes}
+\begin{description}
+\item[2019-06-23] (Version 1.5)] Corrected a bug: \cs{xskak at beforecomment}{} was not defined. styleA was missing a space. Improved the documentation and added the source to the ctan upload.
+    
+\item[2015-01-02] (Version 1.4)] Corrected a bug: After a promotion the promotionpiece and the fen position were wrong.
+\item[2014-04-19] (Version 1.3)] Corrected a bug: enpassant test didn't check the piece and so other figures than a pawn could make an enpassant move.
+\item[2012-08-24 (Version 1.2b)]
+Corrected a small bug -- \cs{printchessgame} doesn't wrap around a wrapfigure.
+
+
+\item[2012-08-24 (Version 1.2a)]
+Corrected a small bug -- \cs{hidemoves} printed comment signs.
+
+\item[2008-10-10 (Version 1.2)]
+Made some changes to make \xskak compatible to the version 1.5 of
+\skaksty. See below for details.
+
+Changed Code: As \cs{longmoves} doesn't work with \cs{variation}
+anyway \cs{variation} now use always \cs{shortmoves}.
+
+Bug correction: \skaksty forgets to store comments after castling
+moves. Code to correct this has been added to \xskak.
+
+Bug correction: \xskak didn't print check and mate symbol after
+castling moves due to wrong position of braces.
+
+\item[2008-07-28 (Version 1.1)]
+Bug correction: Added the code for the promotion piece to the SAN and
+LAN notation.
+
+Bug correction: Remove some spurious spaces.
+
+\end{description}
+
+
+\section{Introduction}
+
+\Xskak\footnote{License: \LaTeX\ Project Public License} is an extension for \skaksty -- and as \xskak is an extension
+(and not a replacement) the main work is still done by \skaksty so
+please read first the documentation of \skaksty as I'm not explaining
+the \packagename{skak} commands in this documentation.
+
+
+\Skaksty is a package from Torben Hoffmann which can parse and print
+chess games given in (a subset of) the PGN notation.
+
+The main features of \packagename{xskak} are:
+
+\begin{itemize}
+\item \packagename{xskak} can handle an extended set of PGN.
+
+\item \packagename{xskak}
+can parse and store an arbitrary number of chess games in PGN. The
+games can be exported and imported and all positions and moves can be
+retrieved at anytime.
+
+\item \packagename{xskak} can
+handle an arbitrary number of printing styles to distinguish
+the different variations levels.
+
+\end{itemize}
+
+\minisec{Extended PGN handling}
+
+When handling a PGN chess parsers at first have to split the notation
+in different chunks. I will call this step the \emph{PGN parser}.
+As an example\\[1ex]\mbox{}\quad {\ttfamily 15.Ne5!+
+\$3 \{This breaks the black defense\} (15.Re1? Kg8!)}\\[1ex] contains as
+chunks a \emph{move number} (\texttt{15.}), a \emph{move}
+(\texttt{Ne5}), \emph{short move comments} (\texttt{!+}), a
+\emph{NAG} (\texttt{\$3}), a \emph{comment} (\texttt{\{This breaks
+the black defense\}}) and a \emph{variation} (\texttt{(15.Re1?
+Kg8!)}).
+
+Neither \packagename{skak} nor \packagename{xskak} can handle all
+legal PGN's. \Skaksty can only handle PGN's which contains move
+numbers, moves and short comments. \packagename{xskak} can
+additionally handle NAG's and a special form of comments. None of the
+packages can currently parse PGN's with variations.
+
+
+\minisec{Storing moves}
+
+After the splitting of the PGN the chunks are processed further.
+Depending on the type of the chunk different actions are taken. The
+most important subprocess is the \emph{move parser}. It takes the
+move, retrieves from somewhere the current (FEN-)position of the game
+and tries to figure out what the move is exactly doing.
+
+In \packagename{xskak} only the commands \cs{mainline} and
+\cs{hidemoves} calls the move parser, \cs{variation} uses only the
+PGN parser.
+
+The main difference between \packagename{xskak} and
+\packagename{skak} is how they handle the information gathered by
+the move parser: \Skaksty uses the results of the move parser mainly
+to update the board and after the move throws almost all other
+information away -- including previous positions. \xskak saves all
+information about the moves for later use. Here a simple example:
+
+\begin{LTXexample}
+ \newchessgame
+ \mainline{1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6}
+
+ \xskakset{moveid=2w}%
+ \chessboard[setfen=\xskakget{nextfen}]\\[1ex]
+ Position after 2.\,\xskakget{lan}
+\end{LTXexample}
+
+So in short you start a game with \cs{newchessgame}, you enter moves
+with \cs{mainline} (or \cs{hidemoves}), you set the move for which
+you want to retrieve data with \cs{xskakset}, and then you retrieve
+the data with \cs{xskakget}.
+
+
+The storing of the moves and positions is not restricted to the main
+game. You can store and retrieve as much variation levels you want.
+
+
+\minisec{Printing styles}
+
+The following example shows how to use different styles for different
+variation levels. But it also shows the problems: It can be quite
+tiresome to get a good printing result. You must pay attention to the
+levels and the spaces after commands, and for each variation you have
+to start a new game and resume older games if you go back to them.
+
+\begin{LTXexample}
+\longmoves \xskakset{style=UF}
+\newchessgame[id=main]
+\mainline{1.e4 e5}
+%
+ (Alternatives are
+ \newchessgame[newvar=main,id=var1]%
+ \mainline[invar]{1... d5} which is answered by
+ \mainline{2. exd5 Qxd5}
+  %
+   \newchessgame[newvar=var1,id=var1-1]
+   (\mainline[invar]{2... Nf6})
+   %
+ or
+ \newchessgame[newvar=main,id=var2]
+ \mainline[outvar]{1... e6 2. d4})
+%
+\resumechessgame[id=main]%
+\mainline[outvar]{2.Nf3}
+
+\chessboard
+\end{LTXexample}
+
+
+
+\bigskip
+
+In the following sections I will describe the finer points. This
+includes
+\begin{itemize}
+\item how to handle more than one game at a time,
+\item how to retrieve the data faster,
+\item what data you can retrieve,
+\item how to loop through a game,
+\item how to export the data,
+\item how to improve the printing of the games,
+\item and some other changes/additions I made to \packagename{skak}.
+\end{itemize}
+
+
+\subsection{Warnings}
+
+\minisec{\packagename{xskak} and \packagename{skak}}
+
+\Xskak doesn't only define some new commands, it also changes some
+quite central internal commands of \skaksty. This means
+\begin{itemize}
+    \item it can break standard commands of \skaksty,
+
+    \item it will possibly not work together with future versions of
+    \skaksty,
+
+    \item loading \packagename{xskak.sty} can lead to problems with
+    packages like \packagename{texmate} which use internally
+    \packagename{skak}.
+\end{itemize}
+
+\minisec{Local and global commands}
+
+In the package \packagename{chessboard} almost every setting is local
+to the board. This was a quite natural decision as a board is a
+confined space. In \packagename{xskak} the situation is quite
+different: As a start \packagename{skak} already sets and saves some
+information globally and the data saved by \packagename{xskak}
+during the parsing must be saved globally or they wouldn't never
+escape the \cs{mainline}. And secondly, as I wanted to use
+\packagename{beamer} and \packagename{animate} a lot of data
+must be preserved from one frame/picture to the next. So I decided to
+use in most cases global commands unless -- like in the cases of
+styles -- I could see a real advantage in keeping a setting local.
+
+So please be aware that settings made e.g. in a figure environment
+can affect the following text.
+
+
+\subsection{Some history}
+
+While the commands \cs{mainline} and \cs{hidemoves} parse a chess
+game \skaksty updates an internal board and so can always show the
+current position. Sadly a lot of the data gathered during the
+parsing are thrown away after \packagename{skak} has updated the
+board and  has go on to the next move and so can not be used by the
+user. E.g. there is no way to get the field a piece came from or to
+store easily all positions of a game.
+
+Some years ago I tried to find out how to print a game in long
+algebraic notation and I realized quite fast that I need some of
+these lost data to be able to do it, and that it would be necessary
+to patch some internal commands of \skaksty to save the data. At the
+same time I also tried to insert some code that allows the parsing of
+standard PGN-comment signs. Due to lack of time the whole project
+didn't got very far but I had a working beta. Then a new version of
+\skaksty came. It had even a -- sadly at the time not fully working -- command \cs{longmoves}%
+    \index{longmoves=\verb!*+\longmoves+>}%
+    \index{shortmoves=\verb!*+\shortmoves+>}
+(and the counterpart \cs{shortmoves}) to switch to the long algebraic
+notation. But I hadn't the time to test and adjust my package.
+
+    \index{longmoves=\verb!*+\longmoves+>}%
+    \index{shortmoves=\verb!*+\shortmoves+>}%
+
+Then in 2006 I wrote \pchessboard and during the tests also tried to
+make animated pdf's which show all positions of a game. That worked
+fine but the input was so tiresome that I restarted the
+\packagename{xskak}-project: Like in the case of the long algebraic
+notation the main problem was the loss of previous positions.
+
+
+\subsection{Bugs and errors}
+
+I'm quite sure that they are bugs and errors in the package.
+
+If you have questions ask them in the newsgroups
+\nolinkurl{comp.text.tex}, \nolinkurl{de.comp.text.tex} or
+\nolinkurl{fr.comp.text.tex} or at \url{http://tex.stackexchange.com/}. 
+I'm reading these groups regularly and
+I'm much better in answering there than in answering e-mails.
+
+If you find errors in this text (this includes wrong english) or in
+the package, you can write me a bugreport at
+\nolinkurl{chess at nililand.de} or -- better -- add an issue to the github site
+\url{https://github.com/u-fischer/xskak/issues/}. A bugreport should contain a complete,
+running, \emph{minimal} example and the log-file of the pdf\LaTeX\
+run (that means the engine that makes a pdf!).
+
+
+\subsection{Requirements}
+
+\Xskak uses some primitives of e\TeX. It needs version 1.4 or version
+1.5 of \skaksty, a recent version of \chessfss (chess font selection)
+and \packagename{xkeyval} (\textit{key=value}-syntax), version 1.5 of
+\packagename{chessboard} (which in turns needs \packagename{pgf}) and
+\packagename{xifthen}.
+
+
+\subsection{Installation}
+
+Run \filetype{xskak.ins} through \LaTeX\ and then put the
+\filetype{*.sty} where \LaTeX\ finds them.
+(\path{<texmf>/tex/latex/xskak/} is a good place.) Update the
+filename database.
+
+
+\subsection{Loading and package options}
+
+Loading of the package is done with \verb+\usepackage{xskak}+.
+Currently the package has only one option: \texttt{nopdfmatch}.%
+    \index{nopdfmatch (package option)}
+The option will disable the use of the experimental \cs{pdfmatch}
+used in the  processing of the style levels (see section
+\ref{sec:usestyles}). \packagename{xskak} will load \skaksty without
+option (and won't pass options to it). So, if you want to load
+\packagename{skak} with options, you must do it before loading
+\xskak.
+
+\subsection{Adaption to \skaksty version 1.5}
+
+Above I warned that \xskak can break with newer versions of \skaksty.
+When the version 1.5 of \packagename{skak} appeared 
+promptly a lot of things broke so I had to adapt and change my code.
+Version 1.2 of \xskak will work with both versions of
+\skaksty.
+
+In version 1.5 of \skaksty some fundamental things have changed. At
+first \cs{longmoves} works now correctly, even as you can see for the
+\cs{variation} command:
+
+
+\LTXinputExample[label=ex:longmovesnew,
+                   graphic={[trim=3cm 24cm 9cm
+                   4cm,clip]{skak-longmoves-test-new}},
+                   caption={The new
+                            longmoves implementation of
+                            \skaksty}]{skak-longmoves-test-new}
+
+
+The more important change (from the point of my package) is that
+\cs{variation} now parse the moves too (that's why it can show the
+long algebraic notation). To achieve this the author of \skaksty,
+Torben Hoffman, stores now the position before a move so that he can
+go back to this position and start the variation from there.
+
+The main problem with this approach is that it imposes restrictions
+on the move numbers of variations: All variations must start with the
+move number of the last move in a \cs{mainline} command. So
+separating two moves of a variation by some text is no longer
+possible:
+
+\begin{lstlisting}
+ \documentclass{article}
+ \usepackage{skak}  %=skak version 1.5
+ \begin{document}
+ \newgame
+ \mainline{1.e4 e5 2. Nf3}
+ \variation{2. d3 d6} %works
+ \variation{2. c3}    %works
+ and then
+ \variation{2...c6}   %error
+ \end{document}
+\end{lstlisting}
+
+To tell the truth, I'm not sure that this a very good idea. In any
+case: \xskak overwrites the responsable definitions of \skaksty. With
+\xskak \cs{variation} currently doesn't parse games (and so also
+can't show moves in long algebraic notation -- if you want this you
+will have to start with the commands described later in this
+documentation a new game with another id). So the above example works
+fine with \xskak.
+
+
+
+
+
+\subsection{The example}
+
+Almost all examples use as starting point  a new game. But in some
+cases the following position is used, which allows to show almost all
+special cases (like enpassant, promotion, capture, castling,
+ambiguous moves). The position is stored under the name «example» and
+so can be retrieved e.g. with the key \key{restorefen=example} from
+\packagename{chessboard} or the command
+\lstinline+\restoregame{example}+ of the package
+\packagename{skak}\footnote{One could also use  key \key{tag} to
+store the position and key \key{reffen} to retrieve it.}:
+
+\begin{LTXexample}[caption={The standard example position},width=.7\textwidth]
+ \newchessgame[id=example,
+   castling=Q,
+   setwhite={pa2,pc7,pg5,ph2,pe4,
+             ke1,ra1,bg4},
+   addblack={pb4,ph7,pd5,
+             ke8,rh8,bh3,nf6,ne5},
+   storefen=example]%
+
+ \mbox{\Xskakexampleinitfen}
+
+ \chessboard
+\end{LTXexample}
+
+
+\section{Improved parsing of comments}\label{sec:diagrams}
+
+ \Skaksty can handle comments in the input if they follow
+directly the move, if the commands are robust and if the spaces that
+separate moves and numbers are not swallowed by a command.
+
+\LTXinputExample[label=ex:comments,
+                   graphic={[trim=3cm 24cm 9cm
+                   4cm,clip]{skak-comment-test}},
+                   caption={comments in \skaksty}]{skak-comment-test}
+
+
+This is quite okay for a few small comments in a small number of
+games, but a bit tiresome if you want to handle a lot of games that
+you have annotated with a chess application.  The PGN export of such
+games uses NAG's for short comments and curly braces for longer
+comments.
+
+
+With \xskak the commands \cs{mainline}, \cs{hidemoves} and
+\cs{variation} now can parse NAG's and longer comments if the input
+meet the following conditions:
+%\end{document}
+\begin{itemize}
+     \item There must be  spaces between the moves, each NAG and the
+     comments.
+
+     \item Text comments must be written as
+     \verb+\xskakcomment{+\meta{Text}\verb+}+%
+      \footnote{Braces are so frequent in \TeX\ that is simply not
+      possible to identify the comments simply by looking for a brace
+      -- at least not without a lot of complicated hacks.}
+
+\end{itemize}
+
+While parsing the comments the spaces before and between them will be
+swallowed.  If you want a space you must add it to the text. The
+NAG's (\$1, \$2 etc) are translated  following the definitions in
+\filetype{xskak-nagdef.sty}. The list there is neither complete nor
+definite. For quite a lot NAG's I hadn't the faintest idea what do.
+I'm open for suggestions/corrections.
+
+There exist two «fake» NAG's: \$d and \$D. If used in a \cs{mainline}
+or \cs{hidemoves} both will save the identification of the current
+move in an internal list and print whatever they have been defined
+to.  (Currently \$D will print \cs{chessdiagramname} which is defined
+as \verb+\ (Diagram)\ +, \$d is
+empty). This can be used to refer to diagrams printed later.%
+  \footnote{It is not a accidental that there is a similar command
+  «\cs{toD}» in \packagename{texmate}. That's where I got the idea
+  from.}
+
+
+
+\begin{LTXexample}[caption={NAG's, comments and diagram references in the input}]
+ \newchessgame[id=GameA]
+ \mainline{1.e4! $2 e5  $D 2.Nf3 Nf6 \xskakcomment{ What's that? }}
+
+ \renewcommand\xskakcomment[1]{{\itshape #1}}%
+ \mainline{3. Nxe5
+   \xskakcomment{ I took a pawn! } $D }
+ \variation[invar]{3. Nc3 $4
+   \xskakcomment{ (boring) }}
+
+ \makeatletter
+ \@for\mymoveid:=\XskakGameAdiagramlist\do{%
+  \xskakset{moveid=\mymoveid}%
+  \begin{tabular}{c}
+  \chessboard[tinyboard,
+      setfen=\xskakget{nextfen}]\\
+  After move \xskakget{opennr}\xskakget{lan}
+  \end{tabular} }
+\end{LTXexample}
+
+
+\section{The core of \xskak: Saving games.}
+
+\Xskak redefines some internal commands of \skaksty to enable
+\cs{mainline} and \cs{hidemoves} to store quite a lot%
+ \footnote{\textbf{Attention:} When I say «a lot» I really mean it. Currently
+  about 30 commands for each halfmove is saved plus about 30 commands
+  for each game.  A lot of games with individual game identifications
+  can use a lot of memory. But in practice that shouldn't be a problem
+  as it is seldom necessary to use a lot of different game
+ identifications.}
+data about the moves and the state of the game while parsing
+the game.
+
+There are two sorts of data:  Information related to the game as a
+whole (e.g. the names of the players and the start position) and
+information related to the moves. Both type of information use a
+\meta{GameId} in the names of the commands to identify the game they
+are referring to, the move data use additionally a \meta{MoveId}.
+
+\begin{shaded}
+\minisec{Exkurs 1}
+
+It is important to understand one difference between the use of
+\meta{GameId} and \meta{MoveId}: There is only \emph{one} command
+that holds the current \meta{GameId}. The \meta{GameId} is a concept
+specific to \xskak. The current value \meta{GameId} is stored in a
+command and will be used (and can be changed) by all the commands
+that store information \emph{and} by all the commands that retrieve
+information. So if you are parsing a game in bits you should be
+careful to use the same \meta{GameId} for each part.
+
+On the other sides there are \emph{three} different places where move
+data are set or used: \skaksty uses in \cs{mainline} and
+\cs{hidemoves} a counter called «\texttt{move}» and a boolean to keep
+track of the current move and player. \Xskak has two internal
+commands which are used to set up the start moves of games and to
+retrieve the stored move data, and \cs{chessboard} has two keys that
+set move data in FEN's. This can be sometimes a bit
+confusing. \Skaksty will not like it if its move counter is changed
+while parsing a game, but it is  normally not a problem to change the
+\packagename{xskak} move commands e.g. to retrieve data about
+previous moves -- as long as you don't use commands like
+\cs{newchessgame} that affects also the \packagename{skak} move
+counter.
+\end{shaded}
+
+
+\begin{shaded}
+\minisec{Exkurs 2}
+
+In chess we speak quite as often about the last move and the last
+position than about the next move and the next position: A position
+can be described as the one \emph{after} the \emph{last} move, the
+result of a move. But it can also be described as the one
+\emph{before} the \emph{next} move.
+
+The keys and commands described later reflect this: Given a move
+number you can access e.g. the position \emph{before} the move
+through the key word \key{pastfen} and the position \emph{after} the
+move through the key word \key{nextfen}. Given a \emph{tag} -- that
+is a label between two moves, you can refer to the move
+\textit{before} the tag through keys with the prefix \key{past} and
+to the move \emph{after} the tag through keys with the prefix
+\key{next}.
+
+In short: \key{past} looks back and \key{next} looks forward.
+
+The first position of a game and the first move have the prefix
+\key{init}. The last position (after the last move) and the last move
+have the prefix \key{last}.
+
+\end{shaded}
+
+
+\subsection{Initialization of the game}
+
+\DescribeMacro{\newchessgame}%
+When using \xskak you should start a new game with
+\cs{newchessgame}\keyoarg{} instead of \cs{newgame}. It will set the
+identification \meta{GameId} of the game, the start position, start
+move and quite a lot of other variables to sensible values.
+
+In the optional argument you can use the following keys:
+
+\begin{description}
+\item[\key{id=}\meta{GameId}]
+    \index{newchessgame=\verb!*+\newchessgame+>id (key)}%
+    \index{id (\texttt{\textbackslash newchessgame} key)}%
+    This key sets the string that identifies the game and is used in
+    the following parsing commands to store the data.
+    It is possible to use commands and counters e.g. for automatic numbering of
+    the games.
+    If you don't use the key or if you use the key without
+    argument (\verb+\newchessgame[id]+) a default is used.
+    The initial value of this default is \texttt{game}, but it can be changed with
+    \cs{xskakset}.
+    You can use the key \key{id} in each \cs{newchessgame} only once.
+
+\begin{LTXexample}[varwidth=false,width=0.3\textwidth]
+ \newchessgame[white=Bob]%
+ \mainline{1. e4 e5}
+
+ \newchessgame[id=MY,white=Bill]%
+ \mainline{1. e4 e5}
+
+ \newcounter{gamecounter}%
+ \stepcounter{gamecounter}%
+ \xskakset{defaultid=Game\Alph{gamecounter}}%
+
+ \newchessgame[white=Harry]%
+ \mainline{1. e4 e5}
+
+ \stepcounter{gamecounter}%
+ \newchessgame[white=Thomas]%
+ \mainline{1. d4 d5}
+
+ \Xskakgamewhite,  \XskakMYwhite,
+ \XskakGameAwhite, \XskakGameBwhite%
+\end{LTXexample}
+
+\item[\key{movenr=}\meta{number}, \key{player=}\meta{«w» or «b»}, \key{moveid=}\meta{number + «w» or «b»}]
+    \index{newchessgame=\verb!*+\newchessgame+>movenr (key)}%
+    \index{movenr (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>player (key)}%
+    \index{player (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>moveid (key)}%
+    \index{moveid (\texttt{\textbackslash newchessgame} key)}%
+     With this keys you can change the start move for the parsing
+     commands \cs{mainline} and \cs{hidemoves}.
+     Setting this keys will change the counter and boolean
+     of \packagename{skak} \emph{and} the internal commands of
+     \packagename{xskak}.
+     The changes are global.
+     Default is \texttt{moveid=1w}, this default can be changed with
+     \cs{xskakset}.
+     Move number and player given through one of the FEN-keys of \cs{chessboard}
+     will not affect the move counter of \packagename{skak}!
+
+
+\begin{LTXexample}[varwidth=false,width=0.3\textwidth]
+ \newchessgame
+ \mainline{1. e4}
+
+ \newchessgame[moveid=4w]
+ \mainline{4. e4 e5}
+
+ \xskakset{defaultmoveid=5b}
+ \newchessgame
+ \mainline{5... c4}
+ \xskakset{defaultmoveid=1w} %back to normal
+\end{LTXexample}
+
+\item[\key{newvar=}\meta{GameId}]
+    \index{newchessgame=\verb!*+\newchessgame+>newvar (key)}%
+    \index{newvar (\texttt{\textbackslash newchessgame} key)}%
+
+     If you use this key \cs{newchessgame} will use the position
+     and the \meta{moveid} \emph{before} the last
+     move of the game \meta{GameId} as start position. If you don't
+     give a value the current meaning of \meta{GameId} is used. This
+     can be used to start variations. The new game inherits only the
+     start position of the reference game!
+
+
+\item[\key{ref\ldots=}\meta{tag}]
+
+The \meta{GameId} and the start move can also be set with keys which
+use values saved with a \key{tag}. The keys are described in section
+\ref{sec:labeling}.
+
+
+\item[keys to set PGN-infos]
+    \index{newchessgame=\verb!*+\newchessgame+>result (key)}%
+    \index{result (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>white (key)}%
+    \index{white (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>black (key)}%
+    \index{black (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>whiteelo (key)}%
+    \index{whiteelo (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>blackelo (key)}%
+    \index{blackelo (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>site (key)}%
+    \index{site (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>date (key)}%
+    \index{date (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>event (key)}%
+    \index{event (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>round (key)}%
+    \index{round (\texttt{\textbackslash newchessgame} key)}%
+    \index{PGN-infos |see (\texttt{\textbackslash newchessgame} keys)}%
+    With the keys \key{result}, \key{white}, \key{black},
+    \key{whiteelo}, \key{blackelo}, \key{site}, \key{date},
+    \key{event} and \key{round} you can store the content of the
+    PGN-infos. Unused keys are set to default values. These defaults
+    can be changed with \cs{xskakset}.
+
+    \DescribeMacro{\xskaknewpgninfo}%
+    With \cs{xskaknewpgninfo}\oarg{default value}\marg{keyname} you can define a own PGN-info key. This
+    will also define a key \key{default\meta{name}} to change the default value later.
+
+\begin{LTXexample}[varwidth=false,width=0.3\textwidth]
+ \xskaknewpgninfo[Tom]{commentary}
+
+ \newchessgame[white=Harry,date=2007]
+ \xskakgetgame{white}, \xskakgetgame{date},
+ \xskakgetgame{event},
+ \xskakgetgame{commentary}
+
+ \xskakset{defaultevent=My open}
+
+ \newchessgame[commentary=Müller]
+ \xskakgetgame{commentary},
+ \xskakgetgame{event}
+
+\end{LTXexample}
+
+
+\item[using chessboard keys]
+    \index{newchessgame=\verb!*+\newchessgame+>using chessboard keys}%
+    You can use any key that can be used in the optional argument of
+    \cs{chessboard} from the package \packagename{chessboard}.
+    \cs{newchessgame} will pass all keys to an internal
+    \cs{chessboard}%
+     \footnote{That's why you will get an error from \cs{chessboard} if you use an unknown key.}.
+    \cs{chessboard} will set a position and give it back as the start position for the
+    game.
+    All \packagename{chessboard} keys are processed normally.
+    You can even print directly the board by using the key \key{print}.
+    The only exceptions\footnote{They don't gives
+    error but they will have no effect.} are the keys \key{maxfield}
+    and \key{zero} that change the size of the board --
+    \packagename{skak} doesn't like unusual sizes of the board --
+    and the keys \key{mover} and \key{fullmove} which are overwritten
+    by the (eventually default) value of key \key{moveid}. The castling
+    possibilities and the enpassant field are set accordingly the
+    values in the default fen, you only need to set them if you want
+    to use other values.
+    Read the documentation of \packagename{chessboard} for more information.
+
+
+\begin{LTXexample}
+\newchessgame[
+  moveid=4b,print,
+  showmover,
+  mover=w,% has no effect
+  castling=Q,enpassant=a3,
+  setwhite={pa4,pc7,pg5,ph2,pe4,ke1,ra1,bg4},
+  addblack={pb4,ph7,pd5,ke8,rh8,bh3,nf6,ne5}]%
+
+\mainline{4...  bxa3}
+\chessboard
+\end{LTXexample}
+\end{description}
+
+    To use a position of another game as a start position you can use
+    e.g. this sequence of keys
+    (a shorter method that use a label/ref-method will
+    be described in the section \ref{sec:labeling}):
+
+    \cs{newchessgame}\verb+[id=+\meta{old id}%
+    \verb+, moveid=+\meta{old move id}%
+    \verb+,+\\\phantom{(newchessgame[}%
+    \verb+setfen=\xskakget{+\meta{\ttfamily\upshape nextfen|pastfen}\verb+}+%
+    \verb+,+\\\phantom{(newchessgame[}%
+    \verb+id=+\meta{new id}\verb+, moveid=+\meta{new initmove id}%
+    \verb+]+
+
+    \textbf{Attention:} A new game is a \emph{new} game. It doesn't inherit moves of
+    another game -- it only reuses a position.
+    So if the new and the old game have identical \meta{GameId}
+    then the old game will be more or less lost.
+
+   In case that you want to go one half move back and start a new
+   game from there you can use the key \key{newvar}:
+
+   \cs{newchessgame}\verb+[newvar=+\meta{old id}%
+                    \verb+, id=+\meta{new id}\verb+]+
+
+
+\begin{LTXexample}
+ \newchessgame[id=A]%
+ \mainline{1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O}
+
+ \newchessgame[
+     id=A,moveid=3w,print,
+     setfen=\xskakget{nextfen},
+        %fen after move 3w
+     id=B,moveid=1b]
+
+ \mainline{1... Nf6}
+
+ \newchessgame[id=C]
+ \mainline{1. e4 e5 2. Nf3 Nc6 3. Bb5 a6 4. Ba4 Nf6 5. O-O}
+
+ \newchessgame[print,
+       id=C,
+  % we retrieve the number of the last move
+  % of game C and set it as first number
+  % of the new game B at the same time:
+       moveid=\xskakgetgame{lastmoveid},
+       setfen=\xskakget{pastfen},
+       id=B]
+
+ \mainline{5. d3}
+\end{LTXexample}
+
+
+\subsection{Continuing a game}
+
+\DescribeMacro{\resumechessgame}%
+    \Skaksty doesn't have a problem if you split a game in pieces.
+    You can use as many \cs{mainline} commands as you want. It even
+    doesn't matter if you started the game in another group. But if
+    you mix two games you must first reset the
+    position and the move counter to the end position of the old game
+    before you can continue it. This is possible with
+    \cs{resumechessgame}\keyoarg. You can use
+    \cs{chessboard}-keys in the optional argument but all the keys
+    that tries to change the position will have no effect. It is also
+    not possible to store the new moves under a new game identification or
+    to renumber the moves.
+
+    The command accepts the following additional keys in the optional
+    argument:
+
+\begin{description}
+\item[\key{id=}\meta{GameId}]
+    \index{resumechessgame=\verb!*+\resumechessgame+>id (key)}%
+    \index{id (\texttt{\textbackslash resumechessgame} key)}%
+    This key identifies the game that should be continued (as a
+    default the currently active identification is used). The key
+    changes \meta{GameId} globally!
+
+
+\item[\key{movenr=}\meta{number}, \key{player=}\meta{«w» or «b»}, \key{moveid}\meta{number + «w» or «b»}]
+    \index{resumechessgame=\verb!*+\resumechessgame+>movenr (key)}%
+    \index{movenr (\texttt{\textbackslash resumechessgame} key)}%
+    \index{resumechessgame=\verb!*+\resumechessgame+>player (key)}%
+    \index{player (\texttt{\textbackslash resumechessgame} key)}%
+    \index{resumechessgame=\verb!*+\resumechessgame+>moveid (key)}%
+    \index{moveid (\texttt{\textbackslash resumechessgame} key)}%
+    This keys set the move from which on the game should be
+    restarted. With the keys it is possible to go back and then
+    continue the game along another variation (in this case the moves
+    of the first variation will be lost).
+    The values describes the \emph{next} move that means the position \emph{before} the move is
+    used.
+    As a default \cs{resumechessgame} continues the game.
+
+\begin{LTXexample}[width=0.5\textwidth,preset=\parskip1ex]
+ \newchessgame[id=main]
+ \mainline{1. e4 e5 2. Nf3 Nc6 3. Bb5}
+
+ That reminds me another game
+ some years ago where I played
+ \newchessgame[id=exkurs]
+ \mainline{1. d4 Nf6 2. c4 e6}
+ \ldots\ lots of text \ldots\
+
+ Let's continue the second game with --
+ as a reminder -- the last move of
+ black
+ \resumechessgame[id=exkurs,moveid=2b]%
+ \mainline{2... e6 3. Nc3}
+
+ Let us now go back to the first game\\
+ \resumechessgame[id=main,print,
+                 tinyboard,showmover]%
+ \mainline{3... a6}
+\end{LTXexample}
+
+\item[\key{newvar=}\meta{GameId}]
+    \index{resumechessgame=\verb!*+\resumechessgame+>newvar (key)}%
+    \index{newvar (\texttt{\textbackslash resumechessgame} key)}%
+
+     This key moves you one halfmove back.
+     This can be used to write down a lot of variations. With the
+     (optional) value of the key you set the \meta{GameId}. If you don't
+     give a value the current meaning of \meta{GameId} is used.
+
+\begin{LTXexample}[width=0.5\textwidth,preset=\parskip1ex]
+ \newchessgame[id=main]
+ \mainline{1. e4 e5 2. Nf3 Nc6 3. Bb5}
+
+
+ \newchessgame[id=exkurs]
+ \mainline{1. d4 Nf6 2. c4 e6}
+
+ \resumechessgame[newvar=main]
+ \mainline{3. Bc4}
+
+
+ \resumechessgame[newvar]
+ \mainline{3. Nc3}
+ \chessboard
+
+ \xskakset{id=exkurs}
+ \resumechessgame[newvar]
+ \mainline{2... c5}
+ \chessboard
+
+\end{LTXexample}
+
+\item[\key{ref\ldots=}\meta{tag}]
+The \meta{GameId} and start move can also be set with this keys which
+use values saved with a \key{tag}. The keys are described in section
+\ref{sec:labeling}.
+
+\end{description}
+
+\subsection{The stored information}
+
+The following lists describes all the types of information stored
+during the parsing of a game. As you will see some data are stored
+more than once with only slight differences. I did it because it is
+easier to store the redundant data than to have to convert them
+later.
+
+There are also commands which contains the \meta{GameId} and the
+\meta{MoveId}. That looks a bit senseless as you need to know this
+values to be able to retrieve them but they allow easy access to the
+values without having to know or use the internal command names.
+
+
+\subsubsection{Essential game related information}
+
+\begin{description}
+
+\item[\textbackslash Xskak\meta{GameId}initfen]%
+    \index{game data >Xskakinitfen=\textbackslash Xskak\meta{GameId}initfen}%
+    \index{Xskakinitfen=\textbackslash Xskak\meta{GameId}initfen}%
+    The position before the first move. Set by \cs{newchessgame}.
+
+
+\item[\textbackslash Xskak\meta{GameId}initplayer]%
+    \index{game data >Xskakinitplayer=\textbackslash Xskak\meta{GameId}initplayer}%
+    \index{Xskakinitplayer=\textbackslash Xskak\meta{GameId}initplayer}%
+     «w» or «b». The color of the next (first) player, (must be identical
+     to the color in the initfen). Also set by \cs{newchessgame}.
+
+\item[\textbackslash Xskak\meta{GameId}initmovenr]%
+    \index{game data >Xskakinitmovenr=\textbackslash Xskak\meta{GameId}initmovenr}%
+    \index{Xskakinitmovenr=\textbackslash Xskak\meta{GameId}initmovenr}%
+     The number of the first move (must be identical to the fullmove
+     number in the initfen). Also set by \cs{newchessgame}.
+
+\item[\textbackslash Xskak\meta{GameId}initmoveid]%
+   \index{game data >Xskakinitmoveid=\textbackslash Xskak\meta{GameId}initmoveid}%
+   \index{Xskakinitmoveid=\textbackslash Xskak\meta{GameId}initmoveid}%
+   Combination of \key{initmovenr} and \key{initplayer}.
+
+\begin{LTXexample}
+ \newchessgame[id=show,
+               setfen=2K/k/7R,
+               moveid=10b,
+               print]
+
+ \mbox{\xskakgetgame{initfen}},\\
+ \xskakgetgame{initplayer},
+ \xskakgetgame{initmovenr},
+ \xskakgetgame{initmoveid}
+\end{LTXexample}
+
+
+
+\item[\textbackslash Xskak\meta{GameId}lastfen]%
+   \index{game data >Xskaklastfen=\textbackslash Xskak\meta{GameId}lastfen}%
+   \index{Xskaklastfen=\textbackslash Xskak\meta{GameId}lastfen}%
+   The fen \emph{after} the last move, set during parsing.
+
+\item[\textbackslash Xskak\meta{GameId}lastplayer]%
+   \index{game data >Xskaklastplayer=\textbackslash Xskak\meta{GameId}lastplayer}%
+   \index{Xskaklastplayer=\textbackslash Xskak\meta{GameId}lastplayer}%
+    «w» or «b». The player which made the last move, set by
+    \cs{newchessgame}, by \cs{resumechessgame} and during
+    parsing. Identical to color in the fen \emph{before} the last
+    move! \emph{Not} identical to the color in {\texttt\textbackslash
+    Xskak\meta{GameId}lastfen}!
+
+\item[\textbackslash Xskak\meta{GameId}lastmovenr]%
+   \index{game data >Xskaklastmovenr=\textbackslash Xskak\meta{GameId}lastmovenr}%
+   \index{Xskaklastmovenr=\textbackslash Xskak\meta{GameId}lastmovenr}%
+   The number of the last move, set during parsing. Identical to
+   fullmove in the fen \emph{before} the last move! \emph{Not}
+   necessarily identical to the number in {\texttt\textbackslash
+   Xskak\meta{GameId}lastfen}!
+
+\item[\textbackslash Xskak\meta{GameId}lastmoveid]%
+   \index{game data >Xskaklastmoveid=\textbackslash Xskak\meta{GameId}lastmoveid}%
+   \index{Xskaklastmoveid=\textbackslash Xskak\meta{GameId}lastmoveid}%
+   Combination of \key{lastmovenr} and \key{lastplayer}.
+
+\begin{LTXexample}
+ \newchessgame[id=show,
+               setfen=2K/k/7R,
+               castling={},
+               % sets correct castling in the FEN
+               moveid=10b]
+ \mainline{10... Ka8}
+
+ \chessboard
+
+ \mbox{\xskakgetgame{lastfen}},\\
+ \xskakgetgame{lastplayer},
+ \xskakgetgame{lastmovenr},
+ \xskakgetgame{lastmoveid}
+\end{LTXexample}
+
+
+\item[\textbackslash Xskak\meta{GameId}nextplayer]%
+   \index{game data >Xskaknextplayer=\textbackslash Xskak\meta{GameId}nextplayer}%
+   \index{Xskaknextplayer=\textbackslash Xskak\meta{GameId}nextplayer}%
+   «w» or «b». The player which will make the next move, set by
+   \cs{newchessgame}, by \cs{resumechessgame} and during parsing.
+   Identical to the color in {\texttt\textbackslash Xskak\meta{GameId}lastfen}.
+
+\item[\textbackslash Xskak\meta{GameId}nextmovenr]%
+   \index{game data >Xskaknextmovenr=\textbackslash Xskak\meta{GameId}nextmovenr}%
+   \index{Xskaknextmovenr=\textbackslash Xskak\meta{GameId}nextmovenr}%
+   The number of the next move, set during parsing. Identical to
+   fullmove in {\texttt\textbackslash Xskak\meta{GameId}lastfen}.
+
+\item[\textbackslash Xskak\meta{GameId}nextmoveid]%
+   \index{game data >Xskaknextmoveid=\textbackslash Xskak\meta{GameId}nextmoveid}%
+   \index{Xskaknextmoveid=\textbackslash Xskak\meta{GameId}nextmoveid}%
+   Combination of \key{nextmovenr} and \key{nextplayer}.
+
+\begin{LTXexample}[width=0.5\textwidth]
+ \newchessgame[id=show,
+               setfen=2K/k/7R,
+               moveid=10b]
+ \mainline{10... Ka8}
+
+ \chessboard
+
+ \xskakgetgame{nextplayer},
+ \xskakgetgame{nextmovenr},
+ \xskakgetgame{nextmoveid}
+\end{LTXexample}
+
+
+\item[\textbackslash Xskak\meta{GameId}diagramlist]%
+   \index{game data >Xskakdiagramlist=\textbackslash Xskak\meta{GameId}diagramlist}%
+   \index{Xskakdiagramlist=\textbackslash Xskak\meta{GameId}diagramlist}%
+    A comma separated list of moves (a combination of movenr and
+    player), (e.g. 3b,20w). Records the moves with an \$d or \$D
+    after the move. See section \ref{sec:diagrams}.
+
+
+\item[\textbackslash Xskak\meta{GameId}gameid]%
+    \index{game data >Xskakgameid=\textbackslash Xskak\meta{GameId}gameid}%
+    \index{Xskakgameid=\textbackslash Xskak\meta{GameId}gameid}%
+    This command holds the game identification (the value is equal to the value of \meta{GameId}).
+
+\begin{LTXexample}
+ \newchessgame[id=game\arabic{section}]
+ The id of the current game is \xskakgetgame{gameid}
+\end{LTXexample}
+
+
+\end{description}
+
+
+\subsubsection{Optional game information: PGN-infos}
+
+\DescribeMacro{\xskaknewpgninfo}%
+The following commands store various optional information which are
+normally stored in the so-called PGN-infos. You can set them in
+\cs{newchessgame} and retrieve them later. New PGN-infos can be
+defined with the \cs{xskaknewpgninfo}\oarg{default}\marg{name}. With
+the exception of  «result» all currently defined commands are empty
+by default.
+
+\begin{description}
+\item[\textbackslash Xskak\meta{GameId}result]%
+    \index{PGN-info data >Xskakresult=\textbackslash Xskak\meta{GameId}result}%
+    \index{Xskakresult=\textbackslash Xskak\meta{GameId}result}%
+      Default is \verb+*+, value should be 1-0, or 1/2-1/2, 0-1 or
+      something like that.
+
+\item[\textbackslash Xskak\meta{GameId}white]%
+    \index{PGN-info data >Xskakwhite=\textbackslash Xskak\meta{GameId}white}%
+    \index{Xskakwhite=\textbackslash Xskak\meta{GameId}white}%
+     The name of the white player.
+
+\item[\textbackslash Xskak\meta{GameId}black]%
+    \index{PGN-info data >Xskakblack=\textbackslash Xskak\meta{GameId}black}%
+    \index{Xskakblack=\textbackslash Xskak\meta{GameId}black}%
+     The name of the black player.
+
+
+\item[\textbackslash Xskak\meta{GameId}whiteelo]%
+    \index{PGN-info data >Xskakwhiteelo=\textbackslash Xskak\meta{GameId}whiteelo}%
+    \index{Xskakwhiteelo=\textbackslash Xskak\meta{GameId}whiteelo}%
+    The elo of the white player.
+
+\item[\textbackslash Xskak\meta{GameId}blackelo]%
+    \index{PGN-info data >Xskakblackelo=\textbackslash Xskak\meta{GameId}blackelo}%
+    \index{Xskakblackelo=\textbackslash Xskak\meta{GameId}blackelo}%
+    The elo of the black player.
+
+
+\item[\textbackslash Xskak\meta{GameId}site]%
+    \index{PGN-info data >Xskaksite=\textbackslash Xskak\meta{GameId}site}%
+    \index{Xskaksite=\textbackslash Xskak\meta{GameId}site}%
+   The site of the tournament.
+
+\item[\textbackslash Xskak\meta{GameId}event]%
+    \index{PGN-info data >Xskakevent=\textbackslash Xskak\meta{GameId}event}%
+    \index{Xskakevent=\textbackslash Xskak\meta{GameId}event}%
+The name of the tournament.
+
+
+
+\item[\textbackslash Xskak\meta{GameId}date]%
+    \index{PGN-info data >Xskakdate=\textbackslash Xskak\meta{GameId}date}%
+    \index{Xskakdate=\textbackslash Xskak\meta{GameId}date}%
+The date of the game.
+
+\item[\textbackslash Xskak\meta{GameId}round]%
+    \index{PGN-info data >Xskakround=\textbackslash Xskak\meta{GameId}round}%
+    \index{Xskakround=\textbackslash Xskak\meta{GameId}round}%
+The round of game.
+
+\end{description}
+
+\subsubsection{The move related data}\label{sec:movedata}
+
+The move data are stored during the parsing of a game with
+\cs{mainline} and/or \cs{hidemoves}. You can split the game in as
+much pieces as you want but {\bfseries you must start a game with
+\cs{newchessgame} and you must use the same game identification for
+each piece} if you don't want to end with broken games.
+
+All values depends on the parsing from \skaksty which in turn depends
+heavily on the correct input: \skaksty knows a bit about the position
+of the game (it needs it e.g. to find out where a piece came from)
+but doesn't analyze it thoroughly. The main work is done by analyzing
+the \emph{notation} e.g.  \skaksty will recognize a check by the
++-sign. Quite often \skaksty doesn't recognize illegal moves or wrong
+input syntax (e.g. \texttt{0-0} for casting instead the correct
+\texttt{O-O})  but fails some moves later or shows a wrong position:
+
+\begin{LTXexample}
+   \newchessgame
+   \mainline{1.d4 e5  2.Bc4}
+   \chessboard
+\end{LTXexample}
+
+\paragraph{Piece data}
+
+The following types store the piece which was moved and the piece
+that was perhaps captured. The variants differ in the storing of
+black pieces and pawns:
+
+\begin{description}
+\item[pgnpiece]
+    \index{Move data >pgnpiece}%
+    \index{pgnpiece (move data type)}%
+     K,Q,R,B or N. Is empty for pawn and
+     castling moves.
+
+\item[piecechar]
+    \index{Move data >piecechar}%
+    \index{piecechar (move data type)}%
+     K,Q,R,B,N or p. Is empty for castling.
+
+
+\item[piece]
+    \index{Move data >piece}%
+    \index{piece (move data type)}%
+     K,Q,R,B,N or P or k,q,r,b,n or p (for black). Is empty for castling.
+
+
+\item[pgnlostpiece]
+    \index{Move data >pgnlostpiece}%
+    \index{pgnlostpiece (move data type)}%
+    In case of a capture move: K,Q,R,B, or N.
+
+\item[lostpiecechar]
+    \index{Move data >lostpiecechar}%
+    \index{lostpiecechar (move data type)}%
+     In case of a capture move: K,Q,R,B,N or p, empty
+     else.
+
+
+\item[lostpiece]
+    \index{Move data >lostpiece}%
+    \index{lostpiece (move data type)}%
+     In case of a capture move it stores the lost piece as K,Q,R,B,N or P or
+     k,q,r,b,n or p.
+
+\end{description}
+
+
+\paragraph{Move data}
+
+\begin{description}
+\item[movefrom]
+    \index{Move data >movefrom}%
+    \index{movefrom (move data type)}%
+    The field were the piece came from. Two fields in case of castling moves e.g. «e1,h1».
+
+\item[pgnmovefrom]
+    \index{Move data >pgnmovefrom}%
+    \index{pgnmovefrom (move data type)}%
+    This contains the additional «movefrom» information in the PGN
+    for ambiguous moves or pawn captures.
+    E.g. In case of \wmove{exd5} the value is
+    «e», in case of \wmove{Nbd2} it is «b».
+
+\item[moveto]
+    \index{Move data >moveto}%
+    \index{moveto (move data type)}%
+     The field were the piece move to. Two fields in case of castling moves e.g. «g1,f1».
+
+\item[enpassant]
+    \index{Move data >enpassant}%
+    \index{enpassant (move data type)}%
+    Sets the boolean \texttt{xskakboolenpassant} to true if the move
+    was an enpassant capture.
+
+\item[enpassantsquare]
+    \index{Move data >enpassantsquare}%
+    \index{enpassantsquare (move data type)}%
+    A field, after e.g. e4 the value is e3. Indicates if the next
+    pawn move can be an enpassant capture.
+
+\begin{LTXexample}
+ \newchessgame[restorefen=example]
+ \mainline{1. a4 h5}
+ \chessboard[lastmoveid,
+             pgfstyle=border,
+             color=red,
+             markfield=\xskakget{enpassantsquare},
+             moveid=1w, color=blue,
+             markfield=\xskakget{enpassantsquare}]
+\end{LTXexample}
+
+\item[castling]
+    \index{Move data >castling}%
+    \index{castling (move data type)}%
+    Sets the boolean \texttt{xskakboolcastling}, is true for short
+    *and* long castling!
+
+
+\item[longcastling]
+    \index{Move data >longcastling}%
+    \index{longcastling (move data type)}%
+    Sets the boolean \texttt{xskakboollongcastling}.
+
+\item[capture]
+    \index{Move data >capture}%
+    \index{capture (move data type)}%
+    Sets the boolean \texttt{xskakboolcapture}.
+
+
+\item[promotion]
+    \index{Move data >promotion}%
+    \index{promotion (move data type)}%
+    Sets the boolean \texttt{xskakboolpromotion}.
+
+
+\item[promotionpiece]
+    \index{Move data >promotionpiece}%
+    \index{promotionpiece (move data type)}%
+    Q,R,B or N or q,r,b or n or empty.
+
+\item[promotionpiecechar]
+    \index{Move data >promotionpiecechar}%
+    \index{promotionpiecechar (move data type)}%
+    Q,R,B or N  or empty.
+
+\begin{LTXexample}
+ \newcommand\testpromotion{%
+   \xskakget{promotion}%
+   \ifthenelse{\boolean{xskakboolpromotion}}
+    {A pawn promoted to
+    \figsymbol{\xskakget{promotionpiecechar}}}
+    {No promotion in this move}}
+ \newchessgame[restorefen=example]
+ \mainline{1. c8=Q+ Ke7}
+
+ \xskakset{moveid=1w}
+ \testpromotion
+
+ \xskakset{moveid=1b}
+ \testpromotion
+\end{LTXexample}
+
+
+\end{description}
+
+\paragraph{Other data/combinations}
+
+\begin{description}
+\item[addpieces]
+    \index{Move data >addpieces}%
+    \index{addpieces (move data type)}%
+       contains the (list of) piece(s) that should be put on the
+       board.\\ E.g. \verb+{kg8,rf8}+ in case of black short castling.
+
+\item[clearfields]
+    \index{Move data >clearfields}%
+    \index{clearfields (move data type)}%
+       The list of fields that should be emptied on the board (equal
+       to the movefrom field with the exception of enpassant moves).
+
+\item[nextfen]
+    \index{Move data >nextfen}%
+    \index{nextfen (move data type)}%
+       The fen position \emph{after} the current move.
+
+\item[pastfen]
+    \index{Move data >pastfen}%
+    \index{pastfen (move data type)}%
+       The fen position \emph{before} the current move (identical to
+       the fen \emph{after} the previous move).
+
+\item[san]
+    \index{Move data >san}%
+    \index{san (move data type)}%
+      The  standard algebraic notation of the move. It use chess
+      commands: E.g.
+      \\\verb+\textsymfigsymbol{R}a2+ for \textsymfigsymbol{R}a2
+      \\\verb+e\capturesymbol d5+ for e\capturesymbol d5,
+      \\\verb+\castlingchar\castlinghyphen\castlingchar+ for
+      \castlingchar\castlinghyphen\castlingchar\\
+      It contains also the signs for chess and mate, but not the
+      comments.
+
+\item[lan]
+    \index{Move data >lan}%
+    \index{lan (move data type)}%
+    Long algebraic notation of the move, similar to \texttt{san}.
+
+\medskip
+\begin{LTXexample}[varwidth=false,width=0.3\textwidth]
+ \newchessgame
+ \mainline{1.f3 e5 2. g4?? Qh4+#!}
+
+ \xskakset{moveid=2w}%
+ \xskakget{san}, \xskakget{lan}
+
+ \xskakset{moveid=2b}%
+  \xskakget{san}, \xskakget{lan}
+\end{LTXexample}
+
+
+
+\item[opennr]
+    \index{Move data >opennr}%
+    \index{opennr (move data type)}%
+    This contains the code to print the number like \skaksty would do
+    it if you start or continue a game  with this move. The style must be set independantly either with
+    a \cs{styleX} of \packagename{skak} or -- if you use the new interface of
+    \packagename{xskak} to set a style -- with \cs{xskakset} and \cs{mainlinestyle} or \cs{variationstyle}.
+
+\medskip
+\begin{LTXexample}[varwidth=false,width=0.3\textwidth]
+ \newchessgame
+ \mainline{1.e4 e5}
+
+ \xskakset{moveid=1w}%
+ \xskakget{opennr}\xskakget{lan},
+ {\styleB\mainlinestyle
+  \xskakget{opennr}\xskakget{lan}}
+
+
+ \xskakset{moveid=1b}%
+ \xskakget{opennr}\xskakget{lan}
+ \xskakset{style=styleA,level=1}
+ {\mainlinestyle
+  \xskakget{opennr}\xskakget{lan}}
+
+ \xskakset{style=UF}%return to my style
+\end{LTXexample}
+
+\item[comments]%
+    \index{Move data >comments}%
+    \index{comments (move data type)}%
+   contains the short comments after a move (!,? \withattack{} etc)
+
+\medskip
+\begin{LTXexample}[varwidth=false,width=0.3\textwidth]
+ \newchessgame
+ \mainline{1.f3 e5 2. g4?? Qh4+#!}
+
+ \xskakset{moveid=2w}%
+ \xskakget{comments}
+
+ \xskakset{moveid=2b}%
+ \xskakget{comments}
+\end{LTXexample}
+
+
+\item[nag]
+    \index{Move data >nag}%
+    \index{nag (move data type)}
+   NAG's and comments inputed with \cs{xskakcomment}.
+
+\begin{LTXexample}[varwidth=false,width=0.3\textwidth]
+ \newchessgame
+ \mainline{1.f3 e5 2. g4
+          $4 \xskakcomment{ Why this? } Qh4+#!}
+
+ \xskakset{moveid=2w}%
+ \xskakget{nag}
+\end{LTXexample}
+
+\end{description}
+
+\subsection{Exporting the games}
+
+\DescribeMacro{\xskakexportgames}%
+With \cs{xskakexportgames}\keyoarg{} you can export games to a file.
+As default the command exports the game data of the game with the
+default \meta{GameId} to the file \texttt{xskakgames.xsk}\footnote{I
+didn't find any other application that use this extension. So I think
+it is quite safe.}.
+
+The command accept the following keys:
+\begin{description}
+\item[\key{file=}\meta{string}]
+   \index{xskakexportgames=\verb!*+\xskakexportgames+>file (key)}%
+   \index{file (\texttt{\textbackslash xskakexportgames} key)}
+   This changes the name of the file. The extension can not be changed.
+\item[\key{games=\{}\meta{comma separated list of games}\texttt{\}}]
+   \index{xskakexportgames=\verb!*+\xskakexportgames+>games (key)}%
+   \index{games (\texttt{\textbackslash xskakexportgames} key)}%
+   With this key you can chose the games that should be exported.
+\end{description}
+
+
+You can then input the games in other document and use there the game
+data without have to do all the parsing with \cs{mainline} again
+(which can be quite slow). The export file is also quite handy to
+debug the game parsing and saving.
+
+As an example I exported  in another document the following two games
+which I will use later in this documentation:
+
+\begin{lstlisting}
+ \newchessgame[id=export,white=Deep Blue, black=Kasparov,result=1-0]
+ \mainline{1.e4 c6 2.d4 d5 3.Nc3 dxe4 4.Nxe4 Nd7 5.Ng5 Ngf6 6.Bd3 e6
+ 7.N1f3 h6 8.Nxe6 Qe7 9.O-O fxe6 10.Bg6+ Kd8 \xskakcomment{Kasparov
+ schüttelt kurz den Kopf} 11.Bf4 b5 12.a4 Bb7 13.Re1 Nd5 14.Bg3 Kc8
+ 15.axb5 cxb5 16.Qd3 Bc6 17.Bf5 exf5 18.Rxe7 Bxe7 19.c4}
+
+ \newchessgame[white=none,black=none,id=exportb]
+ \mainline{1. e4 e5}
+
+ \xskakexportgames[games={export,exportb}]
+\end{lstlisting}
+
+\DescribeMacro{\xskakendgamedata}%
+\DescribeMacro{\xskakcurrentgameid}%
+The export consists more or less of a long list of definitions with
+one notable exception: At the end of each game there is the command
+\cs{xskakendgamedata}. As a default the command does nothing but if
+you redefine it e.g. to \cs{printchessgame} (see section
+\ref{sec:print}), it can be used to print all games during the input.
+\cs{xskakcurrentgameid} holds the \meta{GameId} of the previous game.
+
+\begin{LTXexample}
+ \renewcommand\xskakendgamedata
+  {\xskakset{id=\xskakcurrentgameid}%
+   \xskakgetgame{white}--\xskakgetgame{black}:
+   \printchessgame[style=styleB,level=1]
+  \par\bigskip}
+ \input{xskakgames.xsk}
+\end{LTXexample}
+
+
+
+\subsection{The inner technique: how the data are stored}
+
+The game related data are stored in commands with names of
+the following structure:\\[0.5ex]
+%
+\indent{\ttfamily Xskak\meta{GameId}\meta{type of Information}}\\[0.5ex]
+%
+If \meta{GameId} is a simple string of characters you can use the
+command by putting a backslash before the name, in other case you
+will have to use \cs{csname}\ldots\cs{endcsname}.
+
+The move related data are stored in commands with names that
+have the following structure:\\[0.5ex]
+{\ttfamily Xskak.\meta{GameId}.\meta{movenr}.\meta{player}.\meta{type
+of Information}}\\[0.5ex]
+As the names contain points and a number it is not possible to
+execute the commands  by putting a backslash before the name. If you
+want to use them you will have to surround the name by
+\cs{csname}\ldots\cs{endcsname}
+ -- something that probably will not be necessary in normal cases as
+there are  user commands that allows «normal» access.
+
+During storing the data \meta{movenr} and \meta{player} are taken
+from the current move as processed by \skaksty, that is
+\verb+\mainline{15... Nf3}+ will store the data in \\{\ttfamily
+Xskak.\meta{GameId}.15.b.\meta{type of Information}}. \\Renumbering
+the moves during storing is not possible\footnote{But it would be
+probably not difficult to implement. So if you need it badly, sent me
+a feature request.}.
+
+Example \ref{ex:internal} on page \pageref{ex:internal} shows an
+example that use the internal commands. As you can see, the
+\cs{csname}--\cs{endcsname}-input is quite powerful: You can
+construct a command with the help of other (expandable) commands or
+use the value of counters.
+
+\minisec{Warning!} \verb+\csname whatever\endcsname+ doesn't give an
+error if the command isn't defined. It simply defines \cs{whatever}
+as \cs{relax} and then executes it. So it is easy to overlook typing
+errors -- and then to wonder why one doesn't get the expected output.
+
+
+\begin{LTXexample}[pos=t,
+                   width=\textwidth,
+                   float,caption=Using the internal commands,
+                   label=ex:internal,
+                   language=TeX,
+                   texcs={mainline,figsymbol,xskakgameAlastmovenr,
+                          xskakgameinitmovenr,xskakgameinitmovenr,
+                          newchessgame,xskakgameinitmovenr,chessboard},
+                   texcsstyle=*\color{blue},
+                   texcs={[2]{ifthenelse,boolean,csname,endcsname,the,value,numexpr,relax}},
+                   texcsstyle={*[2]{\color{red}}}]
+ \begin{multicols}{2}
+ \minisec{Game 1}\newchessgame[id=gameA]%
+ \mainline{1. e4 e5 2. Nf3 Nc6 3. Bb5 Nf6 4. O-O Nxe4 5.Bxc6 bxc6}
+
+ \minisec{Game 2}\newchessgame[id=game,restorefen=example,moveid=15w]%
+ \mainline{15. c8=Q+ Ke7 16. Rd1}
+
+ \minisec{Comments}\setcounter{enumi}{1}%
+ In the first game, white moved at first a
+ \figsymbol{\csname Xskak.gameA.\the\value{enumi}.w.piecechar\endcsname},
+ then a \figsymbol{%
+  \csname Xskak.gameA.\the\numexpr\the\value{enumi}+1\relax.w.piecechar\endcsname}
+ and a \figsymbol{%
+  \csname Xskak.gameA.\the\numexpr\the\value{enumi}+2\relax.w.piecechar\endcsname}.
+ In his last move black took a
+ \figsymbol{\csname Xskak.gameA.\XskakgameAlastmovenr.b.lostpiecechar\endcsname},
+ white took a \figsymbol{\csname
+ Xskak.gameA.5.w.lostpiecechar\endcsname}.
+
+ In the second game the second move of white was
+ \figsymbol{%
+  \csname Xskak.game.\the\numexpr \Xskakgameinitmovenr +1\relax.w.piece\endcsname}%
+ \csname Xskak.game.16.w.movefrom\endcsname--%
+ \csname Xskak.game.16.w.moveto\endcsname.
+
+ The position in the first game after the third move of black was:
+
+ \chessboard[tinyboard, setfen=\csname Xskak.gameA.3.b.nextfen\endcsname]
+ The fourth move of white was\csname
+ Xskak.gameA.4.w.castling\endcsname
+ \ifthenelse{\boolean{xskakboolcastling}}{}{not} a castling move.
+ \end{multicols}
+\end{LTXexample}
+
+\clearpage
+
+
+\section{Retrieving the stored information}
+
+\subsection{Setting the variables}
+
+\DescribeMacro{\xskakset}%
+It should be clear that to retrieve the information you must tell
+\packagename{xskak} the game and the move for which you want to get
+data. This is done with \cs{xskakset}\keymarg{} which will set the
+variables \meta{GameId} and/or \meta{MoveId} to the values listed in
+the \keylist.
+
+Some possible\footnote{More keys are described later.} keys are:
+\begin{description}
+\item[\key{id=}\meta{name}]
+    \index{xskakset=\verb!*+\xskakset+>id (key)}%
+    \index{id (\texttt{\textbackslash xskakset} key)}%
+The key will set/change globally the active game identification, the
+\meta{GameId}. This will also affect the storing of the following
+moves! So if you change the \meta{GameId} in the middle of the
+parsing of a game, don't forget to reset it to the old value before
+continuing!
+
+
+\item[\key{movenr=}\meta{number}, \key{player=}\meta{«w» or «b»},
+\key{moveid=}\meta{number + «w» or «b»}]
+    \index{xskakset=\verb!*+\xskakset+>movenr (key)}%
+    \index{movenr (\texttt{\textbackslash xskakset} key)}%
+    \index{xskakset=\verb!*+\xskakset+>player (key)}%
+    \index{player (\texttt{\textbackslash xskakset} key)}%
+    \index{xskakset=\verb!*+\xskakset+>moveid (key)}%
+    \index{moveid (\texttt{\textbackslash xskakset} key)}%
+    The keys will set the move number and the player. The values are global but
+    the values of \key{movenr} and \key{player} are not expanded
+    directly while the value of \key{moveid} is. The keys change only
+    the internal commands that are used to retrieve information, the
+    move counter and the boolean of \cs{mainline} are not affected by this keys.
+
+\item[\key{stepmoveid=}\meta{number}]
+    \index{xskakset=\verb!*+\xskakset+>stepmoveid (key)}%
+    \index{stepmoveid (\texttt{\textbackslash xskakset} key)}%
+\key{stepmoveid} picks up the current value of the move variables of
+\packagename{xskak} and «adds» the given number of halfmoves. When no
+number is given the value 1 is used and this gives the next move.
+E.g. if the current move is \texttt{10w} and you use
+\texttt{stepmoveid=3} then you get \texttt{11b}. Negative numbers can
+be used, if this results in a move number smaller than 1, a warning
+is given but not an error: This gives you the possibility e.g. in
+loops to handle the case yourself.
+
+
+
+\item[\key{lastmoveid=}\meta{GameId}]
+    \index{xskakset=\verb!*+\xskakset+>lastmoveid (key)}%
+    \index{lastmoveid (\texttt{\textbackslash xskakset} key)}%
+    This key sets the \packagename{xskak} move identification
+    commands
+    to the number/color of the last move
+    of the game \meta{GameId}. \meta{GameId} is optional.
+    \texttt{lastmoveid=A} ist equivalent to
+    \texttt{id=A,lastmoveid}.
+
+
+
+
+\item[\key{tag=}\meta{name}, \key{ref\ldots=}\meta{name}]
+     \index{xskakset=\verb!*+\xskakset+>tag (key)}%
+     \index{tag (\texttt{\textbackslash xskakset} key)}%
+     \index{xskakset=\verb!*+\xskakset+>refid (key)}%
+     \index{refid (\texttt{\textbackslash xskakset} key)}%
+     \index{xskakset=\verb!*+\xskakset+>refnextmoveid(key)}%
+     \index{refnextmoveid (\texttt{\textbackslash xskakset} key)}%
+     \index{xskakset=\verb!*+\xskakset+>refpastmoveid(key)}%
+     \index{refpastmoveid (\texttt{\textbackslash xskakset} key)}%
+     \index{xskakset=\verb!*+\xskakset+>refpastmovenr (key)}%
+     \index{refpastmovenr (\texttt{\textbackslash xskakset} key)}%
+     \index{xskakset=\verb!*+\xskakset+>refpastplayer (key)}%
+     \index{refpastplayer (\texttt{\textbackslash xskakset} key)}%
+     \index{xskakset=\verb!*+\xskakset+>refnextmovenr (key)}%
+     \index{refnextmovenr (\texttt{\textbackslash xskakset} key)}%
+     \index{xskakset=\verb!*+\xskakset+>refnextplayer (key)}%
+     \index{refnextplayer (\texttt{\textbackslash xskakset} key)}%
+     \index{xskakset=\verb!*+\xskakset+>refpast (key)}%
+     \index{refpast (\texttt{\textbackslash xskakset} key)}%
+     \index{xskakset=\verb!*+\xskakset+>refnext (key)}%
+     \index{refnext (\texttt{\textbackslash xskakset} key)}%
+
+
+\key{tag} saves the current values of \meta{GameId} and the move in
+internal commands. They can then later be retrieved by the keys of
+type \key{ref}.
+
+For more information on the labeling and referencing see section
+\ref{sec:labeling}.
+
+\item[\key{defaultid=}\meta{name}]
+     \index{xskakset=\verb!*+\xskakset+>defaultid (key)}%
+     \index{defaultid (\texttt{\textbackslash xskakset} key)}%
+     With this key you can change the default game identification.
+     The change is global.
+
+\begin{LTXexample}
+ \setcounter{gamecounter}{4}
+ \xskakset{defaultid=game\Alph{gamecounter}}
+
+ \newchessgame[white=John]
+ \mainline{1. e4 e5}
+
+ \stepcounter{gamecounter}
+ \newchessgame[white=Jack]
+ \mainline{1. d4 d5}
+
+ The white players were \XskakgameDwhite\ and \XskakgameEwhite.
+\end{LTXexample}
+
+
+\item[\key{defaultmovenr=}\meta{number},
+      \key{defaultplayer=}\meta{«w» or «b»},]
+\item[\key{defaultmoveid=}\meta{number}\meta{«w» or «b»}]
+    \index{xskakset=\verb!*+\xskakset+>defaultmoveid (key)}%
+    \index{defaultmoveid (\texttt{\textbackslash xskakset} key)}%
+    \index{xskakset=\verb!*+\xskakset+>defaultmovenr (key)}%
+    \index{defaultmovenr (\texttt{\textbackslash xskakset} key)}%
+    \index{xskakset=\verb!*+\xskakset+>defaultplayer (key)}%
+    \index{defaultplayer (\texttt{\textbackslash xskakset} key)}%
+     With this keys you can change the default start move for the
+     subsequent games. The change is global.
+
+\item[\key{defaultfen=}\meta{FEN}]
+    \index{xskakset=\verb!*+\xskakset+>defaultfen (key)}%
+    \index{defaultfen (\texttt{\textbackslash xskakset} key)}%
+    As a default \cs{newchessgame} sets the start position to a new
+    game. You can change this default with this key. The change is
+    global.
+
+\end{description}
+
+
+
+\subsection{Getting the game information}
+
+\DescribeMacro{\xskakgetgame}%
+With \cs{xskakgetgame}\marg{type} you can retrieve game data
+for the currently active \meta{GameId} (which can be set/changed with
+the commands \cs{newchessgame}, \cs{resumechessgame} and
+\cs{xskakset}).
+
+\begin{LTXexample}[width=0.5\textwidth]
+ \newchessgame[id=A,white=John White,
+               black=Jack Black,
+               result=1--0]
+ \minisec{\xskakgetgame{white}--
+          \xskakgetgame{black}}
+ \mainline{1.e4 e5  2.Bc4 Nc6 3. Qh5 Nf6 4.Qxf7#}
+ \mbox{\xskakgetgame{result}}
+
+
+ \newchessgame[id=B,
+               white=Harry Red,
+               black=Tom Green,
+               result=0--1,
+               setwhite={kd1},
+               addblack={kd3,rc5}]
+ \chessboard[setfen={\xskakgetgame{initfen}}]
+ \minisec{\xskakgetgame{white} --
+          \xskakgetgame{black}}
+ \mainline{1. Ke1 Rf5 2. Kd1 Rf1#} \mbox{\xskakgetgame{result}}
+\end{LTXexample}
+
+It is also possible to get the stored information by simply calling
+the command\\ \cs{xskak}\meta{gameid}\meta{type} (if \meta{gameid}
+consists of letters).
+
+\begin{LTXexample}[width=0.5\textwidth]
+ \newchessgame[id=A,white=John White,
+               black=Jack Black, result=1--0]
+ \minisec{\XskakAwhite\ -- \XskakAblack}
+ \mainline{1.e4 e5  2.Bc4 Nc6 3. Qh5 Nf6 4.Qxf7#}
+ \mbox{\XskakAresult}
+ \newchessgame[id=B,white=Harry Red,
+               black=Tom Green, result=0--1]
+ \minisec{\XskakBwhite\ -- \XskakBblack}
+ \mainline{1.f3 e5  2.g4 Qh4#}
+ \mbox{\XskakBresult}
+
+ \minisec{List of Results}
+ \begin{tabular}[t]{l@{\,--\,}lr}
+ \XskakAwhite&\XskakAblack&\XskakAresult\\
+ \XskakBwhite&\XskakBblack&\XskakBresult
+ \end{tabular}
+
+ \minisec{Final positions}
+ \chessboard[tinyboard,lastmoveid=A,
+          setfen=\xskakget{nextfen}]
+ \chessboard[tinyboard,lastmoveid=B,
+          setfen=\xskakget{nextfen}]
+\end{LTXexample}
+
+%If \meta{gameid} contains non-letter chars (e.g. a number) you must
+%use\\
+%\cs{csname}\texttt{~xskak}\meta{gameid}\meta{type}\cs{endcsname}.
+%
+%If the \meta{gameid} or the \meta{type} are stored in commands you
+%can use this commands in \cs{csname}\texttt{\ldots}\cs{endcsname}:
+%\cs{csname}\texttt{~xskak}\cs{mygameid}\cs{mygametype}\cs{endcsname}
+
+
+
+\subsection{Getting the move information}
+
+Move data are bit more difficult as they depend on more
+variables.
+
+At first, you can naturally use  a
+\cs{csname}\texttt{\ldots}\cs{endcsname}:\\
+\cs{csname}\texttt{~xskak}.\meta{gameid}.\meta{movenr}.\meta{player}.\meta{type}\cs{endcsname}.
+
+
+But normally you should use a
+\cs{xskakset}/\cs{xskakget}-combination%
+\footnote{I had to implement the retrieving as a two-step-method to
+ be able to use the retrieving command in the \keylist of
+\cs{chessboard}. As the values are expanded during
+ the processing complicated commands which use internally \cs{def}
+ and \cs{setkeys} can not be used as values.}.
+
+
+\DescribeMacro{\xskakget}%
+\cs{xskakget}\marg{type} will pick up the current values of the
+variables for the \meta{GameId} and the \meta{MoveId} and then
+retrieve/print the content of  type \meta{type}.
+
+    \index{Move data >movenr (virtual type)}%
+    \index{movenr (virtual move data type)}%
+    \index{Move data >moveid (virtual type)}%
+    \index{moveid (virtual move data type)}%
+    \index{Move data >player (virtual type)}%
+    \index{player (virtual move data type)}%
+\meta{type} can be any of the types described in \ref{sec:movedata}
+and additionally the three virtual types \textsf{movenr},
+\textsf{player} and \textsf{moveid} can be used which will output the
+current move identification. This allows easier retrieving of the
+current value of the internal variables e.g. in loops and tests.
+
+\textbf{Attention:} The move variables are not changed by the parsing
+command of \skaksty. And they are not stored like the other types --
+you can't retrieve them with a
+\cs{csname}\texttt{\ldots}\cs{endcsname} construction.
+
+\begin{LTXexample}
+\newchessgame[moveid=10b]
+\mainline{10... e5}
+
+The game started with move \xskakget{moveid}.
+
+\xskakset{moveid=5w}
+Now the moveid has value \xskakget{movenr}\xskakget{player}.
+\end{LTXexample}
+
+
+
+\subsection{Using the data with \texttt{\textbackslash chessboard}}
+
+The move data can naturally be used with \cs{chessboard} e.g. to
+highlight the last move with an arrow. The  \meta{MoveId} you want to
+refer to can be set before the board with \cs{xskakset} but if this
+were the sole possibility this would mean that you couldn't get data
+from other moves. So I defined a bunch of new keys for
+\cs{chessboard} (and changed some existing keys) which allows to
+retrieve during building the board all available move datas. The most
+important ones are keys that tells \cs{chessboard} the \meta{GameId}
+and the \meta{MoveId} for which you want to retrieve datas:
+
+\begin{description}
+\item[\key{id=}\meta{name}]
+    \index{chessboard=\verb!*+\chessboard+>id (key)}%
+    \index{movenr (\texttt{\textbackslash chessboard} key)}%
+    Like the other \key{id}-keys this one sets the variable  that
+    identifies the game. But setting this key will \emph{not} affect
+    the value of the game identification outside the board, any
+    change is local to the board.
+
+\textbf{Attention:} Setting this key will \emph{not} change the
+default position shown by \cs{chessboard}. This is always the
+«current» game.
+
+\item[\key{movenr=}\meta{number}, \key{player=}\meta{«w» or «b»}, \key{moveid=}\meta{number + «w» or «b»}]
+    \index{chessboard=\verb!*+\chessboard+>movenr (key)}%
+    \index{movenr (\texttt{\textbackslash chessboard} key)}%
+    \index{chessboard=\verb!*+\chessboard+>player (key)}%
+    \index{player (\texttt{\textbackslash chessboard} key)}%
+    \index{chessboard=\verb!*+\chessboard+>moveid (key)}%
+    \index{moveid (\texttt{\textbackslash chessboard} key)}%
+    This keys stores the number and player for which you want to retrieve
+    move related information. Again any setting is local to the board.
+
+
+
+\item[\key{stepmoveid=}\meta{number}]
+    \index{xskakset=\verb!*+\chessboard+>stepmoveid (key)}%
+    \index{stepmoveid (\texttt{\textbackslash chessboard} key)}%
+Like the similar key of \cs{xskakset} \key{stepmoveid} picks up the
+current value of the move variables of \packagename{xskak} and «adds»
+the given number of halfmoves. But again when you use the key in the
+argument of \cs{chessboard} the change is local to the board.
+
+\textbf{Attention:} If you set the \meta{MoveId} with the above keys
+to a value «outside» the game and then try to retrieve a data you
+will probably get horrible errors.
+
+
+\item[\key{lastmoveid=}\meta{gameid}]
+   \index{chessboard=\verb!*+\chessboard+>lastmoveid (key)}%
+   \index{lastmoveid (\texttt{\textbackslash chessboard} key)}
+The usual case is probably that you want to use the (currently) last
+move of a game. This can be done with this key. The (optional) value
+lets you specify a game identification. \texttt{lastmoveid=A} ist
+equivalent to \texttt{id=A,lastmoveid}. Again the setting is local to
+the board.
+
+\end{description}
+
+    \index{xskakget=\verb!*+\xskakget+ (with \texttt{\textbackslash chessboard})}%
+After you have set the move variables, you can use the command
+\cs{xskakget}\marg{type} described above used without
+problems\footnote{I hope but I haven't tested any possible usage.}
+inside \cs{chessboard} as long as the value expands to something the
+keys can handle (\key{markmove} e.g. will not like it if you ask it
+to process a fen).
+
+\begin{LTXexample}[width=0.4\textwidth]
+ \newchessgame[id=A,white=John White,
+               black=Jack Black, result=1--0]
+ \mainline{1.e4 e5  2.Bc4 Nc6 3. Qh5 Nf6 4.Qxf7#}
+
+ \newchessgame % a game between A and the board
+ \mainline{1.e4}
+
+ \setchessboard{shortenend=5pt,color=red}%
+ \chessboard[lastmoveid=A,setfen=\xskakget{nextfen},
+  pgfstyle=border,color=red,
+  markfields={\xskakget{moveto},\xskakget{movefrom}},
+  pgfstyle=straightmove,
+  markmove=\xskakget{movefrom}-\xskakget{moveto}]
+\end{LTXexample}
+
+
+\begin{LTXexample}[width=0.4\textwidth,escapechar=/]
+ \newchessgame[id=A]
+ \mainline{1.e4 e5  2.Bc4 Nc6 3. Qh5 Nf6 4.Qxf7#}
+
+ \xskakget{moveid}% to show /\meta{MoveId} is still 1w/
+
+ \setchessboard{shortenend=5pt,color=red}%
+ \chessboard[lastmoveid=A,setfen=\xskakget{nextfen},
+  moveid=1w,
+  pgfstyle=straightmove,
+  markmove=\xskakget{movefrom}-\xskakget{moveto},
+  stepmoveid=2,color=green,
+  markmove=\xskakget{movefrom}-\xskakget{moveto},
+  stepmoveid=2,color=blue,
+  markmove=\xskakget{movefrom}-\xskakget{moveto},
+  stepmoveid=2,color=yellow,
+  markmove=\xskakget{movefrom}-\xskakget{moveto}]
+
+\xskakget{moveid}% to show that /\meta{MoveId} is again 1w/
+\end{LTXexample}
+
+
+\subsection{Labeling a game}\label{sec:labeling}
+
+It is a bit tedious to have to remember the number and the color of
+the moves when you want to start or to continue a game, or for which
+you want to draw a diagram or retrieve another move information. So
+there is a sort of labeling system. In difference to the labeling in
+normal \LaTeX\ it doesn't write the values to auxiliary files. That
+means that you can't reference labels which come later in the
+document (at my opinion this would lead to chaos anyway).
+
+
+
+To set a label you use the command \cs{xskakset} with the key
+\key{tag}\footnote{The name «label» is used by \cs{chessboard} to set
+the labels of the boards.}.%
+   \index{xskakset=\verb!*+\xskakset+>tag (key)}%
+   \index{tag (\texttt{\textbackslash xskakset} key)}
+It saves the current value of the move counter (the
+\packagename{skak} counter!), the value of the (\packagename{skak}!)
+boolean that holds the player and the \meta{GameId}. If you haven't
+started any game yet (more precisely: if the move counter has value
+0) then  \xskak will issue a warning and do nothing.
+
+You can set the tag between two \cs{mainline} (or \cs{hidemoves})
+commands, but it works also if you put them directly in the argument
+of \cs{mainline}:
+
+\begin{LTXexample}
+ \newchessgame%
+ \mainline{1. e4 e5\xskakset{tag=A}
+           2. Nf3\xskakset{tag=B} Nc6
+           3. Bb5 Nf6
+           4. O-O Nxe4
+           5.Bxc6 bxc6}
+
+\end{LTXexample}
+
+
+The saved values can be retrieved with various keys of type \key{ref}
+(e.g. \key{refpastmoveid}, \key{refnextplayer}), or by the command
+\cs{xskakget}.
+
+The label is set in most cases between two moves. There probably will
+be cases when you need the \meta{MoveId} of the move \emph{before}
+the tag e.g. to show the position or to comment on the last move, and
+there will be cases when you will need the \meta{MoveId} of the move
+\emph{after} the tag e.g. to continue the game. So there are ref-keys
+for both cases.
+
+\subsubsection{Retrieving the tagged values with \texttt{\textbackslash
+xskakget}}
+
+Retrieving the \meta{GameId} and/or \meta{MoveId} values stored by a
+\key{tag} is again a more-than-one-step procedure: At first you must
+tell \packagename{xskak} the tag name you want to use, and then use a
+\cs{xskakget}\marg{list of ref types}, where \meta{ref type} is one
+of the following keywords: {\ttfamily refid, refpastmoveid,
+refnextmoveid, refpastmovenr, refnextmovenr, refpastplayer,
+refnextplayer}.
+
+
+    \index{resumechessgame=\verb!*+\resumechessgame+>reftag (key)}%
+    \index{reftag (\texttt{\textbackslash resumechessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>reftag (key)}%
+    \index{reftag (\texttt{\textbackslash newchessgame} key)}%
+    \index{xskakset=\verb!*+\xskakset+>reftag (key)}%
+    \index{reftag (\texttt{\textbackslash xskakset} key)}%
+    \index{xskakloop=\verb!*+\xskakloop+>reftag (key)}%
+    \index{reftag (\texttt{\textbackslash xskakloop} key)}%
+    \index{printchessgame=\verb!*+\xskakloop+>reftag (key)}%
+    \index{reftag (\texttt{\textbackslash printchessgame} key)}%
+    \index{chessboard=\verb!*+\chessboard+>reftag (key)}%
+    \index{reftag (\texttt{\textbackslash chessboard} key)}%
+Setting the tag name is done with the key \key{reftag}, which you can
+use with all commands that accept the key \key{id}. If you use the
+key in the optional argument of \cs{chessboard} it will change the
+tag name locally for the board. In all other cases the tag name is
+set globally.
+
+\begin{LTXexample}[escapechar=/]
+ \newchessgame[id=new] % to set a new id
+ \chessboard[
+   reftag=B,%from previous example
+   id=\xskakget{refid},
+    %retrieves and sets the /\meta{Gameid}/ from tag B
+   moveid=\xskakget{refnextmoveid},
+    %retrieves and sets the /\meta{Moveid}/ from tag B
+   setfen=\xskakget{pastfen}]
+\end{LTXexample}
+
+
+\subsubsection{The \key{ref}-keys}
+
+As the more-step-procedure to use the tags is a bit longuish there
+exist keys that shorten the procedure. This keys too work in the
+arguments of all commands that can also handle the correspondant keys
+\key{id}, \key{moveid} etc. The effect will be identical to setting
+the values directly: Keys used in the optional argument of
+\cs{chessboard} will set their values only local to the board, in the
+other cases the values are set globally.
+
+\begin{description}
+\item[\key{refid=}\meta{tag}]
+    \index{resumechessgame=\verb!*+\resumechessgame+>refid (key)}%
+    \index{refid (\texttt{\textbackslash resumechessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>refid (key)}%
+    \index{refid (\texttt{\textbackslash newchessgame} key)}%
+    \index{xskakset=\verb!*+\xskakset+>refid (key)}%
+    \index{refid (\texttt{\textbackslash xskakset} key)}%
+    \index{xskakloop=\verb!*+\xskakloop+>refid (key)}%
+    \index{refid (\texttt{\textbackslash xskakloop} key)}%
+    \index{chessboard=\verb!*+\chessboard+>refid (key)}%
+    \index{refid (\texttt{\textbackslash chessboard} key)}%
+
+This key will set the \meta{GameId} to the value stored in the tag.
+It is a shortcut for\\
+\key{reftag=}\meta{tag},\key{id=}\cs{xskakget}verb+{refid}+
+
+
+\item[\key{refpastmoveid=}\meta{tag}, \key{refpastmovenr=}\meta{tag}, \key{refpastplayer=}\meta{tag} ]
+    \index{resumechessgame=\verb!*+\resumechessgame+>refpastmoveid (key)}%
+    \index{refpastmoveid (\texttt{\textbackslash resumechessgame} key)}%
+    \index{resumechessgame=\verb!*+\resumechessgame+>refpastmovenr (key)}%
+    \index{refpastmovenr (\texttt{\textbackslash resumechessgame} key)}%
+    \index{resumechessgame=\verb!*+\resumechessgame+>refpastplayer (key)}%
+    \index{refpastplayer (\texttt{\textbackslash resumechessgame} key)}%
+  %
+    \index{newchessgame=\verb!*+\newchessgame+>refpastmovenr (key)}%
+    \index{refpastmovenr (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>refpastmoveid (key)}%
+    \index{refpastmoveid (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>refpastplayer (key)}%
+    \index{refpastplayer (\texttt{\textbackslash newchessgame} key)}%
+    %
+    \index{xskakset=\verb!*+\xskakset+>refpastmoveid (key)}%
+    \index{refpastmoveid (\texttt{\textbackslash xskakset} key)}%
+    \index{xskakset=\verb!*+\xskakset+>refpastmovenr (key)}%
+    \index{refpastmovenr (\texttt{\textbackslash xskakset} key)}%
+    \index{xskakset=\verb!*+\xskakset+>refpastplayer (key)}%
+    \index{refpastplayer (\texttt{\textbackslash xskakset} key)}%
+    %
+    \index{chessboard=\verb!*+\chessboard+>refpastmoveid (key)}%
+    \index{refpastmoveid (\texttt{\textbackslash chessboard} key)}%
+    \index{chessboard=\verb!*+\chessboard+>refpastmovenr (key)}%
+    \index{refpastmovenr (\texttt{\textbackslash chessboard} key)}%
+    \index{chessboard=\verb!*+\chessboard+>refpastplayer (key)}%
+    \index{refpastplayer (\texttt{\textbackslash chessboard} key)}%
+
+
+This keys will set the respective move information to the value of
+the move before the tag. If the tag is before the move 1w, then the
+value 0b is used.
+
+\item[\key{refnextmoveid=}\meta{tag}, \key{refnextmovenr=}\meta{tag}, \key{refnextplayer=}\meta{tag} ]
+    \index{resumechessgame=\verb!*+\resumechessgame+>refnextmoveid (key)}%
+    \index{refnextmoveid (\texttt{\textbackslash resumechessgame} key)}%
+    \index{resumechessgame=\verb!*+\resumechessgame+>refnextmovenr (key)}%
+    \index{refnextmovenr (\texttt{\textbackslash resumechessgame} key)}%
+    \index{resumechessgame=\verb!*+\resumechessgame+>refnextplayer (key)}%
+    \index{refnextplayer (\texttt{\textbackslash resumechessgame} key)}%
+  %
+    \index{newchessgame=\verb!*+\newchessgame+>refnextmovenr (key)}%
+    \index{refnextmovenr (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>refnextmoveid (key)}%
+    \index{refnextmoveid (\texttt{\textbackslash newchessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>refnextplayer (key)}%
+    \index{refnextplayer (\texttt{\textbackslash newchessgame} key)}%
+    %
+    \index{xskakset=\verb!*+\xskakset+>refnextmoveid (key)}%
+    \index{refnextmoveid (\texttt{\textbackslash xskakset} key)}%
+    \index{xskakset=\verb!*+\xskakset+>refnextmovenr (key)}%
+    \index{refnextmovenr (\texttt{\textbackslash xskakset} key)}%
+    \index{xskakset=\verb!*+\xskakset+>refnextplayer (key)}%
+    \index{refnextplayer (\texttt{\textbackslash xskakset} key)}%
+    %
+    \index{chessboard=\verb!*+\chessboard+>refnextmoveid (key)}%
+    \index{refnextmoveid (\texttt{\textbackslash chessboard} key)}%
+    \index{chessboard=\verb!*+\chessboard+>refnextmovenr (key)}%
+    \index{refnextmovenr (\texttt{\textbackslash chessboard} key)}%
+    \index{chessboard=\verb!*+\chessboard+>refnextplayer (key)}%
+    \index{refnextplayer (\texttt{\textbackslash chessboard} key)}%
+
+
+This keys will set the respective move information to the value of
+the move after the tag.
+
+\item[\key{refpast=}\meta{tag}, \key{refnext=}\meta{tag}]
+    \index{resumechessgame=\verb!*+\resumechessgame+>refpast (key)}%
+    \index{refpast (\texttt{\textbackslash resumechessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>refpast (key)}%
+    \index{refpast (\texttt{\textbackslash newchessgame} key)}%
+    \index{xskakset=\verb!*+\xskakset+>refpast (key)}%
+    \index{refpast (\texttt{\textbackslash xskakset} key)}%
+    \index{resumechessgame=\verb!*+\resumechessgame+>refnext (key)}%
+    \index{refnext (\texttt{\textbackslash resumechessgame} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>refnext (key)}%
+    \index{refnext (\texttt{\textbackslash newchessgame} key)}%
+    \index{xskakset=\verb!*+\xskakset+>refnext (key)}%
+    \index{refnext (\texttt{\textbackslash xskakset} key)}%
+    \index{chessboard=\verb!*+\chessboard+>refpast (key)}%
+    \index{refpast (\texttt{\textbackslash chessboard} key)}%
+    \index{chessboard=\verb!*+\chessboard+>refnext (key)}%
+    \index{refnext (\texttt{\textbackslash chessboard} key)}%
+
+
+This keys will set the \meta{GameId} and the \meta{MoveId} in one go.
+E.g. \key{refpast} is a shortcut for\\
+\key{reftag=}\meta{tag},\key{id=}\cs{xskakget}verb+{refid}+,\key{moveid=}\cs{xskakget}verb+{refpastmoveid}+
+
+
+
+
+\item[\key{reffen=}\meta{tag}]
+    \index{chessboard=\verb!*+\chessboard+>reffen (key)}%
+    \index{reffen (\texttt{\textbackslash chessboard} key)}%
+    \index{newchessgame=\verb!*+\newchessgame+>reffen (key)}%
+    \index{reffen (\texttt{\textbackslash newchessgame} key)}%
+
+This is a \cs{chessboard} key. It will add the position at the tag on
+the board, its effect is  identical to using the key {\ttfamily
+addfen =}\meta{Position at tag} described in the documentation of
+\pchessboard. So be aware that it really only places  pieces on the
+board. It will not change the \meta{GameId} nor the \meta{MoveId} or
+the move counter of \packagename{skak}. So it is quite possible to
+use a position where black should move next to start a game with
+white to move.
+
+
+\begin{LTXexample}
+ \newchessgame[id=new]% to set a new id
+ \chessboard[reffen=B]
+\end{LTXexample}
+
+
+
+
+\begin{LTXexample}
+ \newchessgame[id=A]%
+ \mainline{1.e4 e5 2. Nf3\xskakset{tag=C} Nc6
+ 3. Bb5 Nf6 4. O-O Nxe4 5.Bxc6 bxc6}
+
+
+ \newchessgame[id=B,reffen=C]
+ \mainline{1. Nc3}
+
+ \chessboard
+
+ \chessboard[reffen=C,
+             markstyle=circle,
+             color=red,
+             %from game B:
+             markfield=\xskakget{movefrom},
+             refpast=C,
+             color=green,
+             %from game A:
+             markfield=\xskakget{movefrom}]
+\end{LTXexample}
+\end{description}
+
+\section{Looping}
+
+Looping with the \cs{whiledo} command of the package
+\packagename{ifthen} is not very difficult. But to adjust to the
+special numbering of chessmoves (1w, 1b, 2w, 2b, 3w \ldots) one needs
+some special commands to step through the moves and test for the end
+of the loop.
+
+\DescribeMacro{\xskaktestmoveid}%
+Stepping can be done with the key \key{stepmoveid} described
+earlier.\\ \cs{xskaktestmoveid}\marg{movenr}\marg{player} is a test
+(defined with the help of package \packagename{xifthen}) which you
+can use in the first argument of \cs{whiledo}. It will give true if
+the move is in the current game.
+
+\begin{LTXexample}
+ \newchessgame[id=A]
+ \mainline{1. e4 e5 2. Nf3 Nf6}
+
+ \newchessgame[id=B]
+ (a second game)
+
+ Reprinting the first game:
+ \xskakset{id=A,
+        moveid=\xskakgetgame{initmoveid}}
+ \whiledo{\xskaktestmoveid
+   {\xskakget{movenr}}{\xskakget{player}}}
+  {\ifthenelse%
+    {\equal{\xskakget{player}}{w}}
+    { \xskakget{movenr}.\,}
+    { }%
+    \xskakget{lan}%
+    \xskakset{stepmoveid}}
+
+ Reprinting only the black moves:
+ \xskakset{%
+   id=A,
+   moveid=\xskakgetgame{initmoveid},stepmoveid}
+ \whiledo{\xskaktestmoveid
+    {\xskakget{movenr}}{\xskakget{player}}}
+   { \xskakget{lan}%
+    \xskakset{stepmoveid=2}}
+\end{LTXexample}
+
+
+\DescribeMacro{\xskakloop}%
+\cs{xskakloop}\keyoarg\marg{code} is a wrapper command for such a
+\cs{whiledo} loop.
+
+The possible keys are:
+
+\begin{description}
+\item[\key{id=}\meta{string}]
+   \index{xskakloop=\verb!*+\xskakloop+>id (key)}%
+   \index{id (\texttt{\textbackslash xskakloop} key)}%
+   Which sets the game identification. The setting is global.
+
+\item[\key{initmovenr=}\meta{number}, \key{initplayer=}\meta{«w» or «b»},
+\key{initmoveid=}\meta{number + «w» or «b»}]
+    \index{xskakloop=\verb!*+\xskakloop+>initmovenr (key)}%
+    \index{initmovenr (\texttt{\textbackslash xskakloop} key)}%
+    \index{xskakloop=\verb!*+\xskakloop+>initplayer (key)}%
+    \index{initplayer (\texttt{\textbackslash xskakloop} key)}%
+    \index{xskakloop=\verb!*+\xskakloop+>initmoveid (key)}%
+    \index{initmoveid (\texttt{\textbackslash xskakloop} key)}%
+   This sets the move the loop should start with. Default is the
+   first move of the game.
+
+\item[\key{stopmovenr =}\meta{number}, \key{stopplayer =}\meta{«w» or «b»},
+\key{stopmoveid=}\meta{number + «w» or «b»}]
+    \index{xskakloop=\verb!*+\xskakloop+>stopmovenr (key)}%
+    \index{stopmovenr (\texttt{\textbackslash xskakloop} key)}%
+    \index{xskakloop=\verb!*+\xskakloop+>stopplayer (key)}%
+    \index{stopplayer (\texttt{\textbackslash xskakloop} key)}%
+    \index{xskakloop=\verb!*+\xskakloop+>stopmoveid (key)}%
+    \index{stopmoveid (\texttt{\textbackslash xskakloop} key)}%
+   This sets the move where the loop should stop. Default is the
+   last move of the game.
+
+\item[\key{step=}\meta{number}]
+   \index{xskakloop=\verb!*+\xskakloop+>step (key)}%
+   \index{step (\texttt{\textbackslash xskakloop} key)}%
+   This sets the length of the steps of the loop. The number gives the number of
+   halfmoves. Default is one.
+
+
+\item[\key{showlast=}\meta{true|false}]
+   \index{xskakloop=\verb!*+\xskakloop+>showlast (key)}%
+   \index{showlast (\texttt{\textbackslash xskakloop} key)}%
+   When you are using the key \key{step} with a number unequal to
+   one, it is possible that the last move (possibly set by
+   \key{stopmoveid}) is left out. With the key \key{showlast} you can force \cs{xskakloop} to process
+   the code for the last move.
+\end{description}
+
+
+\begin{LTXexample}[pos=t,width=\textwidth]
+ \newchessgame
+ \mainline{%
+ 1.d4 Nf6 2.c4 g6 3.Nc3 Bg7 4.e4 d6 5.Nge2 O-O 6.Ng3 c6 7.Be2 a6 8.a4
+ a5 9.h4 h5 10.Be3 Na6 11.f3 e5 12.d5 Nd7 13.Nf1 Ndc5 14.Nd2 Qb6
+ 15.Qb1 Nb4 16.Nb3 Ncd3+ 17.Kd2 Qxe3+}
+
+ \xskakloop[step=6,showlast]{%
+  \begin{tabular}{c}
+   \chessboard[tinyboard,
+               setfen=\xskakget{nextfen}]
+   \\
+   \xskakget{opennr}\xskakget{lan}%
+  \end{tabular}\quad}%
+\end{LTXexample}
+
+With the help of the package \packagename{animate} and \cs{xskakloop}
+you can make animated boards:\mynobreakpar
+\begingroup
+ \setchessboard{boardfontsize=0.8cm,shortenend=5pt, margin=false}%
+ \setboardfontencoding{LSBC4}%
+ \newskaklanguage{german}{KDTLSB}\skaklanguage[german]%
+ %
+ \newcommand\getmovestyle[1]{%
+  \ifthenelse
+    {\equal{#1}{N}}%knight move
+    {\def\mymovestyle{[clockwise=false,style=knight]curvemove}}
+    {\ifthenelse
+      {\equal{#1}{}}% castling
+      {\def\mymovestyle{curvemove}}
+      {\def\mymovestyle{straightmove}}}}%
+ %
+ \newchessgame[white=Paethz,black=Dirr,result=0-1,id=anim]%
+ \hidemoves{%
+ 1.d4 Sf6 2.c4 g6 3.Sc3 Lg7 4.e4 d6 5.Sge2 O-O
+ 6.Sg3 c6 7.Le2 a6 8.a4 a5 9.h4 h5 10.Le3 Sa6
+ 11.f3 e5 12.d5 Sd7 13.Sf1 Sdc5 14.Sd2 Db6
+ 15.Db1 Sb4 16.Sb3 Scd3+ 17.Kd2 Dxe3+}%
+ %
+ \unitlength0.8cm\relax
+ \begin{animateinline}[autoplay,loop,controls]{0.5}%
+ \begin{picture}(11,11)
+ \put(1.5,1.5){\chessboard[setfen=\xskakgetgame{initfen}]}%
+ \end{picture}
+ \newframe
+ \xskakloop{%
+  \getmovestyle{\xskakget{piecechar}}%
+  \begin{picture}(11,11)
+  \put(1.5,1.5){%
+   \chessboard[pgfstyle=\mymovestyle, color=blue,
+               pgfshortenend=0.3em,arrow=to,
+               markmoves=\xskakget{move},
+               coloremph,piececolor=blue,
+               emphfields={\xskakget{moveto}},
+               setfen=\xskakget{nextfen}]}%
+  \end{picture}%
+   \newframe}%
+ \begin{picture}(11,11)
+ \put(1.5,1.5){\chessboard[setfen=\xskakgetgame{lastfen}]}%
+ \end{picture}
+ \end{animateinline}
+\endgroup
+
+\bigskip
+The  board was made with the following code:
+
+\begin{lstlisting}
+ \setchessboard{boardfontsize=0.8cm,shortenend=5pt, margin=false}%
+ \setboardfontencoding{LSBC4}%
+ \newskaklanguage{german}{KDTLSB}\skaklanguage[german]%
+ %
+ \newcommand\getmovestyle[1]{%
+  \ifthenelse
+    {\equal{#1}{N}}%knight move
+    {\def\mymovestyle{[clockwise=false,style=knight]curvemove}}
+    {\ifthenelse
+      {\equal{#1}{}}% castling
+      {\def\mymovestyle{curvemove}}
+      {\def\mymovestyle{straightmove}}}}%
+ %
+ \newchessgame[white=Paethz,black=Dirr,result=0-1,id=anim]%
+ \hidemoves{%
+ 1.d4 Sf6 2.c4 g6 3.Sc3 Lg7 4.e4 d6 5.Sge2 O-O
+ 6.Sg3 c6 7.Le2 a6 8.a4 a5 9.h4 h5 10.Le3 Sa6
+ 11.f3 e5 12.d5 Sd7 13.Sf1 Sdc5 14.Sd2 Db6
+ 15.Db1 Sb4 16.Sb3 Scd3+ 17.Kd2 Dxe3+}%
+ %
+ \unitlength0.8cm\relax
+ \begin{animateinline}[autoplay,loop,controls]{0.5}%
+ \begin{picture}(11,11)
+ \put(1.5,1.5){\chessboard[setfen=\xskakgetgame{initfen}]}%
+ \end{picture}
+ \newframe
+ \xskakloop{%
+  \getmovestyle{\xskakget{piecechar}}%
+  \begin{picture}(11,11)
+  \put(1.5,1.5){%
+   \chessboard[pgfstyle=\mymovestyle, color=blue,
+               pgfshortenend=0.3em,arrow=to,
+               markmoves=\xskakget{move},
+               coloremph,piececolor=blue,
+               emphfields={\xskakget{moveto}},
+               setfen=\xskakget{nextfen}]}%
+  \end{picture}%
+   \newframe}%
+ \begin{picture}(11,11)
+ \put(1.5,1.5){\chessboard[setfen=\xskakgetgame{lastfen}]}%
+ \end{picture}
+ \end{animateinline}
+\end{lstlisting}
+
+\section{Printing}
+\subsection{\texttt{\textbackslash longmoves} revisitated}\index{longmoves=\verb!*+\longmoves+>}%
+
+
+
+In the example on page \ref{ex:longmoves} I showed that the
+\cs{longmoves} of \skaksty doesn't work correctly. This is due to the
+asynchronous parsing and printing of the \packagename{skak}-engine
+(\packagename{skak} -- like \TeX~-- has sometimes to look a bit
+ahead). With \xskak the problem can be easily solved as it is now
+possible to retrieve information about previous moves. So \xskak
+redefines the internal commands to get \cs{longmoves} working.
+
+\textbf{Attention!} The new \cs{longmoves} command works only
+correctly if the internal engine parses the moves -- so {\em it
+doesn't work with \cs{variation}}. So starting with version 1.2
+\xskak forces \cs{variation} to use \cs{shortmoves}.
+
+
+The redefinition of \cs{longmoves} is done by first defining a
+printing command and then (re-)defining \cs{longmoves} such that the
+internal \cs{printmove} now use the new command. The listing below
+shows the code\footnote{The code doesn't show the complete truth. In
+the real code \cs{longmoves} also has to change the printing mode for
+\cs{printchessgame}. See \ref{sec:print}}. You can take it as a
+template for your own special printing commands.
+\cs{WhiteToMove}\marg{code for white}\marg{code for black} is a
+command of \skaksty that executes the first argument if white is to
+move and the second if its black turn. The main trick in the new
+printing command is to go back one halfmove. The new printing command
+defines only the printing format for the move itself as the number is
+printed by \skaksty at another place.
+
+\begin{lstlisting}
+\def\xskak at do@printmove at algebraic{%
+ \csname Xskak.\xskak at val@gameid.%
+        \WhiteToMove{\the\numexpr\the\c at move-1\relax}{\the\c at move}.%
+        \WhiteToMove{b}{w}.lan\endcsname
+ \csname Xskak.\xskak at val@gameid.%
+        \WhiteToMove{\the\numexpr\the\c at move-1\relax}{\the\c at move}.%
+        \WhiteToMove{b}{w}.comments\endcsname{}}
+
+\def\longmoves{%
+ \let\printmove=\xskak at do@printmove at algebraic}
+\end{lstlisting}
+
+\DescribeMacro{\xskakenpassanttext}%
+The new printing command inserts a test for enpassant moves. You can
+suppress it by redefining \cs{xskakenpassantext}.
+
+
+
+\begin{LTXexample}
+ \longmoves
+ \newchessgame
+ \mainline{1.e4 e5 2.Nf3 Nf6}
+
+ \newchessgame[restorefen=example]
+ \mainline{1. a4 bxa3!}
+
+ \renewcommand\xskakenpassanttext{}
+ \newchessgame[restorefen=example]
+ \mainline{1. a4 bxa3!}
+\end{LTXexample}
+
+
+
+\subsection{An user interface for styles}\label{sec:interface}
+
+To format a game \skaksty puts during parsing commands before and
+between the moves and the counter. You can see the names of this
+commands in the following example (the style \key{test} is a simple
+local style predefined by \packagename{xskak} which contains
+different tests. In level 1 and 2 it contains style items to show
+commands. The optional argument \texttt{[invar]} force \cs{variation}
+to use level 2).
+
+\begin{LTXexample}[pos=t,width=\textwidth,caption={The internal commands to format the output}]
+ \newchessgame
+ \xskakset{%
+  style=test,
+  level=1}
+ \color{blue}
+
+ \mainline{1.d4 Nf6 2.c4}
+
+ \mainline{2... g6 3.Nc3 Bg7 4.e4}
+
+ \mainline{4... O-O 5. Nf3 Re8}
+
+ \mainline{6. Be3 e6}
+
+ \variation[invar]{6... d6}
+\end{LTXexample}
+
+By judiciously (re-)definining the commands  \packagename{skak}
+inserts one can get almost every chess style one want.
+\packagename{skak} itself defines three examples that demonstrates
+the possibilities. These styles   can be chosen by the commands
+\cs{styleA}, \cs{styleB} and \cs{styleC}. The first two are inline
+styles, the third uses for \cs{mainline} a tabbing environment and
+switches to an inline style for \cs{variation}.  But this styles are
+really no more than examples. There is no user interface to change
+and define styles. And due to some dependencies between the
+predefined styles (\cs{styleB} is not only a stand-alone style but it
+is also used in the definition of \cs{styleC} for the variation
+level) adapting the styles is not easy.
+
+
+So I decided to define a real user interface to define styles and
+switch from one to another. The user interface supports an unlimited
+number of levels: Each style is a bundle of \emph{levels} where the
+look on each level is describe by a \emph{style item}\index{style
+item} and some optional  commands. Defining a style is therefore done
+in two steps:
+
+\begin{lstlisting}
+ % Define items:
+ \xskaknewstyleitem{A}{%
+  beforenumber={},
+  whiteopen={.\,},
+  ...}
+ \xskaknewstyleitem{B}{...}
+
+ %Define style
+ \xskaknewstyle[%
+  level=1,styleitem=A,
+    font=\bfseries, %add special command to level 1.
+  level=2,styleitem=A,
+  level=3,styleitem=B,
+  ...]{mystyle}
+ \end{lstlisting}
+
+
+\textbf{Attention!} The (almost) indefinite number of levels comes at
+a price: \cs{mainline}  and \cs{variation} no longer use
+automatically different styles. If a \cs{variation} should switch to
+a «variation style» you will have to use e.g. the option
+\texttt{[invar]} mentioned above (but you can define your own
+«variation» commands that do this switch). Please read section
+\ref{sec:usestyles} for more information.
+
+
+
+\subsubsection{Defining style items}
+
+\DescribeMacro{\xskaknewstyleitem}%
+With \cs{xskaknewstyleitem}\keyoarg\marg{item}  you define the style
+item \meta{item}. You can use the following keys:
+
+
+\begin{description}
+\item[\meta{command name}=\meta{commands}]
+   \index{xskaknewstyleitem=\verb!*+\xskaknewstyleitem+>opencommands (key)}%
+   \index{opencommands (\texttt{\textbackslash xskaknewstyleitem} key)}%
+   \index{xskaknewstyleitem=\verb!*+\xskaknewstyleitem+>closecommands (key)}%
+   \index{closecommands (\texttt{\textbackslash xskaknewstyleitem} key)}%
+   \index{xskaknewstyleitem=\verb!*+\xskaknewstyleitem+>beforenumber (key)}%
+   \index{beforenumber (\texttt{\textbackslash xskaknewstyleitem} key)}%
+   \index{xskaknewstyleitem=\verb!*+\xskaknewstyleitem+>whiteopen (key)}%
+   \index{whiteopen (\texttt{\textbackslash xskaknewstyleitem} key)}%
+   \index{xskaknewstyleitem=\verb!*+\xskaknewstyleitem+>beforewhite (key)}%
+   \index{beforewhite (\texttt{\textbackslash xskaknewstyleitem} key)}%
+   \index{xskaknewstyleitem=\verb!*+\xskaknewstyleitem+>afterwhite (key)}%
+   \index{afterwhite (\texttt{\textbackslash xskaknewstyleitem} key)}%
+   \index{xskaknewstyleitem=\verb!*+\xskaknewstyleitem+>blackopen (key)}%
+   \index{blackopen (\texttt{\textbackslash xskaknewstyleitem} key)}%
+   \index{xskaknewstyleitem=\verb!*+\xskaknewstyleitem+>beforeblack (key)}%
+   \index{beforeblack (\texttt{\textbackslash xskaknewstyleitem} key)}%
+   \index{xskaknewstyleitem=\verb!*+\xskaknewstyleitem+>afterblack (key)}%
+   \index{afterblack (\texttt{\textbackslash xskaknewstyleitem} key)}%
+
+{\raggedright where \meta{command name} is one of
+\\\texttt{opencommands}, \texttt{closecommands},
+\texttt{beforenumber}, \texttt{whiteopen}, \texttt{blackopen},
+\texttt{beforewhite}, \texttt{beforeblack}, \texttt{afterwhite},
+\texttt{afterblack}.\par}
+
+
+There are endless possibilities for the value \meta{commands} -- as
+there are endless possibilities to get more or less horrible errors.
+So I will give only some general advices for the definitions of style
+items:
+
+\begin{itemize}
+\item While processing \keylists\/ \packagename{xkeyval} strips spaces.
+So if you want to set one of the commands to a space use
+either commands like \verb+\ +, \verb+\space+ and \verb+~+, or
+protect the space by enough layers of braces.
+
+\item While processing \keylists\/ \packagename{xkeyval} strips also braces.
+If you need some grouping use \cs{begingroup} and \cs{endgroup} or
+protect the «real» braces by enough other braces.
+
+\item Use if possible switches (like \cs{bfseries}) instead of commands with arguments.
+
+\item Think about how you want to handle spaces at the start and the end of (bits of) a game
+or a variation. An input like
+ \verb+\mainline{1. e4}+\verb*+ \variation{1.e5}+ will already insert a
+ space so avoid to insert another one through e.g. \key{opencommands}.
+
+
+\item It is possible to open a group (with
+\cs{begingroup}) or a environment in one command  and close it in
+another command. If you do this check carefully that you have
+balanced groups in all four combinations of white/black opening and
+ending the game! Check also if everything works if you have only one
+move.
+
+\item You don't have to give a definition for all keys/commands.
+Unused keys are set to empty.
+
+\item If you want to force a style (or a style item) to use the long
+or the short algebraic notation you can add
+\cs{longmoves}/\hspace{0pt}\cs{shortmoves} to \key{opencommands}.
+    \index{longmoves=\verb!*+\longmoves+>}%
+    \index{shortmoves=\verb!*+\shortmoves+>}%
+\end{itemize}
+
+
+\item[\meta{beforeNAG}=\meta{commands}, \meta{beforecomment}=\meta{commands}]
+
+\packagename{xskak} puts around each NAG and comment given by
+\cs{xskakcomment} a group and before each NAG's and comment a
+formatting command. This commands are named \cs{xskak at beforeNAG} and
+\cs{xskak at beforecomment}. With the keys \key{beforeNAG} and
+\key{beforecomment} you can change this commands and so to some
+extend change the formatting of NAG and long comments (the styles of
+short comments like + or ! are not affected!). The last command in
+\meta{commands} can be a command that has one argument. NAG and the
+content of the comment will then be used as this argument. This makes
+is e.g. possible to gobble commands:
+
+\begin{LTXexample}[varwidth=false,width=0.3\textwidth]
+ \providecommand\gobble[1]{}
+ \xskaknewstyleitem[%
+   template=UF,%a predefined style item
+   beforeNAG=\gobble,
+   beforecomment=\gobble]{gobblecomments}
+
+ \xskakaddtostyle[%
+  level=gobble,
+  styleitem=gobblecomments]{test}
+
+ \variation[style=test,level=gobble]{1. e4! $1 \xskakcomment{expected} e5 $2}
+\end{LTXexample}
+
+
+
+
+
+
+\item[\key{template}=\meta{item}]
+   \index{xskaknewstyleitem=\verb!*+\xskaknewstyleitem+>template (key)}%
+   \index{template (\texttt{\textbackslash xskaknewstyleitem} key)}%
+
+With this key you can reuse the definitions from another style item.
+\end{description}
+
+
+\subsubsection{Defining style}
+
+
+\DescribeMacro{\xskaknewstyle}%
+\DescribeMacro{\xskakaddtostyle}%
+With \cs{xskaknewstyle}\keyoarg\marg{style}  you define the style
+\meta{style}. \\With \cs{xskakaddtostyle}\keyoarg\marg{style} you can
+add more levels (or overwrite existing ones) to a style. Both
+commands can handle four keys: \key{level}, \key{styleitem},
+\key{font} and \key{xfont}.
+
+
+\begin{description}
+\item[\key{level}=\meta{number}]
+   \index{xskaknewstyle=\verb!*+\xskaknewstyle+>level (key)}%
+   \index{level (\texttt{\textbackslash xskaknewstyle} key)}%
+
+With this key you set the number of the level for which you want to
+declared a «look» with the following keys. The «highest» level number
+is 1. Normally it should contain the description of the style for the
+main game. Variation styles should have larger numbers. But the
+\meta{number} don't need to be a number, strings are also possible.
+
+
+If you want to keep everything simple: Use only (positive) numbers
+with levels. Then the levels have a well-defined order which is easy
+to handle. Key \key{invar} will add 1 to a level number, key
+\key{outvar} will substract 1 and if you set the level to a number
+for which no style item as been declared \packagename{xskak} will
+simply substract 1 from this number until it finds a level with a
+style item it can use.
+
+But you can also use level names with chars e.g. to define variants
+for a specific variation level. So you could e.g. define levels
+\texttt{1open}, \texttt{1close}, \texttt{1middle},
+\texttt{1betteris}.
+
+In this case it depends on your compiler how the  keys \key{invar}
+and \key{outvar} and levels without declared style items are handled:
+
+\begin{description}
+\item[Case 1:] You have an old pdf\TeX\ where the (experimental) primitive
+\cs{pdfmatch} is not defined (or you did use the package option
+\texttt{nopdfmatch}).\mynobreakpar
+
+Then the keys \key{invar} and \key{outvar} will not work when the
+current level contains chars or other non-numerical tokens. They will
+issue more or less bewildering errors.
+
+Levels without a declared style item will issue errors too.
+
+\item[Case 2:] You have a recent pdf\TeX\ where the (experimental) primitive
+\cs{pdfmatch} is defined (and you didn't use the package option
+\texttt{nopdfmatch}).\mynobreakpar
+
+    \begin{description}
+    \item[Case a)] The level name doesn't contain any number, e.g. \texttt{level=gobble}:\mynobreakpar
+
+     Then you will get an error if you try to set the level and you haven't declared a style item for this level.
+
+     If the current level is \texttt{gobble} then the keys \key{invar} and \key{outvar} will issue a warning
+     and let the level unchanged.
+
+    \item[Case b)] The level name do contain numbers, e.g. \texttt{level=a12b567}:\mynobreakpar
+
+    Then \packagename{xskak} will use the following substituation if you try to set the level and there is no style
+    item  declared:
+    \packagename{xskak} will extract the
+    first number from the name (in this case «12»), substract one
+    from this number and try the name with the new number in it. If
+    the first number is 1, level 1 is used (it is always defined). If
+    the first number is 0 you will get an error.
+
+    In the example \packagename{xskak} will try the levels in the following order until it finds one that it can use:
+    {\ttfamily a12b567 $\rightarrow$ a11b567 $\rightarrow$ a10b567 $\rightarrow$ \ldots a2b567 $\rightarrow$ a1b567 $\rightarrow$ 1}
+    \end{description}
+
+\end{description}
+
+
+\item[\key{styleitem}=\meta{item}]
+   \index{xskaknewstyle=\verb!*+\xskaknewstyle+>styleitem (key)}%
+   \index{styleitem (\texttt{\textbackslash xskaknewstyle} key)}%
+
+With this key you set the style item used by the current level
+\emph{and all following levels} until another \key{styleitem} is set.
+
+
+\item[\key{font}=\meta{commands}]
+   \index{xskaknewstyle=\verb!*+\xskaknewstyle+>font (key)}%
+   \index{font (\texttt{\textbackslash xskaknewstyle} key)}%
+
+With this key you can add  some specific commands to the current
+level (\emph{and only to the current level}). While the key is meant
+to add font switches to a level it can also be used to overwrite some
+commands of a style item.
+
+
+
+\begin{LTXexample}[varwidth=false,width=0.3\textwidth]
+ \xskaknewstyleitem[%
+  template=UF,%a predefined style item
+  beforenumber=\color{red},%
+  whiteopen=.\,\color{black},
+  blackopen=\ldots\,\color{black}]{rednumbers}
+
+ %% add to existing style test
+ \xskakaddtostyle[%
+  level=10,styleitem=rednumbers,
+  level=12,
+  font=\def\beforenumber{\color{green}}\bfseries]
+   {test}
+
+
+ \newchessgame
+ \mainline[style=test,level=12]{1. Nf3 Nf6 2. d4}
+
+ \variation[level=10]{2. Nc3}
+
+
+ \mainline[level=11]{2... d5}
+ \end{LTXexample}
+
+\begin{LTXexample}[varwidth=false,width=0.3\textwidth]
+\xskakset{style=test}%
+ \xskaknewstyleitem[%
+  template=UF,%a predefined style item
+  beforeNAG=\color{blue},
+  beforecomment=\mdseries]{mycomments}
+
+ \xskakaddtostyle[level=13,styleitem=mycomments,
+                 font=\bfseries]{test}
+
+ \variation[level=13]{1. e4 $1 \xskakcomment{ as expected} e5}
+
+ \makeatletter
+ \xskakaddtostyle[%
+   level=gobbleB,styleitem=gobblecomments,
+   font=\renewcommand\xskak at beforeNAG{\color{red}}]%
+   {test}
+ \makeatother
+
+ \variation[level=gobbleB]{1. e4! $1 \xskakcomment{ I expected it} e5 $2}
+ \end{LTXexample}
+
+\item[\key{xfont}=\meta{commands}]
+   \index{xskaknewstyle=\verb!*+\xskaknewstyle+>xfont (key)}%
+   \index{xfont (\texttt{\textbackslash xskaknewstyle} key)}%
+
+With this key you can add  some specific commands to all levels with
+the same first number in their name. It needs a recent pdf\TeX\ with
+the command \cs{pdfmatch}.
+
+As an example lets add three levels to the test style used above: the
+first (main) level should use a bold font, the second \cs{mdseries}
+and the third an italic font. For each level we will define a variant
+which puts a \cs{betteris} (\betteris) before the first move.
+
+The example also demonstrates how to retrieve the current level.
+Please note the braces around some of the \cs{variations} which keep
+the level change local.
+
+\begin{LTXexample}[width=0.3\textwidth,varwidth=false,caption=«betteris» style,label=sty:betteris]
+ \xskaknewstyleitem[%
+  template=UF,
+  opencommands=(\betteris,
+  closecommands=)]{betteris}
+
+
+ \xskakaddtostyle
+ [level=20   ,styleitem=UF,xfont=\bfseries,
+  level=20bis,styleitem=betteris,
+  level=21   ,xfont=\mdseries,
+  level=22   ,xfont=\itshape]{test}
+
+ \xskakset{style=test}
+
+ \variation[level=20]{1. e4 e5}   (level \xskakget{level})
+ \variation[level=20bis]{1... e6} (level \xskakget{level})
+
+ \variation[level=21]{1. e4 e5}   (level \xskakget{level})
+ \variation[level=21bis]{1... e6} (level \xskakget{level})
+
+ \variation[level=22]{1. e4 e5}   (level \xskakget{level})
+ \variation[level=22bis]{1... e6} (level \xskakget{level})
+
+
+ \variation[level=20]{1. e4 e5}
+ {\variation[level=\xskakget{level}bis]{1... e6}
+  \variation[invar]{1... e6}  \variation[invar]{1... e6}}
+
+ \variation[invar]{1. e4 e5} %to level 21
+ {\variation[level=\xskakget{level}bis]{1... e6}}
+
+ \variation[invar]{1. e4 e5} %to level 22
+ {\variation[level=\xskakget{level}bis]{1... e6}}
+
+\end{LTXexample}
+
+
+\end{description}
+
+
+The previous examples demonstrate some important points to consider
+when defining styles:
+
+\begin{itemize}
+\item You can define as much levels as you want.
+
+\item The number of the levels don't have to be consecutive (they even need to be numbers). If there
+is no definition for a level (in the first example level 11), the
+style item of a previous level (in this case level 10) is used if
+\packagename{xskak} is able to figure out what the previous level
+could be.
+
+\item While it is often sensible to store the settings for the main level
+in level 1, and for the first variation level in level 2 and so on,
+you can also chose other orders or use more than one level for each
+logical variation level. If you e.g. want sometimes to add braces
+through \key{opencommands} you could define variants $n$a, $n$b etc
+of the involved variation level.
+
+
+
+\item While it is easy to define style items and styles it is not
+easy sort and bundle them in a sensible way.
+
+\end{itemize}
+
+
+\subsection{Using the styles}\label{sec:usestyles}
+
+The names of the commands \cs{mainline} and \cs{variation} give the
+impression that you should use the first for the main game and the
+second for the variations. But at my opinion this impression is
+wrong: You should use
+ \begin{itemize}
+ \item \cs{mainline} if you want to parse \emph{and} print chess moves,
+ \item \cs{variation} if you want only to print chess moves,
+ \item \cs{hidemoves} if you want only to parse moves and
+ \item \cs{printchessgame} (described later) if you want to
+  (re)print a previously parsed game.
+ \end{itemize}
+
+This means that each of the printing commands can be used for the
+main game and for variations. And so it should be possible for each
+of the printing commands to set and use every style level.
+
+In consequence this means that if you use the new interface -- you
+don't have to -- \cs{variation} will no longer switch to another
+style.
+
+You can set the style and the level either with \cs{xskakset} or in
+the optional argument of the three printing commands. The keys you
+can use in both cases are:
+
+
+
+\begin{description}
+\item[\key{style}=\meta{style name}]
+    \index{xskakset=\verb!*+\xskakset+>style (key)}%
+    \index{style (\texttt{\textbackslash xskakset} key)}%
+    \index{mainline=\verb!*+\mainline+>style (key)}%
+    \index{style (\texttt{\textbackslash mainline} key)}%
+    \index{variation=\verb!*+\variation+>style (key)}%
+    \index{style (\texttt{\textbackslash variation} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>style (key)}%
+    \index{style (\texttt{\textbackslash printchessgame} key)}%
+
+This key sets the name of the style the following printing commands
+should use. The setting is always local to the current group (even
+with \cs{xskakset}\footnote{At first \cs{xskakset} did the settings
+globally. I changed it after the third time I had to correct the
+documentation because I forgot to reset a style after an example.}.
+
+
+\item[\key{gstyle}=\meta{style name}]
+    \index{xskakset=\verb!*+\xskakset+>gstyle (key)}%
+    \index{gstyle (\texttt{\textbackslash xskakset} key)}%
+    \index{mainline=\verb!*+\mainline+>gstyle (key)}%
+    \index{gstyle (\texttt{\textbackslash mainline} key)}%
+    \index{variation=\verb!*+\variation+>gstyle (key)}%
+    \index{gstyle (\texttt{\textbackslash variation} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>gstyle (key)}%
+    \index{gstyle (\texttt{\textbackslash printchessgame} key)}%
+
+This key sets the name of the style globally.
+
+
+\item[\key{level}=\meta{number}]
+    \index{xskakset=\verb!*+\xskakset+>level (key)}%
+    \index{level (\texttt{\textbackslash xskakset} key)}%
+    \index{mainline=\verb!*+\mainline+>level (key)}%
+    \index{level (\texttt{\textbackslash mainline} key)}%
+    \index{variation=\verb!*+\variation+>level (key)}%
+    \index{level (\texttt{\textbackslash variation} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>level (key)}%
+    \index{level (\texttt{\textbackslash printchessgame} key)}%
+
+This key sets the level the following printing commands should use.
+The setting is always local to the current group.
+
+\item[\key{glevel}=\meta{number}]
+    \index{xskakset=\verb!*+\xskakset+>glevel (key)}%
+    \index{glevel (\texttt{\textbackslash xskakset} key)}%
+    \index{mainline=\verb!*+\mainline+>glevel (key)}%
+    \index{glevel (\texttt{\textbackslash mainline} key)}%
+    \index{variation=\verb!*+\variation+>glevel (key)}%
+    \index{glevel (\texttt{\textbackslash variation} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>glevel (key)}%
+    \index{glevel (\texttt{\textbackslash printchessgame} key)}%
+
+This key sets the level globally.
+
+\item[\key{invar}]
+    \index{xskakset=\verb!*+\xskakset+>invar (key)}%
+    \index{invar (\texttt{\textbackslash xskakset} key)}%
+    \index{mainline=\verb!*+\mainline+>invar (key)}%
+    \index{invar (\texttt{\textbackslash mainline} key)}%
+    \index{variation=\verb!*+\variation+>invar (key)}%
+    \index{invar (\texttt{\textbackslash variation} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>invar (key)}%
+    \index{invar (\texttt{\textbackslash printchessgame} key)}%
+
+This will add 1 to the first number in the current level (so it goes
+towards «higher» (deeper) levels). Again the change is local to the
+group. This key can break if the current value of the level is not a
+number.
+
+\item[\key{ginvar}]
+    \index{xskakset=\verb!*+\xskakset+>ginvar (key)}%
+    \index{ginvar (\texttt{\textbackslash xskakset} key)}%
+    \index{mainline=\verb!*+\mainline+>ginvar (key)}%
+    \index{ginvar (\texttt{\textbackslash mainline} key)}%
+    \index{variation=\verb!*+\variation+>ginvar (key)}%
+    \index{ginvar (\texttt{\textbackslash variation} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>ginvar (key)}%
+    \index{ginvar (\texttt{\textbackslash printchessgame} key)}%
+
+This is the global variant of \key{invar}.
+
+\item[\key{outvar}]
+    \index{xskakset=\verb!*+\xskakset+>outvar (key)}%
+    \index{outvar (\texttt{\textbackslash xskakset} key)}%
+    \index{mainline=\verb!*+\mainline+>outvar (key)}%
+    \index{outvar (\texttt{\textbackslash mainline} key)}%
+    \index{variation=\verb!*+\variation+>outvar (key)}%
+    \index{outvar (\texttt{\textbackslash variation} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>outvar (key)}%
+    \index{outvar (\texttt{\textbackslash printchessgame} key)}%
+
+This will substract 1 to the first number in the current level (so it
+goes towards level 1 as the main level). This key can break if the
+current value of the level is not a number.
+
+\item[\key{goutvar}]
+    \index{xskakset=\verb!*+\xskakset+>goutvar (key)}%
+    \index{goutvar (\texttt{\textbackslash xskakset} key)}%
+    \index{mainline=\verb!*+\mainline+>goutvar (key)}%
+    \index{goutvar (\texttt{\textbackslash mainline} key)}%
+    \index{variation=\verb!*+\variation+>goutvar (key)}%
+    \index{goutvar (\texttt{\textbackslash variation} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>goutvar (key)}%
+    \index{goutvar (\texttt{\textbackslash printchessgame} key)}%
+
+This is the global variant of \key{outvar}.
+\end{description}
+
+
+\subsection{The predefined styles}
+
+\Xskak predefines five styles: \texttt{styleA}, \texttt{styleB} and
+\texttt{styleC} imitate the predefined styles of \packagename{skak}
+with the addition that they change to italic in the third level.
+Style \texttt{UF} is my style and style \texttt{test} is a large
+container for all sorts of tests.
+
+
+\begin{LTXexample}[width=0.4\textwidth,varwidth=false]
+\minisec{style \enquote{styleA}}
+\newchessgame
+ \xskakset{style=styleA}
+ \mainline[level=1]{%
+  1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Qb6}
+  (\variation[invar]{4... Ne7 5. Nf3 Nec6}
+    (\variation[invar]{5... Nf5 6. h4 Be7
+      7. Bd3 cxd4 8. cxd4 Nc6 9. Bxf5 exf5 10. Bg5 $14})
+  \variation[outvar]{6. Bd3}
+    (\variation[invar]{6. h4 Nd7 7. h5 f6 $1 $132}))
+ \mainline[outvar,outvar]{ 5. Nf3 Bd7}
+
+\end{LTXexample}
+
+
+\begin{LTXexample}[width=0.4\textwidth,varwidth=false]
+\minisec{style \enquote{styleB}}
+\newchessgame
+ \xskakset{style=styleB}
+ \mainline[level=1]{%
+  1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Qb6}
+  (\variation[invar]{4... Ne7 5. Nf3 Nec6}
+    (\variation[invar]{5... Nf5 6. h4 Be7
+      7. Bd3 cxd4 8. cxd4 Nc6 9. Bxf5 exf5 10. Bg5 $14})
+  \variation[outvar]{6. Bd3}
+    (\variation[invar]{6. h4 Nd7 7. h5 f6 $1 $132}))
+ \mainline[outvar,outvar]{ 5. Nf3 Bd7}
+
+\end{LTXexample}
+
+\begin{LTXexample}[width=0.4\textwidth,varwidth=false]
+\minisec{style \enquote{UF}}
+\newchessgame
+ \xskakset{style=UF}
+ \mainline[level=1]{%
+  1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Qb6}
+  (\variation[invar]{4... Ne7 5. Nf3 Nec6}
+    (\variation[invar]{5... Nf5 6. h4 Be7
+      7. Bd3 cxd4 8. cxd4 Nc6 9. Bxf5 exf5 10. Bg5 $14})
+  \variation[outvar]{6. Bd3}
+    (\variation[invar]{6. h4 Nd7 7. h5 f6 $1 $132}))
+ \mainline[outvar,outvar]{ 5. Nf3 Bd7}
+
+\end{LTXexample}
+
+\minisec{style \enquote{styleC}}
+styleC sets the moves in a tabbing and should be used only for the main moves.
+\begin{LTXexample}[width=0.4\textwidth,varwidth=false]
+\newchessgame
+ \mainline[style=styleC,level=1]{%
+  1. e4 e6 2. d4 d5 3. e5 c5 4. c3 Qb6}
+  (\variation[invar]{4... Ne7 5. Nf3 Nec6}
+    (\variation[invar]{5... Nf5 6. h4 Be7
+      7. Bd3 cxd4 8. cxd4 Nc6 9. Bxf5 exf5 10. Bg5 $14})
+  \variation[outvar]{6. Bd3}
+    (\variation[invar]{6. h4 Nd7 7. h5 f6 $1 $132}))
+ \mainline[outvar,outvar]{ 5. Nf3 Bd7}
+
+\end{LTXexample}
+
+
+\subsection{The new \texorpdfstring{\texttt{xskak}}{xskak} printing
+command}\label{sec:print}
+
+\DescribeMacro{\printchessgame}%
+As one of the aims of \packagename{xskak} is to separate the parsing
+from the printing of a game there is naturally also a printing
+command. With \cs{printchessgame}\keyoarg{} you can print a
+previously parsed and saved game. Without any options
+\cs{printchessgame} will print the game with the currently active
+\meta{GameId} from start to end.
+
+
+
+As keys you can use
+\begin{description}
+\item[\key{id}=\meta{GameId}, \key{refid}=\meta{tag}]
+    \index{printchessgame=\verb!*+\printchessgame+>id (key)}%
+    \index{id (\texttt{\textbackslash printchessgame} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>refid (key)}%
+    \index{refid (\texttt{\textbackslash printchessgame} key)}%
+
+This keys change only for the printing the current \meta{GameId}.
+Afterwards the old \meta{GameId} is restored.
+
+\item[\key{initmovenr=}\meta{number}, \key{initplayer=}\meta{«w» or «b»}, \key{initmoveid=}\meta{number + «w» or «b»}]\index{printchessgame=\verb!*+\printchessgame+>initmovenr (key)}%
+    \index{initmovenr (\texttt{\textbackslash printchessgame} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>initplayer (key)}%
+    \index{initplayer (\texttt{\textbackslash printchessgame} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>initmoveid (key)}%
+    \index{initmoveid (\texttt{\textbackslash printchessgame} key)}%
+~\\ This keys sets the move the printing should start with. If the
+move isn't in the game a warning is issued and the first move of the
+game is used instead.
+
+\item[\key{stopmovenr=}\meta{number}, \key{stopplayer=}\meta{«w» or «b»}, \key{stopmoveid=}\meta{number + «w» or «b»}]
+    \index{printchessgame=\verb!*+\printchessgame+>stopmovenr (key)}%
+    \index{stopmovenr (\texttt{\textbackslash printchessgame} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>stopplayer (key)}%
+    \index{stopplayer (\texttt{\textbackslash printchessgame} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>stopmoveid (key)}%
+    \index{stopmoveid (\texttt{\textbackslash printchessgame} key)}%
+~\\ This keys sets the move the printing should end with. If the move
+isn't in the game a warning is issued and the last move of the game
+is used instead.
+
+\item[\key{reftag}=\meta{tag}]
+    \index{printchessgame=\verb!*+\printchessgame+>reftag (key)}%
+    \index{reftag (\texttt{\textbackslash printchessgame} key)}%
+
+This sets the tag name in case that you want to use tagged moves as
+start or end of the printing. There are no keys like
+\key{initrefpastmoveid} (I thought so long names are no longer
+manageable), so you will have to use e.g. \texttt{reftag=}\meta{tag},
+\texttt{initmovenr=}\cs{xskakget}\verb+{refpast}+.
+
+
+\item[\key{style}, \key{level}, key{invar}  and \key{outvar}]%
+    \index{printchessgame=\verb!*+\printchessgame+>level (key)}%
+    \index{level (\texttt{\textbackslash printchessgame} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>invar (key)}%
+    \index{invar (\texttt{\textbackslash printchessgame} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>outvar (key)}%
+    \index{outvar (\texttt{\textbackslash printchessgame} key)}%
+    \index{printchessgame=\verb!*+\printchessgame+>style (key)}%
+    \index{style (\texttt{\textbackslash printchessgame} key)}%
+
+\cs{printchessgame} use the same formatting commands as
+\packagename{skak}, so the style can be change through the interface
+defined and described in section \ref{sec:interface}.
+
+
+To set the level and the style you can use the keys described in
+section \ref{sec:usestyles} in the optional argument of
+\cs{printchessgame}. Like with \cs{mainline} and \cs{variation} the
+keys sets the values locally for the current group.
+
+To print the actual moves, \cs{printchessgame} doesn't use the
+command \cs{printmove} from \packagename{skaksty} but an internal
+command named \cs{xskak at do@printmove}. So commands like
+\cs{longmoves} must set this command appropriately.
+
+
+\end{description}
+
+\begin{LTXexample}
+ \input{xskakgames.xsk}
+ \printchessgame[style=UF,level=1,id=export,
+                 initmoveid=7w,stopmoveid=12b]
+\end{LTXexample}
+
+
+\subsection{Game titles and chessboard captions}
+
+There are no pre-made commands. You will have to define them with the
+help of the stored game data/move data. For titles I advise you to
+use a sort of sectioning command -- this will prevent page breaks
+between the title and the game. Look e.g. at the definition of
+\cs{minisec} in one of the classes from the KOMA-bundle. For
+captions: look at the  package \packagename{caption}.
+
+
+
+
+\section{PGN2LTX or How to sort the input}
+
+While \packagename{skak}/\packagename{xskak} can handle games in
+PGN-notation they can't handle PGN-files: neither the PGN-infos
+(which is a small nuisances) nor the variations and the comments in
+the game notation (which makes it tedious to print large games with a
+lot of annotations).
+
+There exists a small number of perl scripts and applications to help
+to convert PGN to \LaTeX\ but none is really satisfactory. One of the
+problems that prevents better solutions is that there is no clear
+description what should be the result of a conversion from PGN to
+\LaTeX. In this section I will make some remarks about what I think
+would be a good output from such a converter for
+\packagename{xskak}\footnote{\packagename{texmate} needs another
+output.} and where I see problems. The description should also help
+you to enter or convert complicated games manually.
+
+
+\minisec{The PGN-infos}
+
+The «tag pair» section of a chess game in PGN shouldn't pose problems
+to a converter. The tags should be simply converted to the equivalent
+keys of a \cs{newchessgame}:
+
+\begin{lstlisting}
+ [Round "29"]
+ [White "Fischer, Robert J."]
+ [Black "Spassky, Boris V."]
+ [Result "1/2-1/2"]
+\end{lstlisting}
+%
+\begin{lstlisting}[escapechar=/]
+ \newchessgame[id=/\meta{GameId}/, %see below
+               round={29},
+               white={Fischer, Robert J.},
+               black={Spassky, Boris V.},
+               result={1/2-1/2}]
+\end{lstlisting}
+
+\xskakset{style=UF}%
+If the game use a \texttt{SetUp} and a \texttt{FEN} tag to set an
+alternative starting position, the converter will have to extract the
+start move from the FEN and set it with the key \key{moveid}.
+
+\minisec{The \meta{GameId}}
+
+While it is probably possible to give each game an unique
+\meta{GameId} I don't think that it is sensible or really necessary.
+I would suggest, that each game gets uses\\
+\verb+\newchessgame[id=main\xskakaddtoid,...]+ where
+\cs{xskakaddtoid} is empty by default but can be redefined to allow
+some automatic numbering.
+
+\minisec{The parsing command}
+
+As you will probably sometimes use \cs{mainline} and sometimes
+\cs{hidemoves} it is probably best if the converter use an general
+\cs{parsechessgame} which can be \cs{let} to both commands.
+
+\minisec{NAG's}
+
+Most NAG's don't need any special handling as \packagename{xskak} can
+parse them.
+
+But some chess applications seems to put NAG's \emph{after} a move to
+denote a symbol that should go \emph{before} the move. E.g.
+ \verb+1. e5 $142+
+%
+should become \betteris\variation{1. e5}.
+
+Putting such symbols before a move number is in most cases only
+possible at the start of a \cs{mainline} or \cs{variation} so the
+converter will have probably to split the input and add the symbol
+either directly or through a style. A converter will need a list of
+all this special cases and good rules how to handle them.
+
+
+
+
+\minisec{Long comments}
+
+Longer commands (in the PGN in curly braces) could be handled  either
+by adding a \cs{xskakcomment} at the begin of the comment or by
+ending the parsing and starting it again after the comment. The first
+method has the advantage that one can use styles to format to some
+extend the comments (or gobble them) but can cause problems if the
+comment contains something that isn't allowed in the argument of a
+command.
+
+I think some real examples are needed to decide what is the best way.
+
+
+\minisec{The content of long comments}
+
+I don't think that is possible to handle all possible contents
+automatically and get a  suitable result for \LaTeX. You will either
+have to follow some rules while inputing the comments or tidy them up
+later.
+
+But a converter will probably be able to identify moves like
+\texttt{4.\,\,Nf3} and to surround them by suitable
+\verb+\variation[style=...,level=...]{...}+.
+
+\minisec{Diagrams}
+
+Some chess applications let you put markers at places where you would
+like to print a diagram. E.g. chessbase put
+\texttt{Diagramm~\#}\footnote{I don't know if «Diagramm» is language
+dependent. Probably yes.} in a comment.
+
+A converter should also be able to recognize such markers for
+diagrams. But it is not easy to decide what should be done with this
+markers. In some cases you would probably not want to print boards at
+all. Sometimes the game should be interrupted and the diagram printed
+directly. Sometimes it should float. And I recall that someone once
+tried to put all diagrams in the order there were mentioned in the
+margin. If such markers are used it is probably the best if the
+converter sets a tag and sets one of the fake NAG's \texttt{\$D} and
+\texttt{\$d}. Then \cs{printchessgame} and the list of diagrams could
+be used to print the moves and the diagrams in the intended order
+(but it will probably need some coding to get the right results). The
+tag and the NAG should be move outside of the comment as the comment
+isn't processed in all cases.
+
+\begin{lstlisting}[caption={Input and suggested output for diagram
+markers}]
+ 10. c3 e5 $1 {Diagramm # Die energische und konsequente
+ Fortsetzung, Schwarz öffnet das Zentrum, um seine Figuren zu
+ aktivieren.} 11. h3
+\end{lstlisting}
+
+\begin{lstlisting}
+ \mainline{10. c3 e5\xskakset{tag=dia1} $d $1
+  \xskakcomment{ Die energische und konsequente Fortsetzung,
+ Schwarz öffnet das Zentrum, um seine Figuren zu aktivieren. }
+ 11. h3}
+\end{lstlisting}
+
+
+
+
+\minisec{Variations}
+
+Here starts the real problems. Even if we forget for the moment the
+parsing of moves and diagrams it is not easy to describe a suitable
+output. The main problems come from the fact that styles and good
+typesetting are involved: E.g. PGN code two variations in a row as
+\texttt{(1...~e5) (1...~e6)}. But you would probably print this as
+(\variation{1... e5}; \variation{1... e6}).
+
+So the converter will have to look ahead and use suitable «open»,
+«middle», «close» and «single» styles  in the different combinations.
+
+If you make long analyzes you will probably want to use numbered list
+for  the variations  -- but not every variation is so important that
+it need its own number. In this case there must be a marker that
+tells the converter to handle this variation differently.
+
+I haven't solved all this problems but I think that the following
+code could be used as starting point for further discussion about a
+\LaTeX-chess input\footnote{If one really wants to parse all
+variations a better  naming for the nodes is needed.}:
+
+\begin{lstlisting}
+ \newchessgame[id=main, ...]
+ \mainline{...}
+  %new var level
+  \newchessgame[newvar=main,id=var1a]%
+  \mainline[level=1open]{.....}
+  %same var level
+  \newchessgame[newvar=main,id=var1b]%
+  \mainline[level=1close]{....}
+    %new var level
+    \newchessgame[newvar=var1b,id=var2a]%
+    \mainline[level=2single]{....}
+  %% return to var1b:
+  \resumechessgame[id=var1b]
+  \mainline[level=1open]{....}
+\end{lstlisting}
+
+
+\minisec{Initialization and title}
+
+Until now I have only discussed the game itself. But you would
+probably want to print titles, make table of contents and other
+lists. So one should also add some generic commands or environments
+like \verb+\begin{chessgame}+/\hspace{0pt}\verb+\end{chessgame}+ and
+\verb+{\chessgameheader}+ to each game.
+
+
+
+
+
+
+\section{Compability issues}
+\subsection{\texorpdfstring{\packagename{xskak} and
+\packagename{texmate}}{xskak and texmate}}\index{texmate}
+
+It will probably work fine to use both packages in one document.
+
+\cs{newchessgame} and \cs{resumechessgame} will both internally issue
+a \cs{fenposition} command that will setup the games also for
+\packagename{texmate}. This naturally means in return that both
+commands interfere with \packagename{texmate}!
+
+You can't benefit of the extended input possibilities for NAG's and
+comments. \packagename{texmate} has its own parsing method.
+
+Btw: If you are using  \packagename{texmate} you should always indent
+your input as the package doesn't recognize new lines as spaces.
+
+\subsection{\texorpdfstring{\packagename{xskak} and
+\packagename{beamer}}{xskak and beamer}}\index{beamer}
+
+When making presentations with \packagename{beamer} you should
+remember two things: First you can't use verbatim material or other
+commands that relies on catcode changes in the
+\texttt{frame}-environment or -command. That means for \skaksty that
+you can't use \# in a \cs{mainline} but should replace it by
+\cs{mate}.
+
+Second, if you are using overlays the content of the frame is
+processed more than once. That means that you should be careful to
+reset counters if you don't want to run into never ending loops.
+
+The following listing shows an example how to print a chessgame with
+beamer. If your pdf-reader can handle annotations you can see the
+result in the attached file: \attachfile{xskak_and_beamer.pdf} It
+uses overlays (which worked fine) and also shows how you can handle
+games in another language:
+
+\lstinputlisting{xskak_and_beamer.tex}
+
+\phantomsection
+\makeatletter\def\index at prologue{\section*{Index}\addcontentsline{toc}{section}{Index}}\makeatother
+\printindex
+\end{document}
+
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xskak/xskak.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.pdf	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.pdf	2019-06-23 20:59:18 UTC (rev 51432)

Property changes on: trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.tex	2019-06-23 20:59:18 UTC (rev 51432)
@@ -0,0 +1,63 @@
+\documentclass{beamer}
+\usepackage[LSBC4,T1]{fontenc}
+\usepackage{chessboard}
+\usepackage{xskak}
+
+\newcommand\getmovestyle[1]{%
+ \ifthenelse
+   {\equal{#1}{N}}%knight move
+   {\def\mymovestyle{[clockwise=false,style=knight]curvemove}}
+   {\ifthenelse
+     {\equal{#1}{}}% castling
+     {\def\mymovestyle{curvemove}}
+     {\def\mymovestyle{straightmove}}}}
+
+
+\setboardfontencoding{LSBC4}
+\newskaklanguage{german}{KDTLSB}
+\skaklanguage[german]
+
+\begin{document}
+\newchessgame[white=Paethz,black=Dirr,result=0-1]
+\hidemoves{%
+1.d4 Sf6 2.c4 g6 3.Sc3 Lg7 4.e4 d6 5.Sge2 O-O 6.Sg3 c6 7.Le2 a6 8.a4
+a5 9.h4 h5 10.Le3 Sa6 11.f3 e5 12.d5 Sd7 13.Sf1 Sdc5 14.Sd2 Db6
+15.Db1 Sb4 16.Sb3 Scd3+ 17.Kd2 Dxe3+}
+
+\newcounter{chessmoves}
+
+
+\begin{frame}{\xskakgetgame{white} -- \xskakgetgame{black}}
+
+\begin{columns}[T]
+\column[T]{0.5\textwidth}
+\setcounter{chessmoves}{0}%
+\xskakloop{%
+ \getmovestyle{\xskakget{piecechar}}%
+ \refstepcounter{chessmoves}%
+ \only<\arabic{chessmoves}>{%
+  \chessboard[%
+   margin=false,showmover=false,inverse,
+   pgfstyle=\mymovestyle,color=blue,
+   linewidth=0.1em, pgfshortenend=0.4em,
+   arrow=to, markmoves=\xskakget{move},
+   setfen=\xskakget{nextfen},
+   coloremph,piececolor=blue,
+   emphfields={\xskakget{moveto}}
+]\par
+   }%
+   }
+
+\column[T]{0.45\textwidth}%
+\renewcommand\baselinestretch{1.2}\footnotesize
+\setcounter{chessmoves}{0}%
+\xskakloop{%
+ \refstepcounter{chessmoves}%
+ { \color<\arabic{chessmoves}>{blue}%
+   \uncover<\arabic{chessmoves}->{%
+   \ifthenelse{\equal{\xskakget{player}}{w}}
+    {\xskakget{opennr}}{}\xskakget{lan}}}}
+\xskakgetgame{result}
+\end{columns}
+\end{frame}
+\end{document}


Property changes on: trunk/Master/texmf-dist/doc/latex/xskak/xskak_and_beamer.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/latex/xskak/xskakgames.xsk
===================================================================
--- trunk/Master/texmf-dist/doc/latex/xskak/xskakgames.xsk	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/latex/xskak/xskakgames.xsk	2019-06-23 20:59:18 UTC (rev 51432)
@@ -0,0 +1,1303 @@
+%This are games exported with xskak.sty
+%The options were: games={export,exportb} 
+%17.10.2008
+%
+%Start of game export
+%
+\expandafter \def \csname Xskakexportinitfen\endcsname {rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1}\relax 
+\expandafter \def \csname Xskakexportinitplayer\endcsname {w}\relax 
+\expandafter \def \csname Xskakexportinitmovenr\endcsname {1}\relax 
+\expandafter \def \csname Xskakexportinitmoveid\endcsname {1w}\relax 
+\expandafter \def \csname Xskakexportlastfen\endcsname {r1k4r/p2nb1p1/2b4p/1p1n1p2/2PP4/3Q1NB1/1P3PPP/R5K1 b - c3 0 19}\relax 
+\expandafter \def \csname Xskakexportlastplayer\endcsname {w}\relax 
+\expandafter \def \csname Xskakexportlastmovenr\endcsname {19}\relax 
+\expandafter \def \csname Xskakexportlastmoveid\endcsname {19w}\relax 
+\expandafter \def \csname Xskakexportnextplayer\endcsname {b}\relax 
+\expandafter \def \csname Xskakexportnextmovenr\endcsname {19}\relax 
+\expandafter \def \csname Xskakexportnextmoveid\endcsname {19b}\relax 
+\expandafter \def \csname Xskakexportdiagramlist\endcsname {}\relax 
+\expandafter \def \csname Xskakexportgameid\endcsname {export}\relax 
+\expandafter \def \csname Xskakexportresult\endcsname {1-0}\relax 
+\expandafter \def \csname Xskakexportsite\endcsname {}\relax 
+\expandafter \def \csname Xskakexportevent\endcsname {}\relax 
+\expandafter \def \csname Xskakexportdate\endcsname {}\relax 
+\expandafter \def \csname Xskakexportround\endcsname {}\relax 
+\expandafter \def \csname Xskakexportwhite\endcsname {Deep Blue}\relax 
+\expandafter \def \csname Xskakexportblack\endcsname {Kasparov}\relax 
+\expandafter \def \csname Xskakexportblackelo\endcsname {}\relax 
+\expandafter \def \csname Xskakexportwhiteelo\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.w.movenr\endcsname {\Xskak.export.1.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.1.w.player\endcsname {\Xskak.export.1.w.player }\relax 
+\expandafter \def \csname Xskak.export.1.w.moveid\endcsname {\Xskak.export.1.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.1.w.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.w.piece\endcsname {P}\relax 
+\expandafter \def \csname Xskak.export.1.w.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.1.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.w.movefrom\endcsname {e2}\relax 
+\expandafter \def \csname Xskak.export.1.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.w.moveto\endcsname {e4}\relax 
+\expandafter \def \csname Xskak.export.1.w.move\endcsname {e2-e4}\relax 
+\expandafter \def \csname Xskak.export.1.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.w.enpassantsquare\endcsname {e3}\relax 
+\expandafter \def \csname Xskak.export.1.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.w.addpieces\endcsname {Pe4}\relax 
+\expandafter \def \csname Xskak.export.1.w.clearfields\endcsname {e2}\relax 
+\expandafter \def \csname Xskak.export.1.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.w.nextfen\endcsname {rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1}\relax 
+\expandafter \def \csname Xskak.export.1.w.pastfen\endcsname {rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1}\relax 
+\expandafter \def \csname Xskak.export.1.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.w.san\endcsname {e4}\relax 
+\expandafter \def \csname Xskak.export.1.w.lan\endcsname {e2\xskakmovehyphen e4}\relax 
+\expandafter \def \csname Xskak.export.1.w.opennr\endcsname {1\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.1.b.movenr\endcsname {\Xskak.export.1.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.1.b.player\endcsname {\Xskak.export.1.b.player }\relax 
+\expandafter \def \csname Xskak.export.1.b.moveid\endcsname {\Xskak.export.1.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.1.b.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.b.piece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.1.b.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.1.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.b.movefrom\endcsname {c7}\relax 
+\expandafter \def \csname Xskak.export.1.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.b.moveto\endcsname {c6}\relax 
+\expandafter \def \csname Xskak.export.1.b.move\endcsname {c7-c6}\relax 
+\expandafter \def \csname Xskak.export.1.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.1.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.1.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.b.addpieces\endcsname {pc6}\relax 
+\expandafter \def \csname Xskak.export.1.b.clearfields\endcsname {c7}\relax 
+\expandafter \def \csname Xskak.export.1.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.b.nextfen\endcsname {rnbqkbnr/pp1ppppp/2p5/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2}\relax 
+\expandafter \def \csname Xskak.export.1.b.pastfen\endcsname {rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1}\relax 
+\expandafter \def \csname Xskak.export.1.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.1.b.san\endcsname {c6}\relax 
+\expandafter \def \csname Xskak.export.1.b.lan\endcsname {c7\xskakmovehyphen c6}\relax 
+\expandafter \def \csname Xskak.export.1.b.opennr\endcsname {1\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.2.w.movenr\endcsname {\Xskak.export.2.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.2.w.player\endcsname {\Xskak.export.2.w.player }\relax 
+\expandafter \def \csname Xskak.export.2.w.moveid\endcsname {\Xskak.export.2.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.2.w.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.w.piece\endcsname {P}\relax 
+\expandafter \def \csname Xskak.export.2.w.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.2.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.w.movefrom\endcsname {d2}\relax 
+\expandafter \def \csname Xskak.export.2.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.w.moveto\endcsname {d4}\relax 
+\expandafter \def \csname Xskak.export.2.w.move\endcsname {d2-d4}\relax 
+\expandafter \def \csname Xskak.export.2.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.w.enpassantsquare\endcsname {d3}\relax 
+\expandafter \def \csname Xskak.export.2.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.w.addpieces\endcsname {Pd4}\relax 
+\expandafter \def \csname Xskak.export.2.w.clearfields\endcsname {d2}\relax 
+\expandafter \def \csname Xskak.export.2.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.w.nextfen\endcsname {rnbqkbnr/pp1ppppp/2p5/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq d3 0 2}\relax 
+\expandafter \def \csname Xskak.export.2.w.pastfen\endcsname {rnbqkbnr/pp1ppppp/2p5/8/4P3/8/PPPP1PPP/RNBQKBNR w KQkq - 0 2}\relax 
+\expandafter \def \csname Xskak.export.2.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.w.san\endcsname {d4}\relax 
+\expandafter \def \csname Xskak.export.2.w.lan\endcsname {d2\xskakmovehyphen d4}\relax 
+\expandafter \def \csname Xskak.export.2.w.opennr\endcsname {2\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.2.b.movenr\endcsname {\Xskak.export.2.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.2.b.player\endcsname {\Xskak.export.2.b.player }\relax 
+\expandafter \def \csname Xskak.export.2.b.moveid\endcsname {\Xskak.export.2.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.2.b.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.b.piece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.2.b.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.2.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.b.movefrom\endcsname {d7}\relax 
+\expandafter \def \csname Xskak.export.2.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.b.moveto\endcsname {d5}\relax 
+\expandafter \def \csname Xskak.export.2.b.move\endcsname {d7-d5}\relax 
+\expandafter \def \csname Xskak.export.2.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.b.enpassantsquare\endcsname {d6}\relax 
+\expandafter \def \csname Xskak.export.2.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.2.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.b.addpieces\endcsname {pd5}\relax 
+\expandafter \def \csname Xskak.export.2.b.clearfields\endcsname {d7}\relax 
+\expandafter \def \csname Xskak.export.2.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.b.nextfen\endcsname {rnbqkbnr/pp2pppp/2p5/3p4/3PP3/8/PPP2PPP/RNBQKBNR w KQkq d6 0 3}\relax 
+\expandafter \def \csname Xskak.export.2.b.pastfen\endcsname {rnbqkbnr/pp1ppppp/2p5/8/3PP3/8/PPP2PPP/RNBQKBNR b KQkq d3 0 2}\relax 
+\expandafter \def \csname Xskak.export.2.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.2.b.san\endcsname {d5}\relax 
+\expandafter \def \csname Xskak.export.2.b.lan\endcsname {d7\xskakmovehyphen d5}\relax 
+\expandafter \def \csname Xskak.export.2.b.opennr\endcsname {2\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.3.w.movenr\endcsname {\Xskak.export.3.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.3.w.player\endcsname {\Xskak.export.3.w.player }\relax 
+\expandafter \def \csname Xskak.export.3.w.moveid\endcsname {\Xskak.export.3.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.3.w.pgnpiece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.3.w.piece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.3.w.piecechar\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.3.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.w.movefrom\endcsname {b1}\relax 
+\expandafter \def \csname Xskak.export.3.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.w.moveto\endcsname {c3}\relax 
+\expandafter \def \csname Xskak.export.3.w.move\endcsname {b1-c3}\relax 
+\expandafter \def \csname Xskak.export.3.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.3.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.w.addpieces\endcsname {Nc3}\relax 
+\expandafter \def \csname Xskak.export.3.w.clearfields\endcsname {b1}\relax 
+\expandafter \def \csname Xskak.export.3.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.w.nextfen\endcsname {rnbqkbnr/pp2pppp/2p5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3}\relax 
+\expandafter \def \csname Xskak.export.3.w.pastfen\endcsname {rnbqkbnr/pp2pppp/2p5/3p4/3PP3/8/PPP2PPP/RNBQKBNR w KQkq d6 0 3}\relax 
+\expandafter \def \csname Xskak.export.3.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.w.san\endcsname {\textsymfigsymbol {N}c3}\relax 
+\expandafter \def \csname Xskak.export.3.w.lan\endcsname {\textsymfigsymbol {N}b1\xskakmovehyphen c3}\relax 
+\expandafter \def \csname Xskak.export.3.w.opennr\endcsname {3\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.3.b.movenr\endcsname {\Xskak.export.3.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.3.b.player\endcsname {\Xskak.export.3.b.player }\relax 
+\expandafter \def \csname Xskak.export.3.b.moveid\endcsname {\Xskak.export.3.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.3.b.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.b.piece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.3.b.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.3.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.b.capture\endcsname {\setboolean {xskakboolcapture}{true}}\relax 
+\expandafter \def \csname Xskak.export.3.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.b.lostpiece\endcsname {P}\relax 
+\expandafter \def \csname Xskak.export.3.b.lostpiecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.3.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.b.movefrom\endcsname {d5}\relax 
+\expandafter \def \csname Xskak.export.3.b.pgnmovefrom\endcsname {d}\relax 
+\expandafter \def \csname Xskak.export.3.b.moveto\endcsname {e4}\relax 
+\expandafter \def \csname Xskak.export.3.b.move\endcsname {d5-e4}\relax 
+\expandafter \def \csname Xskak.export.3.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.3.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.3.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.b.addpieces\endcsname {pe4}\relax 
+\expandafter \def \csname Xskak.export.3.b.clearfields\endcsname {d5}\relax 
+\expandafter \def \csname Xskak.export.3.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.b.nextfen\endcsname {rnbqkbnr/pp2pppp/2p5/8/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4}\relax 
+\expandafter \def \csname Xskak.export.3.b.pastfen\endcsname {rnbqkbnr/pp2pppp/2p5/3p4/3PP3/2N5/PPP2PPP/R1BQKBNR b KQkq - 1 3}\relax 
+\expandafter \def \csname Xskak.export.3.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.3.b.san\endcsname {d\capturesymbol e4}\relax 
+\expandafter \def \csname Xskak.export.3.b.lan\endcsname {d5\capturesymbol e4}\relax 
+\expandafter \def \csname Xskak.export.3.b.opennr\endcsname {3\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.4.w.movenr\endcsname {\Xskak.export.4.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.4.w.player\endcsname {\Xskak.export.4.w.player }\relax 
+\expandafter \def \csname Xskak.export.4.w.moveid\endcsname {\Xskak.export.4.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.4.w.pgnpiece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.4.w.piece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.4.w.piecechar\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.4.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.w.capture\endcsname {\setboolean {xskakboolcapture}{true}}\relax 
+\expandafter \def \csname Xskak.export.4.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.w.lostpiece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.4.w.lostpiecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.4.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.w.movefrom\endcsname {c3}\relax 
+\expandafter \def \csname Xskak.export.4.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.w.moveto\endcsname {e4}\relax 
+\expandafter \def \csname Xskak.export.4.w.move\endcsname {c3-e4}\relax 
+\expandafter \def \csname Xskak.export.4.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.4.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.w.addpieces\endcsname {Ne4}\relax 
+\expandafter \def \csname Xskak.export.4.w.clearfields\endcsname {c3}\relax 
+\expandafter \def \csname Xskak.export.4.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.w.nextfen\endcsname {rnbqkbnr/pp2pppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR b KQkq - 0 4}\relax 
+\expandafter \def \csname Xskak.export.4.w.pastfen\endcsname {rnbqkbnr/pp2pppp/2p5/8/3Pp3/2N5/PPP2PPP/R1BQKBNR w KQkq - 0 4}\relax 
+\expandafter \def \csname Xskak.export.4.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.w.san\endcsname {\textsymfigsymbol {N}\capturesymbol e4}\relax 
+\expandafter \def \csname Xskak.export.4.w.lan\endcsname {\textsymfigsymbol {N}c3\capturesymbol e4}\relax 
+\expandafter \def \csname Xskak.export.4.w.opennr\endcsname {4\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.4.b.movenr\endcsname {\Xskak.export.4.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.4.b.player\endcsname {\Xskak.export.4.b.player }\relax 
+\expandafter \def \csname Xskak.export.4.b.moveid\endcsname {\Xskak.export.4.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.4.b.pgnpiece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.4.b.piece\endcsname {n}\relax 
+\expandafter \def \csname Xskak.export.4.b.piecechar\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.4.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.b.movefrom\endcsname {b8}\relax 
+\expandafter \def \csname Xskak.export.4.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.b.moveto\endcsname {d7}\relax 
+\expandafter \def \csname Xskak.export.4.b.move\endcsname {b8-d7}\relax 
+\expandafter \def \csname Xskak.export.4.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.4.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.4.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.b.addpieces\endcsname {nd7}\relax 
+\expandafter \def \csname Xskak.export.4.b.clearfields\endcsname {b8}\relax 
+\expandafter \def \csname Xskak.export.4.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.b.nextfen\endcsname {r1bqkbnr/pp1npppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5}\relax 
+\expandafter \def \csname Xskak.export.4.b.pastfen\endcsname {rnbqkbnr/pp2pppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR b KQkq - 0 4}\relax 
+\expandafter \def \csname Xskak.export.4.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.4.b.san\endcsname {\textsymfigsymbol {N}d7}\relax 
+\expandafter \def \csname Xskak.export.4.b.lan\endcsname {\textsymfigsymbol {N}b8\xskakmovehyphen d7}\relax 
+\expandafter \def \csname Xskak.export.4.b.opennr\endcsname {4\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.5.w.movenr\endcsname {\Xskak.export.5.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.5.w.player\endcsname {\Xskak.export.5.w.player }\relax 
+\expandafter \def \csname Xskak.export.5.w.moveid\endcsname {\Xskak.export.5.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.5.w.pgnpiece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.5.w.piece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.5.w.piecechar\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.5.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.w.movefrom\endcsname {e4}\relax 
+\expandafter \def \csname Xskak.export.5.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.w.moveto\endcsname {g5}\relax 
+\expandafter \def \csname Xskak.export.5.w.move\endcsname {e4-g5}\relax 
+\expandafter \def \csname Xskak.export.5.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.5.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.w.addpieces\endcsname {Ng5}\relax 
+\expandafter \def \csname Xskak.export.5.w.clearfields\endcsname {e4}\relax 
+\expandafter \def \csname Xskak.export.5.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.w.nextfen\endcsname {r1bqkbnr/pp1npppp/2p5/6N1/3P4/8/PPP2PPP/R1BQKBNR b KQkq - 2 5}\relax 
+\expandafter \def \csname Xskak.export.5.w.pastfen\endcsname {r1bqkbnr/pp1npppp/2p5/8/3PN3/8/PPP2PPP/R1BQKBNR w KQkq - 1 5}\relax 
+\expandafter \def \csname Xskak.export.5.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.w.san\endcsname {\textsymfigsymbol {N}g5}\relax 
+\expandafter \def \csname Xskak.export.5.w.lan\endcsname {\textsymfigsymbol {N}e4\xskakmovehyphen g5}\relax 
+\expandafter \def \csname Xskak.export.5.w.opennr\endcsname {5\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.5.b.movenr\endcsname {\Xskak.export.5.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.5.b.player\endcsname {\Xskak.export.5.b.player }\relax 
+\expandafter \def \csname Xskak.export.5.b.moveid\endcsname {\Xskak.export.5.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.5.b.pgnpiece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.5.b.piece\endcsname {n}\relax 
+\expandafter \def \csname Xskak.export.5.b.piecechar\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.5.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.b.movefrom\endcsname {g8}\relax 
+\expandafter \def \csname Xskak.export.5.b.pgnmovefrom\endcsname {g}\relax 
+\expandafter \def \csname Xskak.export.5.b.moveto\endcsname {f6}\relax 
+\expandafter \def \csname Xskak.export.5.b.move\endcsname {g8-f6}\relax 
+\expandafter \def \csname Xskak.export.5.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.5.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.5.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.b.addpieces\endcsname {nf6}\relax 
+\expandafter \def \csname Xskak.export.5.b.clearfields\endcsname {g8}\relax 
+\expandafter \def \csname Xskak.export.5.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.b.nextfen\endcsname {r1bqkb1r/pp1npppp/2p2n2/6N1/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 3 6}\relax 
+\expandafter \def \csname Xskak.export.5.b.pastfen\endcsname {r1bqkbnr/pp1npppp/2p5/6N1/3P4/8/PPP2PPP/R1BQKBNR b KQkq - 2 5}\relax 
+\expandafter \def \csname Xskak.export.5.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.5.b.san\endcsname {\textsymfigsymbol {N}gf6}\relax 
+\expandafter \def \csname Xskak.export.5.b.lan\endcsname {\textsymfigsymbol {N}g8\xskakmovehyphen f6}\relax 
+\expandafter \def \csname Xskak.export.5.b.opennr\endcsname {5\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.6.w.movenr\endcsname {\Xskak.export.6.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.6.w.player\endcsname {\Xskak.export.6.w.player }\relax 
+\expandafter \def \csname Xskak.export.6.w.moveid\endcsname {\Xskak.export.6.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.6.w.pgnpiece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.6.w.piece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.6.w.piecechar\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.6.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.w.movefrom\endcsname {f1}\relax 
+\expandafter \def \csname Xskak.export.6.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.w.moveto\endcsname {d3}\relax 
+\expandafter \def \csname Xskak.export.6.w.move\endcsname {f1-d3}\relax 
+\expandafter \def \csname Xskak.export.6.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.6.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.w.addpieces\endcsname {Bd3}\relax 
+\expandafter \def \csname Xskak.export.6.w.clearfields\endcsname {f1}\relax 
+\expandafter \def \csname Xskak.export.6.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.w.nextfen\endcsname {r1bqkb1r/pp1npppp/2p2n2/6N1/3P4/3B4/PPP2PPP/R1BQK1NR b KQkq - 4 6}\relax 
+\expandafter \def \csname Xskak.export.6.w.pastfen\endcsname {r1bqkb1r/pp1npppp/2p2n2/6N1/3P4/8/PPP2PPP/R1BQKBNR w KQkq - 3 6}\relax 
+\expandafter \def \csname Xskak.export.6.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.w.san\endcsname {\textsymfigsymbol {B}d3}\relax 
+\expandafter \def \csname Xskak.export.6.w.lan\endcsname {\textsymfigsymbol {B}f1\xskakmovehyphen d3}\relax 
+\expandafter \def \csname Xskak.export.6.w.opennr\endcsname {6\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.6.b.movenr\endcsname {\Xskak.export.6.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.6.b.player\endcsname {\Xskak.export.6.b.player }\relax 
+\expandafter \def \csname Xskak.export.6.b.moveid\endcsname {\Xskak.export.6.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.6.b.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.b.piece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.6.b.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.6.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.b.movefrom\endcsname {e7}\relax 
+\expandafter \def \csname Xskak.export.6.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.b.moveto\endcsname {e6}\relax 
+\expandafter \def \csname Xskak.export.6.b.move\endcsname {e7-e6}\relax 
+\expandafter \def \csname Xskak.export.6.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.6.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.6.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.b.addpieces\endcsname {pe6}\relax 
+\expandafter \def \csname Xskak.export.6.b.clearfields\endcsname {e7}\relax 
+\expandafter \def \csname Xskak.export.6.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.b.nextfen\endcsname {r1bqkb1r/pp1n1ppp/2p1pn2/6N1/3P4/3B4/PPP2PPP/R1BQK1NR w KQkq - 0 7}\relax 
+\expandafter \def \csname Xskak.export.6.b.pastfen\endcsname {r1bqkb1r/pp1npppp/2p2n2/6N1/3P4/3B4/PPP2PPP/R1BQK1NR b KQkq - 4 6}\relax 
+\expandafter \def \csname Xskak.export.6.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.6.b.san\endcsname {e6}\relax 
+\expandafter \def \csname Xskak.export.6.b.lan\endcsname {e7\xskakmovehyphen e6}\relax 
+\expandafter \def \csname Xskak.export.6.b.opennr\endcsname {6\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.7.w.movenr\endcsname {\Xskak.export.7.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.7.w.player\endcsname {\Xskak.export.7.w.player }\relax 
+\expandafter \def \csname Xskak.export.7.w.moveid\endcsname {\Xskak.export.7.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.7.w.pgnpiece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.7.w.piece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.7.w.piecechar\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.7.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.w.movefrom\endcsname {g1}\relax 
+\expandafter \def \csname Xskak.export.7.w.pgnmovefrom\endcsname {1}\relax 
+\expandafter \def \csname Xskak.export.7.w.moveto\endcsname {f3}\relax 
+\expandafter \def \csname Xskak.export.7.w.move\endcsname {g1-f3}\relax 
+\expandafter \def \csname Xskak.export.7.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.7.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.w.addpieces\endcsname {Nf3}\relax 
+\expandafter \def \csname Xskak.export.7.w.clearfields\endcsname {g1}\relax 
+\expandafter \def \csname Xskak.export.7.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.w.nextfen\endcsname {r1bqkb1r/pp1n1ppp/2p1pn2/6N1/3P4/3B1N2/PPP2PPP/R1BQK2R b KQkq - 1 7}\relax 
+\expandafter \def \csname Xskak.export.7.w.pastfen\endcsname {r1bqkb1r/pp1n1ppp/2p1pn2/6N1/3P4/3B4/PPP2PPP/R1BQK1NR w KQkq - 0 7}\relax 
+\expandafter \def \csname Xskak.export.7.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.w.san\endcsname {\textsymfigsymbol {N}1f3}\relax 
+\expandafter \def \csname Xskak.export.7.w.lan\endcsname {\textsymfigsymbol {N}g1\xskakmovehyphen f3}\relax 
+\expandafter \def \csname Xskak.export.7.w.opennr\endcsname {7\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.7.b.movenr\endcsname {\Xskak.export.7.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.7.b.player\endcsname {\Xskak.export.7.b.player }\relax 
+\expandafter \def \csname Xskak.export.7.b.moveid\endcsname {\Xskak.export.7.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.7.b.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.b.piece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.7.b.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.7.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.b.movefrom\endcsname {h7}\relax 
+\expandafter \def \csname Xskak.export.7.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.b.moveto\endcsname {h6}\relax 
+\expandafter \def \csname Xskak.export.7.b.move\endcsname {h7-h6}\relax 
+\expandafter \def \csname Xskak.export.7.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.7.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.7.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.b.addpieces\endcsname {ph6}\relax 
+\expandafter \def \csname Xskak.export.7.b.clearfields\endcsname {h7}\relax 
+\expandafter \def \csname Xskak.export.7.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.b.nextfen\endcsname {r1bqkb1r/pp1n1pp1/2p1pn1p/6N1/3P4/3B1N2/PPP2PPP/R1BQK2R w KQkq - 0 8}\relax 
+\expandafter \def \csname Xskak.export.7.b.pastfen\endcsname {r1bqkb1r/pp1n1ppp/2p1pn2/6N1/3P4/3B1N2/PPP2PPP/R1BQK2R b KQkq - 1 7}\relax 
+\expandafter \def \csname Xskak.export.7.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.7.b.san\endcsname {h6}\relax 
+\expandafter \def \csname Xskak.export.7.b.lan\endcsname {h7\xskakmovehyphen h6}\relax 
+\expandafter \def \csname Xskak.export.7.b.opennr\endcsname {7\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.8.w.movenr\endcsname {\Xskak.export.8.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.8.w.player\endcsname {\Xskak.export.8.w.player }\relax 
+\expandafter \def \csname Xskak.export.8.w.moveid\endcsname {\Xskak.export.8.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.8.w.pgnpiece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.8.w.piece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.8.w.piecechar\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.8.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.w.capture\endcsname {\setboolean {xskakboolcapture}{true}}\relax 
+\expandafter \def \csname Xskak.export.8.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.w.lostpiece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.8.w.lostpiecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.8.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.w.movefrom\endcsname {g5}\relax 
+\expandafter \def \csname Xskak.export.8.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.w.moveto\endcsname {e6}\relax 
+\expandafter \def \csname Xskak.export.8.w.move\endcsname {g5-e6}\relax 
+\expandafter \def \csname Xskak.export.8.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.8.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.w.addpieces\endcsname {Ne6}\relax 
+\expandafter \def \csname Xskak.export.8.w.clearfields\endcsname {g5}\relax 
+\expandafter \def \csname Xskak.export.8.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.w.nextfen\endcsname {r1bqkb1r/pp1n1pp1/2p1Nn1p/8/3P4/3B1N2/PPP2PPP/R1BQK2R b KQkq - 0 8}\relax 
+\expandafter \def \csname Xskak.export.8.w.pastfen\endcsname {r1bqkb1r/pp1n1pp1/2p1pn1p/6N1/3P4/3B1N2/PPP2PPP/R1BQK2R w KQkq - 0 8}\relax 
+\expandafter \def \csname Xskak.export.8.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.w.san\endcsname {\textsymfigsymbol {N}\capturesymbol e6}\relax 
+\expandafter \def \csname Xskak.export.8.w.lan\endcsname {\textsymfigsymbol {N}g5\capturesymbol e6}\relax 
+\expandafter \def \csname Xskak.export.8.w.opennr\endcsname {8\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.8.b.movenr\endcsname {\Xskak.export.8.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.8.b.player\endcsname {\Xskak.export.8.b.player }\relax 
+\expandafter \def \csname Xskak.export.8.b.moveid\endcsname {\Xskak.export.8.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.8.b.pgnpiece\endcsname {Q}\relax 
+\expandafter \def \csname Xskak.export.8.b.piece\endcsname {q}\relax 
+\expandafter \def \csname Xskak.export.8.b.piecechar\endcsname {Q}\relax 
+\expandafter \def \csname Xskak.export.8.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.b.movefrom\endcsname {d8}\relax 
+\expandafter \def \csname Xskak.export.8.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.b.moveto\endcsname {e7}\relax 
+\expandafter \def \csname Xskak.export.8.b.move\endcsname {d8-e7}\relax 
+\expandafter \def \csname Xskak.export.8.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.8.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.8.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.b.addpieces\endcsname {qe7}\relax 
+\expandafter \def \csname Xskak.export.8.b.clearfields\endcsname {d8}\relax 
+\expandafter \def \csname Xskak.export.8.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.b.nextfen\endcsname {r1b1kb1r/pp1nqpp1/2p1Nn1p/8/3P4/3B1N2/PPP2PPP/R1BQK2R w KQkq - 1 9}\relax 
+\expandafter \def \csname Xskak.export.8.b.pastfen\endcsname {r1bqkb1r/pp1n1pp1/2p1Nn1p/8/3P4/3B1N2/PPP2PPP/R1BQK2R b KQkq - 0 8}\relax 
+\expandafter \def \csname Xskak.export.8.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.8.b.san\endcsname {\textsymfigsymbol {Q}e7}\relax 
+\expandafter \def \csname Xskak.export.8.b.lan\endcsname {\textsymfigsymbol {Q}d8\xskakmovehyphen e7}\relax 
+\expandafter \def \csname Xskak.export.8.b.opennr\endcsname {8\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.9.w.movenr\endcsname {\Xskak.export.9.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.9.w.player\endcsname {\Xskak.export.9.w.player }\relax 
+\expandafter \def \csname Xskak.export.9.w.moveid\endcsname {\Xskak.export.9.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.9.w.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.piece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.piecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.castling\endcsname {\setboolean {xskakboolcastling}{true}}\relax 
+\expandafter \def \csname Xskak.export.9.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.movefrom\endcsname {e1,h1}\relax 
+\expandafter \def \csname Xskak.export.9.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.moveto\endcsname {g1,f1}\relax 
+\expandafter \def \csname Xskak.export.9.w.move\endcsname {e1-g1,h1-f1}\relax 
+\expandafter \def \csname Xskak.export.9.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.9.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.addpieces\endcsname {Kg1,Rf1}\relax 
+\expandafter \def \csname Xskak.export.9.w.clearfields\endcsname {e1,h1}\relax 
+\expandafter \def \csname Xskak.export.9.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.nextfen\endcsname {r1b1kb1r/pp1nqpp1/2p1Nn1p/8/3P4/3B1N2/PPP2PPP/R1BQ1RK1 b kq - 2 9}\relax 
+\expandafter \def \csname Xskak.export.9.w.pastfen\endcsname {r1b1kb1r/pp1nqpp1/2p1Nn1p/8/3P4/3B1N2/PPP2PPP/R1BQK2R w KQkq - 1 9}\relax 
+\expandafter \def \csname Xskak.export.9.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.w.san\endcsname {\castlingchar \castlinghyphen \castlingchar }\relax 
+\expandafter \def \csname Xskak.export.9.w.lan\endcsname {\castlingchar \castlinghyphen \castlingchar }\relax 
+\expandafter \def \csname Xskak.export.9.w.opennr\endcsname {9\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.9.b.movenr\endcsname {\Xskak.export.9.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.9.b.player\endcsname {\Xskak.export.9.b.player }\relax 
+\expandafter \def \csname Xskak.export.9.b.moveid\endcsname {\Xskak.export.9.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.9.b.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.b.piece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.9.b.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.9.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.b.capture\endcsname {\setboolean {xskakboolcapture}{true}}\relax 
+\expandafter \def \csname Xskak.export.9.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.b.lostpiece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.9.b.lostpiecechar\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.9.b.pgnlostpiece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.9.b.movefrom\endcsname {f7}\relax 
+\expandafter \def \csname Xskak.export.9.b.pgnmovefrom\endcsname {f}\relax 
+\expandafter \def \csname Xskak.export.9.b.moveto\endcsname {e6}\relax 
+\expandafter \def \csname Xskak.export.9.b.move\endcsname {f7-e6}\relax 
+\expandafter \def \csname Xskak.export.9.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.9.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.9.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.b.addpieces\endcsname {pe6}\relax 
+\expandafter \def \csname Xskak.export.9.b.clearfields\endcsname {f7}\relax 
+\expandafter \def \csname Xskak.export.9.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.b.nextfen\endcsname {r1b1kb1r/pp1nq1p1/2p1pn1p/8/3P4/3B1N2/PPP2PPP/R1BQ1RK1 w kq - 0 10}\relax 
+\expandafter \def \csname Xskak.export.9.b.pastfen\endcsname {r1b1kb1r/pp1nqpp1/2p1Nn1p/8/3P4/3B1N2/PPP2PPP/R1BQ1RK1 b kq - 2 9}\relax 
+\expandafter \def \csname Xskak.export.9.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.9.b.san\endcsname {f\capturesymbol e6}\relax 
+\expandafter \def \csname Xskak.export.9.b.lan\endcsname {f7\capturesymbol e6}\relax 
+\expandafter \def \csname Xskak.export.9.b.opennr\endcsname {9\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.10.w.movenr\endcsname {\Xskak.export.10.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.10.w.player\endcsname {\Xskak.export.10.w.player }\relax 
+\expandafter \def \csname Xskak.export.10.w.moveid\endcsname {\Xskak.export.10.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.10.w.pgnpiece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.10.w.piece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.10.w.piecechar\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.10.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.w.check\endcsname {\setboolean {xskakboolcheck}{true}}\relax 
+\expandafter \def \csname Xskak.export.10.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.w.movefrom\endcsname {d3}\relax 
+\expandafter \def \csname Xskak.export.10.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.w.moveto\endcsname {g6}\relax 
+\expandafter \def \csname Xskak.export.10.w.move\endcsname {d3-g6}\relax 
+\expandafter \def \csname Xskak.export.10.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.10.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.w.addpieces\endcsname {Bg6}\relax 
+\expandafter \def \csname Xskak.export.10.w.clearfields\endcsname {d3}\relax 
+\expandafter \def \csname Xskak.export.10.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.w.nextfen\endcsname {r1b1kb1r/pp1nq1p1/2p1pnBp/8/3P4/5N2/PPP2PPP/R1BQ1RK1 b kq - 1 10}\relax 
+\expandafter \def \csname Xskak.export.10.w.pastfen\endcsname {r1b1kb1r/pp1nq1p1/2p1pn1p/8/3P4/3B1N2/PPP2PPP/R1BQ1RK1 w kq - 0 10}\relax 
+\expandafter \def \csname Xskak.export.10.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.w.san\endcsname {\textsymfigsymbol {B}g6\checksymbol }\relax 
+\expandafter \def \csname Xskak.export.10.w.lan\endcsname {\textsymfigsymbol {B}d3\xskakmovehyphen g6\checksymbol }\relax 
+\expandafter \def \csname Xskak.export.10.w.opennr\endcsname {10\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.10.b.movenr\endcsname {\Xskak.export.10.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.10.b.player\endcsname {\Xskak.export.10.b.player }\relax 
+\expandafter \def \csname Xskak.export.10.b.moveid\endcsname {\Xskak.export.10.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.10.b.pgnpiece\endcsname {K}\relax 
+\expandafter \def \csname Xskak.export.10.b.piece\endcsname {k}\relax 
+\expandafter \def \csname Xskak.export.10.b.piecechar\endcsname {K}\relax 
+\expandafter \def \csname Xskak.export.10.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.b.movefrom\endcsname {e8}\relax 
+\expandafter \def \csname Xskak.export.10.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.b.moveto\endcsname {d8}\relax 
+\expandafter \def \csname Xskak.export.10.b.move\endcsname {e8-d8}\relax 
+\expandafter \def \csname Xskak.export.10.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.10.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.10.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.b.addpieces\endcsname {kd8}\relax 
+\expandafter \def \csname Xskak.export.10.b.clearfields\endcsname {e8}\relax 
+\expandafter \def \csname Xskak.export.10.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.10.b.nextfen\endcsname {r1bk1b1r/pp1nq1p1/2p1pnBp/8/3P4/5N2/PPP2PPP/R1BQ1RK1 w kq - 2 11}\relax 
+\expandafter \def \csname Xskak.export.10.b.pastfen\endcsname {r1b1kb1r/pp1nq1p1/2p1pnBp/8/3P4/5N2/PPP2PPP/R1BQ1RK1 b kq - 1 10}\relax 
+\expandafter \def \csname Xskak.export.10.b.nag\endcsname {{\xskak at beforecomment {\xskakcomment {Kasparov sch\xFCttelt kurz den Kopf}}}}\relax 
+\expandafter \def \csname Xskak.export.10.b.san\endcsname {\textsymfigsymbol {K}d8}\relax 
+\expandafter \def \csname Xskak.export.10.b.lan\endcsname {\textsymfigsymbol {K}e8\xskakmovehyphen d8}\relax 
+\expandafter \def \csname Xskak.export.10.b.opennr\endcsname {10\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.11.w.movenr\endcsname {\Xskak.export.11.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.11.w.player\endcsname {\Xskak.export.11.w.player }\relax 
+\expandafter \def \csname Xskak.export.11.w.moveid\endcsname {\Xskak.export.11.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.11.w.pgnpiece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.11.w.piece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.11.w.piecechar\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.11.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.w.movefrom\endcsname {c1}\relax 
+\expandafter \def \csname Xskak.export.11.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.w.moveto\endcsname {f4}\relax 
+\expandafter \def \csname Xskak.export.11.w.move\endcsname {c1-f4}\relax 
+\expandafter \def \csname Xskak.export.11.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.11.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.w.addpieces\endcsname {Bf4}\relax 
+\expandafter \def \csname Xskak.export.11.w.clearfields\endcsname {c1}\relax 
+\expandafter \def \csname Xskak.export.11.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.w.nextfen\endcsname {r1bk1b1r/pp1nq1p1/2p1pnBp/8/3P1B2/5N2/PPP2PPP/R2Q1RK1 b - - 3 11}\relax 
+\expandafter \def \csname Xskak.export.11.w.pastfen\endcsname {r1bk1b1r/pp1nq1p1/2p1pnBp/8/3P4/5N2/PPP2PPP/R1BQ1RK1 w kq - 2 11}\relax 
+\expandafter \def \csname Xskak.export.11.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.w.san\endcsname {\textsymfigsymbol {B}f4}\relax 
+\expandafter \def \csname Xskak.export.11.w.lan\endcsname {\textsymfigsymbol {B}c1\xskakmovehyphen f4}\relax 
+\expandafter \def \csname Xskak.export.11.w.opennr\endcsname {11\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.11.b.movenr\endcsname {\Xskak.export.11.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.11.b.player\endcsname {\Xskak.export.11.b.player }\relax 
+\expandafter \def \csname Xskak.export.11.b.moveid\endcsname {\Xskak.export.11.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.11.b.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.b.piece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.11.b.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.11.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.b.movefrom\endcsname {b7}\relax 
+\expandafter \def \csname Xskak.export.11.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.b.moveto\endcsname {b5}\relax 
+\expandafter \def \csname Xskak.export.11.b.move\endcsname {b7-b5}\relax 
+\expandafter \def \csname Xskak.export.11.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.b.enpassantsquare\endcsname {b6}\relax 
+\expandafter \def \csname Xskak.export.11.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.11.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.b.addpieces\endcsname {pb5}\relax 
+\expandafter \def \csname Xskak.export.11.b.clearfields\endcsname {b7}\relax 
+\expandafter \def \csname Xskak.export.11.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.b.nextfen\endcsname {r1bk1b1r/p2nq1p1/2p1pnBp/1p6/3P1B2/5N2/PPP2PPP/R2Q1RK1 w - b6 0 12}\relax 
+\expandafter \def \csname Xskak.export.11.b.pastfen\endcsname {r1bk1b1r/pp1nq1p1/2p1pnBp/8/3P1B2/5N2/PPP2PPP/R2Q1RK1 b - - 3 11}\relax 
+\expandafter \def \csname Xskak.export.11.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.11.b.san\endcsname {b5}\relax 
+\expandafter \def \csname Xskak.export.11.b.lan\endcsname {b7\xskakmovehyphen b5}\relax 
+\expandafter \def \csname Xskak.export.11.b.opennr\endcsname {11\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.12.w.movenr\endcsname {\Xskak.export.12.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.12.w.player\endcsname {\Xskak.export.12.w.player }\relax 
+\expandafter \def \csname Xskak.export.12.w.moveid\endcsname {\Xskak.export.12.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.12.w.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.w.piece\endcsname {P}\relax 
+\expandafter \def \csname Xskak.export.12.w.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.12.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.w.movefrom\endcsname {a2}\relax 
+\expandafter \def \csname Xskak.export.12.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.w.moveto\endcsname {a4}\relax 
+\expandafter \def \csname Xskak.export.12.w.move\endcsname {a2-a4}\relax 
+\expandafter \def \csname Xskak.export.12.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.w.enpassantsquare\endcsname {a3}\relax 
+\expandafter \def \csname Xskak.export.12.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.w.addpieces\endcsname {Pa4}\relax 
+\expandafter \def \csname Xskak.export.12.w.clearfields\endcsname {a2}\relax 
+\expandafter \def \csname Xskak.export.12.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.w.nextfen\endcsname {r1bk1b1r/p2nq1p1/2p1pnBp/1p6/P2P1B2/5N2/1PP2PPP/R2Q1RK1 b - a3 0 12}\relax 
+\expandafter \def \csname Xskak.export.12.w.pastfen\endcsname {r1bk1b1r/p2nq1p1/2p1pnBp/1p6/3P1B2/5N2/PPP2PPP/R2Q1RK1 w - b6 0 12}\relax 
+\expandafter \def \csname Xskak.export.12.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.w.san\endcsname {a4}\relax 
+\expandafter \def \csname Xskak.export.12.w.lan\endcsname {a2\xskakmovehyphen a4}\relax 
+\expandafter \def \csname Xskak.export.12.w.opennr\endcsname {12\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.12.b.movenr\endcsname {\Xskak.export.12.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.12.b.player\endcsname {\Xskak.export.12.b.player }\relax 
+\expandafter \def \csname Xskak.export.12.b.moveid\endcsname {\Xskak.export.12.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.12.b.pgnpiece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.12.b.piece\endcsname {b}\relax 
+\expandafter \def \csname Xskak.export.12.b.piecechar\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.12.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.b.movefrom\endcsname {c8}\relax 
+\expandafter \def \csname Xskak.export.12.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.b.moveto\endcsname {b7}\relax 
+\expandafter \def \csname Xskak.export.12.b.move\endcsname {c8-b7}\relax 
+\expandafter \def \csname Xskak.export.12.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.12.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.12.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.b.addpieces\endcsname {bb7}\relax 
+\expandafter \def \csname Xskak.export.12.b.clearfields\endcsname {c8}\relax 
+\expandafter \def \csname Xskak.export.12.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.b.nextfen\endcsname {r2k1b1r/pb1nq1p1/2p1pnBp/1p6/P2P1B2/5N2/1PP2PPP/R2Q1RK1 w - - 1 13}\relax 
+\expandafter \def \csname Xskak.export.12.b.pastfen\endcsname {r1bk1b1r/p2nq1p1/2p1pnBp/1p6/P2P1B2/5N2/1PP2PPP/R2Q1RK1 b - a3 0 12}\relax 
+\expandafter \def \csname Xskak.export.12.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.12.b.san\endcsname {\textsymfigsymbol {B}b7}\relax 
+\expandafter \def \csname Xskak.export.12.b.lan\endcsname {\textsymfigsymbol {B}c8\xskakmovehyphen b7}\relax 
+\expandafter \def \csname Xskak.export.12.b.opennr\endcsname {12\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.13.w.movenr\endcsname {\Xskak.export.13.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.13.w.player\endcsname {\Xskak.export.13.w.player }\relax 
+\expandafter \def \csname Xskak.export.13.w.moveid\endcsname {\Xskak.export.13.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.13.w.pgnpiece\endcsname {R}\relax 
+\expandafter \def \csname Xskak.export.13.w.piece\endcsname {R}\relax 
+\expandafter \def \csname Xskak.export.13.w.piecechar\endcsname {R}\relax 
+\expandafter \def \csname Xskak.export.13.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.w.movefrom\endcsname {f1}\relax 
+\expandafter \def \csname Xskak.export.13.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.w.moveto\endcsname {e1}\relax 
+\expandafter \def \csname Xskak.export.13.w.move\endcsname {f1-e1}\relax 
+\expandafter \def \csname Xskak.export.13.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.13.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.w.addpieces\endcsname {Re1}\relax 
+\expandafter \def \csname Xskak.export.13.w.clearfields\endcsname {f1}\relax 
+\expandafter \def \csname Xskak.export.13.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.w.nextfen\endcsname {r2k1b1r/pb1nq1p1/2p1pnBp/1p6/P2P1B2/5N2/1PP2PPP/R2QR1K1 b - - 2 13}\relax 
+\expandafter \def \csname Xskak.export.13.w.pastfen\endcsname {r2k1b1r/pb1nq1p1/2p1pnBp/1p6/P2P1B2/5N2/1PP2PPP/R2Q1RK1 w - - 1 13}\relax 
+\expandafter \def \csname Xskak.export.13.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.w.san\endcsname {\textsymfigsymbol {R}e1}\relax 
+\expandafter \def \csname Xskak.export.13.w.lan\endcsname {\textsymfigsymbol {R}f1\xskakmovehyphen e1}\relax 
+\expandafter \def \csname Xskak.export.13.w.opennr\endcsname {13\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.13.b.movenr\endcsname {\Xskak.export.13.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.13.b.player\endcsname {\Xskak.export.13.b.player }\relax 
+\expandafter \def \csname Xskak.export.13.b.moveid\endcsname {\Xskak.export.13.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.13.b.pgnpiece\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.13.b.piece\endcsname {n}\relax 
+\expandafter \def \csname Xskak.export.13.b.piecechar\endcsname {N}\relax 
+\expandafter \def \csname Xskak.export.13.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.b.movefrom\endcsname {f6}\relax 
+\expandafter \def \csname Xskak.export.13.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.b.moveto\endcsname {d5}\relax 
+\expandafter \def \csname Xskak.export.13.b.move\endcsname {f6-d5}\relax 
+\expandafter \def \csname Xskak.export.13.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.13.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.13.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.b.addpieces\endcsname {nd5}\relax 
+\expandafter \def \csname Xskak.export.13.b.clearfields\endcsname {f6}\relax 
+\expandafter \def \csname Xskak.export.13.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.b.nextfen\endcsname {r2k1b1r/pb1nq1p1/2p1p1Bp/1p1n4/P2P1B2/5N2/1PP2PPP/R2QR1K1 w - - 3 14}\relax 
+\expandafter \def \csname Xskak.export.13.b.pastfen\endcsname {r2k1b1r/pb1nq1p1/2p1pnBp/1p6/P2P1B2/5N2/1PP2PPP/R2QR1K1 b - - 2 13}\relax 
+\expandafter \def \csname Xskak.export.13.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.13.b.san\endcsname {\textsymfigsymbol {N}d5}\relax 
+\expandafter \def \csname Xskak.export.13.b.lan\endcsname {\textsymfigsymbol {N}f6\xskakmovehyphen d5}\relax 
+\expandafter \def \csname Xskak.export.13.b.opennr\endcsname {13\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.14.w.movenr\endcsname {\Xskak.export.14.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.14.w.player\endcsname {\Xskak.export.14.w.player }\relax 
+\expandafter \def \csname Xskak.export.14.w.moveid\endcsname {\Xskak.export.14.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.14.w.pgnpiece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.14.w.piece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.14.w.piecechar\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.14.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.w.movefrom\endcsname {f4}\relax 
+\expandafter \def \csname Xskak.export.14.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.w.moveto\endcsname {g3}\relax 
+\expandafter \def \csname Xskak.export.14.w.move\endcsname {f4-g3}\relax 
+\expandafter \def \csname Xskak.export.14.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.14.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.w.addpieces\endcsname {Bg3}\relax 
+\expandafter \def \csname Xskak.export.14.w.clearfields\endcsname {f4}\relax 
+\expandafter \def \csname Xskak.export.14.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.w.nextfen\endcsname {r2k1b1r/pb1nq1p1/2p1p1Bp/1p1n4/P2P4/5NB1/1PP2PPP/R2QR1K1 b - - 4 14}\relax 
+\expandafter \def \csname Xskak.export.14.w.pastfen\endcsname {r2k1b1r/pb1nq1p1/2p1p1Bp/1p1n4/P2P1B2/5N2/1PP2PPP/R2QR1K1 w - - 3 14}\relax 
+\expandafter \def \csname Xskak.export.14.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.w.san\endcsname {\textsymfigsymbol {B}g3}\relax 
+\expandafter \def \csname Xskak.export.14.w.lan\endcsname {\textsymfigsymbol {B}f4\xskakmovehyphen g3}\relax 
+\expandafter \def \csname Xskak.export.14.w.opennr\endcsname {14\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.14.b.movenr\endcsname {\Xskak.export.14.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.14.b.player\endcsname {\Xskak.export.14.b.player }\relax 
+\expandafter \def \csname Xskak.export.14.b.moveid\endcsname {\Xskak.export.14.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.14.b.pgnpiece\endcsname {K}\relax 
+\expandafter \def \csname Xskak.export.14.b.piece\endcsname {k}\relax 
+\expandafter \def \csname Xskak.export.14.b.piecechar\endcsname {K}\relax 
+\expandafter \def \csname Xskak.export.14.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.b.movefrom\endcsname {d8}\relax 
+\expandafter \def \csname Xskak.export.14.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.b.moveto\endcsname {c8}\relax 
+\expandafter \def \csname Xskak.export.14.b.move\endcsname {d8-c8}\relax 
+\expandafter \def \csname Xskak.export.14.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.14.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.14.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.b.addpieces\endcsname {kc8}\relax 
+\expandafter \def \csname Xskak.export.14.b.clearfields\endcsname {d8}\relax 
+\expandafter \def \csname Xskak.export.14.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.b.nextfen\endcsname {r1k2b1r/pb1nq1p1/2p1p1Bp/1p1n4/P2P4/5NB1/1PP2PPP/R2QR1K1 w - - 5 15}\relax 
+\expandafter \def \csname Xskak.export.14.b.pastfen\endcsname {r2k1b1r/pb1nq1p1/2p1p1Bp/1p1n4/P2P4/5NB1/1PP2PPP/R2QR1K1 b - - 4 14}\relax 
+\expandafter \def \csname Xskak.export.14.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.14.b.san\endcsname {\textsymfigsymbol {K}c8}\relax 
+\expandafter \def \csname Xskak.export.14.b.lan\endcsname {\textsymfigsymbol {K}d8\xskakmovehyphen c8}\relax 
+\expandafter \def \csname Xskak.export.14.b.opennr\endcsname {14\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.15.w.movenr\endcsname {\Xskak.export.15.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.15.w.player\endcsname {\Xskak.export.15.w.player }\relax 
+\expandafter \def \csname Xskak.export.15.w.moveid\endcsname {\Xskak.export.15.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.15.w.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.w.piece\endcsname {P}\relax 
+\expandafter \def \csname Xskak.export.15.w.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.15.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.w.capture\endcsname {\setboolean {xskakboolcapture}{true}}\relax 
+\expandafter \def \csname Xskak.export.15.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.w.lostpiece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.15.w.lostpiecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.15.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.w.movefrom\endcsname {a4}\relax 
+\expandafter \def \csname Xskak.export.15.w.pgnmovefrom\endcsname {a}\relax 
+\expandafter \def \csname Xskak.export.15.w.moveto\endcsname {b5}\relax 
+\expandafter \def \csname Xskak.export.15.w.move\endcsname {a4-b5}\relax 
+\expandafter \def \csname Xskak.export.15.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.15.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.w.addpieces\endcsname {Pb5}\relax 
+\expandafter \def \csname Xskak.export.15.w.clearfields\endcsname {a4}\relax 
+\expandafter \def \csname Xskak.export.15.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.w.nextfen\endcsname {r1k2b1r/pb1nq1p1/2p1p1Bp/1P1n4/3P4/5NB1/1PP2PPP/R2QR1K1 b - - 0 15}\relax 
+\expandafter \def \csname Xskak.export.15.w.pastfen\endcsname {r1k2b1r/pb1nq1p1/2p1p1Bp/1p1n4/P2P4/5NB1/1PP2PPP/R2QR1K1 w - - 5 15}\relax 
+\expandafter \def \csname Xskak.export.15.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.w.san\endcsname {a\capturesymbol b5}\relax 
+\expandafter \def \csname Xskak.export.15.w.lan\endcsname {a4\capturesymbol b5}\relax 
+\expandafter \def \csname Xskak.export.15.w.opennr\endcsname {15\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.15.b.movenr\endcsname {\Xskak.export.15.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.15.b.player\endcsname {\Xskak.export.15.b.player }\relax 
+\expandafter \def \csname Xskak.export.15.b.moveid\endcsname {\Xskak.export.15.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.15.b.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.b.piece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.15.b.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.15.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.b.capture\endcsname {\setboolean {xskakboolcapture}{true}}\relax 
+\expandafter \def \csname Xskak.export.15.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.b.lostpiece\endcsname {P}\relax 
+\expandafter \def \csname Xskak.export.15.b.lostpiecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.15.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.b.movefrom\endcsname {c6}\relax 
+\expandafter \def \csname Xskak.export.15.b.pgnmovefrom\endcsname {c}\relax 
+\expandafter \def \csname Xskak.export.15.b.moveto\endcsname {b5}\relax 
+\expandafter \def \csname Xskak.export.15.b.move\endcsname {c6-b5}\relax 
+\expandafter \def \csname Xskak.export.15.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.15.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.15.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.b.addpieces\endcsname {pb5}\relax 
+\expandafter \def \csname Xskak.export.15.b.clearfields\endcsname {c6}\relax 
+\expandafter \def \csname Xskak.export.15.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.b.nextfen\endcsname {r1k2b1r/pb1nq1p1/4p1Bp/1p1n4/3P4/5NB1/1PP2PPP/R2QR1K1 w - - 0 16}\relax 
+\expandafter \def \csname Xskak.export.15.b.pastfen\endcsname {r1k2b1r/pb1nq1p1/2p1p1Bp/1P1n4/3P4/5NB1/1PP2PPP/R2QR1K1 b - - 0 15}\relax 
+\expandafter \def \csname Xskak.export.15.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.15.b.san\endcsname {c\capturesymbol b5}\relax 
+\expandafter \def \csname Xskak.export.15.b.lan\endcsname {c6\capturesymbol b5}\relax 
+\expandafter \def \csname Xskak.export.15.b.opennr\endcsname {15\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.16.w.movenr\endcsname {\Xskak.export.16.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.16.w.player\endcsname {\Xskak.export.16.w.player }\relax 
+\expandafter \def \csname Xskak.export.16.w.moveid\endcsname {\Xskak.export.16.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.16.w.pgnpiece\endcsname {Q}\relax 
+\expandafter \def \csname Xskak.export.16.w.piece\endcsname {Q}\relax 
+\expandafter \def \csname Xskak.export.16.w.piecechar\endcsname {Q}\relax 
+\expandafter \def \csname Xskak.export.16.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.w.movefrom\endcsname {d1}\relax 
+\expandafter \def \csname Xskak.export.16.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.w.moveto\endcsname {d3}\relax 
+\expandafter \def \csname Xskak.export.16.w.move\endcsname {d1-d3}\relax 
+\expandafter \def \csname Xskak.export.16.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.16.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.w.addpieces\endcsname {Qd3}\relax 
+\expandafter \def \csname Xskak.export.16.w.clearfields\endcsname {d1}\relax 
+\expandafter \def \csname Xskak.export.16.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.w.nextfen\endcsname {r1k2b1r/pb1nq1p1/4p1Bp/1p1n4/3P4/3Q1NB1/1PP2PPP/R3R1K1 b - - 1 16}\relax 
+\expandafter \def \csname Xskak.export.16.w.pastfen\endcsname {r1k2b1r/pb1nq1p1/4p1Bp/1p1n4/3P4/5NB1/1PP2PPP/R2QR1K1 w - - 0 16}\relax 
+\expandafter \def \csname Xskak.export.16.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.w.san\endcsname {\textsymfigsymbol {Q}d3}\relax 
+\expandafter \def \csname Xskak.export.16.w.lan\endcsname {\textsymfigsymbol {Q}d1\xskakmovehyphen d3}\relax 
+\expandafter \def \csname Xskak.export.16.w.opennr\endcsname {16\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.16.b.movenr\endcsname {\Xskak.export.16.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.16.b.player\endcsname {\Xskak.export.16.b.player }\relax 
+\expandafter \def \csname Xskak.export.16.b.moveid\endcsname {\Xskak.export.16.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.16.b.pgnpiece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.16.b.piece\endcsname {b}\relax 
+\expandafter \def \csname Xskak.export.16.b.piecechar\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.16.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.b.movefrom\endcsname {b7}\relax 
+\expandafter \def \csname Xskak.export.16.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.b.moveto\endcsname {c6}\relax 
+\expandafter \def \csname Xskak.export.16.b.move\endcsname {b7-c6}\relax 
+\expandafter \def \csname Xskak.export.16.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.16.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.16.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.b.addpieces\endcsname {bc6}\relax 
+\expandafter \def \csname Xskak.export.16.b.clearfields\endcsname {b7}\relax 
+\expandafter \def \csname Xskak.export.16.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.b.nextfen\endcsname {r1k2b1r/p2nq1p1/2b1p1Bp/1p1n4/3P4/3Q1NB1/1PP2PPP/R3R1K1 w - - 2 17}\relax 
+\expandafter \def \csname Xskak.export.16.b.pastfen\endcsname {r1k2b1r/pb1nq1p1/4p1Bp/1p1n4/3P4/3Q1NB1/1PP2PPP/R3R1K1 b - - 1 16}\relax 
+\expandafter \def \csname Xskak.export.16.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.16.b.san\endcsname {\textsymfigsymbol {B}c6}\relax 
+\expandafter \def \csname Xskak.export.16.b.lan\endcsname {\textsymfigsymbol {B}b7\xskakmovehyphen c6}\relax 
+\expandafter \def \csname Xskak.export.16.b.opennr\endcsname {16\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.17.w.movenr\endcsname {\Xskak.export.17.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.17.w.player\endcsname {\Xskak.export.17.w.player }\relax 
+\expandafter \def \csname Xskak.export.17.w.moveid\endcsname {\Xskak.export.17.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.17.w.pgnpiece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.17.w.piece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.17.w.piecechar\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.17.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.w.movefrom\endcsname {g6}\relax 
+\expandafter \def \csname Xskak.export.17.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.w.moveto\endcsname {f5}\relax 
+\expandafter \def \csname Xskak.export.17.w.move\endcsname {g6-f5}\relax 
+\expandafter \def \csname Xskak.export.17.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.17.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.w.addpieces\endcsname {Bf5}\relax 
+\expandafter \def \csname Xskak.export.17.w.clearfields\endcsname {g6}\relax 
+\expandafter \def \csname Xskak.export.17.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.w.nextfen\endcsname {r1k2b1r/p2nq1p1/2b1p2p/1p1n1B2/3P4/3Q1NB1/1PP2PPP/R3R1K1 b - - 3 17}\relax 
+\expandafter \def \csname Xskak.export.17.w.pastfen\endcsname {r1k2b1r/p2nq1p1/2b1p1Bp/1p1n4/3P4/3Q1NB1/1PP2PPP/R3R1K1 w - - 2 17}\relax 
+\expandafter \def \csname Xskak.export.17.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.w.san\endcsname {\textsymfigsymbol {B}f5}\relax 
+\expandafter \def \csname Xskak.export.17.w.lan\endcsname {\textsymfigsymbol {B}g6\xskakmovehyphen f5}\relax 
+\expandafter \def \csname Xskak.export.17.w.opennr\endcsname {17\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.17.b.movenr\endcsname {\Xskak.export.17.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.17.b.player\endcsname {\Xskak.export.17.b.player }\relax 
+\expandafter \def \csname Xskak.export.17.b.moveid\endcsname {\Xskak.export.17.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.17.b.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.b.piece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.17.b.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.17.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.b.capture\endcsname {\setboolean {xskakboolcapture}{true}}\relax 
+\expandafter \def \csname Xskak.export.17.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.b.lostpiece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.17.b.lostpiecechar\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.17.b.pgnlostpiece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.17.b.movefrom\endcsname {e6}\relax 
+\expandafter \def \csname Xskak.export.17.b.pgnmovefrom\endcsname {e}\relax 
+\expandafter \def \csname Xskak.export.17.b.moveto\endcsname {f5}\relax 
+\expandafter \def \csname Xskak.export.17.b.move\endcsname {e6-f5}\relax 
+\expandafter \def \csname Xskak.export.17.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.17.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.17.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.b.addpieces\endcsname {pf5}\relax 
+\expandafter \def \csname Xskak.export.17.b.clearfields\endcsname {e6}\relax 
+\expandafter \def \csname Xskak.export.17.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.b.nextfen\endcsname {r1k2b1r/p2nq1p1/2b4p/1p1n1p2/3P4/3Q1NB1/1PP2PPP/R3R1K1 w - - 0 18}\relax 
+\expandafter \def \csname Xskak.export.17.b.pastfen\endcsname {r1k2b1r/p2nq1p1/2b1p2p/1p1n1B2/3P4/3Q1NB1/1PP2PPP/R3R1K1 b - - 3 17}\relax 
+\expandafter \def \csname Xskak.export.17.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.17.b.san\endcsname {e\capturesymbol f5}\relax 
+\expandafter \def \csname Xskak.export.17.b.lan\endcsname {e6\capturesymbol f5}\relax 
+\expandafter \def \csname Xskak.export.17.b.opennr\endcsname {17\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.18.w.movenr\endcsname {\Xskak.export.18.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.18.w.player\endcsname {\Xskak.export.18.w.player }\relax 
+\expandafter \def \csname Xskak.export.18.w.moveid\endcsname {\Xskak.export.18.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.18.w.pgnpiece\endcsname {R}\relax 
+\expandafter \def \csname Xskak.export.18.w.piece\endcsname {R}\relax 
+\expandafter \def \csname Xskak.export.18.w.piecechar\endcsname {R}\relax 
+\expandafter \def \csname Xskak.export.18.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.w.capture\endcsname {\setboolean {xskakboolcapture}{true}}\relax 
+\expandafter \def \csname Xskak.export.18.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.w.lostpiece\endcsname {q}\relax 
+\expandafter \def \csname Xskak.export.18.w.lostpiecechar\endcsname {Q}\relax 
+\expandafter \def \csname Xskak.export.18.w.pgnlostpiece\endcsname {Q}\relax 
+\expandafter \def \csname Xskak.export.18.w.movefrom\endcsname {e1}\relax 
+\expandafter \def \csname Xskak.export.18.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.18.w.moveto\endcsname {e7}\relax 
+\expandafter \def \csname Xskak.export.18.w.move\endcsname {e1-e7}\relax 
+\expandafter \def \csname Xskak.export.18.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.w.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.18.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.18.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.18.w.addpieces\endcsname {Re7}\relax 
+\expandafter \def \csname Xskak.export.18.w.clearfields\endcsname {e1}\relax 
+\expandafter \def \csname Xskak.export.18.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.18.w.nextfen\endcsname {r1k2b1r/p2nR1p1/2b4p/1p1n1p2/3P4/3Q1NB1/1PP2PPP/R5K1 b - - 0 18}\relax 
+\expandafter \def \csname Xskak.export.18.w.pastfen\endcsname {r1k2b1r/p2nq1p1/2b4p/1p1n1p2/3P4/3Q1NB1/1PP2PPP/R3R1K1 w - - 0 18}\relax 
+\expandafter \def \csname Xskak.export.18.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.18.w.san\endcsname {\textsymfigsymbol {R}\capturesymbol e7}\relax 
+\expandafter \def \csname Xskak.export.18.w.lan\endcsname {\textsymfigsymbol {R}e1\capturesymbol e7}\relax 
+\expandafter \def \csname Xskak.export.18.w.opennr\endcsname {18\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.export.18.b.movenr\endcsname {\Xskak.export.18.b.movenr }\relax 
+\expandafter \def \csname Xskak.export.18.b.player\endcsname {\Xskak.export.18.b.player }\relax 
+\expandafter \def \csname Xskak.export.18.b.moveid\endcsname {\Xskak.export.18.b.moveid }\relax 
+\expandafter \def \csname Xskak.export.18.b.pgnpiece\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.18.b.piece\endcsname {b}\relax 
+\expandafter \def \csname Xskak.export.18.b.piecechar\endcsname {B}\relax 
+\expandafter \def \csname Xskak.export.18.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.b.capture\endcsname {\setboolean {xskakboolcapture}{true}}\relax 
+\expandafter \def \csname Xskak.export.18.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.b.lostpiece\endcsname {R}\relax 
+\expandafter \def \csname Xskak.export.18.b.lostpiecechar\endcsname {R}\relax 
+\expandafter \def \csname Xskak.export.18.b.pgnlostpiece\endcsname {R}\relax 
+\expandafter \def \csname Xskak.export.18.b.movefrom\endcsname {f8}\relax 
+\expandafter \def \csname Xskak.export.18.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.18.b.moveto\endcsname {e7}\relax 
+\expandafter \def \csname Xskak.export.18.b.move\endcsname {f8-e7}\relax 
+\expandafter \def \csname Xskak.export.18.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.b.enpassantsquare\endcsname {-}\relax 
+\expandafter \def \csname Xskak.export.18.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.18.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.18.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.18.b.addpieces\endcsname {be7}\relax 
+\expandafter \def \csname Xskak.export.18.b.clearfields\endcsname {f8}\relax 
+\expandafter \def \csname Xskak.export.18.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.18.b.nextfen\endcsname {r1k4r/p2nb1p1/2b4p/1p1n1p2/3P4/3Q1NB1/1PP2PPP/R5K1 w - - 0 19}\relax 
+\expandafter \def \csname Xskak.export.18.b.pastfen\endcsname {r1k2b1r/p2nR1p1/2b4p/1p1n1p2/3P4/3Q1NB1/1PP2PPP/R5K1 b - - 0 18}\relax 
+\expandafter \def \csname Xskak.export.18.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.18.b.san\endcsname {\textsymfigsymbol {B}\capturesymbol e7}\relax 
+\expandafter \def \csname Xskak.export.18.b.lan\endcsname {\textsymfigsymbol {B}f8\capturesymbol e7}\relax 
+\expandafter \def \csname Xskak.export.18.b.opennr\endcsname {18\blackopen \beforeblack }\relax 
+\expandafter \def \csname Xskak.export.19.w.movenr\endcsname {\Xskak.export.19.w.movenr }\relax 
+\expandafter \def \csname Xskak.export.19.w.player\endcsname {\Xskak.export.19.w.player }\relax 
+\expandafter \def \csname Xskak.export.19.w.moveid\endcsname {\Xskak.export.19.w.moveid }\relax 
+\expandafter \def \csname Xskak.export.19.w.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.19.w.piece\endcsname {P}\relax 
+\expandafter \def \csname Xskak.export.19.w.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.export.19.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.19.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.export.19.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.export.19.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.export.19.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.export.19.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.19.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.19.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.19.w.movefrom\endcsname {c2}\relax 
+\expandafter \def \csname Xskak.export.19.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.19.w.moveto\endcsname {c4}\relax 
+\expandafter \def \csname Xskak.export.19.w.move\endcsname {c2-c4}\relax 
+\expandafter \def \csname Xskak.export.19.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.export.19.w.enpassantsquare\endcsname {c3}\relax 
+\expandafter \def \csname Xskak.export.19.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.export.19.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.19.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.19.w.addpieces\endcsname {Pc4}\relax 
+\expandafter \def \csname Xskak.export.19.w.clearfields\endcsname {c2}\relax 
+\expandafter \def \csname Xskak.export.19.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.19.w.nextfen\endcsname {r1k4r/p2nb1p1/2b4p/1p1n1p2/2PP4/3Q1NB1/1P3PPP/R5K1 b - c3 0 19}\relax 
+\expandafter \def \csname Xskak.export.19.w.pastfen\endcsname {r1k4r/p2nb1p1/2b4p/1p1n1p2/3P4/3Q1NB1/1PP2PPP/R5K1 w - - 0 19}\relax 
+\expandafter \def \csname Xskak.export.19.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.export.19.w.san\endcsname {c4}\relax 
+\expandafter \def \csname Xskak.export.19.w.lan\endcsname {c2\xskakmovehyphen c4}\relax 
+\expandafter \def \csname Xskak.export.19.w.opennr\endcsname {19\whiteopen \beforewhite }\relax 
+\def \xskakcurrentgameid {export}\xskakendgamedata 
+%
+%Start of game exportb
+%
+\expandafter \def \csname Xskakexportbinitfen\endcsname {rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1}\relax 
+\expandafter \def \csname Xskakexportbinitplayer\endcsname {w}\relax 
+\expandafter \def \csname Xskakexportbinitmovenr\endcsname {1}\relax 
+\expandafter \def \csname Xskakexportbinitmoveid\endcsname {1w}\relax 
+\expandafter \def \csname Xskakexportblastfen\endcsname {rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq e6 0 2}\relax 
+\expandafter \def \csname Xskakexportblastplayer\endcsname {b}\relax 
+\expandafter \def \csname Xskakexportblastmovenr\endcsname {1}\relax 
+\expandafter \def \csname Xskakexportblastmoveid\endcsname {1b}\relax 
+\expandafter \def \csname Xskakexportbnextplayer\endcsname {w}\relax 
+\expandafter \def \csname Xskakexportbnextmovenr\endcsname {2}\relax 
+\expandafter \def \csname Xskakexportbnextmoveid\endcsname {2w}\relax 
+\expandafter \def \csname Xskakexportbdiagramlist\endcsname {}\relax 
+\expandafter \def \csname Xskakexportbgameid\endcsname {exportb}\relax 
+\expandafter \def \csname Xskakexportbresult\endcsname {*}\relax 
+\expandafter \def \csname Xskakexportbsite\endcsname {}\relax 
+\expandafter \def \csname Xskakexportbevent\endcsname {}\relax 
+\expandafter \def \csname Xskakexportbdate\endcsname {}\relax 
+\expandafter \def \csname Xskakexportbround\endcsname {}\relax 
+\expandafter \def \csname Xskakexportbwhite\endcsname {none}\relax 
+\expandafter \def \csname Xskakexportbblack\endcsname {none}\relax 
+\expandafter \def \csname Xskakexportbblackelo\endcsname {}\relax 
+\expandafter \def \csname Xskakexportbwhiteelo\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.movenr\endcsname {\Xskak.exportb.1.w.movenr }\relax 
+\expandafter \def \csname Xskak.exportb.1.w.player\endcsname {\Xskak.exportb.1.w.player }\relax 
+\expandafter \def \csname Xskak.exportb.1.w.moveid\endcsname {\Xskak.exportb.1.w.moveid }\relax 
+\expandafter \def \csname Xskak.exportb.1.w.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.piece\endcsname {P}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.movefrom\endcsname {e2}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.moveto\endcsname {e4}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.move\endcsname {e2-e4}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.enpassantsquare\endcsname {e3}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.addpieces\endcsname {Pe4}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.clearfields\endcsname {e2}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.nextfen\endcsname {rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.pastfen\endcsname {rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.san\endcsname {e4}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.lan\endcsname {e2\xskakmovehyphen e4}\relax 
+\expandafter \def \csname Xskak.exportb.1.w.opennr\endcsname {1\whiteopen \beforewhite }\relax 
+\expandafter \def \csname Xskak.exportb.1.b.movenr\endcsname {\Xskak.exportb.1.b.movenr }\relax 
+\expandafter \def \csname Xskak.exportb.1.b.player\endcsname {\Xskak.exportb.1.b.player }\relax 
+\expandafter \def \csname Xskak.exportb.1.b.moveid\endcsname {\Xskak.exportb.1.b.moveid }\relax 
+\expandafter \def \csname Xskak.exportb.1.b.pgnpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.piece\endcsname {p}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.piecechar\endcsname {p}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.castling\endcsname {\setboolean {xskakboolcastling}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.longcastling\endcsname {\setboolean {xskakboollongcastling}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.capture\endcsname {\setboolean {xskakboolcapture}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.check\endcsname {\setboolean {xskakboolcheck}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.mate\endcsname {\setboolean {xskakboolmate}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.lostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.lostpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.pgnlostpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.movefrom\endcsname {e7}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.pgnmovefrom\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.moveto\endcsname {e5}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.move\endcsname {e7-e5}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.enpassant\endcsname {\setboolean {xskakboolenpassant}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.enpassantsquare\endcsname {e6}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.promotion\endcsname {\setboolean {xskakboolpromotion}{false}}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.promotionpiece\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.promotionpiecechar\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.addpieces\endcsname {pe5}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.clearfields\endcsname {e7}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.comments\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.nextfen\endcsname {rnbqkbnr/pppp1ppp/8/4p3/4P3/8/PPPP1PPP/RNBQKBNR w KQkq e6 0 2}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.pastfen\endcsname {rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.nag\endcsname {}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.san\endcsname {e5}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.lan\endcsname {e7\xskakmovehyphen e5}\relax 
+\expandafter \def \csname Xskak.exportb.1.b.opennr\endcsname {1\blackopen \beforeblack }\relax 
+\def \xskakcurrentgameid {exportb}\xskakendgamedata 

Deleted: trunk/Master/texmf-dist/source/latex/xskak/xskak-src.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/xskak/xskak-src.dtx	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/source/latex/xskak/xskak-src.dtx	2019-06-23 20:59:18 UTC (rev 51432)
@@ -1,2411 +0,0 @@
-%<*xskak>
-\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{xskak}[2015/01/02 version v1.4 extended chess typesetting and parsing]
-%%$Date: 2015/01/02 13:51:58 $$Version: c80394b06dd1 $
-
-
-\newif\ifxskakpdfmatch
-
-\ifcsname pdfmatch\endcsname
- \xskakpdfmatchtrue
-\else
- \xskakpdfmatchfalse
-\fi
-
-\DeclareOption{nopdfmatch}{\xskakpdfmatchfalse}
-\providecommand\xskak at val@skakversion{skak}
-\DeclareOption{skak14}{\def\xskak at val@skakversion{skak14}}
-\DeclareOption{skak15}{\def\xskak at val@skakversion{skak15}}
-\DeclareOption{small}{\AtEndOfClass{\smallboard}}
-\ProcessOptions
-
-\RequirePackage{\xskak at val@skakversion}[2005/06/29]
-\expandafter\edef\csname ver at skak.sty\endcsname{\csname ver@\xskak at val@skakversion.sty\endcsname}
-
-\RequirePackage{xifthen}
-\RequirePackage{etoolbox}
-\RequirePackage{chessboard}[2007/12/20]
-\RequirePackage{xskak-keys}
-\newcommand\chessdiagramname{\ (Diagram)\ }
-\RequirePackage{xskak-nagdef}
-
-%%%%%%%%%%%%%%%%%%%%%
-%% Naming conventions
-%%%%%%%%%%%%%%%%%%%%%
-
-
-%%%%%%%%%%%%%%%%%%%%
-%%%%% Initialisation
-
-
-\newcommand\xskak at val@gameid{game}
-\newcommand\xskak at val@movenr{1}
-\newcommand\xskak at val@player{w}
-\newcommand\xskak at val@type{}
-
-\newcommand\xskak at val@defaultmovenr{1}
-\newcommand\xskak at val@defaultplayer{w}
-\newcommand\xskak at val@defaultmoveid{1w}
-
-\newcommand\xskak at val@defaultid{game}
-\newcommand\xskak at val@defaultfen{rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1}
-
-\newcommand\xskak at val@currenttag{}
-
-\newcommand\xskak at list@gametypes{%
- initfen,%
- initplayer,%
- initmovenr,%
- initmoveid,%
- lastfen,%
- lastplayer,%
- lastmovenr,%
- lastmoveid,%
- nextplayer,%
- nextmovenr,%
- nextmoveid,%
- diagramlist,%
- gameid,%
- parentid%NEW records game id of parent if the game is a variation, the last move of the parent=initmoveid
- }
-
-\newcommand\xskak at list@movetypes{%
- movenr,%
- player,%
- moveid,%
- pgnpiece,%
- piece,%
- piecechar,%
- castling,%
- longcastling,%
- capture,%
- check,%
- mate,%
- lostpiece,%
- lostpiecechar,%
- pgnlostpiece,%
- movefrom,%
- pgnmovefrom,%
- moveto,%
- move,%
- enpassant,%
- enpassantsquare,%
- promotion,%
- promotionpiece,%
- promotionpiecechar,%
- addpieces,%
- clearfields,%
- comments,%
- nextfen,%
- pastfen,%
- nag,%
- san,%
- lan,%
- opennr,%
- vars,% NEW, records game id of child variations
- varnum% NEW, records number of child variations
- }
-
-%% setting pgn infos
-\newcommand\xskaknewpgninfo[2][]{%#1 default value, #2 keyname
- \ifcsname UFCB at locfill@#2\endcsname
-  \PackageError{xskak}%
-      {(pgn) key #1 is already defined! Use another name}{}%
- \else
-  \expandafter\newcommand\csname xskak at val@default#2\endcsname{#1}%
-  \define at key[UFXS]{setpgn}{#2}[\csname xskak at val@default#2\endcsname]{%
-   \expandafter\xdef\csname Xskak\xskak at val@gameid #2\endcsname{##1}}%
-  \define at key[UFCB]{locfill}{#2}[]{}%
-  \define at key[UFXS]{set}{default#2}{%
-   \expandafter\xdef\csname xskak at val@default#2\endcsname{##1}}%
-  \@ifundefined{xskak at list@setpgn}%
-   {\gdef\xskak at list@setpgn{#2}}%
-   {\g at addto@macro\xskak at list@setpgn{,#2}}%
-    \g at addto@macro\xskak at list@gametypes{,#2}%
- \fi
- }%
-
-\xskaknewpgninfo[*]{result}
-\xskaknewpgninfo[]{site}
-\xskaknewpgninfo[]{event}
-\xskaknewpgninfo[]{date}
-\xskaknewpgninfo[]{round}
-\xskaknewpgninfo[]{white}
-\xskaknewpgninfo[]{black}
-\xskaknewpgninfo[]{blackelo}
-\xskaknewpgninfo[]{whiteelo}
-
-%%% From skak.sty
-\providecommand\CheckTest{}
-\providecommand\MateTest{}
-
-%%% For the benefit of texmate
-\AtBeginDocument{\providecommand\fenposition[1]{}}
-
-%%% new booleans
-\newboolean{xskakboolcastling}
-\newboolean{xskakboollongcastling}
-\newboolean{xskakboolenpassant}
-\newboolean{xskakboolcapture}
-\newboolean{xskakboolcheck}
-\newboolean{xskakboolmate}
-\newboolean{xskakboolpromotion}
-\newboolean{xskakboolcomment}
-\newboolean{xskakboolnag}
-\newboolean{xskakboolvar}
-
-%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%
-
-%% Variables
-\newcommand\xskakcomment[1]{{#1}}
-\newcommand\xskakmovehyphen{\hbox{--\hspace{1pt}}} %or movehyphen from skak?
-\newcommand*\xskakenpassanttext{\,e.p.}
-
-%% set various variables like gameid and move
-\newcommand\xskakset[1]{%
- \setkeys[UFXS]{set}{#1}}
-
-%% getting the move data
-\newcommand*\xskakget[1]{%
- \if\xskak at strequal{movenr}{#1}%
-  \xskak at val@movenr
- \else
-  \if\xskak at strequal{player}{#1}%
-   \xskak at val@player
-  \else
-   \if\xskak at strequal{moveid}{#1}%
-    \xskak at val@movenr\xskak at val@player
-   \else
-    \if\xskak at strequal{level}{#1}%
-     \xskak at val@curlevel
-    \else
-     \ifcsname xskak at tag@\xskak at val@currenttag @#1\endcsname
-       \csname xskak at tag@\xskak at val@currenttag @#1\endcsname
-     \else
-      \ifcsname Xskak.\xskak at val@gameid.\xskak at val@movenr.\xskak at val@player.#1\endcsname
-       \csname Xskak.\xskak at val@gameid.\xskak at val@movenr.\xskak at val@player.#1\endcsname
-      \else
-       \PackageError{xskak}%
-        {\csname Xskak.\xskak at val@gameid.\xskak at val@movenr.\xskak at val@player.#1\endcsname isn't defined}{}%
-      \fi
-     \fi
-    \fi
-   \fi
-  \fi
- \fi}
-
-%% getting game data
-\newcommand*\xskakgetgame[1]{%
- \ifcsname Xskak\xskak at val@gameid#1\endcsname
-  \csname Xskak\xskak at val@gameid#1\endcsname
- \else
-  \PackageError{xskak}%
-   {\csname Xskak\xskak at val@gameid#1\endcsname isn't defined}{}%
- \fi}
-
-%% getting ref data -> do it through xskakget and xskakgetgame
-
-%% starting a new game
-
-\newcommand\newchessgame[1][]{%
-  \setkeys*[UFXS]{new}{id,moveid}%
-  \setkeys*[UFXS]{new}{#1}%
-   \@for\xskak at temp@gametype:=\xskak at list@gametypes\do
-   {\expandafter\xdef
-      \csname Xskak\xskak at val@gameid\xskak at temp@gametype\endcsname{}}%
-  \expandafter\xdef\csname Xskak\xskak at val@gameid gameid\endcsname{\xskak at val@gameid}%
-  \toks@=\expandafter{\xskak at list@setpgn}%
-  \edef\xskak at temp@command{%
-  \noexpand\setkeys*[UFXS]{setpgn}{\the\toks@}}%
-  \xskak at temp@command
-  %\setkeys*[UFXS]{setpgn}{result}%
-  \setkeys*[UFXS]{setpgn}{#1}%
-  \chessboard[maxfield=h8,zero=false,print=false,
-    setfen=\xskak at val@defaultfen,%
-    #1,
-    mover=\xskak at val@player,
-    fullmove=\xskak at val@movenr,
-    storefen=@tempgame]%
-   \edef\temp{\csname chessgame. at tempgame\endcsname}%16.10.2008 for skak1.5
-   \expandafter\fenboard\expandafter{\temp}%16.10.2008 for skak1.5
-   \storegame{@tempgame}%16.10.2008 for skak1.5
-   \restoregame{@tempgame}%16.10.2008 for skak1.5
-   \edef\@tempa{\csname chessgame. at tempgame\endcsname}%
-   \expandafter\fenposition\expandafter{\@tempa}% for texmate
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid initfen\endcsname{\csname chessgame. at tempgame\endcsname}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid lastfen\endcsname{\csname chessgame. at tempgame\endcsname}%
-   \expandafter\xdef
-    \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pastfen\endcsname
-      {\csname chessgame. at tempgame\endcsname}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid initplayer\endcsname{\WhiteToMove{w}{b}}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid initmovenr\endcsname{\the\c at move}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid initmoveid\endcsname{\the\c at move\WhiteToMove{w}{b}}%
-   \xskak at do@getpreviousmoveid{\the\c at move}{\WhiteToMove{w}{b}}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid lastplayer\endcsname{\WhiteToMove{b}{w}}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid lastmovenr\endcsname{\xskak at temp@movenr}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid lastmoveid\endcsname{\xskak at temp@movenr\WhiteToMove{b}{w}}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid nextplayer\endcsname{\WhiteToMove{w}{b}}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid nextmovenr\endcsname{\the\c at move}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid nextmoveid\endcsname{\the\c at move\WhiteToMove{w}{b}}%
-   \expandafter\xdef\csname %new 1.6. Initialization of nag
-     Xskak.\xskak at val@gameid.%
-     \csname Xskak\xskak at val@gameid lastmovenr\endcsname.%
-     \csname Xskak\xskak at val@gameid lastplayer\endcsname.nag\endcsname{}}
-
-%% continuing a game
-\newcommand\resumechessgame[1][]{%
-  \def\xskak at temp@player{%
-   \csname Xskak\xskak at val@gameid nextplayer\endcsname}%
-  \def\xskak at temp@movenr{%
-   \csname Xskak\xskak at val@gameid nextmovenr\endcsname}%
-  \setkeys*[UFXS]{res}{#1}%
-  \xdef\xskak at val@player{\xskak at temp@player}%
-  \xdef\xskak at val@movenr{\xskak at temp@movenr}%
-  \ifthenelse
-    {\xskak at test@lessorequal
-        {\xskak at val@movenr}%
-        {\xskak at val@player}%
-        {\csname Xskak\xskak at val@gameid nextmovenr\endcsname}%
-        {\csname Xskak\xskak at val@gameid nextplayer\endcsname}%
-    }%
-    {\chessboard[maxfield=h8,zero=false,print=false,
-    #1,
-    setfen=\xskakget{pastfen},
-    mover=\xskak at val@player,
-    fullmove=\xskak at val@movenr,
-    storefen=@tempgame
-    ]%
-    \restoregame{@tempgame}%
-   \edef\@tempa{\csname chessgame. at tempgame\endcsname}%
-   \expandafter\fenposition\expandafter{\@tempa}% for texmate
-   \xskak at do@getpreviousmoveid{\the\c at move}{\WhiteToMove{w}{b}}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid lastplayer\endcsname{\WhiteToMove{b}{w}}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid lastmovenr\endcsname{\xskak at temp@movenr}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid lastmoveid\endcsname{\xskak at temp@movenr\WhiteToMove{b}{w}}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid nextplayer\endcsname{\WhiteToMove{w}{b}}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid nextmovenr\endcsname{\the\c at move}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid nextmoveid\endcsname{\the\c at move\WhiteToMove{w}{b}}%
-    }%
-    {\PackageError{xskak}{Move "\xskak at val@movenr\xskak at val@player" is
-     not in game \xskak at val@gameid}{}}}
-
-%% export games
-\newcommand\xskak at messages{}
-\newcommand\xskakexportgames[1][]{%
- \begingroup
- \def\xskak at messages{}%
- \setkeys[UFXS]{export}{file=xskakgames,games=\xskak at val@defaultid,#1}%
-  \immediate\openout\@unused=\xskak at val@exportfile
-  \immediate\write\@unused{%
-  \@percentchar This are games exported with xskak.sty^^J%
-  \@percentchar The options were: #1 ^^J%
-  \@percentchar \the\day.\the\month.\the\year}%
-  \expandafter\xskak at do@sanitizelist\expandafter{\xskak at val@exportgames}%
-  \@for\xskak at temp@game:=\xskak at temp@list\do
-  {%
-  \@ifundefined{Xskak\xskak at temp@game initfen}%
-   {\expandafter\g at addto@macro\expandafter\xskak at messages\expandafter{\expandafter"\xskak at temp@game"\space}}%
-   {\immediate\write\@unused{%
-    \@percentchar ^^J%
-    \@percentchar Start of game \xskak at temp@game ^^J%
-    \@percentchar}%
-    \@for\xskak at temp@gametype:=\xskak at list@gametypes\do
-       {\toks@=\expandafter\expandafter\expandafter{\csname Xskak\xskak at temp@game\xskak at temp@gametype\endcsname}%
-       \immediate\write\@unused{%
-        \unexpanded{\expandafter\def\csname}Xskak%
-             \xskak at temp@game\xskak at temp@gametype\noexpand\endcsname{\the\toks@}\noexpand\relax}%
-       }%
-    \expandafter\let\expandafter\xskak at temp@movenr
-     \csname Xskak\xskak at temp@game initmovenr\endcsname
-    \expandafter\let\expandafter\xskak at temp@player
-     \csname Xskak\xskak at temp@game initplayer\endcsname
-    \whiledo% loop through moves
-      {\xskak at test@moveidingame{\xskak at temp@movenr}{\xskak at temp@player}{\xskak at temp@game}}%
-      {\@for\xskak at temp@movetype:=\xskak at list@movetypes \do
-       {\toks@=\expandafter\expandafter\expandafter{%
-         \csname Xskak.\xskak at temp@game.\xskak at temp@movenr.\xskak at temp@player.\xskak at temp@movetype\endcsname}%
-        \immediate\write\@unused{%
-          \unexpanded{\expandafter\def\csname}Xskak.%
-            \xskak at temp@game.\xskak at temp@movenr.\xskak at temp@player.\xskak at temp@movetype
-             \noexpand\endcsname{\the\toks@}\noexpand\relax}%
-       }%
-       %% nextmove
-       \xskak at do@getnextmoveid{\xskak at temp@movenr}{\xskak at temp@player}%
-      }%
-    \immediate\write\@unused{\unexpanded{\def\xskakcurrentgameid}{\xskak at temp@game}\noexpand\xskakendgamedata}%
-  }}%
-  %
-  \immediate\closeout\@unused\relax
-  \ifx\xskak at messages\@empty
-   \else
-  \PackageWarning{xskak}{games \xskak at messages\space didn't exist. I
-    skipped them}{}%
-  \fi
-  \endgroup
-  }%
-
-\newcommand\xskakendgamedata{}
-\newcommand\xskakcurrentgameid{}
-
-%% looping through a game.
-\newcommand\xskakloop[2][]{%
- %\show\xskakstart
- \gdef\xskak at val@loopstep{1}%
- \savekeys[UFXS]{loop}{\global{showlast}}%
- \setkeys[UFXS]{loop}{showlast=false,#1}% getting the id
- \xdef\xskak at val@movenr{%
-  \csname Xskak\xskak at val@gameid initmovenr\endcsname}%
- \xdef\xskak at val@player{%
-  \csname Xskak\xskak at val@gameid initplayer\endcsname}%
- \xdef\xskak at val@stopmovenr{%
-  \csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
- \xdef\xskak at val@stopplayer{%
-  \csname Xskak\xskak at val@gameid lastplayer\endcsname}%
- \setkeys[UFXS]{loop}{#1}% getting the rest.
- %%
- \whiledo%
-  {\xskak at test@lessorequal
-     {\xskak at val@movenr}{\xskak at val@player}%
-     {\xskak at val@stopmovenr}{\xskak at val@stopplayer}}%
-  {% test if move in game:
-   \ifthenelse%
-    {\xskak at test@moveidingame{\xskak at val@movenr}{\xskak at val@player}{\xskak at val@gameid}}%
-    {#2%
-     \count@=\xskak at val@loopstep\relax
-     \whiledo{\the\count@>0}%
-      {\xskak at do@getnextmoveid{\xskak at val@movenr}{\xskak at val@player}%
-       \advance\count@ by -1%
-       \global\let\xskak at val@movenr\xskak at temp@movenr
-       \global\let\xskak at val@player\xskak at temp@player}%
-     }%
-     {\PackageError{xskak}%
-       {move {\xskak at val@movenr}{\xskak at val@player} is not in game
-        \xskak at val@gameid}{}}}%
-    \ifthenelse{\boolean{\XKV at UFXS@loop at showlast@value}}%
-     {\ifthenelse
-      {\equal{\xskak at val@movenr\xskak at val@player}{\xskak at val@stopmovenr\xskak at val@stopplayer}}%
-      {}%stop already processed.
-      {\let\xskak at val@movenr\xskak at val@stopmovenr
-       \let\xskak at val@player\xskak at val@stopplayer
-       #2}}%
-      {}}
-%%% test if a number/color combination is in the game:
-
-\newtest\xskaktestmoveid[2]{%number, w or b
-  \xskak at test@lessorequal
-   {\csname Xskak\xskak at val@gameid initmovenr\endcsname}%
-   {\csname Xskak\xskak at val@gameid initplayer\endcsname}%
-   {#1}{#2}%
-  \AND
-  \xskak at test@lessorequal
-   {#1}{#2}%
-   {\csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
-   {\csname Xskak\xskak at val@gameid lastplayer\endcsname}}
-
-\newtest\xskak at test@moveidingame[3]{%number, w or b, gameid
-  \xskak at test@lessorequal
-   {\csname Xskak#3initmovenr\endcsname}%
-   {\csname Xskak#3initplayer\endcsname}%
-   {#1}{#2}%
-  \AND
-  \xskak at test@lessorequal
-   {#1}{#2}%
-   {\csname Xskak#3lastmovenr\endcsname}%
-   {\csname Xskak#3lastplayer\endcsname}}
-
-%%%%%%%%%%%%%%%%%%
-%% Helper commands
-%%%%%%%%%%%%%%%%%%
-
-%%% help command for testing
-
-\newcommand\xskak at matetest{}
- \let\xskak at matetest\mate
-
-%%% special fencalculate
-%%% Use only inside dothemove to get the correct color and movenumber!}
-%02.01.2015: Patching the promotionpieces in Rank 1 + 8
-\def\xskak at specialfencalculate{%
- %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiece\endcsname
-  \Fen at Rank{8}%%
-  \Promotion{%
-   \WhiteToMove{%
-    \patchcmd{\temp at rank}
-     {P}
-     {\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiece\endcsname}
-     {}
-     {\show\MistMist}}{}%
-   }{}%
-   \edef\temp at board{\temp at rank/}%
-  \Fen at Rank{7}\edef\temp at board{\temp at board\temp at rank/}%
-  \Fen at Rank{6}\edef\temp at board{\temp at board\temp at rank/}%
-  \Fen at Rank{5}\edef\temp at board{\temp at board\temp at rank/}%
-  \Fen at Rank{4}\edef\temp at board{\temp at board\temp at rank/}%
-  \Fen at Rank{3}\edef\temp at board{\temp at board\temp at rank/}%
-  \Fen at Rank{2}\edef\temp at board{\temp at board\temp at rank/}%
-  \Fen at Rank{1}%
-  \Promotion{%
-   \WhiteToMove{}
-    {\patchcmd{\temp at rank}
-     {p}
-     {\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiece\endcsname}
-     {}
-     {\show\MistMist}}{}}{}%
-   \edef\temp at board{\temp at board\temp at rank}%
-  \edef\temp at board{\temp at board\space\WhiteToMove{b}{w}}%
-  \edef\temp at board{\temp at board\space\PrintCastling\space\EnPassantSquare}%
-  \edef\temp at board{\temp at board\space\arabic{halfmove}\space\the\count@}}
-
-%%% Get the previous movenumber/color.
-\newcommand\xskak at do@getpreviousmoveid[2]{%1. move number, 2. color
- \if#2w%
-  \edef\xskak at temp@movenr{\the\numexpr #1-1\relax}%
-  \def\xskak at temp@player{b}%
- \else
-  \edef\xskak at temp@movenr{#1}%
-  \def\xskak at temp@player{w}%
- \fi}
-
-%%% Get the next movenumber/color.
-\newcommand\xskak at do@getnextmoveid[2]{%1. move number, 2. color
- \if#2b\relax
-  \edef\xskak at temp@movenr{\the\numexpr #1+1\relax}%
-  \def\xskak at temp@player{w}%
- \else
-  \edef\xskak at temp@movenr{#1}%
-  \def\xskak at temp@player{b}%
- \fi}
-
-%%% splits a move id like 10b or 8w:
-
-\def\xskak at do@storeplayer#1\@nnil{\def\xskak at temp@player{#1}}
-
-\def\xskak at split@moveid#1{\afterassignment\xskak at do@storeplayer\count@=#1\@nnil
-                        \edef\xskak at temp@movenr{\the\count@}}
-
-%%% tests
-%% moveidA < = moveidB
-\newtest\xskak at test@lessorequal[4]{%movenr/playerA movenr/playerB
- \(#1<#3\)%
- \OR
- \(#1=#3%
-   \AND
-   \(\equal{#2}{#4}%
-     \OR
-     \equal{#4}{b}%
-   \)%
-  \)}%
-
-\newcommand\xskak at do@sanitizelist[1]{%
- \def\xskak at temp@list{}%
- \@for\xskak at temp@listentry:=#1\do
- {\edef\xskak at temp@cmd{%
-   \noexpand\setkeys[UFXS]{inner}{stripspace=\xskak at temp@listentry}}%
-  \xskak at temp@cmd
-  \ifx\xskak at temp@list\@empty
-   \expandafter\def\expandafter\xskak at temp@list\expandafter{\xskak at temp@output}%
-  \else
-   \expandafter\board at do@l at addto@macro\expandafter\xskak at temp@list\expandafter{\expandafter,\xskak at temp@output}%
-  \fi}}
-
-\define at key[UFXS]{inner}{stripspace}{\def\xskak at temp@output{#1}}
-
-\def\xskak at strequal#1{\number\xskak at strequalstart{}{}#1\relax}
-\def\xskak at strequalstart#1#2#3{\if#3\relax\xskak at strequalstop\fi
-     \xskak at strequalstart{\if#3#1}{#2\fi}}
-\def\xskak at strequalstop\fi\xskak at strequalstart#1#2#3{\fi#1#3\relax'#213 }
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Core: Store Move Informations
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%% move related informations
-%%%%   <type>          <value>
-%%%%   vars            list of game id of variations. Is set to empty by \xskak at do@dothemove. Can be
-%%%%                   change by variation games to notify the "parent" about its "child"
-%%%%   varnum          record the number of variations of the move. Set to 0 by \xskak at do@dothemove.
-%%%%   pgnpiece        K,Q,R,B or N (independent from language). Is empty for Pawn and Castling moves
-%%%%   piece           K,Q,R,B,N or P or k,q,r,b,n or p (for black). Is empty for Castling
-%%%%   piecechar       K,Q,R,B,N or p. Is empty for Castling
-%%%%   castling        sets the boolean xskakboolcastling, is true for short *and* long castling
-%%%%   longcastling    sets the boolean xskakboollongcastling
-%%%%   capture         sets the boolean xskakboolcapture
-%%%%   check           sets the boolean xskakboolcheck
-%%%%   mate            sets the boolean xskakboolmate
-%%%%   lostpiece       In case of a capture move: K,Q,R,B,N or P or k,q,r,b,n or p(independent from language).
-%%%%   lostpiecechar   In case of a capture move: K,Q,R,B,N or p, empty else
-%%%%   pgnlostpiece    in case of a capture move: K,Q,R,B, or N (independent from language)
-%%%%   movefrom        a field, in case of castling: field of king and rook (e.g. e1,h1)
-%%%%   pgnmovefrom     the additional movefrom description in the pgn-notation for ambiguous
-%%%%                   moves and pawn captures.
-%%%%   moveto          a field, in case of castling empty
-%%%%   move            movefrom-moveto, in case of castling two moves: e.g. e1-f1,h1-f1
-%%%%   enpassant       sets the boolean xskakboolenpassant to true
-%%%%                   if the current move is an ep, else to false
-%%%%   enpassantsquare a field, after e.g. e4 the value is e3. Indicates if the next
-%%%%                   pawn move can be a ep.
-%%%%   promotion       sets the boolean xskakboolpromotion
-%%%%   promotionpiece  Q,R,B,N or q,r,b,n (undependant from language) or empty
-%%%%   promotionpiecechar Q,R,B,N (undependant from language) or empty
-%%%%   addpieces       contains the (list of) piece(s) that should be put on the board
-%%%%                   e.g. {kg8,rf8} in case of black short castling
-%%%%   clearfields     the list of fields that should be emptied on board
-%%%%   comments        contains the short comments after a move (!,? \withattack{} etc)
-%%%%   nextfen             the fen position after the current move (halfmoves, castling are perhaps wrong)
-%%%%   pastfen        the fen position *before* the current move (identical to the fen after the previous move)
-%%%%   nag             larger comments after (between) move.
-%%%%   san             standard algebraic notation of the move.
-%%%%                   e.g. \textsymfigsymbol{R}a2, e\capturesymbol d5,
-%%%%                   \castlingchar\castlinghyphen\castlingchar
-%%%%   lan             long algebraic notation of the move.
-%%%%   opennr          The number representation for an open move e.g. 2...
-%%% Game related informations. Don't use @ or "." to simplify use by the user
-%%%%   gameid         stores the gameid (for easier retrieving)
-%%%%   initfen       The fen before the first move. Set by \newchessgame
-%%%%   initplayer    w or b, The color of the next (first) player.
-%%%%                  (must be identical to the color in the initfen).
-%%%%                  Also set by \newchessgame
-%%%%   initmovenr    The number of the first move (must be identical to the fullmove number in the initfen)
-%%%%                  Also set by \newchessgame
-%%%%   lastfen            The fen after the last move, set during parsing.
-%%%%   lastplayer     The fen color of the last move, set during parsing
-%%%%                  = color of the fen before the last move!
-%%%%                  not identical to color in fen!
-%%%%   lastmovenr     The number of the last move, set during parsing.
-%%%%   lastmoveid     combination of lastmovenr+lastplayer
-%%%%   nextplayer     The fen color of the player which should move next, set during parsing
-%%%%                  = color of the fen
-%%%%   nextmovenr     The number of the next move, identical to number in fen
-%%%%   nextmoveid     combination of nextmovenr+nextmoveplayer
-%%%%  diagramlist     A comma separated list of MovenrPlayer (e.g. 3b,20w). Records the moves with an $d or $D after the move
-
-%% save the original skak definition
-\let\xskak at oriDoTheMove\DoTheMove
-
-%% define a new DoTheMove:
-\def\xskak at do@dothemove#1{% move the piece from #1 to \MoveToFile\MoveToRank
-  %%%%% Store the move and board informations, will be used to retrieve the pieces deleted
-  \Fen at calculate
-  \setkeys[UFCB]{locinit}{maxfield=h8,zero=false}%
-  \setkeys[UFCB]{locfill}{setfen=\temp at board}%
-  %\expandafter\show\csname board at val@f4r4 at piecechar\endcsname
-  %===========%
-  %% vars + varnum
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.vars\endcsname{}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.vars\endcsname
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.varnum\endcsname{0}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.varnum\endcsname
-  %===========%
-  %% pgnpiece
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnpiece\endcsname{%
-     \EqStr{\PieceNameToMove}{Z}{}{\PieceNameToMove}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnpiece\endcsname
-  %===========%
-  %% piece
-  \edef\@tempa{\PieceNameToMove}%
-  \expandafter\board at conv@chartolowerchar\@tempa
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piece\endcsname{%
-       \Castling%
-         {}%
-         {\EqStr{\PieceNameToMove}{Z}%
-           {\WhiteToMove{P}{p}}%
-           {\WhiteToMove%
-             {\PieceNameToMove}%
-             {\board at temp@char}}}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piece\endcsname
-  %===========%
-  %% piecechar
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname{%
-       \Castling%
-         {}%
-         {\EqStr{\PieceNameToMove}{Z}%
-           {p}%
-           {\PieceNameToMove}}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname
-  %===========%
-  %% lostpiece
-  % the values for enpassant move are corrected in the enpassant commands!
-  \expandafter\board at conv@filechartonumber\MoveToFile{cnt at board@file}%
-  \def\@tempa{empty}%
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname{%
-      \expandafter\ifx
-          \csname board at val@f\the\c at cnt@board at file r\MoveToRank @piecechar\endcsname
-          \@tempa
-      \else
-         \expandafter\ifx
-            \csname board at val@f\the\c at cnt@board at file r\MoveToRank @piecechar\endcsname
-            \relax
-         \else
-            \csname board at val@f\the\c at cnt@board at file r\MoveToRank @piecechar\endcsname
-         \fi
-      \fi}%
-  %===========%
-  %% pgnlostpiece
-  \def\board at temp@char{P}%
-  \edef\@tempa{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname}%
-  \expandafter\if
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname\@empty
-  \else
-     \expandafter\board at conv@chartoupperchar\@tempa%
-  \fi
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnlostpiece\endcsname{%
-       \if\board at temp@char P%
-       \else
-       \board at temp@char
-       \fi}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnlostpiece\endcsname
-  %===========%
-  %% Opennr
-  %%
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.opennr\endcsname{%
-      \the\c at move\WhiteToMove
-        {\noexpand\whiteopen\noexpand\beforewhite}%
-        {\noexpand\blackopen\noexpand\beforeblack}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.opennr\endcsname
-  %===========%
-  %% MoveFrom-field
-  %% expanded to set also castling from fields e.g. e1,h1 for short white castling
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.movefrom\endcsname{%
-      \Castling
-        {\LongCastling%
-         {\WhiteToMove{e1,a1}{e8,a8}}%
-         {\WhiteToMove{e1,h1}{e8,h8}}}%
-        {#1}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.movefrom\endcsname
-  %===========%
-  %% pgnmovefrom
-  \expandafter\xdef
-   \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnmovefrom\endcsname{%
-    \EqStr{\FileDiscriminator}{Z}%
-     {}{\FileDiscriminator}%
-    \EqStr{\RankDiscriminator}{Z}%
-     {}{\RankDiscriminator}%
-     }%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnmovefrom\endcsname
-  %===========%
-  %% MoveTo-field
-  %% added castling test: White O-O -> g1,f1
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.moveto\endcsname{%
-       \Castling
-        {\LongCastling
-         {\WhiteToMove{c1,d1}{c8,d8}}%
-         {\WhiteToMove{g1,f1}{g8,f8}}}%
-        {\MoveToFile\MoveToRank}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.moveto\endcsname
-  %===========%
-  %% Move
-  %% two moves for castling
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.move\endcsname{%
-      \Castling
-        {\LongCastling%
-         {\WhiteToMove{e1-c1,a1-d1}{e8-c8,a8-d8}}%
-         {\WhiteToMove{e1-g1,h1-f1}{e8-g8,h8-f8}}}%
-        {\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.movefrom\endcsname
-         -\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.moveto\endcsname}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.move\endcsname
-  %===========%
-  %% Castling
-  % new naming
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.castling\endcsname{%
-        \Castling{\noexpand\setboolean{xskakboolcastling}{true}}%
-                 {\noexpand\setboolean{xskakboolcastling}{false}}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.castling\endcsname
-  %===========%
-  %% Longcastling
-  % new naming
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.longcastling\endcsname{%
-        \LongCastling{\noexpand\setboolean{xskakboollongcastling}{true}}%
-                     {\noexpand\setboolean{xskakboollongcastling}{false}}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.longcastling\endcsname
-  %% Capture
-  %% new naming, changed to boolean!
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.capture\endcsname{%
-       \Capture{\noexpand\setboolean{xskakboolcapture}{true}}%
-               {\noexpand\setboolean{xskakboolcapture}{false}}}%
-  %===========%
-  %% Check?
-  %%new naming, changed to boolean
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.check\endcsname{%
-        \ifx\CheckTest\@empty
-          \noexpand\setboolean{xskakboolcheck}{false}%
-        \else
-          \noexpand\setboolean{xskakboolcheck}{true}%
-        \fi}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.check\endcsname
-  %===========%
-  %% Mate?
-  %%new naming, changed to boolean
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.mate\endcsname{%
-        \ifx\MateTest\xskak at matetest\relax
-           \noexpand\setboolean{xskakboolmate}{true}%
-        \else
-           \noexpand\setboolean{xskakboolmate}{false}%
-         \fi}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.mate\endcsname
-  %===========%
-  %% Enpassantsquare
-  %%new naming
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassantsquare\endcsname
-        {\EnPassantSquare}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassantsquare\endcsname
-  %===========%
-  %% Enpassantcheck
-  %% new naming, changed to boolean
-  \begingroup
-    \WhiteToMove%
-     {\ifthenelse%
-      {\equal{\csname Xskak.\xskak at val@gameid.\the\c at move.w.piecechar\endcsname}{p}}
-      {% pawn move:
-        \ifthenelse%white enpassant
-         {\equal
-          {\csname Xskak.\xskak at val@gameid.\the\c at move.w.moveto\endcsname}%
-          {\csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.enpassantsquare\endcsname}}%
-         {\expandafter\xdef
-            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
-               {\noexpand\setboolean{xskakboolenpassant}{true}}%
-          \expandafter\xdef
-            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname{p}}%
-         {\expandafter\xdef
-            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
-              {\noexpand\setboolean{xskakboolenpassant}{false}}}}%
-        {\expandafter\xdef
-            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
-              {\noexpand\setboolean{xskakboolenpassant}{false}}}%
-         }%
-     {\ifthenelse
-      {\equal{\csname Xskak.\xskak at val@gameid.\the\c at move.b.moveto\endcsname}{p}}
-      {%pawn move:
-       \ifthenelse%black enpassant
-         {\equal
-          {\csname Xskak.\xskak at val@gameid.\the\c at move.b.moveto\endcsname}%
-          {\csname Xskak.\xskak at val@gameid.\the\c at move.w.enpassantsquare\endcsname}}%
-         {\expandafter\xdef
-            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
-              {\noexpand\setboolean{xskakboolenpassant}{true}}%
-          \expandafter\xdef
-            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname{P}}%
-         {\expandafter\xdef
-            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
-                 {\noexpand\setboolean{xskakboolenpassant}{false}}}}%
-         {\expandafter\xdef
-            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
-              {\noexpand\setboolean{xskakboolenpassant}{false}}}}%
-         %
-           \endgroup
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname
-  %===========%
-  %% lostpiecechar
-  \edef\@tempa{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname}%
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiecechar\endcsname{%
-      \if\@tempa P%
-        p%
-      \else
-       \if\@tempa p%
-        p%
-       \else
-        \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnlostpiece\endcsname
-       \fi
-      \fi}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiecechar\endcsname
-  %===========%
-  %% Promotion
-  %%new naming, added boolean
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiecechar\endcsname{%
-        \Promotion{\PromotionPieceName}{}}%
-  \edef\@tempa{\PromotionPieceName}%
-  \if\@tempa\@empty\else
-   \WhiteToMove{\let\board at temp@char\@tempa}{\expandafter\board at conv@chartolowerchar\@tempa}%
-  \fi
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiece\endcsname{%
-        \Promotion{\board at temp@char}{}}%
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotion\endcsname{%
-        \Promotion%
-          {\noexpand\setboolean{xskakboolpromotion}{true}}%
-          {\noexpand\setboolean{xskakboolpromotion}{false}}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotion\endcsname
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiece\endcsname
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiecechar\endcsname
-  %=============%
-  %% san
-  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.check\endcsname
-  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.mate\endcsname
-  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
-  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotion\endcsname
-  \expandafter\protected at xdef
-   \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.san\endcsname{%
-    \Castling
-     {\LongCastling
-      {\unexpanded{\castlingchar\castlinghyphen\castlingchar\castlinghyphen\castlingchar}}%
-      {\unexpanded{\castlingchar\castlinghyphen\castlingchar}}}%
-     {\if\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname p\else
-      \noexpand\textsymfigsymbol{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname}%
-      \fi
-      \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnmovefrom\endcsname
-      \Capture{\noexpand\capturesymbol}{}%
-      \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.moveto\endcsname
-      \ifxskakboolpromotion
-      \noexpand\textsymfigsymbol{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiecechar\endcsname}%
-      \fi
-      \ifxskakboolenpassant
-      \noexpand\xskakenpassanttext
-      \fi}%move from below 2008-10-10
-      \ifxskakboolcheck
-      \noexpand\checksymbol
-      \fi
-      \ifxskakboolmate
-      \noexpand\mate
-      \fi
-      }%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.san\endcsname
-  %=============%
-  %% lan
-  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.check\endcsname
-  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.mate\endcsname
-  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
-  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotion\endcsname
-  \expandafter\protected at xdef
-   \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lan\endcsname{%
-    \Castling
-     {\LongCastling
-      {\unexpanded{\castlingchar\castlinghyphen\castlingchar\castlinghyphen\castlingchar}}%
-      {\unexpanded{\castlingchar\castlinghyphen\castlingchar}}}%
-     {\if\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname p\else
-      \noexpand\textsymfigsymbol{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname}%
-      \fi
-      \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.movefrom\endcsname
-      \Capture{\noexpand\capturesymbol}{\noexpand\xskakmovehyphen}%
-      \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.moveto\endcsname
-      \ifxskakboolpromotion
-      \noexpand\textsymfigsymbol{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiecechar\endcsname}%
-      \fi
-      \ifxskakboolenpassant
-      \noexpand\xskakenpassanttext
-      \fi}%move from below 2008-10-10
-      \ifxskakboolcheck
-      \noexpand\checksymbol
-      \fi
-      \ifxskakboolmate
-      \noexpand\mate
-      \fi
-      }%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lan\endcsname
-  %===========%
-  %% addpieces
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.addpieces\endcsname{%
-       \Castling%
-         {\LongCastling%
-           {\WhiteToMove{Kc1,Re1}{kc8,re8}}%
-           {\WhiteToMove{Kg1,Rf1}{kg8,rf8}}}%
-         {\Promotion%
-           {\PromotionPieceName\MoveToFile\MoveToRank}%
-           {\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piece\endcsname
-            \MoveToFile\MoveToRank}%
-          }}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.addpieces\endcsname
-  %===========%
-  %% clearfields
-  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.clearfields\endcsname{%
-       \Castling%
-         {\LongCastling%
-           {e\WhiteToMove{1}{8},a\WhiteToMove{1}{8}}%
-           {e\WhiteToMove{1}{8},h\WhiteToMove{1}{8}}}%
-         {\ifxskakboolenpassant%
-             \WhiteToMove
-              {\csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.moveto\endcsname,#1}%
-              {\csname Xskak.\xskak at val@gameid.\the\c at move.w.moveto\endcsname,#1}%
-           \else
-               #1%
-           \fi}}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.clearfields\endcsname
-  %============%
-  %% comments
-  \toks@=\expandafter{\MoveRest}%
-  \expandafter\xdef
-     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.comments\endcsname{%
-        \the\toks@}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.comments\endcsname
-  %============%
-  %% lastplayer, nextplayer, lastmovenr, nextmovenr
-  \expandafter\xdef
-    \csname Xskak\xskak at val@gameid lastplayer\endcsname{\WhiteToMove{w}{b}}%
-  \expandafter\xdef
-    \csname Xskak\xskak at val@gameid nextplayer\endcsname{\WhiteToMove{b}{w}}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid lastmovenr\endcsname{\the\c at move}%
-   \expandafter\xdef
-    \csname Xskak\xskak at val@gameid lastmoveid\endcsname{\the\c at move\WhiteToMove{w}{b}}%
-   \WhiteToMove{%
-    \expandafter\xdef
-     \csname Xskak\xskak at val@gameid nextmovenr\endcsname{\the\c at move}%
-    \expandafter\xdef
-     \csname Xskak\xskak at val@gameid nextmoveid\endcsname{\the\c at move b}}%
-    {\expandafter\xdef
-      \csname Xskak\xskak at val@gameid nextmovenr\endcsname{\the\numexpr\the\c at move+1\relax}%
-     \expandafter\xdef
-      \csname Xskak\xskak at val@gameid nextmoveid\endcsname{\the\numexpr\the\c at move+1\relax w}}%
-   %=============%
-   % Initialization of the nag-commands (are filled later by \Mainline)%
-   \expandafter\xdef\csname
-     Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.nag\endcsname{}%
-  \edef\oldpiece{\Get{\MoveToFile\MoveToRank}}%
-  \Set{\MoveTo}{\Get{#1}}\Set{#1}{E}%
-  \gdef\MoveFrom{#1}%
-  %===========%
-  %%fen position _after_ the move
-  \count@=\value{move}%
-  \WhiteToMove{}{\advance\count@ by 1\relax}%
-  \xskak at specialfencalculate
-  \expandafter\global\expandafter\let
-   \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.nextfen\endcsname\temp at board
-  \xskak at do@getnextmoveid{\the\c at move}{\WhiteToMove{w}{b}}%
-  %% fen before next move
-  \expandafter\xdef
-    \csname
-     Xskak.\xskak at val@gameid.\xskak at temp@movenr.\xskak at temp@player.pastfen\endcsname{\temp at board}%
-  %% current last fen of game
-  \expandafter\xdef
-     \csname
-     Xskak\xskak at val@gameid lastfen\endcsname{\temp at board}%
-  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.nextfen\endcsname
-}
-
-%% overwrite the original skak definition:
-\let\DoTheMove\xskak at do@dothemove
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%% enabling parsing of comments
-%%% comments a NAG ($<number>) or text in \xskakcomment{...}
-%%% NAG and comments must have spaces between them!
-
-%% tests is the argument is a NAG
-\def\xskak at test@nag#1#2XX{%
-       \ifthenelse{\equal{#1}{$}}%
-         {\setboolean{xskakboolnag}{true}}{\setboolean{xskakboolnag}{false}}}
-
-%% tests if the argument is \xskakcomment{...}
-\def\xskak at test@comment#1=\xskakcomment#2=={%
-       \def\@tempa{#1}%
-       \ifx\@tempa\empty%#1 beginnt mit \xskakcomment
-        \setboolean{xskakboolcomment}{true}%
-       \else
-        \setboolean{xskakboolcomment}{false}%
-       \fi}
-
-%% saving old version of \Mainline:
-\let\xskak at oriMainline\Mainline
-
-%% define a new own Mainline command
-\def\xskak at do@parsemainline(#1 #2){%
- \let\xskak at save@nag\gdef
- \ifxskakboolnag
-  \let\xskak at save@nag\g at addto@macro
- \fi
- \ifxskakboolcomment
-  \let\xskak at save@nag\g at addto@macro
- \fi
- \xskak at test@comment=#1=\xskakcomment==%
- \ifxskakboolcomment
-  \ExecuteMoves{% mainline
-   \WhiteToMove
-     {\expandafter\xskak at save@nag
-       \csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.nag\endcsname
-       {{\xskak at beforecomment{#1}}}%
-     %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.nag\endcsname
-     }%
-     {%
-      \expandafter\xskak at save@nag
-       \csname Xskak.\xskak at val@gameid.\the\c at move.w.nag\endcsname
-       {{\xskak at beforecomment{#1}}}%
-     %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.w.nag\endcsname
-     }}%
-     {}%variation
-  \PrintMoves{{\xskak at beforecomment{#1}}}{}%
-  \xskak at do@parsemainline(#2)%
- \else
- \xskak at test@nag#1YXX%
- \ifthenelse%
-  {\boolean{xskakboolnag}}%
-  {\ExecuteMoves{% mainline%
-   \WhiteToMove
-     {\ifthenelse{\equal{#1}{$D} \OR \equal{#1}{$d}}%
-        {\expandafter\ifx
-          \csname Xskak\xskak at val@gameid diagramlist\endcsname\@empty
-          \expandafter\xdef
-             \csname Xskak\xskak at val@gameid diagramlist\endcsname
-           {\the\numexpr\the\c at move-1\relax b}%
-         \else
-          \toks@=\expandafter\expandafter\expandafter{%
-           \csname Xskak\xskak at val@gameid diagramlist\endcsname}%
-          \expandafter\xdef
-           \csname Xskak\xskak at val@gameid diagramlist\endcsname
-           {\the\toks@,\the\numexpr\the\c at move-1\relax b}%
-          \fi
-        }%
-        {\expandafter\xskak at save@nag
-          \csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.nag\endcsname
-          {{\xskak at beforeNAG{\csname#1\endcsname}}}}%
-     %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.nag\endcsname
-     }%
-     {\ifthenelse{\equal{#1}{$D} \OR \equal{#1}{$d}}%
-        {\expandafter\ifx
-          \csname Xskak\xskak at val@gameid diagramlist\endcsname\@empty
-          \expandafter\xdef
-             \csname Xskak\xskak at val@gameid diagramlist\endcsname
-           {\the\c at move w}%
-         \else
-          \toks@=\expandafter\expandafter\expandafter{%
-           \csname Xskak\xskak at val@gameid diagramlist\endcsname}%
-          \expandafter\xdef
-           \csname Xskak\xskak at val@gameid diagramlist\endcsname
-           {\the\toks@,\the\c at move w}%
-          \fi
-        }%
-        {\expandafter\xskak at save@nag
-          \csname Xskak.\xskak at val@gameid.\the\c at move.w.nag\endcsname
-          {{\xskak at beforeNAG{\csname#1\endcsname}}}}%
-     %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.w.nag\endcsname
-     }}%
-   {}%variation
-   \PrintMoves{{\xskak at beforeNAG{\csname#1\endcsname}}}{}%
-    \xskak at do@parsemainline(#2)}%
-  {\EqStr{ }{#1}%
-    {\xskak at do@parsemainline(#2)}%
-    {%
-     \EqStr{Z}{#1}%
-      {}%
-      {\NumberNext%
-       {\EatNumber{#1}% sets \NumberOK, \ExpectedColour
-                                % executes a move not separated from the
-                                % number with a space, eg, 1.e4
-                                %{\gdef\NumberNext{\False}\Mainline(#2)}%
-                                %\gdef\NumberNext{\False}%
-        \xskak at do@parsemainline(#2)}%
-       {\Fen at calculate% 16.10.2008 skak1.5
-        \expandafter\xdef\csname chessgame.skak.temp.previous\endcsname{\temp at board}%16.10.2008 skak1.5
-       \MakeMoveMainline{#1}%
-        \xskak at do@parsemainline(#2)}}}}%
-    \fi}
-
-%% overwrite the skak version:
-%% currently needed as \runmoves use \Mainline
-\let\Mainline\xskak at do@parsemainline
-
-%% Printing
-%%% Styles
-
-%% helper command. Copies the commands around
-\newcommand\xskak at do@copystyleitem[2]{% #1<type> to #2<type>
- %use empty #2 to copy to the skak original commands
- %use empty #1 to copy from the original skak commands
- %use xskak at styleitem@<name>@ to copy a named style item
- \ifcsname #1beforeblack\endcsname
-  \expandafter\global\expandafter\let
-     \csname #2whiteopen\expandafter\endcsname
-     \csname #1whiteopen\endcsname
-  \expandafter\global\expandafter\let
-     \csname #2blackopen\expandafter\endcsname
-     \csname #1blackopen\endcsname
-  \expandafter\global\expandafter\let
-     \csname #2beforewhite\expandafter\endcsname
-     \csname #1beforewhite\endcsname
-  \expandafter\global\expandafter\let
-     \csname #2beforeblack\expandafter\endcsname
-     \csname #1beforeblack\endcsname
-  \expandafter\global\expandafter\let
-     \csname #2afterwhite\expandafter\endcsname
-     \csname #1afterwhite\endcsname
-  \expandafter\global\expandafter\let
-     \csname #2afterblack\expandafter\endcsname
-     \csname #1afterblack\endcsname
-  \expandafter\global\expandafter\let
-     \csname #2beforenumber\expandafter\endcsname
-     \csname #1beforenumber\endcsname
-  \expandafter\global\expandafter\let
-     \csname #2opencommands\expandafter\endcsname
-     \csname #1opencommands\endcsname
-  \expandafter\global\expandafter\let
-     \csname #2closecommands\expandafter\endcsname
-     \csname #1closecommands\endcsname
-  %% two specific xskak command for the comments:
-  \expandafter\global\expandafter\let
-     \csname #2xskak at beforecomment\expandafter\endcsname
-     \csname #1xskak at beforecomment\endcsname
-  \expandafter\global\expandafter\let
-     \csname #2xskak at beforeNAG\expandafter\endcsname
-     \csname #1xskak at beforeNAG\endcsname
- \else
-  \PackageError{xskak}{style template #1 doesn't exist!}{}%
- \fi}
-
-%% new style items
- \def\xskak at temp@name{xskak at styleitem@@empty@}%
- \setkeys[UFXS]{styleitem}{%
-   opencommands={},
-   beforenumber={},
-   whiteopen={},
-   blackopen={},
-   beforewhite={},
-   afterwhite={},
-   beforeblack={},
-   afterblack={},
-   closecommands={},
-   beforecomment={},
-   beforeNAG={}}
-
-\newcommand\xskak at beforeNAG{}
-
-\newcommand\xskaknewstyleitem[2][]{%
- \ifcsname xskak at styleitem@#2 at beforeblack\endcsname
-  \PackageWarning{xskak}{Style item #2 already exists.
-                         I overwrite  it!}{}%
- \fi
- \def\xskak at temp@name{xskak at styleitem@#2@}%
- \setkeys*[UFXS]{styleiteminit}{%
-  template=@empty, %empty everything
-  #1}%             %use a possible template.
- \setrmkeys[UFXS]{styleitem}}
-
-%%% styles
-
-
-
-\newcommand*\xskak at do@splitlevel[1]{%
-     \def\xskak at temp@levelprefix{#1}%
-     \def\xskak at temp@levelpostfix{}%
-     \def\xskak at temp@levelnumber{0}}
-
-\ifxskakpdfmatch
-   \renewcommand*\xskak at do@splitlevel[1]{%
-    \ifnum\pdfmatch {([^0-9]*)([0-9]+)(.*)}{#1}=1 %
-     \edef\xskak at temp@levelprefix{\expandafter\strip at prefix\pdflastmatch1}%
-     \edef\xskak at temp@levelpostfix{\expandafter\strip at prefix\pdflastmatch3}%
-     \edef\xskak at temp@levelnumber{\expandafter\strip at prefix\pdflastmatch2}%
-    \else
-     \edef\xskak at temp@levelprefix{#1}%
-     \edef\xskak at temp@levelpostfix{}%
-     \edef\xskak at temp@levelnumber{0}%
-    \fi}%
-\fi
-
-\newcommand\xskaknewstyle[2][]{%
- \begingroup
- \def\xskak at temp@name{xskak at style@#2@}%
- \ifcsname\xskak at temp@name 1 at item\endcsname
-  \PackageError{xskak}{style #2 already exists}{}%
- \else
-  \setkeys[UFXS]{style}{level=1,styleitem=@empty,#1}%
- \fi
- \endgroup
-}
-
-\newcommand\xskakaddtostyle[2][]{%
- \def\xskak at temp@name{xskak at style@#2@}%
- \ifcsname\xskak at temp@name 1 at item\endcsname
-  \setkeys[UFXS]{style}{#1}%
- \else
-  \PackageError{xskak}{style #2 doesn't exist}{}%
- \fi
-}
-
-%% using and setting styles:
-\newcommand\xskak at use@varstyle[1]{%
-  \ifcsname xskak at style@\xskak at val@stylename @#1 at item\endcsname
-   %use xskak at styleitem@<name>@ to copy a named style item
-   \edef\@tempa{%
-      xskak at styleitem@%
-      \csname xskak at style@\xskak at val@stylename @#1 at item\endcsname%=<name>
-       @}%
-   \xskak at do@copystyleitem{%
-   \@tempa}{}%
-  \else
-    \ifxskakpdfmatch
-     \xskak at do@splitlevel{#1}%
-     \ifnum\xskak at temp@levelnumber>0\relax
-        \ifnum\xskak at temp@levelnumber=1\relax
-          \xskak at use@varstyle{1}%
-        \else
-          \xskak at use@varstyle{%
-             \xskak at temp@levelprefix
-             \the\numexpr\xskak at temp@levelnumber-1\relax
-             \xskak at temp@levelpostfix}%
-        \fi
-     \else
-      \PackageError{xskak}{Unknown level #1}{}%
-     \fi
-    \else
-       \ifnum#1=1\relax
-          \xskak at use@varstyle{1}%
-        \else
-          \xskak at use@varstyle{%
-             \the\numexpr#1-1\relax}%
-        \fi
-    \fi
-  \fi
-}
-
-%% default styles A,B,C, at empty
-
-\xskaknewstyleitem[%
- whiteopen=\space,
- blackopen=\ldots,
- afterwhite=\space,
- afterblack=\space]{styleB}
-
-\xskaknewstyleitem[%
- whiteopen=.,
- blackopen=. -,
- beforewhite=\space,
- beforeblack={,\space}]{styleA}
-
-\xskaknewstyleitem[%
- opencommands={\begin{tabbing}%
-    \hspace{.2\linewidth}\=\hspace{.2\linewidth}\=%
-    \hspace{.2\linewidth}\= \kill},
- closecommands={\end{tabbing}},
- blackopen=\>\ldots,
- beforenumber=\>,
- beforewhite=\>,
- beforeblack=\>,
- afterblack=\\]{styleC}
-
-\xskaknewstyleitem[%
- whiteopen={.\,},
- blackopen={\ldots\,},
- afterwhite={\ },
- afterblack={\ }]{UF}
-
-\xskaknewstyleitem[%
- opencommands =\begingroup\normalcolor\ttfamily\textbackslash opencommands\endgroup\ ,
- closecommands=\begingroup\normalcolor\ttfamily\textbackslash closecommands\endgroup\ ,
- whiteopen    =\begingroup\normalcolor\ttfamily\textbackslash whiteopen\endgroup\ ,
- blackopen    =\begingroup\normalcolor\ttfamily\textbackslash blackopen\endgroup\ ,
- beforenumber =\begingroup\normalcolor\ttfamily\textbackslash beforenumber\endgroup\ ,
- beforewhite  =\begingroup\normalcolor\ttfamily\textbackslash beforewhite\endgroup\ ,
- afterwhite   =\begingroup\normalcolor\ttfamily\textbackslash afterwhite\endgroup\ ,
- beforeblack  =\begingroup\normalcolor\ttfamily\textbackslash beforeblack\endgroup\ ,
- afterblack   =\begingroup\normalcolor\ttfamily\textbackslash afterblack\endgroup\ ,
- beforecomment=\begingroup\normalcolor\ttfamily\textbackslash beforecomment\endgroup\ ,
- beforeNAG=\color{green}\begingroup\normalcolor\ttfamily\textbackslash beforeNAG\endgroup\ ,
- ]{showcommands}
-
-\xskaknewstyle[level= 1,styleitem=styleB,font=\bfseries,
-               level= 3,font=\itshape]{styleB}
-
-\xskaknewstyle[level= 1,styleitem=styleA,font=\bfseries,
-               level= 3,font=\itshape]{styleA}
-
-\xskaknewstyle[level= 1,styleitem=styleC,font=\bfseries,
-               level= 2,styleitem=styleB,
-               level= 3,font=\itshape]{styleC}
-
-\xskaknewstyle[level= 1,styleitem=@empty,font=\bfseries]{@empty}
-
-\xskaknewstyle[level= 1,styleitem=UF,font=\bfseries,
-               level= 3,font=\itshape]{UF}
-
-\xskaknewstyle[level= 1,styleitem=showcommands,font=\begingroup\ttfamily\textbackslash mainlinestyle\endgroup\ ,
-               level= 2,font=\begingroup\ttfamily\textbackslash variationstyle\endgroup\ ]{test}
-
-%% default level and style
-\xskakset{style=styleB,level=1}
-
-%%%%%%%%%%%%%%%%%%%%%
-\gdef\xskak at do@printmove{\xskakget{san}}
-
-\newcommand\printchessgame[1][]{%
- \setkeys*[UFXS]{print}{#1}%set style and level
- \leavevmode%UF 2012-09-10 to allow wrapping around wrapfigure
- \begingroup
- \setkeys*[UFXS]{xprint}{#1}%% getting the id
- \xdef\xskak at val@movenr{%
-  \csname Xskak\xskak at val@gameid initmovenr\endcsname}%
- \xdef\xskak at val@player{%
-  \csname Xskak\xskak at val@gameid initplayer\endcsname}%
- \xdef\xskak at val@stopmovenr{%
-  \csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
- \xdef\xskak at val@stopplayer{%
-  \csname Xskak\xskak at val@gameid lastplayer\endcsname}%
- \setkeys*[UFXS]{xprint}{#1}%% using the rest of the keys
-  \ifthenelse%
-    {\xskak at test@moveidingame{\xskak at val@movenr}{\xskak at val@player}{\xskak at val@gameid}}%
-    {}%
-    {\PackageWarning{xskak}{init move
-      \xskak at val@movenr\xskak at val@player\space
-       is not in the game.%
-     \MessageBreak The first move is used instead.}{}%
-     \xdef\xskak at val@movenr{%
-      \csname Xskak\xskak at val@gameid initmovenr\endcsname}%
-     \xdef\xskak at val@player{%
-      \csname Xskak\xskak at val@gameid initplayer\endcsname}}%
-  %%
-  \ifthenelse%
-    {\xskak at test@moveidingame{\xskak at val@stopmovenr}{\xskak at val@stopplayer}{\xskak at val@gameid}}%
-    {}%
-    {\PackageWarning{xskak}{stop move
-      \xskak at val@stopmovenr\xskak at val@stopplayer\space
-      is not in the game.\MessageBreak The last move is used instead.}{}%
-     \xdef\xskak at val@stopmovenr{%
-       \csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
-     \xdef\xskak at val@stopplayer{%
-       \csname Xskak\xskak at val@gameid lastplayer\endcsname}}%
-  %%
-  \ifthenelse%
-   {\xskak at test@lessorequal
-     {\xskak at val@movenr}{\xskak at val@player}%
-     {\xskak at val@stopmovenr}{\xskak at val@stopplayer}}%
-   %at least one move to print:
-   {\mainlinestyle
-    \opencommands
-    %% handle the first move
-    \ifthenelse{\equal{\xskak at val@player}{w}}%
-     %first move is a white move. Will be handled in the loop
-     {\beforenumber
-      \xskak at val@movenr
-      \whiteopen
-      \beforewhite
-      \xskak at do@printmove%
-      \xdef\xskak at val@player{b}}%
-     %first move is a black one:
-     {\beforenumber
-      \xskak at val@movenr
-      \blackopen
-      \beforeblack
-      \xskak at do@printmove
-  %    \afterblack
-      \xdef\xskak at val@movenr{\the\numexpr\xskak at val@movenr +1\relax}%
-      \xdef\xskak at val@player{w}}%
-    %% loop through the res
-    \whiledo
-     {\xskak at test@lessorequal
-       {\xskak at val@movenr}{\xskak at val@player}%
-       {\xskak at val@stopmovenr}{\xskak at val@stopplayer}}%
-     {\ifthenelse
-       {\equal{\xskak at val@player}{w}}%
-       {\afterblack
-        \beforenumber
-        \xskak at val@movenr
-        \whiteopen
-        \beforewhite
-        \xskak at do@printmove
-        }
-       {\afterwhite
-        \beforeblack
-        \xskak at do@printmove
-        %\afterblack
-        }%
-      \xskak at do@getnextmoveid{\xskak at val@movenr}{\xskak at val@player}%
-       \global\let\xskak at val@movenr\xskak at temp@movenr
-       \global\let\xskak at val@player\xskak at temp@player}%
-      \closecommands
-    }%
-  {}% no move
- \endgroup
- }
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%% Corrections/changes of skak commands %%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%%% changed \mainline and \variation for style/level handling
-%%% (added optional argument)
-
-\renewcommand\mainline[1][]{%
- \setkeys[UFXS]{print}{#1}%
- \begingroup\catcode`\#=12 \@mainline}
-
-\DeclareRobustCommand{\variation}[1][]{%
- \setkeys[UFXS]{print}{#1}%
- \begingroup\catcode`\#=12 \@variation}
-
-\newcommand\variationmovemode{\shortmoves}
-
-%added \shortmoves as \variation doesn't work in longmoves-mode
-\def\@variation#1{\endgroup\gdef\NumberNext{\True}%
-  \gdef\AfterBlack{\False}%
-  \gdef\PrintMoves{\True}%
-  \gdef\ExecuteMoves{\False}%
-  \gdef\StoreLastMove{\False}%
-  {\variationstyle\opencommands%
-   \variationmovemode
-   \xskak at do@parsemainline(#1 Z )%
-   \closecommands}}
-
-%%% Read/store commands
-%% changed to avoid the use of to much write/read registers
-%% ?? What did I mean? changed \FenBoard to \fenboard in \loadgame/restoregame
-%% ?? What did I mean? to avoid problems with the redefinition in texmate
-
-\def\savegame#1{% writes the board as fen to #1.fen
-  \immediate\openout0=#1.fen%
-  \Fen at calculate%
-  \immediate\write0{\temp at board}%
-  \immediate\closeout0}
-
-\def\loadgame#1{%
-  \def\load at read{}%
-  \openin0=#1.fen\relax%
-  \read0 to \load at read%
-  \closein0%
-  \expandafter\fenboard\expandafter{\load at read}}
-
-%%% ParseCastlingA changed so that comments are no longer lost:
-%%% -> bug report 2008-10-10
-
-\def\@setmoverestcastling(#1ZVW){\gdef\MoveRest{#1}}
-
-\def\ParseCastlingA(#1#2#3){%
-  \MyEqualB{#1#2}{-O}%
-  {\gdef\LongCastling{\True}%
-   \ParseCastlingAA(#3)}%
-  {\ParseCastlingAA(#1#2#3)}}
-
-\newcommand\ParseCastlingAA{}
-
-\def\ParseCastlingAA(#1#2#3){%
- \EqStr{Z}{#1}%
-  {}% we are done!
-  {\EqStr{#1}{+}% chess ?
-     {\protected at xdef\CheckTest{\checksymbol}%
-      \ParseCastlingAA(#2#3)}%
-     {\EqStr{#1}{##}% mate?
-       {\protected at xdef\MateTest{\mate}%
-        \ParseCastlingAA(#2#3)}%
-       {\@setmoverestcastling(#1#2#3)}}}}
-
-
-%%%% ExecutePawnMove changed:
-%%%% moved \xdef of EnPassantSquare before DoTheMove
-%%%% I hope it doesn't break something
-
-\def\ExecutePawnMove{% relies on the info obtained by ParseMove
-  \setcounter{halfmove}{0}%
-  \Capture%
-  {\EqPiece{E}{\Get{\MoveTo}}%
-    {\Set{\MoveToFile\FromRank}{E}}%
-    {}%
-    \xdef\EnPassantSquare{-}% U.F. moved before \DoTheMove
-    \DoTheMove{\FileDiscriminator\FromRank}%
-    }%
-  {\EqPiece{E}{\Get{\MoveToFile\FromRank}}%
-    {\xdef\EnPassantSquare{\MoveToFile\FromRank}% two square move
-      \DoTheMove{\MoveToFile\InitialRank}}%
-    {\xdef\EnPassantSquare{-}%
-      \DoTheMove{\MoveToFile\FromRank}% one square move
-      }}%
-  \Promotion%
-  {\Set{\MoveTo}{\PieceNameToPiece{\PromotionPieceName}{\WhiteToMove}}}%
-  {}}
-
-%%% the internal longmove command changed to get correct pawn moves:
-
-\def\xskak at do@printmove at algebraic{%
- \csname Xskak.\xskak at val@gameid.%
-        \WhiteToMove{\the\numexpr\the\c at move-1\relax}{\the\c at move}.%
-        \WhiteToMove{b}{w}.lan\endcsname
- \csname Xskak.\xskak at val@gameid.%
-        \WhiteToMove{\the\numexpr\the\c at move-1\relax}{\the\c at move}.%
-        \WhiteToMove{b}{w}.comments\endcsname{}}
-
-\let\skaklongmoves\longmoves %added 16.10.2008
-
-\def\longmoves{%
-\let\printmove=\xskak at do@printmove at algebraic
-\gdef\xskak at do@printmove{\xskakget{lan}}}
-
-\def\shortmoves{%
-\let\printmove=\printmove at san
-\gdef\xskak at do@printmove{\xskakget{san}}}
-
-%</xskak>
-%<*xskak-keys>
-\ProvidesFile{xskak-keys.sty}[2015/01/02 version v1.4 key definitions for xskak.sty]
-%%$Date: 2011/03/17 16:54:07 $$Version: 041ab49ae0e2 $
-
-
-%%%%%%%%%%%%%%%%%%%%%
-%%%% Keys
-%%%%%%%%%%%%%%%%%%%%%
-%% \newchessgame: fam: new
-\define at key[UFXS]{new}{id}[\xskak at val@defaultid]{\xdef\xskak at val@gameid{#1}}
-
-\define at key[UFXS]{new}{movenr}{\xdef\xskak at val@movenr{#1}}
-
-\define at key[UFXS]{new}{player}{\xdef\xskak at val@player{#1}}
-
-\define at key[UFXS]{new}{moveid}[\xskak at val@defaultmovenr\xskak at val@defaultplayer]{%
- \edef\@tempa{#1}%
- \xskak at split@moveid{\@tempa}%
- \global\let\xskak at val@movenr\xskak at temp@movenr
- \global\let\xskak at val@player\xskak at temp@player}
-
-\define at key[UFXS]{new}{newvar}[\xskak at val@gameid]{%
- \xdef\xskak at val@refgameid{#1}%
- \xdef\xskak at val@movenr{\csname Xskak#1lastmovenr\endcsname}%
- \xdef\xskak at val@player{\csname Xskak#1lastplayer\endcsname}}%
-
-
-
-\define at key[UFXS]{new}{reftag}{%
- \xdef\xskak at val@currenttag{#1}}
-
-\define at key[UFXS]{new}{refid}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFXS at new@id{\csname xskak at tag@#1 at refid\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFXS]{new}{refpastmovenr}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFXS at new@movenr{\csname xskak at tag@#1 at refpastmovenr\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFXS]{new}{refnextmovenr}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFXS at new@movenr{\csname xskak at tag@#1 at refnextmovenr\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFXS]{new}{refpastplayer}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFXS at new@movenr{\csname xskak at tag@#1 at refpastmovenr\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFXS]{new}{refnextplayer}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFXS at new@player{\csname xskak at tag@#1 at refnextplayer\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFXS]{new}{refpastmoveid}{%
-  \ifcsname xskak at tag@#1 at refid\endcsname
-   \UFXS at new@moveid{%
-    \csname xskak at tag@#1 at refpastmovenr\endcsname
-    \csname xskak at tag@#1 at refpastplayer\endcsname}%
-  \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFXS]{new}{refnextmoveid}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi
- \UFXS at new@moveid{%
-  \csname xskak at tag@#1 at refnextmovenr\endcsname
-  \csname xskak at tag@#1 at refnextplayer\endcsname}}
-
-\define at key[UFXS]{new}{refpast}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi
- \UFXS at new@refpastmoveid{#1}%
- \UFXS at new@refid{#1}}
-
-\define at key[UFXS]{new}{refnext}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFXS at new@refnextmoveid{#1}%
-  \UFXS at new@refid{#1}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-%% \xskakset: fam set
-\define at key[UFXS]{set}{id}[\xskak at val@defaultid]{\UFXS at new@id{#1}}
-
-\define at key[UFXS]{set}{movenr}{\UFXS at new@moveid{#1}}
-
-\define at key[UFXS]{set}{player}{\UFXS at new@player{#1}}
-
-\define at key[UFXS]{set}{moveid}[\xskak at val@defaultmovenr\xskak at val@defaultplayer]{%
- \UFXS at new@moveid{#1}}%
-
-\define at key[UFXS]{set}{stepmoveid}[1]{%
-  \count@=#1\relax
-   \ifthenelse{\the\count@>0}
-     {\whiledo{\the\count@>0}%
-       {\xskak at do@getnextmoveid{\xskak at val@movenr}{\xskak at val@player}%
-        \advance\count@ by -1%
-        \global\let\xskak at val@movenr\xskak at temp@movenr
-        \global\let\xskak at val@player\xskak at temp@player}%
-     }%
-     {\ifthenelse{\the\count@=0}%
-       {}%
-       {\whiledo{\the\count@<0}%
-        {\xskak at do@getpreviousmoveid{\xskak at val@movenr}{\xskak at val@player}%
-         \advance\count@ by 1%
-         \global\let\xskak at val@movenr\xskak at temp@movenr
-         \global\let\xskak at val@player\xskak at temp@player}%
-         \ifthenelse{\the\count@<1}%
-          {\PackageWarning{xskak}{Move number below 1!}{}}%
-          {}}}}
-
-\define at key[UFXS]{set}{lastmoveid}[\xskak at val@gameid]{%
-  \ifcsname Xskak#1initfen\endcsname
-   \xdef\xskak at val@gameid{#1}%
-  \else\PackageError{xskak}{Game with the id #1 doesn't exist.}{}%
-  \fi
-  \xdef\xskak at val@movenr{\csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
-  \xdef\xskak at val@player{\csname Xskak\xskak at val@gameid lastplayer\endcsname}}%
-
-\define at key[UFXS]{set}{defaultmoveid}{%
- \edef\@tempa{#1}\xskak at split@moveid{\@tempa}%
- %\xdef\xskak at val@movedefaultid{#1}%
- \xdef\xskak at val@defaultmovenr{\xskak at temp@movenr}%
- \xdef\xskak at val@defaultplayer{\xskak at temp@player}}
-
-\define at key[UFXS]{set}{defaultmovenr}{%
- \xdef\xskak at val@defaultmovenr{#1}}
-
-\define at key[UFXS]{set}{defaultplayer}{%
- \xdef\xskak at val@defaultplayer{#1}}
-
-\define at key[UFXS]{set}{defaultid}{\gdef\xskak at val@defaultid{#1}}
-
-\define at key[UFXS]{set}{defaultfen}{\gdef\xskak at val@defaultfen{#1}}
-
-\define at key[UFXS]{set}{tag}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-   \PackageWarning{xskak}{Overwrite tag name #1}{}%
- \fi
- \expandafter\xdef
-  \csname xskak at tag@#1 at refid\endcsname{\xskak at val@gameid}%
- \ifnum\the\c at move=0
-   \PackageWarning{xskak}{You haven't started a game yet. I won't set a tag!}{}%
- \else
-  \expandafter\xdef
-   \csname xskak at tag@#1 at refnextmovenr\endcsname{\the\c at move}%
-  \expandafter\xdef
-   \csname xskak at tag@#1 at refnextplayer\endcsname{\WhiteToMove{w}{b}}%
-  \expandafter\xdef
-   \csname xskak at tag@#1 at refpastplayer\endcsname{\WhiteToMove{b}{w}}%
-  \expandafter\xdef
-   \csname xskak at tag@#1 at refnextmoveid\endcsname{\the\c at move\WhiteToMove{w}{b}}%
-  \WhiteToMove
-   {\expandafter\xdef
-    \csname xskak at tag@#1 at refpastmovenr\endcsname{\the\numexpr\the\c at move-1\relax}}
-   {\expandafter\xdef
-    \csname xskak at tag@#1 at refpastmovenr\endcsname{\the\c at move}}
-  \expandafter\xdef
-   \csname xskak at tag@#1 at refpastmoveid\endcsname{%
-   \csname xskak at tag@#1 at refpastmovenr\endcsname
-   \csname xskak at tag@#1 at refpastplayer\endcsname}%
- \fi
-  }
-
-\define at key[UFXS]{set}{reftag}{%
- \UFXS at new@reftag{#1}}
-
-
-\define at key[UFXS]{set}{refid}{%
- \UFXS at new@refid{#1}}
-
-\define at key[UFXS]{set}{refpastmovenr}{%
- \UFXS at new@refpastmovenr{#1}}
-
-\define at key[UFXS]{set}{refnextmovenr}{%
- \UFXS at new@refnextmovenr{#1}}
-
-\define at key[UFXS]{set}{refpastplayer}{%
-  \UFXS at new@refpastplayer{#1}}
-
-\define at key[UFXS]{set}{refnextplayer}{%
-  \UFXS at new@refnextplayer{#1}}
-
-\define at key[UFXS]{set}{refpastmoveid}{%
-   \UFXS at new@refpastmoveid{#1}}
-
-\define at key[UFXS]{set}{refnextmoveid}{%
-  \UFXS at new@refnextmoveid{#1}}
-
-\define at key[UFXS]{set}{refpast}{%
-  \UFXS at new@refpast{#1}}
-
-\define at key[UFXS]{set}{refnext}{%
-  \UFXS at new@refnext{#1}}
-
-\define at key[UFXS]{set}{style}{%
- \ifcsname xskak at style@#1 at 1@item\endcsname
-  \def\xskak at val@stylename{#1}%
-  \def\mainlinestyle{%
-   \xskak at use@varstyle{\xskak at val@curlevel}%
-   \xskak at do@splitlevel{\xskak at val@curlevel}%
-   \ifnum\xskak at temp@levelnumber=0\relax
-   \else
-    \csname xskak at style@#1@\xskak at temp@levelnumber @xfont\endcsname
-   \fi
-   \csname xskak at style@#1@\xskak at val@curlevel @font\endcsname}%
-  \let\variationstyle\mainlinestyle
- \else
-  \PackageError{xskak}{Style #1 doesn't exist!}{}
- \fi}
-
-\define at key[UFXS]{set}{gstyle}{%
- \ifcsname xskak at style@#1 at 1@item\endcsname
-  \xdef\xskak at val@stylename{#1}%
-  \gdef\mainlinestyle{%
-   \xskak at use@varstyle{\xskak at val@curlevel}%
-   \xskak at do@splitlevel{\xskak at val@curlevel}%
-   \ifnum\xskak at temp@levelnumber=0\relax
-   \else
-    \csname xskak at style@#1@\xskak at temp@levelnumber @xfont\endcsname
-   \fi
-   \csname xskak at style@#1@\xskak at val@curlevel @font\endcsname}%
-  \global\let\variationstyle\mainlinestyle
- \else
-  \PackageError{xskak}{Style #1 doesn't exist!}{}
- \fi}
-
-
-\define at key[UFXS]{set}{level}{%
- \edef\xskak at val@curlevel{#1}}%
-
-\define at key[UFXS]{set}{glevel}{%
- \xdef\xskak at val@curlevel{#1}}%
-
-\define at key[UFXS]{set}{invar}[]{%
- \ifxskakpdfmatch
-  \xskak at do@splitlevel{\xskak at val@curlevel}%
-  \ifnum\xskak at temp@levelnumber=0\relax
-   \PackageWarning{xskak}{key invar ignored}{}%
-  \else
-   \edef\xskak at val@curlevel{%
-          \xskak at temp@levelprefix
-          \the\numexpr\xskak at temp@levelnumber+1\relax
-          \xskak at temp@levelpostfix}%
-  \fi
- \else
- %% no pdfmatch. Will give an error if the level is not a number
-   \edef\xskak at val@curlevel{%
-          \the\numexpr\xskak at val@curlevel+1\relax}%
- \fi}
-
-\define at key[UFXS]{set}{ginvar}[]{%
- \ifxskakpdfmatch
-  \xskak at do@splitlevel{\xskak at val@curlevel}%
-  \ifnum\xskak at temp@levelnumber=0\relax
-   \PackageWarning{xskak}{key ginvar ignored}{}%
-  \else
-   \xdef\xskak at val@curlevel{%
-          \xskak at temp@levelprefix
-          \the\numexpr\xskak at temp@levelnumber+1\relax
-          \xskak at temp@levelpostfix}%
-  \fi
- \else
- %% no pdfmatch. Will give an error if the level is not a number
-   \xdef\xskak at val@curlevel{%
-          \the\numexpr\xskak at val@curlevel+1\relax}%
- \fi}
-
-\define at key[UFXS]{set}{outvar}[]{%
- \ifxskakpdfmatch
-  \xskak at do@splitlevel{\xskak at val@curlevel}%
-   \ifnum\xskak at temp@levelnumber=0\relax
-    \PackageWarning{xskak}{key outvar ignored}{}%
-   \else
-     \ifnum\xskak at temp@levelnumber=1\relax
-      \PackageWarning{xskak}{Level has already  value 1}{}%
-     \else
-       \edef\xskak at val@curlevel{%
-          \xskak at temp@levelprefix
-          \the\numexpr\xskak at temp@levelnumber-1\relax
-          \xskak at temp@levelpostfix}%
-     \fi
-  \fi
- \else
-   \ifnum\xskak at val@curlevel=1\relax
-     \PackageWarning{xskak}{Level has already  value 1}{}%
-   \else
-     \edef\xskak at val@curlevel{%
-          \the\numexpr\xskak at val@curlevel-1}%
-   \fi
- \fi}
-
-\define at key[UFXS]{set}{goutvar}[]{%
- \ifxskakpdfmatch
-  \xskak at do@splitlevel{\xskak at val@curlevel}%
-   \ifnum\xskak at temp@levelnumber=0\relax
-    \PackageWarning{xskak}{key goutvar ignored}{}%
-   \else
-     \ifnum\xskak at temp@levelnumber=1\relax
-      \PackageWarning{xskak}{Level has already  value 1}{}%
-     \else
-       \xdef\xskak at val@curlevel{%
-          \xskak at temp@levelprefix
-          \the\numexpr\xskak at temp@levelnumber-1\relax
-          \xskak at temp@levelpostfix}%
-     \fi
-  \fi
- \else
-   \ifnum\xskak at val@curlevel=1\relax
-     \PackageWarning{xskak}{Level has already  value 1}{}%
-   \else
-     \xdef\xskak at val@curlevel{%
-          \the\numexpr\xskak at val@curlevel-1}%
-   \fi
- \fi}
-
-%% \resumechessgame: fam res
-\define at key[UFXS]{res}{id}{\UFXS at new@id{#1}}
-
-\define at key[UFXS]{res}{movenr}{\def\xskak at temp@movenr{#1}}
-
-\define at key[UFXS]{res}{player}{\def\xskak at temp@player{#1}}
-
-\define at key[UFXS]{res}{moveid}{\edef\@tempa{#1}\xskak at split@moveid{\@tempa}}
-
-\define at key[UFXS]{res}{newvar}[\xskak at val@gameid]{%
- \xdef\xskak at val@refgameid{#1}%
- \xdef\xskak at val@gameid{#1}%
- \def\xskak at temp@movenr{\csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
- \def\xskak at temp@player{\csname Xskak\xskak at val@gameid lastplayer\endcsname}}%
-
-
-\define at key[UFXS]{res}{reftag}{%
- \UFXS at new@reftag{#1}}
-
-\define at key[UFXS]{res}{refid}{%
- \UFXS at new@refid{#1}}
-
-\define at key[UFXS]{res}{refpastmovenr}{%
- \UFXS at new@refpastmovenr{#1}}
-
-\define at key[UFXS]{res}{refnextmovenr}{%
- \UFXS at new@refnextmovenr{#1}}
-
-\define at key[UFXS]{res}{refpastplayer}{%
-  \UFXS at new@refpastplayer{#1}}
-
-\define at key[UFXS]{res}{refnextplayer}{%
-  \UFXS at new@refnextplayer{#1}}
-
-\define at key[UFXS]{res}{refpastmoveid}{%
-   \UFXS at new@refpastmoveid{#1}}
-
-\define at key[UFXS]{res}{refnextmoveid}{%
-  \UFXS at new@refnextmoveid{#1}}
-
-\define at key[UFXS]{res}{refpast}{%
-  \UFXS at new@refpast{#1}}
-
-\define at key[UFXS]{res}{refnext}{%
-  \UFXS at new@refnext{#1}}
-
-%% pgn-keys are defined during definition.
-
-%%% xskakexportgames
-\define at key[UFXS]{export}{file}{\edef\xskak at val@exportfile{#1.xsk}}
-\define at key[UFXS]{export}{games}{\edef\xskak at val@exportgames{#1}}
-
-%%% xskakloop
-\define at key[UFXS]{loop}{id}{\UFXS at new@id{#1}}
-
-\define at key[UFXS]{loop}{reftag}{%
- \UFXS at new@reftag{#1}}
-
-\define at key[UFXS]{loop}{refid}{%
- \UFXS at new@refid{#1}}
-
-\define at key[UFXS]{loop}{initmoveid}{%
- \xskak at split@moveid{#1}%
- \global\let\xskak at val@movenr\xskak at temp@movenr
- \global\let\xskak at val@player\xskak at temp@player
- }
-\define at key[UFXS]{loop}{initmovenr}{%
- \xdef\xskak at val@movenr{#1}}
-
-\define at key[UFXS]{loop}{initplayer}{%
- \xdef\xskak at val@player{#1}}
-
-\define at key[UFXS]{loop}{stopmoveid}{%
- \xskak at split@moveid{#1}%
- \global\let\xskak at val@stopmovenr\xskak at temp@movenr
- \global\let\xskak at val@stopplayer\xskak at temp@player
- }
-\define at key[UFXS]{loop}{stopmovenr}{%
- \xdef\xskak at val@stopmovenr{#1}}
-
-\define at key[UFXS]{loop}{stopplayer}{%
- \xdef\xskak at val@stopplayer{#1}}
-
-\define at key[UFXS]{loop}{step}{\xdef\xskak at val@loopstep{#1}}
-
-\define at boolkey[UFXS]{loop}{showlast}[true]{}
-
-%%
-%% style items.
-
-%% keys
-\define at key[UFXS]{styleitem}{whiteopen}{%
- \expandafter\gdef\csname\xskak at temp@name whiteopen\endcsname{#1}}
-\define at key[UFXS]{styleitem}{blackopen}{%
- \expandafter\gdef\csname\xskak at temp@name blackopen\endcsname{#1}}
-\define at key[UFXS]{styleitem}{opencommands}{%
- \expandafter\gdef\csname\xskak at temp@name opencommands\endcsname{#1}}
-\define at key[UFXS]{styleitem}{closecommands}{%
- \expandafter\gdef\csname\xskak at temp@name closecommands\endcsname{#1}}
-\define at key[UFXS]{styleitem}{beforenumber}{%
- \expandafter\gdef\csname\xskak at temp@name beforenumber\endcsname{#1}}
-\define at key[UFXS]{styleitem}{beforewhite}{%
- \expandafter\gdef\csname\xskak at temp@name beforewhite\endcsname{#1}}
-\define at key[UFXS]{styleitem}{afterwhite}{%
- \expandafter\gdef\csname\xskak at temp@name afterwhite\endcsname{#1}}
-\define at key[UFXS]{styleitem}{beforeblack}{%
- \expandafter\gdef\csname\xskak at temp@name beforeblack\endcsname{#1}}
-\define at key[UFXS]{styleitem}{afterblack}{%
- \expandafter\gdef\csname\xskak at temp@name afterblack\endcsname{#1}}
-\define at key[UFXS]{styleitem}{beforecomment}{%
- \expandafter\gdef\csname\xskak at temp@name xskak at beforecomment\endcsname{#1}}
-\define at key[UFXS]{styleitem}{beforeNAG}{%
- \expandafter\gdef\csname\xskak at temp@name xskak at beforeNAG\endcsname{#1}}
-
-\define at key[UFXS]{styleiteminit}{template}{% from #1 to current style. Make sure to have set temp at name correctly!
- \xskak at do@copystyleitem{xskak at styleitem@#1@}{\xskak at temp@name}}
-
-%% style
-
-\define at key[UFXS]{style}{level}[1]{%
-  \def\xskak at val@curlevel{#1}}
-
-\define at key[UFXS]{style}{font}{%
- \expandafter\gdef\csname\xskak at temp@name\xskak at val@curlevel @font\endcsname{#1}}
-
-\define at key[UFXS]{style}{styleitem}{%
- \ifcsname xskak at styleitem@#1 at whiteopen\endcsname
-  \expandafter\xdef
-   \csname\xskak at temp@name\xskak at val@curlevel @item\endcsname{#1}%
- \else
-  \PackageError{xskak}{style item #1 doesn't exist!}{}%
- \fi}
-
-\define at key[UFXS]{style}{xfont}{%
- \xskak at do@splitlevel{\xskak at val@curlevel}%
- \ifnum\xskak at temp@levelnumber=0\relax
-  \PackageWarning{xskak}{key xfont ignored (no number found)}{}%
- \else
-  \expandafter\gdef\csname\xskak at temp@name\xskak at temp@levelnumber @xfont\endcsname{#1}%
- \fi}
-
-%% printing
-%% style and level for all printing commands
-
-\define at key[UFXS]{print}{style}{%
- \UFXS at set@style{#1}}
-
-\define at key[UFXS]{print}{gstyle}{%
- \UFXS at set@gstyle{#1}}
-
-\define at key[UFXS]{print}{level}{%
- \edef\xskak at val@curlevel{#1}}%
-
-\define at key[UFXS]{print}{glevel}{%
- \xdef\xskak at val@curlevel{#1}}%
-
-\define at key[UFXS]{print}{invar}[]{%
-  \UFXS at set@invar{#1}}
-
-\define at key[UFXS]{print}{outvar}[]{%
- \UFXS at set@outvar{#1}}
-
-%% keys only for \printchessgame
-\define at key[UFXS]{xprint}{id}{\def\xskak at val@gameid{#1}}
-\define at key[UFXS]{xprint}{initmoveid}{%
- \xskak at split@moveid{#1}%
- \let\xskak at val@movenr\xskak at temp@movenr
- \let\xskak at val@player\xskak at temp@player
- }
-\define at key[UFXS]{xprint}{initmovenr}{%
- \def\xskak at val@movenr{#1}}
-
-\define at key[UFXS]{xprint}{initplayer}{%
- \def\xskak at val@player{#1}}
-
-\define at key[UFXS]{xprint}{stopmoveid}{%
- \xskak at split@moveid{#1}%
- \let\xskak at val@stopmovenr\xskak at temp@movenr
- \let\xskak at val@stopplayer\xskak at temp@player
- }
-\define at key[UFXS]{xprint}{stopmovenr}{%
- \def\xskak at val@stopmovenr{#1}}
-
-\define at key[UFXS]{xprint}{stopplayer}{%
- \def\xskak at val@stopplayer{#1}}
-
-\define at key[UFXS]{xprint}{reftag}{%
- \UFXS at new@reftag{#1}}
-
-\define at key[UFXS]{xprint}{refid}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFXS at print@id{\csname xskak at tag@#1 at refid\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-%% new keys for chessboard. Move to chessboard.sty??
-%% empty keys to avoid errors:
-
-\define at key[UFCB]{locfill}{tag}{}%
-\define at key[UFCB]{locfill}{ref}{}%
-\define at key[UFCB]{locfill}{defaultid}{}%
-\define at key[UFCB]{locfill}{defaultmoveid}{}%
-\define at key[UFCB]{locfill}{defaultfen}{}%
-
-%% real keys (should also be defined in fam glofill):
-\define at key[UFCB]{locfill}{id}[\xskak at val@defaultid]{%
- \ifcsname Xskak#1initfen\endcsname
-   \edef\xskak at val@gameid{#1}%
- \else
-  \PackageError{xskak}{Game with the id #1 doesn't exist.}{}%
- \fi}%
-
-\define at key[UFCB]{glofill}{id}[\xskak at val@defaultid]{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,id=#1}}%
-
-\define at key[UFCB]{locfill}{moveid}{%
- \edef\@tempa{#1}\xskak at split@moveid{\@tempa}%
- \let\xskak at val@movenr\xskak at temp@movenr
- \let\xskak at val@player\xskak at temp@player}%
-
-\define at key[UFCB]{glofill}{moveid}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,moveid=#1}}%
-
-\define at key[UFCB]{locfill}{stepmoveid}[1]{%
-  \count@=#1\relax
-   \ifthenelse{\the\count@>0}
-     {\whiledo{\the\count@>0}%
-       {\xskak at do@getnextmoveid{\xskak at val@movenr}{\xskak at val@player}%
-        \advance\count@ by -1%
-        \let\xskak at val@movenr\xskak at temp@movenr
-        \let\xskak at val@player\xskak at temp@player}%
-     }%
-     {\ifthenelse{\the\count@=0}%
-       {}%
-       {\whiledo{\the\count@<0}%
-        {\xskak at do@getpreviousmoveid{\xskak at val@movenr}{\xskak at val@player}%
-         \advance\count@ by 1%
-         \let\xskak at val@movenr\xskak at temp@movenr
-         \let\xskak at val@player\xskak at temp@player}%
-         \ifthenelse{\the\count@<1}%
-          {\PackageWarning{xskak}{Move number below 1!}{}}%
-          {}}}}
-
-\define at key[UFCB]{glofill}{stepmoveid}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,stepmoveid=#1}}%
-
-\define at key[UFCB]{locfill}{player}{\def\xskak at val@player{#1}}%
-
-\define at key[UFCB]{glofill}{player}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,player=#1}}%
-
-\define at key[UFCB]{locfill}{movenr}{\def\xskak at val@movenr{#1}}%
-
-\define at key[UFCB]{glofill}{movenr}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,movenr=#1}}%
-
-\define at key[UFCB]{locfill}{newvar}[\xskak at val@refgameid]{%
- \UFCB at locfill@setfen{%
-  \csname Xskak.#1.%
-    \csname Xskak#1lastmovenr\endcsname.%
-    \csname Xskak#1lastplayer\endcsname.%
-    pastfen\endcsname}%
- }%
-
-\define at key[UFCB]{glofill}{newvar}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,newvar=#1}}%
-
-\define at key[UFCB]{locfill}{reftag}{%
- \edef\xskak at val@currenttag{#1}}
-
-\define at key[UFCB]{glofill}{reftag}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,reftag=#1}}%
-
-\define at key[UFCB]{locfill}{lastmoveid}[\xskak at val@gameid]{%
- \ifcsname Xskak#1initfen\endcsname
-  \edef\xskak at val@gameid{#1}%
- \else
-  \PackageError{xskak}{Game with the id #1 doesn't exist.}{}%
- \fi
- \edef\xskak at val@movenr{\csname Xskak#1lastmovenr\endcsname}%
- \edef\xskak at val@player{\csname Xskak#1lastplayer\endcsname}%
- }%
-
-\define at key[UFCB]{glofill}{lastmoveid}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,lastmoveid=#1}}%
-
-\define at key[UFCB]{locfill}{refid}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFCB at locfill@id{\csname xskak at tag@#1 at refid\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFCB]{glofill}{refid}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,refid=#1}}%
-
-\define at key[UFCB]{locfill}{refpastmovenr}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFCB at locfill@movenr{\csname xskak at tag@#1 at refpastmovenr\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFCB]{glofill}{refpastmovenr}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,refpastmovenr=#1}}%
-
-\define at key[UFCB]{locfill}{refnextmovenr}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi
- \UFCB at locfill@movenr{\csname xskak at tag@#1 at refnextmovenr\endcsname}}
-
-\define at key[UFCB]{glofill}{refnextmovenr}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,refnextmovenr=#1}}%
-
-\define at key[UFCB]{locfill}{refpastplayer}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFCB at locfill@player{\csname xskak at tag@#1 at refpastplayer\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFCB]{glofill}{refpastplayer}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,refpastplayer=#1}}%
-
-\define at key[UFCB]{locfill}{refnextplayer}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFCB at locfill@player{\csname xskak at tag@#1 at refnextplayer\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFCB]{glofill}{refnextplayer}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,refnextplayer=#1}}%
-
-\define at key[UFCB]{locfill}{refpastmoveid}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFCB at locfill@moveid{\csname xskak at tag@#1 at refpastmoveid\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFCB]{glofill}{refpastmoveid}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,refpastmoveid=#1}}%
-
-\define at key[UFCB]{locfill}{refnextmoveid}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFCB at locfill@moveid{\csname xskak at tag@#1 at refnextmoveid\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFCB]{glofill}{refnextmoveid}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,refnextmoveid=#1}}%
-
-\define at key[UFCB]{locfill}{refpast}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFCB at locfill@movenr{\csname xskak at tag@#1 at refpastmovenr\endcsname}%
-  \UFCB at locfill@id{\csname xskak at tag@#1 at refid\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFCB]{glofill}{refpast}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,refpast=#1}}%
-
-\define at key[UFCB]{locfill}{refnext}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFCB at locfill@movenr{\csname xskak at tag@#1 at refnextmovenr\endcsname}%
-  \UFCB at locfill@id{\csname xskak at tag@#1 at refid\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFCB]{glofill}{refnext}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,refnext=#1}}%
-
-\define at key[UFCB]{locfill}{refpast}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFCB at locfill@movenr{\csname xskak at tag@#1 at refpastmovenr\endcsname}%
-  \UFCB at locfill@id{\csname xskak at tag@#1 at refid\endcsname}%
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFCB]{glofill}{refpast}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,refpast=#1}}%
-
-\define at key[UFCB]{locfill}{reffen}{%
- \ifcsname xskak at tag@#1 at refid\endcsname
-  \UFCB at locfill@addfen{%
-  \csname
-   Xskak.%
-   \csname xskak at tag@#1 at refid\endcsname.%
-   \csname xskak at tag@#1 at refnextmovenr\endcsname.%
-   \csname xskak at tag@#1 at refnextplayer\endcsname.%
-   pastfen%
-  \endcsname}
- \else
-   \PackageError{xskak}{Unknown tag #1}{}%
- \fi}
-
-\define at key[UFCB]{glofill}{reffen}{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,reffen=#1}}%
-
-%% currently not described. Perhaps delete. Perhaps change name to adapt to ref-keys?
-\define at key[UFCB]{locfill}{setgame}[\xskak at val@gameid]{%
- \ifcsname Xskak#1initfen\endcsname
-  \edef\xskak at val@gameid{#1}%
- \else
-  \PackageError{xskak}{Game with the id #1 doesn't exist.}{}%
- \fi
- \edef\board at temp@curfen{\csname Xskak#1lastfen\endcsname}%
- \board at do@setsinglekeys*[UFCB]{locfill}{language=english, setfen=\board at temp@curfen, language=\board at val@savelang}}%
-
-\define at key[UFCB]{glofill}{setgame}[\xskak at val@gameid]{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,showgame=#1}}%
-
-%% currently not described. Perhaps delete. Perhaps change name to adapt to ref-keys?
-\define at key[UFCB]{locfill}{addgame}[\xskak at val@gameid]{%
- \ifcsname Xskak#1initfen\endcsname
-   \edef\xskak at val@gameid{#1}%
- \else\PackageError{xskak}{Game with the id #1 doesn't exist.}{}%
- \fi
- \edef\board at temp@curfen{\csname Xskak#1lastfen\endcsname}%
- \board at do@setsinglekeys*[UFCB]{locfill}{language=english, addfen=\board at temp@curfen, language=\board at val@savelang}}%
-
-\define at key[UFCB]{glofill}{addgame}[\xskak at val@gameid]{%
-    \board at do@l at addto@macro\board at val@savedkeylist{,showgame=#1}}%
-
-%</xskak-keys>
-%<*xskak-nagdef>
-\ProvidesFile{xskak-nagdef.sty}[2015/01/02 version v1.4 nag definitions for xskak.sty]
-%%$Date: 2011/03/17 16:54:07 $$Version: 041ab49ae0e2 $
-
-\expandafter\def\csname $1\endcsname{!}
-\expandafter\def\csname $2\endcsname{?}
-\expandafter\def\csname $3\endcsname{!!}
-\expandafter\def\csname $4\endcsname{??}
-\expandafter\def\csname $5\endcsname{!?}
-\expandafter\def\csname $6\endcsname{?!}
-\expandafter\def\csname $7\endcsname{\onlymove}
-\expandafter\def\csname $8\endcsname{\onlymove}
-\expandafter\def\csname $9\endcsname{}
-\expandafter\def\csname $10\endcsname{\equal}
-\expandafter\def\csname $11\endcsname{\equal}
-\expandafter\def\csname $12\endcsname{\equal}
-\expandafter\def\csname $13\endcsname{\unclear}
-\expandafter\def\csname $14\endcsname{\wbetter}
-\expandafter\def\csname $15\endcsname{\bbetter}
-\expandafter\def\csname $16\endcsname{\wupperhand}
-\expandafter\def\csname $17\endcsname{\bupperhand}
-\expandafter\def\csname $18\endcsname{\wdecisive}
-\expandafter\def\csname $19\endcsname{\bdecisive}
-\expandafter\def\csname $20\endcsname{\wdecisive}
-\expandafter\def\csname $21\endcsname{\bdecisive}
-\expandafter\def\csname $22\endcsname{\zugzwang}
-\expandafter\def\csname $23\endcsname{\zugzwang}
-\expandafter\def\csname $24\endcsname{\moreroom}
-\expandafter\def\csname $25\endcsname{\moreroom}
-\expandafter\def\csname $26\endcsname{\moreroom}
-\expandafter\def\csname $27\endcsname{\moreroom}
-\expandafter\def\csname $28\endcsname{\moreroom}
-\expandafter\def\csname $29\endcsname{\moreroom}
-\expandafter\def\csname $30\endcsname{\devadvantage}
-\expandafter\def\csname $31\endcsname{\devadvantage}
-\expandafter\def\csname $32\endcsname{\devadvantage}
-\expandafter\def\csname $33\endcsname{\devadvantage}
-\expandafter\def\csname $34\endcsname{\devadvantage}
-\expandafter\def\csname $35\endcsname{\devadvantage}
-\expandafter\def\csname $36\endcsname{\withinit}
-\expandafter\def\csname $37\endcsname{\withinit}
-\expandafter\def\csname $38\endcsname{\withinit}
-\expandafter\def\csname $39\endcsname{\withinit}
-\expandafter\def\csname $40\endcsname{\withattack}
-\expandafter\def\csname $41\endcsname{\withattack}
-\expandafter\def\csname $42\endcsname{\without\compensation}
-\expandafter\def\csname $43\endcsname{\without\compensation}
-\expandafter\def\csname $44\endcsname{\compensation}
-\expandafter\def\csname $45\endcsname{\compensation}
-\expandafter\def\csname $46\endcsname{\compensation}
-\expandafter\def\csname $47\endcsname{\compensation}
-\expandafter\def\csname $70\endcsname{\weakpt\cfss at symking}
-\expandafter\def\csname $71\endcsname{\weakpt\cfss at symking}
-\expandafter\def\csname $74\endcsname{\weakpt\cfss at symking}
-\expandafter\def\csname $75\endcsname{\weakpt\cfss at symking}
-\expandafter\def\csname $86\endcsname{\weakpt\cfss at symknight}
-\expandafter\def\csname $87\endcsname{\weakpt\cfss at symknight}
-\expandafter\def\csname $90\endcsname{\weakpt\cfss at symbishop}
-\expandafter\def\csname $91\endcsname{\weakpt\cfss at symbishop}
-\expandafter\def\csname $94\endcsname{\weakpt\cfss at symbishop}
-\expandafter\def\csname $95\endcsname{\weakpt\cfss at symbishop}
-\expandafter\def\csname $98\endcsname{\weakpt\cfss at symqueen}
-\expandafter\def\csname $99\endcsname{\weakpt\cfss at symqueen}
-\expandafter\def\csname $130\endcsname{\counterplay}
-\expandafter\def\csname $130\endcsname{\counterplay}
-\expandafter\def\csname $131\endcsname{\counterplay}
-\expandafter\def\csname $132\endcsname{\counterplay}
-\expandafter\def\csname $133\endcsname{\counterplay}
-\expandafter\def\csname $134\endcsname{\counterplay}
-\expandafter\def\csname $135\endcsname{\counterplay}
-\expandafter\def\csname $136\endcsname{\timelimit}
-\expandafter\def\csname $137\endcsname{\timelimit}
-\expandafter\def\csname $138\endcsname{\timelimit}
-\expandafter\def\csname $139\endcsname{\timelimit}
-\expandafter\def\csname $140\endcsname{\space\withidea}
-\expandafter\def\csname $142\endcsname{\space\betteris}
-\expandafter\def\csname $145\endcsname{\chesscomment}
-\expandafter\def\csname $146\endcsname{\novelty}
-\expandafter\def\csname $D\endcsname{\chessdiagramname}
-\expandafter\def\csname $d\endcsname{}
-
-%</xskak-nagdef>

Added: trunk/Master/texmf-dist/source/latex/xskak/xskak.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/xskak/xskak.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/xskak/xskak.dtx	2019-06-23 20:59:18 UTC (rev 51432)
@@ -0,0 +1,2409 @@
+%<*xskak>
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{xskak}[2019/06/23 version v1.5 extended chess typesetting and parsing]
+
+\newif\ifxskakpdfmatch
+
+\ifcsname pdfmatch\endcsname
+ \xskakpdfmatchtrue
+\else
+ \xskakpdfmatchfalse
+\fi
+
+\DeclareOption{nopdfmatch}{\xskakpdfmatchfalse}
+\providecommand\xskak at val@skakversion{skak}
+\DeclareOption{skak14}{\def\xskak at val@skakversion{skak14}}
+\DeclareOption{skak15}{\def\xskak at val@skakversion{skak15}}
+\DeclareOption{small}{\AtEndOfClass{\smallboard}}
+\ProcessOptions
+
+\RequirePackage{\xskak at val@skakversion}[2005/06/29]
+\expandafter\edef\csname ver at skak.sty\endcsname{\csname ver@\xskak at val@skakversion.sty\endcsname}
+
+\RequirePackage{xifthen}
+\RequirePackage{etoolbox}
+\RequirePackage{chessboard}[2007/12/20]
+\RequirePackage{xskak-keys}
+\newcommand\chessdiagramname{\ (Diagram)\ }
+\RequirePackage{xskak-nagdef}
+
+%%%%%%%%%%%%%%%%%%%%%
+%% Naming conventions
+%%%%%%%%%%%%%%%%%%%%%
+
+
+%%%%%%%%%%%%%%%%%%%%
+%%%%% Initialisation
+
+
+\newcommand\xskak at val@gameid{game}
+\newcommand\xskak at val@movenr{1}
+\newcommand\xskak at val@player{w}
+\newcommand\xskak at val@type{}
+
+\newcommand\xskak at val@defaultmovenr{1}
+\newcommand\xskak at val@defaultplayer{w}
+\newcommand\xskak at val@defaultmoveid{1w}
+
+\newcommand\xskak at val@defaultid{game}
+\newcommand\xskak at val@defaultfen{rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1}
+
+\newcommand\xskak at val@currenttag{}
+
+\newcommand\xskak at list@gametypes{%
+ initfen,%
+ initplayer,%
+ initmovenr,%
+ initmoveid,%
+ lastfen,%
+ lastplayer,%
+ lastmovenr,%
+ lastmoveid,%
+ nextplayer,%
+ nextmovenr,%
+ nextmoveid,%
+ diagramlist,%
+ gameid,%
+ parentid%NEW records game id of parent if the game is a variation, the last move of the parent=initmoveid
+ }
+
+\newcommand\xskak at list@movetypes{%
+ movenr,%
+ player,%
+ moveid,%
+ pgnpiece,%
+ piece,%
+ piecechar,%
+ castling,%
+ longcastling,%
+ capture,%
+ check,%
+ mate,%
+ lostpiece,%
+ lostpiecechar,%
+ pgnlostpiece,%
+ movefrom,%
+ pgnmovefrom,%
+ moveto,%
+ move,%
+ enpassant,%
+ enpassantsquare,%
+ promotion,%
+ promotionpiece,%
+ promotionpiecechar,%
+ addpieces,%
+ clearfields,%
+ comments,%
+ nextfen,%
+ pastfen,%
+ nag,%
+ san,%
+ lan,%
+ opennr,%
+ vars,% NEW, records game id of child variations
+ varnum% NEW, records number of child variations
+ }
+
+%% setting pgn infos
+\newcommand\xskaknewpgninfo[2][]{%#1 default value, #2 keyname
+ \ifcsname UFCB at locfill@#2\endcsname
+  \PackageError{xskak}%
+      {(pgn) key #1 is already defined! Use another name}{}%
+ \else
+  \expandafter\newcommand\csname xskak at val@default#2\endcsname{#1}%
+  \define at key[UFXS]{setpgn}{#2}[\csname xskak at val@default#2\endcsname]{%
+   \expandafter\xdef\csname Xskak\xskak at val@gameid #2\endcsname{##1}}%
+  \define at key[UFCB]{locfill}{#2}[]{}%
+  \define at key[UFXS]{set}{default#2}{%
+   \expandafter\xdef\csname xskak at val@default#2\endcsname{##1}}%
+  \@ifundefined{xskak at list@setpgn}%
+   {\gdef\xskak at list@setpgn{#2}}%
+   {\g at addto@macro\xskak at list@setpgn{,#2}}%
+    \g at addto@macro\xskak at list@gametypes{,#2}%
+ \fi
+ }%
+
+\xskaknewpgninfo[*]{result}
+\xskaknewpgninfo[]{site}
+\xskaknewpgninfo[]{event}
+\xskaknewpgninfo[]{date}
+\xskaknewpgninfo[]{round}
+\xskaknewpgninfo[]{white}
+\xskaknewpgninfo[]{black}
+\xskaknewpgninfo[]{blackelo}
+\xskaknewpgninfo[]{whiteelo}
+
+%%% From skak.sty
+\providecommand\CheckTest{}
+\providecommand\MateTest{}
+
+%%% For the benefit of texmate
+\AtBeginDocument{\providecommand\fenposition[1]{}}
+
+%%% new booleans
+\newboolean{xskakboolcastling}
+\newboolean{xskakboollongcastling}
+\newboolean{xskakboolenpassant}
+\newboolean{xskakboolcapture}
+\newboolean{xskakboolcheck}
+\newboolean{xskakboolmate}
+\newboolean{xskakboolpromotion}
+\newboolean{xskakboolcomment}
+\newboolean{xskakboolnag}
+\newboolean{xskakboolvar}
+
+%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%
+
+%% Variables
+\newcommand\xskakcomment[1]{{#1}}
+\newcommand\xskakmovehyphen{\hbox{--\hspace{1pt}}} %or movehyphen from skak?
+\newcommand*\xskakenpassanttext{\,e.p.}
+
+%% set various variables like gameid and move
+\newcommand\xskakset[1]{%
+ \setkeys[UFXS]{set}{#1}}
+
+%% getting the move data
+\newcommand*\xskakget[1]{%
+ \if\xskak at strequal{movenr}{#1}%
+  \xskak at val@movenr
+ \else
+  \if\xskak at strequal{player}{#1}%
+   \xskak at val@player
+  \else
+   \if\xskak at strequal{moveid}{#1}%
+    \xskak at val@movenr\xskak at val@player
+   \else
+    \if\xskak at strequal{level}{#1}%
+     \xskak at val@curlevel
+    \else
+     \ifcsname xskak at tag@\xskak at val@currenttag @#1\endcsname
+       \csname xskak at tag@\xskak at val@currenttag @#1\endcsname
+     \else
+      \ifcsname Xskak.\xskak at val@gameid.\xskak at val@movenr.\xskak at val@player.#1\endcsname
+       \csname Xskak.\xskak at val@gameid.\xskak at val@movenr.\xskak at val@player.#1\endcsname
+      \else
+       \PackageError{xskak}%
+        {\csname Xskak.\xskak at val@gameid.\xskak at val@movenr.\xskak at val@player.#1\endcsname isn't defined}{}%
+      \fi
+     \fi
+    \fi
+   \fi
+  \fi
+ \fi}
+
+%% getting game data
+\newcommand*\xskakgetgame[1]{%
+ \ifcsname Xskak\xskak at val@gameid#1\endcsname
+  \csname Xskak\xskak at val@gameid#1\endcsname
+ \else
+  \PackageError{xskak}%
+   {\csname Xskak\xskak at val@gameid#1\endcsname isn't defined}{}%
+ \fi}
+
+%% getting ref data -> do it through xskakget and xskakgetgame
+
+%% starting a new game
+
+\newcommand\newchessgame[1][]{%
+  \setkeys*[UFXS]{new}{id,moveid}%
+  \setkeys*[UFXS]{new}{#1}%
+   \@for\xskak at temp@gametype:=\xskak at list@gametypes\do
+   {\expandafter\xdef
+      \csname Xskak\xskak at val@gameid\xskak at temp@gametype\endcsname{}}%
+  \expandafter\xdef\csname Xskak\xskak at val@gameid gameid\endcsname{\xskak at val@gameid}%
+  \toks@=\expandafter{\xskak at list@setpgn}%
+  \edef\xskak at temp@command{%
+  \noexpand\setkeys*[UFXS]{setpgn}{\the\toks@}}%
+  \xskak at temp@command
+  %\setkeys*[UFXS]{setpgn}{result}%
+  \setkeys*[UFXS]{setpgn}{#1}%
+  \chessboard[maxfield=h8,zero=false,print=false,
+    setfen=\xskak at val@defaultfen,%
+    #1,
+    mover=\xskak at val@player,
+    fullmove=\xskak at val@movenr,
+    storefen=@tempgame]%
+   \edef\temp{\csname chessgame. at tempgame\endcsname}%16.10.2008 for skak1.5
+   \expandafter\fenboard\expandafter{\temp}%16.10.2008 for skak1.5
+   \storegame{@tempgame}%16.10.2008 for skak1.5
+   \restoregame{@tempgame}%16.10.2008 for skak1.5
+   \edef\@tempa{\csname chessgame. at tempgame\endcsname}%
+   \expandafter\fenposition\expandafter{\@tempa}% for texmate
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid initfen\endcsname{\csname chessgame. at tempgame\endcsname}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid lastfen\endcsname{\csname chessgame. at tempgame\endcsname}%
+   \expandafter\xdef
+    \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pastfen\endcsname
+      {\csname chessgame. at tempgame\endcsname}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid initplayer\endcsname{\WhiteToMove{w}{b}}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid initmovenr\endcsname{\the\c at move}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid initmoveid\endcsname{\the\c at move\WhiteToMove{w}{b}}%
+   \xskak at do@getpreviousmoveid{\the\c at move}{\WhiteToMove{w}{b}}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid lastplayer\endcsname{\WhiteToMove{b}{w}}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid lastmovenr\endcsname{\xskak at temp@movenr}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid lastmoveid\endcsname{\xskak at temp@movenr\WhiteToMove{b}{w}}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid nextplayer\endcsname{\WhiteToMove{w}{b}}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid nextmovenr\endcsname{\the\c at move}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid nextmoveid\endcsname{\the\c at move\WhiteToMove{w}{b}}%
+   \expandafter\xdef\csname %new 1.6. Initialization of nag
+     Xskak.\xskak at val@gameid.%
+     \csname Xskak\xskak at val@gameid lastmovenr\endcsname.%
+     \csname Xskak\xskak at val@gameid lastplayer\endcsname.nag\endcsname{}}
+
+%% continuing a game
+\newcommand\resumechessgame[1][]{%
+  \def\xskak at temp@player{%
+   \csname Xskak\xskak at val@gameid nextplayer\endcsname}%
+  \def\xskak at temp@movenr{%
+   \csname Xskak\xskak at val@gameid nextmovenr\endcsname}%
+  \setkeys*[UFXS]{res}{#1}%
+  \xdef\xskak at val@player{\xskak at temp@player}%
+  \xdef\xskak at val@movenr{\xskak at temp@movenr}%
+  \ifthenelse
+    {\xskak at test@lessorequal
+        {\xskak at val@movenr}%
+        {\xskak at val@player}%
+        {\csname Xskak\xskak at val@gameid nextmovenr\endcsname}%
+        {\csname Xskak\xskak at val@gameid nextplayer\endcsname}%
+    }%
+    {\chessboard[maxfield=h8,zero=false,print=false,
+    #1,
+    setfen=\xskakget{pastfen},
+    mover=\xskak at val@player,
+    fullmove=\xskak at val@movenr,
+    storefen=@tempgame
+    ]%
+    \restoregame{@tempgame}%
+   \edef\@tempa{\csname chessgame. at tempgame\endcsname}%
+   \expandafter\fenposition\expandafter{\@tempa}% for texmate
+   \xskak at do@getpreviousmoveid{\the\c at move}{\WhiteToMove{w}{b}}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid lastplayer\endcsname{\WhiteToMove{b}{w}}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid lastmovenr\endcsname{\xskak at temp@movenr}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid lastmoveid\endcsname{\xskak at temp@movenr\WhiteToMove{b}{w}}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid nextplayer\endcsname{\WhiteToMove{w}{b}}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid nextmovenr\endcsname{\the\c at move}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid nextmoveid\endcsname{\the\c at move\WhiteToMove{w}{b}}%
+    }%
+    {\PackageError{xskak}{Move "\xskak at val@movenr\xskak at val@player" is
+     not in game \xskak at val@gameid}{}}}
+
+%% export games
+\newcommand\xskak at messages{}
+\newcommand\xskakexportgames[1][]{%
+ \begingroup
+ \def\xskak at messages{}%
+ \setkeys[UFXS]{export}{file=xskakgames,games=\xskak at val@defaultid,#1}%
+  \immediate\openout\@unused=\xskak at val@exportfile
+  \immediate\write\@unused{%
+  \@percentchar This are games exported with xskak.sty^^J%
+  \@percentchar The options were: #1 ^^J%
+  \@percentchar \the\day.\the\month.\the\year}%
+  \expandafter\xskak at do@sanitizelist\expandafter{\xskak at val@exportgames}%
+  \@for\xskak at temp@game:=\xskak at temp@list\do
+  {%
+  \@ifundefined{Xskak\xskak at temp@game initfen}%
+   {\expandafter\g at addto@macro\expandafter\xskak at messages\expandafter{\expandafter"\xskak at temp@game"\space}}%
+   {\immediate\write\@unused{%
+    \@percentchar ^^J%
+    \@percentchar Start of game \xskak at temp@game ^^J%
+    \@percentchar}%
+    \@for\xskak at temp@gametype:=\xskak at list@gametypes\do
+       {\toks@=\expandafter\expandafter\expandafter{\csname Xskak\xskak at temp@game\xskak at temp@gametype\endcsname}%
+       \immediate\write\@unused{%
+        \unexpanded{\expandafter\def\csname}Xskak%
+             \xskak at temp@game\xskak at temp@gametype\noexpand\endcsname{\the\toks@}\noexpand\relax}%
+       }%
+    \expandafter\let\expandafter\xskak at temp@movenr
+     \csname Xskak\xskak at temp@game initmovenr\endcsname
+    \expandafter\let\expandafter\xskak at temp@player
+     \csname Xskak\xskak at temp@game initplayer\endcsname
+    \whiledo% loop through moves
+      {\xskak at test@moveidingame{\xskak at temp@movenr}{\xskak at temp@player}{\xskak at temp@game}}%
+      {\@for\xskak at temp@movetype:=\xskak at list@movetypes \do
+       {\toks@=\expandafter\expandafter\expandafter{%
+         \csname Xskak.\xskak at temp@game.\xskak at temp@movenr.\xskak at temp@player.\xskak at temp@movetype\endcsname}%
+        \immediate\write\@unused{%
+          \unexpanded{\expandafter\def\csname}Xskak.%
+            \xskak at temp@game.\xskak at temp@movenr.\xskak at temp@player.\xskak at temp@movetype
+             \noexpand\endcsname{\the\toks@}\noexpand\relax}%
+       }%
+       %% nextmove
+       \xskak at do@getnextmoveid{\xskak at temp@movenr}{\xskak at temp@player}%
+      }%
+    \immediate\write\@unused{\unexpanded{\def\xskakcurrentgameid}{\xskak at temp@game}\noexpand\xskakendgamedata}%
+  }}%
+  %
+  \immediate\closeout\@unused\relax
+  \ifx\xskak at messages\@empty
+   \else
+  \PackageWarning{xskak}{games \xskak at messages\space didn't exist. I
+    skipped them}{}%
+  \fi
+  \endgroup
+  }%
+
+\newcommand\xskakendgamedata{}
+\newcommand\xskakcurrentgameid{}
+
+%% looping through a game.
+\newcommand\xskakloop[2][]{%
+ %\show\xskakstart
+ \gdef\xskak at val@loopstep{1}%
+ \savekeys[UFXS]{loop}{\global{showlast}}%
+ \setkeys[UFXS]{loop}{showlast=false,#1}% getting the id
+ \xdef\xskak at val@movenr{%
+  \csname Xskak\xskak at val@gameid initmovenr\endcsname}%
+ \xdef\xskak at val@player{%
+  \csname Xskak\xskak at val@gameid initplayer\endcsname}%
+ \xdef\xskak at val@stopmovenr{%
+  \csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
+ \xdef\xskak at val@stopplayer{%
+  \csname Xskak\xskak at val@gameid lastplayer\endcsname}%
+ \setkeys[UFXS]{loop}{#1}% getting the rest.
+ %%
+ \whiledo%
+  {\xskak at test@lessorequal
+     {\xskak at val@movenr}{\xskak at val@player}%
+     {\xskak at val@stopmovenr}{\xskak at val@stopplayer}}%
+  {% test if move in game:
+   \ifthenelse%
+    {\xskak at test@moveidingame{\xskak at val@movenr}{\xskak at val@player}{\xskak at val@gameid}}%
+    {#2%
+     \count@=\xskak at val@loopstep\relax
+     \whiledo{\the\count@>0}%
+      {\xskak at do@getnextmoveid{\xskak at val@movenr}{\xskak at val@player}%
+       \advance\count@ by -1%
+       \global\let\xskak at val@movenr\xskak at temp@movenr
+       \global\let\xskak at val@player\xskak at temp@player}%
+     }%
+     {\PackageError{xskak}%
+       {move {\xskak at val@movenr}{\xskak at val@player} is not in game
+        \xskak at val@gameid}{}}}%
+    \ifthenelse{\boolean{\XKV at UFXS@loop at showlast@value}}%
+     {\ifthenelse
+      {\equal{\xskak at val@movenr\xskak at val@player}{\xskak at val@stopmovenr\xskak at val@stopplayer}}%
+      {}%stop already processed.
+      {\let\xskak at val@movenr\xskak at val@stopmovenr
+       \let\xskak at val@player\xskak at val@stopplayer
+       #2}}%
+      {}}
+%%% test if a number/color combination is in the game:
+
+\newtest\xskaktestmoveid[2]{%number, w or b
+  \xskak at test@lessorequal
+   {\csname Xskak\xskak at val@gameid initmovenr\endcsname}%
+   {\csname Xskak\xskak at val@gameid initplayer\endcsname}%
+   {#1}{#2}%
+  \AND
+  \xskak at test@lessorequal
+   {#1}{#2}%
+   {\csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
+   {\csname Xskak\xskak at val@gameid lastplayer\endcsname}}
+
+\newtest\xskak at test@moveidingame[3]{%number, w or b, gameid
+  \xskak at test@lessorequal
+   {\csname Xskak#3initmovenr\endcsname}%
+   {\csname Xskak#3initplayer\endcsname}%
+   {#1}{#2}%
+  \AND
+  \xskak at test@lessorequal
+   {#1}{#2}%
+   {\csname Xskak#3lastmovenr\endcsname}%
+   {\csname Xskak#3lastplayer\endcsname}}
+
+%%%%%%%%%%%%%%%%%%
+%% Helper commands
+%%%%%%%%%%%%%%%%%%
+
+%%% help command for testing
+
+\newcommand\xskak at matetest{}
+ \let\xskak at matetest\mate
+
+%%% special fencalculate
+%%% Use only inside dothemove to get the correct color and movenumber!}
+%02.01.2015: Patching the promotionpieces in Rank 1 + 8
+\def\xskak at specialfencalculate{%
+ %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiece\endcsname
+  \Fen at Rank{8}%%
+  \Promotion{%
+   \WhiteToMove{%
+    \patchcmd{\temp at rank}
+     {P}
+     {\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiece\endcsname}
+     {}
+     {\show\MistMist}}{}%
+   }{}%
+   \edef\temp at board{\temp at rank/}%
+  \Fen at Rank{7}\edef\temp at board{\temp at board\temp at rank/}%
+  \Fen at Rank{6}\edef\temp at board{\temp at board\temp at rank/}%
+  \Fen at Rank{5}\edef\temp at board{\temp at board\temp at rank/}%
+  \Fen at Rank{4}\edef\temp at board{\temp at board\temp at rank/}%
+  \Fen at Rank{3}\edef\temp at board{\temp at board\temp at rank/}%
+  \Fen at Rank{2}\edef\temp at board{\temp at board\temp at rank/}%
+  \Fen at Rank{1}%
+  \Promotion{%
+   \WhiteToMove{}
+    {\patchcmd{\temp at rank}
+     {p}
+     {\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiece\endcsname}
+     {}
+     {\show\MistMist}}{}}{}%
+   \edef\temp at board{\temp at board\temp at rank}%
+  \edef\temp at board{\temp at board\space\WhiteToMove{b}{w}}%
+  \edef\temp at board{\temp at board\space\PrintCastling\space\EnPassantSquare}%
+  \edef\temp at board{\temp at board\space\arabic{halfmove}\space\the\count@}}
+
+%%% Get the previous movenumber/color.
+\newcommand\xskak at do@getpreviousmoveid[2]{%1. move number, 2. color
+ \if#2w%
+  \edef\xskak at temp@movenr{\the\numexpr #1-1\relax}%
+  \def\xskak at temp@player{b}%
+ \else
+  \edef\xskak at temp@movenr{#1}%
+  \def\xskak at temp@player{w}%
+ \fi}
+
+%%% Get the next movenumber/color.
+\newcommand\xskak at do@getnextmoveid[2]{%1. move number, 2. color
+ \if#2b\relax
+  \edef\xskak at temp@movenr{\the\numexpr #1+1\relax}%
+  \def\xskak at temp@player{w}%
+ \else
+  \edef\xskak at temp@movenr{#1}%
+  \def\xskak at temp@player{b}%
+ \fi}
+
+%%% splits a move id like 10b or 8w:
+
+\def\xskak at do@storeplayer#1\@nnil{\def\xskak at temp@player{#1}}
+
+\def\xskak at split@moveid#1{\afterassignment\xskak at do@storeplayer\count@=#1\@nnil
+                        \edef\xskak at temp@movenr{\the\count@}}
+
+%%% tests
+%% moveidA < = moveidB
+\newtest\xskak at test@lessorequal[4]{%movenr/playerA movenr/playerB
+ \(#1<#3\)%
+ \OR
+ \(#1=#3%
+   \AND
+   \(\equal{#2}{#4}%
+     \OR
+     \equal{#4}{b}%
+   \)%
+  \)}%
+
+\newcommand\xskak at do@sanitizelist[1]{%
+ \def\xskak at temp@list{}%
+ \@for\xskak at temp@listentry:=#1\do
+ {\edef\xskak at temp@cmd{%
+   \noexpand\setkeys[UFXS]{inner}{stripspace=\xskak at temp@listentry}}%
+  \xskak at temp@cmd
+  \ifx\xskak at temp@list\@empty
+   \expandafter\def\expandafter\xskak at temp@list\expandafter{\xskak at temp@output}%
+  \else
+   \expandafter\board at do@l at addto@macro\expandafter\xskak at temp@list\expandafter{\expandafter,\xskak at temp@output}%
+  \fi}}
+
+\define at key[UFXS]{inner}{stripspace}{\def\xskak at temp@output{#1}}
+
+\def\xskak at strequal#1{\number\xskak at strequalstart{}{}#1\relax}
+\def\xskak at strequalstart#1#2#3{\if#3\relax\xskak at strequalstop\fi
+     \xskak at strequalstart{\if#3#1}{#2\fi}}
+\def\xskak at strequalstop\fi\xskak at strequalstart#1#2#3{\fi#1#3\relax'#213 }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% Core: Store Move Informations
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% move related informations
+%%%%   <type>          <value>
+%%%%   vars            list of game id of variations. Is set to empty by \xskak at do@dothemove. Can be
+%%%%                   change by variation games to notify the "parent" about its "child"
+%%%%   varnum          record the number of variations of the move. Set to 0 by \xskak at do@dothemove.
+%%%%   pgnpiece        K,Q,R,B or N (independent from language). Is empty for Pawn and Castling moves
+%%%%   piece           K,Q,R,B,N or P or k,q,r,b,n or p (for black). Is empty for Castling
+%%%%   piecechar       K,Q,R,B,N or p. Is empty for Castling
+%%%%   castling        sets the boolean xskakboolcastling, is true for short *and* long castling
+%%%%   longcastling    sets the boolean xskakboollongcastling
+%%%%   capture         sets the boolean xskakboolcapture
+%%%%   check           sets the boolean xskakboolcheck
+%%%%   mate            sets the boolean xskakboolmate
+%%%%   lostpiece       In case of a capture move: K,Q,R,B,N or P or k,q,r,b,n or p(independent from language).
+%%%%   lostpiecechar   In case of a capture move: K,Q,R,B,N or p, empty else
+%%%%   pgnlostpiece    in case of a capture move: K,Q,R,B, or N (independent from language)
+%%%%   movefrom        a field, in case of castling: field of king and rook (e.g. e1,h1)
+%%%%   pgnmovefrom     the additional movefrom description in the pgn-notation for ambiguous
+%%%%                   moves and pawn captures.
+%%%%   moveto          a field, in case of castling empty
+%%%%   move            movefrom-moveto, in case of castling two moves: e.g. e1-f1,h1-f1
+%%%%   enpassant       sets the boolean xskakboolenpassant to true
+%%%%                   if the current move is an ep, else to false
+%%%%   enpassantsquare a field, after e.g. e4 the value is e3. Indicates if the next
+%%%%                   pawn move can be a ep.
+%%%%   promotion       sets the boolean xskakboolpromotion
+%%%%   promotionpiece  Q,R,B,N or q,r,b,n (undependant from language) or empty
+%%%%   promotionpiecechar Q,R,B,N (undependant from language) or empty
+%%%%   addpieces       contains the (list of) piece(s) that should be put on the board
+%%%%                   e.g. {kg8,rf8} in case of black short castling
+%%%%   clearfields     the list of fields that should be emptied on board
+%%%%   comments        contains the short comments after a move (!,? \withattack{} etc)
+%%%%   nextfen             the fen position after the current move (halfmoves, castling are perhaps wrong)
+%%%%   pastfen        the fen position *before* the current move (identical to the fen after the previous move)
+%%%%   nag             larger comments after (between) move.
+%%%%   san             standard algebraic notation of the move.
+%%%%                   e.g. \textsymfigsymbol{R}a2, e\capturesymbol d5,
+%%%%                   \castlingchar\castlinghyphen\castlingchar
+%%%%   lan             long algebraic notation of the move.
+%%%%   opennr          The number representation for an open move e.g. 2...
+%%% Game related informations. Don't use @ or "." to simplify use by the user
+%%%%   gameid         stores the gameid (for easier retrieving)
+%%%%   initfen       The fen before the first move. Set by \newchessgame
+%%%%   initplayer    w or b, The color of the next (first) player.
+%%%%                  (must be identical to the color in the initfen).
+%%%%                  Also set by \newchessgame
+%%%%   initmovenr    The number of the first move (must be identical to the fullmove number in the initfen)
+%%%%                  Also set by \newchessgame
+%%%%   lastfen            The fen after the last move, set during parsing.
+%%%%   lastplayer     The fen color of the last move, set during parsing
+%%%%                  = color of the fen before the last move!
+%%%%                  not identical to color in fen!
+%%%%   lastmovenr     The number of the last move, set during parsing.
+%%%%   lastmoveid     combination of lastmovenr+lastplayer
+%%%%   nextplayer     The fen color of the player which should move next, set during parsing
+%%%%                  = color of the fen
+%%%%   nextmovenr     The number of the next move, identical to number in fen
+%%%%   nextmoveid     combination of nextmovenr+nextmoveplayer
+%%%%  diagramlist     A comma separated list of MovenrPlayer (e.g. 3b,20w). Records the moves with an $d or $D after the move
+
+%% save the original skak definition
+\let\xskak at oriDoTheMove\DoTheMove
+
+%% define a new DoTheMove:
+\def\xskak at do@dothemove#1{% move the piece from #1 to \MoveToFile\MoveToRank
+  %%%%% Store the move and board informations, will be used to retrieve the pieces deleted
+  \Fen at calculate
+  \setkeys[UFCB]{locinit}{maxfield=h8,zero=false}%
+  \setkeys[UFCB]{locfill}{setfen=\temp at board}%
+  %\expandafter\show\csname board at val@f4r4 at piecechar\endcsname
+  %===========%
+  %% vars + varnum
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.vars\endcsname{}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.vars\endcsname
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.varnum\endcsname{0}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.varnum\endcsname
+  %===========%
+  %% pgnpiece
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnpiece\endcsname{%
+     \EqStr{\PieceNameToMove}{Z}{}{\PieceNameToMove}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnpiece\endcsname
+  %===========%
+  %% piece
+  \edef\@tempa{\PieceNameToMove}%
+  \expandafter\board at conv@chartolowerchar\@tempa
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piece\endcsname{%
+       \Castling%
+         {}%
+         {\EqStr{\PieceNameToMove}{Z}%
+           {\WhiteToMove{P}{p}}%
+           {\WhiteToMove%
+             {\PieceNameToMove}%
+             {\board at temp@char}}}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piece\endcsname
+  %===========%
+  %% piecechar
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname{%
+       \Castling%
+         {}%
+         {\EqStr{\PieceNameToMove}{Z}%
+           {p}%
+           {\PieceNameToMove}}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname
+  %===========%
+  %% lostpiece
+  % the values for enpassant move are corrected in the enpassant commands!
+  \expandafter\board at conv@filechartonumber\MoveToFile{cnt at board@file}%
+  \def\@tempa{empty}%
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname{%
+      \expandafter\ifx
+          \csname board at val@f\the\c at cnt@board at file r\MoveToRank @piecechar\endcsname
+          \@tempa
+      \else
+         \expandafter\ifx
+            \csname board at val@f\the\c at cnt@board at file r\MoveToRank @piecechar\endcsname
+            \relax
+         \else
+            \csname board at val@f\the\c at cnt@board at file r\MoveToRank @piecechar\endcsname
+         \fi
+      \fi}%
+  %===========%
+  %% pgnlostpiece
+  \def\board at temp@char{P}%
+  \edef\@tempa{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname}%
+  \expandafter\if
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname\@empty
+  \else
+     \expandafter\board at conv@chartoupperchar\@tempa%
+  \fi
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnlostpiece\endcsname{%
+       \if\board at temp@char P%
+       \else
+       \board at temp@char
+       \fi}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnlostpiece\endcsname
+  %===========%
+  %% Opennr
+  %%
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.opennr\endcsname{%
+      \the\c at move\WhiteToMove
+        {\noexpand\whiteopen\noexpand\beforewhite}%
+        {\noexpand\blackopen\noexpand\beforeblack}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.opennr\endcsname
+  %===========%
+  %% MoveFrom-field
+  %% expanded to set also castling from fields e.g. e1,h1 for short white castling
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.movefrom\endcsname{%
+      \Castling
+        {\LongCastling%
+         {\WhiteToMove{e1,a1}{e8,a8}}%
+         {\WhiteToMove{e1,h1}{e8,h8}}}%
+        {#1}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.movefrom\endcsname
+  %===========%
+  %% pgnmovefrom
+  \expandafter\xdef
+   \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnmovefrom\endcsname{%
+    \EqStr{\FileDiscriminator}{Z}%
+     {}{\FileDiscriminator}%
+    \EqStr{\RankDiscriminator}{Z}%
+     {}{\RankDiscriminator}%
+     }%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnmovefrom\endcsname
+  %===========%
+  %% MoveTo-field
+  %% added castling test: White O-O -> g1,f1
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.moveto\endcsname{%
+       \Castling
+        {\LongCastling
+         {\WhiteToMove{c1,d1}{c8,d8}}%
+         {\WhiteToMove{g1,f1}{g8,f8}}}%
+        {\MoveToFile\MoveToRank}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.moveto\endcsname
+  %===========%
+  %% Move
+  %% two moves for castling
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.move\endcsname{%
+      \Castling
+        {\LongCastling%
+         {\WhiteToMove{e1-c1,a1-d1}{e8-c8,a8-d8}}%
+         {\WhiteToMove{e1-g1,h1-f1}{e8-g8,h8-f8}}}%
+        {\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.movefrom\endcsname
+         -\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.moveto\endcsname}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.move\endcsname
+  %===========%
+  %% Castling
+  % new naming
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.castling\endcsname{%
+        \Castling{\noexpand\setboolean{xskakboolcastling}{true}}%
+                 {\noexpand\setboolean{xskakboolcastling}{false}}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.castling\endcsname
+  %===========%
+  %% Longcastling
+  % new naming
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.longcastling\endcsname{%
+        \LongCastling{\noexpand\setboolean{xskakboollongcastling}{true}}%
+                     {\noexpand\setboolean{xskakboollongcastling}{false}}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.longcastling\endcsname
+  %% Capture
+  %% new naming, changed to boolean!
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.capture\endcsname{%
+       \Capture{\noexpand\setboolean{xskakboolcapture}{true}}%
+               {\noexpand\setboolean{xskakboolcapture}{false}}}%
+  %===========%
+  %% Check?
+  %%new naming, changed to boolean
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.check\endcsname{%
+        \ifx\CheckTest\@empty
+          \noexpand\setboolean{xskakboolcheck}{false}%
+        \else
+          \noexpand\setboolean{xskakboolcheck}{true}%
+        \fi}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.check\endcsname
+  %===========%
+  %% Mate?
+  %%new naming, changed to boolean
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.mate\endcsname{%
+        \ifx\MateTest\xskak at matetest\relax
+           \noexpand\setboolean{xskakboolmate}{true}%
+        \else
+           \noexpand\setboolean{xskakboolmate}{false}%
+         \fi}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.mate\endcsname
+  %===========%
+  %% Enpassantsquare
+  %%new naming
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassantsquare\endcsname
+        {\EnPassantSquare}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassantsquare\endcsname
+  %===========%
+  %% Enpassantcheck
+  %% new naming, changed to boolean
+  \begingroup
+    \WhiteToMove%
+     {\ifthenelse%
+      {\equal{\csname Xskak.\xskak at val@gameid.\the\c at move.w.piecechar\endcsname}{p}}
+      {% pawn move:
+        \ifthenelse%white enpassant
+         {\equal
+          {\csname Xskak.\xskak at val@gameid.\the\c at move.w.moveto\endcsname}%
+          {\csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.enpassantsquare\endcsname}}%
+         {\expandafter\xdef
+            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
+               {\noexpand\setboolean{xskakboolenpassant}{true}}%
+          \expandafter\xdef
+            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname{p}}%
+         {\expandafter\xdef
+            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
+              {\noexpand\setboolean{xskakboolenpassant}{false}}}}%
+        {\expandafter\xdef
+            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
+              {\noexpand\setboolean{xskakboolenpassant}{false}}}%
+         }%
+     {\ifthenelse
+      {\equal{\csname Xskak.\xskak at val@gameid.\the\c at move.b.moveto\endcsname}{p}}
+      {%pawn move:
+       \ifthenelse%black enpassant
+         {\equal
+          {\csname Xskak.\xskak at val@gameid.\the\c at move.b.moveto\endcsname}%
+          {\csname Xskak.\xskak at val@gameid.\the\c at move.w.enpassantsquare\endcsname}}%
+         {\expandafter\xdef
+            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
+              {\noexpand\setboolean{xskakboolenpassant}{true}}%
+          \expandafter\xdef
+            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname{P}}%
+         {\expandafter\xdef
+            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
+                 {\noexpand\setboolean{xskakboolenpassant}{false}}}}%
+         {\expandafter\xdef
+            \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
+              {\noexpand\setboolean{xskakboolenpassant}{false}}}}%
+         %
+           \endgroup
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname
+  %===========%
+  %% lostpiecechar
+  \edef\@tempa{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiece\endcsname}%
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiecechar\endcsname{%
+      \if\@tempa P%
+        p%
+      \else
+       \if\@tempa p%
+        p%
+       \else
+        \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnlostpiece\endcsname
+       \fi
+      \fi}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lostpiecechar\endcsname
+  %===========%
+  %% Promotion
+  %%new naming, added boolean
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiecechar\endcsname{%
+        \Promotion{\PromotionPieceName}{}}%
+  \edef\@tempa{\PromotionPieceName}%
+  \if\@tempa\@empty\else
+   \WhiteToMove{\let\board at temp@char\@tempa}{\expandafter\board at conv@chartolowerchar\@tempa}%
+  \fi
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiece\endcsname{%
+        \Promotion{\board at temp@char}{}}%
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotion\endcsname{%
+        \Promotion%
+          {\noexpand\setboolean{xskakboolpromotion}{true}}%
+          {\noexpand\setboolean{xskakboolpromotion}{false}}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotion\endcsname
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiece\endcsname
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiecechar\endcsname
+  %=============%
+  %% san
+  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.check\endcsname
+  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.mate\endcsname
+  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
+  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotion\endcsname
+  \expandafter\protected at xdef
+   \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.san\endcsname{%
+    \Castling
+     {\LongCastling
+      {\unexpanded{\castlingchar\castlinghyphen\castlingchar\castlinghyphen\castlingchar}}%
+      {\unexpanded{\castlingchar\castlinghyphen\castlingchar}}}%
+     {\if\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname p\else
+      \noexpand\textsymfigsymbol{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname}%
+      \fi
+      \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.pgnmovefrom\endcsname
+      \Capture{\noexpand\capturesymbol}{}%
+      \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.moveto\endcsname
+      \ifxskakboolpromotion
+      \noexpand\textsymfigsymbol{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiecechar\endcsname}%
+      \fi
+      \ifxskakboolenpassant
+      \noexpand\xskakenpassanttext
+      \fi}%move from below 2008-10-10
+      \ifxskakboolcheck
+      \noexpand\checksymbol
+      \fi
+      \ifxskakboolmate
+      \noexpand\mate
+      \fi
+      }%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.san\endcsname
+  %=============%
+  %% lan
+  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.check\endcsname
+  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.mate\endcsname
+  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
+  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotion\endcsname
+  \expandafter\protected at xdef
+   \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lan\endcsname{%
+    \Castling
+     {\LongCastling
+      {\unexpanded{\castlingchar\castlinghyphen\castlingchar\castlinghyphen\castlingchar}}%
+      {\unexpanded{\castlingchar\castlinghyphen\castlingchar}}}%
+     {\if\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname p\else
+      \noexpand\textsymfigsymbol{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piecechar\endcsname}%
+      \fi
+      \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.movefrom\endcsname
+      \Capture{\noexpand\capturesymbol}{\noexpand\xskakmovehyphen}%
+      \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.moveto\endcsname
+      \ifxskakboolpromotion
+      \noexpand\textsymfigsymbol{\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.promotionpiecechar\endcsname}%
+      \fi
+      \ifxskakboolenpassant
+      \noexpand\xskakenpassanttext
+      \fi}%move from below 2008-10-10
+      \ifxskakboolcheck
+      \noexpand\checksymbol
+      \fi
+      \ifxskakboolmate
+      \noexpand\mate
+      \fi
+      }%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.lan\endcsname
+  %===========%
+  %% addpieces
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.addpieces\endcsname{%
+       \Castling%
+         {\LongCastling%
+           {\WhiteToMove{Kc1,Re1}{kc8,re8}}%
+           {\WhiteToMove{Kg1,Rf1}{kg8,rf8}}}%
+         {\Promotion%
+           {\PromotionPieceName\MoveToFile\MoveToRank}%
+           {\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.piece\endcsname
+            \MoveToFile\MoveToRank}%
+          }}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.addpieces\endcsname
+  %===========%
+  %% clearfields
+  \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.enpassant\endcsname
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.clearfields\endcsname{%
+       \Castling%
+         {\LongCastling%
+           {e\WhiteToMove{1}{8},a\WhiteToMove{1}{8}}%
+           {e\WhiteToMove{1}{8},h\WhiteToMove{1}{8}}}%
+         {\ifxskakboolenpassant%
+             \WhiteToMove
+              {\csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.moveto\endcsname,#1}%
+              {\csname Xskak.\xskak at val@gameid.\the\c at move.w.moveto\endcsname,#1}%
+           \else
+               #1%
+           \fi}}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.clearfields\endcsname
+  %============%
+  %% comments
+  \toks@=\expandafter{\MoveRest}%
+  \expandafter\xdef
+     \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.comments\endcsname{%
+        \the\toks@}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.comments\endcsname
+  %============%
+  %% lastplayer, nextplayer, lastmovenr, nextmovenr
+  \expandafter\xdef
+    \csname Xskak\xskak at val@gameid lastplayer\endcsname{\WhiteToMove{w}{b}}%
+  \expandafter\xdef
+    \csname Xskak\xskak at val@gameid nextplayer\endcsname{\WhiteToMove{b}{w}}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid lastmovenr\endcsname{\the\c at move}%
+   \expandafter\xdef
+    \csname Xskak\xskak at val@gameid lastmoveid\endcsname{\the\c at move\WhiteToMove{w}{b}}%
+   \WhiteToMove{%
+    \expandafter\xdef
+     \csname Xskak\xskak at val@gameid nextmovenr\endcsname{\the\c at move}%
+    \expandafter\xdef
+     \csname Xskak\xskak at val@gameid nextmoveid\endcsname{\the\c at move b}}%
+    {\expandafter\xdef
+      \csname Xskak\xskak at val@gameid nextmovenr\endcsname{\the\numexpr\the\c at move+1\relax}%
+     \expandafter\xdef
+      \csname Xskak\xskak at val@gameid nextmoveid\endcsname{\the\numexpr\the\c at move+1\relax w}}%
+   %=============%
+   % Initialization of the nag-commands (are filled later by \Mainline)%
+   \expandafter\xdef\csname
+     Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.nag\endcsname{}%
+  \edef\oldpiece{\Get{\MoveToFile\MoveToRank}}%
+  \Set{\MoveTo}{\Get{#1}}\Set{#1}{E}%
+  \gdef\MoveFrom{#1}%
+  %===========%
+  %%fen position _after_ the move
+  \count@=\value{move}%
+  \WhiteToMove{}{\advance\count@ by 1\relax}%
+  \xskak at specialfencalculate
+  \expandafter\global\expandafter\let
+   \csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.nextfen\endcsname\temp at board
+  \xskak at do@getnextmoveid{\the\c at move}{\WhiteToMove{w}{b}}%
+  %% fen before next move
+  \expandafter\xdef
+    \csname
+     Xskak.\xskak at val@gameid.\xskak at temp@movenr.\xskak at temp@player.pastfen\endcsname{\temp at board}%
+  %% current last fen of game
+  \expandafter\xdef
+     \csname
+     Xskak\xskak at val@gameid lastfen\endcsname{\temp at board}%
+  %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.\WhiteToMove{w}{b}.nextfen\endcsname
+}
+
+%% overwrite the original skak definition:
+\let\DoTheMove\xskak at do@dothemove
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%% enabling parsing of comments
+%%% comments a NAG ($<number>) or text in \xskakcomment{...}
+%%% NAG and comments must have spaces between them!
+
+%% tests is the argument is a NAG
+\def\xskak at test@nag#1#2XX{%
+       \ifthenelse{\equal{#1}{$}}%
+         {\setboolean{xskakboolnag}{true}}{\setboolean{xskakboolnag}{false}}}
+
+%% tests if the argument is \xskakcomment{...}
+\def\xskak at test@comment#1=\xskakcomment#2=={%
+       \def\@tempa{#1}%
+       \ifx\@tempa\empty%#1 beginnt mit \xskakcomment
+        \setboolean{xskakboolcomment}{true}%
+       \else
+        \setboolean{xskakboolcomment}{false}%
+       \fi}
+
+%% saving old version of \Mainline:
+\let\xskak at oriMainline\Mainline
+
+%% define a new own Mainline command
+\def\xskak at do@parsemainline(#1 #2){%
+ \let\xskak at save@nag\gdef
+ \ifxskakboolnag
+  \let\xskak at save@nag\g at addto@macro
+ \fi
+ \ifxskakboolcomment
+  \let\xskak at save@nag\g at addto@macro
+ \fi
+ \xskak at test@comment=#1=\xskakcomment==%
+ \ifxskakboolcomment
+  \ExecuteMoves{% mainline
+   \WhiteToMove
+     {\expandafter\xskak at save@nag
+       \csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.nag\endcsname
+       {{\xskak at beforecomment{#1}}}%
+     %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.nag\endcsname
+     }%
+     {%
+      \expandafter\xskak at save@nag
+       \csname Xskak.\xskak at val@gameid.\the\c at move.w.nag\endcsname
+       {{\xskak at beforecomment{#1}}}%
+     %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.w.nag\endcsname
+     }}%
+     {}%variation
+  \PrintMoves{{\xskak at beforecomment{#1}}}{}%
+  \xskak at do@parsemainline(#2)%
+ \else
+ \xskak at test@nag#1YXX%
+ \ifthenelse%
+  {\boolean{xskakboolnag}}%
+  {\ExecuteMoves{% mainline%
+   \WhiteToMove
+     {\ifthenelse{\equal{#1}{$D} \OR \equal{#1}{$d}}%
+        {\expandafter\ifx
+          \csname Xskak\xskak at val@gameid diagramlist\endcsname\@empty
+          \expandafter\xdef
+             \csname Xskak\xskak at val@gameid diagramlist\endcsname
+           {\the\numexpr\the\c at move-1\relax b}%
+         \else
+          \toks@=\expandafter\expandafter\expandafter{%
+           \csname Xskak\xskak at val@gameid diagramlist\endcsname}%
+          \expandafter\xdef
+           \csname Xskak\xskak at val@gameid diagramlist\endcsname
+           {\the\toks@,\the\numexpr\the\c at move-1\relax b}%
+          \fi
+        }%
+        {\expandafter\xskak at save@nag
+          \csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.nag\endcsname
+          {{\xskak at beforeNAG{\csname#1\endcsname}}}}%
+     %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\numexpr\the\c at move-1\relax.b.nag\endcsname
+     }%
+     {\ifthenelse{\equal{#1}{$D} \OR \equal{#1}{$d}}%
+        {\expandafter\ifx
+          \csname Xskak\xskak at val@gameid diagramlist\endcsname\@empty
+          \expandafter\xdef
+             \csname Xskak\xskak at val@gameid diagramlist\endcsname
+           {\the\c at move w}%
+         \else
+          \toks@=\expandafter\expandafter\expandafter{%
+           \csname Xskak\xskak at val@gameid diagramlist\endcsname}%
+          \expandafter\xdef
+           \csname Xskak\xskak at val@gameid diagramlist\endcsname
+           {\the\toks@,\the\c at move w}%
+          \fi
+        }%
+        {\expandafter\xskak at save@nag
+          \csname Xskak.\xskak at val@gameid.\the\c at move.w.nag\endcsname
+          {{\xskak at beforeNAG{\csname#1\endcsname}}}}%
+     %\expandafter\show\csname Xskak.\xskak at val@gameid.\the\c at move.w.nag\endcsname
+     }}%
+   {}%variation
+   \PrintMoves{{\xskak at beforeNAG{\csname#1\endcsname}}}{}%
+    \xskak at do@parsemainline(#2)}%
+  {\EqStr{ }{#1}%
+    {\xskak at do@parsemainline(#2)}%
+    {%
+     \EqStr{Z}{#1}%
+      {}%
+      {\NumberNext%
+       {\EatNumber{#1}% sets \NumberOK, \ExpectedColour
+                                % executes a move not separated from the
+                                % number with a space, eg, 1.e4
+                                %{\gdef\NumberNext{\False}\Mainline(#2)}%
+                                %\gdef\NumberNext{\False}%
+        \xskak at do@parsemainline(#2)}%
+       {\Fen at calculate% 16.10.2008 skak1.5
+        \expandafter\xdef\csname chessgame.skak.temp.previous\endcsname{\temp at board}%16.10.2008 skak1.5
+       \MakeMoveMainline{#1}%
+        \xskak at do@parsemainline(#2)}}}}%
+    \fi}
+
+%% overwrite the skak version:
+%% currently needed as \runmoves use \Mainline
+\let\Mainline\xskak at do@parsemainline
+
+%% Printing
+%%% Styles
+
+%% helper command. Copies the commands around
+\newcommand\xskak at do@copystyleitem[2]{% #1<type> to #2<type>
+ %use empty #2 to copy to the skak original commands
+ %use empty #1 to copy from the original skak commands
+ %use xskak at styleitem@<name>@ to copy a named style item
+ \ifcsname #1beforeblack\endcsname
+  \expandafter\global\expandafter\let
+     \csname #2whiteopen\expandafter\endcsname
+     \csname #1whiteopen\endcsname
+  \expandafter\global\expandafter\let
+     \csname #2blackopen\expandafter\endcsname
+     \csname #1blackopen\endcsname
+  \expandafter\global\expandafter\let
+     \csname #2beforewhite\expandafter\endcsname
+     \csname #1beforewhite\endcsname
+  \expandafter\global\expandafter\let
+     \csname #2beforeblack\expandafter\endcsname
+     \csname #1beforeblack\endcsname
+  \expandafter\global\expandafter\let
+     \csname #2afterwhite\expandafter\endcsname
+     \csname #1afterwhite\endcsname
+  \expandafter\global\expandafter\let
+     \csname #2afterblack\expandafter\endcsname
+     \csname #1afterblack\endcsname
+  \expandafter\global\expandafter\let
+     \csname #2beforenumber\expandafter\endcsname
+     \csname #1beforenumber\endcsname
+  \expandafter\global\expandafter\let
+     \csname #2opencommands\expandafter\endcsname
+     \csname #1opencommands\endcsname
+  \expandafter\global\expandafter\let
+     \csname #2closecommands\expandafter\endcsname
+     \csname #1closecommands\endcsname
+  %% two specific xskak command for the comments:
+  \expandafter\global\expandafter\let
+     \csname #2xskak at beforecomment\expandafter\endcsname
+     \csname #1xskak at beforecomment\endcsname
+  \expandafter\global\expandafter\let
+     \csname #2xskak at beforeNAG\expandafter\endcsname
+     \csname #1xskak at beforeNAG\endcsname
+ \else
+  \PackageError{xskak}{style template #1 doesn't exist!}{}%
+ \fi}
+
+%% new style items
+ \def\xskak at temp@name{xskak at styleitem@@empty@}%
+ \setkeys[UFXS]{styleitem}{%
+   opencommands={},
+   beforenumber={},
+   whiteopen={},
+   blackopen={},
+   beforewhite={},
+   afterwhite={},
+   beforeblack={},
+   afterblack={},
+   closecommands={},
+   beforecomment={},
+   beforeNAG={}}
+
+\newcommand\xskak at beforeNAG{}
+\newcommand\xskak at beforecomment{}
+
+\newcommand\xskaknewstyleitem[2][]{%
+ \ifcsname xskak at styleitem@#2 at beforeblack\endcsname
+  \PackageWarning{xskak}{Style item #2 already exists.
+                         I overwrite  it!}{}%
+ \fi
+ \def\xskak at temp@name{xskak at styleitem@#2@}%
+ \setkeys*[UFXS]{styleiteminit}{%
+  template=@empty, %empty everything
+  #1}%             %use a possible template.
+ \setrmkeys[UFXS]{styleitem}}
+
+%%% styles
+
+
+
+\newcommand*\xskak at do@splitlevel[1]{%
+     \def\xskak at temp@levelprefix{#1}%
+     \def\xskak at temp@levelpostfix{}%
+     \def\xskak at temp@levelnumber{0}}
+
+\ifxskakpdfmatch
+   \renewcommand*\xskak at do@splitlevel[1]{%
+    \ifnum\pdfmatch {([^0-9]*)([0-9]+)(.*)}{#1}=1 %
+     \edef\xskak at temp@levelprefix{\expandafter\strip at prefix\pdflastmatch1}%
+     \edef\xskak at temp@levelpostfix{\expandafter\strip at prefix\pdflastmatch3}%
+     \edef\xskak at temp@levelnumber{\expandafter\strip at prefix\pdflastmatch2}%
+    \else
+     \edef\xskak at temp@levelprefix{#1}%
+     \edef\xskak at temp@levelpostfix{}%
+     \edef\xskak at temp@levelnumber{0}%
+    \fi}%
+\fi
+
+\newcommand\xskaknewstyle[2][]{%
+ \begingroup
+ \def\xskak at temp@name{xskak at style@#2@}%
+ \ifcsname\xskak at temp@name 1 at item\endcsname
+  \PackageError{xskak}{style #2 already exists}{}%
+ \else
+  \setkeys[UFXS]{style}{level=1,styleitem=@empty,#1}%
+ \fi
+ \endgroup
+}
+
+\newcommand\xskakaddtostyle[2][]{%
+ \def\xskak at temp@name{xskak at style@#2@}%
+ \ifcsname\xskak at temp@name 1 at item\endcsname
+  \setkeys[UFXS]{style}{#1}%
+ \else
+  \PackageError{xskak}{style #2 doesn't exist}{}%
+ \fi
+}
+
+%% using and setting styles:
+\newcommand\xskak at use@varstyle[1]{%
+  \ifcsname xskak at style@\xskak at val@stylename @#1 at item\endcsname
+   %use xskak at styleitem@<name>@ to copy a named style item
+   \edef\@tempa{%
+      xskak at styleitem@%
+      \csname xskak at style@\xskak at val@stylename @#1 at item\endcsname%=<name>
+       @}%
+   \xskak at do@copystyleitem{%
+   \@tempa}{}%
+  \else
+    \ifxskakpdfmatch
+     \xskak at do@splitlevel{#1}%
+     \ifnum\xskak at temp@levelnumber>0\relax
+        \ifnum\xskak at temp@levelnumber=1\relax
+          \xskak at use@varstyle{1}%
+        \else
+          \xskak at use@varstyle{%
+             \xskak at temp@levelprefix
+             \the\numexpr\xskak at temp@levelnumber-1\relax
+             \xskak at temp@levelpostfix}%
+        \fi
+     \else
+      \PackageError{xskak}{Unknown level #1}{}%
+     \fi
+    \else
+       \ifnum#1=1\relax
+          \xskak at use@varstyle{1}%
+        \else
+          \xskak at use@varstyle{%
+             \the\numexpr#1-1\relax}%
+        \fi
+    \fi
+  \fi
+}
+
+%% default styles A,B,C, at empty
+
+\xskaknewstyleitem[%
+ whiteopen=\space,
+ blackopen=\ldots,
+ afterwhite=\space,
+ afterblack=\space]{styleB}
+
+\xskaknewstyleitem[%
+ whiteopen=.,
+ blackopen=. -,
+ beforewhite=\space,
+ afterblack=\space,
+ beforeblack={,\space}]{styleA}
+
+\xskaknewstyleitem[%
+ opencommands={\begin{tabbing}%
+    \hspace{.2\linewidth}\=\hspace{.2\linewidth}\=%
+    \hspace{.2\linewidth}\= \kill},
+ closecommands={\end{tabbing}},
+ blackopen=\>\ldots,
+ beforenumber=\>,
+ beforewhite=\>,
+ beforeblack=\>,
+ afterblack=\\]{styleC}
+
+\xskaknewstyleitem[%
+ whiteopen={.\,},
+ blackopen={\ldots\,},
+ afterwhite={\ },
+ afterblack={\ }]{UF}
+
+\xskaknewstyleitem[%
+ opencommands =\begingroup\normalcolor\ttfamily\textbackslash opencommands\endgroup\ ,
+ closecommands=\begingroup\normalcolor\ttfamily\textbackslash closecommands\endgroup\ ,
+ whiteopen    =\begingroup\normalcolor\ttfamily\textbackslash whiteopen\endgroup\ ,
+ blackopen    =\begingroup\normalcolor\ttfamily\textbackslash blackopen\endgroup\ ,
+ beforenumber =\begingroup\normalcolor\ttfamily\textbackslash beforenumber\endgroup\ ,
+ beforewhite  =\begingroup\normalcolor\ttfamily\textbackslash beforewhite\endgroup\ ,
+ afterwhite   =\begingroup\normalcolor\ttfamily\textbackslash afterwhite\endgroup\ ,
+ beforeblack  =\begingroup\normalcolor\ttfamily\textbackslash beforeblack\endgroup\ ,
+ afterblack   =\begingroup\normalcolor\ttfamily\textbackslash afterblack\endgroup\ ,
+ beforecomment=\begingroup\normalcolor\ttfamily\textbackslash beforecomment\endgroup\ ,
+ beforeNAG=\color{green}\begingroup\normalcolor\ttfamily\textbackslash beforeNAG\endgroup\ ,
+ ]{showcommands}
+
+\xskaknewstyle[level= 1,styleitem=styleB,font=\bfseries,
+               level= 3,font=\itshape]{styleB}
+
+\xskaknewstyle[level= 1,styleitem=styleA,font=\bfseries,
+               level= 3,font=\itshape]{styleA}
+
+\xskaknewstyle[level= 1,styleitem=styleC,font=\bfseries,
+               level= 2,styleitem=styleB,
+               level= 3,font=\itshape]{styleC}
+
+\xskaknewstyle[level= 1,styleitem=@empty,font=\bfseries]{@empty}
+
+\xskaknewstyle[level= 1,styleitem=UF,font=\bfseries,
+               level= 3,font=\itshape]{UF}
+
+\xskaknewstyle[level= 1,styleitem=showcommands,font=\begingroup\ttfamily\textbackslash mainlinestyle\endgroup\ ,
+               level= 2,font=\begingroup\ttfamily\textbackslash variationstyle\endgroup\ ]{test}
+
+%% default level and style
+\xskakset{style=styleB,level=1}
+
+%%%%%%%%%%%%%%%%%%%%%
+\gdef\xskak at do@printmove{\xskakget{san}}
+
+\newcommand\printchessgame[1][]{%
+ \setkeys*[UFXS]{print}{#1}%set style and level
+ \leavevmode%UF 2012-09-10 to allow wrapping around wrapfigure
+ \begingroup
+ \setkeys*[UFXS]{xprint}{#1}%% getting the id
+ \xdef\xskak at val@movenr{%
+  \csname Xskak\xskak at val@gameid initmovenr\endcsname}%
+ \xdef\xskak at val@player{%
+  \csname Xskak\xskak at val@gameid initplayer\endcsname}%
+ \xdef\xskak at val@stopmovenr{%
+  \csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
+ \xdef\xskak at val@stopplayer{%
+  \csname Xskak\xskak at val@gameid lastplayer\endcsname}%
+ \setkeys*[UFXS]{xprint}{#1}%% using the rest of the keys
+  \ifthenelse%
+    {\xskak at test@moveidingame{\xskak at val@movenr}{\xskak at val@player}{\xskak at val@gameid}}%
+    {}%
+    {\PackageWarning{xskak}{init move
+      \xskak at val@movenr\xskak at val@player\space
+       is not in the game.%
+     \MessageBreak The first move is used instead.}{}%
+     \xdef\xskak at val@movenr{%
+      \csname Xskak\xskak at val@gameid initmovenr\endcsname}%
+     \xdef\xskak at val@player{%
+      \csname Xskak\xskak at val@gameid initplayer\endcsname}}%
+  %%
+  \ifthenelse%
+    {\xskak at test@moveidingame{\xskak at val@stopmovenr}{\xskak at val@stopplayer}{\xskak at val@gameid}}%
+    {}%
+    {\PackageWarning{xskak}{stop move
+      \xskak at val@stopmovenr\xskak at val@stopplayer\space
+      is not in the game.\MessageBreak The last move is used instead.}{}%
+     \xdef\xskak at val@stopmovenr{%
+       \csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
+     \xdef\xskak at val@stopplayer{%
+       \csname Xskak\xskak at val@gameid lastplayer\endcsname}}%
+  %%
+  \ifthenelse%
+   {\xskak at test@lessorequal
+     {\xskak at val@movenr}{\xskak at val@player}%
+     {\xskak at val@stopmovenr}{\xskak at val@stopplayer}}%
+   %at least one move to print:
+   {\mainlinestyle
+    \opencommands
+    %% handle the first move
+    \ifthenelse{\equal{\xskak at val@player}{w}}%
+     %first move is a white move. Will be handled in the loop
+     {\beforenumber
+      \xskak at val@movenr
+      \whiteopen
+      \beforewhite
+      \xskak at do@printmove%
+      \xdef\xskak at val@player{b}}%
+     %first move is a black one:
+     {\beforenumber
+      \xskak at val@movenr
+      \blackopen
+      \beforeblack
+      \xskak at do@printmove
+  %    \afterblack
+      \xdef\xskak at val@movenr{\the\numexpr\xskak at val@movenr +1\relax}%
+      \xdef\xskak at val@player{w}}%
+    %% loop through the res
+    \whiledo
+     {\xskak at test@lessorequal
+       {\xskak at val@movenr}{\xskak at val@player}%
+       {\xskak at val@stopmovenr}{\xskak at val@stopplayer}}%
+     {\ifthenelse
+       {\equal{\xskak at val@player}{w}}%
+       {\afterblack
+        \beforenumber
+        \xskak at val@movenr
+        \whiteopen
+        \beforewhite
+        \xskak at do@printmove
+        }
+       {\afterwhite
+        \beforeblack
+        \xskak at do@printmove
+        %\afterblack
+        }%
+      \xskak at do@getnextmoveid{\xskak at val@movenr}{\xskak at val@player}%
+       \global\let\xskak at val@movenr\xskak at temp@movenr
+       \global\let\xskak at val@player\xskak at temp@player}%
+      \closecommands
+    }%
+  {}% no move
+ \endgroup
+ }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%% Corrections/changes of skak commands %%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%% changed \mainline and \variation for style/level handling
+%%% (added optional argument)
+
+\renewcommand\mainline[1][]{%
+ \setkeys[UFXS]{print}{#1}%
+ \begingroup\catcode`\#=12 \@mainline}
+
+\DeclareRobustCommand{\variation}[1][]{%
+ \setkeys[UFXS]{print}{#1}%
+ \begingroup\catcode`\#=12 \@variation}
+
+\newcommand\variationmovemode{\shortmoves}
+
+%added \shortmoves as \variation doesn't work in longmoves-mode
+\def\@variation#1{\endgroup\gdef\NumberNext{\True}%
+  \gdef\AfterBlack{\False}%
+  \gdef\PrintMoves{\True}%
+  \gdef\ExecuteMoves{\False}%
+  \gdef\StoreLastMove{\False}%
+  {\variationstyle\opencommands%
+   \variationmovemode
+   \xskak at do@parsemainline(#1 Z )%
+   \closecommands}}
+
+%%% Read/store commands
+%% changed to avoid the use of to much write/read registers
+%% ?? What did I mean? changed \FenBoard to \fenboard in \loadgame/restoregame
+%% ?? What did I mean? to avoid problems with the redefinition in texmate
+
+\def\savegame#1{% writes the board as fen to #1.fen
+  \immediate\openout0=#1.fen%
+  \Fen at calculate%
+  \immediate\write0{\temp at board}%
+  \immediate\closeout0}
+
+\def\loadgame#1{%
+  \def\load at read{}%
+  \openin0=#1.fen\relax%
+  \read0 to \load at read%
+  \closein0%
+  \expandafter\fenboard\expandafter{\load at read}}
+
+%%% ParseCastlingA changed so that comments are no longer lost:
+%%% -> bug report 2008-10-10
+
+\def\@setmoverestcastling(#1ZVW){\gdef\MoveRest{#1}}
+
+\def\ParseCastlingA(#1#2#3){%
+  \MyEqualB{#1#2}{-O}%
+  {\gdef\LongCastling{\True}%
+   \ParseCastlingAA(#3)}%
+  {\ParseCastlingAA(#1#2#3)}}
+
+\newcommand\ParseCastlingAA{}
+
+\def\ParseCastlingAA(#1#2#3){%
+ \EqStr{Z}{#1}%
+  {}% we are done!
+  {\EqStr{#1}{+}% chess ?
+     {\protected at xdef\CheckTest{\checksymbol}%
+      \ParseCastlingAA(#2#3)}%
+     {\EqStr{#1}{##}% mate?
+       {\protected at xdef\MateTest{\mate}%
+        \ParseCastlingAA(#2#3)}%
+       {\@setmoverestcastling(#1#2#3)}}}}
+
+
+%%%% ExecutePawnMove changed:
+%%%% moved \xdef of EnPassantSquare before DoTheMove
+%%%% I hope it doesn't break something
+
+\def\ExecutePawnMove{% relies on the info obtained by ParseMove
+  \setcounter{halfmove}{0}%
+  \Capture%
+  {\EqPiece{E}{\Get{\MoveTo}}%
+    {\Set{\MoveToFile\FromRank}{E}}%
+    {}%
+    \xdef\EnPassantSquare{-}% U.F. moved before \DoTheMove
+    \DoTheMove{\FileDiscriminator\FromRank}%
+    }%
+  {\EqPiece{E}{\Get{\MoveToFile\FromRank}}%
+    {\xdef\EnPassantSquare{\MoveToFile\FromRank}% two square move
+      \DoTheMove{\MoveToFile\InitialRank}}%
+    {\xdef\EnPassantSquare{-}%
+      \DoTheMove{\MoveToFile\FromRank}% one square move
+      }}%
+  \Promotion%
+  {\Set{\MoveTo}{\PieceNameToPiece{\PromotionPieceName}{\WhiteToMove}}}%
+  {}}
+
+%%% the internal longmove command changed to get correct pawn moves:
+
+\def\xskak at do@printmove at algebraic{%
+ \csname Xskak.\xskak at val@gameid.%
+        \WhiteToMove{\the\numexpr\the\c at move-1\relax}{\the\c at move}.%
+        \WhiteToMove{b}{w}.lan\endcsname
+ \csname Xskak.\xskak at val@gameid.%
+        \WhiteToMove{\the\numexpr\the\c at move-1\relax}{\the\c at move}.%
+        \WhiteToMove{b}{w}.comments\endcsname{}}
+
+\let\skaklongmoves\longmoves %added 16.10.2008
+
+\def\longmoves{%
+\let\printmove=\xskak at do@printmove at algebraic
+\gdef\xskak at do@printmove{\xskakget{lan}}}
+
+\def\shortmoves{%
+\let\printmove=\printmove at san
+\gdef\xskak at do@printmove{\xskakget{san}}}
+
+%</xskak>
+%<*xskak-keys>
+\ProvidesFile{xskak-keys.sty}[2019/06/23 version v1.5 key definitions for xskak.sty]
+
+
+%%%%%%%%%%%%%%%%%%%%%
+%%%% Keys
+%%%%%%%%%%%%%%%%%%%%%
+%% \newchessgame: fam: new
+\define at key[UFXS]{new}{id}[\xskak at val@defaultid]{\xdef\xskak at val@gameid{#1}}
+
+\define at key[UFXS]{new}{movenr}{\xdef\xskak at val@movenr{#1}}
+
+\define at key[UFXS]{new}{player}{\xdef\xskak at val@player{#1}}
+
+\define at key[UFXS]{new}{moveid}[\xskak at val@defaultmovenr\xskak at val@defaultplayer]{%
+ \edef\@tempa{#1}%
+ \xskak at split@moveid{\@tempa}%
+ \global\let\xskak at val@movenr\xskak at temp@movenr
+ \global\let\xskak at val@player\xskak at temp@player}
+
+\define at key[UFXS]{new}{newvar}[\xskak at val@gameid]{%
+ \xdef\xskak at val@refgameid{#1}%
+ \xdef\xskak at val@movenr{\csname Xskak#1lastmovenr\endcsname}%
+ \xdef\xskak at val@player{\csname Xskak#1lastplayer\endcsname}}%
+
+
+
+\define at key[UFXS]{new}{reftag}{%
+ \xdef\xskak at val@currenttag{#1}}
+
+\define at key[UFXS]{new}{refid}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFXS at new@id{\csname xskak at tag@#1 at refid\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFXS]{new}{refpastmovenr}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFXS at new@movenr{\csname xskak at tag@#1 at refpastmovenr\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFXS]{new}{refnextmovenr}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFXS at new@movenr{\csname xskak at tag@#1 at refnextmovenr\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFXS]{new}{refpastplayer}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFXS at new@movenr{\csname xskak at tag@#1 at refpastmovenr\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFXS]{new}{refnextplayer}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFXS at new@player{\csname xskak at tag@#1 at refnextplayer\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFXS]{new}{refpastmoveid}{%
+  \ifcsname xskak at tag@#1 at refid\endcsname
+   \UFXS at new@moveid{%
+    \csname xskak at tag@#1 at refpastmovenr\endcsname
+    \csname xskak at tag@#1 at refpastplayer\endcsname}%
+  \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFXS]{new}{refnextmoveid}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi
+ \UFXS at new@moveid{%
+  \csname xskak at tag@#1 at refnextmovenr\endcsname
+  \csname xskak at tag@#1 at refnextplayer\endcsname}}
+
+\define at key[UFXS]{new}{refpast}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi
+ \UFXS at new@refpastmoveid{#1}%
+ \UFXS at new@refid{#1}}
+
+\define at key[UFXS]{new}{refnext}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFXS at new@refnextmoveid{#1}%
+  \UFXS at new@refid{#1}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+%% \xskakset: fam set
+\define at key[UFXS]{set}{id}[\xskak at val@defaultid]{\UFXS at new@id{#1}}
+
+\define at key[UFXS]{set}{movenr}{\UFXS at new@moveid{#1}}
+
+\define at key[UFXS]{set}{player}{\UFXS at new@player{#1}}
+
+\define at key[UFXS]{set}{moveid}[\xskak at val@defaultmovenr\xskak at val@defaultplayer]{%
+ \UFXS at new@moveid{#1}}%
+
+\define at key[UFXS]{set}{stepmoveid}[1]{%
+  \count@=#1\relax
+   \ifthenelse{\the\count@>0}
+     {\whiledo{\the\count@>0}%
+       {\xskak at do@getnextmoveid{\xskak at val@movenr}{\xskak at val@player}%
+        \advance\count@ by -1%
+        \global\let\xskak at val@movenr\xskak at temp@movenr
+        \global\let\xskak at val@player\xskak at temp@player}%
+     }%
+     {\ifthenelse{\the\count@=0}%
+       {}%
+       {\whiledo{\the\count@<0}%
+        {\xskak at do@getpreviousmoveid{\xskak at val@movenr}{\xskak at val@player}%
+         \advance\count@ by 1%
+         \global\let\xskak at val@movenr\xskak at temp@movenr
+         \global\let\xskak at val@player\xskak at temp@player}%
+         \ifthenelse{\the\count@<1}%
+          {\PackageWarning{xskak}{Move number below 1!}{}}%
+          {}}}}
+
+\define at key[UFXS]{set}{lastmoveid}[\xskak at val@gameid]{%
+  \ifcsname Xskak#1initfen\endcsname
+   \xdef\xskak at val@gameid{#1}%
+  \else\PackageError{xskak}{Game with the id #1 doesn't exist.}{}%
+  \fi
+  \xdef\xskak at val@movenr{\csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
+  \xdef\xskak at val@player{\csname Xskak\xskak at val@gameid lastplayer\endcsname}}%
+
+\define at key[UFXS]{set}{defaultmoveid}{%
+ \edef\@tempa{#1}\xskak at split@moveid{\@tempa}%
+ %\xdef\xskak at val@movedefaultid{#1}%
+ \xdef\xskak at val@defaultmovenr{\xskak at temp@movenr}%
+ \xdef\xskak at val@defaultplayer{\xskak at temp@player}}
+
+\define at key[UFXS]{set}{defaultmovenr}{%
+ \xdef\xskak at val@defaultmovenr{#1}}
+
+\define at key[UFXS]{set}{defaultplayer}{%
+ \xdef\xskak at val@defaultplayer{#1}}
+
+\define at key[UFXS]{set}{defaultid}{\gdef\xskak at val@defaultid{#1}}
+
+\define at key[UFXS]{set}{defaultfen}{\gdef\xskak at val@defaultfen{#1}}
+
+\define at key[UFXS]{set}{tag}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+   \PackageWarning{xskak}{Overwrite tag name #1}{}%
+ \fi
+ \expandafter\xdef
+  \csname xskak at tag@#1 at refid\endcsname{\xskak at val@gameid}%
+ \ifnum\the\c at move=0
+   \PackageWarning{xskak}{You haven't started a game yet. I won't set a tag!}{}%
+ \else
+  \expandafter\xdef
+   \csname xskak at tag@#1 at refnextmovenr\endcsname{\the\c at move}%
+  \expandafter\xdef
+   \csname xskak at tag@#1 at refnextplayer\endcsname{\WhiteToMove{w}{b}}%
+  \expandafter\xdef
+   \csname xskak at tag@#1 at refpastplayer\endcsname{\WhiteToMove{b}{w}}%
+  \expandafter\xdef
+   \csname xskak at tag@#1 at refnextmoveid\endcsname{\the\c at move\WhiteToMove{w}{b}}%
+  \WhiteToMove
+   {\expandafter\xdef
+    \csname xskak at tag@#1 at refpastmovenr\endcsname{\the\numexpr\the\c at move-1\relax}}
+   {\expandafter\xdef
+    \csname xskak at tag@#1 at refpastmovenr\endcsname{\the\c at move}}
+  \expandafter\xdef
+   \csname xskak at tag@#1 at refpastmoveid\endcsname{%
+   \csname xskak at tag@#1 at refpastmovenr\endcsname
+   \csname xskak at tag@#1 at refpastplayer\endcsname}%
+ \fi
+  }
+
+\define at key[UFXS]{set}{reftag}{%
+ \UFXS at new@reftag{#1}}
+
+
+\define at key[UFXS]{set}{refid}{%
+ \UFXS at new@refid{#1}}
+
+\define at key[UFXS]{set}{refpastmovenr}{%
+ \UFXS at new@refpastmovenr{#1}}
+
+\define at key[UFXS]{set}{refnextmovenr}{%
+ \UFXS at new@refnextmovenr{#1}}
+
+\define at key[UFXS]{set}{refpastplayer}{%
+  \UFXS at new@refpastplayer{#1}}
+
+\define at key[UFXS]{set}{refnextplayer}{%
+  \UFXS at new@refnextplayer{#1}}
+
+\define at key[UFXS]{set}{refpastmoveid}{%
+   \UFXS at new@refpastmoveid{#1}}
+
+\define at key[UFXS]{set}{refnextmoveid}{%
+  \UFXS at new@refnextmoveid{#1}}
+
+\define at key[UFXS]{set}{refpast}{%
+  \UFXS at new@refpast{#1}}
+
+\define at key[UFXS]{set}{refnext}{%
+  \UFXS at new@refnext{#1}}
+
+\define at key[UFXS]{set}{style}{%
+ \ifcsname xskak at style@#1 at 1@item\endcsname
+  \def\xskak at val@stylename{#1}%
+  \def\mainlinestyle{%
+   \xskak at use@varstyle{\xskak at val@curlevel}%
+   \xskak at do@splitlevel{\xskak at val@curlevel}%
+   \ifnum\xskak at temp@levelnumber=0\relax
+   \else
+    \csname xskak at style@#1@\xskak at temp@levelnumber @xfont\endcsname
+   \fi
+   \csname xskak at style@#1@\xskak at val@curlevel @font\endcsname}%
+  \let\variationstyle\mainlinestyle
+ \else
+  \PackageError{xskak}{Style #1 doesn't exist!}{}
+ \fi}
+
+\define at key[UFXS]{set}{gstyle}{%
+ \ifcsname xskak at style@#1 at 1@item\endcsname
+  \xdef\xskak at val@stylename{#1}%
+  \gdef\mainlinestyle{%
+   \xskak at use@varstyle{\xskak at val@curlevel}%
+   \xskak at do@splitlevel{\xskak at val@curlevel}%
+   \ifnum\xskak at temp@levelnumber=0\relax
+   \else
+    \csname xskak at style@#1@\xskak at temp@levelnumber @xfont\endcsname
+   \fi
+   \csname xskak at style@#1@\xskak at val@curlevel @font\endcsname}%
+  \global\let\variationstyle\mainlinestyle
+ \else
+  \PackageError{xskak}{Style #1 doesn't exist!}{}
+ \fi}
+
+
+\define at key[UFXS]{set}{level}{%
+ \edef\xskak at val@curlevel{#1}}%
+
+\define at key[UFXS]{set}{glevel}{%
+ \xdef\xskak at val@curlevel{#1}}%
+
+\define at key[UFXS]{set}{invar}[]{%
+ \ifxskakpdfmatch
+  \xskak at do@splitlevel{\xskak at val@curlevel}%
+  \ifnum\xskak at temp@levelnumber=0\relax
+   \PackageWarning{xskak}{key invar ignored}{}%
+  \else
+   \edef\xskak at val@curlevel{%
+          \xskak at temp@levelprefix
+          \the\numexpr\xskak at temp@levelnumber+1\relax
+          \xskak at temp@levelpostfix}%
+  \fi
+ \else
+ %% no pdfmatch. Will give an error if the level is not a number
+   \edef\xskak at val@curlevel{%
+          \the\numexpr\xskak at val@curlevel+1\relax}%
+ \fi}
+
+\define at key[UFXS]{set}{ginvar}[]{%
+ \ifxskakpdfmatch
+  \xskak at do@splitlevel{\xskak at val@curlevel}%
+  \ifnum\xskak at temp@levelnumber=0\relax
+   \PackageWarning{xskak}{key ginvar ignored}{}%
+  \else
+   \xdef\xskak at val@curlevel{%
+          \xskak at temp@levelprefix
+          \the\numexpr\xskak at temp@levelnumber+1\relax
+          \xskak at temp@levelpostfix}%
+  \fi
+ \else
+ %% no pdfmatch. Will give an error if the level is not a number
+   \xdef\xskak at val@curlevel{%
+          \the\numexpr\xskak at val@curlevel+1\relax}%
+ \fi}
+
+\define at key[UFXS]{set}{outvar}[]{%
+ \ifxskakpdfmatch
+  \xskak at do@splitlevel{\xskak at val@curlevel}%
+   \ifnum\xskak at temp@levelnumber=0\relax
+    \PackageWarning{xskak}{key outvar ignored}{}%
+   \else
+     \ifnum\xskak at temp@levelnumber=1\relax
+      \PackageWarning{xskak}{Level has already  value 1}{}%
+     \else
+       \edef\xskak at val@curlevel{%
+          \xskak at temp@levelprefix
+          \the\numexpr\xskak at temp@levelnumber-1\relax
+          \xskak at temp@levelpostfix}%
+     \fi
+  \fi
+ \else
+   \ifnum\xskak at val@curlevel=1\relax
+     \PackageWarning{xskak}{Level has already  value 1}{}%
+   \else
+     \edef\xskak at val@curlevel{%
+          \the\numexpr\xskak at val@curlevel-1}%
+   \fi
+ \fi}
+
+\define at key[UFXS]{set}{goutvar}[]{%
+ \ifxskakpdfmatch
+  \xskak at do@splitlevel{\xskak at val@curlevel}%
+   \ifnum\xskak at temp@levelnumber=0\relax
+    \PackageWarning{xskak}{key goutvar ignored}{}%
+   \else
+     \ifnum\xskak at temp@levelnumber=1\relax
+      \PackageWarning{xskak}{Level has already  value 1}{}%
+     \else
+       \xdef\xskak at val@curlevel{%
+          \xskak at temp@levelprefix
+          \the\numexpr\xskak at temp@levelnumber-1\relax
+          \xskak at temp@levelpostfix}%
+     \fi
+  \fi
+ \else
+   \ifnum\xskak at val@curlevel=1\relax
+     \PackageWarning{xskak}{Level has already  value 1}{}%
+   \else
+     \xdef\xskak at val@curlevel{%
+          \the\numexpr\xskak at val@curlevel-1}%
+   \fi
+ \fi}
+
+%% \resumechessgame: fam res
+\define at key[UFXS]{res}{id}{\UFXS at new@id{#1}}
+
+\define at key[UFXS]{res}{movenr}{\def\xskak at temp@movenr{#1}}
+
+\define at key[UFXS]{res}{player}{\def\xskak at temp@player{#1}}
+
+\define at key[UFXS]{res}{moveid}{\edef\@tempa{#1}\xskak at split@moveid{\@tempa}}
+
+\define at key[UFXS]{res}{newvar}[\xskak at val@gameid]{%
+ \xdef\xskak at val@refgameid{#1}%
+ \xdef\xskak at val@gameid{#1}%
+ \def\xskak at temp@movenr{\csname Xskak\xskak at val@gameid lastmovenr\endcsname}%
+ \def\xskak at temp@player{\csname Xskak\xskak at val@gameid lastplayer\endcsname}}%
+
+
+\define at key[UFXS]{res}{reftag}{%
+ \UFXS at new@reftag{#1}}
+
+\define at key[UFXS]{res}{refid}{%
+ \UFXS at new@refid{#1}}
+
+\define at key[UFXS]{res}{refpastmovenr}{%
+ \UFXS at new@refpastmovenr{#1}}
+
+\define at key[UFXS]{res}{refnextmovenr}{%
+ \UFXS at new@refnextmovenr{#1}}
+
+\define at key[UFXS]{res}{refpastplayer}{%
+  \UFXS at new@refpastplayer{#1}}
+
+\define at key[UFXS]{res}{refnextplayer}{%
+  \UFXS at new@refnextplayer{#1}}
+
+\define at key[UFXS]{res}{refpastmoveid}{%
+   \UFXS at new@refpastmoveid{#1}}
+
+\define at key[UFXS]{res}{refnextmoveid}{%
+  \UFXS at new@refnextmoveid{#1}}
+
+\define at key[UFXS]{res}{refpast}{%
+  \UFXS at new@refpast{#1}}
+
+\define at key[UFXS]{res}{refnext}{%
+  \UFXS at new@refnext{#1}}
+
+%% pgn-keys are defined during definition.
+
+%%% xskakexportgames
+\define at key[UFXS]{export}{file}{\edef\xskak at val@exportfile{#1.xsk}}
+\define at key[UFXS]{export}{games}{\edef\xskak at val@exportgames{#1}}
+
+%%% xskakloop
+\define at key[UFXS]{loop}{id}{\UFXS at new@id{#1}}
+
+\define at key[UFXS]{loop}{reftag}{%
+ \UFXS at new@reftag{#1}}
+
+\define at key[UFXS]{loop}{refid}{%
+ \UFXS at new@refid{#1}}
+
+\define at key[UFXS]{loop}{initmoveid}{%
+ \xskak at split@moveid{#1}%
+ \global\let\xskak at val@movenr\xskak at temp@movenr
+ \global\let\xskak at val@player\xskak at temp@player
+ }
+\define at key[UFXS]{loop}{initmovenr}{%
+ \xdef\xskak at val@movenr{#1}}
+
+\define at key[UFXS]{loop}{initplayer}{%
+ \xdef\xskak at val@player{#1}}
+
+\define at key[UFXS]{loop}{stopmoveid}{%
+ \xskak at split@moveid{#1}%
+ \global\let\xskak at val@stopmovenr\xskak at temp@movenr
+ \global\let\xskak at val@stopplayer\xskak at temp@player
+ }
+\define at key[UFXS]{loop}{stopmovenr}{%
+ \xdef\xskak at val@stopmovenr{#1}}
+
+\define at key[UFXS]{loop}{stopplayer}{%
+ \xdef\xskak at val@stopplayer{#1}}
+
+\define at key[UFXS]{loop}{step}{\xdef\xskak at val@loopstep{#1}}
+
+\define at boolkey[UFXS]{loop}{showlast}[true]{}
+
+%%
+%% style items.
+
+%% keys
+\define at key[UFXS]{styleitem}{whiteopen}{%
+ \expandafter\gdef\csname\xskak at temp@name whiteopen\endcsname{#1}}
+\define at key[UFXS]{styleitem}{blackopen}{%
+ \expandafter\gdef\csname\xskak at temp@name blackopen\endcsname{#1}}
+\define at key[UFXS]{styleitem}{opencommands}{%
+ \expandafter\gdef\csname\xskak at temp@name opencommands\endcsname{#1}}
+\define at key[UFXS]{styleitem}{closecommands}{%
+ \expandafter\gdef\csname\xskak at temp@name closecommands\endcsname{#1}}
+\define at key[UFXS]{styleitem}{beforenumber}{%
+ \expandafter\gdef\csname\xskak at temp@name beforenumber\endcsname{#1}}
+\define at key[UFXS]{styleitem}{beforewhite}{%
+ \expandafter\gdef\csname\xskak at temp@name beforewhite\endcsname{#1}}
+\define at key[UFXS]{styleitem}{afterwhite}{%
+ \expandafter\gdef\csname\xskak at temp@name afterwhite\endcsname{#1}}
+\define at key[UFXS]{styleitem}{beforeblack}{%
+ \expandafter\gdef\csname\xskak at temp@name beforeblack\endcsname{#1}}
+\define at key[UFXS]{styleitem}{afterblack}{%
+ \expandafter\gdef\csname\xskak at temp@name afterblack\endcsname{#1}}
+\define at key[UFXS]{styleitem}{beforecomment}{%
+ \expandafter\gdef\csname\xskak at temp@name xskak at beforecomment\endcsname{#1}}
+\define at key[UFXS]{styleitem}{beforeNAG}{%
+ \expandafter\gdef\csname\xskak at temp@name xskak at beforeNAG\endcsname{#1}}
+
+\define at key[UFXS]{styleiteminit}{template}{% from #1 to current style. Make sure to have set temp at name correctly!
+ \xskak at do@copystyleitem{xskak at styleitem@#1@}{\xskak at temp@name}}
+
+%% style
+
+\define at key[UFXS]{style}{level}[1]{%
+  \def\xskak at val@curlevel{#1}}
+
+\define at key[UFXS]{style}{font}{%
+ \expandafter\gdef\csname\xskak at temp@name\xskak at val@curlevel @font\endcsname{#1}}
+
+\define at key[UFXS]{style}{styleitem}{%
+ \ifcsname xskak at styleitem@#1 at whiteopen\endcsname
+  \expandafter\xdef
+   \csname\xskak at temp@name\xskak at val@curlevel @item\endcsname{#1}%
+ \else
+  \PackageError{xskak}{style item #1 doesn't exist!}{}%
+ \fi}
+
+\define at key[UFXS]{style}{xfont}{%
+ \xskak at do@splitlevel{\xskak at val@curlevel}%
+ \ifnum\xskak at temp@levelnumber=0\relax
+  \PackageWarning{xskak}{key xfont ignored (no number found)}{}%
+ \else
+  \expandafter\gdef\csname\xskak at temp@name\xskak at temp@levelnumber @xfont\endcsname{#1}%
+ \fi}
+
+%% printing
+%% style and level for all printing commands
+
+\define at key[UFXS]{print}{style}{%
+ \UFXS at set@style{#1}}
+
+\define at key[UFXS]{print}{gstyle}{%
+ \UFXS at set@gstyle{#1}}
+
+\define at key[UFXS]{print}{level}{%
+ \edef\xskak at val@curlevel{#1}}%
+
+\define at key[UFXS]{print}{glevel}{%
+ \xdef\xskak at val@curlevel{#1}}%
+
+\define at key[UFXS]{print}{invar}[]{%
+  \UFXS at set@invar{#1}}
+
+\define at key[UFXS]{print}{outvar}[]{%
+ \UFXS at set@outvar{#1}}
+
+%% keys only for \printchessgame
+\define at key[UFXS]{xprint}{id}{\def\xskak at val@gameid{#1}}
+\define at key[UFXS]{xprint}{initmoveid}{%
+ \xskak at split@moveid{#1}%
+ \let\xskak at val@movenr\xskak at temp@movenr
+ \let\xskak at val@player\xskak at temp@player
+ }
+\define at key[UFXS]{xprint}{initmovenr}{%
+ \def\xskak at val@movenr{#1}}
+
+\define at key[UFXS]{xprint}{initplayer}{%
+ \def\xskak at val@player{#1}}
+
+\define at key[UFXS]{xprint}{stopmoveid}{%
+ \xskak at split@moveid{#1}%
+ \let\xskak at val@stopmovenr\xskak at temp@movenr
+ \let\xskak at val@stopplayer\xskak at temp@player
+ }
+\define at key[UFXS]{xprint}{stopmovenr}{%
+ \def\xskak at val@stopmovenr{#1}}
+
+\define at key[UFXS]{xprint}{stopplayer}{%
+ \def\xskak at val@stopplayer{#1}}
+
+\define at key[UFXS]{xprint}{reftag}{%
+ \UFXS at new@reftag{#1}}
+
+\define at key[UFXS]{xprint}{refid}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFXS at print@id{\csname xskak at tag@#1 at refid\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+%% new keys for chessboard. Move to chessboard.sty??
+%% empty keys to avoid errors:
+
+\define at key[UFCB]{locfill}{tag}{}%
+\define at key[UFCB]{locfill}{ref}{}%
+\define at key[UFCB]{locfill}{defaultid}{}%
+\define at key[UFCB]{locfill}{defaultmoveid}{}%
+\define at key[UFCB]{locfill}{defaultfen}{}%
+
+%% real keys (should also be defined in fam glofill):
+\define at key[UFCB]{locfill}{id}[\xskak at val@defaultid]{%
+ \ifcsname Xskak#1initfen\endcsname
+   \edef\xskak at val@gameid{#1}%
+ \else
+  \PackageError{xskak}{Game with the id #1 doesn't exist.}{}%
+ \fi}%
+
+\define at key[UFCB]{glofill}{id}[\xskak at val@defaultid]{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,id=#1}}%
+
+\define at key[UFCB]{locfill}{moveid}{%
+ \edef\@tempa{#1}\xskak at split@moveid{\@tempa}%
+ \let\xskak at val@movenr\xskak at temp@movenr
+ \let\xskak at val@player\xskak at temp@player}%
+
+\define at key[UFCB]{glofill}{moveid}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,moveid=#1}}%
+
+\define at key[UFCB]{locfill}{stepmoveid}[1]{%
+  \count@=#1\relax
+   \ifthenelse{\the\count@>0}
+     {\whiledo{\the\count@>0}%
+       {\xskak at do@getnextmoveid{\xskak at val@movenr}{\xskak at val@player}%
+        \advance\count@ by -1%
+        \let\xskak at val@movenr\xskak at temp@movenr
+        \let\xskak at val@player\xskak at temp@player}%
+     }%
+     {\ifthenelse{\the\count@=0}%
+       {}%
+       {\whiledo{\the\count@<0}%
+        {\xskak at do@getpreviousmoveid{\xskak at val@movenr}{\xskak at val@player}%
+         \advance\count@ by 1%
+         \let\xskak at val@movenr\xskak at temp@movenr
+         \let\xskak at val@player\xskak at temp@player}%
+         \ifthenelse{\the\count@<1}%
+          {\PackageWarning{xskak}{Move number below 1!}{}}%
+          {}}}}
+
+\define at key[UFCB]{glofill}{stepmoveid}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,stepmoveid=#1}}%
+
+\define at key[UFCB]{locfill}{player}{\def\xskak at val@player{#1}}%
+
+\define at key[UFCB]{glofill}{player}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,player=#1}}%
+
+\define at key[UFCB]{locfill}{movenr}{\def\xskak at val@movenr{#1}}%
+
+\define at key[UFCB]{glofill}{movenr}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,movenr=#1}}%
+
+\define at key[UFCB]{locfill}{newvar}[\xskak at val@refgameid]{%
+ \UFCB at locfill@setfen{%
+  \csname Xskak.#1.%
+    \csname Xskak#1lastmovenr\endcsname.%
+    \csname Xskak#1lastplayer\endcsname.%
+    pastfen\endcsname}%
+ }%
+
+\define at key[UFCB]{glofill}{newvar}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,newvar=#1}}%
+
+\define at key[UFCB]{locfill}{reftag}{%
+ \edef\xskak at val@currenttag{#1}}
+
+\define at key[UFCB]{glofill}{reftag}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,reftag=#1}}%
+
+\define at key[UFCB]{locfill}{lastmoveid}[\xskak at val@gameid]{%
+ \ifcsname Xskak#1initfen\endcsname
+  \edef\xskak at val@gameid{#1}%
+ \else
+  \PackageError{xskak}{Game with the id #1 doesn't exist.}{}%
+ \fi
+ \edef\xskak at val@movenr{\csname Xskak#1lastmovenr\endcsname}%
+ \edef\xskak at val@player{\csname Xskak#1lastplayer\endcsname}%
+ }%
+
+\define at key[UFCB]{glofill}{lastmoveid}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,lastmoveid=#1}}%
+
+\define at key[UFCB]{locfill}{refid}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFCB at locfill@id{\csname xskak at tag@#1 at refid\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFCB]{glofill}{refid}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,refid=#1}}%
+
+\define at key[UFCB]{locfill}{refpastmovenr}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFCB at locfill@movenr{\csname xskak at tag@#1 at refpastmovenr\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFCB]{glofill}{refpastmovenr}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,refpastmovenr=#1}}%
+
+\define at key[UFCB]{locfill}{refnextmovenr}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi
+ \UFCB at locfill@movenr{\csname xskak at tag@#1 at refnextmovenr\endcsname}}
+
+\define at key[UFCB]{glofill}{refnextmovenr}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,refnextmovenr=#1}}%
+
+\define at key[UFCB]{locfill}{refpastplayer}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFCB at locfill@player{\csname xskak at tag@#1 at refpastplayer\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFCB]{glofill}{refpastplayer}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,refpastplayer=#1}}%
+
+\define at key[UFCB]{locfill}{refnextplayer}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFCB at locfill@player{\csname xskak at tag@#1 at refnextplayer\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFCB]{glofill}{refnextplayer}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,refnextplayer=#1}}%
+
+\define at key[UFCB]{locfill}{refpastmoveid}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFCB at locfill@moveid{\csname xskak at tag@#1 at refpastmoveid\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFCB]{glofill}{refpastmoveid}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,refpastmoveid=#1}}%
+
+\define at key[UFCB]{locfill}{refnextmoveid}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFCB at locfill@moveid{\csname xskak at tag@#1 at refnextmoveid\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFCB]{glofill}{refnextmoveid}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,refnextmoveid=#1}}%
+
+\define at key[UFCB]{locfill}{refpast}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFCB at locfill@movenr{\csname xskak at tag@#1 at refpastmovenr\endcsname}%
+  \UFCB at locfill@id{\csname xskak at tag@#1 at refid\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFCB]{glofill}{refpast}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,refpast=#1}}%
+
+\define at key[UFCB]{locfill}{refnext}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFCB at locfill@movenr{\csname xskak at tag@#1 at refnextmovenr\endcsname}%
+  \UFCB at locfill@id{\csname xskak at tag@#1 at refid\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFCB]{glofill}{refnext}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,refnext=#1}}%
+
+\define at key[UFCB]{locfill}{refpast}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFCB at locfill@movenr{\csname xskak at tag@#1 at refpastmovenr\endcsname}%
+  \UFCB at locfill@id{\csname xskak at tag@#1 at refid\endcsname}%
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFCB]{glofill}{refpast}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,refpast=#1}}%
+
+\define at key[UFCB]{locfill}{reffen}{%
+ \ifcsname xskak at tag@#1 at refid\endcsname
+  \UFCB at locfill@addfen{%
+  \csname
+   Xskak.%
+   \csname xskak at tag@#1 at refid\endcsname.%
+   \csname xskak at tag@#1 at refnextmovenr\endcsname.%
+   \csname xskak at tag@#1 at refnextplayer\endcsname.%
+   pastfen%
+  \endcsname}
+ \else
+   \PackageError{xskak}{Unknown tag #1}{}%
+ \fi}
+
+\define at key[UFCB]{glofill}{reffen}{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,reffen=#1}}%
+
+%% currently not described. Perhaps delete. Perhaps change name to adapt to ref-keys?
+\define at key[UFCB]{locfill}{setgame}[\xskak at val@gameid]{%
+ \ifcsname Xskak#1initfen\endcsname
+  \edef\xskak at val@gameid{#1}%
+ \else
+  \PackageError{xskak}{Game with the id #1 doesn't exist.}{}%
+ \fi
+ \edef\board at temp@curfen{\csname Xskak#1lastfen\endcsname}%
+ \board at do@setsinglekeys*[UFCB]{locfill}{language=english, setfen=\board at temp@curfen, language=\board at val@savelang}}%
+
+\define at key[UFCB]{glofill}{setgame}[\xskak at val@gameid]{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,showgame=#1}}%
+
+%% currently not described. Perhaps delete. Perhaps change name to adapt to ref-keys?
+\define at key[UFCB]{locfill}{addgame}[\xskak at val@gameid]{%
+ \ifcsname Xskak#1initfen\endcsname
+   \edef\xskak at val@gameid{#1}%
+ \else\PackageError{xskak}{Game with the id #1 doesn't exist.}{}%
+ \fi
+ \edef\board at temp@curfen{\csname Xskak#1lastfen\endcsname}%
+ \board at do@setsinglekeys*[UFCB]{locfill}{language=english, addfen=\board at temp@curfen, language=\board at val@savelang}}%
+
+\define at key[UFCB]{glofill}{addgame}[\xskak at val@gameid]{%
+    \board at do@l at addto@macro\board at val@savedkeylist{,showgame=#1}}%
+
+%</xskak-keys>
+%<*xskak-nagdef>
+\ProvidesFile{xskak-nagdef.sty}[2019/06/23 version v1.5 nag definitions for xskak.sty]
+
+\expandafter\def\csname $1\endcsname{!}
+\expandafter\def\csname $2\endcsname{?}
+\expandafter\def\csname $3\endcsname{!!}
+\expandafter\def\csname $4\endcsname{??}
+\expandafter\def\csname $5\endcsname{!?}
+\expandafter\def\csname $6\endcsname{?!}
+\expandafter\def\csname $7\endcsname{\onlymove}
+\expandafter\def\csname $8\endcsname{\onlymove}
+\expandafter\def\csname $9\endcsname{}
+\expandafter\def\csname $10\endcsname{\equal}
+\expandafter\def\csname $11\endcsname{\equal}
+\expandafter\def\csname $12\endcsname{\equal}
+\expandafter\def\csname $13\endcsname{\unclear}
+\expandafter\def\csname $14\endcsname{\wbetter}
+\expandafter\def\csname $15\endcsname{\bbetter}
+\expandafter\def\csname $16\endcsname{\wupperhand}
+\expandafter\def\csname $17\endcsname{\bupperhand}
+\expandafter\def\csname $18\endcsname{\wdecisive}
+\expandafter\def\csname $19\endcsname{\bdecisive}
+\expandafter\def\csname $20\endcsname{\wdecisive}
+\expandafter\def\csname $21\endcsname{\bdecisive}
+\expandafter\def\csname $22\endcsname{\zugzwang}
+\expandafter\def\csname $23\endcsname{\zugzwang}
+\expandafter\def\csname $24\endcsname{\moreroom}
+\expandafter\def\csname $25\endcsname{\moreroom}
+\expandafter\def\csname $26\endcsname{\moreroom}
+\expandafter\def\csname $27\endcsname{\moreroom}
+\expandafter\def\csname $28\endcsname{\moreroom}
+\expandafter\def\csname $29\endcsname{\moreroom}
+\expandafter\def\csname $30\endcsname{\devadvantage}
+\expandafter\def\csname $31\endcsname{\devadvantage}
+\expandafter\def\csname $32\endcsname{\devadvantage}
+\expandafter\def\csname $33\endcsname{\devadvantage}
+\expandafter\def\csname $34\endcsname{\devadvantage}
+\expandafter\def\csname $35\endcsname{\devadvantage}
+\expandafter\def\csname $36\endcsname{\withinit}
+\expandafter\def\csname $37\endcsname{\withinit}
+\expandafter\def\csname $38\endcsname{\withinit}
+\expandafter\def\csname $39\endcsname{\withinit}
+\expandafter\def\csname $40\endcsname{\withattack}
+\expandafter\def\csname $41\endcsname{\withattack}
+\expandafter\def\csname $42\endcsname{\without\compensation}
+\expandafter\def\csname $43\endcsname{\without\compensation}
+\expandafter\def\csname $44\endcsname{\compensation}
+\expandafter\def\csname $45\endcsname{\compensation}
+\expandafter\def\csname $46\endcsname{\compensation}
+\expandafter\def\csname $47\endcsname{\compensation}
+\expandafter\def\csname $70\endcsname{\weakpt\cfss at symking}
+\expandafter\def\csname $71\endcsname{\weakpt\cfss at symking}
+\expandafter\def\csname $74\endcsname{\weakpt\cfss at symking}
+\expandafter\def\csname $75\endcsname{\weakpt\cfss at symking}
+\expandafter\def\csname $86\endcsname{\weakpt\cfss at symknight}
+\expandafter\def\csname $87\endcsname{\weakpt\cfss at symknight}
+\expandafter\def\csname $90\endcsname{\weakpt\cfss at symbishop}
+\expandafter\def\csname $91\endcsname{\weakpt\cfss at symbishop}
+\expandafter\def\csname $94\endcsname{\weakpt\cfss at symbishop}
+\expandafter\def\csname $95\endcsname{\weakpt\cfss at symbishop}
+\expandafter\def\csname $98\endcsname{\weakpt\cfss at symqueen}
+\expandafter\def\csname $99\endcsname{\weakpt\cfss at symqueen}
+\expandafter\def\csname $130\endcsname{\counterplay}
+\expandafter\def\csname $130\endcsname{\counterplay}
+\expandafter\def\csname $131\endcsname{\counterplay}
+\expandafter\def\csname $132\endcsname{\counterplay}
+\expandafter\def\csname $133\endcsname{\counterplay}
+\expandafter\def\csname $134\endcsname{\counterplay}
+\expandafter\def\csname $135\endcsname{\counterplay}
+\expandafter\def\csname $136\endcsname{\timelimit}
+\expandafter\def\csname $137\endcsname{\timelimit}
+\expandafter\def\csname $138\endcsname{\timelimit}
+\expandafter\def\csname $139\endcsname{\timelimit}
+\expandafter\def\csname $140\endcsname{\space\withidea}
+\expandafter\def\csname $142\endcsname{\space\betteris}
+\expandafter\def\csname $145\endcsname{\chesscomment}
+\expandafter\def\csname $146\endcsname{\novelty}
+\expandafter\def\csname $D\endcsname{\chessdiagramname}
+\expandafter\def\csname $d\endcsname{}
+
+%</xskak-nagdef>


Property changes on: trunk/Master/texmf-dist/source/latex/xskak/xskak.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex/xskak/xskak.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/xskak/xskak.ins	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/source/latex/xskak/xskak.ins	2019-06-23 20:59:18 UTC (rev 51432)
@@ -63,10 +63,10 @@
 %% File generation:
 \generate{%
  \usepreamble\UFpreamble
- \file{xskak.sty}{\from{xskak-src.dtx}{xskak}}
- \file{xskak-keys.sty}{\from{xskak-src.dtx}{xskak-keys}}
- \file{xskak-nagdef.sty}{\from{xskak-src.dtx}{xskak-nagdef}}
+ \file{xskak.sty}{\from{xskak.dtx}{xskak}}
+ \file{xskak-keys.sty}{\from{xskak.dtx}{xskak-keys}}
+ \file{xskak-nagdef.sty}{\from{xskak.dtx}{xskak-nagdef}}
 }
 \endbatchfile
 %%
-%%end of file xskak.ins
\ No newline at end of file
+%%end of file xskak.ins

Modified: trunk/Master/texmf-dist/tex/latex/xskak/xskak-keys.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xskak/xskak-keys.sty	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/tex/latex/xskak/xskak-keys.sty	2019-06-23 20:59:18 UTC (rev 51432)
@@ -4,7 +4,7 @@
 %%
 %% The original source files were:
 %%
-%% xskak-src.dtx  (with options: `xskak-keys')
+%% xskak.dtx  (with options: `xskak-keys')
 %% 
 %% xskak: a package to parse and print chess games
 %% Copyright 2006-2015 Ulrike Fischer (chess at nililand.de)
@@ -16,8 +16,7 @@
 %% License, or (at your option) any later version.
 %% 
 %% For error reports see documentation.
-\ProvidesFile{xskak-keys.sty}[2015/01/02 version v1.4 key definitions for xskak.sty]
-%%$Date: 2011/03/17 16:54:07 $$Version: 041ab49ae0e2 $
+\ProvidesFile{xskak-keys.sty}[2019/06/23 version v1.5 key definitions for xskak.sty]
 
 %%%%%%%%%%%%%%%%%%%%%
 %%%% Keys

Modified: trunk/Master/texmf-dist/tex/latex/xskak/xskak-nagdef.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xskak/xskak-nagdef.sty	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/tex/latex/xskak/xskak-nagdef.sty	2019-06-23 20:59:18 UTC (rev 51432)
@@ -4,7 +4,7 @@
 %%
 %% The original source files were:
 %%
-%% xskak-src.dtx  (with options: `xskak-nagdef')
+%% xskak.dtx  (with options: `xskak-nagdef')
 %% 
 %% xskak: a package to parse and print chess games
 %% Copyright 2006-2015 Ulrike Fischer (chess at nililand.de)
@@ -16,8 +16,7 @@
 %% License, or (at your option) any later version.
 %% 
 %% For error reports see documentation.
-\ProvidesFile{xskak-nagdef.sty}[2015/01/02 version v1.4 nag definitions for xskak.sty]
-%%$Date: 2011/03/17 16:54:07 $$Version: 041ab49ae0e2 $
+\ProvidesFile{xskak-nagdef.sty}[2019/06/23 version v1.5 nag definitions for xskak.sty]
 
 \expandafter\def\csname $1\endcsname{!}
 \expandafter\def\csname $2\endcsname{?}

Modified: trunk/Master/texmf-dist/tex/latex/xskak/xskak.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/xskak/xskak.sty	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/texmf-dist/tex/latex/xskak/xskak.sty	2019-06-23 20:59:18 UTC (rev 51432)
@@ -4,7 +4,7 @@
 %%
 %% The original source files were:
 %%
-%% xskak-src.dtx  (with options: `xskak')
+%% xskak.dtx  (with options: `xskak')
 %% 
 %% xskak: a package to parse and print chess games
 %% Copyright 2006-2015 Ulrike Fischer (chess at nililand.de)
@@ -17,8 +17,7 @@
 %% 
 %% For error reports see documentation.
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{xskak}[2015/01/02 version v1.4 extended chess typesetting and parsing]
-%%$Date: 2015/01/02 13:51:58 $$Version: c80394b06dd1 $
+\ProvidesPackage{xskak}[2019/06/23 version v1.5 extended chess typesetting and parsing]
 
 \newif\ifxskakpdfmatch
 
@@ -1211,6 +1210,7 @@
    beforeNAG={}}
 
 \newcommand\xskak at beforeNAG{}
+\newcommand\xskak at beforecomment{}
 
 \newcommand\xskaknewstyleitem[2][]{%
  \ifcsname xskak at styleitem@#2 at beforeblack\endcsname
@@ -1311,6 +1311,7 @@
  whiteopen=.,
  blackopen=. -,
  beforewhite=\space,
+ afterblack=\space,
  beforeblack={,\space}]{styleA}
 
 \xskaknewstyleitem[%

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2019-06-23 20:57:37 UTC (rev 51431)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2019-06-23 20:59:18 UTC (rev 51432)
@@ -2056,6 +2056,7 @@
  'xesearch',    't-.*|' . $standardtex,
  'xetexfontinfo','\.tex',
  'xetexko',     '\.tab$|' . $standardtex,
+ 'xskak',	'^xskak.*sty',		# not UF-.*.sty
  'xwatermark',  '\.sty',                # no .cfg
  'xindex',      '(unicode|xindex)-.*\.lua$',
  'xlop',        'xlop\.(tex|sty)',      # no manual.sty
@@ -3278,7 +3279,6 @@
  'toptesi'       => 'logo.*',                           # legalities unknown
  'tree-dvips'    => 'avm.*',                            # author no response
  'ucs'		 => 'languages.ps.gz',			# no source
- 'xskak'         => 'xskak.pdf',                        # no source
  'xymtex'        => 'doc/.*\.pdf$',                     # no source
  'yannisgr'      => '^(digits|gen_acc)\.mf'             # levy dup
 );



More information about the tex-live-commits mailing list