summaryrefslogtreecommitdiff
path: root/doc/context/sources/general/manuals/details
diff options
context:
space:
mode:
authorHans Hagen <pragma@wxs.nl>2017-07-05 23:20:26 +0200
committerContext Git Mirror Bot <phg42.2a@gmail.com>2017-07-05 23:20:26 +0200
commit6ae40572e7643edcc29f8d5b071221dd1e04bdf3 (patch)
tree93f223e827ee527f6b06b94c066495e60f0412d3 /doc/context/sources/general/manuals/details
parent87d82131e6359a9bb3fb4e85e2f26f6864de8ac9 (diff)
downloadcontext-6ae40572e7643edcc29f8d5b071221dd1e04bdf3.tar.gz
2017-07-05 23:06:00
Diffstat (limited to 'doc/context/sources/general/manuals/details')
-rw-r--r--doc/context/sources/general/manuals/details/back-0.tex39
-rw-r--r--doc/context/sources/general/manuals/details/back-1.tex58
-rw-r--r--doc/context/sources/general/manuals/details/back-2.tex99
-rw-r--r--doc/context/sources/general/manuals/details/back-4.tex39
-rw-r--r--doc/context/sources/general/manuals/details/back-5.tex64
-rw-r--r--doc/context/sources/general/manuals/details/cow.pdfbin0 -> 4301 bytes
-rw-r--r--doc/context/sources/general/manuals/details/details-backpage.tex34
-rw-r--r--doc/context/sources/general/manuals/details/details-captiontrickery.tex290
-rw-r--r--doc/context/sources/general/manuals/details/details-colofon.tex36
-rw-r--r--doc/context/sources/general/manuals/details/details-contents.tex13
-rw-r--r--doc/context/sources/general/manuals/details/details-environment.tex317
-rw-r--r--doc/context/sources/general/manuals/details/details-finetuningfloats.tex657
-rw-r--r--doc/context/sources/general/manuals/details/details-floatingaround.tex1137
-rw-r--r--doc/context/sources/general/manuals/details/details-frontpage.tex43
-rw-r--r--doc/context/sources/general/manuals/details/details-gridtrickery.tex161
-rw-r--r--doc/context/sources/general/manuals/details/details-index.tex13
-rw-r--r--doc/context/sources/general/manuals/details/details-introduction.tex42
-rw-r--r--doc/context/sources/general/manuals/details/details-ornaments.tex585
-rw-r--r--doc/context/sources/general/manuals/details/details-pseudocolumns.tex155
-rw-r--r--doc/context/sources/general/manuals/details/details-snappingheads.tex276
-rw-r--r--doc/context/sources/general/manuals/details/details-textbackgrounds.tex687
-rw-r--r--doc/context/sources/general/manuals/details/details-tuningformulas.tex212
-rw-r--r--doc/context/sources/general/manuals/details/details.tex50
-rw-r--r--doc/context/sources/general/manuals/details/detcow.mp297
-rw-r--r--doc/context/sources/general/manuals/details/detcow.tex15
-rw-r--r--doc/context/sources/general/manuals/details/detcowmp.mps295
-rw-r--r--doc/context/sources/general/manuals/details/hacker.jpgbin0 -> 36148 bytes
-rw-r--r--doc/context/sources/general/manuals/details/mill.pngbin0 -> 154869 bytes
28 files changed, 5614 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
new file mode 100644
index 000000000..9cc8fb0b4
--- /dev/null
+++ b/doc/context/sources/general/manuals/details/cow.pdf
Binary files differ
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..11fe0601c
--- /dev/null
+++ b/doc/context/sources/general/manuals/details/details-floatingaround.tex
@@ -0,0 +1,1137 @@
+% 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 everything 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=]
+
+\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
new file mode 100644
index 000000000..cbc53a7de
--- /dev/null
+++ b/doc/context/sources/general/manuals/details/hacker.jpg
Binary files differ
diff --git a/doc/context/sources/general/manuals/details/mill.png b/doc/context/sources/general/manuals/details/mill.png
new file mode 100644
index 000000000..9a1bf14e8
--- /dev/null
+++ b/doc/context/sources/general/manuals/details/mill.png
Binary files differ