问题是\obeylines
宏在里面时不起作用\def
比较:
\long\def\linesaver#1{\obeylines#1}
\linesaver{
Test1
Test2
}
对比
{
\obeylines
Test3
Test4
Test5
}
第一个不保存换行符,但第二个保存了。为什么?
忽略我试图达到的目标 - 考虑一下我只是想了解 tex 在底层究竟是如何工作的。
答案1
让我们看看通话中会发生什么
\long\def\linesaver#1{\obeylines#1}
\linesaver{
Test1
Test2
}
由于\linesaver
有一个参数,TeX 会吸收它并执行标记化;因此行尾会变成空格标记前 \obeylines
开始起作用。当参数已经被吸收时,它才会起作用,因此^^M
参数中没有,而且,更改类别代码对已经被 TeX 扫描的标记没有影响。
唯一的效果是\obeylines
从现在开始生效,因为没有分组。