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