#!/usr/bin/perl #CONVERTISSEUR LaTeX vers HTML utilisant tth et un programme Perl #Auteur: Éric Guichard, 2008-2010. #encodage latin1 #utilise tth pour convertir des fichiers .tex en html. #Traduit en français divers intitulés (références biblio...), intègre dans l'html #les figures, le titre, l'encodage et une table des matières #Enlève les \pageref et donne la liste des images à intégrer. #use strict; #Ultimes nettoyages: adapter la taille des images (width="50%" par exemple) #Enlever les scories du début du fichier html après le #Liés en général à l'en-tête du doc: \divide\hh by 60, etc. #Rappel: penser à des solutions dans le source tex du type # %%tth:\begin{html}Put the title here\end{html} #Seule chose à choisir? $input=1; #0 ou 1: accepter les \input{} ou non $f="/chemin/de/mon/fichier.tex"; #chemin/fichier.tex ($dossier, $fcourt)=($f=~/(^.*\/)(.*).tex/); #bonne formule chdir ($dossier); print "On travaille sur $fcourt dans $dossier\n"; #on fabrique un fichiertmp: $fresu=$fcourt."tmp".".tex"; #fichiertmp.tex $fresucourt=$fcourt."tmp"; #fichiertmp pour bibtex $fresuhtml=$fresucourt.".html"; $ffinalhtml=$fcourt.".html"; #fichier.html #pour le -Lfichiertmp $paramtth="-L".$fresucourt; open (F,$f); open (G,">$fresu"); #Nettoyage du fichier while() { if (/\\input{([^}]+)}/ and $input) #semble être fait par tth si chemin d'accès complet { $ficinuput=$1; #print $ficinuput,"\n"; $contenuinput=`cat $ficinuput`; $contenuinput=~s/^ *\\advance\\.*$//g; #brutal mais efficace (vire \advance\topmargin by -1 cm) print G $contenuinput,"\n"; next; } #Attention à Perl: %tableau, et \texttt{\%}. Et à la doc de LaTeX #s/%.*$//g unless $` =~/\\$/; chop; #encodage et titre $encodage=$1 if ( /^\\usepackage\[([^\]]+)\]{inputenc}/ ); if (/^\\title{(.+)}/ and !defined $titre) {$titre=$1; $titre=~s/\\\\/ /g; } #tabledesmatieres if (/\\maketitle/ and !defined $memomaketitle) { s/\\maketitle/\\maketitle\n\\tableofcontents\n/; $memomaketitle++; } next if /^ *\\tableofcontents *$/ and $memomaketitle ; #les pageref s/page +\\pageref{[^}]+}//g; s/\\newpage//g; #théoriquement inutile (éliminé par tth) #Figures if (/\\begin\{figure\}/) {$figure=1; } if (/\\end{figure}/) {$figure=0; } if ($figure) { s/\\centering//g; if (/\\includegraphics[^\{]*\{(.*)\}/) { $image=$1; $term.= "inclure l\'image $image \n"; $_="XXX".$image."XXX"; $descr{$1}="\"$image\""; } s/(\\caption\{.*\})/\\small\n $1 \\normalsize\n/g; } print G; print G "\n"; #last if /^ *\\end{document} *$/; Mauvais pour la doc de LaTeX } print G "\n"; #garantit le "\n" avec \end{document} close (F); close (G); system("/sw/bin/pdflatex $fresu"); system("/sw/bin/bibtex $fresucourt"); system("/sw/bin/pdflatex $fresu"); system("/sw/bin/pdflatex $fresu"); system ("/usr/local/bin/tth -w2 $paramtth < $fresu > $fresuhtml"); open (G, $fresuhtml); open (H,">$ffinalhtml"); while () { if (/<\/head>/) {$finentete=1; } if(/(.*)<\/title>/ and ! defined $finentete) {s/$1/$titre/g; } if ($finentete) { s/^by -*\.*\d +cm$//g; #print if / *`[;:!\?]*/; s/ *`[;:!\?]*$//g; s/> *References *</>Références</; s/> *Contents *</>Sommaire</; s/> *Footnotes[: ]*</>Notes</; s/XXX(.*)XXX/$descr{$1}/g; } print H; } close (G); close (H); system ("/bin/rm $fresucourt* "); print $term, "\n";