Txt2tags

Depuis plusieurs années, j’utilise [txt2tags http://txt2tags.org] pour traduire des fichiers textuels vers [LaTeX latex.html] et html. Les fichiers LaTeX sont ensuite compilés pour produire du PDF.

Malgré un marquage beaucoup plus léger que celui de LaTeX, on arrive à produire des documents assez jolis si on prend un peu de temps pour mettre au point des fichiers de style : .sty pour LaTeX, et .css pour html.

De plus, on peut également définir des filtrages preproc et postproc pour ajouter de nouvelles constructions.

Voilà quelques exemples de ma configuration actuelle.

Présentation rapide

Un document t2t est un fichier textuel où les trois premières lignes sont une entête généralement utilisées de la façon suivante :

    Titre du document
    Auteur ou sous-titre
    Version et/ou date

Mais on peut aussi laisser ces lignes vides si on n’en a pas l’usage.

Viennent ensuite des lignes contenant des directives de configuration. Dans le cas le plus simple, il n’y en a pas, mais on verra plus loin à quoi ça peut servir.

Puis, vient le contenu du document. La syntaxe du marquage est très simple. Ce site donne plus d’exemple, et la page sur les inclusions est particulièrement utile.

Et c’est tout : on peut se concentrer sur le contenu, et utiliser son éditeur préféré.

Traduction

txt2tags propose tout un tas de langage de sortie, mais comme je l’ai dit, j’utilise juste tex et xhtml.

Xhtml

%.html : %.t2t
         txt2tags -t xhtml -o $@ $<

Voir aussi t2t_math_ml : mon petit outil pour traduire les formules en MathML.

LaTeX

%.tex : %.t2t
        txt2tags -t tex -o $@ $<
        sed -i "s/documentclass{article}/documentclass[a4paper,twoside,12pt]{article}/" $@

%.pdf : %.tex
        rubber --pdf $<
        mv $@ $@.tmp
        rubber --pdf --clean $<
        mv $@.tmp $@

Serveur trac

J’ai aussi déjà utilisé moin pour mettre automatiquement les documents sur un serveur trac.

Compilation :

%.moin : %.t2t
        txt2tags -t moin --no-headers -o $@.tmp $<
        echo "= WARNING =" > $@
        echo "**DO NOT EDIT** this page since it is automatically updated." \
             >> $@
        cat $@.tmp >> $@
        rm $@.tmp

Mise à jour :

trac-upd: index.moin
    	trac-admin $(HOME)/Trac/Projet wiki import UserManual $<

Fichier de configuration

Dans tous mes fichiers t2t, j’inclus un fichier commun txt2tagsrc. Pour cela, il suffit d’ajouter la ligne suivante dans la partie de configuration (après les trois lignes de titre, donc) :

%!includeconf: txt2tagsrc

Il y a des éléments communs à tous les formats :

%!encoding: UTF-8
%!preproc: (Ocaml) [\1 http://caml.inria.fr/ocaml/index.en.html]

et des directives spécialisées, comme par exemple :

% A line that will only appear in html version
%!preproc(xhtml): "%html% " ""
% A line that will only appear in tex version
%!preproc(tex): "%tex% " ""

ou encore :

%!options(xhtml): --style txt2tags.css --css-sugar
%!options(tex): --style txt2tags.sty

qui indique les fichiers de style. Il faut donc ensuite que ces fichiers soient cohérents avec ce qu’on définit.

J’ai par exemple ajouté la possibilité d’ajouter des blocs spécialisés :

%!preproc(xhtml): ENDMINIVERB "</div>"
%!preproc(xhtml): MINIVERB '<div class="tipdiv">'

%!preproc(tex): "ENDMINIVERB" "\end{tip}"
%!preproc(tex): "MINIVERB" "\\begin{tip}"

ce qui me permet d'écrire par exemple :

''' TIP
Penser à faire le ménage...
''' ENDTIP

Et de voir le texte apparaître dans une jolie boite. Mais pour cela, il faut définir les styles correspondants.

Style .css pour html

J’ai un fichier partagé txt2tags.css, mais il faut noter que l’on peut le surcharger si on a des styles spécifiques à un document. Pour tipdiv défini ci-dessus, j’ai par exemple :

.tipdiv {
  border: thin solid;
  border-left: 5px solid #910c29;
  padding: 1ex;
  padding-left: 2ex;
  margin: 2ex 2cm;
  box-shadow: 4px 4px 4px #CCC;
}

Style .sty pour LaTeX

  • TODO : ajouter un exemple de style LaTeX correspondant

Et les maths

J’ai commencé à développer une petite extension t2t_math_ml : pour gérer les formules mathématiques, mais il y a encore un peu de travail pour mettre tout ça au propre…

Voir aussi :