- Q: do want globally non-cramped lines, or locally equally cramped lines.
- */
- Real demerit = abs (this_one.force_) + abs (prev.force_ - this_one.force_)
- + break_penalties
- /*
- This is rather ugly (not scale free), but we have to put a
- penalty breaking two zero-force lines. Otherwise, we don't get a
- unique solution (i.e.: line-breaks in short raggedright
- fragments.)
- */
- + 1e-5;
-
- if (!this_one.satisfies_constraints_b_)
- {
- /*
- If it doesn't satisfy constraints, we make this one
- really unattractive.
-
- add 20000 to the demerits, so that a break penalty
- of -10000 won't change the result */
- demerit = (demerit + 20000) >? 2000;
-
- demerit *= 10;
- }
-
- return demerit;
+ Q: do we want globally non-cramped lines, or locally equally
+ cramped lines?
+
+ There used to be an example file input/test/uniform-breaking to
+ demonstrate problems with this approach. When music is gradually
+ becoming denser, the uniformity requirement makes lines go from
+ cramped to even more cramped (because going from cramped
+ 3meas/line to relatively loose 2meas/line is such a big step.
+
+ */
+
+ Real demerit = abs (this_one.force_) + abs (prev.force_ - this_one.force_)
+ + break_penalties;
+
+ if (!this_one.satisfies_constraints_)
+ {
+ /*
+ If it doesn't satisfy constraints, we make this one
+ really unattractive.
+
+ add 20000 to the demerits, so that a break penalty
+ of -10000 won't change the result */
+ demerit = max ((demerit + 20000), 2000.0);
+
+ demerit *= 10;
+ }
+
+ return demerit;