结果是什么\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 将扩展标记以查找{
。