[NTG-context] Margin heading problem, was Re: sections

Rik Kabel context at rik.users.panix.com
Thu Jun 5 23:41:50 CEST 2014


On 2014-06-02 19:16, Rik Kabel wrote:
> On 2014-06-02 04:09, Hans Hagen wrote:
>> On 6/2/2014 3:44 AM, Rik Kabel wrote:
>>> On 2014-06-01 12:52, Hans Hagen wrote:
>>>> On 6/1/2014 5:40 PM, Rik wrote:
>>>>
>>>>> Is this also the cause of problems I noted with heading placed into
>>>>> the
>>>>> margin, as in the example below?
>>>>
>>>> no, unrelated, try this:
>>>>
>>>> \setuphead
>>>>   [section]
>>>>   [after={\strut\blank[-2*line,samepage,disable]},
>>>>    command=\SectionCommand,
>>>>    distance=0pt]
>>>>
>>>> \define[2]\SectionCommand{\inleft{XXXXXX}}
>>>
>>> That was fine until it ran into \setupwhitespace with a non-zero value.
>>> Fiddling with the after key \blank does not appear to help.
>>>
>>>     \define[2]\MarginHead{\inmargin{#1\\#2}}
>>>     \setuphead    [section]
>>>                    [command=\MarginHead,
>>>                     distance=0pt,
>>> after={\strut\blank[-2*line,samepage,disable]}]
>>>     %% With no \setupwhitespace, or any \setupwhitespace setting that
>>>     %%   results in zero interparagraph whitespace, all is well.
>>>     %setupwhitespace      [none]%    okay
>>>     %setupwhitespace      [fix]%     okay
>>>     %% With non-zero interparagraph whitespace, the heading separates
>>>     %%   from the text
>>>     \setupwhitespace      [line]%    bad
>>>     \starttext
>>>     \startchapter[title={Weisman}]
>>>       \input weisman\par
>>>       \input weisman
>>>     \startsection[title={Thuan}]
>>>       \input thuan\par
>>>       \input thuan
>>>     \stopsection
>>>     \stopchapter
>>>     \stoptext
>>
>> you can always skip back whitespace or add 'nowhite'
>
> Well, nowhite is a start, but the solution is still a way off.
> Meanwhile, the following works for non-grid layouts with reasonable
> values for \setupwhitespace, although perhaps somebody can come up with
> a more eloquent way to write it:
>
>     \newdimen\SectionHeadSkip
>     \SectionHeadSkip\dimexpr-2\lineheight-\parskip\relax
>     \setuphead
>        [section]
>        [command=\SectionCommand,
>         distance=0pt,
>         after={\strut\blank[\the\SectionHeadSkip,samepage,disable,nowhite]},
>        ]
>       \define[2]\SectionCommand
>         {\inmargin{#1 – #2}}
>

A better formulation (better because it preserves any stretch that might 
defined by \setupwhitespace):

	\setupwhitespace [big]
	\newdimen\Parskip
	\Parskip\dimexpr-\parskip\relax
	\setuphead
	  [section]
	  [command=\SectionCommand,
	   distance=0pt,
	   after={\strut\blank[\the\Parskip,-2*line,
				samepage,disable,nowhite]},
   ]
	\define[2]\SectionCommand
	  {\inmargin{#1 – #2}}

As with the previous, \Parskip has to be redefined if \setupwhitespace 
changes, so it is probably best left until after \starttext, when the 
body font is established.

> When enabling grid layouts, the number of lines needs to be adjusted.

No, it is not stable on grid layouts. Sections that have a figure placed 
as the first thing will be a line off.

>
> Floats that appear as the first thing after a heading may present
> problems, especially with larger values for \setupwhitespace. (The
> default, with no location= specified, is pretty good, but when
> location={left,force} or such, there is often an unwanted offset from
> the header. and page breaks still appear between the heading and figure
> at times, despite the samepage setting for \blank.)
>
> So, this is quite fragile. It requires careful checking of every
> heading, and manual tuning when one breaks. Not a desirable solution,
> but at least it is possible.

Still fragile.

-- 
Rik Kabel



More information about the ntg-context mailing list