expl3:peek_charcode_remove:NTF 无法识别 \c_math_subscript_token

expl3:peek_charcode_remove:NTF 无法识别 \c_math_subscript_token

我观察到\peek_charcode:NTF和相关函数做了一些意想不到的事情。当下一个字符是时,这些函数会按照我的预期执行^,然后我调用,例如,

\peek_charcode_remove:NTF \c_math_superscript_token
{ true code }
{ false code }

但如果下一个字符是,则比较失败,_我调用

\peek_charcode_remove:NTF \c_math_subscript_token
{ true code }
{ false code }

但是,它可以按预期使用

\peek_charcode_remove:NTF _
{ true code }
{ false code }

这是预期的行为吗?

无论周围函数是用\cs_new:Nn和变体还是用定义,似乎都会发生这种情况\NewDocumentCommand

答案1

您正在尝试查看字符代码,而不是类别代码。该标记\c_math_subscript_token保证具有以下标记的含义:类别数学下标,但不保证有任何特定的特点代码(目前,在 pdfLaTeX 下它具有字符代码*——但也不要依赖它!)。

所以这只是滥用了记录的令牌。如果你想测试一个特定的特点代码只使用该字符(前提是它没有有问题的类别代码,这会使它成为无效的N类型参数)。

因此,要检查下一个字符是否为字符代码 95 ( _),您只需使用

\peek_charcode_remove:NTF _ {<true>} {<false>}

相关内容