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 detroff
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 delout
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 fichierlout.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
(viatar -zxpf lout.3.08.tar.gz
) vous obtiendrez, dans le répertoirelout.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 formata.out
avec un kernel 1.2.3 et au formatELF
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épertoiresBINDIR
,LIBDIR
,DOCDIR
etMANDIR
. Si vous êtesroot
, vous pouvez les définir comme vous le souhaitez, si ce n'est que les répertoiresBINDIR
etMANDIR
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/man1Si vous voulez l'installer dans un endroit moins conventionnel, créez d'abord les répertoires
BINDIR
etMANDIR
.La plupart des autres macros doivent être laissées telles quelles. Assurez-vous que
OSUNIX
vaut 1 et queOSDOS
etOSMAC
valent 0 (zéro), comme c'est le cas chez moi :
OSUNIX = 1 OSDOS = 0 OSMAC = 0Si vous souhaitez que
lout
supporte les localisations françaises et allemandes, lisez la documentation des macrosUSELOC
etLOC_XX
, oùXX
est remplacé parFR
ouDE
. Pour n'utiliser que l'anglais, vous devez avoir :
CHARIN = 1 CHAROUT = 0 USELOC = 0 #LOC_FR = fr #LOC_DE = deDé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épertoireDOCDIR/user
. En les suivant, vous obtiendrez un fichier Postscript appelé «op
». Je l'ai rebaptisé «users.ps
» et je le garde définitivement dansDOCDIR/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'installerghostview
si vous voulez utiliser intensivementlout
. 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écompressezlout.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 fichiersample.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 @TextPuis tapez :
lout sample.lt > sample.psVous 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
etsample.ps
. Vous pouvez alors visualiser ou imprimer le fichiersample.ps
. J'ai ajouté un certain nombre d'effets integrés danslout
et qui devraient être visibles. Je ne dis pas que d'autres formatteurs sont incapables de faire de même, maislout
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èresespace, tab
etnewline
. 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 fichiersample.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 delout
. 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 desample.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 parred@Color
, la chaîne serait écrite telle quelle, sans avertissement. Il n'y a pas de commande\Color
dans leTeX
standard, mais s'il y en avait une et que vous écriviezred\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 commandeColor
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 lettrea
.
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é deWorld
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 fichierdoc
dans le répertoireLIBDIR/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
etdl
, 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 aliaslout
, pointant vers «lout -I ~/mes_fichiers
». Ainsilout
cherchera automatiquement dansmes_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 motsHello 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 delout
 : 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éthodetroff
