在 xskak 中,王车易位是“固定的”:王应位于 e1/e8,车应位于 a1h1/a8h8。在 Chess960(以某种方式在 1./8. 等级上洗牌)中,王车易位的目的方格与“普通国际象棋”中的完全相同(“普通国际象棋”是特定的 Chess960 位置...),但起始方格不同:王的方格位于 b1 和 g1 之间的任意位置,而车位于王的左侧(对于 0-0-0)和王的右侧(对于 0-0)。如何在 xskak 中将“从移动”和“移动”概括为 Chess960?移动可以保持不变,这种通用方法在“普通国际象棋”中可以很好地工作。
答案1
我上传了一个测试版本到https://github.com/u-fischer/xskak/tree/chess960。要使用它,请获取xskak.dtx
和xskak.ins
,将它们放在某个文件夹中,然后运行pdflatex xskak.ins
以解压xskak.sty
。^
使用此版本,您可以为 chess960 和城堡设置王/车的位置。它没有经过太多测试。如果您发现问题,请在 github 站点添加问题。
\documentclass{book}
\usepackage{xskak} %development version 1.6!!
\setchessboard{smallboard,showmover=false}
\begin{document}
\makeatletter
% set start position of rook for xskak:
\renewcommand\xskak@king@pos{c}
\renewcommand\xskak@rookshort@pos{d}
\renewcommand\xskak@rooklong@pos{b}
% set start position of rook for skak:
\def\CastleRookFromFile#1{#1{b}{d}}
\newchessgame[setpieces={Kc1,Rd1,kc8,rd8}]
\chessboard
\mainline{1. O-O O-O}
\chessboard
\xskakset{moveid=1w}\xskakget{movefrom}--\xskakget{moveto}, \xskakset{moveid=1b}\xskakget{movefrom}--\xskakget{moveto}
\newchessgame[setpieces={Kc1,Rb1,kc8,rb8}]
\chessboard
\mainline{1. O-O-O O-O-O}
\chessboard
\xskakset{moveid=1w}\xskakget{movefrom}--\xskakget{moveto}, \xskakset{moveid=1b}\xskakget{movefrom}--\xskakget{moveto}
% set start position of rook:
\renewcommand\xskak@rookshort@pos{h}
\def\CastleRookFromFile#1{#1{b}{h}}
\newchessgame[setpieces={Kc1,Rh1,kc8,rh8}]
\chessboard
\mainline{1. O-O O-O}
\chessboard
\xskakset{moveid=1w}\xskakget{movefrom}--\xskakget{moveto}, \xskakset{moveid=1b}\xskakget{movefrom}--\xskakget{moveto}
\end{document}