ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
* Position of MetaPost graphics
@ 2011-04-01  9:39 Tim Steenvoorden
  2011-04-03 15:33 ` Peter Rolf
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Tim Steenvoorden @ 2011-04-01  9:39 UTC (permalink / raw)
  To: ntg-context

Dear list,

I'm trying to make some fancy chapter headers. With MetaPost I drew a
wave, which I'd like to place in the margin. I've read details.pdf and
metafun.pdf, but I don't manage to get the positioning right. The wave
should begin where the bottomframe ends and move on to the page
border. Also, the graphic is placed in the page background layer, but
nevertheless the text after the the graphic is shifted down.

\startuniqueMPgraphic{wave}
numeric periods, width;
path wave;
periods := 3 + 1/4;
width   := periods * 2*pi;
wave    := origin for x=0 step 0.1 until width:
             -- (x,x*sin(x))
           endfor;
pickup pencircle scaled 1pt;
draw wave xscaled (OverlayWidth/width) yscaled (OverlayHeight/(2*width));
\stopuniqueMPgraphic

\definelayer[decorations][position=yes,option=test,location=r]
\setupbackgrounds[page][background=decorations]
\defineoverlay[wave][\uniqueMPgraphic{wave}]

\starttext

{\ss\bfc A chapter title}
\blank[small]
\framed[frame=off,bottomframe=on,width=broad,rulethickness=1pt]
 {\ss\bfx \date \hfill Author Name}
\setlayer[decorations]{\framed[background=wave,frame=off,width=\cutspace,height=2\lineheight]{}}

\input knuth

\stoptext

What am I doing wrong? Is it a better idea to draw the bottomframe in
MetaPost too? How do I take care of positioning in that case? Absolute
positioning is not an option, because the length of the chapterheads
can be two lines. It should also work on other paper sizes (A5 in
particular).

Kind regards,
Tim Steenvoorden
___________________________________________________________________________________
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
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Position of MetaPost graphics
  2011-04-01  9:39 Position of MetaPost graphics Tim Steenvoorden
@ 2011-04-03 15:33 ` Peter Rolf
  2011-04-03 16:42 ` Aditya Mahajan
       [not found] ` <4D9859C6.9040200@wxs.nl>
  2 siblings, 0 replies; 6+ messages in thread
From: Peter Rolf @ 2011-04-03 15:33 UTC (permalink / raw)
  To: mailing list for ConTeXt users

[-- Attachment #1: Type: text/plain, Size: 2489 bytes --]

Am 01.04.2011 11:39, schrieb Tim Steenvoorden:
> Dear list,
> 
> I'm trying to make some fancy chapter headers. With MetaPost I drew a
> wave, which I'd like to place in the margin. I've read details.pdf and
> metafun.pdf, but I don't manage to get the positioning right. The wave
> should begin where the bottomframe ends and move on to the page
> border. Also, the graphic is placed in the page background layer, but
> nevertheless the text after the the graphic is shifted down.
>
> \startuniqueMPgraphic{wave}
> numeric periods, width;
> path wave;
> periods := 3 + 1/4;
> width   := periods * 2*pi;
> wave    := origin for x=0 step 0.1 until width:
>              -- (x,x*sin(x))
>            endfor;
> pickup pencircle scaled 1pt;
> draw wave xscaled (OverlayWidth/width) yscaled (OverlayHeight/(2*width));
> \stopuniqueMPgraphic
> 
> \definelayer[decorations][position=yes,option=test,location=r]
> \setupbackgrounds[page][background=decorations]
> \defineoverlay[wave][\uniqueMPgraphic{wave}]
> 
> \starttext
> 
> {\ss\bfc A chapter title}
> \blank[small]
> \framed[frame=off,bottomframe=on,width=broad,rulethickness=1pt]
>  {\ss\bfx \date \hfill Author Name}
> \setlayer[decorations]{\framed[background=wave,frame=off,width=\cutspace,height=2\lineheight]{}}
> 
> \input knuth
> 
> \stoptext
> 
> What am I doing wrong? Is it a better idea to draw the bottomframe in
> MetaPost too? How do I take care of positioning in that case? Absolute
> positioning is not an option, because the length of the chapterheads
> can be two lines. It should also work on other paper sizes (A5 in
> particular).
>
Don't ask me. I have no experience with layers in combination with
'position=yes'. Anyhow, IMO it's much easier to draw all in one graphic
than try to attach the MP graphic with the frame(d) border. Also: I have
no idea how to do it :-)

