Re: [NTG-context] Position of MetaPost graphics
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
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 -----------------------------------------------------------------
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_c... Wolfgang
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
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_c...
Wolfgang
participants (2)
-
Tim Steenvoorden
-
Wolfgang Schuster