previous up next contents
Previous: 10 Maple Up: Applyx 045 Next: 12 Graphisme   Contents

Subsections

11 Html : latex2html

Vu l'incapacité du monde latex à fournir un plugin permettant de visualiser les équations dans les navigateurs web, un certain nombre de contournements se sont mis en place. Le fait qu'il y en ait plusieurs prouve que ces contournements ne fonctionnent pas si bien que cela.


11.1 pdf, url et hyperref

  1. Avec la version $ SuSE-9.3$, on constate un changement de comportement de la commande "\url", qui ne se comporte plus "verbatim". Un caractère $ \left[ \backslash \right]$ apparaissant dans le champ "adresse" est considéré comme introduisant une commandes et, en plus, les "url" débordent bêtement de la page.
  2. Pour $ SuSE-8.1$, la commande latex pointait vers l'exécutable : /usr/share/texmf/teTeX/bin/i386-linux-libc6/tex. Depuis la $ SuSE-9.3$, cette commande pointe finalement vers /usr/share/texmf/teTeX/bin/i586-linux/pdfetex, l'objectif étant d'obtenir un *.dvi modifié de façon à générer un *.pdf avec des liens html.
  3. Le package url a été modifié, et ne transcrit plus verbatim. Au contraire, les paramètres sont recodés "à la manière d'une équation". Et donc, par défaut, les espaces sont supprimés.

  4. Lorsque le package url est seul actif, les urls sont transcrites par des équations, police "code", avec une gestion bien faite des coupures.
  5. Lorsque le package hyperref s'en mèle, les urls sont transcrites par des liens actifs dans les fichiers *.dvi ou *.pdf. Ce package est appelé automatiquement par le package html (et donc latex2html est lui aussi concerné). Pour que les liens actifs soient sécables, il faut spécifier a4paper, breaklinks, hypertex comme options du package (les placer dans les options de documentclass).
  6. Si l'on utilise le driver standard (dvips) au lieu du driver hypertex, breakurls ne fonctionne réellement qu'avec une sortie directe en *.pdf (option pdflatex). Avec une sortie en *.dvi, les urls ne sont coupées qu'aux espaces et aux soulignés.
  7. Mise à jour depuis ctan : ftp://cam.ctan.org/tex-archive/macros/latex/contrib/hyperref.zip. Décompresser, donne un répertoire hyperref. Exécuter latex hyperref.ins, qui engendre tout ce qu'il faut (docstrip). Recopier tout cela dans un répertoire accessible par latex. On remarquera que les tests sont exécutés en *.pdf et que les urls sont juste assez petites pour ne pas avoir besoin d'etre coupées.

  8. Dans le présent document, nous utilisions :
    \let\weburl\url 
    \DeclareUrlCommand\url{\urlstyle{sf}} 
    \DeclareUrlCommand\code{\urlstyle{tt}}
  9. Mais rien n'est jamais vraiment simple. Se reporter au §§ 8 de latex2html.
Cet ensemble de modifications fonctionne très bien, ce pourquoi de nombreux auteurs préfèrent désormais se limiter à publier des fichiers *.pdf. Tant pis pour l'encombrement du web et le manque de confort des lecteurs, qui doivent charger un fichier complet avant d'en examiner l'intéret.

11.2 La concurrence : tth

  1. Configurer Netscape (netscape nous broute).

    1. Batch à télécharger http://hutchinson.belmont.ma.us/tth/Xfonts.html
    2. Il faut "use document-specified fonts".
  2. Principe de base : tth n'utilise pas tex. Donc rien ne fonctionne en dehors de ce qui est strictement prévu.
  3. On peut prévoir des macros à double détente, les commentaires %%tth: étant pris en compte par tth.
  4. Gros avantage : la vitesse et la taille. En échange, on perd beaucoup sur les maths inline. Par exemple, ni vecteurs ni matrices. C'est un compromis.

11.3 Présentation de latex2html

