棋盘上有外语名称的方格

棋盘上有外语名称的方格

我正在尝试翻译棋盘包,第 54 页。代码示例为:

\setchessboard{tinyboard,color=magenta,clearboard}
\chessboard[pgfstyle={[base,at={\pgfpoint{0pt}{-0.4ex}}]text},
            text= \fontsize{1.2ex}{1.2ex}\bfseries\sffamily\currentwq,
            markboard]

我在setchessboard命令部分添加了:vlabelformat=\mytranslator{\value{filelabel}}。该命令成功翻译了板外的标签(啊),但它不适用于内部的名称。我希望名称使用当前格式,但似乎并非如此。

假设我没有遗漏标签格式中的任何明显内容,我想我应该将其传递\currentwq给一个函数并从内部调用 mytranslator,但我不知道该怎么做。有什么想法吗?

编辑:添加了 MWE。翻译器有点笨;我改用 babel 来输入我选择的字母。

\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{xskak}

\newcommand\mytranslator[1]{\ifcase#1 \or a\or a\or a\or a\or a\or a\or a\or a\fi}

\begin{document}


    \setchessboard{boardfontsize=30pt,color=blue,clearboard,
                   vlabelformat=\mytranslator{\value{filelabel}}}
    
    \chessboard[pgfstyle={[base,at={\pgfpoint{0pt}{-0.4ex}}]text},
                text= \fontsize{1.2ex}{1.2ex}\bfseries\sffamily\currentwq,
                markboard,showmover=false]

\end{document}

答案1

虽然我同意vlabelformat可以传播到\currentwq(和其他宏),但作为一种解决方法,您可以编写一个调用翻译函数的\currentxx包装器。\currentwq

这里xstring用于从字段名称中提取单个字符,因为我无法使用标准\@firstofone或 expl3 命令来完成该工作:)文件标签计数器是通过从字符代码中减去 96 来从字母反向计算的。

\documentclass[12pt]{article}
\usepackage{xskak}
\usepackage{xstring}

\newcommand\mytranslator[1]{\ifcase#1 \or a\or a\or a\or a\or a\or a\or a\or a\fi}

\newcommand{\fieldtranslate}[1]{%
\StrChar{#1}{1}[\fileletter]%
\StrChar{#1}{2}[\rank]%
\edef\filenumber{\numexpr`\fileletter-96\relax}%
\mytranslator{\filenumber}\rank%
}

\begin{document}
    \setchessboard{boardfontsize=30pt,color=blue,clearboard,
                   vlabelformat=\mytranslator{\value{filelabel}}}
    
    \chessboard[pgfstyle={[base,at={\pgfpoint{0pt}{-0.4ex}}]text},
                text= \fontsize{1.2ex}{1.2ex}\bfseries\sffamily\fieldtranslate{\currentwq},
                markboard,showmover=false]
\end{document}

在此处输入图片描述

相关内容