Here's TeX's line-breaking approach (as I understand it) in a nutshell:
-
If
\pretolerance
is positive, try to break a paragraph into lines without inserting discretionary hyphens and without exceeding a badness of\pretolerance
. -
If method 1 fails, allow hyphenation and try not to exceed a badness of
\tolerance
. -
If method 2 fails and
\emergencystretch
is positive, try again with the amount of "tolerable" white space per text line increased by\emergencystretch
.
On p. 96 of the TeXbook, Knuth reports experiments showing that "the first pass [without hyphenation] succeeds more than 90% of the time" for "fairly wide" lines, but fails quickly for "very narrow" ones. He also states that the first pass is done "[i]n order to save time". My interpretation of this is as follows:
-
For cases where line-breaking without hyphenation fails, one would in fact save time by omitting the first pass (i.e., setting
\pretolerance=-1
). -
It is also possible (though maybe not very likely for languages with a small average word length) that the first pass will succeed, but that allowing hyphenation would have resulted in a solution with smaller badness.
-
As Knuth nevertheless chose a default value of
100
for\pretolerance
, he must have regarded the net time savings from "trying without hyphenation" as worthwile, given the average processing power of the time when he adopted these settings.
I don't know if the default settings for TeX's line-breaking algorithm changed over time. But isn't it possible that formerly substantial net time savings are irrelevant today?
So: Is it still worthwhile to let TeX try line-breaking without hyphenation? Or is it preferable by now to adopt \pretolerance=-1
as default setting?
Best Answer
It does not have any serious impact on performance on modern machines and I can vouch on old machines as well. Depending on your settings more than 50% of text would normally pass through the first pass. Here is a figure of two tests (the red numbers denote badness):
The tests were carried out using code posted by Wilson on Git. Personally I would recommend let the \pretolerance stay at 100 it will probably be faster (as you do not force the other passes in the majority of cases).