\string 的参数为空

\string 的参数为空

结果是什么\string{}?为什么我们不能用它来代替\detokenize检查宏参数是否为空,正如解释的那样这里

答案1

摘自 TeXbook 第 213 页:

\string⟨token⟩。TeX 首先读取不带扩展的 ⟨token⟩。如果出现控制序列标记,则其\string扩展由控制序列名称组成(\escapechar如果控制序列不是简单的活动字符,则包括转义字符)。否则 ⟨token⟩ 是字符标记,其字符代码将保留为扩展结果。

因此,\string 不能包含在括号中:with

\string{}

{“字符串化”,返回一个{12 个字符的标记,而以下内容}保持不变。

相反,\detokenize将 ⟨general text⟩ 作为参数。以下是 ε-TeX 手册的摘录

\detokenize⟨general text⟩。
扩展是一个字符标记列表,代表标记列表 ⟨balanced text⟩。与 TeX\the和 ε-TeX生成的字符标记列表一样\readline,这些标记具有类别 12(“其他”),但字符代码 32 获得类别 10(“空格”)。

所以\detokenize 必须后面跟着一个{(在可能的⟨填充符⟩之后),它的参数是后面的内容,直到匹配的⟨右括号⟩(即一个明确的类别代码为 2 的字符标记)。与所有 ⟨general text⟩ 实例一样,TeX 将扩展标记以查找{

相关内容