Joey McCollum schrieb am 16.05.2020 um 05:45:
> All right, I've found a tentative solution that appears to work in all
> cases, but I'd like to know more about why the code I'm patching was
> implemented in the first place, because I don't want to break anything
> else. According to the code in page-pcl.mkiv, the \stoppagecolumns macro
> has two implementations, \page_col_stop_yes and \page_col_stop_nop. The
> choice of which implementation is used is determined by which of two
> implementations of \startpagecolumns (\page_col_start_yes
> and \page_col_start_nop) is used. That choice, in turn, is made in
> the \page_col_start macro, in the following lines:
>
> ```
> \c_page_col_n_of_columns\pagecolumnsparameter\c!n\relax
> \ifnum\c_page_col_n_of_columns>\plusone
> \expandafter\page_col_start_yes
> \else
> \expandafter\page_col_start_nop
> \fi
> ```
>
> so if the number of columns (i.e., the n option for the
> pagecolumns environment) is more than one, the "yes" implementation of
> the start and stop commands is used.
>
> But this seems wrong. The naming convention for the two implementations
> ("yes" and "nop") suggests that they should be related the parameters
> "page=yes" and "page=no" (hence, no page, which is what I think "nop"
> abbreviates), but the choice of which implementation to use is
> determined not by the page parameter, but by the n parameter. Is this an
> error in the code, or am I just understanding this incorrectly? Is there
> some reason why a layout with more than one column would need special
> instructions to add a blank page after stopping the environment?
Why do you think "yes" and "nop" are related to the page-key?
> In any event, I was able to solve the problem by patching the
> \page_col_start_yes macro to invoke the \page_col_start_nop macro as
> follows:
>
> ```
>
> \unprotect
>
> \def\page_col_stop_yes
> {\page_col_stop_nop}
>
> \protect
>
> ```
>
> With this fix, the MWE I provided works regardless of which column the
> text ends in. I'm content to consider the problem solved, but I would
> certainly appreciate any feedback on my thoughts and questions about
> page-pcl.mkiv.
You broke now now normal single columns text after the pagecolumns
environment. A better fix is to add a check for the \column command at
the end of the environment and add it only when we aren't in the last
column.
\unexpanded\def\page_col_stop_yes
{%\column % \page_otr_eject_page
\ifnum\c_page_col_current<\c_page_col_n_of_columns
\column
\fi
\page
\endgroup
% \setupoutputroutine[\s!singlecolumn]%
\page_otr_command_set_vsize
\page_otr_command_set_hsize
\page
\endgroup}
Wolfgang