扫描标记和换行符

扫描标记和换行符

我在使用 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 之前的行,那么您将获得正确的输出。

相关内容