我正在尝试使用xskak
和chessboard
显示国际象棋以外的其他游戏,但是我无法xskak
移动棋子。
问题可能是我的主板5x5
不是8x8
。
下面是我的非工作源代码,它尝试将 c1 处的白色棋子移动到 c2 处:
\documentclass{article}
\usepackage{chessboard}
\usepackage{xskak}
\begin{document}
\def\neutrinoChar{\bullet}
\makeatletter
\cbDefineNewPiece{white}{X}{
\raisebox{\depth}{\cfss@whitepiececolor$\neutrinoChar$}
}{
\BlackEmptySquare\makebox[0pt][r]{\cfss@whitepiececolor\raisebox{\depth}{\makebox[1em]{$\neutrinoChar$}}}
}
\makeatother
\styleB
\setchessboard{
maxfield=e5
}
\xskakset{defaultfen=ppppp/5/2X2/5/PPPPP}
\newchessgame
\chessboard
\mainline{1. Pc2}
\chessboard[setfen=\xskakget{nextfen}]
\end{document}
我实际上并不关心国际象棋移动符号,所以类似的一些语法c1-c2
对我来说就足够了。
答案1
正如文档中某处提到的,skak(用于执行移动的内部引擎)不喜欢不寻常的棋盘。因此,maxfield
您最好使用正常尺寸的棋盘,然后限制打印区域:
\documentclass{article}
\usepackage{chessboard}
\usepackage{xskak}
\begin{document}
\def\neutrinoChar{\bullet}
\makeatletter
\cbDefineNewPiece{white}{X}{
\raisebox{\depth}{\cfss@whitepiececolor$\neutrinoChar$}
}{
\BlackEmptySquare\makebox[0pt][r]{\cfss@whitepiececolor\raisebox{\depth}{\makebox[1em]{$\neutrinoChar$}}}
}
\makeatother
\styleB
\setchessboard{
printarea=a1-e5
%maxfield=e5
}
\xskakset{defaultfen=5/5/5/ppppp/5/2X2/5/PPPPP/5}
\newchessgame
\chessboard
\mainline{1. c2}
\chessboard
\end{document}
我不知道你的 neutrinoChar 是否以及如何移动,但你应该知道 skak 可能无法做到这一点。此外,skak 会检查移动是否“合法”,因此并非你尝试的每一个移动都会被执行。(也许将来的某一天我会找到时间来完成xchess
……)。但你自然总是可以通过用棋盘键改变棋盘上的位置来假装移动。