Sommaire
- Indexation de livres
- Collection de citations
- Références bibliographiques
- Sauvegarde des modifications
- Conclusion
Bonjour à tous,
Comme vous le savez peut-être, j'apprécie l'ergonomie de la ligne de commande, en particulier parce qu'elle me permet de travailler dans mon élément : le texte.
Manipuler des textes, c'est ce que je fais à longueur de journée : lire, indexer, citer, écrire… Avec le temps, je me suis créé plusieurs outils pour me faciliter la tâche, et ce journal a pour but de vous présenter l'ergonomie de certains de ces outils, avant que ne vienne le jour de leur publication.
Indexation de livres
Indexation de livres papiers
La chose qu'on indexe, c'est le livre. Comme le livre est rarement numérique, son indexation se fait à la main – travail de lettré, comme au bon vieux temps. En outre, une entrée d'index ne correspond pas forcément à un mot du texte : le sous entendu est fréquent, des tournures complexes se résument parfois en un mot, etc. De fait, un travail d'indexation ne peut éviter la lecture et la prise de note.
La méthode la moins efficace consiste à ajouter le numéro de page à une liste de mots : on passe plus de temps à chercher le mot qu'à noter la page. Mieux vaut indiquer, pour chaque page, la liste des mots qui la compose, par exemple ainsi :
256: différance, ontologie, apparoir, donation
257: différance, Derrida, donation
258: donation, ontologie, manifestation
Cependant, comme ce n'est pas cette organisation qu'on attend d'un index, un petit script awk, nommé idx
, permettra de transformer ces données pour obtenir un liste triée de mots :
apparoir: 256
différance: 256-257
donation: 256-258
manifestation: 258
ontologie: 256, 258
Une fois formaté, l'index doit être vérifié, et corrigé. Du coup, il faut le reformater. Il nous faut aussi pouvoir exporter l'index dans un format imprimable, ou obtenir une liste de pages à partir d'une liste de mots. Ainsi, idx
accepte plusieurs options :
idx -w # liste de pages vers liste de mots
idx -p # liste de mots vers liste de pages
idx -r # reformate une liste de mots
idx -t # liste de mots vers un format imprimable (troff)
Le format d'index est si simple qu'il se consulte avec grep. Dans le répertoire de l'auteur, on créé un index par ouvrage, et grep différance *
permet de retrouver les pages où notre auteur discute de la non origine à l'origine de l'origine.
Indexation de documents numérique
idx
peut être utilisé pour indexer un document numérique. Avec troff, on utilisera par exemple la macro ix
, qui indexe un mot, et la macro index
qui imprime l'index en utilisant idx
pour le formater – macros que l'on peut résumer ainsi :
.\" macro ix:
.de ix
. \" enregistre, dans la macro record,
. \" le premier argument et le numéro de page.
. am record
\\$1: \\n%
\\..
..
.
.\" macro index:
.de index
. \" écrit le contenu de record dans un fichier temporaire.
. open myindex /tmp/myindex
. writem record
. close myindex
. \" formatte ce fichier avec idx
. \" et ajoute cela au flux du texte
. pso idx -t /tmp/myindex
..
.
.\" contenu du document:
lorem ipsum
.ix lorem
.index
Si notre troff est groff, on lui passera l'option -U
(unsafe) pour activer les macros open
, writem
et pso
. Si notre troff est heirloom troff, on lui passera l'option -x3
pour activer les macros de plus de deux lettres.
Collection de citations
Une base de données
La gestion des citations ne consiste pas seulement à insérer des références bibliographiques dans un document. Il faut aussi manipuler les citations elles-mêmes. Imaginez que notre auteur discute à cent reprises, dans dix ouvrages différents, de la diffférance derridienne. Il faut avoir ces passages sous les yeux pour les lire, les relire, les méditer et les comparer, tout en construisant son raisonnement référencé. On pourra décider d'ouvrir et de fermer les livres à n'en plus finir. On pourra préférer remplacer une des lectures par la numérisation du document.
Une petite base de donnée (sqlite) fait bien l'affaire pour stocker tout ça. Elle n'a que trois tables et une vue qui les coordonne : livres, textes et chapitres (books
, texts
, heads
). La table des chapitres est indispensable, car la norme iso-690 (que nous devons suivre lorsque nous insérons nos références bibliographiques) nous indique qu'il faut indiquer, outre la page, le chapitre d'où la citation est extraite. C'est du reste nécessaire pour retrouver une citation dans une autre édition que celle de l'auteur.
Dans la table texts
sont stockés les textes, leur numéro de page, un titre pour le texte, et un lien vers l'entrée de chapitre correspondante. Dans la table heads
sont indiqués le titre du chapitre, la page où ce titre apparaît, et un lien vers le livre correspondant. Dans la table books
sont indiquées les informations éditoriales. C'est simple et stupide mais ça convient à tous les cas que j'ai rencontrés. Ainsi, un article cité dans un livre prend une entrée de la table books
à lui tout seul, même si le livre qui le contient est déjà référencé dans la même table – c'est redondant, mais ça évite bien des complications dans la gestion de la base de donnée.
Les champs sont constitués de deux lettres : la première définit la table, la seconde le champ. Ainsi ba
est le champ auteur dans la table books
, tp
le champ numéro de page dans la table texts
, hh
le champ chapitre dans la table heads
. Exception aux deux lettres, l'id unique de chaque champ est noté en une lettre, qui correspond au nom de la table: b
, t
, h
v
(v dans la vue = t dans la table texts ) – simplement parce que bi
est déjà pris (c'est le champ de l'éditeur (issuer)). Dans la table texts
, l'id du chapitre correspondant est noté th
, et dans la table heads
, l'id du livre correspondant est noté tb
.
Gestion des citations
Un logiciel, nommé sophia
, sert d'interface pour travailler sur la base de donnée. Son interface est assez simple : le premier argument est une commande, il est suivi d'une liste de champs, eux même suivis du contenu dudit champ. Les commandes de base sont : search
, print
, insert
, update
:
sophia insert -ba Derrida -bt "De la grammatologie"
sophia print -b 1
sophia search -ba Derrida
sophia update -b 1 -ba "Derrida, Jacques"
sophia insert -hb 1 -hh "Chapitre premier" -hp 25
sophia insert -hb 2 -hh "Chapitre second" -hp 75
En outre, la commande edit
indique à sophia
d'ouvrir notre éditeur préféré pour insérer confortablement les données.
Maintenant, pour insérer un texte, il faut connaître l'id du chapitre dans lequel il s'insère. C'est fastidieux de chercher cela dans le livre pour chaque texte enregistré. Mieux vaut entrer toute la table des matières d'un coup dans la base de donnée, et utiliser ensuite une commande appropriée, qui renvoie, pour un ouvrage et une page donnés, l'id du chapitre correspondant.
sophia head -hb 1 -tp 76 -tt "Mon texte"
# retourne une ligne de commande
# contenant l'id du chapitre correspondant
# pour compléter le champ th:
sophia insert -th 2 -tp 76 -tt "Mon texte"
Si on fait confiance à sophia
, on peut insérer directement les données au bon endroit :
$(sophia head -hb 1 -tp 27 -tt "Mon texte")
On peut aussi utiliser un script pour d'abord vérifier que cette page n'a pas déjà été introduite dans la base :
#!/bin/sh
if [ ! $(sophia search $*) ]; then
$(sophia head $*)
fi
Enfin, pour lire confortablement les textes insérés, on peut formater les textes avant des les afficher. La commande troff
permet d'afficher le contenu de la base dans un format compréhensible par troff. Avec un peu de plomberie, on arrive à un beau résultat :
# on pioche dans la vue pour afficher toutes les données
sophia troff -v 34 | nroff -ms | less
sophia troff -v 12 | groff -ms | ps2pdf - texte.pdf
Pour un résultat optimal, le texte inséré dans la base de donnée doit être lui-aussi mis en forme. sophia
n'impose aucun format, l'utilisateur pourra utiliser text2tags ou latex, pour peu que sophia
ait un filtre adapté – chose qui n'est pas difficile à coder.
Références bibliographiques
La base de donnée de sophia
peut être utilisée pour insérer les références bibliographiques dans le texte qu'on écrit. Il faut alors insérer des marques dans le texte : @ id
, où id est l'id du texte qu'on cite. Un logiciel, nommé philia
, remplace ces marques par les références correctement formatées pour troff. On imprime son papier ainsi :
philia paper.tr | troff -ms | lpr
philia paper.tr | nroff -mail | mailx someone@example.com
philia paper.tr | nroff -mxml | xsltproc syle.xsl - > paper.html
wput paper.html ftp://example.com
Sauvegarde des modifications
Enfin, un texte est un fichier qui évolue beaucoup, et dont on souhaite généralement conserver les états précédents. Les logiciels de contrôle de révisions sont connus ici, mais ceux qui sont connus sont très orientés développement. Pour un usage local, on peut préférer des outils moins connus, tels rcs, dont il existe deux versions: gnu rcs (gpl), et openrcs (bsd). Il permet d'archiver les évolutions d'un fichier dans le répertoire même du fichier (ou dans le sous-répertoire RCS s'il existe). En voici les commandes les plus fréquentes:
ci paper.tr
rlog paper.tr
rcsdiff paper.tr
co paper.tr
C'est un outil précieux lorsqu'on manipule beaucoup de textes. Il justifie à lui-seul l'utilisation d'un format texte brut pour écrire du texte.
Conclusion
La ligne de commande ne sert pas qu'à administrer son système d'exploitation. Elle est aussi utile pour créer et manipuler des textes. Parce qu'elle a le langage pour interface, son ergonomie est adaptée au travail du texte. En outre, parce qu'elle extensible, elle permet à l'utilisateur avancé, pour un effort raisonnable, de créer des outils à la mesure de ses besoins.
Et vous, que pensez-vous de l'ergonomie des outils présentés ici ? Y voyez-vous des erreurs grossières ou des améliorations possibles ?
# papa, tu fais quoi au travail ?
Posté par stopspam . Évalué à 3.
Forcément ça attire la curiosité.
[^] # Re: papa, tu fais quoi au travail ?
Posté par littlebreizhman . Évalué à 10. Dernière modification le 28 août 2012 à 00:15.
C'est le bot de http://books.google.fr ;)
En tout cas, c'est très intéressant de voir le raisonnement depuis le données brutes jusqu'à la finalité dans un domaine aussi pointu qu'est l'indexation des données textes "humaines", avec toutes leurs variabilités, différences si loin des données produites par des machines.
N'importe quel développeur qui a été confronté au stockage et la restitution pertinente de données textuelles à toute de suite aperçu l'ampleur de la tache.
Bravo pour avoir réalisé un tel "pipeline" avec des outils de ligne de commandes. Cela m'encourage à persister dans l'approfondissement de mes connaissance en sed, grep et autre awk.
J'ai une petite question : comment ce fait le choix des mots pour peupler l'index, y-a-t-il des listes prédéfinies, automatisées (pour les mots les plus communs et dans le cas des livres numériques) et/ou cela dépend-t-il que du lecteur ("le travail de lettré") ?
Sinon, +1 pour la question de stopspam, je suis curieux moi aussi
[^] # Re: papa, tu fais quoi au travail ?
Posté par Sygne (site web personnel) . Évalué à 2.
À mon avis, et même s'il existe un vocabulaire appartenant spécifique à chaque champ théorique, la liste des mots doit se déduire de l'ensemble de l'œuvre d'un auteur. Il a un vocabulaire qui évolue, et c'est ce vocabulaire qu'il faut indexer. Un mot peut paraître anodin dans un ouvrage, et être très fréquent dans d'autres, ce qui justifie l'indexation de l'occurrence anodine.
Ce qui est compliqué, ce sont les mots qui reviennent tout le temps. Soit on indexe chaque occurrence, et finalement l'index perd de sa pertinence. Soit on n'indexe que les occurrences significatives (mais quelles sont-elles?), au risque de passer à côté de beaucoup de nuances
[^] # Re: papa, tu fais quoi au travail ?
Posté par B16F4RV4RD1N . Évalué à 3. Dernière modification le 28 août 2012 à 22:39.
et ton boulot c'est vraiment bibliothéquaire, ou bien tu travailles dans une université ? Beau journal en tout cas.
Le format texte vaincra !
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: papa, tu fais quoi au travail ?
Posté par Sygne (site web personnel) . Évalué à 5.
Ai la chance d'être employé pour ma thèse de doctorat. Mon domaine de recherche doit pouvoir se déduire du journal.
[^] # Re: papa, tu fais quoi au travail ?
Posté par ZeroHeure . Évalué à 2.
J'étais à Paris X Nanterre il y a quelques années (enfin beaucoup quand même), et n'appréciant guère le verbiage de Jacques Derrida (faut dire que François Laruelle en pleine invention de la non-philosophie était un de mes profs), j'avais facétieusement remplacé la couverture d'un livre dans la vitrine des PUF par des boites de Debrida…
J'ai un peu changé d'opinion depuis (grâces soient rendues à Emmanuel Lévinas et Nicolas Bancel).
"La liberté est à l'homme ce que les ailes sont à l'oiseau" Jean-Pierre Rosnay
[^] # Re: papa, tu fais quoi au travail ?
Posté par B16F4RV4RD1N . Évalué à 3.
astuce : ne pas rechercher "Debrida" sur google images pour savoir ce que c'est…
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: papa, tu fais quoi au travail ?
Posté par Sygne (site web personnel) . Évalué à 2.
Je ne travaille pas directement sur l'œuvre de Derrida, et je ne connais de lui que ses premiers livres, majoritairement consacrées à la phénoménologie. C'est vrai qu'il ne faut pas ménager sa peine… Mais je trouve que c'est très cohérent – jusque dans la façon d'écrire justement.
Quoi qu'on en pense, la «différance» a au moins pour elle de fournir le meilleur exemple de mot clef qui puisse être trouvé !
# Génial !
Posté par eastwind☯ . Évalué à 8. Dernière modification le 27 août 2012 à 23:58.
j'adore ce journal ! :)
Sinon faudrait que j'en fasse un quand j'ai le temps pour présenter les outils adhoc que mets en place pour la manipulation de texte.
En tous cas Merci pour ton retour d'expérience
# troff
Posté par barmic . Évalué à 1.
Je suis toujours surpris de voir troff dont la syntaxe me rebute au plus au point alors que celle de Tex et à fortiori celle de Latex me semble plus agréable à utiliser. Je pense que si j'avais à faire ce genre de chose, soit je passerais par Latex soit j'utiliserais un markup langage pour ensuite convertir mon document soit en HTML soit en (la)tex puis pdf.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: troff
Posté par Sygne (site web personnel) . Évalué à 5.
Ça me rappelle quelque chose ;-)
Elle est très bien la syntaxe de troff: une commande, une ligne. Que demande le peuple?
LaTex ne tient pas une seconde la comparaison avec troff quant à la maniabilité (manipulabilité, hackabilité, ou quelque autre nom que cela ait).
Tex, peut-être, mais le pavé de Knuth m'a découragé – surtout qu'au moment où j'essayais de m'y mettre, je découvrais les soixante pages du manuel de troff… La flegme a été plus forte que tous les autres arguments.
Il faut comprendre que troff c'est le shell du formattage de texte. De même qu'on apprend ce que signifient
tar
,ls
,cd
,pwd
, etwhile
, on apprend ce que signifientin
(indent),sp
(space),po
(page offset),ll
(line length), et on est vite productif.Quant aux syntaxes intermédiaires, je les utilisais avant de connaître troff. Et lorsque j'ai commencé à utiliser troff, je les ai abandonnées, car cela simplifie les flux.
[^] # Re: troff
Posté par barmic . Évalué à 2.
N'ayant pas touché à troff depuis (mais ayant par contre continué à utiliser Latex), le manque d'évolution de mon point de vu est compréhensible.
Plusieurs commande par ligne ? Des noms de commandes compréhensibles ? Des balises ? ^
La dernière dépêche sur troff m'a donné envie d'y regarder de plus près (notamment la citation de Eric Raymond), mais je n'ai pas encore eu le temps ou le courage. Ça viendra.
Tex et Latex sont extrêmement complets, mais tu trouve une quantité incroyable de plus petites documentations sur le net (de différentes qualité). D'un point de vu utilisateur, tu as un wikibook qui est pas mal par exemple.
Tu as un howto ou une doc que je puisse me mettre sous la dent pour que je crée un document vite fais, juste histoire de toucher à la syntaxe et à l'outillage pour produire un PS.
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: troff
Posté par Sygne (site web personnel) . Évalué à 4.
Je l'avais lu quand j'apprenais à utiliser Latex. Et tu as raison, distinguons l'utilisateur du créateur de macro pour discuter sérieusement.
Point de vue utilisateur
Latex est plus complet, mieux documenté, et par défaut le résultat est de meilleure qualité. Par contre, du point de vue utilisateur, je ne vois pas ce que la syntaxe de troff a de si abscons:
C'est la syntaxe de la macro ms, qui est un bon choix pour essayer troff et produire vite fait un postscript. Elle est documentée dans
man groff_ms
. On peut préférer la macro mom, plus complète, qui utilise des mots entiers comme mots clefs (je trouve cela trop verbeux).Pour mes macros, j'ai choisi de noter les titre sur une ligne:
point de vue créateur de macro
On compare maintenant paper.dtx avec s.tmac
Je veux bien croire que la syntaxe de troff est absconse, mais j'avoue trouver que la syntaxe de Tex n'est guère plus lumineuse.
Le texte de référence pour apprendre à programmer avec troff fait 70 pages, à comparer avec le TexBook.
mon point de vue
Maintenant que je connais troff, l'avantage est indéniable: je suis totalement autonome, je n'utilise que mes macros. Peut-être que je pourrais arriver au même résultat avec Tex, mais j'ai l'impression que cela aurait été plus long…
Et toi, avec Tex, serais-tu capable de créer une macro (pour mettre en page un livre par exemple) de A à Z ?
[^] # Re: troff
Posté par barmic . Évalué à 2.
Point de vue utilisateur
Groff :
et à comparer avec la version Latex :
Il me semble que le second est plus lisible (je n'aurais pas eu besoin de dire que c'est des titres par exemple pour qu'on sache que c'en est). Par contre avec latex viens l'entête (celle qui défini la classe, l'encodage, la taille des marges etc) qui n'est pas simple. D'ailleurs comme on défini les marges en roff ?
Point de vue créateur de macro
Je suis tout à fait d'accord.
Mon point de vue
Je n'ai jamais eu à créer de macro. J'ai toujours trouvé des modules qui convenaient à mes besoins (probablement moins bien que si j'avais créé mes propres macro). Par contre j'ai régulièrement utilisé Tikz qui permet de faire des dessins (associé à beamer on crée un dessin qui s'affiche slide par slide), c'est très pratique est facile d'utilisation.
Non clairement pas. Par contre j'ai plusieurs fois créé des macro de macro ce qui est simple à faire en Latex. Voir : http://www.tuteurs.ens.fr/logiciels/latex/macros.html (tout ce qui n'est pas des « tâche complexes »).
Il faut vraiment que je m'y mette un peu plus pour voir (surment ce week end). Merci pour les liens :)
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: troff
Posté par Sygne (site web personnel) . Évalué à 3.
Je suis d'accord (entre FS et FE, il s'agit d'une note de bas de page).
En troff pur, on utilise les commandes po (page offset = marge de gauche) et ll (line length). Avec la macro ms on définit les variables numériques (number register) PO et LL – on place ces définitions en entête, et de fait, l'entête d'un fichier ms n'est pas non plus très simple (j'oublie tout le temps les noms corrects):
Pour une mise en page à deux colonnes, on définit une première fois po, lorsqu'on arrive en bas de la page, on remonte en haut, et on redéfinit po, pour que le texte s'affiche à côté de la première colonne :
J'ai eu des soucis pour les notes de bas de page de mon premier mémoire, qui n'étaient pas aux normes demandées. J'avais essayé de modifier le fichier de style bibtex et les fichiers latex sans grand résultat. C'est à ce moment que j'ai essayé d'apprendre Tex, pour finalement choisir troff.
[^] # Re: troff
Posté par Michaël (site web personnel) . Évalué à 4. Dernière modification le 03 septembre 2012 à 22:13.
En programmeur TeX invétéré et ex programmeur en assembleur, j'ai adopté la tradition du une instruciton par ligne pour mes programmes TeX.
Contrairement à ce qu'on pourrait croire en lisant des macros “modernes” pour TeX, apréhender TeX comme une machine à registres permet de réaliser des programmes assez complexes sans trop se casser la bobines.
J'ai publié une macro
getoptspec
dans le TuG boat (publiée sous forme de package getoptk pour plain TeX) qui permet d'écrire des commandes qui prennent leurs arguments comme les primitives TeX hbox, hrule etc., càd sous la forme:TeX
\hbox width 12pt{…}
En y allant tranquillement ce n'est pas si difficile. Comme apparemment certains ici s'intéressent à la programmation TeX j'en profite pour faire de la pub pour mon Bhrid TeX, qui a une sorte de manuel du programmeur.
http://download.gna.org/bhrid/bhridman.pdf
La macro
getoptspec
est décrite pages 62–69 (Listes de spécifications).[^] # Re: troff
Posté par Sygne (site web personnel) . Évalué à 3.
Quel boulot quand même !
J'imagine que quand on vient de l'assembleur, c'est un jeu d'enfant. J'imagine aussi que comme le C, on doit apprécier maîtriser le bas niveau. Mais je comprends qu'on ait ajouté la surcouche LaTex à Tex…
Dans quelle conditions as-tu été amené à produire Bhrid Tex ?
Pourrais-tu présenter un petit exemple où ressortent un peu clairement les outils de Tex dédiés à la mise en page – comme ci-dessus sur le texte à deux colonnes, ou, si c'est trop complexe, un simple pied de page? Ce serait pour moi un bon moyen de prendre quelques repères dans le langage Tex.
[^] # Re: troff
Posté par Michaël (site web personnel) . Évalué à 3.
Tu l'as dit! Bon en fait j'ai commencé il y a 10 ans quand je suis entré en licence de maths et comme tu peux le voir je ne balance pas 600 commits par semaine…
Ce qui fait la difficulté de TeX par rapport à un autre langage de programmation c'est notamment le fait que pour programmer, il faille écrire la suite de son programme (il faut choisir quel tokens mettre à la suite du flot de traitement). Une fois qu'on a compris ce problème et le fait qu'il est résolu par l'emploi des registres, programmer en TeX n'est pas plus compliqué qu'avec n'importe quel autre langage impératif. C'est un peu bavard, mais cela passe encore.
Par exemple voilà un calendrier perpétuel, qui détermine le jour de la semaine correspondant à une date donnée:
http://svn.gna.org/viewcvs/bhrid/trunk/src/calendar.nw?revision=35
Après avoir lu The Advanced TeXbook de David Salomon, je me suis mis à coder en TeX pour le plaisir… je ne connaissais pas encore LaTeX.
Ceci dit je trouve LaTeX tout à fait inadapté à la saisie du texte. Si on veut un marquage propre il faut définir ses macros soi-même est c'est vite casse -bonbons parceque LaTeX est assez difficile à programmer, toutes les fonctions ont des noms à la con, la doc est imbuvable, etc.
J'aime bien le marquage minimal et le côté machine à écrire de plain TeX, conventions détruites par LaTeX. Voir par exemple:
http://svn.gna.org/viewcvs/bhrid/trunk/example/mg_letter/example.tex?revision=116
Un exemple de lettre au marquage assez minimal.
Une autre différence de point de vue est que les formats (ensembles des macros préchargées en TeX) jouent un rôle plus important en Bhrìd TeX. (D'après moi le chargement des fontes et le choix du codage d'entrée doit avoir lieu dans le format.)
[^] # Re: troff
Posté par Sygne (site web personnel) . Évalué à 3.
C'est marrant, c'est ce que j'aime aussi dans troff. Il y a un côté artisanal qui me plait beaucoup, et j'ai plaisir à acquérir un savoir faire et à l'utiliser pour résoudre chaque petit problème. J'ai même l'étrange impression de manipuler de la matière plus que des concepts.
Je ne comprends pas ça, mais j'imagine qu'il suffirait que je pratique pour Tex pour comprendre. Qu'importe pour l'instant.
[^] # Re: troff
Posté par Michaël (site web personnel) . Évalué à 3.
PS. J'ai pas très bien compris ce que tu cherches. Un exemple des macros de la „domain structure” pour parler comme groff_mdoc(7) ?
[^] # Re: troff
Posté par Sygne (site web personnel) . Évalué à 3.
Oui, en quelque sorte, une macro qui donne son format à une page, et non pas seulement à un paragraphe: entête ou pied de page, seconde colonne, qu'importe.
C'est parce que je me demande quel mécanisme correspond aux pièges de troff (macro appelées lorsque le curseur atteint un endroit de la page), et comment il fonctionne.
Ce n'est peut-être pas clair. Les commandes de troff sont très proches de la réalité de la page. Il y a trois mécanismes qui correspondent aux évènements qui surviennent à un flux de texte dans une page: l'environnement, qui encloisonne une partie du texte et lui donne un style, la diversion, qui extrait une partie du texte de son flux (une fourche quoi), et les pièges qui surviennent lorsque le curseur atteint un endroit de la page.
Pour faire une note de bas de page, par exemple, on dévie la note du flux du texte par une diversion, on encloisonne le texte de la note dans un environnement, et on pose un piège en pied de page qui affiche la note lorsqu'il se déclenche.
Ce sont les mécanismes similaires que je voudrais voir fonctionner dans un petit exemple. Si c'est possible et pas trop casse tête.
[^] # Re: troff
Posté par Michaël (site web personnel) . Évalué à 4.
En TeX ces mécanismes s'appelent output routine, OTR (OR faisait certainement trop indécis).
Le principe est que TeX assemble des paragraphes dans la main vertical list, parallèlement à l'assemblage des paragraphes on peut demander de la place pour des réserves (par exemple les notes de bas de page ou les illustrations). Lorsque la hauteur cumulée de la main vertical list est des réserves dépasse une certaine hauteur (en gros la hauteur attendue de la page), une routine utilisateur est appelée (la fameuse OTR) sa mission est d'écrire une page dans un fichier. Elle peut prérarer cette page comme elle le veut à partir des informations qui lui sont données. L'OTR la plus simple est effectivement le mode machine à écrire mais on peut faire des choses plus complexes, comme un mode deux colonnes ou des maquettes plus élaborées.
Tes explications me donnent l'impression que troff affiche les notes de bas de page “hors page” dans le blanc sous le texte, c'est ça?
[^] # Re: troff
Posté par Sygne (site web personnel) . Évalué à 3.
À peu près: troff assemble le flux de texte de la page, et parallèlement, il assemble le flux de texte des diversions (les notes par exemple). Quand le flux de texte de la page atteint le piège, le mécanisme se déclenche, et affiche les diversions au bon endroit.
Au début on place le piège en bas de page, et on le remonte petit à petit de la taille des notes de bas de page. Si on affiche une très longue note, le piège peut-être déclenchée en haut de la page.
Tu veux bien me donner un exemple simple de code d'OTR ?
[^] # Re: troff
Posté par Michaël (site web personnel) . Évalué à 4.
Voilà celle de plain TeX avec mes annotations et une petite simplification:
*: Dans l'empilement habituel des boîtes verticales il y a un extra-interligne (les cas typique est celui des lignes d'un paragraphe).
[^] # Re: troff
Posté par Sygne (site web personnel) . Évalué à 3.
Enfin une introduction à Tex digne de ce nom!
Il est très bien ton exemple – ça me donne presque envie d'apprendre Tex.
[^] # Re: troff
Posté par Michaël (site web personnel) . Évalué à 2.
Je ne peux que t'encourager à apprendre Bhrìd TeX :D
Les deux livres biens que je connais pour la programmation en TeX sont le TeXbook de Knuth et le Advanced TeXbook de Salomon.
N'hésite pas à poser toutes tes questions!
J'en profite pour faire de la pub pour METAPOST un programme de dessin pas très intéractif, compagnon de TeX (et au passage pour mes macros BSD Make):
http://home.gna.org/bsdmakepscripts/tex.html
Dans la page (in inglishe, car je suis trop international!) il y a un petit paragraphe sur METAPOST.
[^] # Re: troff
Posté par barmic . Évalué à 2.
J'entendais pouvoir faire ça :
ou
Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)
[^] # Re: troff
Posté par Sygne (site web personnel) . Évalué à 3.
Il y a tout un ensemble de formatages en troff qui peuvent se faire en ligne (les fontes, la taille des fontes, les variables, les déplacements du curseur, les dessins et j'en oublie probablement):
Mais les commandes et les macros ne peuvent pas être appelées de cette façon – ce qui soulève d'ailleurs des difficultés concernant le placement de la ponctuation lorsque celle-ci doit être accolée à la fin d'une macro. On doit alors placer la ponctuation en argument à la macro, ce qui, pour le coup, est très peu ergonomique.
# Bon, faut arrêter maintenant...
Posté par Ignatz Ledebur . Évalué à 4.
Sérieux, à chaque fois que tu parles de troff, ça me donne envie de m'y mettre (ce qui n'est pas raisonnable vu le temps qu'il m'a fallu pour être à peu près à l'aise avec LaTeX)… tu as déjà songé à écrire des tutoriels pour maîtriser roff ? vu ton enthousiasme pour ce langage, ça aiderait sûrement à le populariser.
Sinon, quelques questions :
/usr/lib/man.conf
pour le "groffiser" ou tu installes le heirloom dans un path dédié ?ps2pdf
? j'imagine qu'on ne peut pas avoir d'hyperliens dans les documents avec ce système…Sans voir le code, c'est difficile. Pour
idx
, la seule chose que j'aurais à dire, c'est que awk n'est pas vraiment adapté pour faire des commandes, car il n'y a pas de moyen standard de séparer les options de l'interpréteur des options du script (le-Wexec
de Gawk). De plus si un jour tu veux ajouter de la recherche de regex donnée en entrée, évaluer et insérer la regex en dur dans le code awk via le shell peut-être bien plus efficace qu'utiliser des regex dynamique en pur awk.[^] # Re: Bon, faut arrêter maintenant...
Posté par Sygne (site web personnel) . Évalué à 5.
J'y songe oui, mais c'est à la fin de ma todo list. J'ai d'abord des macros et des scripts à publier. Et suite à notre précédente discussion, je me suis décidé à utiliser troff lui-même pour ça, ce qui demande un peu de boulot. Enfin, pour le tutoriel, il m'a fallu trouver et adapter un colorateur syntaxique… Tout ça est long.
J'ai installé heirloom troff dans /opt, il s'occupe des pages de manuel heirloom, et laisse groff s'occuper des pages de manuel du système. Comme je me sers surtout de heirloom troff pour mes textes, je me suis fait un petit script,
h
, que j'appelle avant chaque commande heirloom, et qui modifie le path pour l'occasion.Je n'ai pas essayé, mais voici quelques pistes:
- activer les macros de plus de deux lettres avec l'option -x3 (
troff -x3
),- activer la compatibilité avec groff en appelant la macro g (
troff -mg
),- utiliser la macro fournie avec groff plutôt que l'historique macro doc (les bsd eux-mêmes utilisent maintenant la macro de groff, qui est du reste sous licence bsd).
- dans le tuyau appelant troff , utiliser les pré-processeurs heirloom, et compléter la commande avec ul et col.
Mais parfois, groff reste meilleur que heirloom troff, en particulier lorsque pic est utilisé.
Les polices sont une bonne raison de préférer heirloom troff à groff, car il comprend tous (?) les formats, y compris l'opentype, sans modification. Il faut les mettre dans
$TROFFONTS
(2 F et un S), et suivre le manuel pour apprendre à les monter:Je n'ai pas remarqué, mais je n'ai pas forcément l'œil.
Si, métadonnées, liens internes et liens externes avec heirloom troff (potentiellement aussi avec groff, mais je ne sais pas bien comment):
C'est un peu fastidieux à écrire, il faut se faire des macros raccourcis.
En fait,
idx
est un script shell composé de fonctions en awk. Quand je serai prêt pour la publication, j'en parlerai ici pour avoir des retours sur le code lui-même.Je suis heureux de voir que troff peut faire des émules!
[^] # Re: Bon, faut arrêter maintenant...
Posté par Ignatz Ledebur . Évalué à 2.
Merci d'avoir pris le temps de répondre. J'ai téléchargé le manuel PDF du heirloom troff, je vais sûrement l'imprimer pour pouvoir potasser ça à l'occasion.
En tous les cas, j'ai hâte de voir ton projet se monter (aussi bien pour son contenu que pour son mode de publication :).
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.