ConTeXt 中的 \ifnum 编译错误

ConTeXt 中的 \ifnum 编译错误

为什么下面的代码会出现以下错误?

代码:

\begingroup \catcode`\"=12
    \gdef\newmcodes@{\mathcode`\'39\mathcode`\*42\mathcode`\."613A%
    \ifnum\mathcode`\-=45 \else
        \mathchardef\std@minus\mathcode`\-\relax
    \fi
    \mathcode`\-45\mathcode`\/47\mathcode`\:"603A\relax}
\endgroup

\definemathcommand[xyz][nolop]{\newmcodes@\kern\zeropoint\mfunction{fancy-function-name'*.:}}

\starttext
$\xyz$
\stoptext

错误:

tex error       > error on line 13 in file /Users/maggyero/Desktop/test.tex: ! Extended mathchar used as mathchar (4203026)
<to be read again> 
=
\newmcodes ...thcode `\."613A\ifnum \mathcode `\-=
                                                  45 \else \mathchardef \std...
<argument> \newmcodes @
             \kern \zeropoint \mfunction {fancy-function-name'*.:}
\486>nolop #1->\mathop {#1
                          }\nolimits 
l.13 $\xyz
        $

先感谢您。

答案1

使用 ConTeXt 时,不应@在命令名称中使用;但您应该意识到 ConTeXt 使用 Unicode 数学,因此无法使用 访问连字符的标准数学代码\mathcode

\begingroup
  \catcode`\"=12 \catcode`\`=12 % added a safe setting for the backquote
  \gdef\newmcodes{\mathcode`\'39\mathcode`\*42\mathcode`\."613A
  \ifnum\Umathcodenum`\-=4203026 \else
    \Umathcharnumdef\stdminus\Umathcodenum`\-\relax
  \fi
  \mathcode`\-45\mathcode`\/47\mathcode`\:"603A\relax}
\endgroup

\definemathcommand[xyz][nolop]{\begingroup % added a grouping
  \newmcodes\kern\zeropoint\mfunction{fancy-function-name'*.:}%
  \endgroup}

\starttext
$\xyz$
\stoptext

我还为反引用和围绕 调用的分组添加了安全设置\newmcodes

在此处输入图片描述

相关内容