我有以下用以下方式创建的单人国际象棋示例\setfen[]
:
\documentclass[runningheads]{llncs}
\usepackage{xskak, longtable} % Schach
\usepackage{chessboard}
\begin{document}
\setchessboard{smallboard,showmover=false,}
\begin{longtable}{p{0.45\textwidth}p{0.45\textwidth}}
\newgame
\mainline{1.Nd5 Bd5} \chessboard[setfen=8/8/8/3p4/1N2r3/8/b5N1/8/]
&
\mainline{2.Ne4 Be4}
\chessboard
\end{longtable}
\end{document}
第二盘棋的输出只是一个新游戏的普通棋盘,因此它不会更新动作。
我做错什么了吗?
我还有一个问题,我可以在每次移动颜色后显示棋盘吗?所以白棋移动,显示棋盘,黑棋移动,显示棋盘.... 当\mainline{}
只移动一步时,我会收到错误。
答案1
嗯,一开始你没有用 设置位置\chessboard
,那只是打印它。你应该使用\newchessgame
。
其次,你必须意识到skak
执行这些动作的底层程序包对国际象棋规则有一些概念。如果你做出违反规则的动作(例如,一个黑棋子可以吃掉另一个黑棋子),它不一定会抱怨,但如果你违背它的假设,结果位置有时会有点令人惊讶。
例如,在下面的第一局游戏中,Nd5 的移动可以正确执行,但在第二局游戏中却不行。这看起来很奇怪,但原因是棋盘上没有王(这违反了国际象棋的移动规则),因此代码假设白王位于起始位置 (e1)。这意味着黑车将军,骑士不允许移动。
\documentclass{article}
\usepackage{xskak}
\begin{document}
\setchessboard{smallboard,showmover=false,}
\newchessgame[setfen=8/8/8/3p4/1N3r2/8/b5N1/8]
\chessboard
\mainline{1. Nd5}
\chessboard
\newchessgame[setfen=8/8/8/3p4/1N2r3/8/b5N1/8]
\chessboard
\mainline{1. Nd5}
\chessboard
\end{document}