À la recherche des sources de Troff

Posté par (page perso) . Édité par Nils Ratusznik, baud123, Nÿco, patrick_g, Pierre Jarillon et B16F4RV4RD1N. Modéré par NeoX. Licence CC by-sa
87
7
août
2012
Doc

Troff est le logiciel de formatage de texte des Unix originaux. Il est toujours présent sur nos machines en sa version GNU (Groff) même s'il ne sert généralement qu'à afficher nos pages de manuel.

Eric Raymond n'hésite pas à dire que Troff est « l'application originale Unix qui tue tout » (Unix's original killer application, cf. The Art of Unix Programming), non seulement parce qu'il s'associe à différents interpréteurs et tire le meilleur profit des tubes et de la philosophie Unix, mais aussi parce que l'efficacité du logiciel a favorisé l'adoption d'Unix par le département des brevets de Bell labs, et ensuite au-delà.

S'il était largement utilisé dans les années 80, Troff est aujourd'hui tombé dans l'oubli, et semble peu à peu disparaître de l'Internet. Pourtant, en cherchant bien, on retrouve de nombreuses traces de la vivacité passée de Troff.

Ces traces sont exhumées en seconde partie de la dépêche.

Sommaire

N.B.: les liens vers le site de Bell Labs sont actuellement morts, mais cela arrive parfois et n'est jusqu'alors que provisoire.

L'histoire des sources

Un rapide historique de Troff a été proposé ici même à l'occasion de la sortie d'une nouvelle version de son équivalent GNU : Groff. Ici, nous insisterons sur les traces de cette histoire telles qu'elles sont présentes aujourd'hui sur internet, ainsi que sur la façon dont elles nous sont parvenues, car les sources du logiciel n'ont pas toujours été partagées.

Roff de Joseph Ossana sur les premiers Unix

Dear Unix Enthousiasts,

C'est avec cette formule, que, en 2002, Caldera ouvre le texte de la licence annonçant la libération des sources des anciens outils Unix en même temps qu'elle libère le code source original d'Unix lui-même.

Dans l'archive de la version 3 des premiers Unix on trouve une version binaire de roff dans datée de 1972. Cette version binaire est en la ré-écriture pour Unix, par Joseph Ossanna, du RunOff de Multics.

New Roff

Joseph Ossana a ensuite amélioré Roff, et l'a renommé Nroff (New Roff). Nroff est probablement une ré-écriture en C de Roff. On trouve les sources, tant de Roff que de Nroff dans la Version 6 d'Unix. Une recherche dans les sources d'Unix 32V devrait permettre de suivre l'évolution du code source.

Ditroff de Kernighan

En 1979, Brian Kernighan, ré-écrit entièrement Nroff, pour qu'il produise une sortie intermédiaire, qui devra être traitée par un autre logiciel pour finalement produire un fichier imprimable. Cette sortie intermédiaire permet à Nroff d'être utilisé pour divers types d'imprimantes, incompatibles entre elles. Il nomme ce nouveau logiciel Ditroff, « device independant troff », mais ce nom sera abandonné au profit de Troff. L'usage a imposé le nom Nroff pour logiciel utilisé pour écrire sur un terminal, et celui de Troff pour le logiciel produisant du texte destiné à être imprimé.

Depuis 1979, les logiciels Troff et Nroff, quelle que soit leur origine, reproduisent le comportement du Troff de Kernighan. La compatibilité entre toutes les versions est ainsi assurée, à quelques détails près. La documentation en usage est d'ailleurs celle qu'a écrit Kernighan à la même époque. Cela fait probablement du format de Troff le format de traitement de texte qui est, de fait, le plus pérenne de l'histoire de l'informatique.

DWB d'AT&T

Le Troff de Kernighan a eu de nombreux descendants, en particulier, il a été le cœur d'un ensemble de logiciels nommé DWB (Documenter's WorkBench) distribués avec l'Unix d'AT&T. En cherchant bien, on peut trouver, sous licence Eclipse, les sources du DWB 3.2 d'AT&T de 1993 (et un patch pour le compiler dans Cygwin).

Certains navigateurs ayant quelques difficultés à télécharger le DWB d'AT&T, voici comment faire avec Wget, sous réserve d'acceptation de la licence:

wget \
--user "I accept www.opensource.org/licenses/eclipse" \
--password "." \
"http://www2.research.att.com/~gsf/download/tgz/dwb.1993-02-04.tgz"

Cette archive est une perle, car elle contient, outre les sources de Troff, les sources de toute la documentation, ainsi que quelques logiciels que beaucoup croient perdus, tels Picasso et Diffmk, dont il sera question plus loin.