ou la méthodeTeX
au lieu de la méthode par défaut. La seconde transforme systématiquement toute suite d'espace en un seul. Contrairement au vraiTeX
, 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
deTeX
, 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 danslout
, mais vous pouvez deviner qued
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 delout
, 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'optionpaint
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 carwhite
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 quetroff
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 faisant1.2f @Font
. L'unitef
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
etsample.lt
sur votre disque, vous pouvez visualiser ce dernier en faisantlout sample.lt > sample.ps
, puisghostview 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 pourtroff
. Le module d'équation est très semblable àeqn
, et les exemples que j'ai donné pourtroff
devraient fonctionner tels quels aveclout
. Dans le chapitre sur l'installation, je vous suggérai fortement de vous procurerlout.teq.2.0.tar.gz
. C'est un module d'équation modifié qui utilise les policesComputer 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 delout
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 delout
.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é quetbl
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 versionslout
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 detroff
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 delout
sont entre les deux. Elles sont plus faciles à utiliser pour l'utilisateur moyen que le modulexypic
deTeX
.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 deTeX
, 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'alout
de placer les objets à droite des précédents, il n'y a pas moyen de faire l'équivalent du\vskip
deTeX
. 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 fichiermes_macros
, lu automatiquement quandlout
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 dansmes_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 pourThe
avec unT
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 commentlout
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 dansmes_macros.lt
et la commande qui l'invoque dans le fichier source. Ce comportement récursif est utilisé plus sérieusement danslout
. 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
commeLaTeX
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 stylesdoc, report, book
etslides
.Doc
convient aux documents simples comme des articles scientifiques.Report
est utilisé pour les rapports techniques.Book
est prévu, évidemment, pour les livres etslides
pour faire des transparents pour rétroprojection. Si vous avez une imprimante couleur, vous profiterez pleinement du styleslides
delout
. 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 danstroff
, 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 macrosmm
detroff
(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. CopiezLIBDIR/include/doc
dans votre répertoire de travail, et appelez-letroffdoc
. É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 remplacez12p
par10p
. Maintenant la police a une taille de 10 points par défaut. Allez jusqu'à@ParaIndent
, décommentez-la et remplacez2.00f
par0f
. 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 remplacezBold
parSlope
. 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 fichiertroffdoc
dansLIBDIR/include
ou modifiezdoc
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
ettroff
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 moduleteq
, 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 deLaTeX
ettroff
. Pour modifier l'espacement au dessus et en-dessous des titres danslout
, 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 dansLaTeX
et danstroff
.
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 fichierLIBDIR/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 undoc
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 modulefancybox
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 delout
. La documentation de certains d'entre eux est insuffisante. Rappelez-vous toutefois queLaTeX2e
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'unf
(remplacez@SysInclude{doc}
par@SysInclude{docf}
) à la ligne (1) desample.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 pasLaTeX
.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
oupfb
. Ils ne concernent paslout
, et doivent être installés dans votre imprimante Postscript. Ensuite vous devez avoir un ensemble de fichiers de dimensions. Ceux-là sont utilisés parlout
. Ils ont l'extension.afm
, qui signifie « Adobe font metrics ». Ils n'ont pas besoin d'être modifiés pourlout
.Je vais continuer à utiliser
LIBDIR
pour désigner le répertoire dans lequel les librairies delout
ont été installées (/usr/local/lib/lout/
par défaut). Les fichiers de dimensions sont placés dansLIBDIR/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éeTI-Rm
et Times ItalicTI-It
. Pour que les choses soient aussi concrètes que possible, je vais utiliser l'exemple des policesCharter
.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, leb
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 appelerCH-R, CH-I, CH-B
et CH-BI dans l'installation delout
. Je copie les fichiers dansLIBDIR/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, dansTeX
ougroff
, 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 fichierfontdefs
. 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, ouRoman
, est appeléBase
,Italics
est appeléSlope
,Boldface
appeléBold
etBold 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 aveclout
. 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 dansLIBDIR/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 utiliserezLtLatin1.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, etlout
se comporte en conséquence.- La dernière entrée,
[Recode?]
, est composée du motRecode
, ou du motNoRecode
. Elle indique àlout
s'il doit utiliser le mappage des caractères. À moins de vouloir faire quelque chose d'original, choisissezRecode
.Où placer les entrées pour votre nouvelle police ? Le fichier
fontdef
existant commence par toutes les définitions des polices contenues danslout
. Descendez jusqu'à ce que vous voyiez la dernière ligne commençant parfontdef
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 @BeginIl 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 danslout
.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 fichierfontdefs
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 deTeX
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 danslout
.5.4 Conclusion
En deux mots,
lout
offre toutes les capacités deLaTeX
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 queLaTeX
à 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 quelout
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 avecLaTeX
.Tout comme
LaTeX
,lout
offre un balisage logique, et il est bien plus facile de personnaliser les fichiers d'apparence que les fichiers de styleLaTeX
. 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 aveclout
. 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 deTeX
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 deTeX
, 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 partar
etgzip
, et de coder paruuencode
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 degunzip
, 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 delout
. Équipé de modules appropriés, il peut, tout commelout
, faire des transformations géométriques dans des boîtes first-class. Maislout
reste le plus polyvalent. Le modulegpic
inclus dansgroff
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 dansLaTeX
en utilisant l'option-t
pour utiliser la version GNU detpic
(qui, comme souvent, est plus performante que l'originale). Les dessins faits avecgpic
peuvent être sauvegardés au format Postscript, et importés danslout
.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 deLaTeX2e
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 forumscomp.text.tex
oufr.comp.text.tex
. Les bons livres surtroff
, et sur les macrosmm
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 danscomp.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 surlout
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 concernantlout
danscomp.text
, et il existe a une liste de discussion. Pour vous inscrire, envoyez un courrier électronique àlout-request@nlif.spb.su
avecsubscribe
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
ettroff
sont aussi silencieux l'un que l'autre, et ne diront quelque chose que si c'est nécessaire. Silout
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 modulemm
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 queTeX
travaille plus vite quelout
, 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 « modelout
» pourEmacs
. Bien que les fonctionnalités de dessin incluses danslout
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 codelout
. 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
pourEmacs
? 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 documentsTeX
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