[dev-context] new MyWay about \sometxt
Aditya Mahajan
adityam at umich.edu
Wed Jan 31 04:08:39 CET 2007
On Tue, 30 Jan 2007, Mojca Miklavec wrote:
> On 1/30/07, Aditya Mahajan wrote:
>> On Tue, 30 Jan 2007, Mojca Miklavec wrote:
>>
>> > Hello,
>> >
>> > instead of checking the problems with MyWay about database module, I
>> > created another unfinished piece about \sometxt (as promised already
>> > long ago):
>> >
>> > http://dl.contextgarden.net/myway/sometxt.pdf
>> >
>> > \sometxt{...} should be used instead of textext("...") in metafun
>> > graphics whenever possible, since it's much more efficient. An average
>> > user shouldn't care about much more than that. The MyWay is devoted to
>> > the curious ones. I hope that I included all the major ideas which
>> > Hans implemented in Summer/Autumn 2006 on my request. Although not all
>> > of them are documented well enough, I tried to mention them at least.
>>
>> Very nice. Now, I do not need to look up old mails to figure out how
>> to manipulate sometxt.
>
> I've put there everything that came to my mind, but 99% of the usage
> is still only \sometxt{...}. The rest is trickery.
>
>> I have one example where \sometxt[...]{...} is
>> useful. If you are interested, I can send it to you.
>
> I can include it in the manual if you want. I used \sometxt[] for
> gnuplot because it looks more elegant and more backward compatible
> that adding a bunch of additonal macros in front of it.
I mainly use the \sometxt[..]{..} feature to create labels in my
metapost figures. The normal setup is
\definetextext[parbox]{\framed[frame=off, width=2cm, autowidth=force,
align=middle, background=color, backgroundcolor=white]}
Which insures that I do not have to worry about line breaking of long
labels, and the unfill trick to get white backgrounds in labels. The
down-side is that the background is white instead of being
transparent. So, if you have a colored page background, the figure
looks odd. I have attached a complete example.
>
>> I thought a bit about your feature request, and it is not too
>> difficult to implement it. Here is a patch that allows you to use
>> \sometext[font][iwona,20pt]{...}. Careful of spurious linebreaks.
>
> Great!!!
>
> Having a hardcoded \sometxt[font] doesn't help me much, but I'll copy
> the code literally to the module and replace [font] by [gp].
The font is not hardcoded. But you need to have something there.
Otherwise you need a mechanism to distinguish between
\sometxt[whatever] and
\sometxt[iwona]
>> %=======================================================
>> [snip[
>> %===============================================================
>>
>> I haven't tested it, but I do not think that this should cause any
>> problems with existing code. \definetextext[font] is just a dummy. It
>> should work with other things also. You can get rid of the dummy
>> by checking in redodofiltersometxt if #1 is has a comma or not. Would
>> that extra overhead be useful of gnuplot?
>
> Yes. But copying the code literally doesn't make as much sense since
> other users might have different needs than "second optional parameter
> should switch the font". I'll add that to the gnuplot module directly.
It can be configurable. Maybe something like
\defineopttextext[whatever]{\command}
so that with \sometxt[whatever][2nd arg]{stuff} translates to
\command[2nd ard]{stuff} and \sometxt[whatever]{stuff} translates to
\command{stuff}.
That would involve more work to write the macro \command, but will
provide more flexibility.
> The only thing that could help would be a high-level user interface to
> define such commands, such as is
> \definetextext[name]{\command}
>
> So that one could then define
> % I'm not sure what should come inbetween
> \definetextext[myboldfont]???{\myboldfont}
> % #1 might be empty
> \def\myboldfont[#1]#2{\framed{
> \doifnot{#1}{}{\switchtobodyfont[#1]}
^^^^^^^^^^^^^^^^
\doifnothing or \doifsomething is easier to read
> \strut\bf #2}}
> for example and use it as
> \sometxt[myboldfont][iwona]{this will be bold and framed iwona}
It may be possible to extend definetextext to do this rather than
\defineopttextext. In any case, it is upto the macro \command to
ensure that it can handly the optinal argument. I will see if I can
cook up something working.
> But your current code is more than enough for me (apart from the fact
> that it's not really nice to redefine low-level macros, but I'll try
> to keep up with low-level changes, should any accur) ;)
Or persuade Hans to have a proper version in the core :)
Aditya
-------------- next part --------------
\setupcolors[state=start]
\usetypescriptfile[type-gyr]
\usetypescript[times][texnansi]
\setupbodyfont[times,8pt]
\def\BEFORE#1{\math{\underline{#1}}}
\def\AT#1{\math{#1}}
\def\AFTER#1{\math{\smash{\overline{#1}}}\vphantom{#1}}
\defineframed
[parbox]
[frame=off, width=2cm, autowidth=force, align=middle, background=color,
backgroundcolor=white]
\definetextext[parbox]{\framed[frame=off, width=2cm, autowidth=force, align=middle, background=color, backgroundcolor=white]}
\starttext
\startMPpage
% Color for drawing helplines
color helpcolor ; helpcolor := 0.5*white ;
% Scaling
u := 2cm ; e := .1u ;
% Constants
xmax := 5u ; ymax := -3u ;
xstep := .5u ; ystep := -.5u ;
xbefore := 2*xstep ;
xat := 6*xstep ;
xafter := xmax - 2*xstep ;
W := 0 ;
X := xstep ;
Z := 3*xstep ;
N := 4*xstep ;
Y := 5*xstep ;
M := 7*xstep ;
U := 9*xstep ;
c := xbefore + e ;
l := xat + e ;
g := xafter + e ;
path xline , yline , xshort;
xline := (-xstep,0) -- (xmax + xstep,0) ;
xshort:= (0,0) -- (xmax,0) ;
yline := (0,-0.8*ystep) -- (0,ymax + 0.5*ystep) ;
draw yline ;
draw yline shifted (xmax,0) ;
for i = 0 upto 6 :
drawarrow xline shifted (0, i*ystep) ;
endfor ;
drawdblarrow xshort shifted (0, -0.6*ystep) ;
drawoptions(dashed evenly withcolor helpcolor) ;
draw yline shifted (xbefore,0) ;
draw yline shifted (xat,0) ;
draw yline shifted (xafter,0) ;
drawoptions() ;
y := 0 ;
dotlabel.top(\sometxt[parbox]{$t^+$}, (xbefore,y) ) ;
dotlabel.top(\sometxt[parbox]{$(t+1/2)$}, (xat,y) ) ;
dotlabel.top(\sometxt[parbox]{$(t+1)^-$}, (xafter,y) ) ;
y := ystep ;
dotlabel.top(\sometxt[parbox]{$\BEFORE t$}, (xbefore,y) ) ;
dotlabel.top(\sometxt[parbox]{$\AT t$}, (xat,y) ) ;
dotlabel.top(\sometxt[parbox]{$\AFTER t$}, (xafter,y) ) ;
y := 2*ystep ;
dotlabel.top(\sometxt[parbox]{$W_{t-1}$}, (W,y) ) ;
dotlabel.top(\sometxt[parbox]{$X_t$}, (X,y) ) ;
dotlabel.top(\sometxt[parbox]{$Z_t$}, (Z,y) ) ;
dotlabel.top(\sometxt[parbox]{$N_t$}, (N,y) ) ;
dotlabel.top(\sometxt[parbox]{$Y_t$}, (Y,y) ) ;
dotlabel.top(\sometxt[parbox]{$M_t$}, (M,y) ) ;
dotlabel.top(\sometxt[parbox]{$U_t$}, (U,y) ) ;
y := 3*ystep ;
dotlabel.bot(\sometxt[parbox]{$c_t$}, (c,y) ) ;
dotlabel.bot(\sometxt[parbox]{$l_t$}, (l,y) ) ;
dotlabel.bot(\sometxt[parbox]{$g_t$}, (g,y) ) ;
y := 4*ystep ;
dotlabel.top(\sometxt[parbox]{$\BEFORE I_t$}, (xbefore,y) ) ;
dotlabel.top(\sometxt[parbox]{$\AT I_t$}, (xat,y) ) ;
dotlabel.top(\sometxt[parbox]{$\AFTER I_t$}, (xafter,y) ) ;
y := 5*ystep ;
dotlabel.top(\sometxt[parbox]{$\BEFORE B_t$}, (xbefore,y) ) ;
dotlabel.top(\sometxt[parbox]{$\AT B_t$}, (xat,y) ) ;
dotlabel.top(\sometxt[parbox]{$\AFTER B_t$}, (xafter,y) ) ;
y := 6*ystep ;
dotlabel.top(\sometxt[parbox]{$\BEFORE \pi_t$}, (xbefore,y) ) ;
dotlabel.top(\sometxt[parbox]{$\AT \pi_t$}, (xat,y) ) ;
dotlabel.top(\sometxt[parbox]{$\AFTER \pi_t$}, (xafter,y) ) ;
label.lft(\sometxt[parbox]{actual time}, (-xstep, 0) ) ;
label.lft(\sometxt[parbox]{time notation}, (-xstep, ystep) ) ;
label.lft(\sometxt[parbox]{System Variables}, (-xstep, 2*ystep) ) ;
label.lft(\sometxt[parbox]{Design Laws}, (-xstep, 3*ystep) ) ;
label.lft(\sometxt[parbox]{Information at the controller},
(-xstep, 4*ystep) ) ;
label.lft(\sometxt[parbox]{Beliefs}, (-xstep, 5*ystep) ) ;
label.lft(\sometxt[parbox]{Information States},(-xstep, 6*ystep) ) ;
label.top(\sometxt[parbox]{Stage $t$}, (0.5*xmax,-0.6*ystep)) ;
\stopMPpage
\stoptext
More information about the dev-context
mailing list