I attached a working example, but it's more a starting point than a
final solution.

Best wishes,  Peter

> Kind regards,
> Tim Steenvoorden
> ___________________________________________________________________________________
> 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
> ___________________________________________________________________________________
> 


[-- Attachment #2: position.tex --]
[-- Type: text/x-tex, Size: 950 bytes --]

%\setuppapersize[A5][A5]

\startuniqueMPgraphic{wave}{wl}
numeric periods, width;
path wave;
periods := 3 + 1/4;
width   := periods * 2*pi;
wl      := \MPvar{wl};
ll      := OverlayWidth-wl;
wave    := (origin for x=0 step 0.1 until width:
             .. (x,x*sin(x))
            endfor) xscaled -1; % mirror (no shift correction needed)
pickup pencircle scaled 1pt;
draw reverse(wave xscaled (wl/width) yscaled (OverlayHeight/2width))--(ll,0);
\stopuniqueMPgraphic

\definelayer[decorations][position=yes,option=test,location=r,dx=-\cutspace]
\setupbackgrounds[page][background=decorations]
\defineoverlay[wave][\uniqueMPgraphic{wave}{wl=\cutspace}]


\starttext
\showframe[text]

{\ss\bfc A chapter title}
\blank[small]
\framed[frame=off,width=broad]
 {\ss\bfx \date \hfill Author Name}%
\setlayer[decorations]{\framed[background=wave,frame=off,width=\dimexpr\cutspace+\makeupwidth,height=2\lineheight,offset=overlay]{}}

\input knuth

\stoptext


[-- Attachment #3: Type: text/plain, Size: 485 bytes --]

___________________________________________________________________________________
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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Position of MetaPost graphics
  2011-04-01  9:39 Position of MetaPost graphics Tim Steenvoorden
  2011-04-03 15:33 ` Peter Rolf
@ 2011-04-03 16:42 ` Aditya Mahajan
       [not found] ` <4D9859C6.9040200@wxs.nl>
  2 siblings, 0 replies; 6+ messages in thread
From: Aditya Mahajan @ 2011-04-03 16:42 UTC (permalink / raw)
  To: mailing list for ConTeXt users

On Fri, 1 Apr 2011, Tim Steenvoorden wrote:

(Untested).

> \startuniqueMPgraphic{wave}
> numeric periods, width;
> path wave;
> periods := 3 + 1/4;
> width   := periods * 2*pi;
> wave    := origin for x=0 step 0.1 until width:
>             -- (x,x*sin(x))
>           endfor;
> pickup pencircle scaled 1pt;
> draw wave xscaled (OverlayWidth/width) yscaled (OverlayHeight/(2*width));

   setbounds currentpicture to boundingbox OverlayBox ;

> \stopuniqueMPgraphic

Does setting the bounds of the current picture help?

Aditya
___________________________________________________________________________________
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
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Position of MetaPost graphics
       [not found] ` <4D9859C6.9040200@wxs.nl>
@ 2011-04-03 23:22   ` Tim Steenvoorden
  2011-04-04  7:33     ` Wolfgang Schuster
  0 siblings, 1 reply; 6+ messages in thread
From: Tim Steenvoorden @ 2011-04-03 23:22 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Thanks Peter! You are right it is easier to draw both the wave and the
line in Metapost. And the dx=-\cutspace is just what I needed for left
pages!

I striped the frames out of the code and placed just the graphics in
the layer with a reuseMPgraphic. Also, I pulled out the definition of
the wave into a MPinclusions. I have to do LoadPageState in each
graphic though.

%\showframe
\setuppapersize[A5][A5]
\setuppagenumbering[alternative=doublesided]

\startMPinclusions
numeric periods, width;
path wave;
periods := 3 + 1/4;
width   := periods * 2*pi;
wave    := origin for x=0 step 0.1 until width:
             .. (x,x*sin(x))
           endfor;
\stopMPinclusions

\startreusableMPgraphic{rightwave}
LoadPageState;
pickup pencircle scaled 1pt;
draw origin -- (TextWidth,0) -- wave xscaled (CutSpace/width) yscaled
(LineHeight/width) shifted (TextWidth,0);
%setbounds currentpicture to unitsquare xscaled (TextWidth+CutSpace);
\stopreusableMPgraphic

\startreusableMPgraphic{leftwave}
LoadPageState;
pickup pencircle scaled 1pt;
draw reverse wave xscaled (-1*CutSpace/width) yscaled
(LineHeight/width) -- (TextWidth,0);
\stopreusableMPgraphic

\definelayer[decorations][position=yes,option=test]
\setupbackgrounds[page][background=decorations]

\starttext

{\ss\bfc A chapter title}
\blank[small]
{\ss\bfx \date \hfill Author Name}
\setlayer[decorations][location=r]{\reuseMPgraphic{rightwave}}

\input knuth

\page

{\ss\bfc A very long chapter title on two or more lines}
\blank[small]
{\ss\bfx \date \hfill Author Name}
\setlayer[decorations][location=r,dx=-\cutspace]{\reuseMPgraphic{leftwave}}

\input knuth

\stoptext

Just one problem is left. The graphic occupies space in the text layer
as if the location was set to rb. If you place it with the position=no
option, it is properly placed in the background and it doesn't disturb
the text. Is this a bug or a feature?

I tried to play a bit with the bounding boxes, but I think I don't
understand them that well.

Regards,
Tim


2011/4/3 Hans Hagen <pragma@wxs.nl>:
> On 1-4-2011 11:39, Tim Steenvoorden wrote:
>>
>> Dear list,
>>
>> I'm trying to make some fancy chapter headers. With MetaPost I drew a
>> wave, which I'd like to place in the margin. I've read details.pdf and
>> metafun.pdf, but I don't manage to get the positioning right. The wave
>> should begin where the bottomframe ends and move on to the page
>> border. Also, the graphic is placed in the page background layer, but
>> nevertheless the text after the the graphic is shifted down.
>>
>> \startuniqueMPgraphic{wave}
>> numeric periods, width;
>> path wave;
>> periods := 3 + 1/4;
>> width   := periods * 2*pi;
>> wave    := origin for x=0 step 0.1 until width:
>>              -- (x,x*sin(x))
>>            endfor;
>> pickup pencircle scaled 1pt;
>> draw wave xscaled (OverlayWidth/width) yscaled (OverlayHeight/(2*width));
>> \stopuniqueMPgraphic
>>
>> \definelayer[decorations][position=yes,option=test,location=r]
>> \setupbackgrounds[page][background=decorations]
>> \defineoverlay[wave][\uniqueMPgraphic{wave}]
>>
>> \starttext
>>
>> {\ss\bfc A chapter title}
>> \blank[small]
>> \framed[frame=off,bottomframe=on,width=broad,rulethickness=1pt]
>>  {\ss\bfx \date \hfill Author Name}
>>
>> \setlayer[decorations]{\framed[background=wave,frame=off,width=\cutspace,height=2\lineheight]{}}
>>
>> \input knuth
>>
>> \stoptext
>>
>> What am I doing wrong? Is it a better idea to draw the bottomframe in
>> MetaPost too? How do I take care of positioning in that case? Absolute
>> positioning is not an option, because the length of the chapterheads
>> can be two lines. It should also work on other paper sizes (A5 in
>> particular).
>
> you probably need to set the boundingbopx of your picture to something
> reasonable (you can use the OverlayWidth and OverlayHeight variables)
>
> -----------------------------------------------------------------
>                                          Hans Hagen | PRAGMA ADE
>              Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
>    tel: 038 477 53 69 | voip: 087 875 68 74 | www.pragma-ade.com
>                                             | www.pragma-pod.nl
> -----------------------------------------------------------------
>
___________________________________________________________________________________
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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Position of MetaPost graphics
  2011-04-03 23:22   ` Tim Steenvoorden
@ 2011-04-04  7:33     ` Wolfgang Schuster
  2011-04-06 14:04       ` Tim Steenvoorden
  0 siblings, 1 reply; 6+ messages in thread
From: Wolfgang Schuster @ 2011-04-04  7:33 UTC (permalink / raw)
  To: mailing list for ConTeXt users


Am 04.04.2011 um 01:22 schrieb Tim Steenvoorden:

> Thanks Peter! You are right it is easier to draw both the wave and the
> line in Metapost. And the dx=-\cutspace is just what I needed for left
> pages!
> 
> I striped the frames out of the code and placed just the graphics in
> the layer with a reuseMPgraphic. Also, I pulled out the definition of
> the wave into a MPinclusions. I have to do LoadPageState in each
> graphic though.
> 
> %\showframe
> \setuppapersize[A5][A5]
> \setuppagenumbering[alternative=doublesided]
> 
> \startMPinclusions
> numeric periods, width;
> path wave;
> periods := 3 + 1/4;
> width   := periods * 2*pi;
> wave    := origin for x=0 step 0.1 until width:
>             .. (x,x*sin(x))
>           endfor;
> \stopMPinclusions
> 
> \startreusableMPgraphic{rightwave}
> LoadPageState;
> pickup pencircle scaled 1pt;
> draw origin -- (TextWidth,0) -- wave xscaled (CutSpace/width) yscaled
> (LineHeight/width) shifted (TextWidth,0);
> %setbounds currentpicture to unitsquare xscaled (TextWidth+CutSpace);
> \stopreusableMPgraphic
> 
> \startreusableMPgraphic{leftwave}
> LoadPageState;
> pickup pencircle scaled 1pt;
> draw reverse wave xscaled (-1*CutSpace/width) yscaled
> (LineHeight/width) -- (TextWidth,0);
> \stopreusableMPgraphic
> 
> \definelayer[decorations][position=yes,option=test]
> \setupbackgrounds[page][background=decorations]
> 
> \starttext
> 
> {\ss\bfc A chapter title}
> \blank[small]
> {\ss\bfx \date \hfill Author Name}
> \setlayer[decorations][location=r]{\reuseMPgraphic{rightwave}}
> 
> \input knuth
> 
> \page
> 
> {\ss\bfc A very long chapter title on two or more lines}
> \blank[small]
> {\ss\bfx \date \hfill Author Name}
> \setlayer[decorations][location=r,dx=-\cutspace]{\reuseMPgraphic{leftwave}}
> 
> \input knuth
> 
> \stoptext
> 
> Just one problem is left. The graphic occupies space in the text layer
> as if the location was set to rb. If you place it with the position=no
> option, it is properly placed in the background and it doesn't disturb
> the text. Is this a bug or a feature?
> 
> I tried to play a bit with the bounding boxes, but I think I don't
> understand them that well.

Your problem is that you use {\ss\bfc …} etc. to place the title
rather than contexts \title command where you can define your own
command. With such a command you can put all text in a frame with
your graphic a background.

- http://wiki.contextgarden.net/Generate_Authorlist_from_Head_Content
- http://wiki.contextgarden.net/Titles#A_complex_graphical_element_under_the_chapter_title

Wolfgang

___________________________________________________________________________________
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
___________________________________________________________________________________


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: Position of MetaPost graphics
  2011-04-04  7:33     ` Wolfgang Schuster
@ 2011-04-06 14:04       ` Tim Steenvoorden
  0 siblings, 0 replies; 6+ messages in thread
From: Tim Steenvoorden @ 2011-04-06 14:04 UTC (permalink / raw)
  To: mailing list for ConTeXt users

Thanks for your tips Wolfgang! I switched to a solution as on the
wiki, using overlays and frames in place of layers. After setting the
boudingboxes right it works! I have to increase the \objectoffset
though, because otherwise the graphic is chopped of:

\setuppapersize[A5][A5]
\setuppagenumbering[alternative=doublesided]

\def\objectoffset{\cutspace}

\startMPinclusions
numeric CutSpace, wavePeriods, waveWidth;
path unitwave;
CutSpace    := \the\cutspace;
wavePeriods := 3 + 1/4;
waveSize    := wavePeriods * 2*pi;
unitwave    := (origin for x=0 step 0.1 until waveSize:
                 .. (x,x*sin(x))
               endfor) scaled (1/waveSize);
\stopMPinclusions

\startuniqueMPgraphic{rightwave}
pickup pencircle scaled 1pt;
draw origin -- (OverlayWidth,0) -- unitwave xscaled CutSpace yscaled
(LineHeight/2) shifted (OverlayWidth,0);
setbounds currentpicture to boundingbox OverlayBox;
\stopuniqueMPgraphic

\startuniqueMPgraphic{leftwave}
pickup pencircle scaled 1pt;
draw reverse unitwave xscaled (-1*CutSpace) yscaled (LineHeight/2) --
(OverlayWidth,0);
setbounds currentpicture to boundingbox OverlayBox;
\stopuniqueMPgraphic

\defineoverlay[rightwave]
  [\uniqueMPgraphic{rightwave}]
\defineoverlay[leftwave]
  [\uniqueMPgraphic{leftwave}]

\setuphead[chapter]
  [style=\ss\bfc,
   page=yes,
   after={\PlaceDecoration\blank[big]}]

\define\PlaceDecoration
  {\framed
     [width=broad,
      frame=off,
      offset=0pt,
      background=\doifoddpageelse{rightwave}{leftwave}]
     {\ss\bfx \date \hfill Author Name}}

\starttext

\chapter{A very long chapter title on two or more lines}

\input knuth

\chapter{A very long chapter title on two or more lines}

\input knuth

\stoptext

The \startchapter[] solution on the wiki is very neat, but it doesn't
work with MKII. Get errors with MKIV to... (Using TeXLive 2010) But
I'll use \setvariables.

Thanks for all your help!
Tim


2011/4/4 Wolfgang Schuster <schuster.wolfgang@googlemail.com>:
> Your problem is that you use {\ss\bfc …} etc. to place the title
> rather than contexts \title command where you can define your own
> command. With such a command you can put all text in a frame with
> your graphic a background.
>
> - http://wiki.contextgarden.net/Generate_Authorlist_from_Head_Content
> - http://wiki.contextgarden.net/Titles#A_complex_graphical_element_under_the_chapter_title
>
> Wolfgang
___________________________________________________________________________________
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
___________________________________________________________________________________

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-04-06 14:04 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-04-01  9:39 Position of MetaPost graphics Tim Steenvoorden
2011-04-03 15:33 ` Peter Rolf
2011-04-03 16:42 ` Aditya Mahajan
     [not found] ` <4D9859C6.9040200@wxs.nl>
2011-04-03 23:22   ` Tim Steenvoorden
2011-04-04  7:33     ` Wolfgang Schuster
2011-04-06 14:04       ` Tim Steenvoorden

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).