我在使用 scantokens 时遇到了问题。我试图转换在 的影响下读入的列表\obeylines
。出于某种原因,每当我在列表中使用 scantokens 时,它都会在 处停止读取^^M
。
观察:
{\obeylines%
\gdef\one{\message{foo}
\message{bar}}
}
\one
\expandafter\scantokens\expandafter{\one}
\bye
给出输出 (./scan.tex foo bar foo )
也就是说,它不会发出第二条音。
这是一个简化的例子。但如果您逐行阅读段落,并且^^M
由于被括号隐藏,它最终进入您的标记流,则它可能会在实践中出现。
不管怎样,\scantokens
这样直接退出对你来说都有点不方便。
答案1
解决方案是更改\newlinechar
。这可确保^^M
流中要读取的任何内容都被解释为换行符而不是行尾。行中间的行尾字符将被视为注释字符,而行的其余部分(直到换行符)将被忽略。
如果你添加
\newlinechar=13 %that's the character code of newline
到 scantokens 之前的行,那么您将获得正确的输出。