\scantokens
以平衡文本作为参数,并且据我所知,括号必须是明确的。我对下面的代码感到困惑,第一行没有问题,而第二行却导致“文件已结束...”错误。为什么?
\toks0=\scantokens{{abc}}
\toks0=\expandafter{\scantokens{abc}}
我相信\scantokens
是可扩展的,因为我在 中使用过它\edef
。在这种情况下,它通常必须在前面加上\endlinechar-1 \everyeof{\noexpand}
。
我猜想 的使用\expandafter
会产生某种文件写入/读取状态,需要类似地使用\endlinechar
和\noexpand
。但似乎上述两行都会导致相同的错误。非常感谢您的帮助。
答案1
在第一种形式中\scantokens
,首先完成的{abc}
是平衡文本,但是第二种形式是{
交错的,并且在扫描标记分配的平衡文本时会看到隐式的文件结束标记。
luatex 提供的这个功能\scantokens
几乎完全没用,\scantextokens
它是相同的,但没有 eof 错误。
\toks0=\scantextokens{{abc}}
\toks0=\expandafter{\scantextokens{abc}}