我正在尝试翻译棋盘包,第 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}