ConTeXt/Macros
|
Part. II, ch. 6 • Macros • Sommaire |
Macros en ConTeXt : principes, usages et exemples
[modifier | modifier le wikicode]Cette page présente les macros dans un langage accessible pour quelqu’un qui manipule déjà du texte avec un ordinateur, mais pas forcément à l’aise avec la « programmation ».
- Comprendre ce qu’est une macro dans le langage ConTeXt (et dans TeX en général).
- Découvrir pourquoi et quand utiliser une macro dans un document numérique complexe.
- Apprendre à définir des macros simples avec un ou plusieurs arguments (#1, #2…).
- Identifier les familles de macros les plus fréquentes dans ConTeXt.
- Étudier des exemples utiles (dont la macro
\Hexpour la poésie bilingue numérotée). - Savoir où et comment ranger ses macros dans un projet (document principal, environnement, etc.).
1. Qu’est-ce qu’une macro (en général) ?
[modifier | modifier le wikicode]Dans le monde de la programmation, une macro est une sorte de « raccourci nommé » qui représente une séquence d’instructions.
On peut la voir comme :
- un nom que l’on choisit,
- associé à un corps (du texte, du code, une mise en page),
- que le système va remplacer automatiquement à chaque fois que l’on utilise ce nom.
En pseudocode, on pourrait écrire :
macro TITRE() = "Introduction générale"
Chaque fois qu’on utilise TITRE(), le système remplace par le texte « Introduction générale ».
Les macros peuvent aussi accepter des arguments :
macro ENCADRER(texte) =
[ début de l’encadré ]
texte
[ fin de l’encadré ]
Utilisation :
ENCADRER("Attention : ceci est important.")
→ produit un encadré contenant le texte « Attention : ceci est important. ».
En résumé :
- une macro économise des répétitions ;
- elle centralise la mise en forme (si on la change à un seul endroit, tout est mis à jour) ;
- elle permet de décrire une structure (un vers, un encadré, un exemple) une fois pour toutes.
2. Pourquoi des macros dans ConTeXt ?
[modifier | modifier le wikicode]ConTeXt est basé sur TeX. Une très grande partie du langage est déjà composée de macros' (ce sont les 'commandes') :
\section,\subject,\startitemize, etc., sont déjà des macros ;- ConTeXt ajoute ses propres familles de macros :
\setup...,\define...,\start...\stop..., etc.
Pour l’utilisateur, définir ses propres macros est utile quand :
- on répète plusieurs fois la même structure (par exemple : vers + traduction, paragraphe de résumé, encadré pédagogique) ;
- on veut séparer le style du contenu (le style est dans la macro, le contenu est dans le corps du document) ;
- on veut éviter les erreurs de copier-coller (oublier une accolade, un paramètre, une commande).
Exemple typique :
- sans macro : il faut écrire et aligner à la main chaque vers, chaque numéro, chaque traduction ;
- avec une macro comme
\Hex{latin}{français}, on ne saisit que le texte, la numérotation et l’alignement sont automatiques.
C’est particulièrement précieux pour :
- la poésie (numérotation des vers) ;
- les textes bilingues (original + traduction) ;
- les encadrés récurrents (« À retenir », « Note », « Exemple ») ;
- les structures pédagogiques répétitives (objectif, exemple, remarque, etc.).
3. Les macros « de base » en ConTeXt/TeX
[modifier | modifier le wikicode]ConTeXt repose sur la syntaxe de macros de TeX. Voici quelques formes de base.
3.1. Macro sans argument
[modifier | modifier le wikicode]\def\Bonjour{Hello World!}
\Bonjour
\Bonjour
\def\Bonjour{...}: on définit une macro nommée\Bonjour.- Chaque fois qu’on écrit
\Bonjour, ConTeXt insère le texte « Bonjour, monde ! ».
3.2. Macro avec un argument
[modifier | modifier le wikicode]\def\BonjourNom#1{Bonjour, #1 !}
\BonjourNom{Alice}
\BonjourNom{Virgile}
#1représente le **premier argument**.\BonjourNom{Alice}donne « Bonjour, Alice ! ».
On peut avoir plusieurs arguments :
\def\Intervalle#1#2{[#1\,;\,#2]}
Soit l’intervalle \Intervalle{0}{1}.
Ici :
#1→ « 0 »#2→ « 1 »- la macro produit
[0 ; 1].
3.3. Variante ConTeXt : \define
[modifier | modifier le wikicode]ConTeXt propose aussi \define :
\define[1]\Important{%
\bf #1%
}
Ceci est \Important{très important}.
\define[1]\Important{...}: macro avec un argument.\Important{très important}→ texte mis en gras.
4. Les grandes familles de macros dans ConTeXt
[modifier | modifier le wikicode]On peut classer les macros (ou commandes) que l’on rencontre souvent dans ConTeXt en quelques grandes familles.
| Famille | Exemple(s) | Rôle principal |
|---|---|---|
| Macros utilisateur simples | \def\Bonjour{...}\define[1]\Important{...}
|
Centraliser un texte ou une mise en forme récurrente (message, style local). |
| Macros à arguments | \def\Encadre#1{... #1 ...}\def\Vers#1#2{...}
|
Modéliser une structure avec des paramètres (un vers, un titre, une note, etc.). |
| Macros de configuration | \setuppapersize\setupbodyfont\setupheader
|
Configurer la mise en page, la police, les en-têtes, les listes, etc. |
| Macros de définition ConTeXt | \definehead\definestartstop\defineframedtext
|
Créer de nouveaux environnements structurés (titres personnalisés, blocs encadrés, etc.). |
| Environnements start/stop | \startitemize...\stopitemize\startframedtext...\stopframedtext\starttabulate...\stoptabulate
|
Regrouper du contenu dans une structure typographique (liste, encadré, tableau). |
| Macros de gestion de données | \definebuffer\getbuffer\startbuffer...\stopbuffer
|
Stocker du contenu (texte, code) pour le réutiliser plus tard ou pour le traiter (par exemple, XML). |
Pour l’utilisateur, l’important est de comprendre que l’on peut définir ses propres macros qui s’interfaçent avec ces familles, au lieu de tout faire « à la main ».
5. Exemple complet : vers poétiques bilingues numérotés
[modifier | modifier le wikicode]Voici un exemple concret de macro utile en pratique : numéroter des vers latins, et afficher une traduction française en parallèle.
L’exemple ci-dessous montre un petit extrait de l’Énéide (I, 1–7), présenté dans un tableau à trois colonnes :
- numéro du vers (1, 2, 3, …) ;
- vers latin (en italique) ;
- traduction française.
5.1. Définition des macros
[modifier | modifier le wikicode]\setuppapersize[A5]
\setupbodyfont[modern,11pt]
% --- Compteur simple pour les vers ---
\newcount\VerseNo
\VerseNo=0
% --- Format d’affichage du numéro de vers (personnalisable) ---
\define[1]\VerseNumber{#1}
% --- Macro pour une paire de vers (latin + traduction) ---
\def\Hex#1#2{%
\global\advance\VerseNo by 1
\NC \VerseNumber{\the\VerseNo}%
\NC {\it #1}%
\NC {#2}%
\NR
}
% --- Petite macro pour séparer visuellement les strophes ---
\def\HexStrophe{%
\NC \null \NC \null \NC \null \NR
}
Points importants :
\newcount\VerseNocrée un compteur ;\global\advance\VerseNo by 1incrémente ce compteur à chaque vers ;\Hexremplit automatiquement les trois colonnes du tableau ;\HexStropheajoute une ligne blanche entre deux strophes.
5.2. Utilisation dans le document
[modifier | modifier le wikicode]\starttext
% Titre centré, petites capitales, taille modérée
\blank[2*big]
\startalignment[middle]
{\sc Énéide I : hexamètres bilingues}
\stopalignment
\blank[medium]
% Bloc versifié en police réduite
{\switchtobodyfont[small]
\VerseNo=0
\starttabulate[|r|p(.38\textwidth)|p(.48\textwidth)|]
\NC \bf N.\NC \bf Latin\NC \bf Français\NR
% --- Strophe 1 ---
\Hex{Arma virumque cano, Troiae qui primus ab oris,}
{Je chante les armes et l’homme, qui le premier, des rivages de Troie,}
\Hex{Italiam, fato profugus, Laviniaque venit litora,}
{chassé par le destin, vint en Italie et aux rivages de Lavinium,}
\Hex{multum ille et terris iactatus et alto,}
{longtemps ballotté sur les terres et sur les flots,}
\Hex{vi superum saevae memorem Iunonis ob iram.}
{par la force des dieux, à cause de la rancœur tenace de la cruelle Junon.}
\HexStrophe
% --- Strophe 2 ---
\Hex{multa quoque et bello passus, dum conderet urbem,}
{ayant souffert aussi de nombreuses guerres, jusqu’à fonder une cité,}
\Hex{inferretque deos Latio, genus unde Latinum,}
{et apporter ses dieux au Latium, d’où naîtra le peuple latin,}
\Hex{Albanique patres, atque altae moenia Romae.}
{les pères d’Albe la Longue, et les hautes murailles de Rome.}
\stoptabulate
} % fin du bloc en petite police
\stoptext
L’utilisateur n’a plus à se soucier de la structure : chaque vers est saisi sous la forme :
\Hex{vers en latin}{vers en français}
#1, #2, portée, bonnes pratiques). Ici, on voit déjà comment une macro bien pensée permet de transformer un problème de mise en page complexe en un simple schéma de saisie régulier.
6. Programmer une macro : étapes recommandées
[modifier | modifier le wikicode]Voici une méthode de travail simple pour écrire sa propre macro ConTeXt.
6.1. Étape 1 : identifier ce qui se répète
[modifier | modifier le wikicode]Exemples typiques :
- un vers + sa traduction ;
- un encadré « À retenir » ;
- une ligne dans un tableau de vocabulaire (mot, traduction, commentaire) ;
- un bloc « Exemple » avec titre et code source.
6.2. Étape 2 : écrire la version « à la main »
[modifier | modifier le wikicode]- D’abord, on écrit le contenu sans macro, en ConTeXt classique, jusqu’à ce que la mise en forme convienne.
- Ensuite, on entoure ce qui varie par des marques (#1, #2, etc.) :
- le vers →
#1; - la traduction →
#2; - le commentaire →
#3, etc.
6.3. Étape 3 : transformer en macro
[modifier | modifier le wikicode]On emballe la structure dans une \def ou un \define :
\def\LigneVocabulaire#1#2#3{%
\NC #1%
\NC #2%
\NC #3%
\NR
}
Utilisation :
\starttabulate[|l|l|p(.4\textwidth)|]
\NC Mot \NC Traduction \NC Commentaire \NR
\LigneVocabulaire{arma}{les armes}{Mot très fréquent dans l'épopée latine.}
\LigneVocabulaire{vir}{l'homme}{Souvent le héros ou le guerrier.}
\stoptabulate
6.4. Étape 4 : ranger la macro dans un « environnement »
[modifier | modifier le wikicode]Dans un projet réel, il est conseillé de :
- mettre les macros dans un fichier séparé (par exemple
env-poesie.tex) ; - les charger avec
\environment env-poesieau début du document.
Cela permet de garder le corps du texte lisible et de réutiliser la même boîte à outils dans plusieurs documents.
7. Bonnes pratiques pour les macros
[modifier | modifier le wikicode]- Donner des noms significatifs :
\Hexpour un hexamètre,\VersFr,\LigneVocabulaire, etc. - Éviter les accents dans les noms de macros (rester sur ASCII simple).
- Commenter les macros importantes avec
%. - Tester la macro sur un MWE (Minimal Working Example, exemple minimal) avant de l’intégrer dans un gros projet.
- Isoler les macros dans un fichier d’environnement pour ne pas surcharger le document principal.
- Ne pas tout transformer en macro : réserver cette technique à ce qui se répète vraiment ou à ce qui structure le document.
Cette page donne un aperçu pratique des macros dans ConTeXt. Une page de référence plus détaillée pourra compléter ce panorama (syntaxe avancée, paramètres optionnels, macros étendues, interactions avec Lua, etc.).
Macros pour textes polyglottes : pourquoi et comment
Dans des documents où se côtoient plusieurs langues, en particulier des langues non-romanes (arabe, devanagari, chinois, hébreu, etc.), la création de macros personnalisées est non seulement utile mais souvent indispensable pour garantir la cohérence typographique, la lisibilité du code source et la réutilisation des réglages.
- Isoler les réglages par langue Chaque système d’écritures a ses propres paramètres (polices, césure, direction d’écriture). Définir des macros dédiées permet d’assigner ces réglages une seule fois, puis de les rappeler élégamment dans le texte.
-
Améliorer la lisibilité du source
Au lieu de répéter des blocs de configuration complexes à chaque occurrence, une macro bien nommée comme
\ArabicFaceou\hlemmarend le code plus lisible et plus maintenable. - Normaliser l’apparence Avec des macros, on s'assurer que chaque langue est affichée avec la même police, la même taille, la même direction, la même couleur, etc., sans risque d’incohérence.
- Faciliter les ajustements globaux Si vous décidez de changer une police ou un style pour une langue donnée, il suffit de modifier la définition de la macro, et toutes les instances dans le document s’ajustent automatiquement.
- Séparer le fond et la forme En regroupant tous les détails techniques (polices, langues, modules auxiliaires) dans un environnement ou un fichier d’environnement, le texte principal reste plus proche du contenu et moins encombré de détails de configuration.
Sur cette page « Macros » du livre, cette dimension spécifique aux textes polyglottes n’est pas encore abordée de façon approfondie. Pourtant, dans des contextes multilingues complexes, elle devient une pratique de base pour gagner en clarté, en efficacité et en qualité typographique. Cela est montré sur la page concernant les Partie III, ch. 9 : Textes polyglottes.
Navigation
[modifier | modifier le wikicode]|
Part. II, ch. 6 • Macros • Sommaire |