I noticed a disparity in a short index with only two initials in it.
See the attached doub2.texi and doub2.dvi. See how the "bbb" line is
slightly below the "aaa" line.

I narrowed down the TeX control sequences that were causing input like
this. See doub.texi and doub.dvi attachments.

Through adding some \showbox control sequences to \balancecolumns, I
was able to see how the output was being split:

Index: texinfo.tex
===================================================================
--- texinfo.tex (revision 6559)
+++ texinfo.tex (working copy)
@@ -5336,6 +5336,7 @@
   %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
   \splittopskip = \topskip
   % Loop until we get a decent breakpoint.
+  \showbox0
   {%
     \vbadness = 10000
     \loop
@@ -5345,7 +5346,9 @@
       \global\advance\dimen@ by 1pt
     \repeat
   }%
-  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
+  \showbox1
+  \showbox3
+  %\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
   \setbox0=\vbox to\dimen@{\unvbox1}%
   \setbox2=\vbox to\dimen@{\unvbox3}%
   %

Box 0 is before splitting, split into boxes 1 and 3. See doub.log.

I believe the problem is that the final element of the vbox for the
first column is

@glue 0.0 plus 39.59999

This glue can easily stretch, so the glue between the initial A and
the "aaa" entry doesn't stretch as much.

This glue results from the second line in the following, from \initial:

  % We like breaks before the index initials, so insert a bonus.
  \nobreak
  \vskip 0pt plus 3\baselineskip
  \penalty 0
  \vskip 0pt plus -3\baselineskip

There's no such glue in the second column, which could explain the
difference in vertical spacing.

I found these lines were introduced in this change:
http://svn.savannah.gnu.org/viewvc?view=rev&root=texinfo&revision=1373

--- trunk/texinfo/doc/texinfo.tex 2004/08/20 13:12:54 1368
+++ trunk/texinfo/doc/texinfo.tex 2004/08/27 13:39:25 1373
@@ -3533,7 +3533,10 @@
   \removelastskip
   %
   % We like breaks before the index initials, so insert a bonus.
-  \penalty -300
+  \nobreak
+  \vskip 0pt plus 3\baselineskip
+  \penalty 0
+  \vskip 0pt plus -3\baselineskip
   %
   % Typeset the initial.  Making this add up to a whole number of
   % baselineskips increases the chance of the dots lining up from column
