对于编译来说空格和换行符有区别吗?

对于编译来说空格和换行符有区别吗?

我们处理任意用户输入并尝试以编程方式生成 LaTeX 进行编译。我们有时会遇到一个问题,即用户编写了非常长的文本行(段落),从而导致错误:

! Unable to read an entire line

明智的(但可能有点幼稚的)解决方案似乎是我们设置一些行长度限制,然后自己用空格换行。例如,给定:

foo bar baz

并且行数限制为 5 个字符,我们最终会得到:

foo bar
baz

...应该只是呈现相同的内容,因为空格和换行符是可以互换的。

这对于宏来说也很好用:

\textit{foo
bar baz}

然而,这在全部情况如何?换行符和空格符的处理方式是否有所不同?或者它们可以完全互换吗?

答案1

默认 catcode 机制中的单行结尾会产生一个空格标记。

在逐字逐句的环境中或更普遍的范围内,\obeylines它将在输出中产生强制换行。

在特殊环境中\endlinechar,可以设置为负数,那么行尾根本不会产生标记。(另外,在 expl3 中,空格字符也不会产生标记,因此在这种情况下行尾仍然充当空格)

另一个案例是长评论

\LaTeX\ code % very very very long comment

如果你在传递给 tex 之前简单地用 perl 或 python 等换行,你最终会得到

\LaTeX\ code % very very
very long comment

然后你最终取消了文本的注释。

相关内容