L'idée générale est d'écrire les choses simples en html ordinaire et "les choses trop compliquées" en images.

  1. La version 1.70 (2002-2-1) est livrée avec $ SuSE-9.3$. Les adresses sont /usr/bin/latex2html pour l'exécutable, /usr/share/latex2html pour l'arborescence des fichiers (sauf la config), /usr/lib/latex2html/l2hconf.pm pour la configuration générale et /usr/share/doc/packages/latex2html/ pour la documentation.
  2. La version 1.43 (1999-2-8) était livrée avec $ SuSE-8.1$. La documentation se trouvait en /usr/share/doc/packages/l2h/ et arborescence + configuration en /usr/share/latex2html.
  3. La page d'accueil http://www.latex2html.org/ date de 2001, mais contient un lien vers http://saftsack.fs.uni-bayreuth.de/~latex2ht/current/ qui contient la version 2002-11-29 (dans des répertoires datés 2004-10-25. Seul fichier semblant avoir été changé : latex2html.pin,v 1.71 2004/01/06 23:49:54 RRM. La maintenance semble avoir été arretée.
  4. La doc existe sous deux versions : *.html et *.ps. Lorsqu'un serveur web existe sur une machine, il est bien que http://localhost/doc contienne un pointeur vers cette arborescence d'aide.

11.4 Le gang compu$erve

Par suite des ahurissantes prétentions du gang compu$erve sur les images *.gif, les images ont par la suite été codées en *.png. Plus de détails à ce sujet http://lpf.ai.mit.edu/Patents/Gif/Gif.html et sur http://dogma.net/DataCompression/GIF.shtml.

11.5 Configuration

  1. A peu près tout le barnum doit être modifié peu ou prou, et l'endroit pertinent pour les modifications n'apparaît pas souvent du premier coup. Par conséquent, commencer par déplacer les scripts (exécutables perl) latex2html et pstoimg vers /usr/lib/latex2html (et placer un lien dans /usr/bin). Donner les droits d'écriture (garder une copie read only).
  2. Documenter les changements, avec des dates et des "# #¶¶¶ ...". Les deux # sont indispensables (le premier for the line to be commented out, le second pour que cette ligne soit conservée lors d'un strip du fichier et le "¶¶¶" sert à retrouver tout cela par un grep ou par le traitement de texte.
  3. Il y a quatre niveaux de configuration possible :

  4. Comme d'habitude : éviter de placer les modifications durables dans le fichier de configuration générale, cela se perd dans les changements de version.

\begin{algorithm}
% latex2html id marker 1904
[htbp]
\vskip 0.5 em\verbatiminput...
...t-latex2html-init}
\par
\caption{User-level configuration file
}
\end{algorithm}

11.6 Réutilisation des images

  1. Dans une même page web, il est utile de coder par la même image tous les morceaux identiques.
  2. Lors d'une recompilation d'une page, il est plus rapide de ne recalculer que les images aynat changé.
  3. Mais les tables ne se codent plus correctement : convertir en images
  4. Mais les listings n'ont plus le bon numéro, car ce qui est codé dans l'image est le numéro lors de l'exécution différentielle.

11.7 Les barres noires

En résumé, le patch final et définitif, obtenu après divers succès partiels, consiste à remplacer /usr/share/texmf/dvips/misc/alt-rule.pro par un fichier vide. En détail :

  1. L'idée générale avons nous dit est d'écrire les choses simples en html ordinaire et "les choses trop compliquées" en images. Le problème se pose alors de l'alignement de ces images par rapport au texte. Il y a donc "ce qui ne passe pas dessous" et qui est aligné "bottom", tandis que "ce qui passe dessous" est aligné "center" et doit donc avoir une taille précise.
  2. Entre autres choses, latex2html crée un fichier images.tex qui est compilé en un fichier images.dvi. Chaque image se voit dotée (par images.tex) de deux barres noires, une à gauche et une en bas. Cette adjonction permet de définir la bonne bounding box pour l'image (LISTING 33).


    \begin{algorithm}
