我观察到\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>}