URL: https://linuxfr.org/news/utroff-la-renaissance-de-troff Title: Utroff : la renaissance de Troff Authors: Sygne ZeroHeure, Benoît Sibaud et palm123 Date: 2013年11月04日T11:48:31+01:00 License: CC By-SA Tags: utroff, troff et éthique Score: 42 Troff est un vénérable logiciel de formatage de texte hérité d'Unix. Plusieurs versions de Troff coexistent aujourd'hui, dont celle du [projet Heirloom](http://heirloom.sourceforge.net), qui a ajouté à Troff des fonctionnalités typographiques modernes. Dans l'esprit du projet Heirloom, [Utroff](http://utroff.org) retravaille l'ensemble des logiciels qui accompagnent Troff pour nous permettre d'utiliser efficacement celui-ci aujourd'hui. Pour la sortie de la première version publique d'Utroff, cette dépêche propose une réponse aux deux questions que vous ne manquerez pas de vous poser : « pourquoi utiliser Troff aujourd'hui ? » et « pourquoi choisir Utroff ? ». ---- [Le site d'Utroff](http://utroff.org) [Télécharger Utroff-0.1.tar.gz](http://download.tuxfamily.org/utroff/pub/utroff-0.1.tar.gz) [Journal annonçant la beta d'Utroff](https://linuxfr.org/users/sygne/journaux/utroff-est-publie) [Dépêche sur l'histoire de Troff](https://linuxfr.org/news/a-la-recherche-des-sources-de-troff) ---- # Pourquoi utiliser Troff aujourd'hui ? # ## Le logiciel libre et le projet Heirloom ## Alors que le logiciel libre est généralement plébiscité pour des raisons techniques ou éthiques, le [projet Heirloom](http://heirloom.sourceforge.net), dont Utroff est largement inspiré, a ceci de singulier qu'il utilise les libertés offertes par les licences libres pour des raisons esthétiques et nostalgiques. Le but du projet Heirloom n'est pas tant de donner à l'utilisateur plus de libertés ou de meilleurs outils que de lui offrir un petit moment de nostalgie en lui permettant d'utiliser les bons vieux outils d'Unix. Ce n'est pourtant pas un musée du logiciel, mais une mise à jour des outils d'antan :> « The Heirloom Project is not a software museum; it does not attempt to preserve utilities unmodified. Rather, it keeps stylistic, algorithmic, and interface aspects intact while modernizing the framework as appropriate. » Ainsi, par-delà cette nostalgie, le projet Heirloom montre que ces antiques outils conservent des qualités non négligeables aujourd'hui, de sorte que ce projet nous invite à reconsidérer notre point de vue sur le progrès en matière informatique. ## L'ergonomie d'Unix et le langage ## L'ergonomie d'Unix consiste, selon certains, à utiliser le [langage comme interface](http://theody.net/elements.html), et Troff exploite mieux que tout autre logiciel cette ergonomie : à chaque format de données (équation, diagramme, table, référence...) correspond un [mini-langage](http://www.faqs.org/docs/artu/ch08s02.html#id2934197). Ainsi Troff s'utilise en passant le fichier source à travers de multiples filtres qui interprètent chacun de ces mini-langages. À l'usage, il apparaît que l'interface langagière qui est celle d'Unix est particulièrement adaptée au travail des textes. En effet, outre qu'elle nous donne accès à des possibilités technologiques, cette ergonomie structure la pensée. En apprenant à utiliser l'outil, on apprend quelque chose sur la structure des données qu'on manipule, et corrélativement, la pensée découvre de nouvelles façons de se structurer en découvrant de nouvelles structures symboliques. La pratique d'une interface texte aiguise ainsi le regard analytique que l'on doit porter sur le texte. Il y a donc un plaisir et un intérêt, pour qui aime l'analyse des textes, à travailler avec ces vieux outils pensés pour la ligne de commande. ## La philosophie Unix et la question de la maîtrise ## Le logiciel libre se donne pour objectif d'offrir à l'utilisateur la possibilité de maîtriser son outil informatique. Mais dans les faits, la complexité des logiciels d'aujourd'hui fait qu'il est difficile de mettre en pratique ces libertés de droit. Il se trouve que les vieux outils Unix souffrent moins de cette difficulté : marqués par l'idée « un programme, une tâche », ils sont construits à la manière d'un ensemble de multiples petits logiciels, aux dépendances minimales, et sont pour cela bien plus faciles à modifier que leurs équivalents contemporains. Ainsi, Troff est le seul logiciel de formatage de texte que je sois capable de maîtriser parfaitement. Si Troff est susceptible d'être maîtrisé, ce n'est pas seulement parce qu'il est accompagné d'un ensemble d'outils hackables, c'est aussi parce que c'est un langage simple et bien documenté. La [documentation exhaustive de Troff](http://heirloom.sourceforge.net/doctools/troff.pdf) est claire et ne dépasse pas les soixante pages, quant au langage, quoique sa syntaxe puisse paraître étrange, il est tout à fait accessible, même aux débutants en programmation. # Pourquoi choisir Utroff ? # ## Le détail en typographie avec Heirloom Troff ## Deux algorithmes permettent de composer des textes avec un rendu typographique de qualité : l'ajustement paragraphe par paragraphe, qui calcule l'espace inter-mots sur l'ensemble du paragraphe plutôt que ligne après ligne, et la micro-typographie, qui modifie d'un ou deux pour cent la taille des glyphes pour uniformiser visuellement l'espace inter-mots. Ces algorithmes ont été créés pour Tex et PdfTex, puis repris par les logiciels de PAO du marché, mais aussi par [Heirloom Troff](http://heirloom.sourceforge.net/doctools.html). C'est bien parce que Heirloom Troff incorpore ces algorithmes qu'il produit des textes dont la qualité typographique est, potentiellement, équivalente à celle de LaTex. Cependant, Heirloom Troff ne fournit aucune macro qui permette d'utiliser ces algorithmes simplement. C'est d'abord pour combler ce manque que Utroff a été créé. ## La simplicité des macros Utmac ## S'il est possible de composer un document en Troff pur, il est bien plus simple d'utiliser des macros qui définissent le format des éléments les plus fréquents et s'occupent de la mise en page. [Utmac](htpp://utroff.org/tmac.html), l'ensemble de macros créées pour Utroff, suit quelques principes ergonomiques : - Toutes les macros utilisent le même langage, de sorte qu'un même document peut être exporté en plusieurs formats et selon plusieurs mises en page, sans qu'il soit nécessaire d'en modifier les sources. Les formats d'export sont : postscript (donc pdf), README, man, xml, html, fodt (_flat open document texts_), markdown et tty (en cours). Deux mises en page sont actuellement disponibles : l'une est dédiée aux textes littéraires longs (les thèses), et l'autre à la documentation technique. Une macro dédiée aux lettres et aux CV est en cours de création. - Les macros gèrent d'office les besoins les plus fréquents : sommaire, table des matières, liens internes, index, références, coloration syntaxique, recto-verso. - Outre qu'elles utilisent les algorithmes d'Heirloom Troff dédiés à la typographie, elles respectent les bonnes pratiques en matière de mise en page : principe de grille, principe de ligne, et ortho-typographie. Elles repèrent et mentionnent veuves et orphelines et fournissent des outils pour les faire disparaître. - Elles n'ont que peu d'options de configuration. D'une part parce que leur mise en page est censée être adaptée au besoin, et d'autre part parce que pour un besoin spécifique la bonne pratique consiste à créer une macro spécifique, généralement en adaptant une macro existante. Le format des macros est documenté dans le [manuel d'Utmac](http://utroff.org/man/utmac.html). ## Le formatage des références bibliographiques avec Refer ## Il existe une norme internationale définissant la structure que doivent avoir les références bibliographiques, qu'elles soient indiquées en bas de page ou en fin d'ouvrage : la norme [ISO-690](http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=43320), dont Rositza Kyheng propose un [résumé](http://www.revue-texto.net/Reperes/Themes/Kyheng_References.html). Largement ignorée, souvent confondue par les universitaires avec une norme réservée aux bibliothèques, cette norme est néanmoins la seule qu'éditeurs et universitaires devraient respecter. Refer, le logiciel dédié au formatage des références bibliographiques, a été modifié pour qu'il puisse respecter cette norme. En particulier, puisque la norme ne fait que définir l'ordre des champs, c'est l'algorithme de tri des références qui a été adapté. À ces modifications s'ajoutent une macro (u-ref), incluse dans les macros Utmac, offrant la possibilité d'utiliser proprement une police contenant de vraies petites capitales, la gestion des champs dédiés aux références électroniques (url, format, date de consultation, ...), le remplacement par « idem » ou « op. cit. p. xx », et la distinction entre notes de bas de pages et liste bibliographique de fin d'ouvrage. Consulter le [manuel de refer](http://utroff.org/man/refer.html) et celui de la macro [u-ref](http://utroff.org/man/u-ref.html). ## Le grec polytonique avec Tchars, inspiré de Dchars ## Les plus assidus d'entre-vous auront suivi [le développement de Dchars](https://linuxfr.org/news/dchars-pour-lire-ecrire-et-modifier-des-caracteres-unicodes-complexes), de notre ami [Xavier Faure](https://linuxfr.org/users/suizokukan), qui interprète du code ascii pour produire des caractères utf8 complexes. Utroff méritait d'avoir un tel interpréteur, mais ne pouvait se permettre d'ajouter python à ses dépendances. J'ai donc écrit un tout petit interpréteur en C, et l'ai nommé Tchars (Troff|Translate Characters) en référence à Dchars. Un récent [journal](https://linuxfr.org/users/sygne/journaux/jouons-avec-unicode-tchars-un-dchars-pour-troff) explique les détails de cette implémentation, quant à son utilisation elle est documentée dans le [manuel de Tchars](http://utroff.org/man/tchars.html). ## Les index avec Idx ## Le travail d'indexation ne se limite pas à l'indexation du document en cours d'écriture, il concerne aussi l'indexation d'ouvrages de référence, dont bien souvent aucune version électronique n'est disponible. Idx est un script awk encapsulé dans du shell facilitant grandement l'indexation de textes papiers, et réalisant l'indexation des documents Troff. Un journal propose un [exemple d'utilisation d'idx](https://linuxfr.org/users/sygne/journaux/exemple-d-interface-en-ligne-de-commande) (attention, l'interface a évolué depuis), et son utilisation est documentée dans le [manuel d'idx](http://utroff.org/man/idx.html). ## La coloration syntaxique avec Ugrind ## Voici le genre le commentaires que l'on trouve dans les sources des logiciels qui accompagnent Troff : ``` C /* * Vfontedpr. * * Dave Presotto 1/12/81 (adapted from an earlier version by * Bill Joy) * */ ``` Au début des années 80, alors qu'il travaillait encore à l'université de Berkeley, [Bill Joy](http://fr.wikipedia.org/wiki/Bill_Joy) a trouvé nécessaire d'ajouter un colorateur syntaxique à Troff. Il a pour cela créé Vfontedpr, que les membres de la liste de discussion de Groff comprennent comme signifiant « Visual Font Edit Print », un outil en C appelé par le bien nommé script Vgrind (la moulinette qui grince). Après bien des péripéties, Vgrind s'est retrouvé dans l'archive d'Heirloom Doctools, de sorte que, Vfontedpr, renommé Ugrind pour le projet Utroff, continue à colorer le code source pour Troff depuis plus de 30 ans. Signe de son age avancé, la syntaxe du fichier de configuration (vgrindefs, renommé ugrindefs pour Utroff) où sont définies la structure des langages à colorer, est celle de Termcap : ``` C /* * grindcap - routines for dealing with the language * definitions data base * (code stolen almost totally from termcap) */ ``` Puisque qu'il fallait à tout le moins qu'Ugrind puisse colorer les sources en Troff, et puisque la syntaxe de Troff est difficilement interprétable dans le langage de Termcap, Ugrind contient, entre autres modifications de Vfontedpr, un parseur codé en dur du langage Troff. Le [manuel d'ugrind](http://utroff.org/man/ugrind.html) décrit son utilisation. ## L'export vers l'xml ## Troff a commencé à péricliter au moment où apparaissait le web, l'HTML et l'XML. Il y a probablement là un lien causal : de nombreux scripts ont été créés pour produire de l'HTML à partir de Troff, mais aucune solution universelle n'a jamais été trouvée. En effet, seules les macros créées en langage Troff peuvent être interprétées car c'est en leur sein qu'est définie la sémantique du texte. De fait, il y a autant d'interpréteurs que de macros, et chaque interpréteur doit pouvoir en outre comprendre quelques fonctions Troff susceptibles d'être utilisées dans les fichiers sources. Finalement, [Eric. S. Raymond](http://fr.wikipedia.org/wiki/Eric_Raymond) a su imposer [doclifter](http://www.catb.org/~esr/doclifter), un interpréteur en python, qui reste néanmoins réservé aux macros historiques. Une solution n'a pas été explorée jusqu'alors : si Troff produit des fichiers postscript, son grand frère, Nroff produit des fichiers textes, de sorte qu'il peut produire des fichiers XML sans en passer par un interpréteur. De fait l'une des macros Utmac a été écrite pour gérer l'export vers l'XML avec Nroff. Toutes les fonctions du langage Troff sont ainsi gérées nativement, et, si cette solution ne répond pas à tous les besoins, elle a l'avantage d'être très simple à mettre en œuvre. Le site d'Utroff explique cette [conversion vers l'XML](http://utroff.org/xml.html). # Remerciements # Utroff est hébergé par [Tuxfamily](http://tuxfamily.org), et son développement a bénéficié de l'aide de quelques LinuxFr-iens : [MrSpackMan](https://linuxfr.org/users/mrspackman), [fmaz fmaz](https://linuxfr.org/users/fmaz), et [Xavier Faure](https://linuxfr.org/users/suizokukan), déjà cité. Qu'ils soient tous remerciés. ## Post Scriptum ## Dépêche rédigée avec Utroff : ``` sh ugrind utroff-0.1.tr | nroff -muw> utroff-0.1.mkd ```