我读了以下句子TeX 按主题分类作者:Victor Eijkhout,第 50 页:
该\string
命令由扩展处理器执行,因此除非明确禁止,否则它会被扩展。
这是否意味着\string
可扩展?但我使用\meaning\string
,结果只是\string
。那么这是什么意思呢?
答案1
要确定某物是否可扩展,请将其放入\edef
并查看会发生什么。例如,我们可以这样做
\edef\test{\string\relax}
\show\test
然后在终端我们看到
> \test=macro:
->\relax.
现在\string
已经消失了, 的定义\test
现在只是所有标记都具有下标所示的 catcode 12,这正是应该具有的效果。\12r12e12l12a12x12
\string
是的,\string
是可扩展的。
回答另一部分,当你\show
在控制序列上使用时,你会得到类似
> \string=\string.
这意味着这个控制序列是原始。
答案2
有一个互动环节。
> tex
This is TeX, Version 3.14159265 (TeX Live 2017) (preloaded format=tex)
**\relax
*\message{\string\relax}
\relax
*\message{\relax}
\relax
*\bye
No pages of output.
Transcript written on texput.log.
\message{\string\relax}
仅打印这一事实\relax
意味着\string
是可扩展的,因为不可扩展的标记被写为其自身\message
,就像在 的例子中一样\message{\relax}
。
顺便说一句,输入\message{\string}
不会在控制台上打印任何内容,因为\string
已经完成其任务并字符串化了}
,因此 的文本\message
未完成。输入另一个}
将结束循环并打印}
。
> tex
This is TeX, Version 3.14159265 (TeX Live 2017) (preloaded format=tex)
**\relax
*\message{\string}
*}
}
*\bye
No pages of output.
Transcript written on texput.log.
答案3
我持有偏见,对于可扩展编码,标准将更多地是看它\string
在\if
或\ifnum
测试中表现良好,还是在测试中表现良好\numexpr
。因此,
\ifnum\string1=1
不引发错误对我来说是很好的验证,因为这意味着(更确切地说是建议......)我将能够在可扩展编码中使用这样的构造。
它完全扩展不太\edef
有趣,因为我不能\edef
在可扩展宏中使用。
从这个角度来看,这\csname...\endcsname
属于更多类别。\ifnum