Comment utiliser Troff pour formater des documents PDF sous Linux

Troff est un processeur de texte minimal mais puissant pour les systèmes Linux. Il vous permet de créer facilement des documents prêts à imprimer en compilant des fichiers source depuis la ligne de commande. Contrairement à LaTeX, Troff est incroyablement léger et est préinstallé sur la plupart des systèmes Linux. Ce tutoriel vous montre comment utiliser Troff pour formater des documents PDF sous Ubuntu.
Table des matières
- Qu’est-ce que Troff et pourquoi l’utiliser
- Installer Troff
- Créer votre premier document Troff
- Comprendre le format Troff
- Créer du texte en gras, en italique et souligné
- Créer de nouvelles sections de document
- Créer des listes dans Troff
- Créer des tableaux avec des préprocesseurs dans Troff
- Questions fréquentes
Qu’est-ce que Troff et pourquoi l’utiliser
Dans un sens basique, Troff est un programme de traitement de texte qui convertit des scripts de type code en documents imprimables. Contrairement aux traitements de texte, Troff ne repose pas sur le paradigme “WYSIWYG”. Au lieu de cela, il nécessite que vous utilisiez des types spécifiques de code pour gérer votre mise en forme.

Un des plus grands avantages de cette approche est la simplicité. Une installation de base de Troff aura tout ce dont vous avez besoin pour créer un document. De plus, son absence d’interface graphique signifie que vous pouvez créer un document même via SSH.

Astuce : apprenez à transférer des applications GUI via SSH sous Linux.
Installer Troff
Troff est souvent inclus par défaut dans la plupart des distributions Linux. Vous pouvez vérifier si vous l’avez sur votre système en exécutant son drapeau -h. Cela affichera une brève liste de tous les drapeaux que votre installation de Troff accepte.
troff -h
Il existe des cas où les distributions n’incluent pas Troff par défaut. Dans ce cas, vous pouvez l’installer en recherchant le paquet “groff”.

Ceci est une réimplémentation des programmes Troff et Nroff par le projet GNU, qui inclut un certain nombre de nouvelles fonctionnalités modernes.
Vous pouvez installer groff sous Ubuntu en utilisant la commande suivante :
sudo apt install groff
Créer votre premier document Troff
Semblable au code source, chaque document Troff est un fichier texte qui contient des instructions sur la façon de créer un document. Celles-ci incluent la largeur de la page et des marges ainsi que l’espacement des lettres et des pages.

Ce niveau de contrôle vous permet de manipuler le programme pour créer n’importe quel type de document. Pour simplifier cela, les développeurs de Troff ont créé des “macros” qui condensent ces commandes dans une syntaxe plus simple.

Une des macros les plus courantes que vous utiliserez dans Troff est “ms”. Elle créera un document dans un style d’article. Vous pouvez créer un document ms en utilisant la commande touch :
touch my-first-document.msPuisque tous les documents Troff sont des textes, vous pouvez ouvrir votre document en utilisant un éditeur de texte. Dans mon cas, j’utilise vim. Alternativement, vous pouvez utiliser n’importe lequel de ces éditeurs de texte pour Linux.
vim my-first-document.ms
Comprendre le format Troff
Tous les documents Troff suivent une structure similaire. Chaque commande de mise en forme que vous effectuez doit être sur une ligne séparée dans le contenu qu’elle essaie de formater. Ainsi, un document Troff typique ressemblera à ceci :
.COMMAND1
Ceci est un morceau de contenu dans un document Troff.
.COMMAND2
Ceci est un autre morceau de contenu dans un document Troff.Deux des commandes les plus basiques que vous utiliserez dans ms sont .TL et .PP. La première convertit votre texte en titre et le centre dans votre document, tandis que la seconde formate votre texte pour suivre un style de paragraphe.
Par exemple, l’extrait suivant utilise à la fois les commandes .TL et .PP :
.TL
Mon premier document Troff
.PP
Ceci est un contenu que je veux avoir l'apparence d'un paragraphe dans mon document final. Ce n'est pas un contenu très long mais c'est mon premier document Troff et j'en suis fier. Il fait environ trois phrases et il devrait s'enrouler correctement autour du document.
À partir de là, créez votre document en passant votre fichier au programme Troff.
groff -ms-Tpdf ./my-first-document.ms > output.pdf
Astuce : si vous préférez quelque chose de plus simple, apprenez à écrire au format MLA dans Google Docs.
Créer du texte en gras, en italique et souligné
Tout comme un traitement de texte classique, la plupart des macros Troff fournissent un certain nombre de commandes de style pour personnaliser votre document. Pour ms, celles-ci sont .B, .I, .UL et .BX.
- La commande
.Bchange le texte en gras. - La commande
.Ichange le texte en italique. .ULet.BXsont des commandes qui dessinent un soulignement et une boîte autour de votre texte, respectivement.
Similaire aux commandes ci-dessus, l’utilisation de celles-ci dans votre document nécessite de séparer chaque style sur sa propre ligne :
.TL
Mon premier document Troff
.PP
Ceci est
.B
le contenu
.R
que je veux avoir l'apparence d'un paragraphe dans mon document final. [...]Dans cet exemple, j’ai créé une nouvelle ligne avant le mot “contenu” et ajouté la commande .B pour le changer en gras, puis créé une nouvelle ligne et ajouté la commande .R. Cela permet à Troff de revenir à son style précédent.

