Utiliser groff
Introduction
Comme Monsieur Jourdain fait de la prose, la plupart des nouveaux utilisateurs et utilisatrices de notre OS libre préféré utilisent un puissant outil de formatage et génération de documents. Cet outil a tendance à se faire oublier, tellement il est discret malgré sa participation vitale au quotidien de tout utilisateur ou utilisatrice, et cela concerne même les plus chevronné(e)s. Cet outil, c'est groff
Que peut-on faire avec groff ?
La commande groff permet à partir d'une même source de :
- générer des documents mis en page : livre, lettre, documentation, rapport...etc.
- créer des images de ces documents en format : postscript, man (Latin 1 formatés), html, dvi, Textes (Latin1 formatés)...
Quelles sont ses origines ?
Au départ, cet environnement de formatage de documents appelé troff a été développé en assembleur par Joe Ossanna vers 1973, pour piloter une imprimante graphique (Graphic System CAT Typesetter) branchée sur un bon vieux PDP-11. Il fut porté en C vers 1975, mais malheureusement, Joe Ossanna décède en 1977.
C'est le célèbre Brian Kernighan qui reprend le flambeau en 1979 et modifie troff afin de le rendre compatible avec d'autres formats de sortie. de 1979 à 1989, les sources de troff ont été modestement retouchées de manière à laisser la quasi totalité du code intacte en mémoire de Joe Ossanna.
groff est donc en quelque sorte une oeuvre postume trouvant ses d'origines à quelques pas de l'OS UNIX. Cet utilitaire extrèmement efficace est aujourd'hui porté sur les systèmes d'exploitations les plus novateurs tels que plan 9, inferno ou encore Amoeba. Dans ces différents portages, il se fait parfois appeler roff, nroff, troff, mais est toujours présent sur tout système de philosophie UNIX.
Il présente parfois de légères différences selon les spécificités des plateformes afin d'en tirer le meilleur parti, mais semble toujours compatible car les développeurs d'environnement ont prévu des équivalences afin de toujours pourvoir générer des documents propres. Même MINIX célèbre petit OS didactique développé par Andrew Tenenbaum (MINIX mais il fait le maximum...) dispose de cette commande !
Les forces et faiblesses de groff
Forces :
- Très rapide à assimiler comparé a son 'grand frêre' LATEX.
- Grande robustesse et génération toujours fidèle aux attentes de l'utilisateur.
- Très léger, il permet un traitement rapide des informations même sur des petites configurations ne *disposant pas d'une interface X-Windows.
- Personnalisable
Faiblesses : (il en faut bien pour rester objectif)
- Son langage macro est un peu rébarbatif (mais après un petit effort, il devient vite familier).
- Un peut plus rigide que LATEX losque l'on souhaite personnaliser un document.
- Peu de documentations sont disponibles étant donné son grand âge.
Un exemple ! un exemple ! un exemple...
Comme mentionné précédemment, groff est présent sur votre ordinateur, et vous disposez déjà d'exemples sources ! Il vous suffit par exemple d'ouvrir un fichier de type man, pour cela, il vous suffit de choisir un petit exemple parmis les centaines de documentations man.
Comment procéder ?
- Trouver l'emplacement des sources des fichiers de documentations du système.
- Copier une commande dans votre répertoire de travail habituel.
- Décompresser le fichier.
- Ouvrir le fichier dans votre édteur de texte habituel.
- Contempler...
En pratique
Bien que je sois persuadé que la plupart d'entre-vous ont directement "switché" en mode console et sont déjà en train de tripatouiller un fichier juste pour voir, je vous donne ici les grandes directions qui vous permettrons de trouver ces fichiers.
Trouver les fichiers sources man
Vous pouvez les chercher à la main, en changeant de répertoire. Généralement, on les trouve dans les parages de /usr/man ou encore /usr/share/man ou encore /usr/local/man et bien d'autres endroits.
Choisissez un répertoire parmi man1,man2,...,mann situés dans le répertoire /.../man/ ou /.../man/fr/.
[mujma@localhost]#ls -l /usr/share/man
total 300
drwxr-xr-x 4 root root 4096 aoû 17 20:12 bg
drwxr-xr-x 2 root root 4096 aoû 17 20:26 cat1
drwxr-xr-x 2 root root 4096 aoû 17 20:26 cat5
drwxr-xr-x 5 root root 4096 aoû 17 20:12 cs
...
drwxr-xr-x 11 root man 4096 aoû 17 20:16 fr
...
drwxr-xr-x 2 root root 40960 nov 16 22:51 man1
drwxr-xr-x 2 root root 4096 jan 5 2004 man2
drwxr-xr-x 2 root root 114688 nov 8 08:47 man3
drwxr-xr-x 2 root root 4096 aoû 18 14:23 man4
drwxr-xr-x 2 root root 8192 nov 16 22:51 man5
drwxr-xr-x 2 root root 4096 aoû 17 20:20 man6
drwxr-xr-x 2 root root 4096 oct 20 18:20 man7
drwxr-xr-x 2 root root 12288 nov 2 15:07 man8
drwxr-xr-x 2 root root 4096 jan 5 2004 man9
drwxr-xr-x 2 root root 8192 aoû 17 20:29 mann
drwxr-xr-x 5 root root 4096 aoû 17 20:12 nl
...
drwxr-xr-x 4 root root 4096 aoû 17 20:12 sl
drwxr-xr-x 3 root root 4096 aoû 17 20:10 uk
En listant le répertoire désiré on obtient donc la liste des commades :
[mujma@localhost]#ls -l /usr/share/man/fr/man1/
total 4036
-rw-r--r-- 1 root man 962 jan 31 1999 3ds2m.1.bz2
-rw-r--r-- 1 root man 967 jul 03 1999 3dsdump.1.bz2
-rw-r--r-- 1 root man 1641 jun 13 2001 9wm.1.bz2
...
-rw-r--r-- 1 root man 6531 aoû 10 2003 ls.1.bz2 <-------- On va copier ce fichier dans le répertoire $HOME
...
-rw-r--r-- 1 root man 2251 apr 08 1989 zmore.1.bz2
-rw-r--r-- 1 root man 751 apr 08 1989 znew.1.bz2
Enfin on peut copier le fichier et le décompresser :
[mujma@localhost]#cp /usr/share/man/fr/man1/ls.1.bz2 $HOME
[mujma@localhost]#bunzip2 ls.1.bz2
Ouvrir un exemple
Enfin, si on ouvre ce fichier dans un éditeur de texte on obtient :
.\" Traduction 19/12/1996 par Christophe Blaess (ccb@club-internet.fr)
.\" màj 04/01/1999 - LDP man-pages 1.22
.\" màj 03/01/2000
.\" màj 26/06/2000 - LDP man-pages 1.30
.\" màj 30/05/2001 - LDP man-pages 1.36
.\" màj 22/10/2002 - LDP man-pages 1.53
.\" MàJ 25/07/2003 LDP-1.56
.TH LS 1L "25 juillet 2003" LDP "Manuel de l'utilisateur Linux"
.SH NOM
ls, dir, vdir \- Afficher le contenu d'un répertoire.
.SH SYNOPSIS
.BI "ls [" options "] [" fichier... ]
.br
.BI "dir [" fichier... ]
.br
.BI "vdir [" fichier... ]
.sp
Options POSIX :
.BI "[\-CFRacdilqrtu1] [\-\-]"
.sp
Options GNU (forme courte) :
.B [\-1abcdfgiklmnopqrstuvwxABCDFGHLNQRSUX]
.BI "[\-w " cols ]
...
Cette page documente la version de
.B ls
du paquetage fileutils-4.0. D'autres versions peuvent diverger légèrement.
.SH TRADUCTION
Christophe Blaess, 1996-2003.
Faire un petit tour de groff
Avant de réellement comprendre la signification des codes étranges et barbares parfois situés en début de ligne, je vous invite maintenant à quitter votre éditeur pour rejoindre votre console.
Nous allons maintenant faire quelques manipulations pratique sur le fichier ls.1 que nous avons recopier tout dernièrement dans notre répertoire de travail habituel.
Tapez la commande suivante :
[mujma@localhost]#groff -Tps -man ls.1 > ls.1.ps
Si groff est correctement installé (et il y a 99,9% de chances qu'il le soit), vous devriez voir apparaître le fichier ls.1.ps dans le répertoire courant.
Vous pouvez le visualiser avec n'importe quel afficheur postscript.
Maintenant nous allons faire encore plus fort ! Pour cela tapez la commande :
[mujma@localhost]#groff -Thtml -man ls.1 > ls.1.html
De manière identique à la commande précédente, vous venez de générer un fichier html. Ouvrez-le vite... Oui, c'est bien la documentation au format html. Vous pouvez procéder ainsi avec toutes les pages de manuel linux ! En fait, groff est un préprocesseur. Il permet de générer les formats suivants à partir d'une seule source :
- dvi
- Pour ceux qui connaissent, c'est le format TeX/LaTeX DVI.
- html
- c'est le format bien connu dont le nom signifie Hyper Text Markup Language et non, contrairement à ce que certains sous entendent parfois Hautes Technologies Mais Limitées.
- lbp
- Format CAPSL pour les imprimantes laser Canon de type lbp-4 ou lpb-8.
- lj4
- Format PCL5 pour imprimantes HP et compatibles.
- ps
- Du vrai postscript bien de chez nous !
- ascii
- C'est le format ASCII 7-Bits, je le testerai peut-être cet hiver s'il y a de la neige.
- cp1047
- Historiquement destiné à certains serveurs internet et autres mainframes qui n'ont toujours pas étés concurrencés par un certain Bill G. qui impose au monde le cp1250 dans les clicodrômes vitrés depuis la version nonante cinq , mais aussi langage natif de l'imprimante qui vous sert peut-être aujourd'hui de bac à fleurs, ce format implémente le jeux de caractères latin-1 en EBCDIC.
- latin1
- C'est le jeu de caractères ISO 8859-1 utilisé par exemple pour afficher des symboles mystérieux appartenant à l'obscur langage qu'étaient le François et le Français. On notera au passage qu'il offre aussi l'avantage d'afficher des messages en "verlan" et en "nique ta m..." ou encore "nique ta r..." dialectes évolués de notre époque concurrençant le "slang" parlé dans les prisons anglo-saxonnes.
- utf8
- C'est le jeu de caractères Unicode UTF-8, similaire à celui du bios de votre machine.
groff et ses environnements
Si l'on se réfère à l'invocation de groff dans l'exemple précédent, groff est invoqué avec 3 paramètres en ligne de commande.
groff -Thtml -m man ls.1 > ls.1.html
de manière plus générale on peut invoquer groff de la manière suivante :
groff -T'<format_sortie>' -m '<format_entrée>' > ls.1.html
'<format_sortie>' correspond aux formats de sorties évoqués précédemment.
'<format_entrée>' correspond au format utilisé pour écrire le source.
Pour groff un format de sortie ou un format d'entrée n'est ni plus ni moins qu'un ensemble de macros correspondant à des environnements.
On trouve généralement les environnements (ou format d'entrée) suivants avec le paquet groff :
Les environnement macro dédiés au système de documentation :
- man
- format traditionnel des pages de manuel.
- mdoc
- format BSD des pages de manuel.
- mandoc
- cet environnement encapsule man et mdoc et permet de reconnaître le format du fichier d'origine automatiquement.
Pour des documents plus courants :
- me, mm et ms
- des environnements de génération de documents plus classiques (livres, rapports...).
Pour générer des pages Web :
- www
- pour générer des documents 'HTML'.
Où peut-on trouver des informations sur groff
Les sites suivants vous apporterons diverses ressources pour groff:
- http://www.gnu.org/software/groff/groff.html
- http://www.troff.org/
- http://www.kohala.com/start/troff/troff.html
Copyright
© 2005 Marc UJMA
Ce document est publié sous licence Creative Commons Attribution, Partage à l'identique 4.0 : https://creativecommons.org/licenses/by-sa/4.0/ |