ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Hans Hagen <pragma@wxs.nl>
Subject: Re: Rule under length of last line
Date: Mon, 31 Jul 2006 20:56:24 +0200	[thread overview]
Message-ID: <44CE5258.8070806@wxs.nl> (raw)
In-Reply-To: <44CE370F.8030202@capdm.com>

Duncan Hothersall wrote:
> I've had a last-minute impossible request for a typesetting style, and
> having already told the person it can't be done in the time available,
> wondered whether it can actually be done at all.
>   
depends on the amount of time, and it the case of customers what they 
are willing to pay -)

many things can be done, esp because designers are not that accustomed 
to thinking on programmable designs
> The request is for a subsection heading to have a continuous horizontal
> rule under both its number and title, at a distance of about 6pt from
> the baseline (i.e. not underlining), extending just the length of the
> heading. I can do that by setting both number and title in a TABLE,
> setting the offsets and specifying the bottom frame to be on - no problem.
>
> However, the tricky part is that where a longer title runs beyond one
> line, the line should only appear under the last line, and only to the
> length of the last line of text.
>
> In other words, for viewers with fixed width fonts:
>
> 1.1.1 Short title
> -----------------
>
> 1.1.2 Longer title which wraps onto a
>       second line like this
> ---------------------------
>
> We generate the ConTeXt code from XML, so ideally a solution wouldn't
> require the last line to be set separately, but would just work whether
> the heading was single or multiple line. What I'm really looking for is
> a subsection setup that will automatically do this whatever length of title.
>
> I have to say I think it's quite ugly, but can anyone give me a pointer
>   
you don't wanna know hwo much time i've spent in programming ugly stuff -)
> as to how it could be done? Is there a box left at the end of a par
> which shows the width of the last line?
>
> As I say, I've already said no, so this is just out of interest, no
> urgency.
>   
anyhow, it's doable; the first solution took me 30 minutes, the second one 15 minutes

\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=2pt]
   \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=2pt]
   \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

Now it's your turn to wikify this ... 

Hans 


-----------------------------------------------------------------
                                          Hans Hagen | PRAGMA ADE
              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
     tel: 038 477 53 69 | fax: 038 477 53 74 | www.pragma-ade.com
                                             | www.pragma-pod.nl
-----------------------------------------------------------------

  parent reply	other threads:[~2006-07-31 18:56 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-07-31 16:59 Duncan Hothersall
2006-07-31 17:47 ` Taco Hoekwater
2006-07-31 19:12   ` Hans Hagen
2006-08-01  7:43     ` Taco Hoekwater
2006-07-31 18:56 ` Hans Hagen [this message]
     [not found] <mailman.132.1154372189.2039.ntg-context@ntg.nl>
2006-07-31 19:33 ` Duncan Hothersall

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=44CE5258.8070806@wxs.nl \
    --to=pragma@wxs.nl \
    --cc=ntg-context@ntg.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).