[NTG-pdftex] \quitvmode patch

Taco Hoekwater taco at elvenkind.com
Thu Jul 15 13:39:59 CEST 2004

On Thu, 15 Jul 2004 12:21:57 +0200
Heiko Oberdiek <oberdiek at uni-freiburg.de> wrote:

> 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 at 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 at x

The new sequence is:

* read \quitvmode
* exec new_graf()

(removing a number of subroutine calls and two input_stack entries)

More information about the ntg-pdftex mailing list