GAZETTE N°28: Lout2 et les langages à balise.

Lout2 et les langages à balise.

Par Murray Adelman

Adaptation française : Marc Simon.


Précédent Suivant Table des Matières

5. Lout2 et les langages à balise.

5.1 Introduction

Lout est un préprocesseur écrit par Jeffrey Kingston, qui produit un résultat au format Postscript plutôt qu'un fichier dvi.

Sa conception interne lui permet de combiner la puissance de LaTeX avec la facilité de maintenance de troff et sa faible consommation de ressources. De plus, la modification de son comportement est plus facile que pour les deux autres programmes. Les détails de sa conception sortent du cadre de cet article. Ils sont donnés dans la documentation, et je traiterai de la bibliographie plus loin dans ce document.

Basser lout est une version de lout pour le système d'exploitation UNIX. C'est d'elle que je vais traiter, car elle est susceptible de s'installer sous Linux. À partir de maintenant, j'emploierai « lout » pour désigner « Basser lout ». L'ensemble comporte des langages spéciaux pour les dessins, les tableaux, les équations et les graphiques  il intègre aussi des fonctionnalités de type « macro ». Il gère automatiquement les renvois, crée des index, des tables des matières et des bibliographies à partir d'une base de donnée dans un environnement unique.

5.2 Installation de Lout

On peut se procurer lout sur ftp.cs.su.oz.au/jeff/lout. Cet article traite de la version 3.08, contenue dans le fichier lout.3.08.tar.gz.

Il y aura peut-être une version plus récente au moment où vous lirez ces lignes, mais l'auteur m'a assuré que les instructions que je donne seront toujours applicables.

Je vous suggère fortement de vous procurer lout.teq.2.0.tar.gz. Vous pouvez aussi prendre le guide d'utilisation, lout.3.08.user.ps.gz. Après l'avoir décompressé, vous pourrez le visualiser avec un préprocesseur Postscript ou l'imprimer (attention, il fait deux cent pages).

En décompressant lout.3.08.tar.gz (via tar -zxpf lout.3.08.tar.gz) vous obtiendrez, dans le répertoire lout.3.08/, les sources, un makefile, plusieurs répertoires et quelques autres fichiers. Les fichiers binaires ne sont pas fournis. Le Makefile est très bien écrit, et les sources se compilent sans problèmes sous Linux. Je l'ai fait au format a.out avec un kernel 1.2.3 et au format ELF avec des kernels 1.3.35 et 1.2.20, sans jamais rencontrer de problème. Les instructions pour compiler sont données au début du Makefile, et vous n'aurez besoin de changer que peu de chose à l'original. Si vous êtes parano comme moi, faites « cp makefile makefile.dist » avant de l'éditer. Il est nécessaire de préciser les répertoires BINDIR, LIBDIR, DOCDIR et MANDIR. Si vous êtes root, vous pouvez les définir comme vous le souhaitez, si ce n'est que les répertoires BINDIR et MANDIR doivent déjà exister. Ces deux répertoires doivent d'ailleurs se trouver dans le chemin d'accès de tous les utilisateurs. Si vous ne savez quoi choisir, utilisez :

BINDIR = /usr/local/bin
LIBDIR = /usr/local/lib/lout
DOCDIR = /usr/doc/lout
MANDIR = /usr/local/man/man1

Si vous voulez l'installer dans un endroit moins conventionnel, créez d'abord les répertoires BINDIR et MANDIR.

La plupart des autres macros doivent être laissées telles quelles. Assurez-vous que OSUNIX vaut 1 et que OSDOS et OSMAC valent 0 (zéro), comme c'est le cas chez moi :

OSUNIX = 1
OSDOS = 0
OSMAC = 0

Si vous souhaitez que lout supporte les localisations françaises et allemandes, lisez la documentation des macros USELOC et LOC_XX, où XX est remplacé par FR ou DE. Pour n'utiliser que l'anglais, vous devez avoir :

 
CHARIN = 1 
CHAROUT = 0 
USELOC = 0 
#LOC_FR = fr
#LOC_DE = de 

Décommentez les lignes appropriées pour inclure les langues de votre choix, ce qui permettra à lout de les employer pour ses messages. Les options pour formatter un document en plusieurs langues en utilisant des règles spécifiques de césure sont précisées au moment du lancement du programme.

Maintenant, compilez simplement lout en faisant « make lout », « make c2lout » puis « make install ». Cette commande a un rôle important, et adapte l'installation à votre configuration. Vous devrez éditer quelques fichiers à la main si vous n'utilisez pas du papier au format A4. Il suffit de modifier quelques fichiers textes, et c'est très bien expliqué dans le Makefile.

L'étape suivante consiste à faire un « make clean » pour se débarrasser de tous les fichiers superflus produits par la compilation des exécutables, et laisser les sources originales intactes. Si vous comprenez où vont les différents fichiers, vous pouvez essayer le programme avant de faire le nettoyage, ce qui vous permettra éventuellement de corriger le makefile en cas de problème d'installation, vous économisant ainsi une nouvelle recompilation.

Si vous avez du temps libre, vous pouvez tester l'installation en compilant le manuel d'utilisation. Cela prend du temps, particulièrement sur un ordinateur lent. Les instructions sont contenues dans un fichier README situé dans le répertoire DOCDIR/user. En les suivant, vous obtiendrez un fichier Postscript appelé « op ». Je l'ai rebaptisé « users.ps » et je le garde définitivement dans DOCDIR/user de façon à ce qu'il soit accessible en lecture par tout le monde. Bien sûr, cela nécessite un visualiseur Postscript. Je vous suggère d'installer ghostview si vous voulez utiliser intensivement lout. Le manuel d'utilisation est un énorme document de près de deux cent pages, avec une table des matières et un index. Vous en aurez besoin à un moment ou à un autre. Si vous ne voulez pas le compiler vous-même, décompressez lout.3.08.user.ps.gz.