% latex2html id marker 1926
[tbh]
\hskip 1.2em\begin{minipage}...
...e}}%
\par
\caption{Création de l'image et de ses barres noires
}
\end{algorithm}

  3. Le fichier est alors transmis à dvips par la commande
    /usr/bin/dvips -S1 -i -Ppdf -E -o/tmp/l2h12445/image ./images.dvi 
    le résultat étant du postscript (-Ppdf) avec une nouvelle page par section (-i), pas plus d'une page par section (-S1), le tout allant dans le répertoire indiqué par -o. On obtient l'image donnée à droite du LISTING 33.
  4. Les messages de dvips étant, à notre goût, mal mis en page, nous modifions (line 3909) le script latex2html pour que la commande soit filtrée par :
    ... 2>&1 | tr -d '\\n\\r' | \\ 
    sed -e 's¶^¶\\n¶ ; s¶\$¶\\n\\n¶ ; s¶(->¶\\n(->¶; s¶(->¶\\n(->¶g' 
    On obtient alors exactement un message d'une ligne par image. Ce qui s'affiche est la liste des modules utilisés /usr/share/texmf/dvips.
  5. Puis le script pstoimg est appelé sur chaque image. Pour l'image 007, cela donne :

    /usr/bin/perl /usr/bin/pstoimg -type png -debug -tmp /tmp/l2h12445 -discard 
    -interlace -antialias -depth 1 -scale 1.637  
    -geometry 68x16 -margins 134,125 
    -crop abls -transparent -out img7.png /tmp/l2h12445/image007.ps
  6. On constate que :

    1. Les valeurs de $ height,\: depth,\: width$ étant données par le fichier *.log (du TEX spécial lancé par L2H), la relation :

      $\displaystyle \mathrm{geometry}=round(width)\times round\left(height+depth\right)$

    2. La largeur de la boundingbox est exactement 7 points de plus que celle de geometry. Pour ce qui est de la hauteur, l'écart est 4, 5 ou 6 points.
    3. margins vaut toujours la même chose, et la bounding box est toujours 133 xxx xxx 668.
  7. La première action est la mise au format de l'image *.eps en utilisant gs. L'image fait (geometry) 68x16 et sa bounding box fait 73x23. Multiplié par l'échelle et arrondi à l'entier voisin, cela donne 120x38.
  8. Puis l'image est rognée en utilisant pnmcrop, en plusieurs passages. Le principe est que :

    1. pnmcrop -sides : rogne le bord blanc sur les quatre côtés (et donc venant en butée sur les barres noires) : top=1, bot=2, left=1, right=2
    2. pnmcrop -bot -sides : enlève la barre noire du bas (il n'y a plus de pixels blancs à cette hauteur-là à cause du rognage précédent) : bot=2
    3. pnmcrop -left -sides : enlève la barre noire de gauche (même remarque) : left=2
    4. Puis on teste s'il reste un tout petit peu de blanc en bas (cas des équations alignées above ???), au quel cas on enlève.
    5. En tout, il a été enlevé top=1, bot=4, left=3, right=2
  9. Enfin l'image est mise au format *.png en utilisant ppmquant pour mettre l'image au format *.png (avec création d'un fond transparent).
  10. En fait ($ SuSE-10.2$) la barre noire de gauche déborde légèrement vers le bas. Le premier rognage rate la deuxième ligne du bas car elle contient un pixel noir, les autres étant blancs. Le deuxième rognage ne fait rien. Le troisième enlève la barre de gauche. Le rognage "shave" enlève la ligne blanche du bas. Et il reste la barre noire du bas, juste au bord. Il faudrait un deuxième rognage "shave"...

    FIG. 9: Avatars et barres noires
    \framebox{\begin{minipage}[c][1\totalheight]{0.3\columnwidth}%
\includegraphics[width=38mm,keepaspectratio]{Inclu_c_applyx/cropxx00}%
\end{minipage}}% \framebox{\begin{minipage}[c][1\totalheight]{0.3\columnwidth}%
\includegraphics[width=36mm,keepaspectratio]{Inclu_c_applyx/cropxx01}%
\end{minipage}}% \framebox{\begin{minipage}[c][1\totalheight]{0.3\columnwidth}%
\includegraphics[width=36mm,keepaspectratio]{Inclu_c_applyx/cropxx02}%
\end{minipage}}%

  11. On voit donc que quatre programmes doivent coopérer : dvips, latex2html, pstoimg et pnmcrop. Lorsque cette coopération est rompue, les barres noires apparaissent.

    1. Le diagnostic habituellement porté sur les listes de diffusion est une désynchronisation dans les versions des deux programmes du package. Cette hypothèse repose entre autres sur le fait que les commandes latex2html -v et pstoimg -v donnent des numéros de version... qui n'ont rien à voir entre eux (à part une commune date de release). Hors propos.
    2. Pour de vieilles versions, il fallait améliorer la coopération entre pstoimg et pnmcrop en ajoutant quelques "black" en trois bons endroits du script pstoimg.
      $croparg = '-bot -black' ; 
      $croparg = "-$edge -black" ; 
      if(&do_cmd_norename("$PNMCROP -bot -black < $in",$tmp))
  12. Pour la version actuelle, le problème vient de dvips, dont les calculs sont désormais conduits en virgule flottante. Comme la barre de gauche est tracée de haut en bas, une erreur d'arrondi fait que cette barre dépasse au-delà de la barre noire du bas. Il faut donc modifier le fichier /usr/share/texmf/dvips/misc/alt-rule.pro.

    1. TVZ affirme qu'il vaut mieux tracer les traits avec stroke plutôt qu'avec fill. Mais il en oublie d'arrondir à l'entier le plus proche. Une modif est donc d'insérer :

      gsave newpath 

      transform round exch round exch itransform

      /ruleY X /ruleX X

    2. En fait alt-rule.pro est un vieux truc, datant de 1999, qui s'appliquait à dvips_5.85. Comme maintenant ($ SuSE-10.2$) on en est à dvips_5.95 datant de 2005, le meilleur patch est de remplacer le fichier alt-rule.pro par un fichier vide.

11.8 Icones de navigation

Reconfigurer les procédures définissant les barres de navigation dans l'un des fichiers de configuration. Le LISTING 34 donne un exemple de reconfiguration des barres hautes et basses.


\begin{algorithm}
% latex2html id marker 2029
[htbp]
\vskip 0.5 em\verbatiminput...
...ex2html-nav}
\par
\caption{Reconfigurer la barre de navigation
}
\end{algorithm}

11.9 Marche à suivre

  1. L'objectif est de disposer d'un fichier unique, lisible par les deux interpréteurs latex et latex2html. En principe, tout se passe tout seul. Et quand bien meme quelque chose irait mal, les commandes
    latex... et
    html... permettent de s'adresser à l'un ou l'autre des deux interpréteurs.
  2. Mais, dans la pratique, il faut forcer la main dans de nombreuses situations. Ne rien faire à la main. Il faut tout encapsuler dans des fichiers de commande. En particulier, les détails de configuration se règlent par un fichier .latex2html-init placé dans le répertoire courant. Commander tout cela depuis le répertoire fantome placé dans  /qublic_bin/azor pour commander les fichiers placés en /public_html/azor (éviter les exécutables dans l'arborescence html)
  3. Exporter le fichier $nom$version.lyx sous forme de fichier *.tex. Avec KLYX, il y avait le choix du nom de destination et [space][return] permettait de valider un nom par défaut. Avec LYX, ce choix a disparu et la commande $ \left[M-B  l\right]$ fournit $nom$version.lyx. Lorsqu'il y a des fichiers LYX inclus, ils se trouvent exportés aussi (dans leurs répertoires respectifs). Dans ce cas, il est utile de numéroter les copies, plutot que les originaux.
  4. Se placer dans le répertoire destination, et y recopier les fichiers utiles : $nom.tex et ./figures/*.eps. Il convient de raboter le numéro de version, car le nom des sous-répertoires dépend (par défaut) du nom du fichier principal. A la fin du processus, tout rebalancer dans le répertoire $nom attribué au document, de façon à laisser propre le répertoire principal.
  5. Quand quelque chose se passe mal, commencer par détruire le répertoire $nom, qui contient les anciennes images (à cause de $REUSE=2) et les fichiers de configuration latex.
  6. Rien ne va entre prettyref (Subsection 8.2) et latex2html : recoder toutes les références lors de la recopie des fichiers *.tex.
  7. Exécuter (si besoin) BibTEX après un premier passage de LATEX. Pour cela, le batch de commande consulte le fichier $nom.aux.
  8. Nous aurions besoin d'une double définition des url, soit :
    \def\myurl#1{\latex{\url{#1}}\html{\htmladdnormallink{#1}{#1}}}
    Mais alors, sous LYX, les url apparaitraient sous forme d'un ERT "LyxCode" et non sous la forme efficace d'un encadré spécialisé. Par conséquent, nous utilisons url dans LYX, et nous recodons les \url{http: en \myurl{http:... et nous introduisons la bonne définition lors de la recopie des fichiers *.tex. Faire la meme chose aux fichiers générés par NatBiB.
  9. Prévoir deux passages de LaTex (en tout, ou bien après l'exécution de BibTEX) pour générer les tables des matières et les index. Avec les versions récentes de LYX, l'indexation se fait spontanément.

11.10 Difficultés

  1. Taille des pages.

  2. Sainte Ursule a décidé que la taille des pages A4 serait $ 15.92  cm\times19.54  cm$. Par conséquent, l'utilisation d'encadrés de taille supérieure engendre un "encadré vide correspondant à un saut de page". Bilan, toutes les images sont décalées d'un cran. Contournement : s¶length= 842¶length= 1191¶ qui modifie la description de la page A4 pour lui donner la hauteur d'une page A3 (en fait $ 42  cm\div2.54 (in/cm)\times72 (pt/in)$ donne 1190, mais on veut pouvoir faire de la transcription inverse).
  3. Le chat est coupé en morceaux.
    Ligne 920 : print "Running $cmd > $out\n" ; 
    permet de voir la commande qui est en cours. Il y a un crop qui ne se fait pas bien. Et ???


11.11 Guerre des quotes

Description de la fameuse guerre des quotes ($ SuSE-6.1$). Sainte Ursule, qui prie pour nous, n'aime pas les quotes mixtes: il ne peut y avoir que des citations ouvrantes et des citations fermantes (et des tailleurs pour hommes ou bien pour femmes).

Donc toute "double quote" est LYX-reconvertie en "ouvrez-les quotes" (c'est à dire "grave-grave") ou "fermez-les-quotes" (c'est à dire "zaigu-zaigu"). Tant pis pour les infidèles qui prétendent utiliser des "quotequotes" dans un programme informatique. D'ailleurs le clavier permet tout juste d'introduire le caractère maudit (ctrl-").

La compilation usuelle lyx-tex-dvi-ps se passe sans incidents (majeurs), mais la compilation lyx-tex-html laisse des scories désagréables. On a en effet les transcriptions suivantes :

\begin{tabular}{\vert c\vert c\vert c\vert c\vert c\vert}
\hline
quoi&
caractèr...
...h{}\textbackslash{}\{\}&
\&\char93 ;\lq {[}nl]\tabularnewline
\hline
\end{tabular}

Il est donc nécessaire de réécrire les "quotquotes" par une commande sed portant sur le fichier *.tex. Pendant qu'on y est, on recode les backslash en un diacritique inutilisé (Aacute) pour qu'ils passent au travers (le codage par $\backslash$ produit un bitmap et pas un \...). Il faut évidemment modifier latex2html en conséquence. Voici donc script pour contourner tout cela :

# script sed_html (before an html compil) 
s/\\char`\\"{}/"/g 
s/\\char`\\\\{}/\\'A/g 
  
Ces embrouilles semblent avoir été réglées avec la livraison suivante $ SuSE-6.2$.


previous up next contents
Previous: 10 Maple Up: Applyx 045 Next: 12 Graphisme   Contents


douillet@ensait.fr
2007-12-06