From: Aditya Mahajan <adityam@umich.edu>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Subject: Re: Solution to a "superscript" problem?
Date: Wed, 12 Oct 2011 16:55:40 -0400 (EDT) [thread overview]
Message-ID: <alpine.LNX.2.02.1110121651100.30945@nqv-gnoyrg> (raw)
In-Reply-To: <4E95F3EE.303@wxs.nl>
On Wed, 12 Oct 2011, Hans Hagen wrote:
> On 12-10-2011 21:43, Otso Helenius wrote:
>> Hello,
>>
>> I've been trying to come up with a few methods to add definitions to
>> text with the help of the metafun and context manuals. The first method
>> adds the definition as sort of a "superscript" on top of the word, and
>> the second one marks multiple words with a curly bracket and adds the
>> definition on top of the tip of the bracket.
>>
>> Here is the (ugly and hackish) code:
>>
>>
>>
>> \startuniqueMPgraphic{defline}
>> path p; p:=(0,0)..controls (0,1) and (1,1)..(1,1)--(6,1)..controls(7,1)
>> and (7,1)..(7,2)--(7,2)..controls(7,1) and
>> (7,1)..(8,1)--(13,1)..controls(13,1) and (14,1)..(14,0);
>> draw (0,0)--(0,12pt) withcolor white;
>> draw p xscaled (\overlaywidth/15) yscaled 5 shifted (0,9mm) withpen
>> pencircle scaled 0.25mm withcolor red;
>> \stopuniqueMPgraphic
>>
>> \defineoverlay[curlybracket][\includeMPgraphic{defline}]
>>
>> \def\sentencedef[#1][#2]{\setbox\scratchbox=\hbox{#2}\hbox to
>> \the\wd\scratchbox{\cbox{\hbox{\tfxx\color[red]
>> #1}\\\hbox{\framed[background=curlybracket,frame=off]{#2}}}}}
>>
>> \def\worddef[#1][#2]{\setbox\scratchbox=\hbox{#2}\hbox to
>> \the\wd\scratchbox{\cbox{\hbox{\rotate[rotation=25]{\tfxx\color[red]
>> #1}}\\\hbox{#2}}}}
>>
>> \starttext
>>
>> \hbox{\worddef[def1][Lorem] ipsum \worddef[def2][dolor] sit
>> \worddef[def3][amet] consectetur \worddef[def4][adipiscing] elit.}
>>
>> \hbox{\sentencedef[def5][Lorem ipsum] dolor sit \sentencedef[def6][amet
>> consectetur] adipiscing elit.}
>>
>> \stoptext
>>
>>
>>
>> I haven't figured a way to add the curly bracket graphic neatly nor
>> position the definition correctly on top of it.
>>
>> I would be very interested in any advice regarding these two functions
>> and how to rewrite both of them in a more elegant way.
>
> Wikifyable ...
>
> \startuniqueMPgraphic{defline}{width}
>
> path p ;
> p :=
> ( 0,0) .. controls (0,1) and ( 1,1) ..
> ( 1,1) --
> ( 6,1) .. controls (7,1) and ( 7,1) ..
> ( 7,2) --
> ( 7,2) .. controls (7,1) and ( 7,1) ..
> ( 8,1) --
> (13,1) .. controls (13,1) and (14,1) ..
> (14,0) ;
> draw
> p
> xysized (\MPvar{width},ExHeight)
> withpen pencircle scaled .1ExHeight
> withcolor \MPcolor{red} ;
>
> \stopuniqueMPgraphic
>
>
> \defineoverlay[curlybracket][\includeMPgraphic{defline}]
>
> \unexpanded\def\WordDef
> {\dodoubleargument\doWordDef}
>
> \def\doWordDef[#1][#2]%
> {\dontleavehmode\hbox\bgroup
> \setbox\scratchbox\hbox{#2}%
> \raise\strutheight\hbox to
> \wd\scratchbox{\hss\rotate[rotation=25]{\tfxx\color[red]#1}\hss}%
> \hskip-\wd\scratchbox
> \box\scratchbox
> \egroup}
>
> \unexpanded\def\LineDef
> {\dodoubleargument\doLineDef}
>
> \def\doLineDef[#1][#2]%
> {\dontleavehmode\hbox\bgroup
> \setbox\scratchbox\hbox{#2}%
> \raise1.5\strutht\hbox to
> \wd\scratchbox{\hss\rotate[rotation=25]{\tfxx\color[red]#1}\hss}%
> \hskip-\wd\scratchbox
> \raise0.9\strutht\hbox to
> \wd\scratchbox{\uniqueMPgraphic{defline}{width=\the\wd\scratchbox}}%
> \hskip-\wd\scratchbox
> \box\scratchbox
> \egroup}
>
>
> \starttext
>
> \WordDef[def1][Lorem] ipsum \WordDef[def2][dolor] sit \WordDef[def3][amet]
> consectetur \WordDef[def4][adipiscing] elit.
>
> \LineDef[def5][Lorem ipsum] dolor sit \LineDef[def6][amet consectetur]
> adipiscing elit.
>
> \stoptext
Another solution, which might be easier to understand. This does not
affect the lineheight. Depending on the usage, that may or may not be
desirable.
\unprotect
\startuniqueMPgraphic{defline}
path p ;
p :=
( 0,0) .. controls (0,1) and ( 1,1) ..
( 1,1) --
( 6,1) .. controls (7,1) and ( 7,1) ..
( 7,2) --
( 7,2) .. controls (7,1) and ( 7,1) ..
( 8,1) --
(13,1) .. controls (13,1) and (14,1) ..
(14,0) ;
draw
p
xysized (OverlayWidth,ExHeight)
shifted (0,OverlayHeight)
withpen pencircle scaled .1ExHeight
withcolor \MPcolor{\framedparameter\c!framecolor} ;
label.top((textext("\tfxx\color[red] \framedparameter\c!text") rotated 25),
(OverlayWidth/2, OverlayHeight+ExHeight));
setbounds currentpicture to boundingbox OverlayBox ;
\stopuniqueMPgraphic
\defineoverlay[curlybracket][\includeMPgraphic{defline}]
\defineframed[LineDef]
[
\c!location=\v!low,
\c!frame=\v!off,
\c!background=curlybracket,
\c!framecolor=red,
]
\protect
\starttext
\leavevmode\LineDef[text=def5]{Lorem ipsum} dolor sit \LineDef[text=def6]{amet consectetur}
adipiscing elit.
\stoptext
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!
maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage : http://www.pragma-ade.nl / http://tex.aanhet.net
archive : http://foundry.supelec.fr/projects/contextrev/
wiki : http://contextgarden.net
___________________________________________________________________________________
prev parent reply other threads:[~2011-10-12 20:55 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-12 19:43 Otso Helenius
2011-10-12 20:09 ` Hans Hagen
2011-10-12 20:26 ` Otso Helenius
2011-10-12 20:55 ` Aditya Mahajan [this message]
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=alpine.LNX.2.02.1110121651100.30945@nqv-gnoyrg \
--to=adityam@umich.edu \
--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).