如何在棋盘输出和国际象棋注释中仅使用白棋的走法

如何在棋盘输出和国际象棋注释中仅使用白棋的走法

在此处输入图片描述

有没有办法在棋盘输出和棋局注释中捕捉并显示白棋的移动?
如果可能的话,可以不用三个占位符点。

\documentclass[a4paper]{article}
\usepackage{chessboard, xskak}
%\setchessboard{showmover=false, }

\begin{document}
\newchessgame[id=MyGame, 
setwhite={Ke4},
%hideblack,
]
\mainline{1. Ke3 ... 2. Kd3 ... 3. Ke4 ... 4. Ke5}

\chessboard[id=MyGame,]
\end{document}

答案1

[请注意以下说法,因为我绝对不是这些软件包方面的专家。]

包裹的方式斯卡克肖斯卡克操作要求从某个起始位置开始有一条“主线”的移动,形成游戏的进程。这很重要,因为在任何时间点,棋盘的状态都可以从起始位置开始构建,执行“主线”的移动。

不幸的是,在“主线”中你不能省略黑棋的走法,否则就无法构建棋盘的状态。

但是,您可以做的是为黑棋添加虚拟移动(如您已经做的一样,将它们保留为未指定...),并确保不打印它们。命令\whitemainline我下面定义的命令正是这样做的。它受到以下启发文档xskak,v.1.5,第 35 页。

\documentclass[a4paper]{article}
\usepackage{chessboard,xskak}
\newcommand\whitemainline[1]{%
  \edef\thegameid{\xskakgetgame{gameid}}%
  \edef\themoveid{\xskakget{moveid}}%
  \hidemoves{#1}%
  \mainlinestyle%
  \xskakset{id=\thegameid,moveid=\themoveid}%
  \whiledo{\xskaktestmoveid{\xskakget{movenr}}{\xskakget{player}}}%
          {\xskakget{movenr}\,\xskakget{san}%
           \hspace{.5em}\xskakset{stepmoveid=2}}}
\begin{document}
\newchessgame[id=MyGame,setwhite={Ke4}]
\whitemainline{1. Ke3 ... 2. Kd3 ... 3. Ke4 ... 4. Ke5 ...}
\par
\chessboard[id=MyGame,showmover=false]

\bigskip

\whitemainline{5. Kf5 ... 6. Kg6}
\par
\chessboard[id=MyGame,showmover=false]
\end{document}

这将产生以下内容:

在此处输入图片描述

两点说明:

  1. 我删除了表示轮到黑棋的黑色方框 ( showmover=false),因为我认为它在你的设置中没有多大意义。如果你想要它,你必须确保你的走法在白棋走法时停止,然后继续黑棋走法:

    \whitemainline{1. Ke3 ... 2. Kd3 ... 3. Ke4 ... 4. Ke5}
    ...
    \whitemainline{4... ... 5. Kf5 ... 6. Kg6}
    
  2. 如果你想完全省略虚拟黑棋移动,并且有类似的东西:

    \whitemainline{1. Ke3 2. Kd3 3. Ke4 4. Ke5}
    

    然后,您将必须对着法进行一些解析,并在里面引入虚拟黑棋着法\whitemainline。这可能要复杂得多,具体取决于您要支持的 PGN 符号子集。

答案2

我用了

\makeatletter
\def\xskak@do@printmove{%
\ifthenelse{\equal{\xskak@val@player}{b}}{}{\xskakget{san}\xskakget{nag}}}

所以:

在此处输入图片描述

\documentclass[margin=5mm, varwidth]{standalone}
\usepackage{chessboard, xskak}
\setchessboard{showmover=false}

\begin{document}
\newchessgame[id=MyGame, setwhite={Ke4}]
\hidemoves{1. Ke3 ... 2. Kd3 ... 3. Ke4 ... 4. Ke5}
\chessboard

\makeatletter
\def\xskak@do@printmove{%
\ifthenelse{\equal{\xskak@val@player}{b}}{}{\xskakget{san}\xskakget{nag}}}

\section*{style=UF}
\printchessgame[style=UF]
\section*{style=styleC}
\printchessgame[id=MyGame, style=styleC]
\end{document}

相关内容