有这样一个问题:如何退出水平模式?- 但没有答案如何退出水平模式。
我知道有一个命令\leavevmode
(\leavevmode 的功能和使用); 帖子什么是垂直模式和水平模式?指向其定义:
Plain、LaTeX 和 pdfTeX 具有内置宏,可以更轻松地从一种模式切换到另一种模式,例如 \leavevmode,它只是一个打开的空白框:
\protected\def\leavevmode{\unhbox \voidb@x}
好的,但是没有\leavehmode
命令?
那么我可以使用什么命令来退出水平模式并重新进入垂直模式 - 而不会出现新行等伪影,或者插入额外的水平或垂直空格?
答案1
您似乎误解了垂直和水平模式是什么。
首先,我来考虑一下垂直模式和水平模式之间的关系。TeX 总是以垂直模式开始。
在某些情况下(正是当它看到水平命令),TeX 离开垂直模式并启动水平模式以创建段落。除了结束段落之外,您无法通过其他方式“离开”此模式。
你可能被命令的名称误导了\leavevmode
,它可能被命名为类似\StartMakingAParagraphIfItMakesSense
;该命令\unhbox\v@idbox
是\unhbox
一个水平命令,因此
- 如果 TeX 处于垂直模式,则启动(不受限制的)水平模式,
- 如果 TeX 处于水平模式或数学模式,则不会发生任何事情。
结束不受限制的水平模式的唯一方法是发出(显式或隐式)原始\par
命令。每个垂直命令,如果在 TeX 处于不受限制的水平模式时发现,则发出一个\par
令牌。
请注意,\par
可能并不意味着原始的\par
,但重新定义的\par
应该在某个时候执行原始的\par
,否则会发生奇怪的事情:简单的
\def\par{}
x\vskip1pt
将启动一个无限循环,例如,因为\vskip
将继续发出\par
以便在永远不会达到的垂直模式下执行。
您可以在水平模式下通过打开\vbox
或来启动垂直模式\vtop
,但结果列表最终将附加到正在构建的水平列表中,因此这似乎不是您想要的。
有一个方法可以跳转到周围的垂直模式:如果 TeX 处于\vadjust{...}
(不受限制的)水平模式,它将打包作为参数给出的垂直列表,并在段落形成后,将此列表插入命令所在的行和下一行之间。这样的垂直列表将附加到前线间胶水。因此
abc\vadjust{\vskip3pt} text text ... text
段落第一行与第二行之间将有 3pt 的额外垂直空间。
垂直模式和水平模式之间不具有对称性,因为它们的作用非常不同。
答案2
如果您想结束当前水平列表并进入垂直模式,命令是(原始)\par
。
如果您想要启动一个嵌套的垂直列表,完成后它将被添加到当前水平列表中,命令是\vbox{...}
。