\obeylines 有对应物/解药吗?

\obeylines 有对应物/解药吗?

\obeylines命令告诉 TeX 保留行尾,这对于诗歌和其他各种事物很有用。我可以\obeylines通过将其包装在范围内来限制其效果,如下所示:

{\obeylines
    We obey, and end up on separate lines.
    We obey.
}
We disobey, and end up on the same line.
We disobey.

这几乎总是可行的方法,否则换行符会破坏格式代码,破坏的内容不止这些。但是,出于好奇:是否还有一个命令可以重置 TeX 对行尾的处理?谷歌搜索\disobeylines找到了一些自己动手的实现,但我很好奇 Donald Knuth 是否也为 Plain TeX 本身编写了一个解毒剂。

答案1

的定义\obeylines

% In \obeylines, we say `\let^^M=\par' instead of `\def^^M{\par}'
% since this allows, for example, `\let\par=\cr \obeylines \halign{...'
{\catcode`\^^M=\active % these lines must end with %
  \gdef\obeylines{\catcode`\^^M\active \let^^M\par}%
  \global\let^^M\par} % this is in case ^^M appears in a \write

因此你可以尝试:

\def\disobeylines{\catcode`\^^M=5 }

这个例子:

\def\disobeylines{\catcode`\^^M=5 }

\obeylines
    We obey, and end up on separate lines.
    We obey.
\disobeylines
We disobey, and end up on the same line.
We disobey.

\bye

编辑

正如 egreg 在他的评论中指出的那样,Donald Knuth 没有提供任何\disobeylines。在 TeXBook 第 94 页中,该命令的\obeylines介绍如下:

您可能有几行连续的输入,而您希望输出以相同的方式逐行显示。一种解决方案是在\par每行输入的末尾键入;但这有点麻烦,因此纯 TeX 提供了缩写\obeylines,这会导致输入中的每个行结束符都像\par。在您说之后, \obeylines每行输入将获得一行输出,除非输入行以 结尾%或除非它太长而必须断开。例如,如果您正在排版一首诗,您可能希望使用\obeylines一定要将其括\obeylines在一个组中,除非您希望这种“诗歌模式”持续到文档结束。

相关内容