错误定义的宏

错误定义的宏

考虑以下示例,其中代码取自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}

无论我将 的第二个参数的值设置\matTob还是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}

在此处输入图片描述

相关内容