教科书练习7.6如下:
' ' 产生什么标记
\expandafter\string\csname a\string\ b\endcsname
?( . 之前有三个空格b
)
这是我对这个问题的分析,我想知道它是否正确。
首先,a\string\ b
生成一个标记列表:a
(catcode 11),\
(catcode 12),space
(catcode 12) 和b
(catcode 11)。
然后\csname
将\endcsname
标记列表变成控制序列\a\ b
。
最后,\string
将控制序列制作成字符标记列表:\
(catcode 12),a
(catcode 12),\
(catcode 12),space
(catcode 10),b
(catcode 12)
答案1
答案就在书的后面
你的答案是正确的,但是中间阶段的分析是错误的,\string\
造成了 catcode 12\
和 catcode 10 之间的差距。
另外,您暗示的时间有点误导,\csname
在内部之前首先扩展,但是当到达\string
时,标记就会被收集起来并制成控制序列。\endcsame