skak 包输出的国际化

skak 包输出的国际化

我正在使用 skak 包打印国际象棋游戏,并取得了一些成功。我想问一下是否可以输出走法,将方格名称更改为另一种语言。例如,对于希腊语,我想应用以下转换:

a --> α,b --> β,c --> γ,d --> δ,e --> ε,f --> ζ,g --> η,h --> θ。

如果这不是 skak 的功能,也许还有另一种方法,即 latex(或者 xelatex,我正在使用)可以对文档的某些部分进行上述替换。

答案1

这很有趣,尽管skak支持各种输入语言,此支持仅扩展到国际象棋的名称, 不是文件(即列名)。

首先,尝试以下操作。我使用了babel希腊语,但使用 也是一样的,比如说xelatex。(更改日志:0.基本翻译;1.修复捕获和模棱两可的动作。)

\documentclass[12pt]{article}
\usepackage[greek]{babel}
\usepackage{skak}
\makeatletter
\def\TranslateFile#1%
 {\EqStr{#1}{a}{a}
 {\EqStr{#1}{b}{b}
 {\EqStr{#1}{c}{g}
 {\EqStr{#1}{d}{d}
 {\EqStr{#1}{e}{e}
 {\EqStr{#1}{f}{z}
 {\EqStr{#1}{g}{h}
 {\EqStr{#1}{h}{j}{}}}}}}}}}
\def\printmove@san{%
  \EqPiece{Z}{\PieceNameToMove}%
  {\Castling%
    {\LongCastling{\castlingchar\castlinghyphen}{}%
      \castlingchar\castlinghyphen\castlingchar}%
    {%pawn move
      \Capture{\TranslateFile{\FileDiscriminator}\capturesymbol}{}%
      \TranslateFile{\MoveToFile}\MoveToRank%
      \Promotion{\cfss@textsymfigsymbol{\PromotionPieceName}}{}}}%
  {% piece move
    \cfss@textsymfigsymbol{\PieceNameToMove}%
    \EqStr{Z}{\FileDiscriminator}{}{\TranslateFile{\FileDiscriminator}}%
    \EqStr{Z}{\RankDiscriminator}{}{\RankDiscriminator}%
    \Capture{\capturesymbol}{}%
    \TranslateFile{\MoveToFile}\MoveToRank}%
  % for all moves:
  \CheckTest\MateTest\MoveRest}
\shortmoves
\makeatother
\begin{document}
\newgame
\mainline{1.e4 e5 2.Nf3 Nc6 3.Bb5}
\par\newgame
\mainline{1.c4 d5 2.cxd5}
\par\newgame
\mainline{1.d4 Nf6 2.Nf3 e6 3.Nfd2}
\end{document}

希腊语中的移动

它可能不足以排版您想到的所有可能的游戏,因为我的棋艺有点生疏,我无法预测会出现什么问题。如果出现问题,请随时回复评论,我会尝试修复它。谢谢... :-)

相关内容