我是 LaTeX 新手,一直在尝试用它编写国际象棋走法。一切都很顺利,直到我编写了从鲍特维尼克的一场国际象棋比赛中摘录的国际象棋走法后,出现了一个大问题,我看不懂,也无法解决。还有一个细节:它不是从比赛开始,而是接近第二十步。
\documentclass[a4paper, 11pt]{report}
\usepackage[left=3cm, right=3cm, top=3cm, bottom=3cm]{geometry}
\usepackage{skak}
\begin{document}
\mainline{1. Nb2 Rc3 \, 2. Bd2 Rb3 \, 3. Qc2 Qb5 \, 4. Rc1 Bf8 \, 5. Rd1 Re2 \, 6. Qc1
Rxh3+ ! \, 7. gxh3 d4 0--1}
\showboard
\end{document}
错误信息如下:
! Undefined control sequence.
<argument> \MoveFrom
l.132 ...e2 \, 6. Qc1 Rxh3+ ! \, 7. gxh3 d4 0--1}
The control sequence at the end of the top line
of your error message was never \def'ed. If you have
misspelled it (e.g., `\hobx'), type `I' and the correct
spelling (e.g., `I\hbox'). Otherwise just continue,
and I'll forget about whatever was undefined.
欢迎任何帮助。
答案1
正如 Ulrike Fisher 在评论中所说,代码中缺少了一些东西:游戏的第一步。skak
可以从一开始就跟踪棋步,就像在下棋一样,并在最终状态下打印棋盘。此外,你可以通过将每个棋子放在自己的方格上来设置棋盘,然后打印一些相关的棋步和注释以及写好的棋步。出于这些目的,xskak
这是该软件包的改进版本,因为它纠正了一些检测到的错误并添加了一些其他功能(请参阅xskak:skak 包的扩展)
当仅显示移动游戏时,您必须从头开始编写它们,或者从某个移动到结束编写它们。
我在代码中做了这两件事。第一列是包含所有动作的完整游戏(我检索了斯托尔贝格 vs. 鲍特维尼克游戏)。 这里xskak
玩游戏— 正如费舍尔所说 —,并通过命令返回最终位置\chessboard
。
第二列是你假装的。但在这种情况下 - 由于xskak
不知道如何解释没有前奏和中局的游戏的最后 7 步,会将棋子放在可能在每个方格上相互重叠的位置 - 你需要编写一个命令来告诉xskak
忘记第一步并显示最后一步,方法是输入\xskakset{defaultmoveid=35w}
(第 28 页,CTAN xskak),然后您可以根据需要手动确定棋盘上棋子的最终位置。
您的代码生成了两个错误,一个是因为最后写入的动作,另一个是因为在0--1
的末尾\mainline{...}
(这导致了错误The control sequence ... was never \def'ed
)。您应该将密钥写入result=0--1
其中\newchessboard
,然后在\mainline{...}
使用之后调用它\xskakgetgame{result}
。在此环境中无需将\,
动作分开。
\documentclass{article}
\usepackage{ragged2e}
\usepackage{chessboard}
\usepackage{xskak}
\textwidth=17cm
\oddsidemargin=-1cm
\begin{document}
\begin{minipage}{0.4\textwidth}
\centering {\large\bf Stolberg vs. Botvinnik}
\justify\newchessgame[white=Stolberg,black=Botvinnik]
\mainline{%
1. d4 Nf6 2. c4 e6 3. Nc3 Bb4
4. e3 O-O 5. Bd3 d5 6. cxd5 exd5
7. Nge2 c5 8. O-O Nc6 9. a3 cxd4
10. exd4 Bd6 11. h3 h6 12. b4 Re8
13. Qb3 Be6 14. Bd2 Qd7 15. f4 Bf5
16. Qc2 Be4 17. b5 Bxd3 18. Qxd3 Na5
19. Ng3 Nc4 20. Bc1 Rac8 21. Ra2 Bf8
22. a4 Bb4 23. Nd1 Ne4 24. f5 Nxg3
25. Qxg3 Bd6 26. Qf3 Be7 27. Qg3 Bf6
28. Bxh6 Bxd4+ 29. Kh1 f6 30. Bc1 Re4
31. Qd3 Ne5 32. Qb1 Rc4 33. a5 Bc5
34. b6 a6 35. Nb2 Rc3 36. Bd2 Rb3
37. Qc2 Qb5 38. Rc1 Bf8 39. Rd1 Re2
40. Qc1 Rxh3+ 41. gxh3! d4}
\chessboard
\end{minipage}
%
\hfill\vline\hfill
%
%Last 7 moves
%Chessboard has to be set by hand with keys \newchessgame[setwhite={...},setblack={...}]
\begin{minipage}{0.4\textwidth}
\chessboard
\vspace{5mm}
\centering {\large\bf Stolberg vs. Botvinnik} \\ (last 7 moves)
\justify\xskakset{defaultmoveid=35w}
\newchessgame[id=A,white=Stolberg,black=Botvinnik,
setwhite={pa5,pb6,pf5,ph3,ra2,rd1,nb2,bd2,qc1,kh1},
addblack={pa6,pb7,pd4,pf6,pg7,bf8,ne5,re2,qb5,kg8},result=0--1]
\xskakgetgame{white}--\xskakgetgame{black}: %Competitors names
\mainline{%
35. Nb2 Rc3 36. Bd2 Rb3 37. Qc2 Qb5
38. Rc1 Bf8 39. Rd1 Re2 40. Qc1 Rxh3+
41. pxh3! pd4} \quad\mbox{\xskakgetgame{result}}
\end{minipage}
\end{document}