On 19.06.2006 14:54:06 Luca Furini wrote: > Manuel Mall wrote: > > > 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. > > The "force" parameter requires the algorithm to find a set of breaks, even > if some of them could require an adjustment ratio greater than the > maximum one, or smaller that -1 (those breaks are represented by the nodes > stored in lastTooLong and lastTooShort). > > During the line breaking, it is first set to "false", so that we first try > and look for "good" line breaks, and set to false only if the first tries > failed, and we need to create some ugly lines (too short or too long, just > as underfull and overfull lines in tex). > > The last call to findBreakingPoints (which, for the page breaking, is also > the first one) needs to have force = true, as we need to have some breaks > to continue (if force == false and the algorithm fails we have no breaks > after the end of the method). > > The "overflow recovery" mechanism tries avoiding the use of a "long" break > (i.e. one involving some content to overflow the available space), > inserting an empty page and trying againg: this works if one of the > following pages will be taller. > > This could happen, for example, when we have a block spanning all columns > and then some other content that must flow in the columns: due to the > presence of the spanning block, the first page will have some short > columns, while the following pages could use the whole body height (this > example makes me think that 50 attempts could be even too many, but maybe > there are other situations where such a large number is really needed).
Good point. 50 is an arbitrary value I chose, just to make sure. :-) It's pretty unrealistic to expect more than 5 or 10 empty pages before a page is found with more available BPD. > Should this strategy not work (for example, we are trying to place a 30cm > image inside a 20cm-high body), instead of throwing the exception we could > use the lastTooLong node (which always exists), after removing the "empty > page" nodes. Good idea. Jeremias Maerki