Aller au contenu

ConTeXt/Utiliser Metapost (MPgraphic)

Un livre de Wikilivres.

ConTeXt — Partie V : Graphismes et outils avancés
Images et figuresUtiliser 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 \startMPcode pour écrire du code MetaPost simple.
  • Définir et utiliser des MPgraphic nommé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.


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 figuresUtiliser MetaPost (MPgraphic)Graphiques avancés avec MetaFun

Navigation