Am 16.03.2010 um 10:32 schrieb Andreas Harder:
Am 16.03.2010 um 01:32 schrieb Wolfgang Schuster:
Am 14.03.10 15:07, schrieb Andreas Harder:
If one removes the blank line after \section{Section} the output is correct, otherwise \TestSpace is ignored …
\def\DefineSectionBlank {\dotripleempty\doDefineSectionBlank}
\def\doDefineSectionBlank[#1][#2][#3]#4% {\edef\CurrentSection{#1}% \setvalue{#1:#2:\ifthirdargument\the\dimexpr#3\relax\fi}{#4}}
\def\SectionBlank#1#2% {\edef\CurrentSection{#1}% \executeifdefined{#1:#2:\LastSectionBlankSignal}{\executeifdefined{#1:#2:\the\dimexpr\zeropoint\relax}{\getvalue{#1:#2:}}}% \doif{#2}{after}{\SectionBlankSignal}}
\let\LastSectionBlankSignal\zeropoint
\EveryPar{\let\LastSectionBlankSignal\zeropoint}
\def\SectionBlankSignal {\setevalue{LastSectionBlankSignal}{\the\dimexpr\csname\CurrentSection Signal\endcsname\relax}}
% chapter
\DefineSectionBlank [Chapter] [before] {\blank[force,48pt]} \DefineSectionBlank [Chapter] [after] {\blank[20pt]}
\newsignal\ChapterSignal
\setuphead [chapter] [before=\SectionBlank{Chapter}{before}, after=\SectionBlank{Chapter}{after}]
% section
\newsignal\SectionSignal
\DefineSectionBlank [Section] [before] [\ChapterSignal] {\blank[18pt]} \DefineSectionBlank [Section] [before] {\blank[24pt]} \DefineSectionBlank [Section] [after] {\blank[18pt]}
\setuphead [section] [before=\SectionBlank{Section}{before}, after=\SectionBlank{Section}{after}]
\showgrid
\starttext
\chapter{Chapter}
\section{Section}
\chapter{Chapter}\edef\CurrentSection{Section}\SectionBlankSignal % tell \section the last header was \section too!
\section{Section}
\chapter{Chapter}
text
\section{Section}
\stoptext
Hello Wolfgang,
thank you for your elaborate example!
In the meantime I played a little with weak/strong blanks, before I figured out that this already works out of the box. It seams that the blank before a head gets a higher priority and overrides the blank after the previous head, so that there is no need for signals at all …?
In some projects it might look better if the space between two consecutive section heads is smaller than the regular space between section head and text. That's where signals are needed and where Wolfgang's code does a great job. Steffen