Pour positionner un objet de façon absolu sur une page, c'est à dire à des coordonnées bien précises et indépendamment du texte il faut, sous ConTeXt utiliser un système de calques (layer en anglais).
Pour ne pas à avoir des images trop grandes à insérer dans cette fiche j'ai créé une petite feuille de 18cm de large et 10cm de haut.
\showframe permet de visualiser les marges du document et le bord de la feuille, en vert, \input tufte affiche un faux texte pour faire du remplissage.
Maintenant si j'insère par exemple un rectangle de couleur il se positionne à la suite du texte :
Ici j'ai mis les valeurs par défaut mais tu mets ce que tu veux comme dimensions. Si tu changes l'origine de ton calque, tu dois employer hoffset et voffset dans \setlayer qui permettent de décaler, si nécessaire ton objet par rapport à la nouvelle origine.
Une autre option pour modifier l'origine du calque est corner à l'aide des combinaisons de top, bottom, left, right. Pour utiliser cette option il faut définir la taille du calque.
Par exemple pour notre rectangle rouge on peut définir l'origine du calque en bas à droite par :
Tu peux utiliser à la place de \setlayer, \setlayerframed qui dessine un cadre autour de l'objet. Un exemple avec du texte :
\definepapersize[fiche][width=18cm,height=10cm] \setuppapersize[fiche] \definelayer[texte] [x=0mm y=0mm, width=\paperwidth, height=\paperheight,corner={left,bottom},location={top,right}] \setupbackgrounds[page][background=texte] \starttext \setlayerframed[texte][hoffset=2cm,voffset=5cm] {\red\tfd C'est qui le plus fort? c'est Bébert !} \input tufte \stoptext
Tu dois placer le \setlayerframed après le \starttext sinon tu n'as pas de formatage du texte. Je te laisse revoir la fiche suivante pour voir les options de framed, au paragraphe 5. Tu peux enlever le cadre avec l'option frame=off.
L'un des avantages de \setlayerframed est qu'il accepte les sauts de paragraphe et que tu peux contenir le texte dans une boite dimensionnée.
\definepapersize[fiche][width=18cm,height=10cm] \setuppapersize[fiche] \definelayer[texte] [x=0mm, y=0mm, width=\paperwidth, height=\paperheight,corner={left,bottom},location={top,right}] \setupbackgrounds[page][background=texte] \starttext \setlayerframed[texte][hoffset=2cm,voffset=5cm,rotation=42,width=5.5cm,align=right,frame=off] {\red\tfd C'est qui le plus fort ? \crlfc'est Bébert !} \input tufte \stoptext
N'oublie pas l'option align (qui peut prendre diverse valeurs, left, right, middle, hilo) sinon tu n'obtiens pas le résultat escompté.
Tu peux contrôler la position du texte ou de l'objet par rapport au point défini dans \setlayer ou \setlayerframed avec l'option location={} qui prend les valeurs top, bottom, left, right. Par défaut l'objet ou le texte est placé en dessous à droite. Dans l'exemple ci-dessous j'ai marqué la position en rouge, le cadre bleu est la position par défaut et le vert est placé au-dessus à gauche.
Si tu mets l'option location={} dans \definelayer tous les objets du calque auront le même positionnement.
\setupbackgrounds peut te permettre de placer des objet dans des zones spécifiques de la page. Le premier paramètre définit la zone de mise en page principale; la seconde facultative spécifie la ou les sous-zones liées. Toutes les zones principales ne disposent pas de telles sous-zones.
Les zone principale sont : top header text footer bottom page paper leftpage rightpage
Les sous-zones : leftedge leftmargin text rightmargin rightedge
\setuppapersize[A10] \showframe \setupbackgrounds[footer] [background=color, backgroundcolor=blue] \setupbackgrounds[footer] [leftmargin] [background=color, backgroundcolor=red] \setupbackgrounds[text] [background=color, backgroundcolor=lightgray] \setupbackgrounds[text] [rightmargin] [background=color, backgroundcolor=yellow] \starttext
La zone de texte de \\mon \\document. \stoptext
Avec l'option state de \setupbackgrounds tu peux controler l'affichage des calques dans ton document :
state=start le calque n'apparait que sur cette page ;
state=stop le calque n'apparait pas sur cette page ;
state=repeat le calque est imprimé sur toutes les pages ;
state=next le calque n'est imprimé que sur la page suivante ;
state=continue le calque est imprimé sur toutes les pages qui suivent.
Il faut bien entendu placer le \setupbackgrounds au bon endroit dans le texte et pas forcement dans l'entête.
Reste à faire un chapitre sur le groupement d'objet et un autre sur les objets dynamique tel le numéro de page.