[NTG-context] unwanted head behavior

Hans Hagen pragma at wxs.nl
Thu Apr 7 12:31:38 CEST 2016


On 4/7/2016 8:28 AM, Zhichu Chen wrote:
> If I understand correctly, the "continue=yes" key prevents a new page
> generated by a lower-level structure, e.g., section, following a
> higher-level structure, e.g., chapter.
>
> Then why the checking is so complex in strc-sec.mkiv:
> ==================================
> \def\strc_sectioning_handle_page_nop
>    {\edef\p_continue{\headparameter\c!continue}%
>     \ifx\p_continue\v!yes
>       \ifnum\previoussectioncountervalue=\zerocount
>         \strc_sectioning_check_layout
>       \else\ifnum\currentsectioncountervalue>\zerocount
>         \strc_sectioning_check_layout
>       \fi\fi
>     \else
>       \strc_sectioning_check_layout
>     \fi}
> ==================================
>
> I temporarily changed the definition to:
> ==================================
> \newcount\previousheadlevel
> \previousheadlevel\plusone
> \def\strc_sectioning_handle_page_nop
>    {\edef\p_continue{\headparameter\c!continue}%
>     \ifx\p_continue\v!yes
>       \ifnum\currentheadlevel>\previousheadlevel\else
>         \strc_sectioning_check_layout
>       \fi
>     \else
>       \strc_sectioning_check_layout
>     \fi
>     \previousheadlevel\currentheadlevel}
> ==================================
>
> Seems fine.

\def\currentsectioncountervalue 
{\clf_depthnumber\numexpr\thenamedheadlevel\currenthead\relax}
%def\previoussectioncountervalue{\clf_depthnumber\numexpr\thenamedheadlevel\currenthead+\minusone\relax}
\def\previoussectioncountervalue{\clf_depthnumber\numexpr\thenamedheadlevel\previoushead\relax}

\let\previoushead\empty

\def\strc_sectioning_handle_page_nop
   {\edef\p_continue{\headparameter\c!continue}%
    \ifx\p_continue\v!yes
      \ifx\currenthead\previoushead % not really needed
         \strc_sectioning_check_layout
      \else\ifnum\previoussectioncountervalue=\zerocount
         \strc_sectioning_check_layout
      \else\ifnum\currentsectioncountervalue>\zerocount
         \strc_sectioning_check_layout
      \fi\fi\fi
    \else
      \strc_sectioning_check_layout
    \fi
    \globallet\previoushead\currenthead}

\def\strc_sectioning_handle_page_yes
   {\ifconditional\c_strc_sectioning_ignore_page
      \setfalse\c_strc_sectioning_ignore_page
    \else
      % beware, these numbers are not yet know here
      \strc_sectioning_handle_page_nop
      \edef\p_aligntitle{\headparameter\c!aligntitle}%
      \ifx\p_aligntitle\v!float
          \ifconditional\c_strc_sectioning_auto_break
            \vspacing[\v!samepage-\currentheadlevel]%
          \fi
          \headparameter\c!before\relax
          \indent
      \else
          \page_otr_command_flush_side_floats
          \ifconditional\c_strc_sectioning_auto_break
            \vspacing[\v!samepage-\currentheadlevel]%
          \fi
          \headparameter\c!before\relax
      \fi
      \global\c_strc_sectioning_preceding_level\currentheadlevel
    \fi
    \globallet\previoushead\currenthead}

but it really needs testing with other cases


-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
       tel: 038 477 53 69 | www.pragma-ade.com | www.pragma-pod.nl
-----------------------------------------------------------------


More information about the ntg-context mailing list