Rendez-vous sur Arrakis

Écrire efficacement, c'est possible avec txt2tags

Je suis actuellement en train d'écrire un ouvrage assez long. C'est l'occasion pour moi de redécouvrir txt2tags. Et bon sang, que c'est génial!

Il s'agit d'un langage markup. En gros, ce que vous écrivez n'est pas ce que vous obtenez à la fin, dans le même principe que markdown ou LaTeX qui produisent respectivement des pages web html ou des pdf de qualité. Par exemple, si vous écrivez ceci :

Il ne **faut pas** respirer de la compote : ça fait //tousser//

On obtient après conversion par le logiciel txt2tags ceci :

Il ne faut pas respirer de la compote : ça fait tousser.

Alors que je trouve markdown excellent, txt2tags le dépasse très largement à mon avis, et je pense avoir du mal à m'en passer désormais, et ce pour plusieurs raisons.

1. Tout d'abord, c'est un langage markup lisible. La preuve :

 markdown              LaTeX                      txt2tags
 **gras**            \textbf{gras}                **gras**
 *italique*          \textit{italique}            //italique//
 

Ça facilite l'écriture et la correction. Imaginez retrouver une coquille dans un langage comme le LaTeX!

2. Il supporte des balises comme le souligné, le barré, les tableaux par défaut. On peut même faire des ancres dans le texte pour relier rapidement un mot à un paragraphe

Pour plus d'informations, lire [le paragraphe correspondant #superparagraphe].
 [...]
 ===Le super paragraphe===[superparagraphe]

3. Il permet d'exporter son texte dans de multiples langages, comme le LaTex, le html, mais aussi dokuwiki et bien d'autres. Ça peut paraître idiot, mais un document que j'écris un jour pour une page html pourrait très bien prendre place plus tard dans un wiki, voire faire l'objet d'un document à imprimer (donc LaTeX). Je vous jure que alors qu'on pense ne pas avoir besoin de ce genre de choses, c'est lorsque ça s'impose qu'on regrette de ne pas l'avoir utilisé.

4. On peut inclure d'autres fichiers avec %!include: fichier.t2t

5. C'est très simple de rajouter des balises personnelles. Pour, par exemple, supporter les exposants et indices dans un document html, on met ceci au début du fichier txt2tags :

%!postproc(html):  \^\^(.*?)\^\^  <sup>\1</sup>
 %!postproc(html):  ,,(.*?),,      <sub>\1</sub>
 

Ici, txt2tags va remplacer les "^^" et les ",," par les balises html appropriées après la conversion. Et on en arrive au truc le plus génial de txt2tags : les instructions pré-conversion.


6.
Imaginons que dans mon document, je fasse plusieurs fois référence à un ouvrage ou un site internet. À chaque fois que j'en parle, je devrais ajouter les balises qui vont bien :

Exemple en markdown
 voici un nouveau site à lire absolument qui s'appelle [volted](http://volted.net/). On y trouve des informations sur OpenBSD, rédigées avec amour par sogal.
 [..]
 [..]
 On remarque d'ailleurs que [volted](http://volted.net/) est propulsé par blogotext.

Eh bien avec txt2tags, ça ressemblerait à ça :

 %! preproc: volted "[volted http://volted.net/]"
 Exemple en txt2tags
 voici un nouveau site à lire absolument qui s'appelle volted. On y trouve des informations sur OpenBSD, rédigées avec amour par sogal.
 [..]
 [..]
 On remarque d'ailleurs que volted est propulsé par blogotext.

C'est vraiment génial. Si par exemple on veut faire un renvoi dans son texte plusieurs fois à un autre paragraphe, le preproc est parfait. On peut aussi l'utiliser pour remplacer rapidement plusieurs parties du texte identiques en ne modifiant qu'une seule ligne.

Si vous n'avez pas d'éditeur de texte sous la main, vous pouvez l'essayer ici.. Il y a même une bibliothèque php pour vos sites si vous voulez!
Un CMS ou un blog qui utiliserait ce langage serait vraiment une perle!

le 10/05/2016 à 10:56:10, minami-o a dit :

Merci pour cette découverte, effectivement ç'a l'air plus complet que le markdown, il faudra que j'y jette un œil.
Cela dit, concernant le point 6, tu peux aussi réutiliser un lien en md, en procédant de la manière suivante :
> [texte][lien]
> […]
> [autre texte][lien]
> […]
> [lien]: http://toto.test
C'est décrit ici sur la page de référence du md…
Sinon, merci pour ton blog, découvert il y a peu mais très intéressant !

le 10/05/2016 à 11:14:58, thuban a dit :

