\string 可以扩展吗?

\string 可以扩展吗?

我读了以下句子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

相关内容