ConTeXt/Utiliser Metapost (MPgraphic)
ConTeXt — Partie V : Graphismes et outils avancés
Images et figures • Utiliser MetaPost (MPgraphic) • Page suivante : dessiner avec MPgraphic
Utiliser MetaPost (MPgraphic)
MetaPost est un langage de dessin vectoriel étroitement intégré à ConTeXt. Il permet
de produire des schémas, diagrammes, encadrés graphiques et ornements avec une
qualité typographique élevée, en partageant les mêmes fontes et la même logique
de mise en page que le reste du document.
Cette page présente les bases de l’utilisation de MetaPost à l’intérieur de ConTeXt
(\startMPcode, \startuseMPgraphic, buffers) et propose un
exemple complet d’encadrés colorés “à retenir” pour des cours ou des manuels.
Objectifs de cette page
- Comprendre l’intérêt de MetaPost dans un document ConTeXt (dessin vectoriel intégré).
- Savoir utiliser
\startMPcodepour écrire du code MetaPost simple. - Définir et utiliser des
MPgraphicnommés et réutilisables. - Employer des buffers MetaPost pour organiser son code graphique.
- Créer des encadrés colorés “à retenir” avec MetaPost et les appliquer à du texte ConTeXt.
- Illustrer le résultat au moyen d’images exportées (PNG) pour la documentation.
1. Pourquoi utiliser MetaPost dans ConTeXt ?
[modifier | modifier le wikicode]MetaPost permet de dessiner directement dans le document, sans passer par un logiciel graphique externe. Ses principaux avantages sont :
- dessin vectoriel (qualité d’impression optimale) ;
- utilisation des mêmes fontes que le texte ConTeXt ;
- positionnement précis des éléments graphiques (schémas, cadres, ornements) ;
- possibilité de factoriser des dessins réutilisables (styles de cadres, flèches, diagrammes) ;
- intégration complète dans le flux de compilation.
Contrairement à une image bitmap, un dessin MetaPost reste net à n’importe quelle résolution. Il est particulièrement adapté aux figures techniques, aux encadrés pédagogiques, aux organigrammes ou aux schémas conceptuels.
2. Première approche : \startMPcode
[modifier | modifier le wikicode]La façon la plus directe d’utiliser MetaPost dans ConTeXt est d’écrire du code
MetaPost entre \startMPcode et \stopMPcode.
Exemple minimal :
\starttext \startMPcode draw fullcircle scaled 3cm withcolor red; \stopMPcode \stoptext
Ce code produit un disque rouge de 3 cm de diamètre, centré dans la zone graphique.
Cette approche est idéale pour tester rapidement une idée ou dessiner une figure isolée au milieu d’un texte.
3. Graphiques nommés : \startuseMPgraphic et \useMPgraphic
[modifier | modifier le wikicode]Pour des figures réutilisables, ConTeXt propose les “MPgraphics” nommés :
\startuseMPgraphic{MonCercle}
draw fullcircle scaled 2cm withcolor blue;
\stopuseMPgraphic
\starttext
Texte avant le cercle.
\useMPgraphic{MonCercle}
Texte après le cercle.
\stoptext
Le dessin est défini une fois pour toutes et peut être inséré dans le document
chaque fois que nécessaire via \useMPgraphic{MonCercle}.
On peut regrouper toutes les définitions dans un fichier séparé (par exemple
mp-figures.tex) et l’inclure avec \input mp-figures.tex.
4. Buffers MetaPost
[modifier | modifier le wikicode]Il est possible d’écrire du code MetaPost dans un buffer, puis de le réutiliser dans plusieurs contextes :
\startbuffer[triangle]
draw (0,0)--(2cm,1cm)--(4cm,0)--cycle
withpen pencircle scaled 1pt
withcolor .5red;
\stopbuffer
\starttext
\startMPcode
\getbuffer[triangle]
\stopMPcode
\stoptext
Les buffers permettent de séparer clairement le code graphique, tout en le gardant étroitement lié au document ConTeXt. On peut ainsi composer une “bibliothèque” de motifs graphiques réutilisables.
5. Encadrés pédagogiques avec MetaPost et framedtext
[modifier | modifier le wikicode]Un usage particulièrement intéressant de MetaPost dans ConTeXt consiste à créer des encadrés typographiques (par exemple “À retenir”, “Remarque”, “Attention”), dans lesquels MetaPost dessine le fond, les filets et la bande de titre, tandis que ConTeXt gère le texte.
5.1. Principe général (sans code)
[modifier | modifier le wikicode]Le principe de ces encadrés est le suivant :
- on définit un bloc de texte encadré (un
framedtext) ; - l’arrière-plan de ce bloc est un dessin MetaPost, exécuté dans une “boîte”
appelée OverlayBox ;
- MetaPost remplit cette boîte avec une couleur de fond, dessine une bande
supérieure (bandeau de titre) et des filets haut/bas ;
- le titre du cadre est généré depuis le texte donné par l’utilisateur et placé
précisément dans la bande de couleur ;
- ConTeXt applique ce dessin comme “overlay” derrière le texte, ce qui permet
d’obtenir des encadrés nets, cohérents avec la typographie du document, et adaptatifs à la longueur du texte.
Cette méthode autorise une grande variété de styles — bandeaux colorés, fonds différents, marges variables — tout en conservant la stabilité de la mise en page.
5.2. MWE complet : deux encadrés de couleurs différentes
[modifier | modifier le wikicode]Le MWE suivant définit deux cadres :
- un encadré “À RETENIR” (bandeau rouge, fond crème) ;
- un encadré “REMARQUE” (bandeau vert, fond bleu très pâle).
\setuppapersize[A4]
\setuplanguage[fr][patterns={fr,agr}]
\mainlanguage[fr]
\setcharacterspacing[frenchpunctuation]
\definefontfamily[mainface][serif][TeX Gyre Pagella]
\setupbodyfont[mainface,11pt]
\setupcolors[state=start]
\setupindenting[yes,1.5em]
\setupwhitespace[medium]
\setupinterlinespace[line=2.8ex]
\setuphead[title][header=empty]
\setupheader[style={\sc}]
\setupfooter[style={\itxx}]
\setupheadertexts[Cours de Philosophie][][][{\getmarking[section]}]
\setupfootertexts[][][][© Jean-Pierre Delange — Reproduction soumise à autorisation.]
% --- Cadre 1 : bandeau rouge / fond crème --------------------------
\defineframedtext
[RedBox]
[before={\blank[2*big]},
after={\blank[2*big]},
frame=off,
background=RedFrame,
width=max,
height=fit,
style={\setupbodyfont[11pt]}]
\startuseMPgraphic{RedFrame}
path b;
picture p;
p := textext.rt("\white\bf\framedtextparameter{Title}");
p := p shifted (2BodyFontSize,
OverlayHeight - ypart center p + .25ExHeight);
b := boundingbox p
leftenlarged .5EmWidth
rightenlarged .5EmWidth;
% Fond général : jaune/crème doux
fill OverlayBox withcolor (1,0.97,0.85);
% Bandeau rouge soutenu
fill b withcolor (0.60,0.10,0.10);
draw bottomboundary OverlayBox
withpen pencircle scaled 1pt
withcolor (0.60,0.10,0.10);
draw topboundary OverlayBox
withpen pencircle scaled 1pt
withcolor (0.60,0.10,0.10);
draw p;
setbounds currentpicture
to boundingbox currentpicture enlarged 2mm;
\stopuseMPgraphic
\defineoverlay
[RedFrame]
[\useMPgraphic{RedFrame}]
% --- Cadre 2 : bandeau vert / fond bleu très pâle ------------------
\defineframedtext
[GreenBox]
[before={\blank[2*big]},
after={\blank[2*big]},
frame=off,
background=GreenFrame,
width=max,
height=fit,
style={\setupbodyfont[11pt]}]
\startuseMPgraphic{GreenFrame}
path b;
picture p;
p := textext.rt("\white\bf\framedtextparameter{Title}");
p := p shifted (2BodyFontSize,
OverlayHeight - ypart center p + .25ExHeight);
b := boundingbox p
leftenlarged .5EmWidth
rightenlarged .5EmWidth;
% Fond général bleu très pâle
fill OverlayBox withcolor (0.94,0.97,0.99);
% Bandeau vert
fill b withcolor (0.0,0.40,0.25);
draw bottomboundary OverlayBox
withpen pencircle scaled 1pt
withcolor (0.0,0.40,0.25);
draw topboundary OverlayBox
withpen pencircle scaled 1pt
withcolor (0.0,0.40,0.25);
draw p;
setbounds currentpicture
to boundingbox currentpicture enlarged 2mm;
\stopuseMPgraphic
\defineoverlay
[GreenFrame]
[\useMPgraphic{GreenFrame}]
\starttext
\title{Un cours universitaire}
\blank
\section{\sc Préambule}
\startRedBox[Title={À RETENIR}]
Ce document illustre l’utilisation conjointe de MetaPost et de ConTeXt
pour créer des encadrés graphiques élégants et réutilisables.
\stopRedBox
Du texte courant peut suivre ici, entièrement indépendant du cadre.
\startGreenBox[Title={REMARQUE}]
On peut définir plusieurs versions de ce cadre (couleurs, typographies,
épaisseur des filets) simplement en dupliquant la définition MetaPost
et en ajustant les valeurs de couleur et de style.
\stopGreenBox
\stoptext
5.3. Comment ce cadre fonctionne (description conceptuelle)
[modifier | modifier le wikicode]Dans ConTeXt, la réalisation d’un cadre coloré à l’aide de MetaPost repose sur une articulation étroite entre la logique typographique du système et la capacité graphique du moteur MetaPost. Le principe général est le suivant : l’utilisateur définit d’abord une zone de texte — un framedtext — dont l’arrière-plan est fourni par un dessin MetaPost. Ce dernier est exécuté dans une boîte abstraite, l’OverlayBox, qui représente exactement la surface occupée par le cadre dans la composition finale.
MetaPost remplit cette surface d’une couleur unie, trace des bordures ou superpose une bande supérieure destinée à recevoir un titre. Le titre lui-même est traité comme une petite image typographique, générée depuis le texte fourni par l’utilisateur : MetaPost peut ainsi le placer avec précision, en cohérence avec la grille du document. Les filets qui délimitent le cadre ne sont que les frontières supérieures et inférieures de l’OverlayBox, tracées avec l’épaisseur et la couleur souhaitées. Une fois le dessin calculé, ConTeXt l’applique en tant qu’« overlay », c’est-à-dire comme fond vectoriel du bloc de texte. Cette méthode permet de produire des encadrés entièrement intégrés à la composition : cohérents avec la police du document, adaptatifs à la longueur du texte et parfaitement nets à l’impression.
6. Illustration du résultat (galerie)
[modifier | modifier le wikicode]Les images ci-dessous illustrent le résultat obtenu à partir du MWE ci-dessus : d’abord les cadres seuls, puis la page complète ConTeXt avec ces encadrés.
-
Cadres couleur générés par du code MetaPost (bandeaux rouge et vert).
-
Page ConTeXt complète avec encadrés MetaPost intégrés dans un cours.
Astuce
Pour un projet de livre complet, il est conseillé de regrouper toutes les définitions
MetaPost (\startuseMPgraphic ...) dans un fichier séparé, par exemple
mp-styles.tex, et de le charger avec \input mp-styles.tex.
Cela permet de réutiliser les mêmes encadrés, ornements et diagrammes dans plusieurs
documents, tout en centralisant les réglages de couleurs et de style.
Avertissement
Les dessins MetaPost sont recalculés lorsque le code change. En cas de modification
importante du document (ou si certains graphiques semblent ne pas se mettre à jour),
il peut être nécessaire de lancer une recompilation complète et, si besoin, de
supprimer les fichiers intermédiaires générés par MetaPost. Cela évite des incohérences
entre le code et les images produites.
ConTeXt — Partie V : Graphismes et outils avancés
Images et figures • Utiliser MetaPost (MPgraphic) • Graphiques avancés avec MetaFun
Navigation