通过改变 TeX 中的 catcode 来显示回车符?

通过改变 TeX 中的 catcode 来显示回车符?

第 46 页TeXbook, 有

TEX 删除输入行右端出现的任何空格字符(编号 32)。然后它在行的右端插入一个回车符(编号 13),但它不会在错误恢复期间用 'I' 插入的行尾放置任何额外内容。请注意,回车符被视为行中的一个实际字符;你可以通过更改其 catcode 来获得特殊效果。

为了检查 TeX 是否在行的右端插入回车符,我编写了以下代码

\catcode`\^^M=11
hello
\bye

但它产生了

! Undefined control sequence. 
l.3 \bye

我该怎么做才能看到它?

答案1

对你的代码做一些修改:

\catcode`\^^M=12
hello
\bye

然后就不会出现错误,您会在 dvi 输出中看到“hellofl”。因为 fl 是插入 cmr10 当前字体中插槽 13 的连字符,而“return”字符的代码为 13。

您的示例(catcode 为 11)将“return”字符设置为字母,因此创建了标记\bye^^M(此控制序列的字符串由bye、组成return)。这样的控制序列是未定义的。

答案2

Petr (wipet) 已经解释了原因。但是,假设您想要重现输入,您可以按如下方式操作。将\obeylines字符^^M设为活动字符并定义为\par。我添加了\P和 \strut` 以便同时尊重初始空格。

\parindent=0pt \tt
\obeylines\obeyspaces%
\def^^M{\P\par\strut}%
%-----
hello  world
  some line

after a  blank line 

\input knuth%

\bye

在此处输入图片描述

相关内容