Il est important de noter que vous devez toujours ajouter la commande .R lorsque vous changez de style. Par exemple, l’extrait suivant ne terminera pas la commande .I puisque Troff n’a pas vu de .R après :
.TL
Mon premier document Troff
.PP
Ceci est
.I
le contenu
que je veux avoir l'apparence d'un paragraphe dans mon document final. [...]
Créer de nouvelles sections de document
Semblable à LaTeX, Troff prend également en charge les sections et la détection de hiérarchie, donc vous n’avez pas besoin d’organiser et de faire correspondre chaque niveau d’en-tête lorsque vous éditez.
Pour créer une nouvelle section dans votre document, utilisez la commande .NH suivie du nom de votre en-tête.
.TL
Mon premier document Troff
.NH
Mon premier en-tête
.PP
Ceci est un contenu que je veux avoir l'apparence d'un paragraphe dans mon document final.
Par défaut, chaque en-tête Troff a une valeur de niveau qui dicte comment le programme structure et affiche son contenu dans le document final. Sachant cela, vous pouvez changer cette valeur pour ajuster le niveau d’un en-tête.
Par exemple, le suivant crée un en-tête de niveau 2 immédiatement en dessous de son parent :
.TL
Mon premier document Troff
.NH
Mon premier en-tête
.NH 2
Mon premier sous-en-tête
.PP
Ceci est un contenu que je veux avoir l'apparence d'un paragraphe dans mon document final.
En plus des en-têtes numérotés réguliers, Troff peut également créer des en-têtes vides qui suivront toujours la hiérarchie de niveau du document.
Pour ce faire, remplacez .NH par la commande .SH :
.TL
Mon premier document Troff
.SH
Mon premier en-tête
.SH 2
Mon premier sous-en-tête
.PP
Ceci est un contenu que je veux avoir l'apparence d'un paragraphe dans mon document final.
Astuce : découvrez comment changer les marges dans Google Docs.
Créer des listes dans Troff
La simplicité de Troff vous permet également de plier son comportement à ce dont vous avez besoin. Par exemple, les listes ne sont pas incluses par défaut dans Troff ou les macros ms. Malgré cela, vous pouvez toujours créer une liste en combinant quelques commandes ms.
Chaque liste dans Troff se compose de trois parties : un retrait, une puce et le contenu. Pour créer le retrait, utilisez les commandes .RS et .RE. Celles-ci déplaceront le niveau de retrait actuel de tout texte à l’intérieur de quatre espaces.
.RS
Ceci est mon premier élément.
.RE
Ensuite, créez la puce pour votre élément de liste en utilisant .IP. C’est la commande “indent paragraph” qui fixe la marge gauche de votre texte à une certaine largeur.
La commande .IP vous permet également de définir un point de puce personnalisé et l’espace entre celui-ci et votre texte. Dans ce cas, je définis ma puce sur “[1]” et lui donnerai quatre espaces.
.RS
.IP [1]4
Ceci est mon premier élément.
.RE
Maintenant, copiez et collez votre commande .IP pour créer des éléments de liste supplémentaires.
.RS
.IP [1]4
Ceci est mon premier élément.
.IP [2]4
Ceci est mon deuxième élément.
.IP [3]4
Ceci est mon troisième élément.
.RE
Enfin, automatisez ce processus en créant une macro personnalisée. Par exemple, l’extrait suivant lie ma commande .IP à .QW :
.de QW
.IP [-]4
..
.RS
.QW
Ceci est mon premier élément.
.QW
Ceci est mon deuxième élément.
.QW
Ceci est mon troisième élément.
.RE
Créer des tableaux avec des préprocesseurs dans Troff
Une particularité de Troff est que la plupart de ses fonctionnalités existent sous forme de “préprocesseurs”. Pour la plupart, ce sont des binaires en dehors du programme qui fonctionnent en créant des “scripts de conteneur de préprocesseur” et en les convertissant en code Troff de bas niveau.

Tbl est un excellent exemple d’un préprocesseur Troff. C’est un programme qui gère les tableaux dans un document. Un conteneur Tbl de base ressemble à ceci :
.TS
allbox ;
c c c.
element1 element2 element3
element4 element5 element6
.TE - Les commandes
.TSet.TEindiquent à Tbl que c’est un environnement qu’il peut lire. - La deuxième ligne indique au programme comment formater ce tableau.
- La troisième ligne est un champ séparé par des espaces qui dicte le nombre de colonnes et leur alignement dans votre tableau.
- Les quatrième et cinquième lignes sont des champs séparés par des tabulations qui contiennent le contenu de votre tableau.

Compiler un document avec Tbl est légèrement différent d’un fichier Troff régulier. Tout d’abord, chargez votre fichier :
tbl my-first-document.ms > preprocessed.msEnsuite, alimentez la sortie du programme à Troff :
groff -ms-Tpdf ./preprocessed.ms > output.pdfEnfin, automatisez ce processus en utilisant des pipes UNIX :
tbl my-first-document.ms | groff -ms-Tpdf> output.pdf
Bon à savoir : apprenez-en plus sur les pipes UNIX et la redirection de fichiers avec sed.
Questions fréquentes
Est-il possible d’utiliser Troff sous Windows ?
Par défaut, ni Troff ni Groff ne sont officiellement portés sous Windows. Malgré cela, vous pouvez toujours utiliser Groff avec d’autres utilitaires GNU en installant le Sous-système Windows pour Linux.
Troff a-t-il une fonctionnalité de suivi de bibliographie ?
Oui. Refer est un préprocesseur simple qui utilise un fichier de bibliographie externe pour suivre automatiquement les références dans un document Troff. Vous pouvez en apprendre davantage sur son fonctionnement en visitant sa page de manuel en exécutant man refer.
Comment puis-je corriger l’erreur “DESC manquant” lors de la compilation de Troff ?
Ce problème est probablement dû à une dépendance manquante dans votre système ou à un fichier de version incompatible. Pour résoudre cela, installez le paquet groff approprié à partir du dépôt de votre distribution.
Crédit image : Simon Hattinga Verscheure via Unsplash. Toutes les modifications et captures d’écran par Ramces Red.