belonglines 命令在定义中不起作用

belonglines 命令在定义中不起作用

问题是\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从现在开始生效,因为没有分组。

相关内容