为什么下面的代码会出现以下错误?
代码:
\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
。