C'est possible en effet puisque ce sont des ancres finalement. Sauf que markdown ne le fait que pour du html.
Là, je peux faire des renvois simplement en m'épargnant la syntaxe LaTeX.

le 10/05/2016 à 11:27:15, Spartiate a dit :

Si on utilise swx, il peut donc être plus intéressant/productif d'utiliser txt2tags so??

le 10/05/2016 à 11:31:04, thuban a dit :

@Spartiate : Pourquoi pas?
Il faut juste changer dans les options :
MDHANDLER="/usr/bin/txt2tags -t html"
EXT=".t2t"


J'ai utilisé ça pendant longtemps, et je vais y revenir!

le 10/05/2016 à 18:55:51, sogal a dit :

Intéressant ça, d'autant que je vois que ça se convertit bien au format Mediawiki que j'utilise régulièrement.
Je n'avais jamais utilisé ce genre de langage markup, par flemme parce que je suis sûr que j'aurais gagné du temps, c'est ptete l'occasion de s'y mettre !

Et merci pour le clin d' oeil c'est sympa :)

le 10/05/2016 à 19:45:23, thuban a dit :

@sogal : Pas de quoi ;)

Et oui, y a des chances que tu gagnes du temps au final!!!

J'ai ajouté des petits trucs à vim pour convertir/visualiser rapidement, si ça t'intéresse…

le 11/05/2016 à 06:09:21, sogal a dit :

@thuban : Je ne dis pas non, je suis sûr que ça bénéficiera à tous. J'ai vu déjà que tu avais une config vim pour le markdown, bien vu !!

le 11/05/2016 à 06:38:15, thuban a dit :

Alors voilà la partie concernant txt2tags, donc les fichiers avec une extension .t2t :

" txt2tags
au BufNewFile,BufRead *.t2t map 2l :w<CR>:!txt2tags -t tex "%" ; pdflatex "%:r.tex" ; mupdf "%:r.pdf"<CR>
au BufNewFile,BufRead *.t2t map 2h :w<CR>:!txt2tags -t html -o /tmp/txt2tags_apercu.html "%" ; firefox "file:///tmp/txt2tags_apercu.html" <CR>
au BufRead,BufNewFile *.t2t set tw=80
au BufNewFile,BufRead *.t2t set spell
au BufNewFile,BufRead *.t2t setlocal spell spelllang=fr
au BufNewFile,BufRead *.t2t set ft=txt2tags
au BufNewFile,BufRead *.t2t set noexpandtab

Appuyer rapidement sur “2” et “l” va créer un pdf et l'ouvrir avec mupdf
De même avec “2” et “h” pour avoir le rendu html dans firefox.
Sinon, j'acrive la coloration syntaxique, le correcteur orthographique, et ne remplace pas les tabulations par des espaces pour permettre de faire des citations.

le 11/05/2016 à 09:42:58, Sabcat a dit :

https://plugins.getnikola.com/#txt2tags

le 11/05/2016 à 11:09:01, sogal a dit :

Merci bien, c'est impec !
Question sur le binding “2l” tu es obligé de passer en latex puis par pdflatex pour obtenir un .pdf ? Ou d'autres filtres de sortie donnerait un aussi bon résultat en pdf ?
De même, je n'ai pas vu sur le site mais tu sais peut-être : pas d'export possible en .odt ?

le 11/05/2016 à 11:46:52, thuban a dit :

@Sabcat : Chouette! Je ne connaissais pas ce générateur de site statique :)

@sogal : oui, txt2tags exporte en code LaTex, qu'il faut convertir ensuite. txt2tags ne génère pas le pdf directement.
Pour l'export odt je ne sais pas, mais ça m'intéresserait beaucoup!

le 11/05/2016 à 12:08:24, thuban a dit :

@sogal : Pour l'export en odt, j'ai trouvé 2 trucs :
- Le plugin dokuwiki qui exporte en odt : https://www.dokuwiki.org/plugin:odt
- Un convertisseur html vers .odt, qui est inclu à libreoffice : txt2tags -t html -o tmp.html document.t2t | libreoffice --headless --convert-to odt tmp.html
En gros, on convertit en html, puis du html au .odt.

Dans le vimrc, ça donne ça : au BufNewFile,BufRead *.t2t map 2o :w<CR>:!txt2tags -t html -o "/tmp/%:t:r.html" "%" ; libreoffice --headless --convert-to odt --outdir "%:p:h" "/tmp/%:t:r.html" <CR>

le 11/05/2016 à 13:04:17, sogal a dit :

