On 19.06.2006 13:38:56 Manuel Mall wrote:
> On Monday 19 June 2006 16:45, Jeremias Maerki wrote:
> > On 18.06.2006 20:57:51 Simon Pepping wrote:
> > > On Sun, Jun 18, 2006 at 07:36:45PM +0800, Manuel Mall wrote:
> > > > Or should we use a more refined approach were we generate
> > > > initially an INFINITE penalty but if the page breaking cannot
> > > > find a solution we reduce the penalty on some/all of those
> > > > elements given an INFINITE penalty because of keeps and run the
> > > > page breaker again?
> > >
> > > I am in favor of this solution. There are generally two solutions:
> > > increase the tolerance, or force a solution. I think FOP already
> > > has a force parameter for this purpose.
> > +1. Yes, BreakingAlgorithm has a "force" parameter which is currently
> > set to true for page breaking. There's also a "threshold". We can
> > probably play with that first. See
> > LineLayoutManager.findOptimalBreakPoints().
> Yes, there is a force parameter and it seems to be always set to true
> for page breaking (and false for line breaking). But it doesn't seem to
> guarantee that breaks will be found otherwise we shouldn't get
> the "giving up after 50 retries" message.
Right, but that's because an INFINITE penalty cannot make a legal break.
We still need to set the penalties to a different value to get legal,
but very undesired break points.
> Anyone who understands how this force parameter is suppose to work?
I think it's called "secondpass" in Knuth's article. The "force" parameter
is used to force acceptance of a line whose adjustment ratio exceeds the
"threshold" value. Otherwise, there could be a situation where no break
solution is found (which is used in line-breaking). In page breaking, the
force parameter essentially allows overfull pages although that
situation's caught by the partOverflowRecovery which inserts empty
lines/parts. In the end, we always find a solution in line-breaking (by
letting the line overflow) and in page-breaking (by trying to defer the
overflowing element to a later part/page and giving up after 60 retries).