On Thu, 15 Jul 2004 12:21:57 +0200
Heiko Oberdiek
On Thu, Jul 15, 2004 at 11:29:35AM +0200, Taco Hoekwater wrote:
The change file adds a new primitive called \quitvmode. In vertical modes, it is identical to \indent, but in horizontal and math modes it is \noindent.
What's the difference to \leavevmode?
If there would be deep binding of macro meanings and when running in a context-free environment (and if you ignore efficiency considerations), there would not be any real difference between the new primitive and a macro doing precisely what \leavevmode does. But you cannot have a 'context-free' environment in current TeX, and, if I understand correctly, this is where Hans' problems stem from. I'm sure he has examples. Asides, it is also a lot more efficient: \leavevmode is a macro that expands into two tokens (\unhbox\voidb@x). Therefore, the command sequence when starting out in vertical mode is: * read \leavevmode * exec expand() - read \unvbox - unread \unvbox - exec new_graf() - reread \unvbox, now in hmode - exec unpackage() * exec scan_register_num() - read \voidb@x The new sequence is: * read \quitvmode * exec new_graf() (removing a number of subroutine calls and two input_stack entries)