Troff de Solaris

En 2005, Solaris, le descendant d'Unix Systeme V dévoilé par AT&T en 1983, est libéré, à son tour ainsi que le code des outils Unix de l'époque. Le tout est distribué sous licence CDDL. Le Troff d'Open Solaris est basé sur le Troff du Systeme V release 4, qui dérive du DWB d'AT&T version 2. Sur la forge, de Solaris, on trouve ainsi les sources de Troff, Nroff, et d'autres logiciels qui lui sont associés : Checknr, Checkeq, Col, Deroff, Eqn, Refer, Soelim, Spell, Tbl, Ul.

Heirloom Troff, de Gunnar Ritter

Suite à cette libération, Gunnar Ritter décide de donner une nouvelle jeunesse aux sources de Troff. Il récupère alors le Troff d'Open Solaris, lui ajoute quelques fonctions modernes, et le redistribue sous le titre Heirloom Doctools :

Le projet Heirloom s'adresse aux personnes qui aiment travailler sur leur ordinateur en utilisant une interface Unix traditionnelle en ligne de commande. Le projet Heirloom n'est pas un musée du logiciel ; il n'essaie pas de conserver les utilitaires sans modification. Il conserve plutôt le style, l'algorithme et l'interface intacts, tandis qu'il modernise le système lorsque cela est approprié. Accueil du projet Heirloom

