Section head with underlining to width of last line
From ConTeXt wiki
A style called for section headings to be followed by a rule which extends only the width of the text. More tricky was the need to make sure that if the text ran onto another line, it was the length of the last line that was to be followed.
Hans came up with this cleverness, showing two alternate ways of doing it:
\def\FirstSolution#1#2% {\vbox\bgroup \setbox0\hbox{#1} \hsize.4\textwidth \beginshapebox#2\endshapebox \gdef\SetLastLineWidth{\xdef\LastLineWidth{\the\wd\scratchbox}}% \reshapebox {\setbox\scratchbox\hbox{\unhbox\shapebox}% \SetLastLineWidth \globallet\SetLastLineWidth\relax \box\scratchbox}% \scratchdimen\dimexpr\wd0+.25em+\LastLineWidth\relax % \setbox2\ruledvbox {\innerflushshapebox} % why is correction needed \setbox2\vbox {\vskip-\lineskip\innerflushshapebox} \setbox0\vbox to \ht2{\box0} \hbox{\box0\hskip.25em\box2} \offinterlineskip \vskip.25ex \blackrule[width=\scratchdimen,height=1pt] \egroup} \doglobal\newcounter\NextLinePos \def\SecondSolution#1#2% {\vbox\bgroup \hsize.4\textwidth \doglobal\increment\NextLinePos \setbox\scratchbox\hbox{#1} \hbox{\vtop{\copy\scratchbox}\hskip.25em\vtop{#2}}% \offinterlineskip \scratchdimen\dimexpr\wd\scratchbox+.25em+ \MPx{e:npl:\NextLinePos}-\MPx{b:npl:\NextLinePos}\relax \vskip.25ex \blackrule[width=\scratchdimen,height=1pt] \egroup} \def\DoSecondSolution#1% {\bpos{npl:\NextLinePos}#1\epos{npl:\NextLinePos}} % \showstruts \setuphead[section][command=\FirstSolution] \starttext \section{is this nice or not} \section{is this nice or not nice, that's the question} \setuphead[section][command=\SecondSolution,deeptextcommand=\DoSecondSolution] \section{is this nice or not} \section{is this nice or not nice, that's the question} \stoptext
produces
As if that wasn't enough, Taco pointed out that \lastlinewidth is the easy route to finding the width of the last line. Use something like:
\optimizedisplayspacingtrue\setlastlinewidth % core-mat macro
\global\advance\lastlinewidth-\hangindent\par % adjust
\blackrule[width=\lastlinewidth,height=1pt]

