经过阅读(和搜索),TeXbyTopic.pdf
我的印象是,的实际使用\noexpand
属于以下三种情况之一,
在
\edef
或内部\xdef
,包括定义宏以便在上下文中使用的情况\edef
,例如\def\protect{\noexpand\protect\noexpand}
内部
\write
和\message
,包括 LaTeX 中可移动文本的大小写- 在专项建设方面
\if\noexpand#1\relax
还有其他实际用途吗\noexpand
?除了上面列出的第 3 个之外,还有什么实际用途\noexpand
不在仅扩展上下文中?我对 plain 还不熟悉,希望通过了解 的各种用法来更好地理解 plain(尤其是仅扩展上下文)\noexpand
。
答案1
有很多 tex 原语可以扩展标记来寻找参数,例如\if
和\ifcat
。\noexpand
对它们中的任何一个都会产生类似的效果,但无论是否有用很难说。
例如
\def\zz{hello}
\input s\noexpand\zz
\bye
输入文件s.tex
然后hello
排版
\def\zz{hello}
\input s\zz
\bye
生产
! I can't find file `shello'.
但是您可以更轻松地在后面使用空格s
来\noexpand
停止对文件名的扫描。
正如 Henri 在评论中所指出的,也可以使用在输入或\scantokens
\edef\zz{\scantokens{z}}
是错误
! File ended while scanning definition of \zz.
但
\edef\zz{\scantokens{z\noexpand}}
或者
\everyeof{\noexpand}
\edef\zz{\scantokens{z}}
没有错误。