Plain TeX 中某一节的第一段没有缩进

Plain TeX 中某一节的第一段没有缩进

我检查过某一部分的第一段没有缩进?但我认为我的问题值得一个新线程,因为我的问题是关于 Plain TeX 的。

我正在使用 Plain TeX。我想编写一个\mysection宏,使其后面的段落缩进,而不管调用\mysection和段落之间是否有空格。

如下所示,\finickysection它有效,但前提是我一定要在其使用和段落之间添加 % 注释。我希望\mysection按照书面形式使用调用。

我的 MWE 是:

\def\mysection#1{\vskip\baselineskip\noindent #1\vskip\baselineskip\everypar={\noindent\everypar={}}}
\def\finickysection#1{ \vskip\baselineskip \noindent #1 \vskip\baselineskip%
\noindent}


\finickysection{Hello}%
%
This is my first paragraph. Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim
ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea
commodo consequat.

Duis aute irure dolor in reprehenderit in voluptate velit
esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat
non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

\mysection{Hi}


This is my third paragraph. It should not be indented. Lorem ipsum dolor sit
amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis
aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu
fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt
in culpa qui officia deserunt mollit anim id est laborum.

This is my fourth paragraph. Lorem ipsum dolor sit amet, consectetur adipisicing
elit, sed do eiusmod tempor.

\bye

答案1

为此,我借用了 LaTeX:

\def\mysection#1{%
  \vskip\baselineskip
  \noindent #1\par
  \nobreak % IMPORTANT
  \vskip\baselineskip
  \everypar={{\setbox0\lastbox}\everypar={}}}

标记列表\everypar插入到隐含之后\indent\setbox0\lastbox删除缩进框:缩进实现为一个空的 hbox\parindent宽度。

请注意,\par空行生成的标记不会触发 的插入\everypar,它仅用于一个段落已经开始。

相关内容