From 28f104e641e84d484a22266d87536ef7d765b223 Mon Sep 17 00:00:00 2001 From: Hans Hagen Date: Tue, 25 Sep 2018 15:11:00 +0200 Subject: 2018-09-25 14:23:00 --- tex/context/base/mkiv/page-pcl.mkiv | 77 +++++++++++++++++++++++++++++-------- 1 file changed, 62 insertions(+), 15 deletions(-) (limited to 'tex/context/base/mkiv/page-pcl.mkiv') diff --git a/tex/context/base/mkiv/page-pcl.mkiv b/tex/context/base/mkiv/page-pcl.mkiv index 5b7d0ae8a..140444fc2 100644 --- a/tex/context/base/mkiv/page-pcl.mkiv +++ b/tex/context/base/mkiv/page-pcl.mkiv @@ -30,19 +30,18 @@ \definemeasure[threecolumns][\dimexpr\plusthree\columnwidth+\plustwo \columndistance\relax] \definemeasure[fourcolumns] [\dimexpr\plusfour \columnwidth+\plusthree\columndistance\relax] -\newcount\c_page_col_n_of_columns \c_page_col_n_of_columns\plusone -\newcount\c_page_col_current \c_page_col_current \plusone -\newdimen\d_page_col_distance -\newdimen\d_page_col_max_height -\newdimen\d_page_col_max_width -%newdimen\d_page_col_balance_step -\newdimen\d_page_col_column_width - -\newdimen\d_page_col_top_height -\newdimen\d_page_col_top_width - -\newdimen\d_page_col_available -\newdimen\d_page_col_sofar +\newcount \c_page_col_n_of_columns \c_page_col_n_of_columns\plusone +\newcount \c_page_col_current \c_page_col_current \plusone +\newdimen \d_page_col_distance +\newdimen \d_page_col_max_height +\newdimen \d_page_col_max_width +%newdimen \d_page_col_balance_step +\newdimen \d_page_col_column_width +\newdimen \d_page_col_top_height +\newdimen \d_page_col_top_width +\newdimen \d_page_col_available +\newdimen \d_page_col_sofar +\newconditional\c_page_col_page %D We need to step over empty columns. @@ -700,6 +699,7 @@ \setuppagecolumns [\c!distance=1.5\bodyfontsize, \c!n=\plustwo, + \c!page=\v!yes, %\c!align=, % inherit (also replaces tolerance) %\c!before=, %\c!after=, @@ -727,9 +727,39 @@ \ifdefined \columnwidth \else \newdimen\columnwidth \fi \ifdefined \columndistance \else \newdimen\columndistance \fi +\def\page_col_pickup_preceding + {\begingroup + \setupoutputroutine[\s!mixedcolumn]% + \c_page_mix_routine\c_page_mix_routine_intercept + \page_otr_trigger_output_routine + \ifvoid\b_page_mix_preceding \else + % moved here, before the packaging + \page_postprocessors_linenumbers_deepbox\b_page_mix_preceding + % we need to avoid unvboxing with successive balanced on one page + \global\setbox\b_page_mix_preceding\vbox\bgroup + % yes or no: \forcestrutdepth + \unvbox\b_page_mix_preceding + \forcestrutdepth + \egroup + \wd\b_page_mix_preceding\makeupwidth + \global\d_page_mix_preceding_height\ht\b_page_mix_preceding + \fi + \endgroup} + +\def\page_col_flush_preceding + {\ifvoid\b_page_mix_preceding \else + % this is just one method but ok for now + \begingroup + % we might need more but for now this is ok + \setupfloat[\c!spacebefore=,\c!spaceafter=]% + \startplacefigure[\c!location={\v!top,\v!none}]% + \box\b_page_mix_preceding + \stopplacefigure + \endgroup + \fi} + \unexpanded\def\startpagecolumns - {\page - \begingroup + {\begingroup \begingroup \dosingleempty\page_col_start} @@ -738,6 +768,15 @@ {\let\currentpagecolumns\empty \setuppagecolumns[#1]}% {\edef\currentpagecolumns{#1}}% + \edef\p_page{\pagecolumnsparameter\c!page}% + \ifx\p_page\empty + \setfalse\c_page_col_page + \else\ifx\p_page\v!no + \setfalse\c_page_col_page + \else + \settrue\c_page_col_page + \page[\p_page]% + \fi\fi \c_page_col_n_of_columns\pagecolumnsparameter\c!n\relax \ifnum\c_page_col_n_of_columns>\plusone \expandafter\page_col_start_yes @@ -775,7 +814,15 @@ % \usesetupsparameter\pagecolumnsparameter % + % This will become a method but for now it's good enough + % + \ifconditional\c_page_col_page\else + \page_col_pickup_preceding + \fi \setupoutputroutine[\s!pagecolumn]% + \ifconditional\c_page_col_page\else + \page_col_flush_preceding + \fi % \setupfloats[\c!ntop=\plusthousand]% % \setupfloats[\c!nbottom=\plusthousand]% -- cgit v1.2.3