@thuban : Héhéhé merci bien, tout clé en main ;)
En fait c'était pour éviter d'installer tout LibreOffice que l'export direct m'intéressait. Mais bon, vu qu'Abiword ne fonctionne pas, je vais devoir m'y résoudre.

le 11/05/2016 à 13:45:50, sogal a dit :

@thuban : En fait j'ai trouvé ce qu'il me faut avec unoconv :

au BufNewFile,BufRead *.t2t map 2l :w<CR>:!txt2tags -t html “%” ; unoconv -f odt “%:r.html” <CR>

Ça le fait bien sur un formatage simple a priori, je te dirais sur des trucs plus élaborés.

le 11/05/2016 à 14:51:00, thuban a dit :

@sogal : Ça reste simple comme conversion bien sûr. txt2tags est un langage markup pratique pour se concentrer sur le fond. Une fois que t'as finit d'écrire, tu convertis puis tu te concentres sur la forme si besoin :)

le 14/06/2016 à 07:35:46, farvardin a dit :

Je n'ai jamais compris pourquoi le markdown a été autant mis en avant sur autant de sites, d'autant plus que txt2tags est antérieur a markdown, bien plus complet et bien plus logique. J'imagine que c'était le manque de languages supportant txt2tags qui est en partie responsable de cela : uniquement en python à l'époque, alors que markdown propose php, ruby, perl etc.
Maintenant on a php et javascript en plus (uniquement vers html, c'est pour le web)

Concernant les moteurs de blog ou CMS qui peuvent utiliser txt2tags, j'ai essayé de convertir tout ce que j'ai pu à l'époque. On trouve cela, en partie, ici :
http://wiki.txt2tags.org/demos/
Ça fonctionne par exemple pour Wordpress, mais ce n'est pas optimal bien entendu. Dokuwiki fonctionne pas trop mal, ainsi que pmwiki.

Le plus avancé sera lionwiki-t2t, mais ça part d'une base très simple, donc ça ne sera pas forcément très convivial. Je l'utilise pour mes propres sites. Il est également possible de créer un bouton générateur de pdf depuis un ensemble de pages du wiki/cms (si on a latex ou wkhtmltopdf qui converti depuis des pages html)

Pour l'export au format odt, ça n'existe pas (encore), mais quelqu'un a créé un export rtf, qui est directement lisible dans abiword ou libre/openoffice. On le trouve dans la version de dev de txt2tags (avec un export ods, pour les tableaux) :

https://raw.githubusercontent.com/txt2tags/txt2tags/master/txt2tags

le 14/06/2016 à 14:34:43, thuban a dit :

@farvardin : Merci pour toutes ces intéressantes précisions.
Une lib php pour txt2tags devrait pourtant permettre son plus grand déploiement. Les habitudes ont la vie dure.

le 08/07/2016 à 07:46:57, lcb-c a dit :

Bonjour,

J'ai trouvé cet article très intéressant et j'ai d'ailleurs essayé txt2tags mais je dois écrire un README pour un projet versionné par GIT qui sera par la suite une page wiki, je dois donc pouvoir convertir mon texte en wiki (pas de problème pour ça) et en md, mais je ne vois pas de markdown, ni de github dans la liste des ‘targets’. Il y a une subtilité que j'ai manqué?

le 08/07/2016 à 19:37:19, thuban a dit :

txt2tags ne s'exporte pas en markdown. Il existe peut-être des astuces pour ça, comme par exemple utiliser pandoc pour convertir la syntaxe txt2tags vers markdown.

Cependant, markdown est censé comprendre le code html. Donc tu convertis le txt2tags en html et le colle comme du markdown et ça devrait passer :)

Demande sinon sur le site de txt2tags pour ça :) (mais tiens nous au courant ;) )

le 17/07/2017 à 10:11:14, farvardin a dit :

Message tardif, mais si ça peut servir pour d'autres…

En fait txt2tags permet d'exporter en markdown, depuis longtemps. Malheureusement, cela n'est pas sorti dans la version “stable”, disponible au téléchargement sur la page d'accueil de txt2tags :( Et ça sera sans doute comme ça encore longtemps.

On trouve cette fonctionnalité (ainsi que beaucoup d'autres) dans la version en développement, disponible ici :

https://raw.githubusercontent.com/txt2tags/txt2tags/master/txt2tags

Il faudrait vraiment présenter une archive “devel” sur le site de txt2tags parce que tout le monde prend la version “stable” complètement obsolète (de 2010) et ça fait une mauvaise publicité à txt2tags… mais ça ne résoudra pas le problème de la version packagée dans les distributions linux / bsd…