diff options
author | Hans Hagen <pragma@wxs.nl> | 2018-03-15 16:04:31 +0100 |
---|---|---|
committer | Context Git Mirror Bot <phg42.2a@gmail.com> | 2018-03-15 16:04:31 +0100 |
commit | a4e07f30e880ab27c2918f81f136e257475b7729 (patch) | |
tree | 02db002d3001a49777a049f9a98fdc872a5e1ad1 /doc/context/sources/general/manuals/details | |
parent | cbc37c39432e0ebe38e0922fc6d14c2955ab3ba2 (diff) | |
download | context-a4e07f30e880ab27c2918f81f136e257475b7729.tar.gz |
2018-03-15 15:36:00
Diffstat (limited to 'doc/context/sources/general/manuals/details')
28 files changed, 5962 insertions, 0 deletions
diff --git a/doc/context/sources/general/manuals/details/back-0.tex b/doc/context/sources/general/manuals/details/back-0.tex new file mode 100644 index 000000000..137884919 --- /dev/null +++ b/doc/context/sources/general/manuals/details/back-0.tex @@ -0,0 +1,39 @@ +% content=tex +% +% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa + +\startenvironment back-0 + +\usemodule[simulate] + +\definecolor[shadecolor][r=.5,g=.5,b=.75] % blue +\definecolor[shadecolor][r=.5,g=.5,b=.25] % yellow + +\definecolor[red] [r=.5] +\definecolor[blue] [b=.5] +\definecolor[green][g=.5] + +\setuplayout + [width=middle,height=middle, + backspace=1cm,topspace=1cm, + header=0pt,footer=0pt,grid=yes] + +\setuprandomize + [medium] + +\setupbackgrounds + [page] + [background=color, + backgroundcolor=white] + +\setuptolerance + [verytolerant,stretch] + +\setupcolors + [state=start] + +\showgrid + +\setrandomseed{1000} + +\stopenvironment diff --git a/doc/context/sources/general/manuals/details/back-1.tex b/doc/context/sources/general/manuals/details/back-1.tex new file mode 100644 index 000000000..5f5109184 --- /dev/null +++ b/doc/context/sources/general/manuals/details/back-1.tex @@ -0,0 +1,58 @@ +\environment back-0 + +\setupindenting[big] + +\definecolumnset[two][n=3] +\definecolumnsetspan[test] + +\definetextbackground[test] + [background=color, + backgroundcolor=gray] + +\definetextbackground[more] + [background=color, + backgroundcolor=lightgray, + alternative=1,rulethickness=2pt] + +\dontcomplain + +\starttext + +\startcolumnset[two] + + \startcolumnsetspan[test] + \input tufte + \stopcolumnsetspan + + \starttextbackground[test] + + \input tufte \par + + \startnarrower + + \starttextbackground[more] + + \input tufte \par + \input tufte \par + \input tufte \par + \input tufte \par + \input tufte \par + \input tufte + + \stoptextbackground + + \stopnarrower + + \stoptextbackground + + \input tufte + + \starttextbackground[more] \input tufte \stoptextbackground + + \starttextbackground[test] \input tufte \stoptextbackground + + \starttextbackground[more] \input tufte \stoptextbackground + +\stopcolumnset + +\stoptext diff --git a/doc/context/sources/general/manuals/details/back-2.tex b/doc/context/sources/general/manuals/details/back-2.tex new file mode 100644 index 000000000..053125827 --- /dev/null +++ b/doc/context/sources/general/manuals/details/back-2.tex @@ -0,0 +1,99 @@ +\environment back-0 + +\startuseMPgraphic{mpos:par:color} + for i=1 upto nofmultipars : + fill multipars[i] withcolor + if multikind[i]="single" : "darkgray" ; + elseif multikind[i]="first" : "red" ; + elseif multikind[i]="middle" : "green" ; + elseif multikind[i]="last" : "blue" ; + else : "black" ; + fi ; + endfor ; +\stopuseMPgraphic + +\setupindenting + [medium,first] + +\definecolumnset + [four] + [n=4, + distance=7.5mm] + +\definetextbackground + [test] + [location=text, + mp=mpos:par:color, + before=\blank, + after=\blank] + +\starttext + +\starttexdefinition test #1#2#3 + \blank + \bgroup + \dontcomplain + \hangindent#1\relax + \hangafter #2\relax + \parindent #3\relax + \starttextbackground[test]% + \simulatewords[n=200,m=500,min=1,max=5,color=gray]% + \stoptextbackground + \par + \egroup + \blank +\stoptexdefinition + +\startcolumnset[four] + +\startbuffer[a] +\test {2cm} { -2} { 5mm} +\test {2cm} { -2} { 0cm} +\test {2cm} { -2} {-5mm} + +\test {2cm} { -5} { 5mm} +\test {2cm} { -5} { 0cm} +\test {2cm} { -5} {-5mm} + +\stopbuffer + +\startbuffer[b] +\test {-1cm} { -2} { 5mm} +\test {-1cm} { -2} { 0cm} +\test {-1cm} { -2} {-5mm} + +\test {-1cm} { -5} { 5mm} +\test {-1cm} { -5} { 0cm} +\test {-1cm} { -5} {-5mm} +\stopbuffer + +\startbuffer[c] +\test { 1cm} { 2} { 5mm} +\test { 1cm} { 2} { 0cm} +\test { 1cm} { 2} {-5mm} + +\test { 1cm} { 5} { 5mm} +\test { 1cm} { 5} { 0cm} +\test { 1cm} { 5} {-5mm} +\stopbuffer + +\startbuffer[d] +\test {-1cm} { 2} { 5mm} +\test {-1cm} { 2} { 0cm} +\test {-1cm} { 2} {-5mm} + +\test {-1cm} { 5} { 5mm} +\test {-1cm} { 5} { 0cm} +\test {-1cm} { 5} {-5mm} +\stopbuffer + +\dorecurse{2}{ + \dorecurse{1}{\getbuffer[a]} + \dorecurse{1}{\getbuffer[b]} + \dorecurse{1}{\getbuffer[c]} + \dorecurse{1}{\getbuffer[d]} +} + +\stopcolumnset + +\stoptext diff --git a/doc/context/sources/general/manuals/details/back-4.tex b/doc/context/sources/general/manuals/details/back-4.tex new file mode 100644 index 000000000..217525ed8 --- /dev/null +++ b/doc/context/sources/general/manuals/details/back-4.tex @@ -0,0 +1,39 @@ +\environment back-0 + +\startuseMPgraphic{mpos:par:color} + for i=1 upto nofmultipars : + fill multipars[i] withcolor + if multikind[i]="single" : "darkgray" ; + elseif multikind[i]="first" : "red" ; + elseif multikind[i]="middle" : "green" ; + elseif multikind[i]="last" : "blue" ; + else : "black" ; + fi ; + endfor ; +\stopuseMPgraphic + +\definecolumnset + [three] + [n=3, + distance=5mm] + +\definetextbackground + [shade] + [location=paragraph, + mp=mpos:par:color, + before=\blank, + after=\blank] + +\starttext + +\startcolumnset[three] + + \dorecurse {20} { + \starttextbackground[shade] + \simulatewords[n=50,m=500,min=1,max=5,color=gray]% + \stoptextbackground + } + +\stopcolumnset + +\stoptext diff --git a/doc/context/sources/general/manuals/details/back-5.tex b/doc/context/sources/general/manuals/details/back-5.tex new file mode 100644 index 000000000..a2d2c4632 --- /dev/null +++ b/doc/context/sources/general/manuals/details/back-5.tex @@ -0,0 +1,64 @@ +\environment back-0 + +\startuseMPgraphic{mpos:par:columnset:shade} + numeric h ; + for i=1 upto nofmultipars : + h := bbheight(p) ; + if multikind[i] = "single" : + fill multipars[i] topenlarged -.5h + withshademethod "linear" + withshadedirection shadedup + withcolor boxfillcolor shadedinto .8white ; + fill multipars[i] bottomenlarged -.5h + withshademethod "linear" + withshadedirection shadedup + withcolor .8white shadedinto boxfillcolor ; + elseif multikind[i] = "first" : + fill multipars[i] + withshademethod "linear" + withshadedirection shadedup + withcolor boxfillcolor shadedinto .8white ; + elseif multikind[i] = "middle" : + fill multipars[i] topenlarged -.5h + withshademethod "linear" + withshadedirection shadedup + withcolor boxfillcolor shadedinto .8white ; + fill multipars[i] bottomenlarged -.5h + withshademethod "linear" + withshadedirection shadedup + withcolor .8white shadedinto boxfillcolor ; + elseif multikind[i] = "last" : + fill multipars[i] + withshademethod "linear" + withshadedirection shadedup + withcolor .8white shadedinto boxfillcolor ; + fi ; + endfor ; +\stopuseMPgraphic + +\definecolumnset + [four] + [n=4, + distance=5mm] + +\definetextbackground + [shade] + [location=paragraph, + backgroundcolor=shadecolor, + mp=mpos:par:columnset:shade, + before=\blank, + after=\blank] + +\starttext + + \startcolumnset[four] + + \dorecurse{15} { + \starttextbackground[shade] + \simulatewords[n=10,m=500,min=1,max=5,color=text]% + \stoptextbackground + } + + \stopcolumnset + +\stoptext diff --git a/doc/context/sources/general/manuals/details/cow.pdf b/doc/context/sources/general/manuals/details/cow.pdf Binary files differnew file mode 100644 index 000000000..9cc8fb0b4 --- /dev/null +++ b/doc/context/sources/general/manuals/details/cow.pdf diff --git a/doc/context/sources/general/manuals/details/details-backpage.tex b/doc/context/sources/general/manuals/details/details-backpage.tex new file mode 100644 index 000000000..85e4d38ce --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-backpage.tex @@ -0,0 +1,34 @@ +% language=uk + +\environment details-environment + +\startcomponent details-backpage + +\page[right] + +\startpagemakeup[doublesided=no,pagestate=stop,page=no] + \startMPcode + StartPage ; + fill Page withcolor \MPcolor{blue} ; % .5blue ; + StopPage ; + \stopMPcode +\stoppagemakeup + +\startpagemakeup[doublesided=no,pagestate=stop,page=no] + \startMPcode + StartPage ; + path p[] ; picture q[] ; + p[1] := Page ; + p[2] := Page xscaled .6 shifted (.2PaperWidth,0) ; + q[1] := textext.raw("\color[white]{CONTEXT}") xsized(.6PaperWidth) ; + q[2] := textext.raw("\color[white]{\currentdate}") xsized(.6PaperWidth) ; + fill p[1] withcolor \MPcolor{red} ; % .5red + fill p[2] withcolor \MPcolor{blue} ; % .5blue + q[2] := q[2] shifted (0,-1.5bbheight(q[2])) ; + draw q[1] shifted (.2PaperWidth,.15PaperHeight) ; + draw q[2] shifted (.2PaperWidth,.15PaperHeight) ; + StopPage ; + \stopMPcode +\stoppagemakeup + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-captiontrickery.tex b/doc/context/sources/general/manuals/details/details-captiontrickery.tex new file mode 100644 index 000000000..ccd163e20 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-captiontrickery.tex @@ -0,0 +1,290 @@ +% language=uk + +\environment details-environment + +\startcomponent details-captiontrickery + +\startchapter[title={Caption handling}] + +\start + +It's hard to predict what kind of caption placements users want. The amount of +variation if large and thereby any system of specifying them will look complex. +So, examples are the best way to show them. + +\startbuffer +\setupcaption + [figure] + [location=bottom] +\placefigure + [left] + {}{\externalfigure[dummy][lines=2,width=4cm]} +\fakewords{60}{80} \par +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +% \setupfloats[grid=yes] +% \setupfloats[grid=tolerant] +\setupcaption + [figure] + [location=top] +\placefigure + [left] + {}{\externalfigure[dummy][lines=2,width=4cm]} +\fakewords{60}{80} \par +\stopbuffer + +\typebuffer \getbuffer + +In this document we typeset on a grid. For more complex cases and when a document +is processed without any user intervention, this is often a bad idea because the +snapper can decide to make sure that there is enough space above and below an +element. You can however influence the snapper explicitly: + +\startbuffer +\setupcaption + [figure] + [location=top] +\placefigure + [left,line] + {}{\externalfigure[dummy][lines=2,width=4cm]} +\fakewords{60}{80} \par +\stopbuffer + +\typebuffer \getbuffer + +Normally a side float plus caption has a normalized (strut) depth while also +top skip gets applied. When one of the grid related options \type {height}, \type +{line}, \type {depth}, \type {grid} or \type {halfline} is given the top skip +correction is removed. The \type {grid} option removes the depth too. The \type +{grid} option removes the depth while the \type {height} and \type {depth} +options adds an extra amount of strut depth. The \type {depth} option also adds a +line and \type {halfline} removes a line but adds strut height. Indeed this sounds +complicated so best play with it a bit. + +Keep in mind that the snapper plays safe and therefore tends to add more space when +needed. You can set a grid parameter that controls it: + +\starttyping +\setupfloats[grid=tolerant] +\stoptyping + +Currently this only applies to side floats but in the future we might support it +for regular floats too. + +\startbuffer +\setupcaption + [figure] + [width=4cm,align=flushright,location={left,high}] +\placefigure + [left] + {}{\externalfigure[dummy][lines=2,width=4cm]} +\fakewords{60}{80} \par +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupcaption + [figure] + [width=4cm,align=flushright,location={high,lefthanging}] +\placefigure + [left] + {}{\externalfigure[dummy][lines=2,width=4cm]} +\fakewords{60}{80} \par +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupcaption + [figure] + [width=4cm,align=flushleft,location={high,righthanging}] +\placefigure + [right] + {}{\externalfigure[dummy][lines=2,width=4cm]} +\fakewords{60}{80} \par +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupcaption + [figure] + [width=4cm,align=flushleft,location={high,rightmargin}] +\placefigure + [right] + {}{\externalfigure[dummy][lines=2,width=4cm]} +\fakewords{60}{80} \par +\stopbuffer + +\typebuffer \getbuffer + +The location of a caption is determined by the keywords \type {top}, \type +{bottom} and for the side captions \type {high}, \type {middle}, \type {low}, +either or not in combination with \type {left}, \type {right}, \type +{leftmargin}, \type {rightmargin}, {lefthanging} or \type {righthanging}. + +The next series of examples shows the regular (non||side) floats. + +\startbuffer +\setupcaption + [figure] + [location={high,left}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupcaption + [figure] + [width=4cm,align=flushright,location={high,left}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupcaption + [figure] + [width=4cm,align=flushright,location={middle,left}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupcaption + [figure] + [width=4cm,align=flushright,location={low,left}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\startbuffer +\setupfloat + [figure] + [location=right] +\setupcaption + [figure] + [width=4cm,align=flushright,location=high] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupfloat + [figure] + [location=right] +\setupcaption + [figure] + [width=4cm,align=flushright,location={high,left}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} + +\setupfloat + [figure] + [location=left] +\setupcaption + [figure] + [width=4cm,align=flushleft, location={high,left}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupfloat + [figure] + [location=middle] +\setupcaption + [figure] + [width=4cm,align=flushright, location={high,lefthanging}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupfloat + [figure] + [location=middle] +\setupcaption + [figure] + [width=4cm,align=flushleft, location={high,righthanging}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupfloat + [figure] + [location=right] +\setupcaption + [figure] + [width=4cm,align=flushleft, location={high,rightmargin}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupfloat + [figure] + [location=left] +\setupcaption + [figure] + [width=4cm,align=flushright,location={high,leftmargin}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupfloat + [figure] + [location=middle] +\setupcaption + [figure] + [width=4cm,align=flushright,location={high,outermargin}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\setupfloat + [figure] + [location=middle] +\setupcaption + [figure] + [width=4cm,align=flushleft, location={high,innermargin}] +\placefigure + {}{\externalfigure[dummy][lines=2,width=4cm]} +\stopbuffer + +\typebuffer \getbuffer + +The \type {innermargin} and \type {outermargin} are special cases. They adapt to +the kind of page. + +\page \stop + +\stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-colofon.tex b/doc/context/sources/general/manuals/details/details-colofon.tex new file mode 100644 index 000000000..1ceda44e7 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-colofon.tex @@ -0,0 +1,36 @@ +% language=uk + +\environment details-environment + +\startcomponent details-colofon + +\startchapter[title={About this document}] + +This document is typeset in \CONTEXT\ using \LUATEX\ with \METAPOST. We use only +one font: the Computer Modern Typewriter. The verbatim portions of the text are +typeset in its mono spaced variant. One of the reasons that I chose this font is +that we need a mono spaced font to typeset the example code, and the Computer +Modern Typewriter is one the best there is. This font combines well with many +other typefaces, but the sometimes excessive use of different fonts (and sizes) +in the styles that I have to implement made me long for simplicity. And so I +decided to stick to one font. A careful reader will notice that this document has +character protruding enabled (resulting in hanging punctuation). + +We use a couple of colors. Again, I went for simplicity and use rather primary +colors, although I do use them in transparent variants as well. + +There is not much more to say, apart from that I want to thank our customers as +well as \CONTEXT\ users for asking me to implement \DTP\ competing styles and +features. Their demands drive \CONTEXT\ in directions we could not have foreseen +when we started its development. + +We use a (transparent) gray background behind the text so that we have an +indication where the text area is positioned relative to the page. It also +enables us to comfortably turn on the grid. + +Some features shown here are relatively new and therefore they occasionally are +improved. As a result some aspects of their functionality may change. + +\stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-contents.tex b/doc/context/sources/general/manuals/details/details-contents.tex new file mode 100644 index 000000000..737f080a0 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-contents.tex @@ -0,0 +1,13 @@ +% language=uk + +\environment details-environment + +\startcomponent details-contents + +\starttitle[title={Table of contents}] + +\placelist[chapter][criterium=text] + +\stoptitle + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-environment.tex b/doc/context/sources/general/manuals/details/details-environment.tex new file mode 100644 index 000000000..003ea6905 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-environment.tex @@ -0,0 +1,317 @@ +% language=uk + +% this a rather old style and made for mkii, currently the only adaption to mkiv is +% with respect to fonts + +\showgrid + +\startenvironment details-environment + +\usemodule[abr-02,simulate] % visual + +\setupsystem + [random=123] + +\setupinteraction + [state=start, + style=, + color=] + +\setuplist + [chapter] + [interaction=all] + +\setupalign + [verytolerant, + stretch, + hanging] + +\setuptolerance + [verytolerant, + stretch] + +\definefontfeature + [fullprotrusion] + [protrusion=pure] + +\definefontfeature[default][default,fullprotrusion] + +\setupbodyfont[modernvariable,12pt] + +\setuppagenumbering + [alternative=doublesided] + +\setupindenting + [medium] + +\setuptyping + [margin=standard] + +\setuptyping + [color=blue] + +\setuptype + [color=blue] + +\startmode [screen] + \definepapersize[A4-S][width=210mm,height=210mm] + \setuppapersize[A4-S][A4-S] +\stopmode + +\setuplayout + [header=3cm, + footer=0pt, + topspace=0cm, + bottomspace=2cm, + bottom=2cm, + bottomdistance=0pt, + height=middle, + margindistance=.5cm, + leftmargin=2.0cm, + rightmargin=2.5cm, + backspace=2.5cm, + cutspace=3cm, + width=middle, + lines=48, % otherwise background issue +% textdistance=\dimexpr-\topskip+\strutheight+.5cm\relax, + grid=yes] + +\setuplayout + [margindistance=.5cm, + edgedistance=.25cm, + rightmargin=1cm, + rightedge=.75cm, + leftmargin=1cm, + leftedge=.5cm] + +\setuppagenumbering + [location=] + +\definecolor[red] [r=.5] +\definecolor[blue] [b=.5] +\definecolor[green] [g=.5] +\definecolor[yellow] [r=.5,g=.5] +\definecolor[gray] [s=.5] + +\definecolor[tred] [r=.5,t=.5,a=1] +\definecolor[tblue] [b=.5,t=.5,a=1] +\definecolor[tgreen] [g=.5,t=.5,a=1] +\definecolor[tyellow] [r=.5,g=.5,t=.5,a=1] +\definecolor[twhite] [s=0,t=.5,a=1] + +\definecolor[infogray] [g=.5,t=.5,a=1] +\definecolor[infogray] [s=.7,t=.5,a=1] +\definecolor[pagegray] [y=.5,t=.5,a=1] +\definecolor[textgray] [s=.9,t=.5,a=1] +\definecolor[areafill] [g=.5,t=.125,a=1] +\definecolor[areafill] [b=.5,t=.125,a=1] + +\definecolor[fakerulecolor] [green] +\definecolor[fakeparindentcolor][blue] + +\definefont[BigNumber][RegularBold sa 4] % 5 +\definefont[BigText] [RegularBold sa 2] +\definefont[MedNumber][RegularBold sa 2] + +\startbuffer[regular:sizes] +\definefont[regular:1][Regular*default sa 1] +\definefont[regular:2][Regular*default sa 2] +\definefont[regular:3][Regular*default sa 3] +\definefont[regular:4][Regular*default sa 4] +\stopbuffer + +\getbuffer[regular:sizes] + +\useMPlibrary[dum] + +\definecolor[p-red] [r=1] +\definecolor[p-blue] [b=1] +\definecolor[p-yellow] [r=1,g=1] + +\definepalet + [placeholder] + [1=p-red,2=p-blue,3=p-yellow] + +\definelayer + [graphics] + [position=yes] + +\setupbackgrounds + [page] + [background={color,graphics}, + backgroundoffset=1cm, + backgroundcolor=pagegray] + +\definelayer + [extras] + [width=\paperwidth,height=\paperheight] + +\setupbackgrounds + [leftpage] + [background=extras] + +\setupbackgrounds + [rightpage] + [background=extras] + +\definelayer % we need to compensate the backgroundoffset + [text] + [hoffset=1cm, + voffset=1cm] + +\setupbackgrounds + [text] + [background={color,text}, + backgroundoffset=1cm, + backgroundcolor=textgray] + +% chapter head + +\setuphead + [chapter] + [placehead=empty, + header=chapter, + incrementnumber=details, + style=\BigText, + numberstyle=\BigNumber] + +% we need to check each file +% +% \setuphead +% [chapter] +% [beforesection=\page, +% aftersection=\page] + +\definetext + [chapter] + [header] + [\setups{chapter}] + [] + +\definelayer + [chapter] + [width=\dimexpr\makeupwidth+\cutspace\relax, + height=\headerheight] + +\startsetups chapter + \setups[chapter:title] + \setups[chapter:number] + \setups[chapter:finish] +\stopsetups + +% here we can use mp instead but the following is not that bad either + +\startsetups chapter:title + + \setlayerframed + [chapter] + [x=\dimexpr\makeupwidth+\cutspace\relax, + location=lb] + [height=\headerheight, + foregroundcolor=white, + background=color, + backgroundcolor=blue, + frame=off, + offset=none, + align={right,lohi}] + {\hbox spread .5\cutspace + {\hss + \doiftextelse{\placeheadtext[chapter]}% + {\placeheadtext[chapter]}% + {\placeheadtext[title]}% + \hss}\space + \vskip.5cm} + +\stopsetups + +\startsetups chapter:number + + \setlayerframed + [chapter] + [x=\dimexpr\makeupwidth+\cutspace\relax, + y=\vsize, + location=lb] + [width=\dimexpr\cutspace-\rightmargindistance\relax, + height=\dimexpr\cutspace-\rightmargindistance\relax, + foregroundcolor=white, + background=color, + backgroundcolor=red, + frame=off, + offset=none, + align={middle,lohi}] + {\hbox to \hsize + {\hskip.5cm\hss + \doifmode{*bodypart}{\placeheadnumber[chapter]}% + \hss}} + +\stopsetups + +\startsetups chapter:finish + + \framed + [width=\makeupwidth, + height=\headerheight, + background=chapter, + frame=off] + {} + +\stopsetups + +% page number + +\defineframedtext + [pagenumbertext] + [align={lohi,middle}, + width=\dimexpr\cutspace-\margindistance\relax, % \hsize, + height=\vsize, + background=color, + backgroundcolor=green, + style=\MedNumber, + color=white, + offset=none, + frame=off] + +\setupbottomtexts + [margin] + [] + [\pagenumbertext{\hbox to \hsize{\hskip.5cm\hss\placepagenumber\hss}}] + [\pagenumbertext{\hbox to \hsize{\hss\placepagenumber\hss\hskip.5cm}}] + [] + +% area + +\setupbackgrounds [text] [leftedge] [backgroundoffset=0pt,backgroundcolor=areafill] +\setupbackgrounds [text] [rightedge] [backgroundoffset=0pt,backgroundcolor=areafill] +\setupbackgrounds [text] [leftmargin] [backgroundoffset=0pt,backgroundcolor=areafill] +\setupbackgrounds [text] [rightmargin] [backgroundoffset=0pt,backgroundcolor=areafill] + +% grids + +\setuptextbackground + [grid] + [state=start] + +% intros + +% \definetextbackground +% [intro] +% [backgroundcolor=infogray, % green, +% backgroundoffset=.25cm, +% offset=.5cm, +% frame=off, +% color=white] + +\setuplist + [chapter] + [before=, + after=, + alternative=c, + aligntitle=yes] + +\startsectionblockenvironment [backpart] + + \writebetweenlist[chapter]{\blank} + +\stopsectionblockenvironment + +\stopenvironment diff --git a/doc/context/sources/general/manuals/details/details-finetuningfloats.tex b/doc/context/sources/general/manuals/details/details-finetuningfloats.tex new file mode 100644 index 000000000..71e0772d1 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-finetuningfloats.tex @@ -0,0 +1,657 @@ +% language=uk + +% todo: \setlayeranchored[text-1]{HELLO WORLD} + +\environment details-environment + +\startcomponent details-finetuningfloats + +\startchapter[title={Finetuning graphics}] + +In this chapter we will discuss a few more tricks to control float placement. +This control is needed if you want to typeset documents in a semi desk top +publishing way. + +When you combine technical graphics, you may wish to align the content optically. +This can be done with the \type {offset} command. We will demonstrate this with a +couple of \METAPOST\ graphics: + +\startbuffer +\startreusableMPgraphic{alpha} + fill fullsquare xyscaled( 2cm, 2cm) withcolor \MPcolor{red} ; + fill unitsquare xyscaled(+.5cm,+.5cm) withcolor \MPcolor{gray} ; +\stopreusableMPgraphic + +\startreusableMPgraphic{beta} + fill fullsquare xyscaled( 2cm, 2cm) withcolor \MPcolor{red} ; + fill unitsquare xyscaled(+.5cm,-.5cm) withcolor \MPcolor{gray} ; +\stopreusableMPgraphic + +\startreusableMPgraphic{gamma} + fill fullsquare xyscaled( 2cm, 2cm) withcolor \MPcolor{red} ; + fill unitsquare xyscaled(-.5cm,-.5cm) withcolor \MPcolor{gray} ; +\stopreusableMPgraphic + +\startuseMPgraphic{delta} + fill fullsquare xyscaled( 2cm, 2cm) withcolor \MPcolor{red} ; + fill unitsquare xyscaled(-.5cm,+.5cm) withcolor \MPcolor{gray} ; +\stopuseMPgraphic +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\startcombination[2*2] + {\reuseMPgraphic{alpha}} {alpha} + {\reuseMPgraphic {beta}} {beta} + {\reuseMPgraphic{gamma}} {gamma} + {\reuseMPgraphic{delta}} {delta} +\stopcombination +\stopbuffer + +\typebuffer + +In \in {figure} [fig:offset-1] we place these graphics in a \type {2*2} grid. As +you can see, the centers don't align well. + +\placefigure[here][fig:offset-1]{}{\getbuffer} + +In \in {figure} [fig:offset-2] the centers of the graphic align well. This is +accomplished by adding some space around the graphics. + +\startbuffer +\startcombination[2*2] + {\ruledhbox{\offset[rightoffset=1cm] {\reuseMPgraphic{alpha}}}} {alpha} + {\ruledhbox{\offset[bottomoffset=.5cm]{\reuseMPgraphic {beta}}}} {beta} + {\ruledhbox{\offset[bottomoffset=.5cm]{\reuseMPgraphic{gamma}}}} {gamma} + {\ruledhbox{\offset[leftoffset=1cm] {\reuseMPgraphic{delta}}}} {delta} +\stopcombination +\stopbuffer + +\placefigure[here][fig:offset-2]{}{\getbuffer} + +\starttyping +\startcombination[2*2] + {\offset[rightoffset=1cm] {\reuseMPgraphic{alpha}}} {alpha} + {\offset[bottomoffset=.5cm]{\reuseMPgraphic {beta}}} {beta} + {\offset[bottomoffset=.5cm]{\reuseMPgraphic{gamma}}} {gamma} + {\offset[leftoffset=1cm] {\reuseMPgraphic{delta}}} {delta} +\stopcombination +\stoptyping + +If we align the centers vertically, as demonstrated in \in {figure} +[fig:offset-2] we can stick to a few bottom offsets. + +\starttyping +\startcombination[4*1] + {\reuseMPgraphic{alpha}} {alpha} + {\offset[bottomoffset=.5cm]{\reuseMPgraphic {beta}}} {beta} + {\offset[bottomoffset=.5cm]{\reuseMPgraphic{gamma}}} {gamma} + {\reuseMPgraphic{delta}} {delta} +\stopcombination +\stoptyping + +\startbuffer +\startcombination[4*1] + {\ruledhbox {\reuseMPgraphic{alpha}}} {alpha} + {\ruledhbox{\offset[bottomoffset=.5cm]{\reuseMPgraphic {beta}}}} {beta} + {\ruledhbox{\offset[bottomoffset=.5cm]{\reuseMPgraphic{gamma}}}} {gamma} + {\ruledhbox {\reuseMPgraphic{delta}}} {delta} +\stopcombination +\stopbuffer + +\placefigure[here][fig:offset-3]{}{\getbuffer} + +These examples demonstrate that the dimensions change with the offset. You can +retain the dimensions but still align them by using the \type {x} and \type {y} +parameter. This kind of manipulations will often result in a ugly spacing because +the placement macros handle on the original dimensions. \in {Figure} +[fig:offset-4] demonstrates this. + +\starttyping +\startcombination[4*1] + {\reuseMPgraphic{alpha}} {alpha} + {\offset[y=-.5cm]{\reuseMPgraphic {beta}}} {beta} + {\offset[y=-.5cm]{\reuseMPgraphic{gamma}}} {gamma} + {\reuseMPgraphic{delta}} {delta} +\stopcombination +\stoptyping + +\startbuffer +\startcombination[4*1] + {\ruledhbox {\reuseMPgraphic{alpha}}} {alpha} + {\ruledhbox{\offset[y=-.5cm]{\reuseMPgraphic {beta}}}} {beta} + {\ruledhbox{\offset[y=-.5cm]{\reuseMPgraphic{gamma}}}} {gamma} + {\ruledhbox {\reuseMPgraphic{delta}}} {delta} +\stopcombination +\stopbuffer + +\placefigure[here][fig:offset-4]{}{\getbuffer} + +In the previous chapter we demonstrated how a side float can be moved up or down +by providing a placement directive or by preceding the placement with \type +{\movesidefloat}. Such a move can be used to align a graphic with particular line +of text. This command can also be used for alignment purposes similar to the +\type {\offset} command. We will demonstrate this with the following graphics. + +\startbuffer +\startreusableMPgraphic{gnu} + fill fullsquare xyscaled( 4cm, 1cm) withcolor \MPcolor{red} ; + fill unitsquare xyscaled(-1cm,.5cm) + shifted (0,-.25cm) withcolor \MPcolor{gray} ; +\stopreusableMPgraphic + +\startreusableMPgraphic{gnat} + fill fullsquare xyscaled( 4cm, 1cm) withcolor \MPcolor{red} ; + fill unitsquare xyscaled(+1cm,.5cm) + shifted (0,-.25cm) withcolor \MPcolor{gray} ; +\stopreusableMPgraphic +\stopbuffer + +\typebuffer \getbuffer + +In the next two examples we shift the \type {gnu} and \type {gnat} graphics +horizontally in order to get them aligned. The move does not change the +dimensions of the float, but they do influence the paragraph shape. + +\startbuffer[a] +\movesidefloat [x=.5cm] +\placefigure [left,none] {} {\reuseMPgraphic{gnu}} +\stopbuffer + +\startbuffer[b] +\movesidefloat [x=-.5cm] +\placefigure [left,none] {} {\reuseMPgraphic{gnat}} +\stopbuffer + +\typebuffer[a,b] + +\getbuffer[a] \fakewords{50}{100} +\getbuffer[b] \fakewords{50}{100} + +\blank + +It is possible to shift vertically by setting \type {y}, but this is often a bad +idea and definitely may spoil alignment of graphics to the grid. If you have to +revert to this trick, you are probably working in document screw||up mode. This +is why in grid mode, we automatically round to an equal number of lines. + +If you know what text you're dealing with and also can be sure about the height +of a graphic, you can trick \CONTEXT\ to ignore the dimensions of a graphic. Here +we use the graphic: + +\startbuffer +\startreusableMPgraphic{gnome} + fill fullsquare xyscaled(2cm, 1cm) withcolor \MPcolor{red} ; + fill fullsquare xyscaled(1cm,.5cm) withcolor \MPcolor{gray} ; +\stopreusableMPgraphic +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\placefigure[leftmargin,none,reset]{}{\reuseMPgraphic{gnome}} +\stopbuffer + +\typebuffer \getbuffer + +The graphic is moved into the margin (\type {leftmargin}), has no caption (\type +{none}), and all kind of tricky housekeeping is reset (\type {reset}). + +\startbuffer +\placefigure[left,none,high,low]{}{\reuseMPgraphic{gnome}} +\stopbuffer + +\getbuffer + +Now the next graphic is not influenced by the previous one, so we can place them +close to each other. Use these tricks with care, especially if your document +source is reused and the typeset products are not carefully checked. + +\typebuffer + +When \CONTEXT\ tries to determine if a float fits, it makes a couple of +assumptions, for instance that the available room equals the text height minus +the height of the text so far. You can slightly influence the way these values +are interpreted by setting the calculation method. You can set the methods as +follows: + +\starttyping +\setupfloats[textmethod=0,sidemethod=1] +\stoptyping + +Method~0 just looks at the raw dimensions, while method~1 lessens the maximum +text height by one percent, thereby playing safe. Method~2 takes a window of +1~point. This may lead to better decisions since we may run into rounding errors +of several scaled points (which is small but troublesome). Method~2 is well +suited when typesetting on a grid, because there everything has to fit in a +rounded number of lines, which leaves no room for rounding errors. + +\starttabulate[||c|c|] +\NC \bf grid mode \NC \bf yes \NC \bf no \NC \NR +\NC \type{sidemethod} \NC \type{2} \NC \type{1} \NC \NR +\NC \type{textmethod} \NC \type{2} \NC \type{0} \NC \NR +\stoptabulate + +\startusableMPgraphic{demo-1}{color} + path p ; + p := fullsquare xyscaled (3cm,2LineHeight) ; + fill p withcolor \MPvar{color} ; +\stopusableMPgraphic + +\startusableMPgraphic{demo-2}{color,morecolor} + path p ; p := fullsquare xyscaled (6cm,4LineHeight) ; + path q ; q := fullsquare xyscaled (3cm,2LineHeight) ; + fill p withcolor \MPvar{color} ; + setbounds currentpicture to q ; + fill q withcolor \MPcolor{morecolor} ; +\stopusableMPgraphic + +As you may know by now, we can use the directives \type {high}, \type {low}, +\type {height}, \type {depth} and \type {line} to influence the spacing around a +side float. A real tight spacing can be achieved with \type {fit}. + +\starttyping +\placefigure[left,fit,none]{}{some graphic} +\stoptyping + +\placefigure[left,fit,none]{}{\useMPgraphic{demo-1}{color=red}} + +This kind of placements only make sense in special situations, because normally +you don't want the graphic to touch the text. + +If you think that this is all a user may want, you're wrong. It is not imaginary +that graphics have small pieces sticking out and|/|or lots of white space as part +of their design. In that case, the bounding box can be set to a smaller size. + +\placefigure + [left,fit,none] + {} + {\setlayer + [graphics] + {\useMPgraphic{demo-2}{color=red,morecolor=tgreen}}} + +Now, when handling a side float, \CONTEXT\ first places the float, and then +starts with typesetting the paragraph, cleverly avoiding the graphic. However, +when the graphic is virtually larger than its known size, it may cover part of +the preceding paragraph. + +How come that the graphic starting this paragraph does not do that? It is because +we explicitly moved it to the background. This involves some preparation. At the +document level, we define a layer called \type {graphic}. + +\starttyping +\definelayer[graphics][position=yes] +\stoptyping + +The position directive tells \CONTEXT\ that it should honour the position of the +graphic. Next we must make sure that this layer is placed. + +\starttyping +\setupbackgounds[page][background=graphics] +\stoptyping + +Now we're ready to move graphics to this layer: + +\starttyping +\placefigure + [left,fit,none] + {}{\setlayer[graphics]{graphic}} +\stoptyping + +It's now a small step to more advanced movements. Say that you want to move the +graphic a little bit to the left. In that case you can tell the layer placement +to do so. + +\starttyping +\placefigure + [left,fit,none]{}{\setlayer[graphics][hoffset=-12pt]{graphic}} +\stoptyping + +From this you can deduce that there is also a movement in the vertical direction +using \type {voffset}. In addition you can anchor the graphic using the \type +{location} parameter and provide offsets. + +\placefigure + [left,fit,none] + {} + {\setlayer + [graphics][hoffset=-12pt] + {\useMPgraphic{demo-2}{color=red,morecolor=tgreen}}} + +As soon as you run into situations where float placement is to be consistently +enforced, you will feel the need for dedicate placement macros. For example: + +\startbuffer +\definefloat + [somefloat] + [figure] + +\setupfloat + [somefloat] + [sidespaceafter=, + sidespacebefore=, + default={left,none}] +\stopbuffer + +\typebuffer \getbuffer + +Instead of resetting the side spacing, we could have default to \type {high,low}, +but this way we can overload the default placement and still get zero spacing. + +Throughout this manual we discuss features related to overlays and layers. These +permit you to move content around in ways that either or not depend on the text +flow. We have now come to another trick based on these mechanisms: bleeding. + +When printing a document, you need to take into account that when graphics go +beyond the page boundary, you need to compensate for inaccuracies in cutting the +pages. Such graphics are called bleeding graphics and the amount of bleed is +often a few millimeters. + +The best way to handle such graphics is to use the correct dimensions and play +with the edge widths and distances in combination with backspace and cut space. In +a properly set up layout and by using a well designed set of predefined graphic +placements, you can handle this quite well. A bleeding figure can be defined as +follows: + +\startbuffer +\definefloat + [edgefigure] + [figure] + +\setupfloat + [edgefigure] + [default={inner,height,high,low,none}, + maxwidth=4cm] + +\defineexternalfigure + [edgefigure] + [width=\dimexpr\backspace+4cm-1mm\relax, + lines=4] +\stopbuffer + +\typebuffer \getbuffer + +The default placement is pre|-|configured to have no additional vertical space and +align on the height of a line (this is default behaviour so the \type {height} +key is redundant here. The 1mm in the previous definition simulates what happens +when a page is cut off slightly wrong: we get an annoying gap. + +\startbuffer[a] +\placeedgefigure + {} + {\externalfigure[hacker][edgefigure]} +\stopbuffer + +\typebuffer[a] \getbuffer[a] \fakewords{50}{100} + +One of the nice things about \TEX\ is that you can fine tune dimensions pretty +well. So, instead of the previous placement, which turns out rather ugly, we can +come up with a better one: + +\startbuffer +\setupfloat + [edgefigure] + [default={inner,height,high,low,none}, + maxwidth=4cm, + margin=\strutdepth] + +\defineexternalfigure + [edgefigure] + [width=\dimexpr\backspace+4cm+2mm\relax, + height=\dimexpr3\lineheight+\strutheight\relax] +\stopbuffer + +\typebuffer \getbuffer + +This time we take no risk and add 2mm to the dimensions so that we can be sure +that the edge of the graphic falls outside the page boundary. + +\getbuffer[a] \fakewords{50}{100} + +The \CONTEXT\ resourse library modules provide means to report back the +dimensions of graphics used in a document, so that you can develop (tune) them +with the proper dimensions. In practice a slightly wider than normal graphic +(scaling it horizontally a few millimeters more) does not harm the visual +appearance that much, so adapting a graphic to this kind of bleeding is not +really needed. + +In addition to this (rather natural) way of adding bleed to a graphic, you can +apply the \type {\bleed} macro. In the previously discussed method the figure +placement mechanisms work with the real dimensions. The \type {bleed} macro is +using scaling in a different way: from the perspective of \CONTEXT\ the graphic +remains its original dimensions and the figure placement mechanisms will act +accordingly. We will give a couple of examples of using this macro. + +Permitted bleeding locations are \type {l}, \type {r}, \type {t}, \type {b}, +\type {lr}, \type {bl}, \type {br}, \type {tl} and \type {tr}. + +\startbuffer +\placesomefloat + [left,none,fit] + {} + {\setupbleeding[offset=5mm]% + \bleed[width=5cm,height=1cm,location=l] + {\externalfigure[mill][bleed]}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{50}{100} + +\startbuffer +\placesomefloat + [left,none,fit] + {} + {\setupbleeding[offset=2mm]% + \bleed[width=5cm,height=1cm,location=l] + {\externalfigure[mill][bleed]}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{50}{100} + +The amount of bleeding depends on the postprocessing. In the previous paragraph +we used a bleed offset of 5mm, and here we used 2mm. Because the graphic is +scaled in order to match the bleed, it will be slightly distorted. With small +values this will go unnoticed. You can set the offset with: + +\starttyping +\setupbleeding[offset=5mm] +\stoptyping + +Bleeding itself is accomplished by the \type {\bleed} macro as in: + +\starttyping +\bleed + [width=5cm,height=1cm,location=l] + {\externalfigure[mill][width=\bleedwidth,height=\bleedheight]} +\stoptyping + +It is kind of awkward to pass those two dimensions so here is a shorter way of +doing the same: + +\starttyping +\bleed + [width=5cm,height=1cm,location=l] + {\externalfigure[mill][bleed]} +\stoptyping + +In fact, this uses the following definition: + +\starttyping +\defineexternalfigure[bleed][width=\bleedwidth,height=\bleedheight] +\stoptyping + +You can influence the scaling of a graphic by setting the \type {stretch} +parameters. The location parameter determines the direction of the stretch: \type +{l}~(left), \type {r}~(right), \type {t}~(top), \type {b}~(bottom) or a +combination of these. We will now combine the previous example code with this +knowledge. + +\startbuffer +\placefigure + [left] + {} + {\bleed + [stretch=no,voffset=0pt,hoffset=1cm] + {\externalfigure[detcow][bleed]}} +\stopbuffer + +\typebuffer \getbuffer \fakewords {100} {150} + +\startbuffer +\placefigure + [left] + {} + {\bleed + [width=5cm,height=3cm,location=l] + {\externalfigure[detcow][bleed]}} +\stopbuffer + +\typebuffer \getbuffer \fakewords {100} {150} + +\startbuffer +\placefigure + [right] + {} + {\bleed + [width=5cm,height=3cm,location=r] + {\externalfigure[detcow][bleed]}} +\stopbuffer + +\typebuffer \getbuffer \fakewords {100} {150} + +You can combine this feature with layers. We will now show a few applications +which may look like magic at first glance, but will become natural to your +repertoire once you have played with them. + +The next example moves the graphic to a layer associated with the (current) page. + +\startbuffer +\placefigure + [right,none] + {} + {\setlayer + [graphics] + {\bleed + [width=5cm,height=3cm,location=rb] + {\externalfigure[detcow][bleed]}}} +\stopbuffer + +\typebuffer \getbuffer \fakewords {100} {150} + +You can also predefine locations where graphics (or other content) needs to be +anchored. A direct call to anchor looks as follows: + +\starttyping +\placefigure + [left,none] + {} + {\anchor + [text-1] + [location=lt,hoffset=max,voffset=max] + [width=3cm,height=3cm,frame=on]% + {\externalfigure[detcow][width=5cm,frame=on]}} +\stoptyping + +This will anchor a graphic in one of the text layers, but at the cost of +specifying this in the document source. One way around this is to predefine +anchors. + +\startbuffer +\defineanchor[rightbottom][text-1][location=lt,hoffset=max,voffset=max] +\defineanchor[righttop] [text-1][location=lb,hoffset=max] +\defineanchor[leftbottom] [text-1][location=rt,voffset=max] +\defineanchor[lefttop] [text-1][location=rb] +\stopbuffer + +\startbuffer +\defineanchor[rightbottom][text-1][preset=rightbottom] +\defineanchor[righttop] [text-1][preset=righttop] +\defineanchor[leftbottom] [text-1][preset=leftbottom] +\defineanchor[lefttop] [text-1][preset=lefttop] +\stopbuffer + +\typebuffer \getbuffer + +We will apply this to a predefined float type. + +\startbuffer +\definefloat[myfigure][figure] +\setupfloat[myfigure][sidespaceafter=,sidespacebefore=] +\stopbuffer + +\typebuffer \getbuffer + +Our previous example can now be reduced to: + +\startbuffer +\placemyfigure + [left,none] + {} + {\anchor[rightbottom] + {\externalfigure[detcow][width=5cm,frame=on]}} +\stopbuffer + +\typebuffer \getbuffer \fakewords {100} {150} + +You can still specify dimensions and anchors can be combined with bleeding. Of +course this kind of mixed usage means that you need to have some feeling for what +these mechanisms do. + +\startbuffer +\placemyfigure + [left,none] + {} + {\anchor + [rightbottom] + [width=5cm,height=3cm,frame=on] + {\bleed + [width=5cm,height=3cm,location=l] + {\externalfigure[detcow][bleed]}}} +\stopbuffer + +\typebuffer \getbuffer \fakewords {100} {150} + +\startbuffer +\placemyfigure + [right,none] + {} + {\anchor + [rightbottom] + [width=5cm,height=3cm,frame=on] + {\bleed + [width=5cm,height=3cm,location=r] + {\externalfigure[detcow][bleed]}}} +\stopbuffer + +\typebuffer \getbuffer \fakewords {100} {150} + +\startbuffer +\placemyfigure + [left,none] + {} + {\anchor + [lefttop] + [width=3cm,height=3cm,frame=on] + {\externalfigure[detcow][width=5cm,frame=on]}} +\stopbuffer + +\typebuffer \getbuffer \fakewords {100} {150} + +\startbuffer +\placemyfigure + [left,none] + {} + {\anchor + [lefttop] + [width=3cm,height=3cm,frame=on] + [offset=.5cm] + {\externalfigure[detcow][width=5cm,frame=on]}} +\stopbuffer + +\typebuffer \getbuffer \fakewords {100} {150} + +\blank {\em Todo: parameter specifications of all those macros.} + +\stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-floatingaround.tex b/doc/context/sources/general/manuals/details/details-floatingaround.tex new file mode 100644 index 000000000..91d853098 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-floatingaround.tex @@ -0,0 +1,1485 @@ +% language=uk + +\environment details-environment + +\startcomponent details-floatingaround + +\startchapter[title={Floating around}] + +\index {floats} + +Graphics, tables and alike are often treated as floating bodies. This means that +when such a body does not fit on the current page, it will be moved to the next +one. In the examples we will use figures, but much of what we demonstrate here +applies to all floats. + +A side float is a float which placement one way or another depends on the text +that follows it. In its simplest form, the text flows around it, for instance in: + +\startbuffer +\placefigure[left,none]{caption}{\framed[height=1cm]{graphic}} +\stopbuffer + +\typebuffer + +The first keyword of such a call is treated as a placement directive, so this +figure will be placed left. The \type {none} directive nils the caption. + +\getbuffer \fakewords{60}{80} + +When the figure does not fit on the page, a page break is issued. A figure can +span multiple paragraphs. When a next graphic is placed the previous figure will +be padded if needed. First an example of multiple paragraphs. + +\getbuffer \fakewords{30}{40} \par \fakewords{30}{40} + +Multiple floats in a row will lead to padding. The amount of padding is a +combination of empty lines and the normal white space following the float. The +visual quality of the result depends on the graphic itself. + +\start \tracesidefloatstrue + +\getbuffer \fakewords{30}{40} + +\getbuffer \fakewords{30}{40} \fakewords{30}{40} + +\stop + +Here we show the baseline of the first paragraph after the float as well as the +filler. The whitespace around a graphic also depends on the inter|-|paragraph +whitespace. As with many automated mechanisms, compromises are made. A one point +smaller figure may result in an extra empty line. + +Later we will demonstrate a lot of tuning options, but first we give a few more +examples. Most of the tuning options can be driven by keywords as well as +(global) settings. + +\startbuffer +\placefigure + [left,nonumber] + {caption} {\framed[height=1cm]{graphic}} +\stopbuffer + +\typebuffer + +The \type {nonumber} keyword suppresses the label and figure number. You can do +this for all figures with + +\starttyping +\setupcaption[figure][number=no] +\stoptyping + +The previous placement command results in the following side float. + +\getbuffer \fakewords{80}{100} + +Another handy keyword is \type {none}. + +\startbuffer +\placefigure + [left,none]{quoting knuth} + {\framed[height=1cm]{graphic}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{80}{100} + +Control over spacing is exercised by means of the keywords \type {high}, \type +{low} and \type {fit}. + +\startbuffer +\placefigure + [left,none,high]{} + {\framed[height=1cm]{graphic}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{80}{100} + +\startbuffer +\placefigure + [left,none,high,low]{} + {\framed[height=1cm]{graphic}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{80}{100} + +\startbuffer +\placefigure + [left,none,fit]{} + {\framed[height=1cm]{graphic}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{80}{100} + +In the examples so far, we saw additional spacing around the graphic. We will now +(for a while) disable the surrounding whitespace. + +\startbuffer +\setupfloat + [figure] + [sidespacebefore=none, + sidespaceafter=none] +\stopbuffer + +\typebuffer + +With these settings a simple left placement looks as follows. The top of the side +float aligns with the maximum height of a line. + +\start \getbuffer \tracesidefloatstrue + +\startbuffer +\placefigure + [left,none] + {} {\framed[height=1cm]{graphic}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} \par \stop + +You can change the alignment by setting the \type {sidealign} variable, for +instance: + +\starttyping +\setupfloat + [figure] + [sidealign=line] +\stoptyping + +The three keywords \type {height}, \type {line} and \type {depth} can also be +passed directly: + +\startbuffer +\placefigure + [left,none,height]{} + {\framed[height=1cm]{graphic}} +\stopbuffer + +\typebuffer + +The three alignments disable the spacing before the float and show up as follows. + +\bgroup \tracesidefloatstrue \getbuffer \fakewords{30}{40} \par \egroup + +\startbuffer +\placefigure + [left,none,line]{} + {\framed[height=1cm]{graphic}} +\stopbuffer + +\bgroup \tracesidefloatstrue \getbuffer \fakewords{30}{40} \par \egroup + +\startbuffer +\placefigure + [left,none,depth]{} + {\framed[height=1cm]{graphic}} +\stopbuffer + +\bgroup \tracesidefloatstrue \getbuffer \fakewords{30}{40} \par \egroup + +So far the floats took up space in the main text body area. In addition to the +\type {left} (or \type {right}) directive we can use \type {inner} or \type +{outer} to force left or right placement depending in the spread. + +Instead of spoiling paper in the text areas, we can use the margin and edges: +\type {leftmargin} and \type {leftedge}, \type {rightmargin} and \type +{rightedge}, but also \type {innermargin} and \type {outermargin}, \type +{inneredge} and \type {outeredge}. + +The next couple of pages we will highlight the margins and edges so that we can +see what happens. + +\setupbackgrounds [text] [leftedge] [background=color] +\setupbackgrounds [text] [rightedge] [background=color] +\setupbackgrounds [text] [leftmargin] [background=color] +\setupbackgrounds [text] [rightmargin] [background=color] + +\startbuffer +\placefigure + [leftmargin,none] + {} {\framed{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +\startbuffer +\placefigure + [leftmargin,none] + {} {\framed[width=1cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +\startbuffer +\placefigure + [leftmargin,none] + {} {\framed[width=1.5cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +The placement directives can be combined with setting distance and width +parameters, thereby not only opening a world of possibilities, but also creating +confusion. Therefore, we will illustrate these features by cloning floats. + +\startbuffer +\definefloat + [marginfigure] + [figure] + +\setupfloat + [marginfigure] + [leftmargindistance=-\leftmargintotal, + default={left,none,low}] +\stopbuffer + +\typebuffer \getbuffer + +The definition command clones figure into a new class of figures. There are two +ways to use such a float : + +\starttyping +\placefloat + [marginfigure] + {} {\framed[width=1.5cm]{!}} +\stoptyping + +or directly: + +\startbuffer +\placemarginfigure + {} {\framed[width=1.5cm]{!}} +\stopbuffer + +\typebuffer + +Both placement calls will result in a figure sticking into the margin. + +\getbuffer \fakewords{30}{40} + +By manipulating the margin distance, you can align graphics to vertical grid +lines, like the edge: + +\startbuffer +\definefloat + [edgefigure] + [figure] + +\setupfloat + [edgefigure] + [leftmargindistance=-\innercombitotal, + default={left,none,low,high}] +\stopbuffer + +\typebuffer \getbuffer + +The \type {\innercombitotal} is one of the many available dimensions. This +measure is the combined width of the margin and edge. + +\startbuffer +\placeedgefigure + {} {\framed[width=1.5cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +\startbuffer +\placeedgefigure + {} {\framed[width=\innercombitotal]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +You need to be aware of the fact that the margins and edges are not related to +the backspace and cut space settings. When you set up a layout, you need to think +of the right page as starting point. In a double sided layout, the margins are +swapped in the page composition stage. Unless you explicitly go to a left or +right page, you don't know if your left margin will be swapped or not. + +For this reason \CONTEXT\ provides the inner and outer margin|/|edge dimensions. +These are automatically synchronized when the float is constructed. So, if you +want to automatically adapt the float placement and width to the current left +margin in a double sided document, you can use the inner dimensions. + +\starttabulate[||||] +\NC dimension \NC left page + \NC right page \NC\NR +\NC \type{\outermarginwidth} \NC \type{\leftmarginwidth} + \NC \type{\rightmarginwidth} \NC\NR +\NC \type{\innermarginwidth} \NC \type{\rightmarginwidth} + \NC \type{\leftmarginwidth} \NC\NR +\NC \type{\outermargindistance}\NC \type{\leftmargindistance} + \NC \type{\rightmargindistance}\NC\NR +\NC \type{\innermargindistance}\NC \type{\rightmargindistance} + \NC \type{\leftmargindistance} \NC\NR +\stoptabulate + +Similar dimensions are available for the edges. You can save yourself some +calculations by using the following dimensions: + +\starttabulate[|||||] +\NC \type{\leftmargintotal} \NC left margin width \NC + \NC left margin distance \NC\NR +\NC \type{\rightmargintotal} \NC right margin width \NC + \NC right margin distance \NC\NR +\NC \type{\innermargintotal} \NC inner margin width \NC + \NC inner margin distance \NC\NR +\NC \type{\outermargintotal} \NC outer margin width \NC + \NC outer margin distance \NC\NR +\stoptabulate + +As you may expect, the edge totals are available as well, which leave a few more +totals, namely the combinations of margin and edge. + +\starttabulate[|||] +\NC \type{\leftsidetotal} \NC left margin width \NC + \NC left edge total \NC\NR +\NC \type{\rightsidetotal} \NC right margin width \NC + \NC right edge total \NC\NR +\TB +\NC \type{\innersidetotal} \NC inner margin width \NC + \NC inner edge total \NC\NR +\NC \type{\outersidetotal} \NC outer margin width \NC + \NC outer edge total \NC\NR +\TB +\NC \type{\leftcombitotal} \NC left margin total \NC + \NC left edge total \NC\NR +\NC \type{\rightcombitotal} \NC right margin total \NC + \NC right edge total \NC\NR +\TB +\NC \type{\innercombitotal} \NC inner margin total \NC + \NC inner edge total \NC\NR +\NC \type{\outercombitotal} \NC outer margin total \NC + \NC outer edge total \NC\NR +\stoptabulate + +Adaptive back- and cutspace dimensions are also available: + +\starttabulate[|||||] +\NC \type{\innerspacewidth} \NC adaptive backspace \NC\NR +\NC \type{\outerspacewidth} \NC adaptive cutspace \NC\NR +\stoptabulate + +There is one drawback in using the inner and outer dimensions: if you also change +the height of the float dynamically, you may end up in a kind of loop because a +page break may occur at a non||expected place. + +While negative values move float into the margin, positive values will move the +float into the text. It will be of no surprise that you can also set the right +margin distance. Keep in mind that this distance is not related to the text +margin, but to the float margin. + +\startbuffer +\setupfloat + [edgefigure] + [leftmargindistance=-\outercombitotal, + rightmargindistance=-\outercombitotal, + default={outer,none,low,high}] +\stopbuffer + +\typebuffer \getbuffer + +The locations \type {inner} and \type {outer} change with the left or right page. + +\startbuffer +\placeedgefigure + {} {\framed[width=\outercombitotal]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +\startbuffer +\placeedgefigure + {} {\framed[width=8cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +As a result of manipulating the floats margin settings, the side floats can start +in the margin (or edge). You should not confuse this with margin floats, i.e.\ +side floats that are explicitly placed in the margins. + +\startbuffer +\placefigure[leftmargin,none] + {} {\framed{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +\startbuffer +\placefigure[leftmargin,none] + {} {\framed[width=.5cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +\startbuffer +\placefigure[leftmargin,none] + {} {\framed[width=1.5cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +\startbuffer +\placefigure[leftmargin,none] + {} {\framed[width=5cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +The margin side floats align to the margin and the edge floats to the edge. This +way you can create bleeding figures. + +\startbuffer +\placefigure[leftedge,none] + {} {\framed{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +There are situations where you don't know the dimensions in advance. In order to +prevent unwanted side effects, for instance part of a graphic disappearing +outside the page boundary, \CONTEXT\ provides a few options. The most crude one +is setting the \type {criterium}, as in: + +\starttyping +\setupfloat + [figure] + [criterium=.25\textwidth] +\stoptyping + +This will automatically turn figures that are wider than 25\% of the text width +into normal floats instead of side floats. But let's not fall back on that +feature now. + +You can use \type {maxwidth} and \type {minwidth} variables to control the +placement in more detail. The exact result depends on the settings of \type +{location}. By default we center, but you can set the location to \type {left} or +\type {right} to achieve a different alignment. + +\startbuffer +\definefloat + [midmarginfigure] + [figure] + +\setupfloat + [midmarginfigure] + [minwidth=\leftmarginwidth, + default={leftmargin,none}] +\stopbuffer + +\typebuffer \getbuffer + +You can use \type {maxwidth} and \type {minwidth} variables to control the +placement in more detail. The exact result depends on the settings of \type +{location}. By default we center, but you can set the location to \type {left} or +\type {right} to achieve a different alignment. + +\startbuffer +\placemidmarginfigure + {} {\framed[width=1.5cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +The meaning of \type {maxwidth} depends on the kind of float. First we place a +left float with a width smaller than \type {maxwidth}. + +\start + +\startbuffer +\setupfloat[figure][maxwidth=2cm] +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\placefigure[left,none]{}{\framed[width=1cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +When the width exceeds the maxwidth, the float will be centered. This is because +we have no reference alignment point. + +\startbuffer +\placefigure[left,none]{}{\framed[width=5cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +In margin floats, the \type {maxwidth} settings have a different result. First we +place a small graphic. + +\startbuffer +\setupfloat[figure][maxwidth=\leftmarginwidth] +\stopbuffer + +\typebuffer \getbuffer + +\startbuffer +\placefigure[leftmargin,none]{}{\framed[width=1cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +Because the left and right margin of this document are the same |<|the edges +differ|>| we don't need to use inner and outer dimensions. + +\startbuffer +\setupfloat[figure][maxwidth=\leftmarginwidth] +\stopbuffer + +\typebuffer \getbuffer + +A wider than \type {maxwidth} graphic will behave like a mixture of a margin and +text side float. Watch how we align the float to the margin. + +\startbuffer +\placefigure[leftmargin,none]{}{\framed[width=5cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +\stop + +Instead of setting the width you can give \type {hanging} a try. The next +examples demonstrate this. + +\startbuffer +\placefigure[leftmargin,hanging,none]{}{\framed[width=5cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +\startbuffer +\placefigure[left,hanging,none]{}{\framed[width=5cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +You can move down|/|up margin floats with the \type {\movesidefloat} macro. Such +shifts come in handy when you have multiple side floats near to each other. + +\startbuffer +\movesidefloat [+2*line] +\placemidmarginfigure {} {\framed{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +Given the default placement template, this is equivalent to the following +command. Watch out, a simple \type {line} has a different effect (alignment). + +\starttyping +\placemidmarginfigure + [leftmargin,none,+2*line] + {} {\framed{!}} +\stoptyping + +Another nice keyword is \type {long}: + +\startbuffer +\placefigure + [leftmargin,none,long] + {} {\framed[height=2cm,width=2cm]{!}} + +Watch how we move down. The effect is that we skip over the margin figure. + +\placefigure + [leftmargin,none] + {} {\framed[height=1cm,width=2cm]{!}} +\stopbuffer + +\typebuffer \getbuffer \fakewords{30}{40} + +\startbuffer +\placefigure + [leftmargin,none] + {} {\framed[height=2cm,width=2cm]{!}} + +Do we clash or not? + +\placefigure + [leftmargin,none] + {} {\framed[height=2cm,width=2cm]{!}} + +Did we clash or not? +\stopbuffer + +\typebuffer \getbuffer + +There are a few macros that can be of help with solving clashes in side floats: + +\starttabulate +\NC \tex {flushsidefloats} \NC + This macro moves down as much as is needed to separate the side floats of + each other. \NC \NR +\NC \tex {forgetsidefloats} \NC + this macro kind of forgets that a side float is in progress. \NC \NR +\stoptabulate + +Use these macros with care. If you change the dimensions of the graphic and|/|or +content involved, reconsider the use of these directives. + +The next couple of spreads we will demonstrate some example definitions. These +placements are taken from one of the styles we made for typesetting a series of +school math books which illustrations and tables all over the pages. + +First we fine tune the spacing around side floats and verbatim text. + +\startbuffer[setupa] +\setupfloats + [sidespacebefore=none, + sidespaceafter=depth] + +\setuptyping + [margin=] +\stopbuffer + +\typebuffer[setupa] + +The placements have rather verbose names. In this case the word \quote {edge} is +used to identify bleeding floats (with an cut||off margin of 3mm). The \quote +{text} floats are side floats positioned in the main text flow. + +\startbuffer[setupb] +\definefloat [marginfigure] [marginfigures] [figure] +\definefloat [middlemarginfigure] [middlemarginfigures] [figure] +\definefloat [middlefigure] [middlefigures] [figure] +\definefloat [textfigure] [textfigures] [figure] +\definefloat [leftfigure] [leftfigures] [figure] +\definefloat [rightfigure] [rightfigures] [figure] +\definefloat [bleedfigure] [bleedfigures] [figure] +\stopbuffer + +\typebuffer[setupa] + +Watch how we define fall backs for too wide content (\type +{criterium} as well as use \type {maxwidth} to manipulate +the placement of content that falls off the margins. + +The black rules are set up with: + +\startbuffer[setupc] +\setupblackrules[color=tred,depth=0pt,height=1.5cm] +\stopbuffer + +\typebuffer[setupc] + +\page[left] + +\startbuffer[series] + +\startbuffer +\setupfloat + [marginfigure] + [criterium=.5\textwidth, + maxwidth=\rightmarginwidth, + default={outermargin,none}] +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placemarginfigure{}{\blackrule[width=.25cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemarginfigure{}{\blackrule[width=.5cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemarginfigure{}{\blackrule[width=1cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemarginfigure{}{\blackrule[width=2cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemarginfigure{}{\blackrule[width=4cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemarginfigure{}{\blackrule[width=8cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemarginfigure{}{\blackrule[width=16cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\stopbuffer + +{\getbuffer[setupa,setupb,setupc,series]} \page +{\getbuffer[setupa,setupb,setupc,series]} \page + +\startbuffer[series] + +\startbuffer +\setupfloat + [middlemarginfigure] + [minwidth=\rightmarginwidth, + criterium=\backspace, + location=middle, + default={outermargin,none}] +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placemiddlemarginfigure{}{\blackrule[width=.25cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemiddlemarginfigure{}{\blackrule[width=.5cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemiddlemarginfigure{}{\blackrule[width=1cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemiddlemarginfigure{}{\blackrule[width=2cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemiddlemarginfigure{}{\blackrule[width=4cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemiddlemarginfigure{}{\blackrule[width=8cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placemiddlemarginfigure{}{\blackrule[width=16cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\stopbuffer + +{\getbuffer[setupa,setupb,setupc,series]} \page +{\getbuffer[setupa,setupb,setupc,series]} \page + +\startbuffer[series] + +\startbuffer +\setupfloat + [middlefigure] + [default={here,none}] +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placemiddlefigure{}{\blackrule[width=.25cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placemiddlefigure{}{\blackrule[width=.5cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placemiddlefigure{}{\blackrule[width=1cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placemiddlefigure{}{\blackrule[width=2cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placemiddlefigure{}{\blackrule[width=4cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placemiddlefigure{}{\blackrule[width=8cm]} +\stopbuffer + +\getbuffer \typebuffer + +%\startbuffer +%\placemiddlefigure{}{\blackrule[width=16cm]} +%\stopbuffer +% +%\getbuffer \typebuffer + +\stopbuffer + +{\getbuffer[setupa,setupb,setupc,series]} \page +{\getbuffer[setupa,setupb,setupc,series]} \page + +\startbuffer[series] + +\startbuffer +\setupfloat + [textfigure] + [criterium=.5\textwidth, + default={outer,none}] +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placetextfigure{}{\blackrule[width=.25cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placetextfigure{}{\blackrule[width=.5cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placetextfigure{}{\blackrule[width=1cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placetextfigure{}{\blackrule[width=2cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placetextfigure{}{\blackrule[width=4cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placetextfigure{}{\blackrule[width=8cm]} +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placetextfigure{}{\blackrule[width=16cm]} +\stopbuffer + +\getbuffer \typebuffer + +\stopbuffer + +{\getbuffer[setupa,setupb,setupc,series]} \page +{\getbuffer[setupa,setupb,setupc,series]} \page + +\startbuffer[series] + +\startbuffer +\setupfloat + [leftfigure] + [criterium=.5\textwidth, + default={left,none}] +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placeleftfigure{}{\blackrule[width=.25cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placeleftfigure{}{\blackrule[width=.5cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placeleftfigure{}{\blackrule[width=1cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placeleftfigure{}{\blackrule[width=2cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placeleftfigure{}{\blackrule[width=4cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placeleftfigure{}{\blackrule[width=8cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placeleftfigure{}{\blackrule[width=16cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\stopbuffer + +{\getbuffer[setupa,setupb,setupc,series]} \page +{\getbuffer[setupa,setupb,setupc,series]} \page + +\startbuffer[series] + +\startbuffer +\setupfloat + [rightfigure] + [criterium=.5\textwidth, + default={right,none}] +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placerightfigure{}{\blackrule[width=.25cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placerightfigure{}{\blackrule[width=.5cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placerightfigure{}{\blackrule[width=1cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placerightfigure{}{\blackrule[width=2cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placerightfigure{}{\blackrule[width=4cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placerightfigure{}{\blackrule[width=8cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placerightfigure{}{\blackrule[width=16cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\stopbuffer + +{\getbuffer[setupa,setupb,setupc,series]} \page +{\getbuffer[setupa,setupb,setupc,series]} \page + +\startbuffer[series] + +\startbuffer +\setupfloat + [bleedfigure] + [criterium=.5\textwidth, + leftmargindistance=-1mm, + rightmargindistance=-1mm, + default={backspace,none}] +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placebleedfigure{}{\blackrule[width=.25cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=.5cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=1cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=2cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=4cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=8cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=16cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\stopbuffer + +{\getbuffer[setupa,setupb,setupc,series]} \page +{\getbuffer[setupa,setupb,setupc,series]} \page + +\startbuffer[series] + +\startbuffer +\setupfloat + [bleedfigure] + [criterium=.5\textwidth, + leftmargindistance=-1mm, + rightmargindistance=-1mm, + default={cutspace,none}] +\stopbuffer + +\getbuffer \typebuffer + +\startbuffer +\placebleedfigure{}{\blackrule[width=.25cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=.5cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=1cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=2cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=4cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=8cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\startbuffer +\placebleedfigure{}{\blackrule[width=16cm]} +\stopbuffer + +\getbuffer \typebuffer \flushsidefloats + +\stopbuffer + +{\getbuffer[setupa,setupb,setupc,series]} \page +{\getbuffer[setupa,setupb,setupc,series]} \page + +\page + +\setupbackgrounds [text] [leftedge] [background=] +\setupbackgrounds [text] [rightedge] [background=] +\setupbackgrounds [text] [leftmargin] [background=] +\setupbackgrounds [text] [rightmargin] [background=] + +At \CONTEXT\ and Bacho\TEX meetings it is now a tradition that Harald König and I +spend some time on figuring out what happens with border cases and interfences +with user intervention. As it's hard to nail down I decided to add some more +tracing and control. So, the remainder of this chapter is dedicated to Harald. + +We will now demonstrate some features in a way that makes it possible to +compare to the simple default case. Options can be passed as keywords: + +\starttyping +\placefigure + [left,...] + [fig:whatever] + {caption} + {content} +\stoptyping + +or as settings: + +\starttyping +\startplacefigure + [default={left,...}, + title=caption, + reference=fig:whatever] + + content + +\stopplacefigure +\stoptyping + +It is important to realize that all that spacing can interfere with additional +hard coded corrections at the users end. We don't show the effects of \type +{sidespacebefore} and \type {sidespaceafter}, the two general vertical spacing +hooks. These are currently set to {\tttf \rootfloatparameter {sidespacebefore}} +and {\tttf \rootfloatparameter {sidespaceafter}} respectively. The \type +{sidealign} parameter is always winning from a keyword doing the same. + +The last few examples demonstrate that you can define an instance. Often that's +the best way to deal with special cases in a consistent way. For instance: + +\starttyping +\definefloat + [LeftTwo] + [figure] + +\setupfloat + [LeftTwo] + [default=left, + sidealign=line] +\stoptyping + +First we show some keyword variant, next some parameter driven versions. + +\def\SampleKeyword#1% + {\setbuffer[foo] + \useMPlibrary[dum] + \setupbodyfont[dejavu] + \setuplayout[page] + \placefigure[left]{}{\externalfigure[dummy]} \samplefile{sapolsky} \samplefile{sapolsky} + \placefigure[#1] {}{\externalfigure[dummy]} \samplefile{sapolsky} \samplefile{sapolsky} + \endbuffer + \framed + [background=color,backgroundcolor=white,offset=overlay] + {\scale + [width=.45\textwidth] + {\typesetbuffer[foo]}}} + +\def\SampleSettings#1#2#3% + {\setbuffer[foo] + \useMPlibrary[dum] + \setupbodyfont[dejavu] + \setuplayout[page] + \definefloat[#1][figure] + \setupfloat[#1][default=left] + \definefloat[#2][figure] + \setupfloat[#2][#3] + \startplacefloat[#1] \externalfigure[dummy] \stopplacefloat \samplefile{sapolsky} \samplefile{sapolsky} + \startplacefloat[#2] \externalfigure[dummy] \stopplacefloat \samplefile{sapolsky} \samplefile{sapolsky} + \endbuffer + \framed + [background=color,backgroundcolor=white,offset=overlay] + {\scale + [width=.45\textwidth] + {\typesetbuffer[foo]}}} + +\startbuffer[LeftOne] +\definefloat[LeftOne][figure] + +\setupfloat + [LeftOne] + [default=left] +\stopbuffer + +\startbuffer[LeftTwo] +\definefloat[LeftTwo][figure] + +\setupfloat + [LeftTwo] + [default=left, + sidealign=line] +\stopbuffer + +\startbuffer[LeftThree] +\definefloat[LeftThree][figure] + +\setupfloat + [LeftThree] + [default={left,2*line}] +\stopbuffer + +\startbuffer[LeftFour] +\definefloat[LeftFour][figure] + +\setupfloat + [LeftFour] + [default={left}, + topoffset=5pt] +\stopbuffer + +\startbuffer[LeftFive] +\definefloat[LeftFive][figure] + +\setupfloat + [LeftFive] + [default={left}, + bottomoffset=5pt, + topoffset=5pt] +\stopbuffer + +\startlinecorrection +\startcombination[2*2] + {\SampleKeyword{left,high}} {\type{left,high}} + {\SampleKeyword{left,low}} {\type{left,low}} + {\SampleKeyword{left,high,low}} {\type{left,high,low}} + {\SampleKeyword{left,fit}} {\type{left,fit}} +\stopcombination +\stoplinecorrection + +\startlinecorrection +\startcombination[2*2] + {\SampleKeyword{left,halfline}} {\type{left,halfline}} + {\SampleKeyword{left,height}} {\type{left,height}} + {\SampleKeyword{left,depth}} {\type{left,depth}} + {\SampleKeyword{left,grid}} {\type{left,grid}} +\stopcombination +\stoplinecorrection + +\startlinecorrection +\startcombination[2*2] + {\SampleKeyword{left,line}} {\type{left,line}} + {\SampleKeyword{left,1*line}} {\type{left,1*line}} + {\SampleKeyword{left,2*line}} {\type{left,2*line}} + {\SampleKeyword{left,3*line}} {\type{left,3*line}} +\stopcombination +\stoplinecorrection + +\startlinecorrection +\startcombination[2*2] + {\SampleSettings{LeftOne}{LeftTwo} {default={left,line}}} + {\typ{default={left,line}}} + {\SampleSettings{LeftOne}{LeftThree}{default={left,2*line}}} + {\typ{default={left,2*line}}} + {\SampleSettings{LeftOne}{LeftFour} {default=left,topoffset=5pt}} + {\typ{default=left, topoffset=5pt}} + {\SampleSettings{LeftOne}{LeftFive} {default=left, topoffset=5pt, bottomoffset=5pt}} + {\typ{default=left, topoffset=5pt, bottomoffset=5pt}} +\stopcombination +\stoplinecorrection + +There is some tracing built in but as this mechanism is rather complex it only +gives an idea about what is going on. Here is an example: + +\startbuffer[one] +\enabletrackers[floats.anchoring] + +\showframe + +\setupfloat + [sidespacebefore=big, + sidespaceafter=big] + +\starttext + \dorecurse{10}{ + \placefigure[left]{#1.1}{} + a small sentence \par + \placefigure[left]{#1.2}{} + a small sentence \par + \input klein \par + } +\stoptext +\stopbuffer + +\typebuffer[one] + +In \in {figure} [fig:side:one:1] and \in {figure} [fig:side:one:2] you see the +first two pages of the typeset result. + +The anchor to the text is showed in orange and an optional shift in red. The content +is in green and a depth compensation in magenta. Dummy lines added for proper +spacing as well as progressing beyond a previous float are in blue. + +\startplacefigure[title={Side float tracing example 1, page 1.},reference=fig:side:one:1] + \scale[width=\textwidth]{\typesetbuffer[one][page=1]} +\stopplacefigure + +\startplacefigure[title={Side float tracing example 1, page 2.},reference=fig:side:one:2] + \scale[width=\textwidth]{\typesetbuffer[one][page=2]} +\stopplacefigure + +A second example that uses different settings is shown in \in {figure} +[fig:side:two:1] and \in {figure} [fig:side:two:2]. + +\startbuffer[two] +\enabletrackers[floats.anchoring] + +\setupfloat + [sidespacebefore=, + sidespaceafter=big, + step=small] + +\showframe + +\starttext + \dorecurse{10}{ + \placefigure[left]{#1.1}{} + a small sentence \par + \placefigure[left]{#1.2}{} + a small sentence \par + \input klein \par + } +\stoptext +\stopbuffer + +\typebuffer[two] + +\startplacefigure[title={Side float tracing example 2, page 1.},reference=fig:side:two:1] + \framed + [background=color,backgroundcolor=white,offset=overlay] + {\scale[width=\textwidth]{\typesetbuffer[two][page=1]}} +\stopplacefigure + +\startplacefigure[title={Side float tracing example 2, page 2.},reference=fig:side:two:2] + \framed + [background=color,backgroundcolor=white,offset=overlay] + {\scale[width=\textwidth]{\typesetbuffer[two][page=2]}} +\stopplacefigure + +\startbuffer[three] +\usemodule[simulate] + +\setuplayout + [tight] + +\setupbodyfont + [dejavu] + +\enabletrackers + [floats.anchoring] + +\setupfloats + [sidethreshold=.5\strutdp, % default, use "old" for previous implementation + step=small] + +\definemeasure[MyHeight][3cm] +\definemeasure[MyWidth] [3cm] + +% \setupheadertexts +% [width=\measure{MyWidth}\quad height=\measure{MyHeight}] + +\unexpanded\def\FakeWords#1% + {\simulatewords + [n=#1,m=#1,min=1,max=5,hyphen=no,color=text,line=yes,random=1234]} + +\starttext + +\startbuffer + \FakeWords{100}\par + \placefigure + [left] {oeps} + {\framed[width=\measure{MyWidth},height=\measure{MyHeight}]{}} + \FakeWords {2}\par + \FakeWords {3}\par + \FakeWords {5}\par + \FakeWords {4}\par + \FakeWords{200}\par + \placefigure + [left] {oeps} + {\framed[width=\measure{MyWidth},height=\measure{MyHeight}]{}} + \FakeWords{200}\par +\stopbuffer + +\dostepwiserecurse {\number\dimexpr3cm} {\number\dimexpr4cm} {\number\dimexpr0.25cm} { + \definemeasure[MyWidth][#1sp] + \dostepwiserecurse {\number\dimexpr3cm} {\number\dimexpr4cm} {\number\dimexpr0.25cm} { + \definemeasure[MyHeight][##1sp] + \start + \setupwhitespace[none] + \getbuffer \page + \stop + \start + \setupwhitespace[big] + \getbuffer \page + \stop + } +} +\stoptext +\stopbuffer + +Progressing next to a side float and determining how many lines to indent is a +somewhat complex mechamism because many factors play a role and spacing can +interfere badly. The decision about the number of lines to hang is to some extend +controllable but there are cases when you need to steer it (for instance by +scaling an image). In the next overviews we see the result of the following +somewhat complex setup: + +\typebuffer[three] + +The \type {step} parameter controls how we fill up the space when we need to +progress beyond it for instance because another float shows up or because we +issue a \type {\flushsidefloats}. Its value can be \type {big}, \type {medium} or +\type {small} and defaults to \type {small} which gives of enough precision. The +\type {sidethreshold} parameter controls the number of lines that we hang around +the float. Here we only show the consequence of the the threshold. A larger +threshold result in mode whitespace below the side float. You can zoom in to see +what happens at the bottom of the float (or run the examples yourself). + +\def\ShowSample#1% + {\framed + [background=color,backgroundcolor=white,offset=overlay] + {\scale + [width=\dimexpr(\textwidth-2\emwidth)/3\relax] + {\typesetbuffer[three][page=#1]}}} + +\startplacefigure[title={The working of default step and side threshold (no whitespace.},reference=fig:side:three:1] + \startcombination[3*3] + {\ShowSample {1}} {} {\ShowSample {3}} {} {\ShowSample {5}} {} + {\ShowSample {7}} {} {\ShowSample {9}} {} {\ShowSample {9}} {} + {\ShowSample{11}} {} {\ShowSample{13}} {} {\ShowSample{15}} {} + \stopcombination +\stopplacefigure + +\startplacefigure[title={The working of default step and side threshold (whitespace).},reference=fig:side:three:2] + \startcombination[3*3] + {\ShowSample {2}} {} {\ShowSample {4}} {} {\ShowSample {6}} {} + {\ShowSample {8}} {} {\ShowSample{10}} {} {\ShowSample{12}} {} + {\ShowSample{12}} {} {\ShowSample{14}} {} {\ShowSample{15}} {} + \stopcombination +\stopplacefigure + +\stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-frontpage.tex b/doc/context/sources/general/manuals/details/details-frontpage.tex new file mode 100644 index 000000000..0c7df22f5 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-frontpage.tex @@ -0,0 +1,43 @@ +% language=uk + +\environment details-environment + +\startcomponent details-frontpage + +\startpagemakeup[doublesided=no,pagestate=stop,page=no] + \startMPcode + StartPage ; + % todo: calculate p[3] from the text dimensions as now it's a gamble + path p[] ; picture q[] ; + p[1] := Page ; + p[2] := Page xscaled .60 shifted (.2PaperWidth,0) ; + p[3] := Page yscaled .22 shifted (0,.69PaperHeight) ; + q[1] := textext.raw("\color[white] {DETAILS}") xsized(.98PaperWidth) ; + q[2] := textext.raw("\color[white] {IT'S IN THE}") xsized(.98PaperWidth) ; + q[3] := textext.raw("\color[twhite]{\tt HANS HAGEN}") xsized(.60PaperWidth) ; + q[4] := textext.raw("\color[twhite]{\tt PRAGMA ADE}") xsized(.60PaperWidth) ; + q[5] := textext.raw("\color[twhite]{\tt HASSELT NL}") xsized(.60PaperWidth) ; + q[2] := q[2] shifted (0,- bbheight(q[2])) ; + q[3] := q[3] shifted (0,+1.5bbheight(q[3])) ; + q[5] := q[5] shifted (0,-1.5bbheight(q[5])) ; + fill p[1] withcolor \MPcolor{blue} ; % .5blue + fill p[2] withcolor \MPcolor{red} ; % .5red + fill p[3] withcolor \MPcolor{gray} withtransparency(1,.5) ; % .6white + draw q[1] shifted (.01PaperWidth,.7PaperHeight) ; + draw q[2] shifted (.01PaperWidth,.9PaperHeight) ; + draw q[3] shifted (.20PaperWidth,.2PaperHeight) ; + draw q[4] shifted (.20PaperWidth,.2PaperHeight) ; + draw q[5] shifted (.20PaperWidth,.2PaperHeight) ; + StopPage ; + \stopMPcode +\stoppagemakeup + +\startpagemakeup[doublesided=no,pagestate=stop,page=no] + \startMPcode + StartPage ; + fill Page withcolor \MPcolor{blue} ; % .5blue ; + StopPage ; + \stopMPcode +\stoppagemakeup + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-gridtrickery.tex b/doc/context/sources/general/manuals/details/details-gridtrickery.tex new file mode 100644 index 000000000..f37c7bd4b --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-gridtrickery.tex @@ -0,0 +1,161 @@ +% language=uk + +\environment details-environment + +\startcomponent details-gridtrickery + +\startchapter[title={Grid trickery}] + +In this manual we pay quite some words on ways to snap your content on a grid. +When dealing with grids, we often run into conflicting situations where we have +to make the best of it. Let's again deal with an aspect of graphics. + +One of the strong points of \TEX\ is that it can deal with graphics +automatically, which means that you seldom have to tweak dimensions or placements +unless \unknown\ you're dealing with grids. In that case you need to make sure +that the height of graphics consistently match the height of lines (or multiples +of lines). It is for this purpose that the graphic inclusion macro has a \type +{grid} entry. + +We will illustrate its usage using a dedicated figure class where we have set the +space between figure and caption to zero. + +\startbuffer +\definefloat[tightfigure][tightfigures][figure] +\setupcaption[tightfigure][inbetween=] +\stopbuffer + +\typebuffer \getbuffer + +The \type {grid} parameter controls rounding of the height of a graphic in the +following way: + +\starttabulate + +\NC \type {yes} \NC safe rounding to an equal number of lines \NC \NR +\NC \type {fit} \NC tight rounding to an equal number of lines \NC \NR +\NC \type {height} \NC same as \type {yes} but incremented by linedepth \NC \NR +\stoptabulate + +On the next pages we demonstrate the effects of these settings. At the bottom of +a page we show the placement commands. On the last pages we've hidden the +captions with: + +\starttyping +\setupfloat[tightfigure][default={here,none}] +\stoptyping + +As you will notice, the \type {height} option is handy when the caption is +positioned directly under the graphic. + +\start \page + +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.3,grid=yes]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=yes]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=yes]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=yes]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.7,grid=yes]} +\fakewords{20}{30} + +\starttyping +\placetightfigure{}{\externalfigure[dummy][lines=1.3,grid=yes]} +\placetightfigure{}{\externalfigure[dummy][lines=1.4,grid=yes]} +\placetightfigure{}{\externalfigure[dummy][lines=1.5,grid=yes]} +\placetightfigure{}{\externalfigure[dummy][lines=1.6,grid=yes]} +\placetightfigure{}{\externalfigure[dummy][lines=1.7,grid=yes]} +\stoptyping + +\page + +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.3,grid=fit]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=fit]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=fit]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=fit]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.7,grid=fit]} +\fakewords{20}{30} + +\starttyping +\placetightfigure{}{\externalfigure[dummy][lines=1.3,grid=fit]} +\placetightfigure{}{\externalfigure[dummy][lines=1.4,grid=fit]} +\placetightfigure{}{\externalfigure[dummy][lines=1.5,grid=fit]} +\placetightfigure{}{\externalfigure[dummy][lines=1.6,grid=fit]} +\placetightfigure{}{\externalfigure[dummy][lines=1.7,grid=fit]} +\stoptyping + +\page + +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.3,grid=height]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=height]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=height]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=height]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.7,grid=height]} +\fakewords{20}{30} + +\starttyping +\placetightfigure{}{\externalfigure[dummy][lines=1.3,grid=height]} +\placetightfigure{}{\externalfigure[dummy][lines=1.4,grid=height]} +\placetightfigure{}{\externalfigure[dummy][lines=1.5,grid=height]} +\placetightfigure{}{\externalfigure[dummy][lines=1.6,grid=height]} +\placetightfigure{}{\externalfigure[dummy][lines=1.7,grid=height]} +\stoptyping + +\page + +\setupfloat[tightfigure][default={here,none}] + +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.3,grid=yes]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=yes]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=yes]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=yes]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.7,grid=yes]} +\fakewords{20}{30} + +\starttyping +\placetightfigure{}{\externalfigure[dummy][lines=1.3,grid=yes]} +\placetightfigure{}{\externalfigure[dummy][lines=1.4,grid=yes]} +\placetightfigure{}{\externalfigure[dummy][lines=1.5,grid=yes]} +\placetightfigure{}{\externalfigure[dummy][lines=1.6,grid=yes]} +\placetightfigure{}{\externalfigure[dummy][lines=1.7,grid=yes]} +\stoptyping + +\page + +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.3,grid=fit]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=fit]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=fit]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=fit]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.7,grid=fit]} +\fakewords{20}{30} + +\starttyping +\placetightfigure{}{\externalfigure[dummy][lines=1.3,grid=fit]} +\placetightfigure{}{\externalfigure[dummy][lines=1.4,grid=fit]} +\placetightfigure{}{\externalfigure[dummy][lines=1.5,grid=fit]} +\placetightfigure{}{\externalfigure[dummy][lines=1.6,grid=fit]} +\placetightfigure{}{\externalfigure[dummy][lines=1.7,grid=fit]} +\stoptyping + +\page + +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.3,grid=height]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.4,grid=height]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.5,grid=height]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.6,grid=height]} +\fakewords{20}{30} \placetightfigure{}{\externalfigure[dummy][width=.5\hsize,lines=1.7,grid=height]} +\fakewords{20}{30} + +\starttyping +\placetightfigure{}{\externalfigure[dummy][lines=1.3,grid=height]} +\placetightfigure{}{\externalfigure[dummy][lines=1.4,grid=height]} +\placetightfigure{}{\externalfigure[dummy][lines=1.5,grid=height]} +\placetightfigure{}{\externalfigure[dummy][lines=1.6,grid=height]} +\placetightfigure{}{\externalfigure[dummy][lines=1.7,grid=height]} +\stoptyping + +\page \stop + +\stopchapter + +\page + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-index.tex b/doc/context/sources/general/manuals/details/details-index.tex new file mode 100644 index 000000000..9b6940f0b --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-index.tex @@ -0,0 +1,13 @@ +% language=uk + +\environment details-environment + +\startcomponent details-index + +\startchapter[title={Document index}] + +\placeregister[index] + +\stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-introduction.tex b/doc/context/sources/general/manuals/details/details-introduction.tex new file mode 100644 index 000000000..8e64ba4ed --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-introduction.tex @@ -0,0 +1,42 @@ +% language=uk + +\startcomponent details-introduction + +\environment details-environment + +\starttitle[title={Introduction}] + +On the \CONTEXT\ mailing list, occasionally a user asks if we can post a complete +document with the associated style. One reason for not honouring this request is +that we want users to cook up their own styles. Besides that, there are a couple +of styles in the regular \CONTEXT\ distribution. + +When browsing through this document, a \CONTEXT\ user may wonder what style was +used to achieve its look and feel. We hope that while reading the text and +playing with the examples, the reader will accomplish the skills to define more +than just simple layouts. + +This document is not easy reading. Occasionally we spend some time explaining +features not described in other manuals. The design of this document is to a +large extent determined by its purpose, and as a result not always functional. +For instance, we typeset on a grid which doesn't look too good. Also the order of +presenting features, tips and tricks is kind of random and unstructured. The idea +is that the visual effects will draw you to the right trick. Also, if you really +want to benefit from these features, there is no way but to read the whole story. + +In spite of all its shortcomings, I hope that you enjoy reading this (yet +unfinished) manual. Keep in mind that this manual is far from finished. + +\blank + +\startlines +Hans Hagen +Hasselt NL +\blank +2002\high{+} MkII +2015\high{+} MkIV +\stoplines + +\stoptitle + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-ornaments.tex b/doc/context/sources/general/manuals/details/details-ornaments.tex new file mode 100644 index 000000000..35d23c8b4 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-ornaments.tex @@ -0,0 +1,585 @@ +% language=uk + +\environment details-environment + +\startcomponent details-ornaments + +\startchapter[title={Ornaments everywhere}] + +The background mechanisms present in \CONTEXT\ have evolved over time and with +computers becoming faster, you can expect new functionality to show up and +existing functionality to start using this technology. A simple background +consist of a colored area. Many commands accept settings like: + +\starttyping +...[background=color,backgroundcolor=red,backgroundoffset=3pt] +\stoptyping + +Instead of such an area you can define one or more so called +overlays: + +\starttyping +\defineoverlay[one][...] +\defineoverlay[two][...] + +...[background={one,two}] +\stoptyping + +The name overlay comes from the fact that you stack them on top of each other. A +special overlay is \type {foreground}, and deep down in \CONTEXT\ there are more +predefined overlays. + +In the \METAFUN\ manual you will find example of usage, so here we stick to a +simple code snippet for testing this functionality: + +\startbuffer +\defineoverlay[one][\green A] +\defineoverlay[two][\red B] + +\framed[background=one] {1} +\framed[background={one,two}] {1---2} +\stopbuffer + +\typebuffer + +The rather ugly result is: + +\startlinecorrection +\hbox{\getbuffer} +\stoplinecorrection + +You can construct overlays by using \TEX\ boxing primitives or commands like +\type {\framed}. Alternatively you can use another mechanism: layers. Layers +collect content and flush that when asked, for instance when an overlay is +constructed. Layers can be independent of a page, or bound to a specific page +number, left or right hand pages. Here we look at independent layers. + +All these mechanisms are fine tuned for cooperating with the output routine (the +part of \TEX\ that deals with composing pages) and are well interact quite well +with \METAPOST\ graphics. Details of usage and tricks are revealed in this manual +as well as in styles that come with \CONTEXT. In this chapter we will apply +layers to graphics. For this we need a few setups, like: + +\starttyping +\setupbackgrounds + [page] + [background=pagegraphics] +\stoptyping + +Here we have set up the page background to use an overlay called \type +{pagegraphics}. However, instead of an overlay, we will use a layer. This layer +will collect content that goes into the page background. Whenever a layer is +defined, an overlay is automatically defined as well. + +\startbuffer +\definelayer + [pagegraphics] + [x=-2mm, + y=-2mm, + width=\paperwidth, + height=\paperheight] +\stopbuffer + +\typebuffer \getbuffer + +When you fill a layer with content, you can influence the placement with the +\type {x} and \type {y} parameters as well as \type {hoffset} and \type +{voffset}, whichever you prefer. The reference point and alignment are set with +\type {corner} and \type {location}. + +Live can be made easier by using presets, especially for our intended usage. The +following presets are predefined. + +\startbuffer +\definelayerpreset + [lefttop] [corner={left,top}, location={right,bottom}] +\definelayerpreset + [righttop] [corner={right,top}, location={left,bottom}] +\definelayerpreset + [leftbottom] [corner={left,bottom}, location={right,top}] +\definelayerpreset + [rightbottom] [corner={right,bottom},location={left,top}] +\stopbuffer + +\typebuffer \getbuffer + +Because for this layer we have also preset the \type {x} and \type {y}, those +corners are laying a few millimeters outside the page area. We have preset the +size as well, otherwise all corners would end up in the top left corner. + +We will now fill this layer. Because the layer is hooked into the page, it will +be flushed when the page is constructed. After the page is written to the output +file, the layer is emptied, unless its \type {state} is set to \type {repeat}. + +\startbuffer +\setlayer [extras] [preset=lefttop] {\externalfigure[hacker]} +\setlayer [extras] [preset=righttop] {\externalfigure[hacker]} +\setlayer [extras] [preset=leftbottom] {\externalfigure[hacker]} +\setlayer [extras] [preset=rightbottom] {\externalfigure[hacker]} +\stopbuffer + +\testpage[5] \typebuffer \getbuffer + +Once you got the picture of layering, you will start using this mechanism for all +kind of tasks. Instead of putting layers in a background, you can also directly +place them, by using one of the two (equivalent) commands: + +\starttyping +\composedlayer{identifier} +\placelayer[identifier] +\stoptyping + +Layer are quite convenient for defining title pages, colophons, and special +section heads, especially in combination with \type {\framed}. + +On top of the layer mechanism we have build a few more mechanisms, like +ornaments. You can use ornaments to annotate graphics in such a way that the +dimensions stay unchanged. + +\startbuffer +\defineornament + [affiliation] + [rotation=90,corner={right,bottom},location={right,top}, + hoffset=-.25ex] + [frame=on,background=color,backgroundcolor=red,offset=0pt] +\stopbuffer + +\typebuffer \getbuffer + +The negative offset will overlay the text outside the graphic. The meaning of the +sign of coordinates and offsets depends on the corner. \in {Figure} [fig:affi-1] +shows the result. We have put the reference point in the right bottom corner. The +ornament is anchored at the right top corner of the dot you can picture at the +reference point. The ornament is shifted .25ex outwards. + +\starttyping +\placefigure + {} + {\affiliation{graphic}{\externalfigure[hacker][width=3cm]}} +\stoptyping + +\placefigure + [here] [fig:affi-1] {Number 1} + {\affiliation{graphic}{\externalfigure[hacker][width=3cm]}} + +There are two ways to handle the placement. Alternative \type {a} will change the +dimensions of the graphic according to the size of the ornament, while +alternative \type {b} acts as a pure overlay. In \in {figure} [fig:affi-2] the +ornament is not taken into account when calculating the dimensions of the +graphic. This is often the preferred placement, because this way the (often +small) ornament will not it will not spoil visual alignment of similar graphics. + +\startbuffer +\defineornament + [affiliation] + [rotation=90,corner={right,bottom},location={right,top}, + hoffset=-.25ex,alternative=b] + [frame=on,background=color,backgroundcolor=red,offset=0pt] +\stopbuffer + +\typebuffer \getbuffer + +\placefigure + [here] [fig:affi-2] {Number 2} + {\affiliation{graphic}{\externalfigure[hacker][width=3cm]}} + +A positive offset will place the ornament on top of the graphic (see \in {figure} +[fig:affi-3]). + +\startbuffer +\defineornament + [affiliation] + [rotation=90,corner={right,bottom},location={left,top}, + hoffset=.25ex,voffset=.25ex,alternative=a] + [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt] +\stopbuffer + +\typebuffer \getbuffer + +\placefigure + [here] [fig:affi-3] {Number 3} + {\affiliation{graphic}{\externalfigure[hacker][width=3cm]}} + +You need to play a bit with this mechanism in order to get a feeling for what the +parameters do. + +\startbuffer +\defineornament + [affiliation] + [rotation=90,corner={right,bottom},location={left,top}, + hoffset=.25ex,voffset=.25ex,alternative=b] + [background=color,style=\ss\tfxx,backgroundcolor=white,offset=0pt] +\stopbuffer + +\typebuffer \getbuffer + +\placefigure + [here] [fig:affi-4] {Number 4} + {\affiliation{graphic}{\externalfigure[hacker][width=3cm]}} + +Because the text is normally typeset quite small, you'd better use a font that +can be scaled down a lot. + +\startbuffer +\definefont[AffiliationFont][Sans sa .25] + +\defineornament + [SomeAffiliation] + [rotation=90,corner={right,bottom},location={right,top}, + hoffset=-.125ex,alternative=b] + [style=AffiliationFont,offset=0pt] +\stopbuffer + +\typebuffer \getbuffer + +This affiliation is used as: + +\startbuffer +\placefigure + {Affiliations normally are typeset pretty small.} + {\SomeAffiliation + {author: Hester De Weert} + {\externalfigure[hacker]}} +\stopbuffer + +\typebuffer \getbuffer + +Ornaments are implemented in terms of layers and collectors. A few examples +demonstrate how these can be used. + +\startbuffer +\layeredtext + [corner={right,bottom},location={left,top}] + [background=color,backgroundcolor=white,offset=0pt] + {graphic} + {\externalfigure[hacker][width=3cm]} +\stopbuffer + +\typebuffer \startlinecorrection \getbuffer \stoplinecorrection + +\startbuffer +\layeredtext + [rotation=90,corner={right,bottom},location={right,top}] + [frame=on,offset=0pt] + {graphic} + {\externalfigure[hacker][width=3cm]} +\stopbuffer + +\typebuffer \startlinecorrection \getbuffer \stoplinecorrection + +\startbuffer +\layeredtext + [rotation=90,corner={left,bottom},location={left,top}] + [frame=on,offset=0pt] + {graphic} + {\externalfigure[hacker][width=3cm]} +\stopbuffer + +\typebuffer \startlinecorrection \getbuffer \stoplinecorrection + +\startbuffer +\collectedtext + [corner={right,bottom},location={left,top}] + [background=color,backgroundcolor=white,offset=0pt] + {graphic} + {\externalfigure[hacker][width=3cm]} +\stopbuffer + +\typebuffer \startlinecorrection \getbuffer \stoplinecorrection + +\startbuffer +\collectedtext + [rotation=90,corner={right,bottom},location={right,top}] + [frame=on,offset=0pt] + {graphic} + {\externalfigure[hacker][width=3cm]} +\stopbuffer + +\typebuffer \startlinecorrection \getbuffer \stoplinecorrection + +\startbuffer +\collectedtext + [rotation=90,corner={left,bottom},location={left,top}] + [frame=on,offset=0pt] + {graphic} + {\externalfigure[hacker][width=3cm]} +\stopbuffer + +\typebuffer \startlinecorrection \getbuffer \stoplinecorrection + +There are several methods to construct title pages, headers, and other +compositions. Of course there are the low level box constructors like \type +{\hbox}, \type {\vbox} and positioning primitives like \type {\hskip}, \type +{\hfill} and alike. + +Another option is to fall back on the low level box macros in the \CONTEXT\ +support file \type {supp-box} or the higher level \type {\framed} macro. You can +use \type {\framed} nested and by cleverly using the offsets and dimensions you +can do a lot. + +Layers are another means. You can or instance construct a title page in the +following way: + +\starttyping +\definelayer + [titlepage] + [width=\textwidth, + height=\textheight] + +\setlayer + [titlepage] + [preset=righttop,location={left,bottom},y=1cm,x=1cm] + {\definedfont[Regular at 60pt]Welcome} + +\setlayer + [titlepage] + [preset=rightbottom,location={right,top},y=2cm,x=2cm] + {\definedfont[Regular at 30pt]By Me} +\stoptyping + +This just fills the layer. Placement is done with: + +\starttyping +\startstandardmakeup + \flushlayer[titlepage] +\stopstandardmakeup +\stoptyping + +or alternatively: + +\starttyping +\setupbackgrounds[text][background=titlepage] +\startstandardmakeup \stopstandardmakeup +\setupbackgrounds[text][background=] +\stoptyping + +Another way to collect content is to use a collector. A collector starts out +empty with: + +\startbuffer +\definecollector[test][state=repeat] +\stopbuffer + +\typebuffer \getbuffer + +We can now stepwise fill this collector. For educational purposes we've turn of +tracing so that you can see what the anchor points. + +\startbuffer +\setcollector[test] + [location={right,bottom}] + {\externalfigure[detcow][frame=on,width=3cm]} +\stopbuffer + +\typebuffer {\traceboxplacementtrue \getbuffer} + +\startlinecorrection[blank] \flushcollector[test] \stoplinecorrection + +\startbuffer +\setcollector[test] + [corner={right,bottom},location={left,top}] + {\framed[background=color,backgroundcolor=tyellow]{this is a cow}} +\stopbuffer + +\typebuffer {\traceboxplacementtrue \getbuffer} + +\startlinecorrection[blank] \flushcollector[test] \stoplinecorrection + +\startbuffer +\setcollector[test] + [corner={right,bottom},location={right,bottom}] + {\framed[background=color,backgroundcolor=tblue]{that's for sure}} +\stopbuffer + +\typebuffer {\traceboxplacementtrue \getbuffer} + +\startlinecorrection[blank] \flushcollector[test] \stoplinecorrection + +\startbuffer +\setcollector[test] + [corner={left,top},location={left,top}] + {\framed[background=color,backgroundcolor=tgreen]{a dutch cow}} +\stopbuffer + +\typebuffer {\traceboxplacementtrue \getbuffer} + +\startlinecorrection[blank] \flushcollector[test] \stoplinecorrection + +\startbuffer +\setcollector[test] + [corner=middle, + location=middle] + {\framed[background=color,backgroundcolor=tred]{nearly done}} +\stopbuffer + +\typebuffer {\traceboxplacementtrue \getbuffer} + +\startlinecorrection[blank] \flushcollector[test] \stoplinecorrection + +In addition to the parameters shown here, you can also provide additional ones: +\type {x}, \type {y}, \type {offset}, \type {hoffset} and \type {voffset} for +positioning and \type {rotation} for (as expected) rotating the content in steps +of 90 degrees. As with layers, the coordinates and offsets can be used +intermixed. + +\startbuffer +\setcollector[test] + [hoffset=4cm, + voffset=-1cm, + corner=middle, + location=middle] + {\framed{now}} +\stopbuffer + +\typebuffer {\traceboxplacementtrue \getbuffer} + +\startlinecorrection[blank] \flushcollector[test] \stoplinecorrection + +We can show the intermediate results because we have set the state of this +collector to repeat. In this case you need to erase the content manually, using: + +\startbuffer +\resetcollector[test] +\stopbuffer + +\typebuffer \getbuffer + +The chapter titles of this document are (as usual in a \CONTEXT\ document) +typeset by the \type {\chapter} macro. When thinking about implementing a non +standard head, those familiar with \CONTEXT's head macros will probably first +think of using one of the hooks, like: + +\starttyping +\setuphead[chapter][command=\MyChapterHead] +\stoptyping + +Here we have followed a different approach. First we set up the chapter head. The +\type {empty} directive instructs \CONTEXT\ not to place the head itself, but +still to include the associated data in the text stream. This means that we will +not see a chapter title, but that there will be an entry in the table of +contents, that references will be set up, that so called marks will be available, +etc. + +\starttyping +\setuphead + [chapter] + [placehead=empty, + header=chapter, + style=\BigText, + numberstyle=\BigNumber] +\stoptyping + +The \type {header} parameters instructs the head handler to mark this page as +special with regards to header texts. This text is set up as follows: + +\starttyping +\definetext + [chapter] + [header] + [\setups{chapter}] + [] +\stoptyping + +The setups are just series of typesetting instructions. For the sake of +readability, we have split them up. + +\starttyping +\startsetups chapter + \setups[chapter:title] + \setups[chapter:number] + \setups[chapter:finish] +\stopsetups +\stoptyping + +The setups will use a dedicated layer for the chapter title: + +\starttyping +\definelayer + [chapter] + [width=\dimexpr\makeupwidth+\cutspace\relax, + height=\headerheight] +\stoptyping + +The following code uses a macro \type {\setlayerframed}. This is a combination +between \type {\setlayer} and \type {\framed}. We use two placement macros to +typeset the title and number. When doing so, we need to take care of both +numbered chapters and unnumbered titles. + +\starttyping +\startsetups chapter:title + + \setlayerframed + [chapter] + [x=\dimexpr\makeupwidth+\cutspace\relax,location={left,bottom}] + [height=\headerheight, + foregroundcolor=white, + background=color, + backgroundcolor=blue, + frame=off, + offset=none, + align={right,lohi}] + {\hbox spread .5\cutspace + {\hss + \doiftextelse{\placeheadtext[chapter]}% + {\placeheadtext[chapter]}% + {\placeheadtext[title]}% + \hss}\space + \vskip.5cm} + +\stopsetups +\stoptyping + +Definitions like these may look complicated but in practice you will construct +them piece|-|wise. + +\starttyping +\startsetups chapter:number + + \setlayerframed + [chapter] + [x=\dimexpr\makeupwidth+\cutspace\relax, + y=\vsize, + location={left,bottom}] + [width=\dimexpr\cutspace-\rightmargindistance\relax, + height=\dimexpr\cutspace-\rightmargindistance\relax, + foregroundcolor=white, + background=color, + backgroundcolor=red, + frame=off, + offset=none, + align={middle,lohi}] + {\hbox to \hsize + {\hskip.5cm\hss + \doifmode{*bodypart}{\placeheadnumber[chapter]}% + \hss}} + +\stopsetups +\stoptyping + +The finishing touch is just a dummy frame with the chapter background. We could +have used the header text background instead. + +\starttyping +\startsetups chapter:finish + + \framed + [width=\makeupwidth, + height=\headerheight, + background=chapter, + frame=off] + {} + +\stopsetups +\stoptyping + +As the title of this manual suggests: it's in the details. Most of our time is +spent in optimizing spacing issues. If you're designing the layout yourself, for +a large part you can fall back on the consistent spacing provided by \TEX, i.e.\ +think in terms of \type {em}'s, \type {ex}'s and fractions or multiples of \type +{\bodyfontsize}, as well as base you're dimensions on those provided by the +layout. When dealing with translating a \DTP\ layout into something \TEX, +definitions like the above will often look more messy. + +\stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-pseudocolumns.tex b/doc/context/sources/general/manuals/details/details-pseudocolumns.tex new file mode 100644 index 000000000..f30ffaeab --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-pseudocolumns.tex @@ -0,0 +1,155 @@ +% language=uk + +\environment details-environment + +\startcomponent details-pseudocolumns + +\start \page[right] + +\definelayout + [temp] + [columndistance=12pt, + columns=3] + +\setuplayout + [temp] + +\startchapter[title={Pseudo columns}] + +\index {grid snapping+columns} +\index {pseudo columns} +\index {layers} +\index {backgrounds} + +In desk top publishing applications the grid is pretty dominant in defining +layouts. On the other hand, \TEX\ is pretty good defining layouts in terms of +relative dimensions. This means that mapping a desk top publishing layout into +its \TEX\ (or \CONTEXT) counterpart takes some effort. For what it's worth, +personally I don't like grids that much, specially not in complex documents, +unless one makes sure that all elements are suitable sized for the grid used. + +We not only have to deal with vertical grids, but also with horizontal ones. Here +we focus on the second category. When implementing designs, it is best first to +look into the normal page layout areas. For most documents these are sufficient, +but occasionally we need a more detailed approach. + +When playing with grids, you need to make sure that grid snapping is turned on. +It helps if you turn on the grid so that you can see where things end up. When a +horizontal grid is defined, gray vertical rules show their boundaries. + +\starttyping +\setuplayout[grid=yes] \showgrid +\stoptyping + +The \type {\setuplayout} command has a few settings that have to do with so +called pseudo columns. These are in no sense related to multi|-|column +typesetting and only play a role in placing text on specific locations. + +\starttyping +\setuplayout + [columndistance=12pt, + columns=3] +\stoptyping + +You can use \type {\layoutcolumnoffset} for positioning relative to the left +boundary of the running text: + +\startbuffer +\hskip\layoutcolumnoffset{2}{\red Text positioned in column 2!} +\stopbuffer + +\typebuffer \getbuffer + +This mechanism is actually meant to ease the definition of complicated (title) +pages where many text and graphic elements need to be anchored at well defined +places. The layer mechanism is the most natural candidate for this. + +\startbuffer +\definelayer [text] \setupbackgrounds [text] [background=text] +\stopbuffer + +\typebuffer + +When anchoring elements on a layer, you can specify absolute positions using the +\type {x} and \type {y} keys but grid based positioning is possible with the +\type {column} and \type {line} keys. We need to pass \type {grid} as location +specifier. + +\startbuffer +\setlayer[text][column=1,line=48,location=grid]{these are not} +\setlayer[text][column=2,line=47,location=grid]{real columns} +\setlayer[text][column=3,line=48,location=grid]{but fake ones} +\stopbuffer + +\typebuffer \getbuffer + +\page + +\startbuffer +\setlayer [text] [column=1,line=32,location=grid] + {\ruledvtop {\hsize\layoutcolumnwidth + \style[regular:3]{nitty\par gritty}}} + +\setlayer [text] [column=2,line=37,location=grid] + {\ruledvbox {\hsize\layoutcolumnwidth + \style[regular:3]{nitty\par gritty}}} + +\setlayer [text] [column=3,line=42,location=grid] + {\ruledvcenter {\hsize\layoutcolumnwidth + \style[regular:3]{nitty\par gritty}}} +\stopbuffer + +\typebuffer \getbuffer + +The data that goes into the layer is collected and flushed as soon as \TEX\ +builds the page. The buffer associated to the layer is then ready for new data +(for the next page). + +In this example, you can see that the baselines of the boxes (here visualized by +dashed rules) are put at the specified lines. You can use the \TEX\ box commands +\type {\vbox}, \type {\vtop} and \type {\vcenter} to specify where the main +baseline of the box content is positioned (at the top or bottom line, or +centered). + +\startbuffer +\setlayer + [text] + [column=2,line=48,x=\layoutcolumnwidth,location=left] + {\framed + [background=color,backgroundcolor=red, + foregroundstyle=regular:2,foregroundcolor=white, + frame=off] + {Why ain't I framed?}} +\stopbuffer + +\typebuffer \getbuffer + +\page + +On the previous page we demonstrated a more complicated call to \type {\setlayer} +and more features will be introduced in later chapters. We position the framed +text in column~2 and at line~48. In addition we shift the text over the pseudo +column width, i.e. we position the text at the right of the column. The location +specifier aligns the text left from the point of positioning. + +When we have set up the pseudo columns, we have access to a couple of variables: + +\starttabulate[|l|l|l|] +\NC \type {\layoutcolumns} \NC counter \NC number of columns \NC \NR +\NC \type {\layoutlines} \NC counter \NC number of gridlines \NC \NR +\NC \type {\layoutcolumnwidth} \NC dimension \NC width of one column \NC \NR +\NC \type {\layoutcolumnoffset{n}} \NC macro \NC position of column n \NC \NR +\stoptabulate + +This is typically a feature that has been there for quite a while but that I forget +about. It's probably because I never have to use grids myself. + +In the examples before we used some predefined (font) styles: + +\typebuffer[regular:sizes] + +\page \setuplayout[reset] \stop + +\stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-snappingheads.tex b/doc/context/sources/general/manuals/details/details-snappingheads.tex new file mode 100644 index 000000000..26f4dfbc4 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-snappingheads.tex @@ -0,0 +1,276 @@ +% language=uk + +\environment details-environment + +\startcomponent details-snappingheads + +\startchapter[title={Snapping heads}] + +The grid snapper in \MKIV\ is quite different from the one in \MKII. For not too +complex layouts the old grid snapper was quite ok, but the new one should be a +bit more robust. In the old situation the running text was assumed to fit on the +grid and the normal baseline skip should do the job in combination with the grid +aware spacing features and placement mechanisms like tables and figures. + +Snapping on a fixed grid is sort of counter intuitive in \TEX\ because it has an a +advanced spacing model with glue. Publishers however love grids so we do need to +support it. Of course when complex layouts are involved in a later stage of +document preparation the grid is often abandoned. This manual uses the grid but I +personally never use the grid. There are better ways to make your document look +good and often a grid snapped document doesn't look that great anyway, because +all elements should somehow fit in multiples of the line height. + +The \MKIV\ snapper does more analysis and therefore can compensate for the more +nasty cases. Of course it can still fail but we hope to fix those cases when we +run into them. Grids are controlled by keywords or a combination of them. + +\starttabulate[|tCT{blue}||] +\NC none \NC don't enlarge \NC \NR +\NC halfline \NC enlarge by halfline/halfline \NC \NR +\NC line \NC enlarge by line/line \NC \NR +\NC strut \NC enlarge by ht/dp (default) \NC \NR +\NC first \NC align to top line \NC \NR +\NC last \NC align to bottom line \NC \NR +\NC mindepth \NC round depth down \NC \NR +\NC maxdepth \NC round depth up \NC \NR +\NC minheight \NC round height down \NC \NR +\NC maxheight \NC round height up \NC \NR +\NC local \NC use local interline space \NC \NR +\NC offset:-3tp \NC vertical shift within box \NC \NR +\NC bottom:lines \NC \NC \NR +\NC top:lines \NC \NC \NR +\NC box \NC centers a box rounded upwards (box:.5 -> tolerance) \NC \NR +\NC min \NC centers a box rounded downwards \NC \NR +\NC max \NC centers a box rounded upwards \NC \NR +\stoptabulate + +We combine these directives in so called grid options: + +\starttyping +\definegridsnapping [normal] [maxheight,maxdepth,strut] +\definegridsnapping [standard] [maxheight,maxdepth,strut] +\definegridsnapping [yes] [maxheight,maxdepth,strut] + +\definegridsnapping [strict] [maxdepth:0.8,maxheight:0.8,strut] +\definegridsnapping [tolerant] [maxdepth:1.2,maxheight:1.2,strut] +\definegridsnapping [math] [maxdepth:1.05,maxheight:1.05,strut] + +\definegridsnapping [top] [minheight,maxdepth,strut] +\definegridsnapping [bottom] [maxheight,mindepth,strut] +\definegridsnapping [both] [minheight,mindepth,strut] + +\definegridsnapping [broad] [maxheight,maxdepth,strut,0.8] +\definegridsnapping [fit] [maxheight,maxdepth,strut,1.2] + +\definegridsnapping [first] [first] +\definegridsnapping [last] [last] +\definegridsnapping [high] [minheight,maxdepth,none] +\definegridsnapping [one] [minheight,mindepth] +\definegridsnapping [low] [maxheight,mindepth,none] +\definegridsnapping [none] [none] +\definegridsnapping [line] [line] +\definegridsnapping [strut] [strut] +\definegridsnapping [box] [box] +\definegridsnapping [min] [min] +\definegridsnapping [max] [max] + +\definegridsnapping [middle] [maxheight,maxdepth] +\stoptyping + +As you can see, keys like \type {maxdepth} can take a criterium as extra detail, +separated by a colon. These options look obscure and often you need to trial and +error a bit to get what you want. This is no real problem because most cases are +handles automatically. Only headings and structuring elements that exceed a +line height might need some treatment. For instance you might want to be more +tolerant for (fractions of) a point overflow or when you know that always a blank +follows you can decide to limit the height of some element to a line. Some of +the options, like \type {math} and \type {middle} are used internally. + +On the next pages we show how the \type {maxheight} and \type {maxdepth} +fractions work on a sample line. + +\page + +\bgroup + \page + \enabledirectives[visualizers.fraction=.5] + \dostepwiserecurse {0} {10} {1} { + \edef\one{\ifnum#1=10 10\else0.#1\fi} + \dostepwiserecurse {0} {10} {1} { + \edef\two{\ifnum##1=10 10\else0.##1\fi} + \definegridsnapping [test:\one:\two][maxdepth:\one,maxheight:\two,strut] + \par + \blackrule[height=1pt,depth=1pt,width=\textwidth,color=green] + \par + \par + \snaptogrid[test:\one:\two] + \ruledhbox{\backgroundline[red]{\white\bf maxdepth:\one,maxheight:\two}} + \par + } + } + \par + \blackrule[height=1pt,depth=1pt,width=\textwidth,color=green] + \par + \page + \enabledirectives[visualizers.fraction] +\egroup + +Next we show some of the options in action. For practical reasons we start a new +page each time. The sample is input as: + +\startbuffer +\bf none \par +\bfb \hskip2cm none \par +\bfd \hskip6cm none \par +\bf test \par +\bfb \hskip2cm test \par +\bfd \hskip6cm test \par +\bf grid \par +\bfb \hskip2cm grid \par +\bfd \hskip6cm grid \par +\bf \strut strut \par +\bfb \hskip2cm \strut strut \par +\bfd \hskip6cm \strut strut \par +\bfb \hskip2cm \setstrut \strut setstrut \par +\bfd \hskip6cm \setstrut \strut setstrut \par +\stopbuffer + +\typebuffer + +\unexpanded\def\SampleGrid#1% + {\page + \section{Grid snapping method \quotation{#1}} + This is just a line to start with but next we % + show what method \type {#1} does. \par + \start + \setuplayout[grid=#1] % the demo value + \showstruts + \getbuffer + \stop + And here we end the demo. + \setuplayout[grid=yes] % the document default + \page} + +\SampleGrid{normal} +\SampleGrid{strict} +\SampleGrid{tolerant} +\SampleGrid{top} +\SampleGrid{bottom} +\SampleGrid{both} +\SampleGrid{broad} +\SampleGrid{fit} +\SampleGrid{first} +\SampleGrid{last} +\SampleGrid{high} +\SampleGrid{one} +\SampleGrid{low} +\SampleGrid{none} +\SampleGrid{line} +\SampleGrid{strut} +\SampleGrid{box} +\SampleGrid{min} +\SampleGrid{max} +\SampleGrid{middle} + +We now come to the topic of this chapter: snapping heads. The problem with +section heads is that they often exceed the line height. Even worse, they can +be more than one line high. + +The next pages show some ways to control snapping around heads. The result can be +confusing, even when we use a font that we assume behaves like a regular style. +For instance in Latin Modern the bold style has larger heights and depths than +the regular style and even 0.1pt can force the snapper to add a line. The +examples use that font. + +The grid option of \type {setuphead} normally takes one keyword that refers to +the local snapper. However, the result gets then snapped again. This is because +the local snapper can use a different line height. Historically the local snapper is +the default but you can force global snapping by prefixing with the \type +{global} keyword. The next table summarizes the ways you can control snapping: + +\starttabulate +\NC \type {(nothing)} \NC local snapping plus global snapping \NC \NR +\NC \type {local} \NC local snapping plus global snapping \NC \NR +\NC \type {foo} \NC local \type {foo} snapping cf.\ font style plus global snapping \NC \NR +\NC \type {local:foo} \NC local \type {foo} snapping cf.\ font style plus global snapping \NC \NR +\NC \type {global} \NC global snapping \NC \NR +\NC \type {global:foo} \NC global \type {foo} snapping \NC \NR +\stoptabulate + +\startbuffer[demo] +\setuppapersize + [A5][A5] + +\setuplayout + [grid=yes, + width=middle, + height=middle, + backspace=1cm, + topspace=2mm, + lines=38, + bottomspace=2mm, + footer=0cm, + header=4mm, + headerdistance=5mm] + +\definehead + [MyHead] + [subsubsubject] + [style=\tf, + textstyle=, + numberstyle=, + before=, + after=] + +\showgrid + +\starttext + +\starttexdefinition TestHead #1 + \page + \setupheadertexts[\type{#1}] + \setuphead[MyHead][grid={#1},style=\tf,interlinespace=] + \MyHead{some head 1.1} + \hskip1cm line following 1.1 + \MyHead{some head 1.2} + \hskip1cm line following 1.2 + \MyHead{some head 1.3a\par some head 1.3b} + \hskip1cm line following 1.3 + \setuphead[MyHead][grid={#1},style=\bf,interlinespace=] + \MyHead{some head 2.1} + \hskip1cm line following 2.1 + \MyHead{some head 2.2} + \hskip1cm line following 2.2 + \MyHead{some head 2.3a\par some head 2.3b} + \hskip1cm line following 2.3 + \setuphead[MyHead][grid=,style=\bf,interlinespace=4ex] + \MyHead{some head 3.1} + \hskip1cm line following 3.1 + \MyHead{some head 3.2} + \hskip1cm line following 3.2 + \MyHead{some head 3.3a\par some head 3.3b} + \hskip1cm line following 3.3 + \setuphead[MyHead][grid={#1},style=\bfb,interlinespace=] + \MyHead{some head 4.1} + \hskip1cm line following 4.1 + \MyHead{some head 4.2} + \hskip1cm line following 4.2 + \page +\stoptexdefinition + +\TestHead{yes} +\TestHead{tolerant} +\TestHead{global:tolerant} + +\stoptext +\stopbuffer + +\typebuffer + +\placefigure[page]{}{\typesetbuffer[demo][page=1,background=color,backgroundcolor=white,width=\textwidth]} +\placefigure[page]{}{\typesetbuffer[demo][page=2,background=color,backgroundcolor=white,width=\textwidth]} +\placefigure[page]{}{\typesetbuffer[demo][page=3,background=color,backgroundcolor=white,width=\textwidth]} + +\stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-textbackgrounds.tex b/doc/context/sources/general/manuals/details/details-textbackgrounds.tex new file mode 100644 index 000000000..0f3962fff --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-textbackgrounds.tex @@ -0,0 +1,687 @@ +% language=uk + +\environment details-environment + +\startcomponent details-textbackgrounds + +\start \setuphead [chapter] [after=] \startchapter[title={Backgrounds behind text}] + +\startbuffer[setup-a] +\definetextbackground + [intro] + [backgroundcolor=infogray, + backgroundoffset=.25cm, + frame=off, + location=paragraph, + color=red] +\stopbuffer + +\startbuffer[setup-b] +\definetextbackground + [subintro] + [backgroundcolor=textgray, + backgroundoffset=0pt, + frame=off, + location=text, + color=blue] +\stopbuffer + +\startbuffer[demo-a] +\starttextbackground[intro] +A rather common way to draw attention to a passage, is to add a +background. In this chapter we will therefore discuss how to enhance your +document with \starttextbackground [subintro] those colorful areas that either +or not follow the shape of your paragraph. \stoptextbackground\ Be +warned: this chapter has so many backgrounds that you might start to +dislike them. +\stoptextbackground +\stopbuffer + +\getbuffer[setup-a,setup-b,demo-a] + +\blank + +In the previous paragraph we demonstrated two important features of the +background handler: you can nest backgrounds and backgrounds can be tight or +wide. Features like this will often be used in combination with others, like +special section headers. The raw coding of the previous paragraph is therefore +not representative. + +\typebuffer[demo-a] + +The outer background commands is defined as follows: + +\typebuffer[setup-a] + +Here, the \type {paragraph} option ensures that the background covers the width +of the body text. The inner background is defined in a similar way, but this time +we choose \type {text} location. + +\typebuffer[setup-b] + +In this document we use protruding characters (hanging punctuation) so we've +chosen a rather large offset, one that also matches the rest of the page design. + +Those who are familiar with the way \TEX\ works will probably see what problems +can occur with backgrounds like this. What happens for instance when we cross +page boundaries, and how will more complicated paragraph shapes be handled? + +The current implementation tries to handle page breaks and paragraph shapes as +good as possible. This works well in normal one||column mode as well as in +columns. + +\startbuffer[setup-c] +\definetextbackground [A] [backgroundcolor=infogray] +\definetextbackground [B] [backgroundcolor=textgray] + +\setuptextbackground + [backgroundoffset=0pt, + offset=0pt, + frame=off, + location=text] +\stopbuffer + +\getbuffer[setup-c] + +\startbuffer[demo-b] +\placefigure[left]{}{\externalfigure[detcow][width=2cm]} + +\starttextbackground [A] + In this example, the paragraph shape is determined by the graphic placed + left of the text. + \starttextbackground [B] + This feature is implemented using the \type {\hangindent} and \type + {\hangafter} primitives, which means that we need to keep track of + their state. In addition, we need to handle the indentation directives + \type {\leftskip}, \type {\rightskip} and \type {\parindent}. + \stoptextbackground\ + Because backgrounds end up in a different background overlay, nesting + them is no problem, and it is even possible to move them to the front + and back, as we will demonstrate later on. While the mechanism discussed + here will always be improved when we find border cases, the fundaments + it is built upon are quite stable. +\stoptextbackground +\stopbuffer + +{\setupalign[nothanging]\getbuffer[demo-b]\par} + +\typebuffer[demo-b] + +The backgrounds were defined as: + +\typebuffer[setup-c] + +\startbuffer[setup-d] +\setuptextbackground [B] [backgroundcolor=darkgray,level=+2] +\stopbuffer + +{\setupalign[nothanging]\getbuffer[setup-d,demo-b]\par} + +This time we moved the inner background a few levels up. By default they reside +at \type {level=-1}. This way, by using a non transparent color, we can hide +information. + +\typebuffer[setup-d] + +Unless you mess around too much with boxes, backgrounds work as expected in most +situations. According to the Merriam||Webster on the authors laptop: + +\startbuffer +\starttabulate[|l|p|l|] +\NC background \NC \starttextbackground [A] the part of a + painting representing what lies behind objects is the + \starttextbackground [B] foreground \stoptextbackground + \stoptextbackground \NC one \NC \NR +\TB [halfline] +\NC foreground \NC \starttextbackground [A] the part of a + scene or representation that is nearest to and in front + of the \starttextbackground [B] spectator + \stoptextbackground \stoptextbackground \NC two \NC \NR +\TB [halfline] +\NC spectator \NC \starttextbackground [A] one who looks + on or watches \stoptextbackground \NC three \NC \NR +\stoptabulate +\stopbuffer + +\getbuffer + +This is coded similar to normal running text. A table like this is in a way still +part of the text flow. As floating body (see \in {table} [tab:back]) it can +virtually end up everywhere. We add a frame to make clear where the boundaries are. + +\start + + \setupfloat + [table] + [frame=on,framecolor=red,rulethickness=1pt] + + \placetable + [here] [tab:back] + {} {\hsize.75\textwidth\getbuffer} + + \definefloat + [mytable] + [table] + + \setupfloat + [mytable] + [leftmargindistance=-\innermargintotal] + + \placemytable + [left,high,low] + [tab:back-m] + {} + {\hsize.5\textwidth\getbuffer} + + Keeping track of the state of a paragraph in a table in combination with + background is not entirely trivial. The current implementation evolved from + less clever ones and, unless you start doing complicated box manipulations + with the float content, works quite well. One reason why we made backgrounds + work in tables (and especially floating tables) is that is was needed for + typesetting books for primary and secundary education. In there, we want to + be able to hide the answers that students are supposed to fill in. + + \flushsidefloats + +\stop + +In \in {figure} [fig:columns:1] you can see an advanced example of backgrounds +running over columns. If you look carefully, you will notice that the background +depends on the kind of background at hand: + +\startitemize[n,packed] +\item the text starts and flows on +\item the text flows on (or stands alone) +\item the text flows on and ends +\stopitemize + +This information is available when you want to draw your own backgrounds. Here +the graphic was defined as follows: + +\startplacefigure [reference=fig:columns:1] + \startcombination[4*1] + {\externalfigure[back-4.pdf][page=1,width=\distributedhsize\textwidth\emwidth4]}{Page 1} + {\externalfigure[back-4.pdf][page=2,width=\distributedhsize\textwidth\emwidth4]}{Page 2} + {\externalfigure[back-4.pdf][page=3,width=\distributedhsize\textwidth\emwidth4]}{Page 3} + {\externalfigure[back-4.pdf][page=4,width=\distributedhsize\textwidth\emwidth4]}{Page 4} + \stopcombination +\stopplacefigure + +\starttyping +\startuseMPgraphic{mpos:par:color} + for i=1 upto nofmultipars : + fill multipars[i] withcolor + if multikind[i]="single" : "darkgray" ; + elseif multikind[i]="first" : "red" ; + elseif multikind[i]="middle" : "green" ; + elseif multikind[i]="last" : "blue" ; + else : "black" ; + fi ; + endfor ; +\stopuseMPgraphic +\stoptyping + +This graphic is hooked into the background setup by setting the \type {mp} +variable. + +\starttyping +\definetextbackground + [shade] + [location=paragraph, + mp=mpos:par:color, + before=\blank, + after=\blank] +\stoptyping + +A variant is the following. This time we use a shade: + +\starttyping +\startuseMPgraphic{mpos:par:columnset:shade} + numeric h ; + for i=1 upto nofmultipars : + h := bbheight(p) ; + if multikind[i] = "single" : + fill multipars[i] topenlarged -.5h + withshademethod "linear" + withshadedirection shadedup + withcolor boxfillcolor shadedinto .8white ; + fill multipars[i] bottomenlarged -.5h + withshademethod "linear" + withshadedirection shadedup + withcolor .8white shadedinto boxfillcolor ; + elseif multikind[i] = "first" : + fill multipars[i] + withshademethod "linear" + withshadedirection shadedup + withcolor boxfillcolor shadedinto .8white ; + elseif multikind[i] = "middle" : + fill multipars[i] topenlarged -.5h + withshademethod "linear" + withshadedirection shadedup + withcolor boxfillcolor shadedinto .8white ; + fill multipars[i] bottomenlarged -.5h + withshademethod "linear" + withshadedirection shadedup + withcolor .8white shadedinto boxfillcolor ; + elseif multikind[i] = "last" : + fill multipars[i] + withshademethod "linear" + withshadedirection shadedup + withcolor .8white shadedinto boxfillcolor ; + fi ; + endfor ; +\stopuseMPgraphic +\stoptyping + +When we hook it into the background we get \in {figure} [fig:columns:2] as result: + +\starttyping +\definetextbackground + [shade] + [location=paragraph, + backgroundcolor=shadecolor, + mp=mpos:par:columnset:shade, + before=\blank, + after=\blank] +\stoptyping + +\startplacefigure [reference=fig:columns:2] + \startcombination[4*1] + {\externalfigure[back-5.pdf][page=1,width=\distributedhsize\textwidth\emwidth4]}{Page 1} + {\externalfigure[back-5.pdf][page=2,width=\distributedhsize\textwidth\emwidth4]}{Page 2} + {\externalfigure[back-5.pdf][page=3,width=\distributedhsize\textwidth\emwidth4]}{Page 3} + {\externalfigure[back-5.pdf][page=4,width=\distributedhsize\textwidth\emwidth4]}{Page 4} + \stopcombination +\stopplacefigure + +The complexity of the backgrounds mechanism is partly due to the fact that we +want to use arbitrary \METAPOST\ code to render the background. For instance, we +want to have a proper shape so that not only the filled shape but also the drawn +shape comes out right. You can compare this to a glyph in a font: when rendered +filled the outline can be anything as it will not be drawn but when we use the +outline we can run into overlaps and such. Where glyphs can use the odd|-|even +filling methods, background can only use that for simple cases. + +When a background is rectangular it's all quite easy but as soon as some holes +occur we need to do more work. Holes can be the result of a image placed next to +the running text, or an image flushed at a page break or in the middle of a +background. Paragraph shapes are another example. Backgrounds can cross page +boundaries too. Yet another property is nesting and in such cases the shape is +a bit more complex as we cross lines partially. + +In \MKII\ the background mechanism already was quite useable but it had some +limitations. Calculating the background was mostly delegated to \METAPOST\ which +is reasonable. In \MKIV\ some work is delegated to \LUA\ instead but that doesn't +mean that the code is cleaner or easier to understand. So, to summarize, there +are several cases that we need to take into account, like: + +\startitemize + \startitem + A background can run behind a paragraph in which case the start is + leftmost and end rightmost. In this case inserts (like floats) have to be + dealt with after the shape has been calculated. + \stopitem + \startitem + A background can be in|-|line (the \type {text} location variant) in + which case we need to follow the paragraph shape, if set. In that case we + have a mix of calculating the background shape and afterwards + compensating for inserts. + \stopitem + \startitem + A third case is tabulation and tables where we have dedicated regions to + deal with. When these float we need to make sure that the backgrounds are + adapted to the where they end up. + \stopitem + \startitem + Yet another case is in columns, where we hape multiple regions to deal + with. + \stopitem + \startitem + As mentioned, floats need special treatment and they can be part of the + page flow but also end up left or right of the text (either or not + shifted) but also in the margins, edges, back- or cutspace. Their + placement influences the way backgrounds are calculated so additional + information needs to travel with them. + \stopitem + +\stopitemize + +We distinguish between a paragraph background, which runs between the left and right skip +areas and a text background which follows a shape. In \in {figure} [fig:columns:3] we see a +test case with several such shapes. + +\startplacefigure [reference=fig:columns:3] + \startcombination[4*3] + {\externalfigure[back-2.pdf][page=1, width=\distributedhsize\textwidth\emwidth4]}{Page 1} + {\externalfigure[back-2.pdf][page=2, width=\distributedhsize\textwidth\emwidth4]}{Page 2} + {\externalfigure[back-2.pdf][page=3, width=\distributedhsize\textwidth\emwidth4]}{Page 3} + {\externalfigure[back-2.pdf][page=4, width=\distributedhsize\textwidth\emwidth4]}{Page 4} + {\externalfigure[back-2.pdf][page=5, width=\distributedhsize\textwidth\emwidth4]}{Page 5} + {\externalfigure[back-2.pdf][page=6, width=\distributedhsize\textwidth\emwidth4]}{Page 6} + {\externalfigure[back-2.pdf][page=7, width=\distributedhsize\textwidth\emwidth4]}{Page 7} + {\externalfigure[back-2.pdf][page=8, width=\distributedhsize\textwidth\emwidth4]}{Page 8} + {\externalfigure[back-2.pdf][page=9, width=\distributedhsize\textwidth\emwidth4]}{Page 9} + {\externalfigure[back-2.pdf][page=10,width=\distributedhsize\textwidth\emwidth4]}{Page 10} + {\externalfigure[back-2.pdf][page=11,width=\distributedhsize\textwidth\emwidth4]}{Page 11} + {\externalfigure[back-2.pdf][page=12,width=\distributedhsize\textwidth\emwidth4]}{Page 12} + \stopcombination +\stopplacefigure + +In the case of side floats the following cases occur. Of course multiple such +cases can follow each order so in practice we have to deal with an accumulation. + +\startlinecorrection[blank] +\startMPcode + linejoin := linecap := butt ; + + numeric u ; u := 1mm ; + numeric lw ; lw := u/2 ; + + pickup pencircle scaled 2lw ; + + def example (expr n) (text t) (text l) = + path b ; b := boundingbox image ( + for i=t : draw ( 0u,i*2u) -- (20u,i*2u) ; endfor ; + for i=l : draw ( 0u,i*2u) -- (20u,i*2u) ; endfor ; + ) ; + picture p ; p := image ( + for i=t : draw ( 0u,i*2u) -- (20u,i*2u) ; endfor ; + for i=l : draw (11u,i*2u) -- (20u,i*2u) ; endfor ; + ) ; + setbounds p to b ; + path q ; q := unitsquare xysized(10u,10u) shifted (0,4u) ; + draw image ( + fill boundingbox p leftenlarged -lw rightenlarged -lw withcolor "blue" ; + draw p withcolor .5white ; + fill q withcolor "red" ; + draw textext("\bf " & decimal n) shifted (center q) withcolor white ; + ) shifted ((n-1)*30u,0) ; + enddef ; + + example (1) (1) (2,3,4) ; + example (2) (1,8) (2,3,4,5,6,7) ; + example (3) (8) (5,6,7) ; + example (4) () (3,4,5,6) ; + + currentpicture := currentpicture ysized(3*LineHeight- StrutDepth) ; + +\stopMPcode +\stoplinecorrection + +As often in \TEX\ coming up with a solution is not a the problem but interference +is. You can cook up a solution for one case that fails in another. Backgrounds +fall into this category, as do side floats. In the next pages we will demonstrate +a few cases. In practice you can probably always come up with something that +works out well, but in an automated workflow (like unattended \XML\ to \PDF\ +conversion) you can best play safe. We show some examples on the next pages. + +\blank + +\definetextbackground + [demobg] + [backgroundcolor=blue, + color=white, + frame=off, + location=paragraph] + +\setupfloatcaption + [color=black] + +\definesimulatewords + [demo] + [n=50, + m=\simulatewordsparameter{n}, + min=1, + max=5, + color=text, + line=yes, + random=100] + +\startbuffer +\placefigure + [left] + {case 1} + {\blackrule[width=12cm,height=1cm,color=red]} +\simulatewords[demo][n=10] +\starttextbackground[demobg] + \simulatewords[demo][n=30] +\stoptextbackground +\flushsidefloats + +\blank + +\starttextbackground[demobg] + \simulatewords[demo][n=40] + \placefigure + [left] + {case 2} + {\blackrule[width=12cm,height=1cm,color=red]} + \simulatewords[demo][n=40] +\stoptextbackground +\flushsidefloats + +\blank + +\placefigure + [left] + {case 3} + {\blackrule[width=4cm,height=15mm,color=red]} +\starttextbackground[demobg] + \simulatewords[demo][n=40] +\stoptextbackground +\simulatewords[demo][n=40] +\flushsidefloats + +\blank + +\simulatewords[demo][n=35] +\placefigure + [left] + {case 4} + {\blackrule[width=4cm,height=1cm,color=red]} +\simulatewords[demo][n=20] +\starttextbackground[demobg] + \simulatewords[demo][n=25] +\stoptextbackground +\simulatewords[demo][n=40] +\flushsidefloats + +\blank + +\stopbuffer + +\start \setupwhitespace[none] \getbuffer \stop \blank + +The previous examples were typeset with: + +\typebuffer + +Regular (page flow) floats are a different story. Here we have the problem that a +float might be postpones because there is no room on the current page and they +are moved forward (which is why they're called float). Again we show some +examples. + +% \page + +\startbuffer[sample] +One problem introduced by the internet is that one can view music online. Well, +it's actually not really a problem as it is fun to do, but it does interfere with +development of code: one can enter distraction mode quite easily. +\stopbuffer + +\startbuffer +\starttextbackground[demobg] + \par \getbuffer[sample] \par + \placefigure{}{\blackrule[width=4cm,height=1cm,color=red]} + \par \getbuffer[sample] \par + \placefigure{}{\blackrule[width=4cm,height=3cm,color=red]} + \par \getbuffer[sample] \par + \placefigure{}{\blackrule[width=4cm,height=2cm,color=red]} + \par \getbuffer[sample] \par +\stoptextbackground +\stopbuffer + +\blank \getbuffer \blank + +The input is: + +\typebuffer + +A combination of both background avoiding mechanisms is shown on the next page +(we flush a few more grapohics so that we cross a page boundary): + +% \page + +\startbuffer +\starttextbackground[demobg] + \placefigure{}{\blackrule[width=4cm,height=2cm,color=red]} + \par \input ward \par + \placefigure[left]{}{\blackrule[width=4cm,height=2cm,color=red]} + \par \input ward \par + \placefigure{}{\blackrule[width=4cm,height=2cm,color=red]} + \placefigure{}{\blackrule[width=4cm,height=2cm,color=red]} + \placefigure{}{\blackrule[width=4cm,height=2cm,color=red]} + \placefigure{}{\blackrule[width=4cm,height=2cm,color=red]} + \placefigure{}{\blackrule[width=4cm,height=2cm,color=red]} + \placefigure{}{\blackrule[width=4cm,height=2cm,color=red]} + \par \input ward \par + \placefigure{}{\blackrule[width=4cm,height=2cm,color=red]} + \par \input ward \par +\stoptextbackground +\stopbuffer + +\blank \getbuffer \blank + +This is the result from: + +\typebuffer + +You can control the interaction between backgrounds and floars with the \type +{freeregion} parameter. + +\startbuffer +\starttextbackground[demobg] + \simulatewords[demo][n=40] + \startplacefigure + [location=left, + title={free}] + \blackrule[width=12cm,height=1cm,color=red] + \stopplacefigure + \simulatewords[demo][n=40] + \startplacefigure + [location=left, + title={non|-|free}, + freeregion=no, + color=textcolor] + \blackrule[width=12cm,height=1cm,color=red] + \stopplacefigure + \simulatewords[demo][n=40] + \startplacefigure + [location=here, + title={free}] + \blackrule[width=12cm,height=1cm,color=red] + \stopplacefigure + \simulatewords[demo][n=40] + \startplacefigure + [location=here, + title={non|-|free}, + freeregion=no, + color=textcolor] + \blackrule[width=12cm,height=1cm,color=red] + \stopplacefigure + \simulatewords[demo][n=40] +\stoptextbackground +\stopbuffer + +\typebuffer + +The next pages show the result, first with some tracing enabled sop that you +can see what gets freed. This visual effect is enabled with: + +\starttyping +\enabletrackers[floats.freeregion] +\stoptyping + +We now move to the next page. + +\page + \getbuffer +\page + \enabletrackers[floats.freeregion] + \getbuffer + \disabletrackers[floats.freeregion] +\page + +We have some control over side float placement and of course that will interfere +with backgrounds. Say that we have this: + +\startbuffer +\definefloat + [demofigureleft] + [figure] + [default=left, + margin=1cm, + leftmargindistance=2cm, + rightmargindistance=2cm] + +\definefloat + [demofigureright] + [demofigureleft] + [default=right] +\stopbuffer + +\typebuffer \getbuffer + +Combined with the following we get the result on the next pages. + +\startbuffer +\starttextbackground[demobg] + \startplacefloat[figure][location=left] + \blackrule[width=12cm,height=1cm,color=red] + \stopplacefigure + \simulatewords[demo][n=40] + \blank + \startplacefloat[figure][location=right] + \blackrule[width=12cm,height=1cm,color=red] + \stopplacefigure + \simulatewords[demo][n=40] + \blank + \startplacefloat[demofigureleft] + \blackrule[width=10cm,height=1cm,color=red] + \stopplacefigure + \simulatewords[demo][n=40] + \blank + \startplacefloat[demofigureright] + \blackrule[width=10cm,height=1cm,color=red] + \stopplacefigure + \simulatewords[demo][n=40] + \startplacefloat[figure] % [freeregion=no] + \blackrule[width=12cm,height=1cm,color=red] + \stopplacefigure + \simulatewords[demo][n=40] +\stoptextbackground +\stopbuffer + +\typebuffer + +\page + +\start + \enabletrackers[floats.freeregion] + \setupwhitespace[none] + \getbuffer + \disabletrackers[floats.freeregion] +\stop + +\page + +\start + \setupwhitespace[none] + \getbuffer +\stop + +\page + +\stop \stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details-tuningformulas.tex b/doc/context/sources/general/manuals/details/details-tuningformulas.tex new file mode 100644 index 000000000..b36320769 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details-tuningformulas.tex @@ -0,0 +1,212 @@ +% language=uk + +\environment details-environment + +\startcomponent details-tuningformulas + +\startchapter[title={Tuning math formulas}] + +Because of its look and feel, a math formula can look too widely spaced when put +on a grid. There are a few ways to control this. First of all, the default grid +option bound to math is already more tolerant. But you can control it locally +too. Take the following formula: + +\startbuffer +\startformula + a = b^c +\stopformula +\stopbuffer + +\blank \fakeline \getbuffer \fakeline \blank + +This has been entered as: + +\typebuffer + +and because it is just a line of math it comes out as expected. The next code + +\startbuffer +\startformula + a = \frac {a} {b} +\stopformula +\stopbuffer + +\typebuffer + +produces a higher line: + +\blank \fakeline \getbuffer \fakeline \blank + +as does: + +\startbuffer +\startformula + a = \frac {\frac {b} {c}} {\frac {d} {e}} +\stopformula +\stopbuffer + +\typebuffer + +\blank \fakeline \getbuffer \fakeline \blank + +We will now demonstrate three ways to compensate fo rexcessive spacing. The first +variant just sets a grid parameter: + +\startbuffer +\startformula[grid=math:-halfline] + a = \frac {\frac {b} {c}} {\frac {d} {e}} +\stopformula +\stopbuffer + +\typebuffer + +\blank \fakeline \getbuffer \fakeline \blank + +You can also pass this as an option. Only a few such grid related options are +defined: \type {halfline}, \type {line}, \type {-halfline} and \type {-grid}. + +\startbuffer +\startformula[-halfline] + a = \frac {\frac {b} {c}} {\frac {d} {e}} +\stopformula +\stopbuffer + +\typebuffer + +\blank \fakeline \getbuffer \fakeline \blank + +If you need to compensate frequently you can consider defining an instance: + +\startbuffer +\defineformula[tight][grid=math:-halfline] + +\starttightformula + a = \frac {\frac {b} {c}} {\frac {d} {e}} +\stoptightformula +\stopbuffer + +\typebuffer + +\blank \fakeline \getbuffer \fakeline \blank + +The result can be somewhat unexpected at the top and bottom of a page. When we +subtract half a line from the height we can end up above the text area. This is +where the \type {split} directive comes in. So, the compensations are actually +defined as + +\starttabulate[|TCT{blue}|T|] +\NC math \NC \theexpandedsnapperset{math} \NC \NR +\NC math:line \NC \theexpandedsnapperset{math:line} \NC \NR +\NC math:halfline \NC \theexpandedsnapperset{math:halfline} \NC \NR +\NC math:-line \NC \theexpandedsnapperset{math:-line} \NC \NR +\NC math:-halfline \NC \theexpandedsnapperset{math:-halfline} \NC \NR +\stoptabulate + +You can define your own variants building on top of an existing one: + +\starttyping +\definegridsnapping[math:my][math,....] +\stoptyping + +We demonstrate the effect of the \type {split} directive here. It triggers a +check at the page boundaries but you need to keep in mind that this is not always +robust as such boundaries themselves can be triggered by and inject anything. + +\startbuffer[a] +\dorecurse {15} { + \startformula[grid={math,-halfline}] + a = \frac {\frac {b} {c}} {\frac {d} {e}} + (\hbox{top #1 default}) + \stopformula + \blank[samepage] + \fakeline +} +\stopbuffer + +\startbuffer[b] +\dorecurse {15} { + \startformula[grid={math,-halfline,split}] + a = \frac {\frac {b} {c}} {\frac {d} {e}} + (\hbox{top #1 compensated}) + \stopformula + \blank[samepage] + \fakeline +} +\stopbuffer + +\getbuffer[a] +\getbuffer[b] + +As said, the compensation is achieved with the \type {page} directive. The +previous pages were rendered using: + +\typebuffer[a] + +and + +\typebuffer[b] + +In order to get a consistent result we keep the depth of the formula the same but +effectively shift it down a bit, still honouring the grid. So what about the +bottom. + +We can decide that the snapped formula doesn't fit and force a new page but we +can also accept that it sticks out to the bottom, which is less worse than the +top|-|of|-|the|-|page case. + +\startbuffer[a] +\dorecurse{45}{\fakeline} +\startformula[grid={math,-halfline}] + a = \frac {\frac {b} {c}} {\frac {d} {e}} + (\hbox{bottom default}) +\stopformula +\stopbuffer + +\startbuffer[b] +\dorecurse{45}{\fakeline} +\startformula[grid={math,-halfline,split}] + a = \frac {\frac {b} {c}} {\frac {d} {e}} + (\hbox{bottom compensated}) +\stopformula +\stopbuffer + +\page \getbuffer[a] % fits on the page +\page \getbuffer[b] % forces a new page + +These mechanisms might be improved over time but as we don't use it frequently +that might take a while. + +The following formula was posted at the \CONTEXT\ mailing list in a grid snapping +thread and we will use it to demonstrate how you can mess a bit with the +snapping. + +\startbuffer +g(x_{*}) = \lim_{n\to\infty} g(a_{n}) \leq 0 \leq \lim_{n\to\infty} g(b_{n}) = g(x_{*}) +\stopbuffer + +\typebuffer + +We show the given grid parameter as well as its expansion into the low level grid +directives. + +\unexpanded\def\SampleFormula#1% + {\definegridsnapping[math:temp][#1] + \blank + \type{grid=#1} \hfill expanded: \normalexpanded{\type{\theexpandedsnapperset{math:temp}}} + \blank[samepage] + \fakeline + \blank[samepage] + \startformula[grid={#1}] + \getbuffer + \stopformula + \blank[samepage] + \fakeline + \blank} + +\SampleFormula{math} +\SampleFormula{low,halfline} +\SampleFormula{math,nodepth} + +\stopchapter + +\stopcomponent diff --git a/doc/context/sources/general/manuals/details/details.tex b/doc/context/sources/general/manuals/details/details.tex new file mode 100644 index 000000000..6319721e5 --- /dev/null +++ b/doc/context/sources/general/manuals/details/details.tex @@ -0,0 +1,50 @@ +% interface=english modes=screen + +% author : Hans Hagen +% copyright : PRAGMA ADE & ConTeXt Development Team +% license : Creative Commons Attribution ShareAlike 4.0 International +% reference : pragma-ade.nl | contextgarden.net | texlive (related) distributions +% origin : the ConTeXt distribution +% +% comment : Because this manual is distributed with TeX distributions it comes with a rather +% liberal license. We try to adapt these documents to upgrades in the (sub)systems +% that they describe. Using parts of the content otherwise can therefore conflict +% with existing functionality and we cannot be held responsible for that. Many of +% the manuals contain characteristic graphics and personal notes or examples that +% make no sense when used out-of-context. +% +% comment : Some chapters might have been published in TugBoat, the NTG Maps, the ConTeXt +% Group journal or otherwise. Thanks to the editors for corrections. Also thanks +% to users for testing, feedback and corrections. + +\startproduct details + +\environment details-environment + +\component details-frontpage + +\startfrontmatter + \component details-introduction + \component details-contents +\stopfrontmatter + +\startbodymatter + \component details-snappingheads + \component details-pseudocolumns + \component details-textbackgrounds + \component details-tuningformulas + \component details-floatingaround + \component details-finetuningfloats + \component details-ornaments + \component details-gridtrickery + \component details-captiontrickery +\stopbodymatter + +\startbackmatter + % \component details-index + \component details-colofon +\stopbackmatter + +\component details-backpage + +\stopproduct diff --git a/doc/context/sources/general/manuals/details/detcow.mp b/doc/context/sources/general/manuals/details/detcow.mp new file mode 100644 index 000000000..18fc570e5 --- /dev/null +++ b/doc/context/sources/general/manuals/details/detcow.mp @@ -0,0 +1,297 @@ +% Converted from PostScript(TM) to MetaPost by pstoedit +% +% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa + +% MetaPost backend contributed by Scott Pakin <pakin@uiuc.edu> +% pstoedit is Copyright (C) 1993 - 1999 Wolfgang Glunz <wglunz@geocities.com> + +% Generate structured PostScript +prologues := 1; + +% Display a given string with its *baseline* at a given location +% and with a given rotation angle +vardef showtext(expr origin)(expr angle)(expr string) = + draw string infont defaultfont scaled defaultscale + rotated angle shifted origin; +enddef; + +beginfig(1); +drawoptions (withcolor (1,1,1)); +fill (84.3799,618.55)..controls (88.3398,624.38) and (92.5898,622.94)..(96.3398,615.67) + ..controls (101.23,615.6) and (102.46,612.43)..(104.98,610.78) + ..controls (122.62,598.39) and (147.46,607.18)..(167.9,601.92) + ..controls (180.94,598.54) and (190.87,599.76)..(200.09,602.06) + ..controls (220.32,607.25) and (246.1,596.16)..(263.74,603.86) + ..controls (274.75,608.62) and (284.76,605.66)..(292.97,600.91) + ..controls (297.58,597.96) and (299.59,596.09)..(300.96,591.26) + ..controls (306.29,572.54) and (306.29,551.02)..(309.53,530.57) + ..controls (309.53,528.84) and (312.19,526.1)..(312.48,522.07) + ..controls (315.79,511.34) and (316.08,510.12)..(317.16,502.2) + ..controls (317.16,501.34) and (326.52,488.45)..(325.01,479.02) + ..controls (323.93,481.25) and (323.86,482.83)..(321.62,481.68) + ..controls (320.33,479.3) and (320.9,473.9)..(322.56,471.74) + ..controls (320.83,470.81) and (318.46,473.47)..(317.52,475.2) + ..controls (318.17,473.04) and (317.81,470.81)..(316.73,469.3) + ..controls (315.86,472.25) and (316.58,473.18)..(315.36,473.9) + ..controls (313.99,472.9) and (314.21,469.3)..(314.28,466.2) + ..controls (313.49,468.07) and (311.47,472.46)..(312.55,476.42) + ..controls (312.48,484.2) and (308.81,489.1)..(310.32,499.1) + ..controls (310.1,504.43) and (307.3,521.06)..(304.56,524.3) + ..controls (303.12,526.25) and (306.36,510.77)..(306.36,506.16) + ..controls (306.65,500.9) and (307.08,468.72)..(306.43,463.1) + ..controls (306.43,459.22) and (306.22,453.96)..(307.08,452.16) + ..controls (308.74,450.79) and (309.38,450.5)..(309.6,447.98) + ..controls (309.24,446.62) and (308.74,446.04)..(307.73,445.54) + ..controls (306.07,444.6) and (307.37,441.79)..(306.07,439.85) + ..controls (304.49,438.77) and (304.13,441.86)..(303.34,441.86) + ..controls (302.69,441) and (303.05,437.98)..(302.47,436.18) + ..controls (299.66,433.8) and (292.18,432.5)..(289.15,434.66) + ..controls (289.73,440.64) and (291.74,441.58)..(295.63,446.62) + ..controls (298.66,452.59) and (297,460.94)..(296.93,468.14) + ..controls (295.49,480.38) and (289.22,487.3)..(289.44,496.44) + ..controls (287.86,495.72) and (286.42,494.57)..(284.26,494.86) + ..controls (283.39,489.46) and (286.42,484.56)..(284.83,480.82) + ..controls (281.95,471.96) and (277.06,446.62)..(279,437.76) + ..controls (280.01,434.74) and (278.21,433.15)..(277.06,433.94) + ..controls (276.77,433.94) and (276.55,433.94)..(276.41,433.94) + ..controls (276.41,433.94) and (276.55,431.42)..(275.69,430.92) + ..controls (274.1,430.34) and (273.67,431.71)..(272.66,432.14) + ..controls (271.22,430.85) and (272.52,429.48)..(271.15,428.04) + ..controls (267.19,428.04) and (261.36,425.38)..(257.98,428.26) + ..controls (257.33,434.16) and (263.3,436.68)..(266.47,440.71) + ..controls (268.63,446.62) and (271.08,462.89)..(267.77,474.62) + ..controls (267.77,475.56) and (264.38,485.28)..(261.43,488.66) + ..controls (258.7,487.66) and (257.33,485.5)..(253.22,486.29) + ..controls (252.58,484.34) and (253.3,482.33)..(252.22,480.1) + ..controls (251.86,479.52) and (249.34,478.58)..(249.19,481.39) + ..controls (248.98,483.05) and (248.9,486.36)..(248.26,486.72) + ..controls (243.65,486.72) and (233.71,487.08)..(231.77,493.92) + ..controls (219.89,492.34) and (215.93,491.26)..(206.57,493.42) + ..controls (196.63,489.67) and (183.24,506.16)..(174.53,502.2) + ..controls (172.51,496.15) and (173.09,485.64)..(171.65,481.39) + ..controls (169.34,474.77) and (171.14,467.14)..(171.14,456.41) + ..controls (170.57,455.4) and (169.85,454.46)..(168.48,454.46) + ..controls (168.48,453.1) and (169.34,450.86)..(168.62,449.42) + ..controls (167.18,447.62) and (165.89,451.8)..(165.02,444.6) + ..controls (163.15,443.74) and (157.75,442.22)..(155.59,445.18) + ..controls (155.88,448.99) and (158.33,451.3)..(160.13,453.38) + ..controls (161.42,456.91) and (160.99,458.28)..(160.7,461.81) + ..controls (160.99,464.98) and (161.71,468.58)..(161.86,470.09) + ..controls (161.86,473.04) and (162.5,479.3)..(161.14,481.18) + --(159.41,482.69)..controls (157.18,487.22) and (158.33,494.64)..(157.61,500.26) + ..controls (155.81,500.69) and (155.81,500.98)..(154.01,498.31) + ..controls (154.01,494.42) and (153.5,486.36)..(152.35,483.84) + ..controls (149.69,479.81) and (150.84,459.65)..(151.42,448.56) + ..controls (151.78,446.47) and (149.69,447.7)..(149.76,444.74) + ..controls (150.05,442.8) and (147.89,443.59)..(146.09,444.6) + ..controls (145.15,445.18) and (146.59,439.78)..(145.37,439.56) + ..controls (142.34,438.84) and (136.87,438.19)..(135.22,440.71) + ..controls (134.57,444.6) and (137.88,448.06)..(140.62,451.01) + ..controls (143.14,455.83) and (140.9,465.7)..(140.47,476.28) + --(138.89,478.22)..controls (134.86,483.19) and (139.61,496.94)..(136.51,506.23) + ..controls (120.02,514.87) and (122.11,519.19)..(118.73,537.62) + ..controls (115.13,557.64) and (93.3799,567.65)..(79.0598,567.65) + ..controls (73.4399,563.04) and (66.24,563.62)..(58.5398,567.65) + ..controls (55.6599,569.23) and (54.4299,573.19)..(54.5,576.5) + ..controls (52.6299,580.75) and (55.22,582.19)..(59.6199,583.49) + ..controls (62.71,587.81) and (68.6199,594.65)..(69.1899,597.74) + ..controls (70.3398,601.92) and (75.5298,608.11)..(77.7598,609.77) + ..controls (75.8198,613.01) and (74.8098,615.17)..(77.1099,618.55) + ..controls (79.5598,620.14) and (81.7898,616.61)..(84.3799,618.55) + --cycle; +drawoptions (withcolor (0,0,0)); +pickup pencircle scaled 0.636492bp; +draw (84.3799,618.55)..controls (88.3398,624.38) and (92.5898,622.94)..(96.3398,615.67) + ..controls (101.23,615.6) and (102.46,612.43)..(104.98,610.78) + ..controls (122.62,598.39) and (147.46,607.18)..(167.9,601.92) + ..controls (180.94,598.54) and (190.87,599.76)..(200.09,602.06) + ..controls (220.32,607.25) and (246.1,596.16)..(263.74,603.86) + ..controls (274.75,608.62) and (284.76,605.66)..(292.97,600.91) + ..controls (297.58,597.96) and (299.59,596.09)..(300.96,591.26) + ..controls (306.29,572.54) and (306.29,551.02)..(309.53,530.57) + ..controls (309.53,528.84) and (312.19,526.1)..(312.48,522.07) + ..controls (315.79,511.34) and (316.08,510.12)..(317.16,502.2) + ..controls (317.16,501.34) and (326.52,488.45)..(325.01,479.02) + ..controls (323.93,481.25) and (323.86,482.83)..(321.62,481.68) + ..controls (320.33,479.3) and (320.9,473.9)..(322.56,471.74) + ..controls (320.83,470.81) and (318.46,473.47)..(317.52,475.2) + ..controls (318.17,473.04) and (317.81,470.81)..(316.73,469.3) + ..controls (315.86,472.25) and (316.58,473.18)..(315.36,473.9) + ..controls (313.99,472.9) and (314.21,469.3)..(314.28,466.2) + ..controls (313.49,468.07) and (311.47,472.46)..(312.55,476.42) + ..controls (312.48,484.2) and (308.81,489.1)..(310.32,499.1) + ..controls (310.1,504.43) and (307.3,521.06)..(304.56,524.3) + ..controls (303.12,526.25) and (306.36,510.77)..(306.36,506.16) + ..controls (306.65,500.9) and (307.08,468.72)..(306.43,463.1) + ..controls (306.43,459.22) and (306.22,453.96)..(307.08,452.16) + ..controls (308.74,450.79) and (309.38,450.5)..(309.6,447.98) + ..controls (309.24,446.62) and (308.74,446.04)..(307.73,445.54) + ..controls (306.07,444.6) and (307.37,441.79)..(306.07,439.85) + ..controls (304.49,438.77) and (304.13,441.86)..(303.34,441.86) + ..controls (302.69,441) and (303.05,437.98)..(302.47,436.18) + ..controls (299.66,433.8) and (292.18,432.5)..(289.15,434.66) + ..controls (289.73,440.64) and (291.74,441.58)..(295.63,446.62) + ..controls (298.66,452.59) and (297,460.94)..(296.93,468.14) + ..controls (295.49,480.38) and (289.22,487.3)..(289.44,496.44) + ..controls (287.86,495.72) and (286.42,494.57)..(284.26,494.86) + ..controls (283.39,489.46) and (286.42,484.56)..(284.83,480.82) + ..controls (281.95,471.96) and (277.06,446.62)..(279,437.76) + ..controls (280.01,434.74) and (278.21,433.15)..(277.06,433.94) + ..controls (276.77,433.94) and (276.55,433.94)..(276.41,433.94) + ..controls (276.41,433.94) and (276.55,431.42)..(275.69,430.92) + ..controls (274.1,430.34) and (273.67,431.71)..(272.66,432.14) + ..controls (271.22,430.85) and (272.52,429.48)..(271.15,428.04) + ..controls (267.19,428.04) and (261.36,425.38)..(257.98,428.26) + ..controls (257.33,434.16) and (263.3,436.68)..(266.47,440.71) + ..controls (268.63,446.62) and (271.08,462.89)..(267.77,474.62) + ..controls (267.77,475.56) and (264.38,485.28)..(261.43,488.66) + ..controls (258.7,487.66) and (257.33,485.5)..(253.22,486.29) + ..controls (252.58,484.34) and (253.3,482.33)..(252.22,480.1) + ..controls (251.86,479.52) and (249.34,478.58)..(249.19,481.39) + ..controls (248.98,483.05) and (248.9,486.36)..(248.26,486.72) + ..controls (243.65,486.72) and (233.71,487.08)..(231.77,493.92) + ..controls (219.89,492.34) and (215.93,491.26)..(206.57,493.42) + ..controls (196.63,489.67) and (183.24,506.16)..(174.53,502.2) + ..controls (172.51,496.15) and (173.09,485.64)..(171.65,481.39) + ..controls (169.34,474.77) and (171.14,467.14)..(171.14,456.41) + ..controls (170.57,455.4) and (169.85,454.46)..(168.48,454.46) + ..controls (168.48,453.1) and (169.34,450.86)..(168.62,449.42) + ..controls (167.18,447.62) and (165.89,451.8)..(165.02,444.6) + ..controls (163.15,443.74) and (157.75,442.22)..(155.59,445.18) + ..controls (155.88,448.99) and (158.33,451.3)..(160.13,453.38) + ..controls (161.42,456.91) and (160.99,458.28)..(160.7,461.81) + ..controls (160.99,464.98) and (161.71,468.58)..(161.86,470.09) + ..controls (161.86,473.04) and (162.5,479.3)..(161.14,481.18) + --(159.41,482.69)..controls (157.18,487.22) and (158.33,494.64)..(157.61,500.26) + ..controls (155.81,500.69) and (155.81,500.98)..(154.01,498.31) + ..controls (154.01,494.42) and (153.5,486.36)..(152.35,483.84) + ..controls (149.69,479.81) and (150.84,459.65)..(151.42,448.56) + ..controls (151.78,446.47) and (149.69,447.7)..(149.76,444.74) + ..controls (150.05,442.8) and (147.89,443.59)..(146.09,444.6) + ..controls (145.15,445.18) and (146.59,439.78)..(145.37,439.56) + ..controls (142.34,438.84) and (136.87,438.19)..(135.22,440.71) + ..controls (134.57,444.6) and (137.88,448.06)..(140.62,451.01) + ..controls (143.14,455.83) and (140.9,465.7)..(140.47,476.28) + --(138.89,478.22)..controls (134.86,483.19) and (139.61,496.94)..(136.51,506.23) + ..controls (120.02,514.87) and (122.11,519.19)..(118.73,537.62) + ..controls (115.13,557.64) and (93.3799,567.65)..(79.0598,567.65) + ..controls (73.4399,563.04) and (66.24,563.62)..(58.5398,567.65) + ..controls (55.6599,569.23) and (54.4299,573.19)..(54.5,576.5) + ..controls (52.6299,580.75) and (55.22,582.19)..(59.6199,583.49) + ..controls (62.71,587.81) and (68.6199,594.65)..(69.1899,597.74) + ..controls (70.3398,601.92) and (75.5298,608.11)..(77.7598,609.77) + ..controls (75.8198,613.01) and (74.8098,615.17)..(77.1099,618.55) + ..controls (79.5598,620.14) and (81.7898,616.61)..(84.3799,618.55) + --cycle; +pickup pencircle scaled 0bp; +fill (305.28,560.95)..controls (304.63,560.95) and (299.95,561.24)..(299.38,561.24) + ..controls (302.4,550.44) and (303.98,536.47)..(304.2,525.31) + ..controls (303.7,521.35) and (299.81,517.46)..(299.38,525.67) + ..controls (295.85,530.86) and (296.42,540.07)..(293.4,540.29) + ..controls (287.35,539.64) and (285.34,513.22)..(280.01,509.33) + ..controls (276.26,512.28) and (280.73,524.02)..(275.54,524.74) + ..controls (270.5,524.02) and (264.31,526.68)..(266.69,534.46) + ..controls (270.29,543.02) and (268.34,554.76)..(266.54,561.6) + ..controls (262.37,578.59) and (264.02,587.09)..(271.58,596.09) + --(267.48,604.51)..controls (275.4,608.26) and (285.62,604.58)..(290.02,602.21) + ..controls (294.62,600.26) and (300.24,595.94)..(301.1,587.38) + ..controls (303.34,578.88) and (304.42,569.74)..(305.28,560.95) + --cycle; +fill (245.45,600.34)..controls (242.78,599.4) and (239.62,596.02)..(237.67,594.07) + ..controls (236.74,584.42) and (244.58,583.63)..(250.2,577.44) + ..controls (258.77,573.7) and (251.21,567.72)..(256.18,557.42) + ..controls (257.04,550.94) and (257.9,543.89)..(255.31,539.78) + ..controls (249.48,538.92) and (247.97,540.22)..(246.89,531.43) + ..controls (246.31,526.97) and (231.77,529.06)..(229.03,538.27) + ..controls (227.09,544.97) and (221.33,546.7)..(217.8,543.17) + ..controls (213.77,538.06) and (215.78,531.22)..(217.8,527.47) + ..controls (224.93,517.32) and (212.04,511.42)..(205.13,516.74) + ..controls (199.73,508.68) and (211.39,500.04)..(207.43,494.5) + ..controls (205.78,493.99) and (204.77,489.17)..(185.47,500.54) + ..controls (180.36,504.14) and (167.83,500.76)..(168.77,520.63) + ..controls (168.77,525.82) and (165.6,543.53)..(162.14,555.91) + ..controls (159.41,561.24) and (156.74,559.08)..(156.89,553.9) + ..controls (157.18,547.85) and (162.94,531.22)..(155.52,540.22) + ..controls (153.58,539.21) and (156.89,523.58)..(156.89,521.64) + ..controls (162,517.03) and (157.39,513.58)..(154.73,512.28) + ..controls (151.27,518.33) and (149.62,518.04)..(147.17,514.44) + ..controls (141.7,514.08) and (144.58,528.19)..(140.26,528.62) + ..controls (137.02,527.76) and (139.18,520.06)..(138.24,518.76) + ..controls (132.98,524.74) and (130.9,529.27)..(127.01,521.64) + ..controls (126.14,521.64) and (122.11,519.19)..(120.96,526.54) + ..controls (117.65,552.74) and (107.06,558.36)..(93.8198,565.13) + ..controls (92.0198,565.63) and (84.24,566.71)..(79.3398,568.15) + ..controls (73.5098,560.88) and (58.3198,565.63)..(56.23,570.31) + ..controls (54.7898,572.69) and (54.6499,575.21)..(54.7898,576.5) + ..controls (52.3398,580.1) and (55.8699,582.7)..(59.6199,583.06) + ..controls (62.8599,587.16) and (68.5398,594.94)..(71.2798,601.56) + ..controls (72.2898,603.07) and (74.95,609.34)..(78.1899,609.55) + ..controls (74.95,612.94) and (74.2998,622.51)..(82.6599,617.33) + ..controls (87.1199,624.02) and (92.0898,624.31)..(95.7598,615.82) + ..controls (102.89,615.38) and (102.31,608.69)..(115.78,605.52) + ..controls (122.76,602.86) and (132.77,604.58)..(140.26,603.72) + ..controls (136.22,596.88) and (127.44,566.86)..(132.98,559.8) + ..controls (140.76,564.7) and (141.84,605.38)..(157.03,595.66) + ..controls (160.56,593.93) and (159.91,590.04)..(164.09,590.18) + ..controls (170.42,587.45) and (169.13,600.77)..(172.51,600.77) + ..controls (176.47,599.76) and (183.02,599.04)..(186.98,599.54) + ..controls (197.71,600.77) and (206.93,604.08)..(223.92,602.5) + ..controls (231.12,601.78) and (238.25,601.06)..(245.45,600.34) + --cycle; +pickup pencircle scaled 0.636492bp; +draw (305.28,560.95)..controls (304.63,560.95) and (299.95,561.24)..(299.38,561.24) + ..controls (302.4,550.44) and (303.98,536.47)..(304.2,525.31) + ..controls (303.7,521.35) and (299.81,517.46)..(299.38,525.67) + ..controls (295.85,530.86) and (296.42,540.07)..(293.4,540.29) + ..controls (287.35,539.64) and (285.34,513.22)..(280.01,509.33) + ..controls (276.26,512.28) and (280.73,524.02)..(275.54,524.74) + ..controls (270.5,524.02) and (264.31,526.68)..(266.69,534.46) + ..controls (270.29,543.02) and (268.34,554.76)..(266.54,561.6) + ..controls (262.37,578.59) and (264.02,587.09)..(271.58,596.09) + --(267.48,604.51)..controls (275.4,608.26) and (285.62,604.58)..(290.02,602.21) + ..controls (294.62,600.26) and (300.24,595.94)..(301.1,587.38) + ..controls (303.34,578.88) and (304.42,569.74)..(305.28,560.95) + --cycle; +draw (245.45,600.34)..controls (242.78,599.4) and (239.62,596.02)..(237.67,594.07) + ..controls (236.74,584.42) and (244.58,583.63)..(250.2,577.44) + ..controls (258.77,573.7) and (251.21,567.72)..(256.18,557.42) + ..controls (257.04,550.94) and (257.9,543.89)..(255.31,539.78) + ..controls (249.48,538.92) and (247.97,540.22)..(246.89,531.43) + ..controls (246.31,526.97) and (231.77,529.06)..(229.03,538.27) + ..controls (227.09,544.97) and (221.33,546.7)..(217.8,543.17) + ..controls (213.77,538.06) and (215.78,531.22)..(217.8,527.47) + ..controls (224.93,517.32) and (212.04,511.42)..(205.13,516.74) + ..controls (199.73,508.68) and (211.39,500.04)..(207.43,494.5) + ..controls (205.78,493.99) and (204.77,489.17)..(185.47,500.54) + ..controls (180.36,504.14) and (167.83,500.76)..(168.77,520.63) + ..controls (168.77,525.82) and (165.6,543.53)..(162.14,555.91) + ..controls (159.41,561.24) and (156.74,559.08)..(156.89,553.9) + ..controls (157.18,547.85) and (162.94,531.22)..(155.52,540.22) + ..controls (153.58,539.21) and (156.89,523.58)..(156.89,521.64) + ..controls (162,517.03) and (157.39,513.58)..(154.73,512.28) + ..controls (151.27,518.33) and (149.62,518.04)..(147.17,514.44) + ..controls (141.7,514.08) and (144.58,528.19)..(140.26,528.62) + ..controls (137.02,527.76) and (139.18,520.06)..(138.24,518.76) + ..controls (132.98,524.74) and (130.9,529.27)..(127.01,521.64) + ..controls (126.14,521.64) and (122.11,519.19)..(120.96,526.54) + ..controls (117.65,552.74) and (107.06,558.36)..(93.8198,565.13) + ..controls (92.0198,565.63) and (84.24,566.71)..(79.3398,568.15) + ..controls (73.5098,560.88) and (58.3198,565.63)..(56.23,570.31) + ..controls (54.7898,572.69) and (54.6499,575.21)..(54.7898,576.5) + ..controls (52.3398,580.1) and (55.8699,582.7)..(59.6199,583.06) + ..controls (62.8599,587.16) and (68.5398,594.94)..(71.2798,601.56) + ..controls (72.2898,603.07) and (74.95,609.34)..(78.1899,609.55) + ..controls (74.95,612.94) and (74.2998,622.51)..(82.6599,617.33) + ..controls (87.1199,624.02) and (92.0898,624.31)..(95.7598,615.82) + ..controls (102.89,615.38) and (102.31,608.69)..(115.78,605.52) + ..controls (122.76,602.86) and (132.77,604.58)..(140.26,603.72) + ..controls (136.22,596.88) and (127.44,566.86)..(132.98,559.8) + ..controls (140.76,564.7) and (141.84,605.38)..(157.03,595.66) + ..controls (160.56,593.93) and (159.91,590.04)..(164.09,590.18) + ..controls (170.42,587.45) and (169.13,600.77)..(172.51,600.77) + ..controls (176.47,599.76) and (183.02,599.04)..(186.98,599.54) + ..controls (197.71,600.77) and (206.93,604.08)..(223.92,602.5) + ..controls (231.12,601.78) and (238.25,601.06)..(245.45,600.34) + --cycle; +endfig; +end diff --git a/doc/context/sources/general/manuals/details/detcow.tex b/doc/context/sources/general/manuals/details/detcow.tex new file mode 100644 index 000000000..c3698e335 --- /dev/null +++ b/doc/context/sources/general/manuals/details/detcow.tex @@ -0,0 +1,15 @@ +% content=tex +% +% copyright=pragma-ade readme=readme.pdf licence=cc-by-nc-sa + +\setupcolors[state=start] + +\starttext + +\startMPpage + loadfigure "detcow.mp" ; + refill currentpicture withcolor transparent(1,.5,.5red) ; + redraw currentpicture withcolor .5red ; +\stopMPpage + +\stoptext diff --git a/doc/context/sources/general/manuals/details/detcowmp.mps b/doc/context/sources/general/manuals/details/detcowmp.mps new file mode 100644 index 000000000..c5cb7df80 --- /dev/null +++ b/doc/context/sources/general/manuals/details/detcowmp.mps @@ -0,0 +1,295 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%BoundingBox: 53 426 326 623 +%%Creator: MetaPost +%%CreationDate: 2002.04.10:1235 +%%Pages: 1 +%%EndProlog +%%Page: 1 1 + 1 setgray +newpath 84.3799 618.55 moveto +88.3398 624.38 92.5898 622.94 96.3398 615.67 curveto +101.23 615.6 102.46 612.43 104.98 610.78 curveto +122.62 598.39 147.46 607.18 167.9 601.92 curveto +180.94 598.54 190.87 599.76 200.09 602.06 curveto +220.32 607.25 246.1 596.16 263.74 603.86 curveto +274.75 608.62 284.76 605.66 292.97 600.91 curveto +297.58 597.96 299.59 596.09 300.96 591.26 curveto +306.29 572.54 306.29 551.02 309.53 530.57 curveto +309.53 528.84 312.19 526.1 312.48 522.07 curveto +315.79 511.34 316.08 510.12 317.16 502.2 curveto +317.16 501.34 326.52 488.45 325.01 479.02 curveto +323.93 481.25 323.86 482.83 321.62 481.68 curveto +320.33 479.3 320.9 473.9 322.56 471.74 curveto +320.83 470.81 318.46 473.47 317.52 475.2 curveto +318.17 473.04 317.81 470.81 316.73 469.3 curveto +315.86 472.25 316.58 473.18 315.36 473.9 curveto +313.99 472.9 314.21 469.3 314.28 466.2 curveto +313.49 468.07 311.47 472.46 312.55 476.42 curveto +312.48 484.2 308.81 489.1 310.32 499.1 curveto +310.1 504.43 307.3 521.06 304.56 524.3 curveto +303.12 526.25 306.36 510.77 306.36 506.16 curveto +306.65 500.9 307.08 468.72 306.43 463.1 curveto +306.43 459.22 306.22 453.96 307.08 452.16 curveto +308.74 450.79 309.38 450.5 309.6 447.98 curveto +309.24 446.62 308.74 446.04 307.73 445.54 curveto +306.07 444.6 307.37 441.79 306.07 439.85 curveto +304.49 438.77 304.13 441.86 303.34 441.86 curveto +302.69 441 303.05 437.98 302.47 436.18 curveto +299.66 433.8 292.18 432.5 289.15 434.66 curveto +289.73 440.64 291.74 441.58 295.63 446.62 curveto +298.66 452.59 297 460.94 296.93 468.14 curveto +295.49 480.38 289.22 487.3 289.44 496.44 curveto +287.86 495.72 286.42 494.57 284.26 494.86 curveto +283.39 489.46 286.42 484.56 284.83 480.82 curveto +281.95 471.96 277.06 446.62 279 437.76 curveto +280.01 434.74 278.21 433.15 277.06 433.94 curveto +276.77 433.94 276.55 433.94 276.41 433.94 curveto +276.41 433.94 276.55 431.42 275.69 430.92 curveto +274.1 430.34 273.67 431.71 272.66 432.14 curveto +271.22 430.85 272.52 429.48 271.15 428.04 curveto +267.19 428.04 261.36 425.38 257.98 428.26 curveto +257.33 434.16 263.3 436.68 266.47 440.71 curveto +268.63 446.62 271.08 462.89 267.77 474.62 curveto +267.77 475.56 264.38 485.28 261.43 488.66 curveto +258.7 487.66 257.33 485.5 253.22 486.29 curveto +252.58 484.34 253.3 482.33 252.22 480.1 curveto +251.86 479.52 249.34 478.58 249.19 481.39 curveto +248.98 483.05 248.9 486.36 248.26 486.72 curveto +243.65 486.72 233.71 487.08 231.77 493.92 curveto +219.89 492.34 215.93 491.26 206.57 493.42 curveto +196.63 489.67 183.24 506.16 174.53 502.2 curveto +172.51 496.15 173.09 485.64 171.65 481.39 curveto +169.34 474.77 171.14 467.14 171.14 456.41 curveto +170.57 455.4 169.85 454.46 168.48 454.46 curveto +168.48 453.1 169.34 450.86 168.62 449.42 curveto +167.18 447.62 165.89 451.8 165.02 444.6 curveto +163.15 443.74 157.75 442.22 155.59 445.18 curveto +155.88 448.99 158.33 451.3 160.13 453.38 curveto +161.42 456.91 160.99 458.28 160.7 461.81 curveto +160.99 464.98 161.71 468.58 161.86 470.09 curveto +161.86 473.04 162.5 479.3 161.14 481.18 curveto +159.41 482.69 lineto +157.18 487.22 158.33 494.64 157.61 500.26 curveto +155.81 500.69 155.81 500.98 154.01 498.31 curveto +154.01 494.42 153.5 486.36 152.35 483.84 curveto +149.69 479.81 150.84 459.65 151.42 448.56 curveto +151.78 446.47 149.69 447.7 149.76 444.74 curveto +150.05 442.8 147.89 443.59 146.09 444.6 curveto +145.15 445.18 146.59 439.78 145.37 439.56 curveto +142.34 438.84 136.87 438.19 135.22 440.71 curveto +134.57 444.6 137.88 448.06 140.62 451.01 curveto +143.14 455.83 140.9 465.7 140.47 476.28 curveto +138.89 478.22 lineto +134.86 483.19 139.61 496.94 136.51 506.23 curveto +120.02 514.87 122.11 519.19 118.73 537.62 curveto +115.13 557.64 93.3799 567.65 79.0598 567.65 curveto +73.4399 563.04 66.24 563.62 58.5398 567.65 curveto +55.6599 569.23 54.4299 573.19 54.5 576.5 curveto +52.6299 580.75 55.22 582.19 59.6199 583.49 curveto +62.71 587.81 68.6199 594.65 69.1899 597.74 curveto +70.3398 601.92 75.5298 608.11 77.7598 609.77 curveto +75.8198 613.01 74.8098 615.17 77.1099 618.55 curveto +79.5598 620.14 81.7898 616.61 84.3799 618.55 curveto + closepath fill + 0 setgray 0 0.63649 dtransform truncate idtransform setlinewidth pop [] 0 setdash 1 setlinejoin 10 setmiterlimit +newpath 84.3799 618.55 moveto +88.3398 624.38 92.5898 622.94 96.3398 615.67 curveto +101.23 615.6 102.46 612.43 104.98 610.78 curveto +122.62 598.39 147.46 607.18 167.9 601.92 curveto +180.94 598.54 190.87 599.76 200.09 602.06 curveto +220.32 607.25 246.1 596.16 263.74 603.86 curveto +274.75 608.62 284.76 605.66 292.97 600.91 curveto +297.58 597.96 299.59 596.09 300.96 591.26 curveto +306.29 572.54 306.29 551.02 309.53 530.57 curveto +309.53 528.84 312.19 526.1 312.48 522.07 curveto +315.79 511.34 316.08 510.12 317.16 502.2 curveto +317.16 501.34 326.52 488.45 325.01 479.02 curveto +323.93 481.25 323.86 482.83 321.62 481.68 curveto +320.33 479.3 320.9 473.9 322.56 471.74 curveto +320.83 470.81 318.46 473.47 317.52 475.2 curveto +318.17 473.04 317.81 470.81 316.73 469.3 curveto +315.86 472.25 316.58 473.18 315.36 473.9 curveto +313.99 472.9 314.21 469.3 314.28 466.2 curveto +313.49 468.07 311.47 472.46 312.55 476.42 curveto +312.48 484.2 308.81 489.1 310.32 499.1 curveto +310.1 504.43 307.3 521.06 304.56 524.3 curveto +303.12 526.25 306.36 510.77 306.36 506.16 curveto +306.65 500.9 307.08 468.72 306.43 463.1 curveto +306.43 459.22 306.22 453.96 307.08 452.16 curveto +308.74 450.79 309.38 450.5 309.6 447.98 curveto +309.24 446.62 308.74 446.04 307.73 445.54 curveto +306.07 444.6 307.37 441.79 306.07 439.85 curveto +304.49 438.77 304.13 441.86 303.34 441.86 curveto +302.69 441 303.05 437.98 302.47 436.18 curveto +299.66 433.8 292.18 432.5 289.15 434.66 curveto +289.73 440.64 291.74 441.58 295.63 446.62 curveto +298.66 452.59 297 460.94 296.93 468.14 curveto +295.49 480.38 289.22 487.3 289.44 496.44 curveto +287.86 495.72 286.42 494.57 284.26 494.86 curveto +283.39 489.46 286.42 484.56 284.83 480.82 curveto +281.95 471.96 277.06 446.62 279 437.76 curveto +280.01 434.74 278.21 433.15 277.06 433.94 curveto +276.77 433.94 276.55 433.94 276.41 433.94 curveto +276.41 433.94 276.55 431.42 275.69 430.92 curveto +274.1 430.34 273.67 431.71 272.66 432.14 curveto +271.22 430.85 272.52 429.48 271.15 428.04 curveto +267.19 428.04 261.36 425.38 257.98 428.26 curveto +257.33 434.16 263.3 436.68 266.47 440.71 curveto +268.63 446.62 271.08 462.89 267.77 474.62 curveto +267.77 475.56 264.38 485.28 261.43 488.66 curveto +258.7 487.66 257.33 485.5 253.22 486.29 curveto +252.58 484.34 253.3 482.33 252.22 480.1 curveto +251.86 479.52 249.34 478.58 249.19 481.39 curveto +248.98 483.05 248.9 486.36 248.26 486.72 curveto +243.65 486.72 233.71 487.08 231.77 493.92 curveto +219.89 492.34 215.93 491.26 206.57 493.42 curveto +196.63 489.67 183.24 506.16 174.53 502.2 curveto +172.51 496.15 173.09 485.64 171.65 481.39 curveto +169.34 474.77 171.14 467.14 171.14 456.41 curveto +170.57 455.4 169.85 454.46 168.48 454.46 curveto +168.48 453.1 169.34 450.86 168.62 449.42 curveto +167.18 447.62 165.89 451.8 165.02 444.6 curveto +163.15 443.74 157.75 442.22 155.59 445.18 curveto +155.88 448.99 158.33 451.3 160.13 453.38 curveto +161.42 456.91 160.99 458.28 160.7 461.81 curveto +160.99 464.98 161.71 468.58 161.86 470.09 curveto +161.86 473.04 162.5 479.3 161.14 481.18 curveto +159.41 482.69 lineto +157.18 487.22 158.33 494.64 157.61 500.26 curveto +155.81 500.69 155.81 500.98 154.01 498.31 curveto +154.01 494.42 153.5 486.36 152.35 483.84 curveto +149.69 479.81 150.84 459.65 151.42 448.56 curveto +151.78 446.47 149.69 447.7 149.76 444.74 curveto +150.05 442.8 147.89 443.59 146.09 444.6 curveto +145.15 445.18 146.59 439.78 145.37 439.56 curveto +142.34 438.84 136.87 438.19 135.22 440.71 curveto +134.57 444.6 137.88 448.06 140.62 451.01 curveto +143.14 455.83 140.9 465.7 140.47 476.28 curveto +138.89 478.22 lineto +134.86 483.19 139.61 496.94 136.51 506.23 curveto +120.02 514.87 122.11 519.19 118.73 537.62 curveto +115.13 557.64 93.3799 567.65 79.0598 567.65 curveto +73.4399 563.04 66.24 563.62 58.5398 567.65 curveto +55.6599 569.23 54.4299 573.19 54.5 576.5 curveto +52.6299 580.75 55.22 582.19 59.6199 583.49 curveto +62.71 587.81 68.6199 594.65 69.1899 597.74 curveto +70.3398 601.92 75.5298 608.11 77.7598 609.77 curveto +75.8198 613.01 74.8098 615.17 77.1099 618.55 curveto +79.5598 620.14 81.7898 616.61 84.3799 618.55 curveto + closepath stroke +newpath 305.28 560.95 moveto +304.63 560.95 299.95 561.24 299.38 561.24 curveto +302.4 550.44 303.98 536.47 304.2 525.31 curveto +303.7 521.35 299.81 517.46 299.38 525.67 curveto +295.85 530.86 296.42 540.07 293.4 540.29 curveto +287.35 539.64 285.34 513.22 280.01 509.33 curveto +276.26 512.28 280.73 524.02 275.54 524.74 curveto +270.5 524.02 264.31 526.68 266.69 534.46 curveto +270.29 543.02 268.34 554.76 266.54 561.6 curveto +262.37 578.59 264.02 587.09 271.58 596.09 curveto +267.48 604.51 lineto +275.4 608.26 285.62 604.58 290.02 602.21 curveto +294.62 600.26 300.24 595.94 301.1 587.38 curveto +303.34 578.88 304.42 569.74 305.28 560.95 curveto + closepath fill +newpath 245.45 600.34 moveto +242.78 599.4 239.62 596.02 237.67 594.07 curveto +236.74 584.42 244.58 583.63 250.2 577.44 curveto +258.77 573.7 251.21 567.72 256.18 557.42 curveto +257.04 550.94 257.9 543.89 255.31 539.78 curveto +249.48 538.92 247.97 540.22 246.89 531.43 curveto +246.31 526.97 231.77 529.06 229.03 538.27 curveto +227.09 544.97 221.33 546.7 217.8 543.17 curveto +213.77 538.06 215.78 531.22 217.8 527.47 curveto +224.93 517.32 212.04 511.42 205.13 516.74 curveto +199.73 508.68 211.39 500.04 207.43 494.5 curveto +205.78 493.99 204.77 489.17 185.47 500.54 curveto +180.36 504.14 167.83 500.76 168.77 520.63 curveto +168.77 525.82 165.6 543.53 162.14 555.91 curveto +159.41 561.24 156.74 559.08 156.89 553.9 curveto +157.18 547.85 162.94 531.22 155.52 540.22 curveto +153.58 539.21 156.89 523.58 156.89 521.64 curveto +162 517.03 157.39 513.58 154.73 512.28 curveto +151.27 518.33 149.62 518.04 147.17 514.44 curveto +141.7 514.08 144.58 528.19 140.26 528.62 curveto +137.02 527.76 139.18 520.06 138.24 518.76 curveto +132.98 524.74 130.9 529.27 127.01 521.64 curveto +126.14 521.64 122.11 519.19 120.96 526.54 curveto +117.65 552.74 107.06 558.36 93.8198 565.13 curveto +92.0198 565.63 84.24 566.71 79.3398 568.15 curveto +73.5098 560.88 58.3198 565.63 56.23 570.31 curveto +54.7898 572.69 54.6499 575.21 54.7898 576.5 curveto +52.3398 580.1 55.8699 582.7 59.6199 583.06 curveto +62.8599 587.16 68.5398 594.94 71.2798 601.56 curveto +72.2898 603.07 74.95 609.34 78.1899 609.55 curveto +74.95 612.94 74.2998 622.51 82.6599 617.33 curveto +87.1199 624.02 92.0898 624.31 95.7598 615.82 curveto +102.89 615.38 102.31 608.69 115.78 605.52 curveto +122.76 602.86 132.77 604.58 140.26 603.72 curveto +136.22 596.88 127.44 566.86 132.98 559.8 curveto +140.76 564.7 141.84 605.38 157.03 595.66 curveto +160.56 593.93 159.91 590.04 164.09 590.18 curveto +170.42 587.45 169.13 600.77 172.51 600.77 curveto +176.47 599.76 183.02 599.04 186.98 599.54 curveto +197.71 600.77 206.93 604.08 223.92 602.5 curveto +231.12 601.78 238.25 601.06 245.45 600.34 curveto + closepath fill +newpath 305.28 560.95 moveto +304.63 560.95 299.95 561.24 299.38 561.24 curveto +302.4 550.44 303.98 536.47 304.2 525.31 curveto +303.7 521.35 299.81 517.46 299.38 525.67 curveto +295.85 530.86 296.42 540.07 293.4 540.29 curveto +287.35 539.64 285.34 513.22 280.01 509.33 curveto +276.26 512.28 280.73 524.02 275.54 524.74 curveto +270.5 524.02 264.31 526.68 266.69 534.46 curveto +270.29 543.02 268.34 554.76 266.54 561.6 curveto +262.37 578.59 264.02 587.09 271.58 596.09 curveto +267.48 604.51 lineto +275.4 608.26 285.62 604.58 290.02 602.21 curveto +294.62 600.26 300.24 595.94 301.1 587.38 curveto +303.34 578.88 304.42 569.74 305.28 560.95 curveto + closepath stroke +newpath 245.45 600.34 moveto +242.78 599.4 239.62 596.02 237.67 594.07 curveto +236.74 584.42 244.58 583.63 250.2 577.44 curveto +258.77 573.7 251.21 567.72 256.18 557.42 curveto +257.04 550.94 257.9 543.89 255.31 539.78 curveto +249.48 538.92 247.97 540.22 246.89 531.43 curveto +246.31 526.97 231.77 529.06 229.03 538.27 curveto +227.09 544.97 221.33 546.7 217.8 543.17 curveto +213.77 538.06 215.78 531.22 217.8 527.47 curveto +224.93 517.32 212.04 511.42 205.13 516.74 curveto +199.73 508.68 211.39 500.04 207.43 494.5 curveto +205.78 493.99 204.77 489.17 185.47 500.54 curveto +180.36 504.14 167.83 500.76 168.77 520.63 curveto +168.77 525.82 165.6 543.53 162.14 555.91 curveto +159.41 561.24 156.74 559.08 156.89 553.9 curveto +157.18 547.85 162.94 531.22 155.52 540.22 curveto +153.58 539.21 156.89 523.58 156.89 521.64 curveto +162 517.03 157.39 513.58 154.73 512.28 curveto +151.27 518.33 149.62 518.04 147.17 514.44 curveto +141.7 514.08 144.58 528.19 140.26 528.62 curveto +137.02 527.76 139.18 520.06 138.24 518.76 curveto +132.98 524.74 130.9 529.27 127.01 521.64 curveto +126.14 521.64 122.11 519.19 120.96 526.54 curveto +117.65 552.74 107.06 558.36 93.8198 565.13 curveto +92.0198 565.63 84.24 566.71 79.3398 568.15 curveto +73.5098 560.88 58.3198 565.63 56.23 570.31 curveto +54.7898 572.69 54.6499 575.21 54.7898 576.5 curveto +52.3398 580.1 55.8699 582.7 59.6199 583.06 curveto +62.8599 587.16 68.5398 594.94 71.2798 601.56 curveto +72.2898 603.07 74.95 609.34 78.1899 609.55 curveto +74.95 612.94 74.2998 622.51 82.6599 617.33 curveto +87.1199 624.02 92.0898 624.31 95.7598 615.82 curveto +102.89 615.38 102.31 608.69 115.78 605.52 curveto +122.76 602.86 132.77 604.58 140.26 603.72 curveto +136.22 596.88 127.44 566.86 132.98 559.8 curveto +140.76 564.7 141.84 605.38 157.03 595.66 curveto +160.56 593.93 159.91 590.04 164.09 590.18 curveto +170.42 587.45 169.13 600.77 172.51 600.77 curveto +176.47 599.76 183.02 599.04 186.98 599.54 curveto +197.71 600.77 206.93 604.08 223.92 602.5 curveto +231.12 601.78 238.25 601.06 245.45 600.34 curveto + closepath stroke +showpage +%%EOF diff --git a/doc/context/sources/general/manuals/details/hacker.jpg b/doc/context/sources/general/manuals/details/hacker.jpg Binary files differnew file mode 100644 index 000000000..cbc53a7de --- /dev/null +++ b/doc/context/sources/general/manuals/details/hacker.jpg diff --git a/doc/context/sources/general/manuals/details/mill.png b/doc/context/sources/general/manuals/details/mill.png Binary files differnew file mode 100644 index 000000000..9a1bf14e8 --- /dev/null +++ b/doc/context/sources/general/manuals/details/mill.png |