\char`xx 带有反斜杠

\char`xx 带有反斜杠

在 TeXbook 第 44 页中,Knuth 写道:

例如,\char`b\char`\b也等同于\char98

我知道对于像 这样的特殊字符\,我们必须对其进行转义,即\char`\\。但是既然b只是一个字母,为什么我们仍然可以“转义”它?\b这里是一个宏吗?

答案1

\<char>每一个字符,因为人们永远无法确定一个字符具有什么类别代码。

对于类别代码 0、5、9、14 或 15 的每个字符来说,转义当然是必要的,但是当您不想影响括号级别计数器时,对于类别 1、2 也需要转义,如果在定义中使用,则需要类别 6 转义。

后面的控制序列`应该有一个由单个字符组成的名称,并且不需要定义。在这种情况下,反斜杠被简单地删除,名称被用作字符。

仅举一个例子,`\^^M完全遵循语法,因为^^M代表标记化后的单个字符。

好奇的是:TeX 还会在字母常量(带扩展)后寻找空格。因此之间的区别

\number`b \foo

\number`\b \foo

因为在第一种情况下,只有在执行完其操作\foo后才会展开,而在第二种情况下,则会在完成之前展开。这里我假设其正常类别为 11。\number\foo\numberb

答案2

“为什么?”这个问题很难回答,因为它是允许的,所以才允许。请注意,tex 没有任何内置的特殊字符集,只有当字符的 catcode 不是 11 或 12 时,它们才是特殊的,并且始终允许单字符 csname 可能比进行 catcode 检查并在某些情况下不允许它更容易。

它可能很有用,因为包可以在\char`\b不知道当时的 catcode 的情况下使用该表单b,尽管您需要知道它不是 catcode 15,并且为了有用,您需要知道 cha 和 r 具有 catcode 11 才能\char工作,所以在实践中它不是那么有用。

相关内容