![扫描标记和平衡文本,花括号有哪些选项?](https://linux22.com/image/459704/%E6%89%AB%E6%8F%8F%E6%A0%87%E8%AE%B0%E5%92%8C%E5%B9%B3%E8%A1%A1%E6%96%87%E6%9C%AC%EF%BC%8C%E8%8A%B1%E6%8B%AC%E5%8F%B7%E6%9C%89%E5%93%AA%E4%BA%9B%E9%80%89%E9%A1%B9%EF%BC%9F.png)
\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}}