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.
doub2.dvi
Description: TeX dvi file
doub2.texi
Description: TeXInfo document
doub.dvi
Description: TeX dvi file
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).