Gunnar Ritter a très soigneusement amélioré Troff afin de lui apporter les fonctions typographiques indispensables aujourd'hui : calcul des espaces inter-mots paragraphe par paragraphe (selon une variante de l'algorithme Knuth-Plass utilisé par Tex), micro-typographie (taille des glyphes et interlettrage finement modifiables (comme le préconise Hàn The Thành dans Micro-typographic extensions to the TEX typesetting system), réglage de l'approche, ligatures arbitraires, décalage de certains glyphes hors de la marge (« hanging characters »), support des polices PostScript Type 1, TrueType, OpenType, et de leurs possibilités, césure des mots internationalisée, gestion de l'UTF-8, méta-données PDF (table des matières, liens, mots-clefs, auteur, titre et sujet). Bref, Heirloom Troff est à Troff ce que pdfTeX est à TeX. Outre ces améliorations, Gunnar Ritter a aussi incorporé les extensions de troff introduites par Groff, son équivalent GNU. L'ensemble compile maintenant sur à peu près toutes les plate-formes : Linux, BSD, Solaris et plan9.

L'archive contient, outre Troff, Nroff, Dpost, Eqn, Pic, Refer et Soelim, des outils un peu oubliés : Checknr, qui vérifie qu'un fichier Troff est bien formaté, Vgrind, un pré-processeur qui formate du code source pour l'impression via Troff (Il est encore fait mention du copyright de Bill Joy dans les sources), Picpack qui permet d'inclure des images postscript, et Ptx, pour créer des index.

Troff de Plan9

Plan9 incorpore une version de Troff dans ses sources. Largement modifiée, cette version n'apporte que peu d'améliorations visibles par l'utilisateur final, sinon qu'elle gère nativement l'utf-8. Néanmoins, les utilisateurs de Plan9 sont aujourd'hui parmi les derniers a utiliser Troff, aussi, sur la liste de discussion 9fans, on trouve de nombreuses informations sur Troff, et les sources d'anciens logiciels qui lui étaient associés y apparaissent régulièrement.

Une version compilable sur Unix/Linux du Troff de Plan9 est disponible dans l'archive de plan9 from user space.

Dans cette archive, on trouve, outre Troff : Troff2html, Tr2post, Tbl, Spell, Proof, Pic, Htmlroff, Grap, Eqn, Doctype, Deroff et Grap.

Documentation de troff et de ses compagnons

La documentation de Troff est, à mon avis, particulièrement bien faite. Elle est composée d'un ensembles d'articles courts, clairs et exhaustifs. Comme indiqué ci-dessus, les sources de la documentation originale de Troff sont présentes dans l'archive du DWB d'AT&T. Mais on trouve aussi la version postscript de ces articles sur le site de Bell Labs. Seulement, ces articles sont mal indexés, et introuvables sans aide. Le site de référence à ce sujet est celui de Ralph Corderoy. Je me contente de recueillir ici les liens connus vers la documentation.

Deux des documents écrits par Brian Kernighan font aujourd'hui encore office de référence : 54.ps.gz, la documentation complète, 97.ps.gz, la description du format de sortie indépendant du périphérique (device independant).

Quant aux autres documents, ils traitent des logiciels qui s'articulent avec Troff. En voici la liste : Pic, Grap, Chem, algorythm animation, Dformat, Eqn user guide, cross references, index tools, ideal, MetaPost manual, graph with MetaPost.

Sur la page de Richard Stevens on trouve une copie de ces articles, mais aussi d'autres documents sur Troff : manuel, tutoriel, device independant, Tbl, Eqn2e, Eqn, Pic, GNU Pic, Pic examples, Pic macros, Pic to html, ms, Grap, Gpic, index tools, index tools sources, refer.

Quant aux autres documents que j'ai pu trouver, en voici la liste, en vrac : GNU Eqn, Me tutoriel, Me reference manual, man how-to, Effman, Mom, Mm.

Enfin, Oreilly publie les sources du livre Unix Text Processing écrit par Dale Dougherty et Tim O'Reilly lui-même.

Logiciels accompagnant Troff

De nombreux logiciels gravitent autour de Troff. Si les sources des anciens Troff tendent à réapparaître sur le net, les sources des logiciels qui l'entouraient tendent quant à elles à disparaître. Voici quelques liens permettant d'en retrouver les traces.

Mpm : pour la justification verticale

Mpm est un post-processeur qui gère la justification verticale des blocs (figures, paragraphes…). Il réapparait tous les dix ans sur la liste de discussion de plan9 : ainsi en 2002 et en 2012. On peut trouver ses sources dans le répertoire contrib de plan9. Gunnar Ritter l'a ajouté dans l'archive de Heirloom Troff. On trouve la documentation qu'en a fait Brian Kernighan sur usenix : spr_kernighan.

À la fin du README, il est indiqué :

Historical note: There is a simpler version of pm and -mpm called pj and -mpj that only does vertical justification of pages that have already been laid out by conventional means. This simpler version may be adequate, but it is no longer supported and memory of how it works is growing dim.

Picasso : pour dessiner

Picasso est une interface graphique permettant de dessiner des dessins au format pic. Il en est parfois question dans la liste de discussion de Groff, mais avec regrets, car les sources semblent perdues. Pourtant, en cherchant bien, on les trouve : dans l'archive du DWB d'AT&T !

Un post de 9fans y fait aussi référence, et cite trois alternatives :

art (from the 2nd edition), though Andrey did stirling work porting it to the draw model years ago I honestly don't feel it up to the job - perhaps my lack of stamina?

On devrait le trouver dans le répertoire de Steve Simon de Plan9/contrib.

cip/xcip - this is part of the blit distribution and xcip is avaialable on the net these days. I have a vague memory that someone got this to run on a modern OS - plan9/X11 perhaps? anyone know more?

Cip fait l'inverse de Pic : à partir d'une image, il produit le code de Pic. Xcip est la version graphique de Cip, comme l'indique la quatrième de couverture de Unix System V Network Programming :

Acknowledgements. This book was produced on an Intel i386-based system running UNIX System V Release 4.0, Version 3. The text editor sam was used to create and update the text. The pictures were created with xcip, a newer version of cip, on an AT&T 630MTG terminal. The output for the book was produced with eqn, tbl, pic, troff, and dpost from the Documenter's WorkBench, Version 3.2.

On en parle aussi dans un guide sur Unix, et dans un post de la liste de discussion de groff. Il est présent dans contrib/Venkatesh Srinivas/ selon ce post :

xfig + transfig - feels a bit like a patch on a patch and, being modern unix code would (no doubt) include configure hell…

Xfig et transfig sont encore en activité, car plus récents et compatibles avec Latex.

Parfois, il est aussi question de ideal, de dag dont on trouve la documentation, de flow ou de g3 ("G3 - A Language for Typesetting Three Dimensional Graphics", dont on trouve un scan de la documentation, mais ceux-ci semblent bel et bien perdus…

Sinon, on peut aussi travailler avec dformat, dont on trouve l'original et une version nettoyée, grn ou bien metapost qui produit des fichiers pour troff, et pas seulement pour Tex.

Troff et le HTML

Éparpillés sur le net, on trouve des outils pour transformer un fichier troff vers de l'html : Unroff, Troffcvt, Manserver, Man-cgi, Ms2html, Troff2page, Troff2hml.pl et Web2.

Certains outils sont concentrés dans l'archive de Plan9 From User Space : Troff2html, Htmlroff,

Sur la page de Jeffrey Copeland, on trouve un article concernant la transfert du format tbl en HTML, ainsi qu'un logiciel faisant ce travail. Pour le même travail, on pourra aussi utiliser Htbl.

Troff et le XML

Pour transférer un fichier Troff vers Docbook, l'outil de référence est Doclifter (écrit par Éric S. Raymond). On appréciera aussi Dbtroff (écrit par Gunnar Ritter), qui fait le travail inverse.

Pour l'ODT, il y a un fichier XSLT dans l'archive de Heirloom Troff.

Références et index

Dans l'archive des utilitaires, du projet Heirloom, on trouve tout un tas d'outils pour gérer la bibliographie au format refer : Addbib, Sortbib, Roffbib, Indxbib, Lookbib. On pourra aussi utiliser les outils de Bibstuff.

On trouve aussi des outils pour créer des index. Outils qu'on retrouve parmi les logiciels du Netlib de Bell Lab. Ces outils d'indexation sont aussi publiés sur la page personnelle de Brian Kernighan.

Développement logiciel

Nrchbar permet d'imprimer un diff. On peut aussi utiliser Diffmk, présent dans l'archive de DWB pour marquer les différences entre deux fichiers troff.

Présentations scientifiques

Troff est toujours fourni avec une version de Eqn, qui permet d'écrire des formules mathématiques. Mais on trouve aussi, parmi les logiciels du Netlib de Bell Lab une version de Chem qui permet d'écrire des formules chimiques. La version originale est disponible sur la page personnelle de Brian Kernighan ainsi que sa documentation.

Sur la liste de discussion de Plan9, on peut trouver plusieurs macros. Pour créer des slides, d'autres slides et des circuits électroniques.

D'autres macro permettent de créer des présentations, telles Gpresent, Mv, dont les sources semblent perdues, et Mo.

Heirloom Troff est fourni avec une version de Grap, qui permet de dessiner des graphiques depuis une liste de données. Plan9 from user space, fournit lui aussi une version de grap. Si on préfère, on pourra utiliser une autre version, ou alors utiliser Prag, un script Awk capable de remplacer Grap.

Macro diverses

On trouve une macro nommée Loom, une autre nommée Labels pour écrire des étiquettes, pour des étiquettes toujours, on peut utiliser cette version. On trouve aussi une macro nommée Meta, une autre nommée Resume, et encore une nommée Letter.

Pourquoi cette dépêche ?

Il est vrai que cette dépêche n'est qu'une collection de liens à peine commentés. Quel est donc son intérêt, au delà de l'effet marque page ?

Réflexion sur l'histoire à l'âge de l'Internet

En premier lieu, la dépêche a été motivée par la curiosité de Tonton Th, qui, au détour d'un commentaire a exprimé sa curiosité quant à l'histoire de Troff. Ce commentaire apparaissait dans une discussion sur la pérennité des données sur Internet. On peut avoir l'impression qu'Internet n'a pas de mémoire, et rechercher troff sur Google ne donne pas grand chose de très intéressant sur son passé. Pourtant, en cherchant bien, on trouve les documents nécessaires à l'écriture de l'histoire de Troff. La méthode à suivre est d'ailleurs assez simple :

  • Il faut commencer par trouver un centre de référence ; en l'occurrence, ici, il s'agit des listes de discussion de Plan9 et de Groff, où se rencontrent les derniers utilisateurs de Troff.
  • En parcourant ces listes de discussion, on retrouve de nombreux noms de logiciels.
  • Ces noms permettent de faire des recherches plus précises dans les moteurs de recherches, qui deviennent alors pertinents.

Par exemple, pour trouver le logiciel Picasso, il m'a fallu d'abord prendre connaissance du nom du logiciel, qui est déjà bien oublié ; il m'a fallu apprendre ensuite qu'il faisait partie d'un ensemble dénommé DWB, et au détour d'un article sur l'histoire d'Unix, j'ai appris que DWB était un produit d'AT&T. Finalement, c'est une (longue) recherche sur DWB et AT&T qui m'a permis de trouver l'archive contenant Picasso.

Ce travail de recherche met en évidence deux mouvements : certes, des données disparaissent d'internet, mais il faut remarquer que des données y ré-apparaissent tout autant. Sur les listes de discussion, des logiciels, ou des liens vers des logiciels ressortent régulièrement : à la demande d'un utilisateur, un particulier peut partager un logiciel dont il conservait une copie. Les entreprises elles-aussi peuvent décider de libérer les sources de logiciels ayant une importance historique, comme l'a fait Caldera pour Unix.

Réflexion sur le langage à l'âge de l'image

En second lieu cette dépêche fait suite au journal de MrSpackMan : « L'esprit Unix, une culture de mots ». Qu'est-ce qui définit proprement Unix ? Thomas Scoville pense que, au-delà (ou en-deçà) des tubes, du shell et du tout fichier, ce qui définit Unix c'est son affinité avec le langage. Unix, c'est le langage comme interface. Si tel est bel et bien le cas, alors, Unix est l'outil idéal pour manipuler du texte. Or, la manipulation du texte sous Unix trouve son terme (l'impression) avec Troff. Si Unix se définit par son logocentrisme, alors Troff constitue un moment essentiel de son aventure. De fait, Internet garde les traces de l'importance qu'a pu avoir Troff, et devant la foison de logiciels qui s'articulaient avec lui, on peut avoir l'impression que l'histoire d'Unix est intimement liée à l'histoire de Troff. Peut-être que le moment où Unix était adopté en entreprise coïncide avec le moment ou Troff était considéré comme un outil d'édition pertinent.

Si l'on s'accorde pour dire que les histoires d'Unix et de Troff sont conjointes, nous pouvons nous demander ce que signifie pour Unix l'oubli de Troff. Avec l'oubli de Troff, c'est le texte qui disparaît d'Unix. De fait, le déport du texte hors du cœur d'Unix vers l'interface graphique et le web modifie radicalement l'usage d'Unix. Si les seuls textes qui persistent au cœur d'Unix sont les fichiers de configuration, alors, les outils Unix deviennent des outils dédiés à l'administration. Ils l'ont toujours été, mais je crois qu'il fut un temps où la manipulation de fichiers de configuration et la manipulation de textes destinés à être imprimés ont convergé, et cette convergence a marqué l'apogée de l'histoire d'Unix.

On repère ce déplacement dans l'histoire de Troff : il apparaît un moment où les interfaces graphiques complètent l'éco-système logiciel, en particulier pour créer des dessins. Mais très vite, ces outils sont dépassés. De même, dans l'histoire de Troff, on repère l'émergence du web : il arrive un moment où une foison d'outils servent à exporter un fichier troff vers l'HTML. Mais tous ces outils arrivent trop tard, l'HTML, et les outils le manipulant, se sont implantés à côté de Troff, et non pas dans sa continuité. Ces deux ruptures ne sont pas équivalentes. Troff semble avoir pu concurrencer un temps les interfaces graphiques mais a aucun moment il n'a pu se faire une place dans le monde de l'HTML.

Enfin, si Troff a pu être un maillon important d'un système informatique ayant le langage comme interface, alors retrouver l'usage de Troff est un moyen de retrouver l'usage du langage comme interface. Troff et les logiciels qui l'accompagnent forment un ensemble de mini-langages (Eqn, Pic, Tbl, et Refer ont chacun leur mini-langage). La syntaxe de Troff, qui force à l'écriture de ligne courtes, s'articule parfaitement avec les outils de manipulation de flux lignes à lignes (Sed, Awk, Diff, Patch). En ligne de commande, Troff fait un usage intensif des tubes. Cet ensemble forme ainsi un tout cohérent, une suite bureautique en ligne de commande, mais dont nous avons perdus l'usage. Retrouver les sources de ces logiciels et leurs documentations est un moyen de retrouver la grammaire d'une langue, avant de pouvoir la parler de nouveau.

  • # Mandoc dans OpenBSD

    Posté par (page perso) . Évalué à  4 .

    OpenBSD a remplacé Troff et Groff par mandoc.

    Une présentation ici : http://www.bsdcan.org/2011/schedule/events/230.en.html
    Une annonce là : http://www.undeadly.org/cgi?action=article&sid=20110314142734

    • [^] # Re: Mandoc dans OpenBSD

      Posté par . Évalué à  4 .

      Du peu que j'ai lu sur le sujet, TROFF et GROFF sont des utilitaires, mais également une syntaxe.

      Du coup, comme mandoc peut importer la syntaxe utilisée dans les pages de man (cf. http://mdocml.bsd.lv/man.7.html ), c'est à dire la syntaxe de troff, est-ce que l'on ne peut pas conclure que mandoc est une implémentation de troff ?

      Mais peut-être que mandoc n'implémente pas toutes les commandes de troff.

      Je n'ai pas vraiment réussi à trouver (rapidement j'entends) la liste des commandes utilisées dans man et troff (c'est à dire voir si man n'embarque pas qu'une version réduite de la syntaxe de troff)

      Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

      • [^] # Re: Mandoc dans OpenBSD

        Posté par (page perso) . Évalué à  3 .

        Effectivement, le logiciel Troff est l'interpréteur du langage de formatage de texte du même nom. Le langage est décrit dans 54.ps.gz, dont un lien est donné plus haut.

        À partir de ce langage, on créé des macros, dont les macros man, et mdoc. Troff déplie chaque macro pour interpréter les commandes qui la composent.

        Le logiciel mandoc est un logiciel qui met en page les macros man et mdoc, sans en passer par le langage Troff : le résultat de ces macros est connu, il suffit d'imiter Troff pour afficher les manuels. Cela permet à Mandoc d'être plus performant.

        Mandoc connaît néanmoins un sous ensemble du langage Troff, car bien souvent, des commandes Troff sont insérées dans les pages de manuel.

        Deux raisons ont motivés OpenBSD à migrer vers Mandoc: les performances et la licence, car Mandoc est sous licence BSD. Les licences des autres Troff, sont d'un esprit proche de la licence GNU – hormis le troff original, libéré par Caldera, mais celui demanderait probablement trop de travail pour être remis aux goûts du jour.

        Mais à ma connaissance, l'idée d'utiliser un autre troff que Groff n'a pas été beaucoup discutée par les développeurs d'OpenBSD.

        La même question est posée sur le wiki de NetBSD.

  • # Super boulot, ce journal

    Posté par (page perso) . Évalué à  7 .

    J'ai trouvé ça super, bien écrit, agréable à lire, et j'ai appris plein de trucs :) Merci!

    PS - Une minute de silence pour les petits neveux des mecs du projet Heirloom qui veulent juste "checker leur facebook vite fait sur l'ordi de tonton" :D

  • # Troff: Legacy

    Posté par (page perso) . Évalué à  10 .

    Suggestion de titre tardive …

  • # Super article

    Posté par (page perso) . Évalué à  5 .

    Merci pour cet article qui nous rappelle combien Unix est la preuve parfaite que le Tout est bien plus que la somme de ses parties. :)

  • # t(g)roff, c'est compliqué...

    Posté par . Évalué à  5 .

    c'est pas évident quand même groff…

    J'ai le manuel sous les yeux : http://www.gnu.org/software/groff/manual/groff.txt

    Mais je ne trouve toujours pas comment faire un simple soulignement.

    J'ai essayé ça :

    -- Macro: .UL [txt [post]]
    Prints its first argument with an underline. If you specify a
    second argument, `groff' prints it in the previous font after the
    underlined text, with no intervening space.

    de toutes les façons :

    .UL texte à souligner

    .UL
    texte à souligner

    etc

    mais ça ne souligne rien. De plus, \fIitalique\fR est affiché souligné dans une page de man, alors qu'à l'export postscript ça l'affiche bien en italique.

    Bref, c'est pas plus mal les langages de balisage léger !

    Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

    • [^] # Re: t(g)roff, c'est compliqué...

      Posté par (page perso) . Évalué à  6 .

      Chez moi ça juste marche:

      echo '
      Ici
      .UL "du texte souligné"
      et la suite du texte.' | groff -ms > f.ps
      
      

      --> .UL fait partie de la macro ms (s pour les intimes), il faut donc appeler la dite macro en argument de groff (-ms).

      La commande groff pure est .ul (en minuscule), et fonctionne un peu différemment que le raccourci qu'en propose ms.

      De plus, \fIitalique\fR est affiché souligné dans une page de man, alors qu'à l'export postscript ça l'affiche bien en italique.

      Ça, c'est le fait de la configuration du terminal (ou de less). En console (tty), l'italique sera plutôt représentée en couleur.

      Et pour le manuel, tu n'as pas choisi le plus simple non plus…

      • Soit tu veux juste apprendre à utiliser groff pour produire des documents, et auquel cas, mieux vaut lire le manuel d'une des macros (man groff_ms par exemple).
      • Soit tu veux apprendre à écrire des macros, et dans ce cas, il faut lire 97.ps.gz, référencé dans la dépêche.
  • # Une petite précision venant d'un ancien

    Posté par . Évalué à  6 . Dernière modification : le 07/08/12 à 16:39

    En 1986 venait de sortir les m680 unix de SORD ces machines basés sur des 68020 était pourvu d'un unix complet (System V) livré sur disquette 5 pouces (je crois) et le but était de faire tourner des logiciels de gestion avec les données des clients
    vu que les disques comme la RAM se comptait en Mo (et même en ko) , il fallait choisir ce que l'on installait et dans l'ordre ce qui sautait le plus souvent était : le manuel (donc man troff et le reste) le compilateurs cc (et les outils, libs qui allait avec), les monstres comme emacs. tout simplement pour faire de la place

    Si les disques en Go était venu plus tot peut être que Troff aurait survécu … enfin au moins dans l'info de gestion

    mais sinon le manuel (man) était écrit en roff ou nroff je sais plus qui était un sur ensemble de macros ed ou autres
    bref une usine a gaz pire que latex mais d'une efficacité redoutable.

    A+
    chris

    • [^] # Re: Une petite précision venant d'un ancien

      Posté par (page perso) . Évalué à  3 .

      mais sinon le manuel (man) était écrit en roff ou nroff je sais plus qui était un sur ensemble de macros ed ou autres.

      On utilise généralement "troff" pour nommer le langage de nroff et troff. Que sa syntaxe soit une réminiscence d'ed, ce n'est pas impossible, mais c'est bel et bien un langage autonome, et non pas un sur ensemble de macros ed – du moins, depuis le troff de Kernighan (fin des années 70).

      vu que les disques comme la RAM se comptait en Mo (et même en ko) , il fallait choisir ce que l'on installait et dans l'ordre ce qui sautait le plus souvent était : le manuel (donc man troff et le reste)

      Intéressant ça, je n'y avais pas pensé.

  • # Merci pour cet article

    Posté par . Évalué à  2 .

    Plein de liens intéressants. Je trouve toujours intéressant de revenir sur les fondamentaux d'Unix.

    Sinon, on pourrait relever que la syntaxe de Groff est rébarbative, mais que ce logiciel n'occupe que très peu de place, en espace disque et en mémoire vive, en tout cas infiniment moins qu'une installation LaTeX (quelques centaines de Mo au bas mot pour ce dernier). Or je constate que souvent on fait appel à LaTeX de manière indirecte, sans taper directement son code; il est utilisé comme moteur de rendu pour du PDF dans certains wikis, à partir de Lyx, docbook, markdown, etc.

    Pour le même prix, pourquoi ne pas utiliser Groff ?

    • [^] # Re: Merci pour cet article

      Posté par . Évalué à  2 .

      En fait il serait judicieux d'utiliser du GDI (Graphique Device indépendante ou qq chose dans ce gout la) ce que génére latex avant de faire du PDF ou du postscript .. les .dvi

      Reprenez moi si je dis des conneries mais ne serait pas un format destiné a être traduit en fonction des besoins du périphérique de sorties écran texte, ecran graphique , imprimantes , traceur etc …

      mais je n'ai pas trouvé mon bonheur sur ce format , des exemples simples et concis

      d'ailleurs je trouve que la génération automatique de document propre n'est pas facile sous linux, comme si l'on avait sauté une étape.

      quand je dit propre cela signifie : modifiable par un humain "normal" et pouvant générer des tableaux, incorporer des graphiques des entetes des pieds de pages …

      Pour l'instant le seul truc simple que j'ai trouvé c'est rst2pdf ou rst2odt Restructured text vers pdf ou ODT mais la encore trop de différence entre les 2 utilitaires

      A+
      chris

    • [^] # Re: Merci pour cet article

      Posté par (page perso) . Évalué à  3 .

      Pour le même prix, pourquoi ne pas utiliser Groff ?

      Groff a l'inconvénient de ne plus être au top au niveau typographique. Groff ajuste l'écart entre les mots ligne à ligne. Cela produit un mauvais résultat, car les mots peuvent être très serrés sur une ligne, et très écartés la ligne suivante, ce qui est laid, et cause de lézardes blanches dans le texte.

      Tex, gère l'écart entre les mots pour l'ensemble du paragraphe, selon un algorythme maintenant connu. À cela pdfTex ajoute la possibilité de modifier finement la taille de chaque glyphe, pour que l'écart entre les mots sont plus uniforme dans un paragraphe.

      Ce sont la deux bonnes raisons de préférer Tex. Mais dans bien des cas, pour produire un pdf à la va-vite, sortir LaTex me semble idiot et pour le coup, groff serait pertinent.

      Plus pertinent est à mon avis Heirloom Troff, qui se tient au niveau de pdfTex pour la typographie (notez qu'il n'existe que trois ou quatre logiciels qui incluent ces algorythmes : pdfTex, Heirloom Troff, Adobe InDesign, et, je crois, Quark Xpress – mais pas Scribus !).

      Et effectivement, l'usage de Tex est plutôt d'installer LaTex, et de chercher la macro qui s'approche le mieux de ce que l'on cherche. L'usage de Troff est plutôt de créer sa macro sur mesure – ce qui n'est pas très difficile, mais malheureusement peu documenté (mais j'y travaille).

      • [^] # Re: Merci pour cet article

        Posté par . Évalué à  2 .

        Tu connais ça ?
        http://www.schaffter.ca/mom/mom-01.html

        "mom is a flexible typesetting and document formatting package that allows you to create high-quality PostScript (ps) and Portable Document Format (pdf) files for viewing and printing."

        "Mom is a macro set that sits on top of groff"

        le rendu est très bon.

        Only wimps use tape backup: real men just upload their important stuff on megaupload, and let the rest of the world ~~mirror~~ link to it

        • [^] # Re: Merci pour cet article

          Posté par (page perso) . Évalué à  2 .

          Oui, je connais. Mom est très réussie, et Peter Schaffter est toujours sympathique sur la liste de discussion de groff.

          Mom est certainement le meilleur choix pour faire rapidement du bon travail avec groff.

          Mais je ne l'utilise pas. J'utilise Heirloom Troff avec une macro sur-mesure.

  • # Retrouver la grammaire d'une langue?

    Posté par . Évalué à  1 .

    Moui, pas convaincu, les GUI ont vraiment tout balayé sur leur passage (pour les utilisateurs pas pour les admins) et le mode texte d'Unix s'est retrouvé bien isolé, pas convaincu qu'on retrouve jamais la "langue" Unix.

    Quelqu'un a parlé d'Etoilé (sur osnews) comme les GUI 'à la Unix' mais je ne suis pas vraiment convaincu.

    Et je vois 2 gros problèmes pour le mode texte sous Unix:
    1) les GUI comme dit ci dessus qui le concurrence

    2) le manque d'évolution: VMS avait une syntaxe plus logique que celle du shell Unix, pourquoi un équivalent n'a t'il pas été adopté? PowerShell est pour moi une évolution logique du shell, mais il n'a pas été crée sous Unix..

    • [^] # Re: Retrouver la grammaire d'une langue?

      Posté par (page perso) . Évalué à  3 .

      On peut la rechercher la langue d'Unix pour d'autres raisons que la productivité.

      La productivité n'est pas la seule contrainte d'une interface. Entrent aussi en jeu les possibilités d'épanouissement qu'elles offrent à ceux qui les utilisent, les modes du penser que l'esprit doit développer pour travailler, le rythme qu'il doit suivre pour s'accorder à l'interface…

      Ce sont toutes ces choses peu (voire jamais) théorisées qui apparaissent en filigrane lorsque l'on retrouve le fonctionnement d'une interface différente de celle à laquelle on est habitué.

      • [^] # Re: Retrouver la grammaire d'une langue?

        Posté par . Évalué à  2 .

        Bah, justement l’intérêt principal de la "langue Unix" est sa productivité (son inconvénient principal est sa difficulté d'apprentissage).

        • [^] # Re: Retrouver la grammaire d'une langue?

          Posté par (page perso) . Évalué à  5 .

          Bof. La productivité ne se mesure pas en bloc, mais dépend de ce qu'on cherche à faire. Pour toutes les tâches non répétables, ou répétables mais réalisées une unique fois, la ligne de commande n'est pas plus efficace qu'un clicodrome – elle l'est probablement moins dans bien des cas. Un outil graphique correspondant bien au besoin est tout aussi productif qu'un jeu de commandes.

          Et pour moi, l'intérêt principal de la langue Unix ce n'est pas sa productivité.

          Mon travail quotidien (lire, indexer, citer, commenter, écrire, publier) s'effectue maintenant dans un terminal. J'apprécie car après plusieurs heures de travail, je ne me sens pas abruti comme je le suis après une séance d'interface graphique. Le rythme de travail est aussi très différent, et j'apprécie ce rythme. La productivité est un faible enjeu en comparaison.

          Mais j'ai beaucoup de difficultés à penser ce qui se joue dans cette différence. L'idée que cela a à voir avec le langage m'aide un peu.

          • [^] # Re: Retrouver la grammaire d'une langue?

            Posté par . Évalué à  3 .

            EH oui tout dépend de comment l'on bosse, mon travail quotidien est de mettre en oeuvre
            des usines a gaz plus ou moins complexe qui doivent tourner en tache de fond.
            Le genre de choses ou l'utilisateur ne peut QUE créer des problèmes donc on l’évite

            Et LA rien n'est plus productif que la ligne de commande sous unix qui a d'ailleurs été crée pour ça

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.