为什么 hbox 没有开始一个新段落?

为什么 hbox 没有开始一个新段落?

这两个产生相同的结果:

abc
%\null
def
\bye
abc
\null
def
\bye

这两者是不同的:

abc

%\null
def
\bye
abc

\null
def
\bye

有人知道这种行为记录在哪里吗TeXbook

答案1

来自TeX 书(章节13 种模式,第 86 页):

练习 13.1

如果你\hbox{...}在水平模式下说,TeX 将构造指定的框,并将结果贡献给当前段落。同样,如果你在\hbox{...}垂直模式下说,TeX 将构造一个框并将其贡献给当前页面。如果你想用 开始一个段落,你该怎么做\hbox

回答(附录 A:所有练习的答案,第 313 页):

简单地说\hbox{...}是行不通的,因为该框将直接继续前一个垂直列表而不切换模式。您需要明确地开始段落,而最直接的方法就是说\indent\hbox{...}。但假设您想要定义一个扩展为 的宏hbox,其中此宏将在段落中间和开头使用;那么您不想强迫用户\indent在段落开头调用宏之前键入内容,也不想\indent在宏本身中说 (因为那样可能会插入不必要的缩进)。这个更普遍的问题的一个解决方案是说 \ \unskip\hbox{...},因为\使模式为水平 而\unskip删除了不需要的空格。Plain TeX 提供了一个\leavevmode宏,它以可能是最有效的方式解决了这个问题:\leavevmode是 的缩写 \unhbox\voidbox,其中\voidbox是一个永久为空的盒子寄存器。

相关内容