[NTG-context] horizontal headalternatives ignore indentnext

Henri Menke henrimenke at gmail.com
Wed Feb 27 21:39:44 CET 2019


Dear list,

If I choose the headalternative to be of horizontal type, e.g. “text”, the head
placement will ignore the indentnext option.  This can be traced back to the
\strc_rendering_stop_placement macro where there is a check

   \ifconditional\headisdisplay
     \useindentnextparameter\headparameter
   \else
     \ignoreparskip
     \noindentation % recently added, was a bug
   \fi

If the headalternative is vertical, \headdisplay is true, if it is horizontal,
\headdisplay is false.  It is easy to see that indentnext is not treated on
equal footing for these two, in fact, indentation is generally ignored for
horizontal headalternatives.  Commenting out \noindentation at least gives
indentation in the following paragraph but that is not a proper solution.

Below you can find a MWE with the fix from above applied.  Try commenting in
and out the \noindentation and see what happens to the second paragraph after
the heading.

Cheers, Henri

---

\unprotect

\def\strc_rendering_stop_placement
  {\n_strc_rendering_hang_lines\zerocount
   \ifconditional\headisdisplay
     \strc_rendering_initialize_line_hang
     % kind of special, we want to snap heads also according to local specs local
     \setbox\b_strc_rendering_head\hbox
       {\hskip\dimexpr\d_strc_rendering_local_leftoffset+\headparameter\c!margin\relax
        \box\b_strc_rendering_head
        \getheadsyncs % a latelua why not in the box
        }%
     \ifgridsnapping
       \applygridmethod
         {\headparameter\c!grid}%
         {\ifconditional\headisdisplay
            \strc_rendering_initialize_style_and_color_display\c!textstyle\c!textcolor
          \fi}%
         {\box\b_strc_rendering_head}
     \else
       \box\b_strc_rendering_head
     \fi
     \flushnotes % new, not really needed
     \endgraf
     \ifvmode
       \ifnum\n_strc_rendering_hang_lines>\zerocount
         \dorecurse\n_strc_rendering_hang_lines{\nointerlineskip\dosomebreak\nobreak\strut\endgraf}% to be checked
       \fi
       \nointerlineskip
       \dosomebreak\nobreak
     \fi
%      \getheadsyncs % a latelua why not in the box
   \else
     % somehow this goes ok even when we push in the margin probably because we gobble pars
     % in the process of collecting index entries etc
     \strut
     \flushnotes % new, here since we're in par mode
     \unhbox\b_strc_rendering_head
     \getheadsyncs % a latelua
     \ifconditional\headissomewhere
       \strc_sectioning_stay_on_this_line % test case: alternative=margintext and \startparagraph ..
     \else
      %\hskip\headnumberdistance\s!plus\headnumberdistance\s!minus.25\dimexpr\headnumberdistance\relax
       \hskip\headtextdistance\relax
       \strc_sectioning_inject_continuous_signal
     \fi
   \fi
   \ifconditional\headisdisplay
     \ifvmode
       \ifgridsnapping % important, font related depth, see comment
         \prevdepth\strutdp
       \else
         \prevdepth\d_strc_rendering_local_depth
       \fi
     \fi
   \fi
   \synctexpopline
   \egroup
   \egroup
   \ifconditional\headisdisplay
     \useindentnextparameter\headparameter
   \else
     \ignoreparskip
     % \noindentation % recently added, was a bug
   \fi}

\protect

\setupindenting[yes,big]
\setuphead[section][alternative=text,indentnext=yes]
\starttext
\section{Introduction}
\input knuth
\stoptext



More information about the ntg-context mailing list