[texhax] Isthis a bug in LaTex?
Ian Collier
imc at comlab.ox.ac.uk
Thu Sep 18 19:00:24 CEST 2003
rsherry8 at comcast.net ("Robert Sherry") writes:
[snip]
> \flushleft
> I claim that a graph G can not have a poor subgraph with only one
> or two vertices but it can have a poor subgraph
> with only three vertices. If G is a graph with exactly
> three vertices and it has a poor subgraph then I claim G is complete.
> \newline
> \newline
>The problem is the output has a separate line for the words "graph with". I
>do not
>understand why? Have I found a bug?
Firstly, flushleft is supposed to be an environment rather than a
command, but that's a minor issue. The equivalent which can be used
as a command is \raggedright, but it doesn't do a terrific job for
reasons explained here:
http://www.tex.ac.uk/cgi-bin/texfaq2html?label=ragright
This page suggests a package called ragged2e which does the job properly.
Secondly, \newline probably isn't what you want - it's probably better
to use \\[1ex] or something similar to add the appropriate amount of
vertical space.
Finally, what is happening in the above example is this: the \flushleft
command sets TeX's `\rightskip' register to an infinitely-stretchable
amount of glue. Basically, what this tells TeX is that it doesn't
matter how long or short a line of text is (as long as it doesn't
extend beyond the right-hand margin), and so TeX will sometimes feel
free to put a very short line in the middle of the paragraph. With
the two newlines, what you effectively have is a paragraph followed by
\break\break\par and for some reason this causes TeX to select "graph
with" as a short line rather than breaking after "claim" as it otherwise
does.
**Question for TeX Grandmasters**
Using TeX 3.14159 and ending the file with \break\break (instead of
\newline\newline) I'm getting this (edited output):
@secondpass
@@48: line 2.2 t=200 -> @@19
graph with
@@51: line 3.2 t=300 -> @@48
exactly...I claim
@@71: line 3.2 t=300 -> @@48
@@72: line 3.3 t=2801 -> @@44
G is com-plete.
@@79: line 4.2 t=400 -> @@71
@@80: line 4.3 t=1200 -> @@51
@\penalty via @@51 b=62 p=-10000 d=5184
@\penalty via @@71 b=0 p=-10000 d=100
@@81: line 4.2 t=400 -> @@71
@@82: line 4.3 t=5484 -> @@51
@\penalty via @@82 b=10000 p=-10000 d=*
@@83: line 5.0 t=5484 -> @@82
@\par via @@83 b=0 p=-10000 d=*
@@84: line 6.2- t=5484 -> @@83
I question (a) why b=10000 on that penultimate break, given that
\rightskip has infinite stretchability, and (b) why the break has
to be via @@82 rather than @@81 when on the face of it @@81 would
seem to give fewer demerits.
Note that if I add a printing character (say, `x') after the second
\break then we get, as expected*:
@@81: line 4.2 t=400 -> @@71
@@82: line 4.3 t=5484 -> @@51
@\penalty via @@81 b=0 p=-10000 d=100
@\penalty via @@82 b=0 p=-10000 d=100
@@83: line 5.2 t=500 -> @@81
x
@\par via @@83 b=0 p=-10000 d=*
@@84: line 6.2- t=500 -> @@83
But how did the `x' affect the badness of the _previous_ line?
It seems to be something trigged only by something of the form:
\break\break\hfil (the \hfil is of course supplied by \parfillskip when
the `x' is not present). Either I am confused or this is a subtle
bug in TeX.
--
* (this involves setting \pretolerance=-10 to force a second pass)
--
---- Ian Collier : imc at comlab.ox.ac.uk : WWW page below
------ http://users.comlab.ox.ac.uk/ian.collier/imc.shtml
More information about the texhax
mailing list