如何在 Plain TeX 中的循环中打印换行符?

如何在 Plain TeX 中的循环中打印换行符?

假设我有这个简单的循环:

\newcount\u\u1
\loop
    \the\u~
    \ifnum\u<2
        \advance\u1
\repeat

这将打印数字为

1 2

我想要实现的是

1
2

为此,我尝试\\在循环中的任何位置添加,但会出现错误“!扫描 \\ 的使用时发现禁止的控制序列”。插入\par会出现“!段落在 \loop 完成之前结束”。
所以问题是:如何在 Plain Tex 中的循环中插入换行符/换行符/回车符/换行符?

答案1

在 中plain.tex\loop...\repeat定义为:

\def\loop#1\repeat{\def\body{#1}\iterate}

所以你不能\par在里面使用。

另外,在 中plain.tex\\控制序列没有与 LaTeX 中相同的“在此处断线”含义,因此它也不起作用。

您有两个选择:

首先,重新定义\loop...\repeat为一个长宏:

\long\def\loop#1\repeat{\def\body{#1}\iterate}

这样你就可以提出\par它的论点。

其次,使用\endgraf,它与 TeX 的原语完全相同\par,不同之处在于,在扫描宏的参数时,TeX 会查找\par,而不是\endgraf,因此可以在这些情况下使用它。


请记住,使用\endgraf会中断段落,而不是中断行,正如 David 在评论中所说。使用\endgraf将插入一个\parskip粘连。对于实际线休息一下,看看大卫的回答:)

答案2

\newcount\u\u1

\parindent0pt


\loop
    \the\u
    \ifnum\u<2
        \hfill\break
        \advance\u1
\repeat


\bye

相关内容