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 …? Greeting Andreas