Pour tester de façon moins contraignante, vous pouvez aussi utiliser le fichier sample.lt, que j'utiliserai plus tard pour illustrer les capacités du langage. lout écrit quelques fichiers qu'il utilisera plus tard avec le document, donc choisissez un répertoire qui vous est accessible en écriture et que vous pourrez facilement retrouver lorsque vous aurez fini vos tests et que vous voudrez effacer ces fichiers. Voici le fichier sample.lt :

(1) @SysInclude{doc}
(2) @Doc @Text @Begin
(3) @LD @Heading{Hello World}
(4)
(5) Hello
(6) -90d @Rotate{World Hello World 1.5 @Scale Hello}
(7) World Hello
(8) +45d @Rotate{World}
(9) Hello World Hello World Hello World
(10) @ShadowBox{Hello World}
(11) .7 @Scale{Hello .7 @Scale{ World .7 @Scale{Hello}}}
(12) World
(13) red @Color Hello World! Hello World
(14) @Box paint{grey} white @Color{Hello World Hello World}
(15) green @Color 120p @Font .
(16) @End @Text

Puis tapez :

lout sample.lt > sample.ps

Vous devriez retourner au prompt quelques secondes plus tard sans aucun message d'erreur. Vous avez maintenant sur votre disque : sample.lt (le fichier source que vous avez écrit), lout.li, sample.ld et sample.ps. Vous pouvez alors visualiser ou imprimer le fichier sample.ps. J'ai ajouté un certain nombre d'effets integrés dans lout et qui devraient être visibles. Je ne dis pas que d'autres formatteurs sont incapables de faire de même, mais lout le fera mieux pour des raisons détaillées plus tard.

5.3 Le langage.

Comme TeX, lout divise les caractères en plusieurs catégories : les lettres, les signes de ponctuation, les espaces, les citations, les échappements et les commentaires. Les lettres regroupent les lettres de l'alphabet, en minuscule et en majuscule, ainsi que le caractère @. Les signes de ponctuation sont les signes habituels, les différentes formes de crochets et les chiffres. Parmi les espaces, on trouve les caractères espace, tab et newline. Les trois dernières catégories n'ont qu'un seul élément : ' est le signe de citation, \ celui d'échappement et # celui du commentaire. lout ne tient pas compte de ce qui se trouve sur la ligne après ce dernier caractère.

En regardant le fichier sample.lt, vous pouvez en déduire que les commandes commencent par un @. C'est une habitude plutôt qu'une loi. On peut utiliser n'importe quelle chaîne de caractère pour nommer un commande. Si vous souhaitez par la suite écrire des filtres pour manipuler vos fichiers, je vous conseille de respecter la coutume. Cette liberté entraîne des responsabilités. Dans le fichier sample.tex, il y a des commandes agglutinées sans espace entre elles. TeX considère qu'une commande se termine quand il voit qu'une nouvelle commence. Ce n'est pas le cas de lout. Si celui-ci voit une chaîne de caractères commençant par @ qu'il ne reconnaît pas en tant que commande, il vous préviendra. Regardez la dernière ligne de sample.lt. Il y a deux commandes, @End et @Text. Si vous oubliez les espaces entre elles et écrivez @End@Text, lout verra que la chaîne n'est pas liée à une commande et vous signalera poliment que la commande est inconnue. Par ailleurs, si la ligne 13 commençait par red@Color, la chaîne serait écrite telle quelle, sans avertissement. Il n'y a pas de commande \Color dans le TeX standard, mais s'il y en avait une et que vous écriviez red\Color, TeX saurait quand même que \Color est une commande.

Une autre particularité du langage lout est que ses commandes acceptent des arguments aussi bien à droite qu'à gauche. La couleur associée à la commande Color est à droite de celle-ci, alors que le texte à afficher est à gauche. Notre exemple au début de la ligne 13 va afficher « Hello » en rouge. En général, les arguments de contrôle sont à gauche et ceux qui définissent l'objet sur lequel on agit sont à droite, mais encore une fois, il s'agit plus d'une habitude que d'une loi générale. Le nom de la commande est délimité à droite comme à gauche par une espace ou un signe de ponctuation. On aurait pu écrire la ligne (15) ainsi : « green @Color 120p @Font. », sans espace entre Font et le point. On peut remplacer celui-ci par le chiffre 1, mais une espace serait nécessaire si le point était remplacé par la lettre a.

lout fonctionne de façon récursive, en fabriquant des objets complexes à partir d'objets simples. Un caractère est un objet, de même qu'une suite de caractères, une commande appliquée à une chaîne de caractère et ainsi de suite. Le document entier est un objet. La règle générale veut qu'un espace dans le code source produise un espace dans le document final, sauf pour ceux qui servent à délimiter les objets. Ainsi, Hello séparé de World par cinq espaces sera rendu de la même façon que s'ils étaient séparés par cinq tabulations ou par cinq sauts de lignes. Il y aurait cinq espaces dans le document final.

Examinons pas à pas sample.lt. La ligne (1) indique à lout qu'il doit lire le fichier doc dans le répertoire LIBDIR/include. C'est le fichier de démarrage. Il définit les paramètres généraux de présentation, tels que les marges, les espaces autour des en-têtes le style de pagination etc. Il fait aussi appel à deux autres fichiers, docf et dl, situés dans le même répertoire. Ils contiennent des commandes standards. Vous pouvez les copier dans votre répertoire de travail, les modifier, puis les appeler avec la commande @Include au lieu de @SysInclude. Si vous connaissez le SGML, vous devriez voir une ressemblance. S'ils ne sont pas dans le répertoire de travail, vous devez donner le chemin complet. Il n'y a pas de variable d'environnement prévue pour spécifier la localisation de vos fichier de démarrage, mais vous pouvez le faire via l'option -I sur la ligne de commande. Je vous conseille de créer un répertoire du genre « mes_fichiers » et de faire un alias lout, pointant vers « lout -I ~/mes_fichiers ». Ainsi lout cherchera automatiquement dans mes_fichiers quand il rencontrera une commande @Include. La ligne suivante contient les commandes standard pour débuter la partie texte du fichier. Ces trois commandes, ou des équivalents plus complexes, doivent figurer dans tous les fichiers.

