![xskak 手册第 36 页 - 打印动作下方的图表](https://linux22.com/image/397529/xskak%20%E6%89%8B%E5%86%8C%E7%AC%AC%2036%20%E9%A1%B5%20-%20%E6%89%93%E5%8D%B0%E5%8A%A8%E4%BD%9C%E4%B8%8B%E6%96%B9%E7%9A%84%E5%9B%BE%E8%A1%A8.png)
昨晚我看到一本德国象棋书,每 5 步后都会出现一张图。先显示前 5 步,然后是一张图。
根据 Ulrike Fischer 的反馈,我添加了她的代码。当我将手册与我的手册进行比较时,结果有所不同。
知道为什么吗?有没有更好的方法?这是重复 3 次的相同过程。我可以循环执行吗?
\documentclass{article}
\usepackage{skak, xskak,chessboard}
\begin{document}
\newchessgame
\hidemoves{
1.e4 e5 2.Nf3 d6 3.d4 Bg4 4.dxe5 Bxf3 5.Qxf3 dxe5 6.Bc4 Nf6 7.Qb3 Qe7 8.Nc3 c6 9.Bg5 b5 10.Nxb5 cxb5 11.Bxb5+ Nbd7 12.O-O-O Rd8 13.Rxd7 Rxd7 14.Rd1 Qe6 15.Bxd7+ Nxd7 16.Qb8+ Nxb8 17.Rd8#}
\\
% *** how to print out diagram at certain number move pg 36?
\noindent
\xskakloop[step=10,showlast]{%
\begin{tabular}{c}
\chessboard[tinyboard,
setfen=\xskakget{nextfen}]
\\
\xskakget{opennr}\xskakget{lan}%
\end{tabular}\quad}%
\\
% *** how to put diagram under each of these set of moves?
\printchessgame[style=UF,level=1,initmoveid=1w,stopmoveid=5b]
\xskakset{moveid=5b}\chessboard[smallboard,setfen=\xskakget{nextfen}]
\printchessgame[style=UF,level=1,initmoveid=6w,stopmoveid=10b]
\xskakset{moveid=10w}\chessboard[smallboard,setfen=\xskakget{nextfen}]
\printchessgame[style=UF,level=1,initmoveid=11w,stopmoveid=15b]
\xskakset{moveid=15b}\chessboard[smallboard,setfen=\xskakget{nextfen}]
\printchessgame[style=UF,level=1,initmoveid=16w,stopmoveid=17w]
\xskakset{moveid=17w}\chessboard[smallboard,setfen=\xskakget{nextfen}]
\end{document}
答案1
如果有重复,您可以随时构建循环。除了内置的 \xskakloop 命令之外,您还可以使用 tex 包提供的所有其他循环命令。下面是一个带有 \foreach 循环的示例。
\documentclass{article}
\usepackage{xskak}
\begin{document}
\newchessgame
\hidemoves{
1.e4 e5 2.Nf3 d6 3.d4 Bg4 4.dxe5 Bxf3 5.Qxf3 dxe5 6.Bc4 Nf6 7.Qb3 Qe7 8.Nc3 c6 9.Bg5 b5 10.Nxb5 cxb5 11.Bxb5+ Nbd7 12.O-O-O Rd8 13.Rxd7 Rxd7 14.Rd1 Qe6 15.Bxd7+ Nxd7 16.Qb8+ Nxb8 17.Rd8#}
% *** how to put diagram under each of these set of moves?
\foreach \x/\y in {1w/5b,6w/10b,11w/15b,16w/17w}
{
\par
\printchessgame[style=UF,level=1,initmoveid=\x,stopmoveid=\y]
\par
\xskakset{moveid=\y}\chessboard[smallboard,setfen=\xskakget{nextfen}]
}
\end{document}