@@ -3543,10 +3546,9 @@
   % No shrink because it confuses \balancecolumns.
   \vskip 1.67\baselineskip plus .5\baselineskip
   \leftline{\secbf #1}%
-  \vskip .33\baselineskip plus .1\baselineskip
-  %
   % Do our best not to break after the initial.
   \nobreak
+  \vskip .33\baselineskip plus .1\baselineskip
 }}

 % \entry typesets a paragraph consisting of the text (#1), dot leaders, and

on 2004-08-27

* doc/texinfo.tex (\initial): when breaking the column before the
  initial, allow for some space at the bottom of the column, so
  the baselineskip is preserved (more or less).
  Don't give negative penalty, it encouradges creating of underfull
  columns with stretched baselineskip.
  At the end, the \nobreak should be before \vskip, not after it.

Changing it back to \penalty -300 produces better output, at least for
this example.

But I don't understand why the change was made in the first place.

Attachment: doub2.dvi
Description: TeX dvi file

Attachment: doub2.texi
Description: TeXInfo document

Attachment: doub.dvi
Description: TeX dvi file

Attachment: doub.texi
Description: TeXInfo document

This is e-TeXk, Version 3.141592-2.2 (Web2C 7.5.4) (format=etex 2010.5.17)  21 AUG 2015 22:53
entering extended mode
 file:line:error style messages enabled.
**\catcode126=12 \def\normaltilde{~}\catcode126=13 \let~\normaltilde  \input ./
doub.texi
(./doub.texi (/home/g/src/texinfo/PROJ_SVN/doc/dble-colums/../texinfo.tex
Loading texinfo [version 2015-08-21.13]:
\bindingoffset=\dimen16
\normaloffset=\dimen17
\pagewidth=\dimen18
\pageheight=\dimen19
\outerhsize=\dimen20
\outervsize=\dimen21
\cornerlong=\dimen22
\cornerthick=\dimen23
\topandbottommargin=\dimen24
\headlinebox=\box16
\footlinebox=\box17
\margin=\insert252
\EMsimple=\toks13
\groupbox=\box18
\groupinvalidhelp=\toks14
\mil=\dimen25
\exdentamount=\skip18
\inmarginspacing=\skip19
\centerpenalty=\count27
 pdf,
\tempnum=\count28
\lnkcount=\count29
\filename=\toks15
\filenamelength=\count30
\pgn=\count31
\toksA=\toks16
\toksB=\toks17
\toksC=\toks18
\toksD=\toks19
\boxA=\box19
\countA=\count32
\nopdfimagehelp=\toks20
 fonts,
\sffam=\fam8
\textleading=\dimen26
 markup,
\fontdepth=\count33
 glyphs,
\errorbox=\box20

page headings,
\titlepagetopglue=\skip20
\titlepagebottomglue=\skip21
\evenheadline=\toks21
\oddheadline=\toks22
\evenfootline=\toks23
\oddfootline=\toks24
 tables,
\tableindent=\dimen27
\itemindent=\dimen28
\itemmargin=\dimen29
\itemmax=\dimen30
\itemno=\count34
\multitableparskip=\skip22
\multitableparindent=\skip23
\multitablecolspace=\dimen31
\multitablelinespace=\skip24
\colcount=\count35
\everytab=\toks25
 conditionals,
\doignorecount=\count36
 indexing,
\whatsitskip=\skip25
\whatsitpenalty=\count37
\secondaryindent=\skip26
\partialpage=\box21
\doublecolumnhsize=\dimen32
 sectioning,
\unnumberedno=\count38
\chapno=\count39
\secno=\count40
\subsecno=\count41
\subsubsecno=\count42
\appendixno=\count43
\absseclevel=\count44
\secbase=\count45
\chapheadingskip=\skip27
\secheadingskip=\skip28
\subsecheadingskip=\skip29
 toc,
\tocfile=\write0
\contentsrightmargin=\skip30
\savepageno=\count46
\lastnegativepageno=\count47
\tocindent=\dimen33
 environments,
\lispnarrowing=\skip31
\envskipamount=\skip32
\circthick=\dimen34
\cartouter=\dimen35
\cartinner=\dimen36
\normbskip=\skip33
\normpskip=\skip34
\normlskip=\skip35
\lskip=\skip36
\rskip=\skip37
\nonfillparindent=\dimen37
\tabw=\dimen38
\verbbox=\box22

defuns,
\defbodyindent=\skip38
\defargsindent=\skip39
\deflastargmargin=\skip40
\defunpenalty=\count48
\parencount=\count49
\brackcount=\count50
 macros,
\paramno=\count51
\macname=\toks26
 cross references,
\auxfile=\write1
\savesfregister=\count52
\toprefbox=\box23
\printedrefnamebox=\box24
\infofilenamebox=\box25
\printedmanualbox=\box26
 insertions,
\footnoteno=\count53
\SAVEfootins=\box27
\SAVEmargin=\box28

(/home/g/src/texinfo/PROJ_SVN/doc/dble-colums/../epsf.tex
This is `epsf.tex' v2.7.4 <14 February 2011>
\epsffilein=\read1
\epsfframemargin=\dimen39
\epsfframethickness=\dimen40
\epsfrsize=\dimen41
\epsftmp=\dimen42
\epsftsize=\dimen43
\epsfxsize=\dimen44
\epsfysize=\dimen45
\pspoints=\dimen46
)
\noepsfhelp=\toks27
 localization,
\nolanghelp=\toks28
\countUTFx=\count54
\countUTFy=\count55
\countUTFz=\count56
 formatting,
\defaultparindent=\dimen47
 and turning on texinfo input format.) (./doub.aux)
\openout1 = `doub.aux'.

@cpindfile=@write2
@fnindfile=@write3
@vrindfile=@write4
@tpindfile=@write5
@kyindfile=@write6
@pgindfile=@write7

Appendix A
\openout0 = `doub.toc'.

> \box0=
@vbox(100.64395+0.0)x207.80492
.@glue(@topskip) 28.51752
.@hbox(7.48248+0.0)x207.80492, glue set 164.7653fil
..@hbox(0.0+0.0)x15.0
..@kern -15.0
..@textrm I
..@textrm N
..@textrm I
..@textrm T
..@textrm I
..@textrm A
..@textrm L
..@penalty 10000
..@glue(@parfillskip) 0.0 plus 1.0fil
..@glue(@rightskip) 0.0
.@glue 0.0 plus 1.0
.@glue(@baselineskip) 8.48543
.@hbox(4.71457+0.0)x16.42502
..@textrm a
..@textrm a
..@textrm a
.@glue 0.0 plus 39.59999
.@penalty 0
.@glue 0.0 plus -39.59999
.@glue 22.04396 plus 6.59999
.@glue(@parskip) 3.0 plus 2.0 minus 1.0
.@glue(@baselineskip) 5.71751
.@hbox(7.48248+0.0)x207.80492, glue set 149.7653fil
..@hbox(0.0+0.0)x15.0
..@textrm I
..@textrm N
..@textrm I
..@textrm T
..@textrm I
..@textrm A
..@textrm L
..@penalty 10000
..@glue(@parfillskip) 0.0 plus 1.0fil
..@glue(@rightskip) 0.0
.@glue 0.0 plus 1.0
.@glue(@baselineskip) 8.48543
.@hbox(4.71457+0.0)x16.42502
..@textrm a
..@textrm a
..@textrm a
.@penalty 0


./doub.texi:29: OK.
@balancecolumns ...ttopskip = @topskip @showbox 0 
                                                  {@vbadness = 10000 @loop @...
<output> {@balancecolumns 
                          @global @output = {@onepageout {@pagecontents @PAG...

@break ->@penalty -@@M 
                       
@enddoublecolumns ...pagecontents @PAGE }}}@eject 
                                                  @endgroup @pagegoal = @vsize 
l.29 @enddoublecolumns
                      
? 
> \box1=
@vbox(61.72197+0.0)x207.80492, glue set 0.30843
.@glue(@topskip) 28.51752
.@hbox(7.48248+0.0)x207.80492, glue set 164.7653fil
..@hbox(0.0+0.0)x15.0
..@kern -15.0
..@textrm I
..@textrm N
..@textrm I
..@textrm T
..@textrm I
..@textrm A
..@textrm L
..@penalty 10000
..@glue(@parfillskip) 0.0 plus 1.0fil
..@glue(@rightskip) 0.0
.@glue 0.0 plus 1.0
.@glue(@baselineskip) 8.48543
.@hbox(4.71457+0.0)x16.42502
..@textrm a
..@textrm a
..@textrm a
.@glue 0.0 plus 39.59999

./doub.texi:29: OK.
@balancecolumns ...en@ by 1pt @repeat }@showbox 1 
                                                  @showbox 3 @setbox 0=@vbox...
<output> {@balancecolumns 
                          @global @output = {@onepageout {@pagecontents @PAG...

@break ->@penalty -@@M 
                       
@enddoublecolumns ...pagecontents @PAGE }}}@eject 
                                                  @endgroup @pagegoal = @vsize 
l.29 @enddoublecolumns
                      
? 
> \box3=
@vbox(49.2+0.0)x207.80492
.@glue(@splittopskip) 28.51752
.@hbox(7.48248+0.0)x207.80492, glue set 149.7653fil
..@hbox(0.0+0.0)x15.0
..@textrm I
..@textrm N
..@textrm I
..@textrm T
..@textrm I
..@textrm A
..@textrm L
..@penalty 10000
..@glue(@parfillskip) 0.0 plus 1.0fil
..@glue(@rightskip) 0.0
.@glue 0.0 plus 1.0
.@glue(@baselineskip) 8.48543
.@hbox(4.71457+0.0)x16.42502
..@textrm a
..@textrm a
..@textrm a
.@penalty 0

./doub.texi:29: OK.
@balancecolumns ...@repeat }@showbox 1 @showbox 3 
                                                  @setbox 0=@vbox to@dimen@ ...
<output> {@balancecolumns 
                          @global @output = {@onepageout {@pagecontents @PAG...

@break ->@penalty -@@M 
                       
@enddoublecolumns ...pagecontents @PAGE }}}@eject 
                                                  @endgroup @pagegoal = @vsize 
l.29 @enddoublecolumns
                      
? 

Completed box being shipped out [1]
\vbox(643.2+0.0)x433.62
.\vbox(0.0+0.0)x433.62, glue set 14.0fil
..\glue -22.5
..\hbox(8.5+0.0)x433.62, glue set 433.62fil
...\vbox(8.5+0.0)x0.0
...\glue 0.0 plus 1.0fil
..\glue 0.0 plus 1.0fil minus 1.0fil
.\vbox(643.2+0.0)x433.62, glue set 552.91805fill
..\openout2=doub.cp
..\openout3=doub.fn
..\openout4=doub.vr
..\openout5=doub.tp
..\openout6=doub.ky
..\openout7=doub.pg
..\mark{\gdef \thischaptername {Index}\gdef \thischapternum {A}\gdef \thischapt
er \ETC.}
..\mark{\gdef \thischaptername {Index}\gdef \thischapternum {A}\gdef \thischapt
er \ETC.}
..\write0{@appentry{Index}{A}{}{\folio }}
..\glue(\topskip) 24.00002
..\vbox(11.99998+3.35999)x433.62
...\hbox(11.99998+3.35999)x433.62, glue set 271.8201fil
....\hbox(0.0+0.0)x0.0
....\chaprm A
....\chaprm p
....\chaprm p
....\kern0.54
....\chaprm e
....\chaprm n
....\chaprm d
....\chaprm i
....\chaprm x
....\glue 6.48 plus 3.23999 minus 2.15999
....\chaprm A
....\kern 9.71999
....\chaprm I
....\chaprm n
....\chaprm d
....\chaprm e
....\chaprm x
....\penalty 10000
....\glue(\parfillskip) 0.0 plus 1.0fil
....\glue(\rightskip) 0.0 plus 38.87997
..\penalty 10000
..\glue 12.0 plus 4.0 minus 4.0
..\penalty 10000
..\kern -36.0
..\kern 13.2
..\hbox(61.72197+0.0)x433.62, glue set 18.01016fil
...\vbox(61.72197+0.0)x207.80492, glue set 0.30843
....\glue(\topskip) 28.51752
....\hbox(7.48248+0.0)x207.80492, glue set 164.7653fil
.....\hbox(0.0+0.0)x15.0
.....\kern -15.0
.....\textrm I
.....\textrm N
.....\textrm I
.....\textrm T
.....\textrm I
.....\textrm A
.....\textrm L
.....\penalty 10000
.....\glue(\parfillskip) 0.0 plus 1.0fil
.....\glue(\rightskip) 0.0
....\glue 0.0 plus 1.0
....\glue(\baselineskip) 8.48543
....\hbox(4.71457+0.0)x16.42502
.....\textrm a
.....\textrm a
.....\textrm a
....\glue 0.0 plus 39.59999
...\glue 0.0 plus 1.0fil
...\vbox(61.72197+0.0)x207.80492, glue set 12.52197
....\glue(\splittopskip) 28.51752
....\hbox(7.48248+0.0)x207.80492, glue set 149.7653fil
.....\hbox(0.0+0.0)x15.0
.....\textrm I
.....\textrm N
.....\textrm I
.....\textrm T
.....\textrm I
.....\textrm A
.....\textrm L
.....\penalty 10000
.....\glue(\parfillskip) 0.0 plus 1.0fil
.....\glue(\rightskip) 0.0
....\glue 0.0 plus 1.0
....\glue(\baselineskip) 8.48543
....\hbox(4.71457+0.0)x16.42502
.....\textrm a
.....\textrm a
.....\textrm a
....\penalty 0
..\penalty 10000
..\glue 0.0 plus 1.0fill

\openout2 = `doub.cp'.

\openout3 = `doub.fn'.

\openout4 = `doub.vr'.

\openout5 = `doub.tp'.

\openout6 = `doub.ky'.

\openout7 = `doub.pg'.

 ) 
Here is how much of TeX's memory you used:
 2617 strings out of 97732
 25895 string characters out of 1217924
 52239 words of memory out of 1000000
 3654 multiletter control sequences out of 10000+50000
 32425 words of font info for 113 fonts, out of 500000 for 2000
 51 hyphenation exceptions out of 1000
 11i,4n,16p,337b,549s stack positions out of 1500i,500n,5000p,200000b,5000s

Output written on doub.dvi (1 page, 340 bytes).

Reply via email to