La ligne (2) indique le début effectif du texte et la ligne (3) est la première du document. La chaîne @LD est la commande indiquant l'alignement à gauche (Left Display). Cela groupe les arguments en un seul objet et laisse un espace convenable au dessus et en dessous. Par défaut, cet espace est d'une ligne de chaque côté. Le texte est aligné contre la marge à gauche. Si l'on remplaçait @LD par @D, le résultat serait centré.@Heading{Hello World} crée un nouvel objet : les mots Hello World dans une police et une taille appropriées pour un titre. Par défaut, c'est du texte de taille normale, en caractère gras. Cela illustre bien le fonctionnement de lout : un chaîne de caractères est considérée comme un seul argument, jusqu'au prochain espace. Voici la composition de la commande : {Hello World} est un objet, et @Heading agit sur lui, formant ainsi un nouvel objet : les mots « Hello World » en caractère gras. Puis @LD modifie cet objet pour le placer verticalement comme il faut, et pour l'aligner à gauche. Au final, on obtient avec les réglages par défaut un « Hello World » en gras, suivi d'une ligne blanche.

La ligne (4) est vide. Cela produira un seul espace dans le document final. Puisqu'il n'y a rien sur la ligne, cela ne sera pas visible et cela n'aura aucun effet. En revanche, les autres traitements de texte traitent différemment les sauts de lignes, selon qu'il y en ait un ou deux. J'aime cette logique, mais je me plaint également de la manière dont troff traite les sauts de lignes. lout donne la possibilité d'utiliser la méthode troff ou la méthode TeX au lieu de la méthode par défaut. La seconde transforme systématiquement toute suite d'espace en un seul. Contrairement au vrai TeX, une ligne blanche produira un espace dans le document final et non pas un nouveau paragraphe. À mon avis, c'est le meilleur compromis possible. Si vous voulez faire comme cela, il vous faudra écrire une macro équivalente au \hspace de TeX, pour pouvoir laisser une quantité donnée d'espace horizontal. J'y reviendrai quand je parlerai des macros.

La ligne (5) commence le corps de la section. La ligne (6) tire profit d'une fonctionnalité spécifique de lout. La commande @Rotate fait tourner l'objet désigné à sa droite selon l'angle spécifié à sa droite. Je n'ai pas parlé des unités de mesure dans lout, mais vous pouvez deviner que d signifie degré. Par défaut, les rotations se font dans le sens inverse des aiguilles d'une montre, de sorte que -90d fait tourner de 90 degrés dans le sens des aiguilles d'une montre. L'objet à faire tourner est l'objet complexe défini entre les accolades. J'ai mis d'autres opérations géométriques dans cet objet. Le dernier « Hello » dans la chaîne de caractères tournée subit la commande @Scale qui en modifie la taille. L'argument à gauche spécifie le rapport, ici 1.5. Cet argument est un nombre, et n'a pas besoin d'unité. Remarquez que la victime d'un changement d'échelle n'est pas entourée d'accolades : elle est automatiquement délimitée par des espaces.

La ligne (7) se compose de texte simple, puisqu'il est sur une nouvelle ligne, séparé de l'objet tourné par un espace, et qu'il constitue donc un nouvel objet avec un espace avant lt dans le document final.

La ligne (8) est une autre rotation, de 45 degrés vers la gauche cette fois-ci. Les accolades autour de l'argument « World » ne sont pas nécessaires, je les ai mises uniquement pour montrer qu'on peut les mettre.

La ligne (9) est composée de texte simple. Jusqu'à présent, tout ce que j'ai décrit ne s'applique que sur une ligne. Certes, la ligne contenant les rotations est une ligne longue et profonde, mais c'est une ligne. Les espaces horizontaux et verticaux nécessaires sont gérés automatiquement.

La ligne (10) place « Hello World » dans une boîte ombragée, c'est-à-dire dans un cadre en 3 dimensions avec une ombre dans le coin inférieur droit.

