Previous Up Next

6  Configuration d’HEVEA

Un intérêt évident de la reconnaissance de la définition de commande (et d’environnement) est la possibilité de traduire les fichiers source LATEX qui en contiennent. Un autre intérêt, et non des moindres, réside dans la possibilité pour l’utilisateur de paramétrer les traductions ou d’étendre la fonctionnalité d’HEVEA.

6.1  Constructions de base

HEVEA reconnaît finalement assez peu de commandes de façon directe, la majorité des commandes de base de LATEX sont définies dans un fichier de configuration hevea.sty qui est chargé avant de commencer la traduction. Les appels de ces commandes seront ensuite traités par le mécanisme général de l’appel de commande. Par exemple, voici la définition pour HEVEA de quelques commandes et environnements disponibles par défaut en LATEX :

%% Special caracters
\newcommand{\%}{\@print{%}}
\newcommand{\$}{\@print{$}}
\newcommand{\#}{\@print{#}}
  ....

%% Some environnments
\newenvironment{center}{\@open{DIV}{ALIGN=center}}{\@close{DIV}}
\newenvironment{quote}{\@open{BLOCKQUOTE}{}}{\@close{BLOCKQUOTE}}
  ...

HEVEA pouvant traiter les boites, les compteurs LATEX et les macros conditionnelles de TEX, on dispose de fait d’un petit langage de programmation suffisant pour écrire en LATEX des définitions relativements complexes. Voici par exemple la définition de l’environnement figure extraite de hevea.sty.

%% Box for caption
\newsavebox{\@caption}
\newcommand{\caption}[1]{\sbox{\@caption}{#1}}
%% Figure
\newenvironment{figure}[1][]{%
  \caption{}\refstepcounter{figure}%
  \@open{BLOCKQUOTE}{}\@print{<HR>}%
}{%
  \par\begin{center}%
  Figure \thefigure\iffrench~\fi: \usebox{\@caption}%
  \end{center}%
  \@print{<HR>}\@close{BLOCKQUOTE}}

La définition en LATEX de la majorité des constructions reconnues permet de simplifier l’analyseur principal. En outre, et c’est peut-être le plus important, l’utilisateur peut redéfiner ces constructions. Supposons par exemple que l’on souhaite mettre en italiques toutes les citations d’un texte. Il suffira alors de redéfinir l’environnemnt quote :

\renewenvironment{quote}
  {\@open{BLOCKQUOTE}{}\itshape}
  {\close{BLOCKQUOTE}

Cette possibilité de changer les définitions par défaut d’HEVEA s’applique à l’ensemble des constructions qui ne sont pas reconnues directement par l’analyseur principal. Un cas particulier intéressant est celui des constructions non-reconnues par HEVEA. Par exemple, le symbole “\mapsto” (“↦”) n’est pas reconnu car il n’existe pas dans la police symbole utilisable par les browsers. Si l’utilisateur fait le choix de rendre ce symbole par une flèche rouge, il écrira :

\newcommand{\mapsto}{{\red\rightarrow}}

(La commande “\red” est définie comme “\@color{red}” dans le fichier de configuration hevea.sty.)

6.2  Détail des changements de style

Nous sommes maintenant en mesure de comprendre le mécanisme complet des changements de style et de leur paramétrage par l’utilisateur. Les appels au gestionnaire de sortie sont réalisés par les commandes internes à un argument \@style, \@fontcolor et \@fontsize, dont la reconnaissance provoque un appel à Html.open_mod. Par exemple, “\@style{I}” entraîne un appel “open_mod (Style "I")”, “\@fontcolor{blue}” un appel “open_mod (Color "blue")”, etc.

Reprenons l’exemple des changements de forme (cf. la table 1). Les déclarations en vieux style LATEX sont réalisée par des appels à ces commandes internes :

italique\newcommand{\it}{\@style{I}}
penchée\newcommand{\sf}{\@style{I}\@color{maroon}}
petite capitales\newcommand{\sc}{\@color{blue}}

Les déclarations LATEX2e doivent annuler tous les autres changements de forme avant de procéder à leur changement. En effet, les formes de polices sont mutuellement exclusives. On aura donc:

italique\newcommand{\itshape}{\@anti{\sc\sf}\it}
penchée\newcommand{\sfshape}{\@anti{\it\sc}\sf}
petite capitales\newcommand{\scshape}{\@anti{\it\sf}\sc}
droite\newcommand{\upshape}{\@anti{\sc\sf\it}}

Où la commande interne \@anti annule les changements de style données en argument. Lorsqu’il a reconnu la commande interne \@anti et lu son argument dans une chaîne “arg”, l’analyseur principal procède en deux étapes :

  1. Il analyse “arg”, mais le gestionnaire de sortie est au préalable modifié pour rendre la liste des styles actifs à la fin de l’analyse au lieu de générer une sortie. Ainsi, dans le cas de la déclaration “\upshape”, la liste “[Color "blue" ; Style "I" ; ]” sera retournée.
  2. Il appelle Html.erase_mods avec en argument la liste des styles rendus à l’étape précédente.

Un utilisateur qui souhaiterait modifier les déclarations de changement de forme pour par exemple rendre la forme penchée en gras se contentera donc d’écrire :

\renewcommand{\sf}{\@style{B}}

ou même, s’il ne craint pas une redéfinition de “\bf” :

\renewcommand{\sf}{\bf}

Ainsi la déclaration “\sfshape” finira par ouvrir un élément de niveau texte “B” et un appel à toute autre déclaration de changement de forme à l’intérieur de l’élément “B” le fermera.


Previous Up Next