Heiko Oberdiek wrote:
At least a smaller example (without different spacefactors -- \discretionary does not change the spacefactor):
\tracingparagraphs=1 \nopagenumbers \parindent=0pt \setbox0=\hbox{C} \hsize=\wd0
C\par
\discretionary{AA}{BB}{C}\par
\bye
Hi, I have made a variant of the example: \parindent=0pt \setbox0=\hbox{C} \hsize=\wd0%\advance\hsize7.8pt C\par \discretionary{AA}{BBB}{C}\par \bye TeX reports an overfull box of 7.7778pt for the AAs. If I advance the hsize by something less than this then the effect remains. If I advance the hsize by more (as included in comments above) the effect disappears and C is typeset. I concluded that in the handling of discretionaries the comparison is made against a width containing the width of pre_break instead of the replacement text. This seems to be a bug in TeX. I have traced it down to section 869. There the sum of the width of the nodes of pre_break is added to act_width. If I replace the first loop with a construction similar to the second loop the problem seems to disappear. I do not claim that I have completely understood what's going on. I just wanted to share my insights. Ciao Gerd