A la ligne (11) « @Scale » reçoit comme argument l'intégralité de l'objet {.7 @Scale{ World.7 @scale{Hello}}, et .7 comme paramètre. Ceci est l'objet à son tour de .7 @Scale {World .7 @Scale {Hello}} et .7 comme paramètre. Et ainsi de suite... Au final, chacun des trois mots « Hello », « World » et « Hello » est plus petit que le précédent. Cela illustre bien le fonctionnement récursif de lout, qui construit de nouveaux objets à partir d'objets plus simples.

Vous vous doutez que la ligne 12 ajoute un peu de couleur au document. La seule chose notable est que seul le « Hello » sera en rouge. L'utilisation des couleurs de Postscript est intégrée à lout. Sur une imprimante NB, les couleurs n'apparaîtront pas, mais cela ne provoquera pas une erreur.

La ligne (14) semble compliquée, mais elle suit les règles de la syntaxe de lout : elle n'est donc pas bien difficile à écrire avec la doc sous les yeux. La première commande, @Box, dessine un cadre rectangulaire autour de ce qu'on lui donne comme argument. L'option paint spécifie la couleur de l'intérieur du cadre. Ensuite, on place dans le cadre la phrase « Hello World Hello World » en blanc. Il n'y a pas besoin d'entourer tout cela par des accolades car white est un argument de @Color, et celui-ci est le seul susceptible de former un objet, avec tout ses arguments.

On le voit mieux à la ligne (15), où un gros point est dessiné en vert. La nouvelle commande @Font accepte des arguments à gauche et à droite, le premier étant la taille de la police et le second l'objet qui subit la transformation. Ici nous avons créé un point d'une taille de 120 points et nous l'avons coloré en vert. Vous savez peut-être que troff permet des modifications par addition de la taille des polices, de sorte que vous pouvez augmenter ou diminuer la taille de la police d' autant de points. TeX, quant à lui, préfère des modifications multiplicatives, donc en précisant un coefficient multiplicateur. lout dispose des deux. Vous pouvez choisir une addition en faisant +2p @Font, qui augmente la taille de 2 points, ou une multiplication en faisant 1.2f @Font. L'unite f renvoie à la taille actuelle de la police utilisée, 1.2f signifiant donc « multiplication par 1,2 de la police ». La ligne (16) contient les commandes obligatoires pour terminer un document, et doit être présente tout le temps.

Si vous avez ghostview et sample.lt sur votre disque, vous pouvez visualiser ce dernier en faisant lout sample.lt > sample.ps, puis ghostview sample.ps. Si vous avez un moniteur couleur, vous devriez voir les couleurs. Vous pouvez aussi, bien sûr, imprimer le fichier Postscript.

Il y a, dans la distribution de lout, des modules pour les tableaux, les équations, les dessins et les graphiques. L'intégration est meilleure que pour troff. Le module d'équation est très semblable à eqn, et les exemples que j'ai donné pour troff devraient fonctionner tels quels avec lout. Dans le chapitre sur l'installation, je vous suggérai fortement de vous procurer lout.teq.2.0.tar.gz. C'est un module d'équation modifié qui utilise les polices Computer Modern pour les symboles mathématiques. J'ai fait des essais, et je trouve que les résultats ressortent mieux ainsi. Vous devriez l'installer si vous comptez taper beaucoup de symboles mathématiques. C'est vraiment très facile à faire. Editez le Makefile inclus dans le module pour lui indiquer où les différents fichiers de lout ont été installés, puis tapez « make ». Il n'y a rien à compiler ni de de liens a créer, et l'opération est rapide. D'après la documentation, ce module n'a pas été installé par défaut pour des raisons légales. L'auteur des polices impose des restrictions à la redistribution qui ne sont pas compatibles avec la license GNU de lout.

Le module sur les tableaux a une syntaxe différente de celle de troff, mais l'esprit est le même. Les résultats sont bons, mais ils n'offrent pas la même liberté et la même flexibilité que tbl pour faire des tableaux complexes et hors-norme. Mais, sérieusement, qu'est-ce que ça peut faire ?

Comme je l'ai dit plus haut, les dessins sont intégrés dans lout. Il y a toutefois un module de dessin qui dispose de possibilités plus étendues. Il fournit des objets de base tels que des carrés, des cercles, des ellipses et des courbes de Bézier. Ils sont tous paramétrables, ce qui permet de changer la taille et la forme. Nombre de commandes et de paramètres sont des versions lout des commandes Postscript. Une différence majeure : lout fait lui même le formatage alors que Postscript exige que tout les points de la page soient spécifiés. Le module de dessin de troff propose deux niveaux de dessin. Le premier est intuitif, vous y décrivez les dessins avec des mots, alors que le second, qui sert de base au précédent, est plus difficile à utiliser, mais permet d'automatiser des opérations de dessin qui seraient fastidieuses sinon. Les instructions de lout sont entre les deux. Elles sont plus faciles à utiliser pour l'utilisateur moyen que le module xypic de TeX.

Il y a aussi un module pour faire des graphiques, et un pour formatter du code en Pascal et en C à partir des sources. Je ne les ai pas encore essayé car cela ne fait pas partie de mes tâches habituelles.

lout, dans sa distribution actuelle, n'aura probablement pas besoin d'autres modules de macros. Vous pouvez presque tout faire en modifiant celles qui existent déjà. Bien sûr, des aides sont prévues pour vous permettre d'écrire vos propres commandes. @Hspace en est un exemple. Si vous suivez mes conseils et que vous utilisez les options d'espacement de TeX, vous trouverez ceci utile :

def @Hspace
right x
{|x}

Elle est baptisée d'après la macro qui remplit la même fonction dans TeX, où elle est appelée \hspace. Elle accepte un argument précisant le nombre d'espaces horizontales à laisser. Par exemple, @Hspace .5i laisse une espace horizontale d'un demi-pouce. À cause de la façon qu'a lout de placer les objets à droite des précédents, il n'y a pas moyen de faire l'équivalent du \vskip de TeX. Il y a, bien sûr, un moyen de laisser libre un espace vertical.

La documention de lout conseille de placer les macros dans un fichier mes_macros, lu automatiquement quand lout traite un document. J'ai essayé, avec un bonheur variable. Les macros qui font uniquement appel à des fonctions de base, comme @Hspace, peuvent être placées au tout début du document avant la commande @SysInclude. Celles qui font appel à des commandes, comme @Color, ne fonctionnent que si elles sont dans mes_macros.

Si vous écrivez la définition :

def teh
{the}

À chaque fois que vous taperez « the » à la place de « teh » - erreur courante - lout vous corrigera automatiquement. Il faut bien sûr faire la même chose pour The avec un T majuscule. Cela ne fait appel qu'à des fonctions de base, donc on peut le mettre au début du document.

J'ai utilisé « récursif » dans un sens assez flou jusqu'ici, mais lout est aussi récursif au sens strict. On peut appeler une commande à l'intérieur d'elle-même. Il y a des examples utiles dans le guide de l'expert. Vous comprendrez mieux en le lisant comment lout est conçu. Je vous recommande le chapitre 1. Voici un exemple inutile mais amusant, et qui illustre mon propos :

def @Banner
{red @Colour Hello blue @Color World @Banner}
@Banner

Écrira un « Hello » rouge, suivi d'une espace suivie d'un « World » bleu répété jusqu'à la fin de la ligne. Si vous voulez essayez, mettez cette définition dans mes_macros.lt et la commande qui l'invoque dans le fichier source. Ce comportement récursif est utilisé plus sérieusement dans lout. C'est une des formules magiques qui lui permet d'offrir tellement de possibilité en si peu de place. Consultez le guide de l'expert pour plus de détails.

lout comme LaTeX sont des langages à balises logiques. L'auteur indique les éléments qu'il veut à tel ou tel endroit et le programme se charge des détails, qui peuvent être différents d'un type de document à l'autre. Par exemple, un chapitre d'un livre est numéroté différemment qu'un chapitre d'un article. Comme LaTeX, lout tient compte de ces différences en fournissant plusieurs styles pour des documents variés. Dans la distribution sont présent les styles doc, report, book et slides. Doc convient aux documents simples comme des articles scientifiques. Report est utilisé pour les rapports techniques. Book est prévu, évidemment, pour les livres et slides pour faire des transparents pour rétroprojection. Si vous avez une imprimante couleur, vous profiterez pleinement du style slides de lout. Il existe des variantes permettant une sortie dans un autre format que Postscript.

Certains choix par défauts sont difficiles à changer dans les styles de LaTeX. C'est plus facile dans troff, sauf pour faire des registres avec des chaînes numériques. Sur le plan de la syntaxe, lout est très facile à modifier. Il n'y a qu'une difficulté : savoir où faire les changements. C'est expliqué dans la documentation.

Voici un exemple. Supposons que vous vouliez changer le style doc pour qu'il ressemble un peut plus aux macros mm de troff (je ne vous le recommande pas). Vous souhaitez précisement faire passer la taille de police par défaut à 10 points, faire par défaut des paragraphes au fer, et mettre les titres en italiques. Admettons que vous vouliez le faire pour vous seul et non pas pour tous les utilisateurs :l vous suffit de créer un nouveau fichier de style. Copiez LIBDIR/include/doc dans votre répertoire de travail, et appelez-le troffdoc. Éditez le fichier, vous verrez ceci à proximité du début.

@Use { @DocumentLayout
 # @InitialFont { Times Base 12p        } # initial font
 # @InitialBreak        { adjust 1.20fx hyphen  } # initial break
 # @InitialSpace        { lout  }# initial space style
 # @InitialLanguage     { English       } # initial language
 # @InitialColour       { black } # initial colour
 # @OptimizePages       { No    } # optimize page breaks?
 # @HeadingFont { Bold  } # font for @Heading
 # @ParaGap     { 1.30vx        } # gap between paragraphs
 # @ParaIndent  { 2.00f } # first-line indent for @PP
 # @DisplayGap  { 1.00v } # gap above, below displays
 # @DisplayIndent       { 2.00f } # @IndentedDisplay indent
 # @DefaultIndent       { 0.5rt } # @Display indent
 ........

Il s'agit d'une liste des paramètres qui peuvent être réglés. La liste est plus longue, je ne fais mention que de ce qui est nécessaire. Décommentez la ligne avec @InitialFont et remplacez 12p par 10p. Maintenant la police a une taille de 10 points par défaut. Allez jusqu'à @ParaIndent, décommentez-la et remplacez 2.00f par 0f. Il n'y a plus de renfoncement au début des paragraphes. L'espace vertical entre les paragraphes est juste, donc ne touchez pas à @ParaGap. Occupons-nous maintenant de la police pour les titres. Juste au dessus de @ParaGap se trouve une ligne avec @HeadingFont : décommentez-la et remplacez Bold par Slope. Voilà. Sauvegardez, et remplacez dans votre fichier source @SysInclude{doc} par @Include{troffdoc}, et le tour est joué. Si vous voulez faire la même manoeuvre pour tous les utilisateurs de la machine, placez le fichier troffdoc dans LIBDIR/include ou modifiez doc lui-même si vous vous sentez d'humeur tyrannique.

Les trois traitements de texte permettent de faire des références et des tables des matières. LaTeX et troff disposent d'une interface vers des programmes permettant de créer des bibliographies à partir de bases de données et d'index. Lout permet les deux directement. Si vous voulez ces fonctionnalités, lout est le plus facile à installer, à administrer et à utiliser. Mon installation prend 4,3 Mo avec le module teq, que je recommande, et un module pour faire des codes barres. C'est donc un programme assez économe.

J'ai parlé de l'intégration des fonctionnalités dans les deux autres programmes. Il n'y a pas grand chose à dire à ce sujet pour lout. Tout est en standard. Tout est appelé depuis la ligne de commande ou en incluant des fichiers de définition. Chaque fichier de démarrage contient une liste de paramètre au début, que l'on peut modifier à loisir. J'ai, par exemple, changé l'apparence des têtes de chapitre pour qu'elles ressemblent à celle de LaTeX et troff. Pour modifier l'espacement au dessus et en-dessous des titres dans lout, il suffit de mettre @DisplayGap{.75v} au début du fichier. L'espacement par défaut passe de une à trois quart d'espace, ce qui rend les documents plus compacts. C'est nettement plus simple que ce qui doit être fait dans LaTeX et dans troff.

TeX a un problème : il a toujours fallu un expert pour le gérer. Malheureusement la plupart des administrateurs système ne s'occupent pas de faire des essais de formattage, et de nombreux sites utilisent des versions dépassées. Les utilisateurs doivent faire avec les défauts ou apprendre à les changer. En revanche, un administrateur qui ne connaît rien à lout pourrait changer la ligne correspondante dans le fichier LIBDIR/include/doc comme ci-dessus, et le changement s'appliquerait à tous. Les utilisateurs normaux peuvent choisir leurs propres options par défaut en écrivant les paramètres à changer dans un fichier indiqué via l'option -I, comme on l'a vu plus haut. Ils peuvent même copier les fichiers de démarrage dans leur répertoire de travail et tout modifier à loisir. Avec un doc modifié dans un répertoire privé @Include{doc} est placé au début du document à la place de @SysInclude{doc}.

La nouvelle version de LaTeX, LaTeX2e dispose d'un module appelé graphics ajoutant des possibilités de rotation et de changement d'échelle. Un autre module, appelé color, ajoute la possibilité d'employer des couleurs. Les modules sortent quand il y en a besoin. Par exemple, le module fancybox qui permet de faire des cadres avec des ombres. Les dessins et les couleurs ne fonctionneront toutefois qu'avec certains drivers Postscript pour l'instant et il faut donc abandonner l'indépendance vis-à-vis du matériel pour les utiliser. Je ne peux pas vous faire la liste de tous les modules nécessaires pour égaler les capacités de lout. La documentation de certains d'entre eux est insuffisante. Rappelez-vous toutefois que LaTeX2e est une version de développement. LaTeX3, quand il sortira, intègrera un module pour les dessins, qui sera expliqué dans la littérature standard.

J'ai supposé, jusqu'à présent, que les documents se composent principalement de texte, avec des dessins insérés de temps en temps. D'autres types de documents, comme les affiches publicitaires, sont conçus comme des dessins avec du texte inséré de temps en temps. Pour les raisons que l'on a vues, lout apparaît comme le mieux adapté pour cela. À cela s'ajoute la possibilité de produire de l'Encapsulated Postscript, que l'on peut insérer sous forme de dessin dans un document plus grand. On peut faire cela par l'option -EPS en ligne de commande.

Lout peut aussi produire du texte ASCII. Pour cela, il faut utiliser l'option -P, et remplacer les fichiers de démarrage par leur équivalents suivi d'un f (remplacez @SysInclude{doc} par @SysInclude{docf}) à la ligne (1) de sample.lt. Cela ne sera pas nécessaire dans la prochaine version, où doc pourra gérer les deux formats de sortie. D'après ce qui se dit dans les forums de discussions consacrés au traitement de texte, la possibilité de produire de l'ASCII pour la documentation en ligne et un formattage de qualité pour un livre a partir des mêmes sources est très attendue. troff en est capable, mais pas LaTeX.

On a de de plus en plus tendance à utiliser d'autres polices que celles d'Adobe, fournies en standard avec les imprimantes Postscript. Les fontes traditionnelles (Garamond) et d'autres, plus exotiques, dédiées à une utilisation spéciale, sont très abordables de nos jours. Lout est le programme qui s'adapte le plus facilement aux nouvelles polices, et je vais terminer mon tour d'horizon en expliquant comment faire.

Tout d'abord, vous devez avoir un ensemble de fichiers de formes, avec l'extension pfa ou pfb. Ils ne concernent pas lout, et doivent être installés dans votre imprimante Postscript. Ensuite vous devez avoir un ensemble de fichiers de dimensions. Ceux-là sont utilisés par lout. Ils ont l'extension .afm, qui signifie « Adobe font metrics ». Ils n'ont pas besoin d'être modifiés pour lout.

Je vais continuer à utiliser LIBDIR pour désigner le répertoire dans lequel les librairies de lout ont été installées (/usr/local/lib/lout/ par défaut). Les fichiers de dimensions sont placés dans LIBDIR/font. Vous pouvez les appeler comme vous voulez, tant que cela ne coïncide pas avec un police déjà présente. Les polices par défaut ont pour la plupart des noms en majuscule sans extension. Il y a des abréviations pour décrire les polices : ainsi, Times Roman est notée TI-Rm et Times Italic TI-It. Pour que les choses soient aussi concrètes que possible, je vais utiliser l'exemple des polices Charter.

Il y a quatre fichiers pour les polices Charter, dans ma version du moins : bchr.afm, bchri.afm, bchd.afm et ett/bchbi.afm/ (au passage, le b au début fait référence au créateur, Bitstream). Ce sont les fichiers pour le roman, l'italique, le gras et le gras italique, respectivement. J'ai décidé de les appeler CH-R, CH-I, CH-B et CH-BI dans l'installation de lout. Je copie les fichiers dans LIBDIR/font avec leur nouveaux noms. Par exemple : cp bchr.afm LIBDIR/font/CH-R. Si vous êtes certains de ne pas avoir besoin de les installer ailleurs, dans TeX ou groff, par exemple, vous pouvez les déplacer au lieu de les copier. La prochaine étape consiste à signaler leur présence à lout.

Allez dans LIBDIR/include et éditez le fichier fontdefs. Ce fichier contient des lignes longues qui ne doivent pas être coupées, donc veillez à ce que votre éditeur ne le fasse pas automatiquement. Le fichier sera difficile à lire sur un écran à 80 colonnes, mais on y peut pas grand chose. Si vous utilisez X vous pouvez élargir la fenêtre.

Voici le format général, sur une seule ligne :

fontdef [lout family] [lout face] [Postscript] [font-metric]
[file] [character map file] [Recode?]}

  • fontdef est la commande qui indique à lout que ce qui suit est la définition d'une police de caractère. Placez cela sur chaque ligne du fichier, c'est la première entrée et la seule commande à connaître pour installer une police.
  • [lout family] est le nom de famille de police grâce auquel vous ferez référence à toute la famille de polices. Vous pouvez le choisir. J'ai pris Charter.
  • [lout face] est le style de fonte. Le défaut, ou Roman, est appelé Base, Italics est appelé Slope, Boldface appelé Bold et Bold Italics est appelé BoldSlope. En théorie, vous pouvez changer cela, mais je ne vous le recommande pas, car sinon, certains raccourcis intégrés à lout ne fonctionneront plus. Il vous faudra donner à toute commande de changement de police sa forme complète.
  • [Postscript] est le nom officiel de la police pour Postscript. On le déduit des fichiers .afm, comme je l'ai dit dans la partie sur Postscript. Il est noté différement ici : il n'y a pas de / au début. Cette barre oblique relève du langage Postscript, et n'a rien à voir avec lout. Le nom Postscript comporte le nom de la famille et le nom de la fonte.
  • [font-metric file] est le nom du fichier que vous mettez dans LIBDIR/font, et qui contient les dimensions de la police.
  • [character map file] est le fichier qui indique à lout à quel endroit sur la table chaque caractère est situé. Pour les polices composées de caractères alphabétiques standards (sans symboles spéciaux) vous utiliserez LtLatin1.LCM.

    Les divers fichiers de caractères sont placés dans LIBDIR/maps, mais vous n'avez pas à vous en soucier tant que vous ne voulez pas quelque chose d'exotique. La plupart des familles de polices n'offrent pas de police de symboles, mais comptent sur celle fournie en standard avec Postscript, et lout se comporte en conséquence.

  • La dernière entrée, [Recode?], est composée du mot Recode, ou du mot NoRecode. Elle indique à lout s'il doit utiliser le mappage des caractères. À moins de vouloir faire quelque chose d'original, choisissez Recode.

Où placer les entrées pour votre nouvelle police ? Le fichier fontdef existant commence par toutes les définitions des polices contenues dans lout. Descendez jusqu'à ce que vous voyiez la dernière ligne commençant par fontdef et placez la vôtre juste en-dessous. Les commentaires sont signalés par un # au début de la ligne, donc votre entrée peut ressembler à ceci :

### Rajouté le 1er Decembre 1996
fontdef Charter Base {Charter BT-Roman CH-R LtLatin1.LCM Recode}
fontdef Charter Slope {Charter BT-Italic CH-I LtLatin1.LCM Recode}
fontdef Charter Bold {Charter BT-Bold CH-B LtLatin1.LCM Recode}
fontdef Charter BoldSlope {Charter BT-BoldItalic CH-BI LtLatin1.LCM Recode}

Voilà. Vos polices sont désormais installées. Maintenant, si vous commencez un document par :

@SysInclude{doc}
@Document
 @InitialFont{Charter Base 12p}
//
@Text @Begin

Il sera tapé dans la police Charter. La commande @I fera utiliser du Charter Italics, et ainsi de suite. Si vous utilisez des symboles spéciaux, ils viendront de la police de symbole installée par défaut dans lout.

Si vous êtes libres d'associer une famille de polices à n'importe quel fichier de police, comme pour une construction de police virtuelle dans TeX, vous pouvez donc choisir le Base de la famille toto, dont le nom officiel Postscript est toto-Roman, et le Slope de la famille titi, dont le nom officiel est titi-Italic. Si vous appelez cette nouvelle police nouveau-toto, votre entrée dans le fichier fontdefs ressemblera à cela :

fontdef nouveau-toto Base {toto-Roman ... fontdef nouveau-toto Slope {titi-Italic ...

C'est pratique, car certaines familles de polices n'ont pas toutes les fontes. Il suffit de remplacer celles qui manquent par d'autres dont vous disposez déjà. Les typographes font cela, et vous trouverez des livres qui indiquent celles qui vont bien ensemble.

Tout ce discours sur l'installation de polices n'est valable que si votre police est codée sur huit bits, donc que des mots de huit bits sont utilisés pour décrire chaque caractère dans la police, ce qui permet d'avoir 256 caractères. Si vous utilisez TeX, vous savez peut-être que la version originale utilisait seulement des mots de sept bits. Cela a changé dans les versions ultérieures, mais les polices Computer Modern n'ont pas été recodées. Ce qui fait que les polices standard de TeX n'ont que 128 caractères. Les caractères inutilisés en Anglais passent à la trappe : les divers accents, le L barré... Lout part du principe que ces caractères supplémentaires sont disponibles, et n'est pas préparé à faire des digrammes (on peut, bien sûr, écrire des macros pour cela). D'autres symboles dans les polices alphabétiques ordinaires sont présents dans la police de symbole Computer Modern, et il faut écrire des macros pour lui indiquer comment les trouver. Si vous installez une version Postscript de cette police, comme les polices gratuites BaKoMa, il vous faudra faire beaucoup plus de travail. Il y a un codage sur huit bits de cette police maintenant, appelée parfois « cork encoding », et quand une version Postscript en sortira, il sera facile de l'installer dans lout.

5.4 Conclusion

En deux mots, lout offre toutes les capacités de LaTeX en utilisant nettement moins de ressources. Il ne fait pas aussi bien lorsqu'il faut assembler les morceaux de grands délimiteurs, de grandes racines carrées, et ainsi de suite, mais il fait quand même du bon travail. La différence est suffisamment infime pour que ce ne soit pas un critère de sélection. Les trois programmes de formattage dont j'ai parlé se comportent bien pour le traitement de texte habituel, à savoir aller à la ligne et insérer des alineas et des coupes. Je ne fonderai pas mon jugement là-dessus non plus.

Lout me paraît travailler plus lentement que LaTeX à tâche égale, et a besoin de plus de temps pour gérer des renvois à d'autres fichiers, comme les références croisées. Si vous avez une machine lente, si vous faites de très gros documents contenant beaucoup de références croisées, de tables des matières... et si la rapidité est essentielle, vous trouverez peut-être que lout est trop lent pour vous. D'un autre côté, lout alloue la mémoire de façon dynamique, donc vous ne risquez pas d'être à court de mémoire en compilant un document complexe, comme cela arrive avec LaTeX.

Tout comme LaTeX, lout offre un balisage logique, et il est bien plus facile de personnaliser les fichiers d'apparence que les fichiers de style LaTeX. En revanche, TeX dispose de macros bien plus pratiques, que l'on peut écrire n'importe où dans le document, tandis qu'il faut les écrire dans un fichier du répertoire courant avec lout. Il semble qu'il y ait des commandes qui changent les règles de recherche, mais elles ne sont pas bien expliquées. C'est un très petit désagrément si l'on utilise un répertoire par document, ou si l'on regroupe les documents faisant appel aux mêmes macros, mais si vous conservez plusieurs documents nécessitant des macros homonymes des diverses fonctions dans le même répertoire, alors il vous faudra éditer les fichiers de layout. Cela complique l'envoi de documents en un seul fichier faisant appel à des macros définies par l'utilisateur. De toute façon, la plupart des gourous de TeX pensent que c'est une mauvaise idée de mettre toutes les macros dans un seul fichier. De la même manière, il est déconseillé de rassembler toutes les sources dans un seul fichier lorsqu'on programme un gros projet. Dans le cas de TeX, il y a assez de différences entre les distributions pour qu'un gros document doive être modifié un peu avant de se compiler ailleurs. Il est plus facile de résoudre ces problèmes si le document est divisé logiquement en modules. J'ai l'habitude de compresser par tar et gzip, et de coder par uuencode mes documents avant de les envoyer par courrier électronique. Cette méthode, qui permet au fichier de traverser toutes les passerelles, nécessite que l'interlocuteur ait une version d'uuencode, d'uudecode et de gunzip, mais ces programmes sont disponibles sur la plupart des plates-formes.

Parmi les trois traitements de texte que j'ai décrit, le LaTeX de base est celui qui brille le moins par ses capacités de dessin, tout au contraire de lout. Équipé de modules appropriés, il peut, tout comme lout, faire des transformations géométriques dans des boîtes first-class. Mais lout reste le plus polyvalent. Le module gpic inclus dans groff est le moins performant, mais le plus convivial, de loin, pour le dessin. On peut l'utiliser pour faire des dessins que l'on peut importer dans LaTeX en utilisant l'option -t pour utiliser la version GNU de tpic (qui, comme souvent, est plus performante que l'originale). Les dessins faits avec gpic peuvent être sauvegardés au format Postscript, et importés dans lout.

Vous devrez acheter la documentation de LaTeX : j'ai déjà mentionné les livres de référence pour ce programme, auxquels il faut ajouter le TeXbook de Donald Knuth, publié par Addison Wesley. Un nouvelle version de LaTeX2e sort tous les six mois, et il est donc impossible que les livres soit entièrement à jour. Les nouveaux modules sont en général fournis avec une documentation, mais elle est parfois très superficielle, et il faut bien connaître TeX pour la comprendre. On peut trouver des solutions aux problèmes dans les forums comp.text.tex ou fr.comp.text.tex. Les bons livres sur troff, et sur les macros mm en particulier, sont difficiles à trouver. Il n'y a pas de forum spécifiquement dédié à troff, et les discussions à ce sujet ont souvent lieu dans comp.text.

La documention de lout accompagne le programme. Le manuel d'utilisation est un livre qui vaut bien les manuels papier des autres traitement de texte. Il y a un guide pour l'utilisateur confirmé, si vous voulez aller plus loin. Les deux contiennent des exemples. J'ai divisé le premier en deux parties : la première comprend les chapitres 1 à 5, qui traitent du formattage des documents, la seconde comprend les chapitres 6 à 11, qui contiennent des informations sur les différents modules. On ne trouve pas de documentation sur lout dans les librairies : si vous n'aimez pas celle qui est fournie avec le programme, il n'y a pas d'alternative. Il y a parfois des discussions concernant lout dans comp.text, et il existe a une liste de discussion. Pour vous inscrire, envoyez un courrier électronique à lout-request@nlif.spb.su avec subscribe comme sujet.

Je n'ai pas beaucoup parlé de la correction des erreurs. Aucun des programmes n'est très clair dans ce domaine. lout et troff sont aussi silencieux l'un que l'autre, et ne diront quelque chose que si c'est nécessaire. Si lout rencontre une erreur, il vous donnera la ligne et la position où elle est détectée. troff ne dit rien, si ce n'est qu'il y a une erreur. Les modules d'écriture de macros contiennent des mécanismes pour signaler les erreurs, et le module mm est assez clair. TeX fait un commentaire en temps réel du traitement qu'il fait, et des fichiers qu'il lit. Quand il rencontre une erreur, il vous dit précisément où elle se trouve, ouvre une fenêtre interactive et propose plusieurs options pour corriger l'erreur. J'ai déjà parlé des plus interessantes. Cette activité incessante sur l'écran donne l'impression que TeX travaille plus vite que lout, qui vous laisse seul face à un écran vide jusqu'à ce qu'un problème se manifeste. De même que vous devrez apprendre comment écrire les balises, vous devrez apprendre à interpréter les messages d'erreur, ce qui vient avec le temps.

Il y a des « inconvénients extérieurs » à se servir de lout. Je veux dire qu'il est relativement récent et qu'il n'est pas encore très répandu. Tout d'abord, vous ne trouverez pas de « mode lout » pour Emacs. Bien que les fonctionnalités de dessin incluses dans lout soient très complètes, elles ont besoin d'être peaufinées. Par exemple, il est difficile de dessiner des « commutatives diagrams » dans la version actuelle du langage. J'aimerais qu'il y ait une façon plus intuitive d'assembler des blocs de dessins (cf. le chapitre 9 du manuel d'utilisation pour voir comment cela se fait actuellement).

L'autre « inconvénient extérieur » est la faible diffusion de lout chez les éditeurs, qui ne sont probablement pas équipés pour gérer du code lout. Pour les documents prêts à être photocopiés, ce n'est pas un problème, mais si l'épreuve doit être faite par l'imprimeur, tout le document devra être retapé. De même, si vous voulez envoyer un fichier source à un collègue, il devra avoir installé lout pour pouvoir le lire.

Globalement, tous ces problèmes peuvent se résoudre d'eux-même avec le temps. Qui sait, il y a peut-être quelqu'un en train d'écrire un mode lout pour Emacs ? En ce qui concerne les éditeurs, il faut savoir que, ces dernières années,j'ai pu entendre les récriminations de mathématiciens qui se plaignaient que tel ou tel n'acceptait pas les documents TeX formatés avec tel ou tel module de macros. La situation change quand le module gagne en popularité et que son utilité est démontrée.


Copyright 1998 Murray Adelman -- Publié dans le n°27 de la Linux Gazette

Adaptation française : Marc Simon.


Précédent Suivant Table des Matières