Bébert.  Accueil Les commandes Créer des commandes La date Franciser son document Faire la Table des Matières Longueurs & unités dans ConTeXt
Insérer des PDF dans un document Installation de ConTeXt - LMTX Une commande pour écrire les siècles Typographie : Quelques définitions Polices incluses dans ConTeXt Commandes pour la mise en page

Créer ses commandes

Ou comment séparer encore un peu plus le fond de la forme

Lorsque dans ton document un mot, un groupe de mots ou un objet (tableau, une boite, …) reviennent plusieurs fois, il est toujours judicieux de créer une commande qui le reproduit et ce pour plusieurs raisons :

La commande ConTeXt pour créer des commandes est \define. Tu pourras voir dans la documentation ou sur le net \def qui est une primitive TeX qui est acceptée par ConTeXt. Elle ne s’utilise pas exactement de la même façon. Une primitive est une des 300 commandes qui constitue le langage TeX.

La création de commande se fait dans le préambule de ton document (avant le \starttext). Les commandes de substitution (\bsr pour bilan scientifique régional) sont les plus faciles à fabriquer :

\define\bsr{bilan scientifique régional}

Maintenant tu peux remplacer :

… dans le dernier bilan scientifique régional nous avons évoqué …

par

… dans le dernier \bsr\ nous avons évoqué …

N’oublies pas la \ à la fin de \bsr car tu obtiendrait :

… dans le dernier bilan scientifique régionalnous avons évoqué …

Ohh ! he bien dans LATeX il y a le package xspace qui permet de s’affranchir de la \ finale et gnagnagna…

ConTeXt possède un mécanisme équivalent \autoinsertnextspace mais voici ce qu’en dit Hans Hagen : «cela est (et restera) non documenté et non pris en charge, car je n'aime pas ce genre de comportement»

Donc si tu veux quand même l’utiliser :

\define\bsr{bilan scientifique régional\autoinsertnextspace}

Il existe une commande, \emph, pour mettre les mots ou les expressions que tu juges importants en relief (on dit aussi en emphase). Conformément aux règles typographiques \emph transforme en caractères penchés les mots mis en emphase. Il est intéressant de créer une commande pour le faire.

\define\imp{\emph}

Maintenant {\emph des mots importants} et {\imp des mots importants} produiront la même chose.

C’est complètement débile ton truc !!

Sauf si à un moment tu décides que ce serai mieux de les avoir en gras les mots importants. Si tu n’as pas crées ma commande débile, tu recherches tous les \emph et tu les remplaces par des \bf. Avec ma commande tu la modifies :

\define\imp{\bf}

ou en

\define\imp{\red}

Et ils sont en rouges

\define\imp{\red\bf}

Et même en gras et rouges

Il y a un truc à bien comprendre quand tu travailles avec le monde TEX, et qui en fait une de ses forces, c’est de séparer au maximum la forme et le fond. Tu rédiges ton texte, tu places les commandes dont tu as besoins par-ci par-là et quand tu as finis ou quand tu es sûr de toi, tu adaptes les commandes à tes souhaits. Tu ne pollues pas ton esprit lors de la rédaction pour savoir si les mots importants doivent rester en italique ou pas, si le retrait de paragraphe est assez grand… Tu pourras toujours modifier tout cela à tout moment.

Depuis que je travaille sous ConTeXt et LATeX j’ai écris des dizaines et des dizaines de commandes. Comme dans la mesure du possible je réutilise les mêmes fichiers de configurations, j’ai ce stocke de commandes que je peux utiliser et modifier en fonction de mes besoins.

C’est ainsi que je me suis créé une série de commandes pour remplacer des expressions que j’utilise souvent, comme avant et après Jésus-Christ.

\define\avjc{av. J.-C.}
\define\apjc{apr. J.-C.}

Ça ce sont les abréviations officielles mais on peut trouver ap. J.-C. ou ap. J. C. ou après J.-C., … Donc en fonction de l’éditeur avec lequel je publie j’adapte ma commande, mais dans mon texte j’écris toujours \apjc\ sans me poser de question, se sera toujours bon.

Les noms propres, en français, s’écrivent en petite capitale, là encore je me suis fait une petite commande mais cette foi-ci elle possède un argument. Le nombre d’arguments utilisés dans la commande s’écrit entre [] après le \define. L’argument se note avec un # suivit d’un numéro qui va de 1 à n en fonction du nombre d’arguments utilisés.

\define[1]\nom{\mbox{\sc #1}}

J’ai mis la commande dans une \mbox car c’est une autre caractéristique des noms de famille, ils ne doivent pas être coupé en fin de ligne. Elle s’utilise de cette façon :

\nom{Le nom propre}

Maintenant un exemple un peu plus complexe faisant appelle à des conditions.

Une commande pour écrire les siècles

Pendant que l’on y est on parlera des rois

Fleuron

En typographie française ont écrit les siècles en chiffres romains petites capitales suivi de er pour le premier et de e pour tous les autres.

Le but de ma commande est d’écrire \siecle{19} et d’obtenir XIXe siècle et évidemment \siecle{1} pour avoir Ier siècle

Il va donc falloir mettre une condition dans la commande, un truc du genre si 1 alors écrire er sinon e et transformer les chiffres arabes en chiffres romains.

Le nom de notre commande c'est \siecle et elle a 1 seul argument la valeur du siècle.

\define[1]\siecle{ }

La commande pour transformer un chiffre arabe en chiffre romain c'est \romannumeral

\romannumeral 19

donne xix.

La commande pour les transformer en petites capitales c'est \cap

\cap\romannumeral 19

donne XIX.

La commande pour mettre en exposant c'est \high{ }

\cap\romannumeral 19\high{e}

donne XIXe

C'est pas ce que l'on veut il faut contraindre \cap

{\cap\romannumeral 19}\high{e}

donne XIXe

C'est toujours pas exactement ce que l'on veut le e est trop gros et il crée un espace au-dessus de la ligne : il faut qu'il rentre dans le rang.

{\cap\romannumeral 19}{\tfx\high{e}}

donne XIXe

Il ne reste plus qu'a ajouter siècle mais il faut faire attention si on met une espace normale, si ton siècle ce trouve en fin de ligne il peut être coupé en deux, avec le chiffre en fin de ligne et le siècle repoussé au début de la ligne suivante, ce qui n'est pas très élégant. Pour éviter cela on va mettre une espace insécable qui se note ~.

{\cap\romannumeral 19}{\tfx\high{e}}~siècle

La boucle de test ce fait avec

\ifnum
\else
\fi

Voila il n'y a plus qu'à finaliser notre commande ce qui donne :

\define[1]\siecle{
\ifnum #1=1 {\cap\romannumeral #1}{\tfx\high{er}}~siècle
\else {\cap\romannumeral #1}{\tfx\high{e}}~siècle
\fi }

Et les rois ?

Et bien en typographie française le numéro du roi est aussi en chiffres romains mais en grandes capitales !

Je me suis donc crée une commande à deux entrée, une pour le prénom du roi, l'autre pour son numéro.

\define[2]\roi{\Word#1~\WORD\romannumeral #2}

J'ai ajouté le ~ pour éviter la coupure entre le nom et le numéro et \Word au nom du roi comme ça même si j'oublie de mettre une majuscule, il sera bien écrit.

\roi{Louis}{14} et \roi{louis}{14}

donneront

Louis XIV