diff options
Diffstat (limited to 'tex/context/base/page-mix.lua')
-rw-r--r-- | tex/context/base/page-mix.lua | 42 |
1 files changed, 27 insertions, 15 deletions
diff --git a/tex/context/base/page-mix.lua b/tex/context/base/page-mix.lua index f8f4c8378..220972caf 100644 --- a/tex/context/base/page-mix.lua +++ b/tex/context/base/page-mix.lua @@ -59,7 +59,8 @@ pagebuilders = pagebuilders or { } pagebuilders.mixedcolumns = pagebuilders.mixedcolumns or { } local mixedcolumns = pagebuilders.mixedcolumns -local forcedbreak = -123 +local a_checkedbreak = attributes.private("checkedbreak") +local forcedbreak = -123 -- initializesplitter(specification) -- cleanupsplitter() @@ -466,24 +467,35 @@ local function setsplit(specification) -- a rather large function lastlocked = nil lastcurrent = nil elseif penalty == forcedbreak then - lastlocked = nil - lastcurrent = nil - local okay, skipped = gotonext() - if okay then + local needed = current[a_checkedbreak] + local proceed = not checked or checked == 0 + if not proceed then + local available = target - height + proceed = needed >= available if trace_state then - report_state("cycle: %s, forced column break, same page",cycle) - if skipped ~= 0 then - report_state("%-7s > column %s, discarded %p","penalty",column,skipped) - end + report_state("cycle: %s, column %s, available %p, needed %p, %s break",cycle,column,available,needed,proceed and "forcing" or "ignoring") end - else - if trace_state then - report_state("cycle: %s, forced column break, next page",cycle) - if skipped ~= 0 then - report_state("%-7s > column %s, discarded %p","penalty",column,skipped) + end + if proceed then + lastlocked = nil + lastcurrent = nil + local okay, skipped = gotonext() + if okay then + if trace_state then + report_state("cycle: %s, forced column break, same page",cycle) + if skipped ~= 0 then + report_state("%-7s > column %s, discarded %p","penalty",column,skipped) + end end + else + if trace_state then + report_state("cycle: %s, forced column break, next page",cycle) + if skipped ~= 0 then + report_state("%-7s > column %s, discarded %p","penalty",column,skipped) + end + end + return true end - return true end elseif penalty < 0 then -- we don't care too much |