Présentation
L’auteur a utilisé groff, le système de composition traditionnel des pages de manuel Linux, pour créer deux novellas de 50 et 120 pages. Sur un PC de 13,5 ans, la génération du PDF de 50 pages dure 700 ms et celle du document de 120 pages 1,6 s. Ces temps incluent le pré‑traitement décrit plus bas et montrent que le moteur reste très réactif comparé à des éditeurs graphiques modernes.
Architecture du macro‑package
Le projet repose sur un petit paquet de macros défini dans macros.groff. Trois macros suffisent :
.de SH
. sp 1v
. ps +5p
. ce
\f[HR]\\$1\fP
. ps
. sp 4v
..
.de PP
. br
. ti +2m
..
.de LP
. sp 2v
...SH crée un titre centré avec une police Helvetica agrandie, .PP produit un paragraphe à retrait suspendu et .LP insère un espace vertical supplémentaire. Aucun sommaire, aucune référence croisée, aucun tableau n’est requis pour un texte narratif, ce qui explique la légèreté du package.
Performances et limites
Le temps de rendu dépend principalement du nombre de pages et du nombre de macros invoquées. Le test indique que le moteur gère ≈ 70 pages / s sur le matériel indiqué. Cette vitesse provient du fait que groff travaille en texte brut et ne charge pas de bibliothèques graphiques lourdes. Cependant, l’absence de fonctionnalités avancées (index, gestion fine des colonnes) impose à l’auteur de coder manuellement des mécanismes comme le pied de page.
Gestion des pieds de page
Le pied de page est implémenté via un registre et un « trap » placé à 5 v avant le bas de la page :
.nr _FooterSize 5v
.wh -\n[_FooterSize]u _FooterTrap
.de _FooterTrap
. ev _FooterEnv
. evc 0
. if \\n[%]>2 {\
. sp |\\n[.p]u-2v
. ce
\\fR\\n[%]\\fP
. }
. ev
' bp
..Le registre _FooterSize stocke la hauteur du pied de page. La commande .wh crée un point d’ancrage qui déclenche _FooterTrap lorsqu’une ligne dépasse ce seuil. Le trap vérifie le numéro de page (\n[%]) et, à partir de la page 3, centre le numéro avant d’insérer un saut de page (' bp). L’utilisation du caractère apostrophe au lieu de .bp évite une récursion infinie, car le trap ne doit pas être ré‑activé par le saut de page qu’il génère.
Cette approche montre comment groff, malgré son âge, permet de contrôler précisément la mise en page via des registres et des environnements. La principale contrainte reste la complexité de la documentation : le comportement de certaines unités (u) et de la syntaxe de trap n’est pas toujours explicite, ce qui oblige l’auteur à expérimenter.