Haut
de
page
Table
des
matières
Article
précédant
Article
suivant

Positionner un objet de façon absolu sur une page

Fleuron

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

Voici le code qui affiche la page suivante :

\definepapersize[fiche][width=18cm,height=10cm]
\setuppapersize[fiche]
\starttext
\showframe
\input tufte
\stoptext


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 :

\definepapersize[fiche][width=18cm,height=10cm]
\setuppapersize[fiche]
\starttext
\showframe
\input tufte
\blackrule[height=3cm,width=6cm,color=red]
\stoptext


Pour le positionner à un endroit précis de la page il faut créer un calque.

\definelayer[nomducalque] [x=0mm, y=0mm, width=\paperwidth, height=\paperheight]

x et y indique la position de la calque par rapport au coin supérieur gauche de la feuille (en haut à gauche). Ici avec x et y = 0 le coin de la page et du calque sont superposés.width indique la largeur du calque et height sa hauteur, \paperwidth \paperheight et sont des mesures qui correspondent aux dimension de la page (ici 18 et 10cm d'après la définition de la page). Notre calque et notre page sont donc identiques et superposées.

Pour positionner un objet sur notre calque il faut utiliser :

\setlayer[nomducalque][hoffset=1cm,voffset=1cm]{objet à placer}

hoffset et voffset indique la position de l'objet par rapport au coin en haut à gauche de la calque.

Pour afficher le résultat il faut considérer le calque comme le fond de la page :

\setupbackgrounds[page][background=nomducalque]

Si on applique ces commandes à notre page et notre rectangle rouge :

\definepapersize[fiche][width=18cm,height=10cm]
\setuppapersize[fiche]
\definelayer[rectangle][x=0mm,y=0mm,width=\paperwidth, height=\paperheight]
\setlayer[rectangle][hoffset=1cm,voffset=1cm] {\blackrule[height=2cm,width=6cm,color=red]}
\setupbackgrounds[page][background=rectangle]
\starttext
\showframe
\input tufte
\stoptext


Si l'on modifie la position de l'objet en modifiant hoffset et voffset

\definepapersize[fiche][width=18cm,height=10cm]
\setuppapersize[fiche]
\definelayer[rectangle][x=0mm, y=0mm, width=\paperwidth, height=\paperheight]
\setlayer[rectangle][hoffset=3cm, voffset=3cm] {\blackrule[height=2cm,width=6cm,color=red]}
\setupbackgrounds[page][background=rectangle]
\starttext
\showframe
\input tufte
\stoptext


Si tu veux que ton calque se retrouve sur toute les pages tu ajoutes repeat=yes à la définition du calque.

\definelayer[rectangle][x=0mm,y=0mm,width=\paperwidth, height=\paperheight,repeat=yes]

Tu peux créer autant de calques que nécessaires.

\definepapersize[fiche][width=18cm,height=10cm]
\setuppapersize[fiche]
\definelayer[rouge][x=0mm,y=0mm,width=\paperwidth,height=\paperheight]
\setlayer[rouge][hoffset=3cm,voffset=1cm] {\blackrule[height=2cm,width=6cm,color=red]}
\definelayer[vert][x=0mm,y=0mm,width=\paperwidth,height=\paperheight]
\setlayer[vert][hoffset=2cm,voffset=2cm] {\blackrule[height=2cm,width=6cm,color=green]}
\setupbackgrounds[page][background={rouge,vert}]
\starttext
\showframe
\input tufte
\stoptext


L'ordre de placement des calques dans background est important :

\setupbackgrounds[page][background={vert,rouge}]


En fait background possède deux autres niveaux implicites :

Regarde ce qui ce passe si je positionne foreground entre mes deux calques :

\setupbackgrounds[page][background={vert,foreground,rouge}]


Pour définir la couleur du fond :

\setupbackgrounds[page][backgroundcolor=yellow,background={color,vert,rouge}]


On vient de voir les principes de base, mais il est possible d'affiner encore plus le placement des objets.

On a déja vu x, y, hoffset et vffset. On peu définie avec l'option corner l'origne du claque, par défaut c'est en haut à gauche mais tu peux choisir en bas à droite du calque ou tout autre combinaison de top, bottom, left, right.

Par exemple pour notre rectangle rouge on peut définir l'origine du calque en bas à droite par :

\definelayer[rouge][x=0mm,y=0mm,width=\paperwidth, height=\paperheight,corner={right,bottom}]

De plus une fois défini l'origine du calque tu peux indiquer où tu veux placer l'objet par rapport à cette origine, ça peut être en haut, en bas à droite, . . . ou toutes combinaisons de top, bottom, left, right que tu passes à l'option location.

\definelayer[rouge] [x=0mm, y=0mm, width=\paperwidth, height=\paperheight,corner={right,bottom},location={top,left}]

Tu peux également 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

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


Avec l'option state de \setupbackgrounds tu peux controler l'affichage des calques dans ton document :

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.

Fleuron

Table des Matières concise

Fleuron

Table des Matières complète

Fleuron

Si tu veux aller directement à l'article suivant ou précédant regarde bien dans les marges j'ai mis des liens pour cela. Il est pas balèze le Bébert ?