考虑以下示例,其中代码取自https://tex.stackexchange.com/a/399817/15874并做了一些修改:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{xfp}
\usepackage{xskak}
\def\svarstedB{3.7em}
\newcommand*\hestB[2][\svarstedB]{%
\underline{\makebox[\ifdim\width>#1\width\else#1\fi]{#2}}}
\newcommand*\matLoesninger[1]{\hestB{\textcolor{blue}{\smash{#1}}}}
\newcommand*\matTo[6]{%
\def\tempA{#1}%
\def\tempB{#2}%
\def\tempC{#3}%
\def\tempD{#4}%
\def\tempE{#5}%
\def\tempF{#6}%
\matToEkstra}
\newcommand*\matToEkstra[5]{%
\begin{figure}[!htbp]
\LARGE
\centering
\begin{minipage}{0.5\textwidth}
\centering
\ifblank{\tempA}{\vphantom{1}}{\textbf{\tempA}}%
\vspace*{-2ex}
\scalebox{1}{\newchessgame[setfen = \tempC\space \tempB - - 0 1, print]}%
\hspace*{1.2em} Hvid \hspace*{2em} Sort
\vspace*{-1ex}
\begin{flushleft}
\ifstrequal%
{\tempB}{w}%
{\hspace*{1.1em}%
1.%
\hspace*{0.6em}%
\matLoesninger{\tempD}%
\hspace*{0.8em}%
\matLoesninger{\tempE}%
\vspace*{0.6ex}
\hspace*{1.1em}%
2.%
\hspace*{0.6em}%
\matLoesninger{\tempF}}%
{\hspace*{1.1em}%
1.%
\hspace*{5.1em}%
\matLoesninger{\tempD}%
\vspace*{0.6ex}
\hspace*{1.1em}%
2.%
\hspace*{0.6em}%
\matLoesninger{\tempE}%
\hspace*{0.8em}%
\matLoesninger{\tempF}}%
\end{flushleft}
\end{minipage}%
\begin{minipage}{0.5\textwidth}
\centering
\ifblank{\tempA}{\vphantom{1}}{\textbf{\fpeval{\tempA+1}}}%
\vspace*{-2ex}
\scalebox{1}{\newchessgame[setfen = #2 #1 - - 0 1, print]}%
\hspace*{1.2em} Hvid \hspace*{2em} Sort
\vspace*{-1ex}
\begin{flushleft}
\ifstrequal%
{#1}{w}%
{\hspace*{1.1em}%
1.%
\hspace*{0.6em}%
\matLoesninger{#3}%
\hspace*{0.8em}%
\matLoesninger{#4}%
\vspace*{0.6ex}
\hspace*{1.1em}%
2.%
\hspace*{0.6em}%
\matLoesninger{#5}}%
{\hspace*{1.1em}%
1.%
\hspace*{5.1em}%
\matLoesninger{#3}%
\vspace*{0.6ex}
\hspace*{1.1em}%
2.%
\hspace*{0.6em}%
\matLoesninger{#4}%
\hspace*{0.8em}%
\matLoesninger{#5}}%
\end{flushleft}
\end{minipage}
\end{figure}}
\begin{document}
\matTo%
{15}%
{w}{5r1k/ppq4p/4p2p/2PnNp2/5P2/P6P/1B4P1/5R1K}{Sf7+}{Kg8}{Sxh6\#}%
{b}{5rk1/1pp4p/p3R1p1/3R1n2/6B1/2P5/2PQ2PP/5K2}{Sg3+}{Ke1}{Tf1\#}
\end{document}
无论我将 的第二个参数的值设置\matTo
为b
还是w
,宏都会将其注册为 不为w
。(该代码对于打印在右侧小页面内的棋盘很有效,但对于打印在右侧的棋盘则不行。)
我的宏有什么问题?我该如何修复它?
(这可能真的很容易,但我就是找不到错误。:-(
)
我只是不明白为什么
\ifstrequal%
{\tempB}{w}
第一个小页面里面的宏有一部分是错误的。
PS:不要看棋盘打印出来的页面布局;现在它真的很丑。
答案1
根据文献xskak
:
所有棋盘键均正常处理。您甚至可以使用键打印直接打印棋盘。只有例外是改变棋盘大小的键 maxfield 和 zero – skak 不喜欢不寻常的棋盘尺寸 – 以及钥匙移动器和全移动器它们被键 moveid 的(最终默认的)值覆盖
这意味着如果您想设置移动者,您应该在中明确添加玩家\newchessgame
,或者使用来\chessboard
打印棋盘:
\documentclass{article}
\usepackage{etoolbox}
\usepackage{xfp}
\usepackage{xskak}
\setchessboard{tinyboard}
\begin{document}
\newchessgame[setfen=5rk1/1pp4p/p3R1p1/3R1n2/6B1/2P5/2PQ2PP/5K2 b - - 0 1,print] % wrong
\newchessgame[setfen=5rk1/1pp4p/p3R1p1/3R1n2/6B1/2P5/2PQ2PP/5K2 b - - 0 1,player=b,print] % correct
\chessboard[setfen=5rk1/1pp4p/p3R1p1/3R1n2/6B1/2P5/2PQ2PP/5K2 b - - 0 1]
\end{document}
编辑
作为对评论的回答:
您使用了错误的命令进行测试:\ifstrequal
没有扩展字符串。
\documentclass{article}
\usepackage{etoolbox}
\begin{document}
\def\tempB{w}
\ifstrequal{\tempB}{w}{true}{false}
\ifdefstring{\tempB}{w}{true}{false}
\end{document}