home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #16 / NN_1992_16.iso / spool / comp / text / tex / 9404 < prev    next >
Encoding:
Internet Message Format  |  1992-07-22  |  4.5 KB

  1. Path: sparky!uunet!zaphod.mps.ohio-state.edu!wupost!sdd.hp.com!usc!noiro.acs.uci.edu!unogate!mvb.saic.com!info-tex
  2. From: Walter D. Neumann <neumann@function.mps.ohio-state.edu>
  3. Newsgroups: comp.text.tex
  4. Subject: Bug in TeX's splitting routine??
  5. Message-ID: <9207222027.AA22118@brubeck.mps.ohio-state.edu>
  6. Date: Wed, 22 Jul 92 16:27:53 EDT
  7. Organization: Info-Tex<==>Comp.Text.Tex Gateway
  8. X-Gateway-Source-Info: Mailing List
  9. Lines: 103
  10.  
  11.    The TeX program seems to have bug in its routine for splitting
  12. insertions.  I would appreciate if some TeXpert can confirm my
  13. analysis.
  14.  
  15. THE PROBLEM:
  16.    According to the BOOK (pp.123/124), TeX will try to fit
  17. an insertion on the current page ("Steps 1,2,3" in the BOOK). If it
  18. fails to fit, it will try to split the insertion ("Step 4" in the
  19. BOOK), putting what it can fit on the current page and the rest on the
  20. next.  In particular, if the insertion has no possible break point, it
  21. should be split at its start, effectively moving it to the next page.
  22.    However, the splitting step (Step 4) can fail.  In the following
  23. file test.tex, TeX finds an insertion 62pt long (a 50pt rule plus the
  24. \bigskip added by the plain \topinsert macro) when it has 58pt left on
  25. the current page.  It should split it at its start, thus holding it
  26. over for the next page, and continue putting subsequent text on the
  27. current page.  Instead, the log shows TeX splitting at the end of the
  28. insertion, which is 4pt too big!  After this, TeX's documented
  29. behaviour leads to disaster:
  30.    It reduces the pagegoal by the insertion size (62pt) since it plans
  31. to put the insertion on the current page. This would give an overfull
  32. \vbox, 4pt too big.  Since it cannot put more material on the current
  33. page, it backs up to the breakpoint of least cost, which is BEFORE the
  34. insertion, and outputs the page. Thus, the insertion is held over to
  35. page 2 (as it should be), but nothing more is put on page 1, resulting
  36. in an enormously underfull \vbox.
  37.  
  38. THE EXPLANATION:
  39.    TeX takes the 4pt of shrink in the \bigskip it has added inside the
  40. insertion into account in looking for a split point in the insertion,
  41. but then does not take this shrink into account in pagebreaking.  The
  42. bug will thus appear whenever TeX is asked to split an insertion that
  43. will fit on the current page after subtracting its shrink. The program
  44. TeX SHOULD NOT take shrink into account in seeking to split an insertion.
  45.  
  46. THE SOLUTION??
  47.    The only solution, short of correcting the program TeX, is to make
  48. sure insertions NEVER have any shrink in them.  Since Plain TeX puts
  49. shrink into topinserts, this means correcting the Plain TeX macro. I
  50. have updated the style "newinsert.tex", which corrected several
  51. previously noticed bugs in Plain's insert routines, to include this
  52. correction.
  53.  
  54.  Version 1.2 of newinsert.tex is available by ftp on
  55.  shape.mps.ohio-state.edu in pub/osutex/OSUDEG/tools
  56.  
  57.  
  58.  
  59.  
  60. ------------test.tex-------------cut here-------------------------------
  61.  
  62. \tracingpages1
  63. \vsize=92pt
  64.  
  65. Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi
  66. Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi
  67. Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi Hi
  68.  
  69. \topinsert \hrule height 50pt \endinsert
  70.  
  71. Bye Bye Bye Bye Bye Bye Bye Bye Bye Bye Bye Bye Bye Bye Bye Bye Bye Bye
  72. Add as much extra text as you want here.
  73.  
  74. \bye
  75.  
  76. ----------end of test.tex-------cut here--------------------------------
  77.  
  78. ----------test.log------------------------------------------------------
  79.  
  80. This is TeX, C Version 3.14t3 (format=plain 91.8.16)  22 JUL 1992 10:53
  81. **test
  82. (test.tex
  83. %% goal height=92.0, max depth=4.0
  84. % t=10.0 g=92.0 b=10000 p=150 c=100000#
  85. % t=22.0 g=92.0 b=10000 p=150 c=100000#
  86. % split253 to 58.0,62.0 p=-10000
  87. % t=34.0 g=30.0 b=* p=0 c=*
  88.  
  89. Underfull \vbox (badness 10000) has occurred while \output is active
  90. \vbox(92.0+0.0)x469.75499
  91. ..etc.
  92.  
  93.  [1]
  94. %% goal height=92.0, max depth=4.0
  95. % t=10.0 g=30.0 b=10000 p=0 c=100000#
  96. % t=22.0 plus 1.0 g=30.0 b=10000 p=300 c=100000#
  97. % t=34.0 plus 1.0 g=30.0 b=* p=0 c=*
  98.  
  99. [2]
  100. %% goal height=92.0, max depth=4.0
  101. % t=10.0 g=92.0 b=10000 p=0 c=100000#
  102. % t=11.94444 plus 1.0fill g=92.0 b=0 p=-20000 c=-20000#
  103.  [3] )
  104. Output written on test.dvi (3 pages, 744 bytes).
  105.  
  106. -----------end of test.log---------------------------------------------
  107.  
  108.  
  109. --
  110.  Walter Neumann              Email:    neumann@mps.ohio-state.edu
  111.  Department of Mathematics                  neumann@ohstpy.bitnet
  112.  Ohio State University       Tel: 614-292-4886 (office)
  113.  Columbus, OH 43210           -292-4975(Math. Dept.) -292-1479 (Dept. Fax)
  114.