texmate 中的国际象棋模式:错误的移动方向

texmate 中的国际象棋模式:错误的移动方向

这是我在此的头一篇博文 :)

我从 LaTeX 开始,现在正尝试运用它注释一些棋局。

我的问题是使用国际象棋模式(|...chess moves to show figurines...|)时使用texmate包裹. 我不想在 LaTeX 中编辑棋步时太过严格,因此我使用\SkakOff避免来texmate/skak检查输入的每个移动序列。

我计划只使用\fenboard{...}或,\position{...}然后使用国际象棋模式来插入走子。每个棋盘都是不同游戏中的新位置,所以我不需要(也不想)skak检查每一步棋。我读过在 Skak 中排版嵌套的国际象棋变体但我想避免使用\mainline\variation等等。

问题出现在最后一个“变化”中(事实上我没有使用\mainline\variation等,如上所述),最后移动的一方是白方,然后,在下一个序列中,LaTeX 开始时好像是黑方移动。

下面是 The LaTeX Graphics Companion(第 680 页)中的示例 10.1.15,经过修改以说明该问题:

\documentclass[10pt]{book}
\usepackage[utf8]{inputenc}

\usepackage{texmate}  \SkakOff
\begin{document}
%Original code
Input as |e4 c5 Nf3 d6 d4 cxd4|
or as    |1 e4 c5 2 Nf3 d6 3 d4 cxd4|
or as    |1. e4 c5 ; 2. Nf3 d6 ; 3. d4 cxd4|

%Modified (buggy) code
But if   |1 e4 c5 2 Nf3 d6 3 d4 cxd4 4 Na3| (the last move is played by white)
then     |1 e4 c5 2 Nf3 d6 3 d4 cxd4 4 Na3| (the next time, skak starts 
the chess mode as moving black first, not white)
\end{document}

如果主要变化中的最后一步是白棋,我如何强制白棋重新开始这一步?或者相反,如果最后一步是黑棋,我如何强制黑棋重新开始这一步?

谢谢,

PS 我正在使用,texmate因为我使用了\makegametitle命令。

附录:

我的问题与将一份我长期使用的老文档从 HTML 翻译成 LaTeX 有关。现在我想打印它,但 HTML 打印输出效果不佳,所以我想到将其翻译成 LaTeX。

该文档在国际象棋方面调试得相当好,所以我不需要 skak/texmate 的帮助来检查位置和移动顺序,因为每个位置都是 HTML 格式,我已经创建了一个小脚本将它们转换为 FEN,并且我已经有了后续\fenboard{}块。但是当我将 HTML 格式的移动替换为 LaTeX 国际象棋模式时,|...|我发现了上面解释的(对我来说意想不到的)行为。感谢 DJP 向我解释了这种行为。

我不想浏览我已有的数百个位置,检查和重写每个主线/变体并包含相应的 LaTeX 命令。我希望使用国际象棋模式来突出显示(\textbf)国际象棋动作,并从西班牙代数符号更改为小雕像符号。

现在,为了避免修改所有内容的辛苦工作,我想知道是否有任何方法可以轻松标记一系列动作(已经有正确的移动编号),就像在 LaTeX 国际象棋模式中显示的那样。某种重置国际象棋模式的方法,就像\newgameDJP 建议的技巧一样,但也可以设置要移动的一方。

如果不可能,那么我将不得不编写另一个脚本来检测所有国际象棋移动序列,并将 Ka1 替换为\king{}a1,将 e3 替换为,依此类推(存在显示黑棋的问题)。这是可能的,也很容易,但与简单的国际象棋模式符号相比,这会使最终的 tex 文件源非常模糊。使用、等\pawn{}e3自动进行替换绝非易事。\mainline\variation

抱歉,我的解释不好,但我不会说英语,很难更好地解释我的问题。我知道这个问题非常具体,而且这不是 LaTeX 哲学的工作方式。

答案1

睡了一晚后,我意识到了帖子中的一个错误,因此需要进行实质性的修改:问题在于 | ... | 之间的代码是主线,而不是变奏;因此在游戏中,轮到黑棋移动,因为你在完成一个移动对之前就破坏了它。然后,它会从你停止的地方继续主线,从而产生不必要的省略号。因此,通过键入新的主线开始,\newgame当然,这将以白棋移动开始。此代码将告诉你如何更改编号以提供你想要的结果:

\documentclass[10pt]{book}
\usepackage[utf8]{inputenc}

\usepackage{texmate}  \SkakOff
\begin{document}
With  |1 e4 c5 2 Nf3 d6 3 d4 cxd4| writing |e4 c5 Nf3 d6 d4 cxd4| continues the mainline.
But you can step in and renumber with |3. e4 c5 4. Nf3 d6 5. d4 cxd4| if you want.

For |1 e4 c5 2 Nf3 d6 3 d4 cxd4 4 Na3| (the last move is played by white)
then  \newgame   resets to a new game (new main line) so 
| e4 c5  Nf3 d6  d4 cxd4  Na3| will achieve what you want.
If you want to start with different numbers then 
\newgame |22 e4 c5  23 Nf3 d6  24 d4 cxd4 25 Na3| will work.
\end{document}

考虑到您的目标,我使用 LaTeX 和命令\mainline来生成从国际象棋角度来看不错的文档。不过,我猜您的方法看起来也是可行的。

以下是上述代码的输出:

输出

相关内容