summaryrefslogtreecommitdiff
path: root/support/w2latex/Doc/W2LaTeX.tex
diff options
context:
space:
mode:
Diffstat (limited to 'support/w2latex/Doc/W2LaTeX.tex')
-rw-r--r--support/w2latex/Doc/W2LaTeX.tex559
1 files changed, 559 insertions, 0 deletions
diff --git a/support/w2latex/Doc/W2LaTeX.tex b/support/w2latex/Doc/W2LaTeX.tex
new file mode 100644
index 0000000000..51fa16a56a
--- /dev/null
+++ b/support/w2latex/Doc/W2LaTeX.tex
@@ -0,0 +1,559 @@
+\documentstyle[twoside,french]{article}
+\pagestyle{headings}
+
+\begin{titlepage}
+\title{\bf W2\LaTeX : Traducteur de Formats Descripteurs de Texte}
+\author{{Javier Garmendia} \\ {\scriptsize jgarmend@cyberspace.org}\\
+ {Pour le Centre International de Rencontres Math\'ematiques} \\
+ {Jean-Louis Maltret} \\ {\scriptsize jlm@cirm.univ-mrs.fr}}
+\date{Juin-Juillet 1994}
+\end{titlepage}
+
+\begin{document}
+
+\maketitle
+\begin{abstract}
+W2\LaTeX\ est un outil de conversion entre deux formats descripteurs de texte,
+permettant de traduire un document r\'edig\'e sous certaines versions de Word\copyright pour
+obtenir du code \LaTeX . Le document source pour W2\LaTeX\ devra \^etre, afin de faciliter la
+portabilit\'e, en RTF (Rich Text Format), un format propri\'etaire de
+Microsoft\copyright .
+\par
+W2\LaTeX\ n'utilise pas les fonctions cr\'e\'ees par Paul Dubois pour r\'ealiser des lecteurs RTF.
+ Ceci pr\'esente en partie l'avantage d'avoir une reconnaissance propre du document d'origine en
+suivant les sp\'ecifications de Microsoft pour Word 6.0.
+Il est constitu\'e
+d'un seul programme executable, sans feuilles de style, sans lybraries \`a installer. On peut attendre
+ de W2\LaTeX\ une conversion de documents contenant des param\`etres de pr\'esentation et de mise en page, mais
+aussi de formules math\'ematiques, et de certains types de tableaux.
+\par
+Ce document contient des informations techniques sur le programme.
+
+\end{abstract}
+\newpage
+\pagebreak
+\tableofcontents
+\newpage
+
+\section{Consid\'erations G\'en\'erales}
+\subsection{Les diff\'erents types de tokens}
+\par Le but de l'analyseur lexical est de d\'ecouper le texte \`a analyser en tokens
+qui seront transmis \`a la fonction r\'ealisant l'analyse gramaticale (que nous appellerons
+yyparse). Cette fonction v\'erifie la correction syntaxique du texte original, et d\'etermine \`a
+chaque instant
+quelle construction a \'et\'e r\'ealis\'ee, et ce que cela repr\'esente.
+\par
+ Nous avons declar\'e plusieurs sortes de tokens, car le type de leur valeur s\'emantique
+variera pour certains d'entre eux. Bison (et bien s\^ur Yacc aussi) imposent la limitation suivante au
+niveau de l'analyse semantique des tokens: \begin{quote} Seuls les tokens de type char pourront avoir
+une valeur s\'emantique permettant de les diff\'erentier gramaticalement. \end{quote}
+Ainsi, nous pourrons d\'eclarer des r\`egles
+de grammaire du style:
+\begin{quote}
+ expression: terme operateur terme;
+\end{quote}
+ O\`u op\'erateur est un {\bf +} ou un {\bf-}; Mais il est aussi possible de faire:
+\begin{quote}
+ expression: terme '+' terme $|$ terme '-' terme ;
+\end{quote}
+\par
+ Cette derni\`ere r\`egle prendra en compte la valeur du token interm\'ediaire pour d\'eterminer s'il s'agit
+d'une addition ou d'une soustraction. Par contre, il n'est pas possible de passer un mot de commande
+compos\'e de plusieurs caract\`eres ou ayant une structure plus complexe. Par exemple:
+\begin{quote}
+ racine: 'sqrt' expression;
+\end{quote}
+ n'est pas une r\`egle valable.
+\par
+ Il faut donc avoir un analyseur lexical qui fasse la relation entre les chaines de caract\`eres
+et des entiers, qui seront des tokens typ\'es comme des chaines de charact\`eres. Ceci afin de
+r\'ecup\'erer la valeur
+s\'emantique pour un traitement ult\'erieur. En reprenant l'exemple pr\'ec\'edent, on d\'eclarerait:
+\begin{quote}
+ \%token $<$char *$>$ SQRT\\
+ racine: SQRT expression;
+\end{quote}
+ et l'analyseur lexical attriburait:
+\begin{quote}
+ yylval="sqrt";\\
+ return SQRT;
+\end{quote}
+\par
+ Dans notre cas, nous aurons besoin de plusieurs types de tokens. Un type pour les mots de commande.
+Un autre pour les valeurs num\'eriques, ainsi qu'un type pour le texte. Nous rajouterons en plus un type
+pour les caract\`eres individuels, et un type pour les caract\`eres qui sont un mot de commande.
+ Cette declaration
+Bison se fait de la fa\c{c}on suivante:
+\begin{quote}
+ \%union \{ char calu; int numo; char* motcomm; char carcomm; char* pcdata; \}
+\end{quote}
+ dans le fichier de grammaire.
+ Ensuite il faudra typer les tokens.
+
+\subsection{La structure d'un mot de commande RTF}
+
+ Un mot de commande RTF est compos\'e des \'el\'ements suivants:
+\begin{itemize}
+\item Le caract\`ere "$\backslash$".
+\item Des caract\`eres alphab\'ethiques minuscules.
+\item Un \'eventuel param\`etre chiffr\'e.
+\item Un s\'eparateur.
+\begin{itemize}
+\item Dans le cas o\`u un param\`etre num\'erique est pr\'esent, il n'est pas n\'ecessaire d'avoir de
+s\'eparateur.
+\item Dans les autres cas, le s\'eparateur peut \^etre: "$\backslash$", "\{", "\}, ";", " ".
+\item Si le s\'eparateur est un espace " ", il sera ignor\'e. Sinon, le s\'eparateur sera transmis
+comme token \`a la prochaine analyse.
+\end{itemize}
+\end{itemize}
+
+\subsection{Les diff\'erents \'etats}
+
+ Lors de l'analyse du code RTF, il faut tenir compte de l'etat contextuel pour
+effectuer l'analyse lexicale differemment. Il y a plusieurs etats:
+\begin{enumerate}
+\item RTF:
+\begin{quote}
+ C'est le cas standard. On analyse et reconnait les mots de commande
+ et les passages de texte. On tiens compte aussi des caract\`eres de
+ commande comme d\`ecrit plus bas.
+\end{quote}
+\item Equation:
+\begin{quote}
+ Si on se trouve dans ce mode, il faut tenir en compte le fait que
+ l'on a modifi\'e le fichier d'entr\'ee, et qu'il s'agit maintenant du
+ fichier auxiliaire. Les caract\`eres de commande prennent une
+ signification particuliaire.
+\end{quote}
+\item Erreur:
+\begin{quote}
+ On a d\'etect\'e une erreur, et on analyse de fa\c{c}on \`a pouvoir la corriger.
+ Il faut alors sauter des morceaux de RTF (et donc perdre des informations)
+ mais de fa\c{c}on \`a en conserver le maximun.
+\end{quote}
+\end{enumerate}
+
+\subsection{L'analyseur lexical}
+
+ La structure de l'analyseur lexical est la suivante:
+\begin{enumerate}
+\item Si on est en \'etat de traitement des erreurs:
+\begin{enumerate}
+\item Si c'est le premier token demand\'e juste apr\`es la d\'etection de l'erreur:
+\begin{quote}
+ On avance jusqu'au debut du paragraphe suivant, et
+ on retourne le token PZERROR apr\`es avoir ins\'er\'e dans le fichier de sortie
+ le message d'erreur en \LaTeX .
+\end{quote}
+\item Si c'est le deuxi\`eme:
+\begin{quote}
+ On retourne PAR, et on anule l'\'etat de traitement des erreurs.
+\end{quote}
+\end{enumerate}
+\item On lit un caract\`ere dans le fichier d'entr\'ee:
+\item Si on est en mode Equation et si c'est un d\'elimiteur d'\'equation:
+\begin{quote}
+ On le retourne.
+\end{quote}
+\item Si on a trouv\'e la fin du fichier d'entr\'ee:
+\begin{enumerate}
+\item Si on \'etait en mode Equation (fichier d'entr\'ee auxiliaire), on replace le bon
+ fichier d'entr\'ee pour la suite.
+\item Sinon, on a termin\'e l'analyse.
+\end{enumerate}
+\item S'il s'agit d'un retour \`a la ligne:
+\begin{quote}
+ On l'ignore: RTF coupe les lignes comme il veut.
+\end{quote}
+\item S'il s'agit d'un caract\`ere d\'elimiteur: '\{' '\}' ';'
+\begin{quote}
+ On le retourne.
+\end{quote}
+\item S'il s'agit d'un d\'ebut de mot de commande: '$\backslash$'
+\begin{enumerate}
+\item On lit le reste de la commande.
+\item En tenant compte des caract\`eres sp\'eciaux: '\{' '\}' '$\backslash$' ';'
+ et en v\'erifiant que le mot de commande existe.
+\item Si le mot de commande n'existe pas ou n'est pas connu,
+ il est ignor\'e.
+\item S'il s'agit d'un caract\`ere de contr\^ole, on lit le param\`etre et on le passe a yyparse.
+\item On \'elimine les espaces utilis\'es comme d\'elimiteurs.
+\item Il faut tenir compte aussi des particularit\'es du mode \'equation.
+\end{enumerate}
+\item S'il s'agit d'un nombre et que le mot de commande lu pr\'ec\'edemment acceptait un param\`etre chiffr\'e:
+\begin{quote}
+ On lit les caract\`eres composant le nombre et on le passe a yyparse.
+\end{quote}
+\item Si ce n'est ni un mot de commande, ni un entier, ni un caract\`ere de contr\^ole simple, c'est du texte.
+\begin{enumerate}
+\item On le range dans un tampon, et on passe a yyparse un token PCDATA avec pour valeur s\'emantique
+ le pointeur sur le tampon.
+\item Il faut tenir compte aussi des particularit\'es du mode \'equation.
+\end{enumerate}
+\end{enumerate}
+\subsection{Le texte}
+
+ Les portions de texte pur 7bits sont consid\'er\'ees comme des tokens a part entiere et d'un seul bloc.
+Le programme W2\LaTeX\ poss\`ede des instructions permettant de v\'erifier que l'on n'exc\`ede pas la taille des tampons alloues,
+auquel cas le tampon est rallong\'e. Ceci permet de traiter les blocs de texte en suivant les sp\'ecifications, et o\`u la
+seule limitation de place serait due \`a un manque de m\'emoire de la machine (ou de m\'emoire allou\'ee par process). Ce texte sera
+transcrit tel quel dans le fichier \LaTeX\ de destination.
+\par
+ Une seule limitation est pr\'evue \`a cet effet: certains caract\`eres 7 bits ont une signification particuliaire pour
+\LaTeX . Ils seront traduits en leur equivalent par la fonction {\tt puretext}. (e.g.: \$ \_ / ...).
+
+\subsection{Les environnements}
+
+ La traduction des differents environnements est faite d\`es la reconnaissance d'un d\'ebut d'environnement. C'est \`a dire,
+que l'on n'attend pas la fin d'un paragraphe, ou d'une portion de texte dans un environnement particulier pour le transcrire.
+Ceci facilite le traitement Bison, mais se montre probl\'ematique parfois. Pour faciliter la t\^ache, nous avons implement\'e de nombreuses
+variables globales, \`a titre de FLAGS, qui sont lev\'ees au moment de l'\'etablissement d'un envirronnement, et qui sont baiss\'ees lors
+de la fermeture du mode en question.
+\par
+ Par exemple, d\`es que l'on trouve le mot de commande RTF 'qc' qui signifie que le paragraphe suivant va \^etre centr\'e, W2\LaTeX\
+produit sur le fichier de sortie l'equivalent \LaTeX : '\verb+\begin{center}+'. Ensuite, lors de la fin du paragraphe, il faut v\'erifier le
+contexte. Si RTF ne le pr\'ecise pas autrement, les paragraphes suivants seront aussi centr\'es, et donc on n'a rien \`a faire.
+Mais si on retrouve la commande RTF 'pard', il faut remettre tous les flags a 0, et fermer tous les environnements. Heureusement,
+le systeme de drapeaux fonctionne car en RTF on ne peut pas imbriquer deux environnements conflictifs. Et dans le cas o\`u des
+environnements de nature diff\'erente seraient pr\'esents simultan\'ement, ils seront hi\'erarchis\'es, et leur ordre de priorit\'e sera
+invers\'e lors de la fermeture. A titre d'exemple, le typage des caracteres (bold, italique ...) est moins prioritaire que le
+typage des paragraphes (centr\'e ...).
+
+\subsection{Les formules}
+
+ Les formules ne font pas partie de RTF lui-m\^eme, et les sp\'ecifications correspondantes sont fonction de l'aplication
+qui a g\'en\'er\'e le document. En cons\'equence, il faudra re-programmer les fonctions de traitement de ces champs pour des documents g\'en\'er\'es
+par d'autres aplications que Word 6.0 et que les versions 5.0 pour Mac et 2.0 pour PC qui sont celles qui ont d\'ej\`a \'et\'e impl\'ement\'ees.
+\par
+ Les formules font partie d'un ensemble de champs nom\'es a juste titre 'fields' dans les specifications RTF. Nous disposons
+des sp\'ecifications des fields de Word 6.0, qui ressemblent fortement (aux majuscules, symboles delimiteurs, et quelques mots de
+commande pr\`es) aux versions pr\'ec\'edentes de Word pour Mac et PC.
+\par
+ Remarquons qu'il existe toute une panoplie de 'fields' propres a Word qui n'ont pas \'et\'e consid\'er\'es dans la version
+actuelle de W2\LaTeX .
+
+
+\subsection{Les Fontes}
+
+ Nous n'avons pas tent\'e d'impl\'ementer de nouvelles polices de caract\`eres pour ne pas rentrer en conflict avec des configurations
+o\`u elles ne seraient pas pr\'esentes. Donc, toutes les polices sont transform\'ees en cmr, aux exceptions suivantes:
+\begin{enumerate}
+\item La police Symbol (Microsoft garanti (?) que cette police aura la m\^eme structure sur Mac que sur PC). Elle est enti\`erement
+retranscrite avec les \'equivalents \LaTeX\ lorsque ces \'equivalences ou approximations existent. Sinon, un symbole @ sera utilis\'e.
+\item Les polices non proportionelles (Courier...) qui seront transcrites en 'tt'.
+\begin{quote}
+ Cette correspondance entre les polices se trouve dans le fichier rtf.fonts.c dans le tableau EqFontsRTF\_TeX. Toute
+personalisation est ais\'ee par edition de ce fichier et recompilation. Les correspondances entre les symboles se font dans
+le m\^eme fichier au sein du tableau FontSymboles.
+\end{quote}
+\end{enumerate}
+ Dans le cas o\`u W2\LaTeX\ serait port\`e pour une utilisation sur un systeme avec d'autres polices ou symboles (cf AMS), l'\'edition
+de ces tableaux et des constantes d\'efinissant les tailles des dits tableaux devrait \^etre ais\'ee.
+\par
+ Il fallait se fixer une police par defaut. Et surtout une taille de police. Le choix a \'et\'e port\'e sur la valeur
+prise par Word par defaut lors de l'installation premi\`ere du logiciel: 10pt. Une table se trouvant dans ce m\^eme fichier (rtf.fonts.c)
+d\'ecrit la correspondance entre les tailles des polices en nombre de points et les param\`etres \LaTeX\ (\verb+\small, \Huge, ...+). Notons que cette table a \'et\'e
+\'etablie \`a partir des donn\'ees trouv\'ees dans le manuel de \LaTeX , correspondant au style 10pt.
+
+\subsection{L'ent\^ete \LaTeX}
+
+ La taille de la page par defaut est supos\'ee A4. La feuille de style \LaTeX\ correspondante \'etant un standard, ca nous a sembl\'e le
+plus judicieux. Toute modification peut se faire dans la grammaire (rtf.y) \`a la ligne decrivant la regle {\tt input}.
+\par
+ Les marges sont fix\'ees en fonction des param\`etres fournis par le fichier RTF, ainsi que les tailles des indentations,
+et quelques red\'efinitions de noms de polices standard.
+\par
+ Cette red\'efinition des polices est due \`a la mauvaise d\'ecoupe en blocs de RTF. En effet, certains parametres RTF sont donn\'es
+en plein milieu d'un bloc, et on ne sait pas quand est-ce qu'ils vont avoir fin. Ainsi, il est possible de transcrire des blocs sans
+d\'elimiteurs de d\'ebut et de fin de bloc. Pour faire en sorte que \LaTeX\ accepte ces changements, il faut forcer un changement de
+police compl\`etement. Vous trouverez une nouvelle instruction (la seule) introduite par W2\LaTeX\ qui d\'efinit simplement la police cmr10.
+Il s'agit de la commande '\verb+\pzrm+'.
+
+
+\subsection{Les tableaux}
+
+ Le c\^ot\'e le plus flou de W2\LaTeX\ se situe certainement au niveau des tableaux. S'ils sont traduits, leur structure de
+tableau n'est pas conserv\'ee. Ils ne seront pas encadr\'es (du moins proprement). Mais le {\em look} \LaTeX\ sera conserv\'e.
+\par
+ Ceci est du \`a la libert\'e suivante permise en RTF et pas en \LaTeX . En RTF on peut avoir une cellule d'un tableau qui
+soit compos\'ee de plusieurs paragraphes, ce qui (sauf erreur de ma part), n'est pas possible directment en \LaTeX\ . A moins de...
+transformer le contenu des tableaux en {\em minipages}. C'est ce que nous avons fait. Chaque cellule d'un tableau est une minipage.
+Ces minipages sont juxtapos\'ees sur une meme ligne pour former une ligne du tableau. Heureusement, lorsque \LaTeX\ centre toutes ces
+minipages (par defaut; on peut demander autre chose aussi :-) sur la ligne en cours, ce qui fait que l'aspect du tableau, hormis
+les cadres, sera le m\^eme.
+\par
+ De notables am\'eliorations sont \`a aporter sur ce point l\`a. Nous avons essay\'e de mettre ces minipages dans un tableau,
+mais le resulat n'\'etait pas celui esp\'er\'e, car les cellules dans RTF sont donn\'ees par leur largeur, et ca fait en g\'eneral
+d\'eborder le tableau de la page. Nous avons quand m\^eme laiss\'e l'option d'encadrer chacune des minipages \`a l'aide d'une fbox.
+Le resultat n'est pas beau. Pour l'obtenir, il suffit d'inclure \`a la fin de la ligne de commande l'option '-uglyframes':
+\begin{quote}
+ $>$ w2latex inputfile.rtf -uglyframes
+\end{quote}
+
+\subsection{Autres objets}
+
+ Toutes les r\`egles de grammaire (sauf ommission) correspondant \`a des objets OLE ou aux images,
+ont \'et\'e cod\'ees dans le fichier
+de grammaire: rtf.y. Ils ne sont pas trait\'es pour l'instant. Certains sont irr\'ealisables
+(inclusion de documents g\'en\'er\'es par des tableurs...).
+\par
+ Les formats \'etant extr\`emement nombreux, il faudrait toute une panoplie de convertisseurs.
+
+\subsection{Images}
+
+ Les images peuvent \^etre cod\'ees de nombreuses fa\c{c}ons, et sous diff\'erents formats.
+Les plus courrants sont le Windows Metafile
+et le format de MacDraw. Ne possedant pas les sp\'ecifications de ces formats d'images, nous laisserons
+un cadre blanc de la taille
+(approch\'ee) de l'image dans le document \LaTeX\ g\'en\'er\'e.
+\par
+ La taille des images \'etant cod\'ee parfois en points, parfois en twips, parfois en pixels...
+il est possible que pour des images
+g\'en\'er\'ees avec des logiciels de dessin particuliers, il y ait un probl\`eme de taille des cadres blancs.
+
+\subsection{Am\'eliorations \`a r\'ealiser}
+Certains points restent sans doute \`a am\'eliorer. En particulier le traitement des tableaux,
+les nouveaux fields, et d'\'eventuels nouveaux formats de formules pour des documents g\'en\'er\'es
+par d'autres applications ou d'autres versions de Word.
+\par
+Il serait int\'eressant de pouvoir disposer de traducteurs de formats d'images pour obtenir
+du post-script inclus dans le fichier \LaTeX\ obtenu. Ceci serait possible, car les images (quel
+que soit leur format, sont transcrites en hexad\'ecimal dans le fichier RTF. Il est donc possible
+d'en faire un fichier de sortie binaire.
+
+\subsection{Comment r\'ealiser des extensions}
+En ce qui concerne les formules, il suffit de voir le formatage diff\'erent des formules MAC ou PC.
+Ces deux formats ont \'et\'e trait\'es en parall\`ele, et un troisi\`eme format s'inserrerait de la
+m\^eme fa\c{c}on.
+\par
+Pour les tableaux, il faudrait peut-\^etre repartir de la grammaire. Et surtout trouver une astuce
+pour pouvoir tenir compte des encadrements et autres param\`etres de formatage.
+\par
+Les {\em fields} sont enti\`erement trait\'es dans le fichier {\tt rtf.fields.c}, qu'il suffirait
+de completer par de nouvelles fonctions les traitant, ainsi que leur d\'etection au m\^eme point que
+se fait celle des \'equations.
+
+
+
+\newpage
+\section{Fichiers sources et fonctions incluses.}
+
+
+\subsubsection{ rtf.lex.c }
+\begin{tabbing}
+xxxxxxxxxxxxxx\=xxx\=\kill
+Function name \>: \>{\tt valdefFD }\\
+Description \>: \>\begin{minipage}[t]{10cm}Attribue les valeurs par defaut aux differents champs
+ de formatage du document \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt puretext }\\
+Description \>: \>\begin{minipage}[t]{10cm}Lorsque l'on trouve une chaine de caract\`eres pure, il faut
+enlever les
+ retours \`a la ligne. En effet WORD coupe les lignes trop longues en plein milieu des mots !!
+ De m\^eme, il y a des caract\`eres ASCII 7 bits que \LaTeX\ consid\`ere comme des mots de commande. Il faut les
+ transformer dans son propre format. Ceci ne peut etre fait \`a l'interieur de la grammaire, car
+ le texte 7 bits est un token \`a part enti\`ere. \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt getcode }\\
+Description \>: \>\begin{minipage}[t]{10cm}A partir de la chaine de caract\`eres d'un mot de commande
+renvoie son type et
+ l\`eve un flag en cas de non reconnaissance. \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt Avance\_Champ }\\
+Description \>: \>\begin{minipage}[t]{10cm}Avance tant que le champ \`a ignorer n'est pas termin\'e
+\end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt Avance\_Sauve\_Champ }\\
+Description \>: \>\begin{minipage}[t]{10cm}Avance tant que le champ \`a ignorer n'est pas termin\'e et
+le sauve dans un fichier auxiliaire \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt Avance\_Sauve\_ChampMAC }\\
+Description \>: \>\begin{minipage}[t]{10cm}Avance tant que le champ \`a ignorer n'est pas termin\'e et
+le sauve dans un fichier auxiliaire.
+ Mais pour le MAC. \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt yylex }\\
+Description \>: \>\begin{minipage}[t]{10cm}Analyseur Lexical d'un fichier RTF. Fournit les Tokens \`a
+yyparse. \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt yyerror }\\
+Description \>: \>\begin{minipage}[t]{10cm}Fonction de traitement des erreurs. Elle est apell\'ee
+automatiquement par yyparse,
+ gener\'ee par Bision, lorsqu'une erreur s'est produite. Si on est au sein de l'ent\^ete,
+on positionne le flag de
+ pr\'esence de \LaTeX . Si on est dans le corps du texte, on positionne le flag d'Erreur,
+pour que l'analyseur
+ lexical ignore tout jusqu'au debut du prochain paragraphe. \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt main }\\
+Description \>: \>\begin{minipage}[t]{10cm}Fonction Principale: Analyse les param\`etres, ouvre les
+flux, et apelle yyparse(). \end{minipage}\\
+\end{tabbing}
+
+
+\subsubsection{ rtf.formule.c }
+\begin{tabbing}
+xxxxxxxxxxxxxx\=xxx\=\kill
+Function name \>: \>{\tt moulineFormule }\\
+Description \>: \>\begin{minipage}[t]{10cm}Apr\`es d\'etection d'une formule, on la mouline de facon \`a rectifier les
+ absurdit\'es de formatage de RTF-Fields. \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt moulineFormuleMAC }\\
+Description \>: \>\begin{minipage}[t]{10cm}Apr\`es detection d'une formule MAC, on la mouline de facon \`a rectifier les
+ absurdit\'es de formatage de RTF-Fields. Mais pour le Mac.\end{minipage}\\
+\end{tabbing}
+
+
+\subsubsection{ rtf.fonts.c }
+\begin{tabbing}
+xxxxxxxxxxxxxx\=xxx\=\kill
+Function name \>: \>{\tt nouvfonte }\\
+Description \>: \>\begin{minipage}[t]{10cm}Cr\'ee un nouveau maillon avec la description d'une fonte \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt cherchefonte }\\
+Description \>: \>\begin{minipage}[t]{10cm}A partir du num\'ero de fonte, cherche une fonte donn\'ee. \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt parcoursfontes }\\
+Description \>: \>\begin{minipage}[t]{10cm}fonction de debuggage. \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt chercheEqTeX }\\
+Description \>: \>\begin{minipage}[t]{10cm}Cherche un equivalent \LaTeX\ pour un nom de fonte RTF \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt EqTeXTaille }\\
+Description \>: \>\begin{minipage}[t]{10cm}D\'etermine la taille de police \`a utiliser, \`a partir de la donn\'ee RTF,
+ et retourne la chaine de caract\`eres \'equivalente TeX. \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt printSymbol }\\
+Description \>: \>\begin{minipage}[t]{10cm}Imprime un Symbole, en fonction de l'environnement dans lequel on se trouve. \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt printText }\\
+Description \>: \>\\
+%**************************************************************************************************
+Function name \>: \>{\tt printApostrophe }\\
+Description \>: \>\\
+\end{tabbing}
+
+
+
+\subsubsection{ rtf.context.c }
+\begin{tabbing}
+xxxxxxxxxxxxxx\=xxx\=\kill
+Function name \>: \>{\tt nouvcontext }\\
+Description \>: \>\begin{minipage}[t]{10cm}Cr\'ee un nouveau maillon contexte \`a partir de sa description et retourne un
+ pointeur sur ce maillon \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt contextback }\\
+Description \>: \>\\
+%**************************************************************************************************
+Function name \>: \>{\tt parcourscontexts }\\
+Description \>: \>\begin{minipage}[t]{10cm}Parcours de la liste chain\'ee de contextes. (Debuggage); \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt endkeepcontext }\\
+Description \>: \>\begin{minipage}[t]{10cm}Termine le contexte courrant mais le garde en tant que contexte courrant.
+ Utile pour les Tableaux, car \LaTeX\ impose de terminer les environnements
+ avant de sortir de la minipage, alors que RTF ne le fait pas.
+ A utiliser suivi immediatement de showcontext... \end{minipage}\\
+%**************************************************************************************************
+Function name \>: \>{\tt showcontext }\\
+Description \>: \>\begin{minipage}[t]{10cm}Exprime les caracteristiques du contexte courrant. A utiliser en particulier
+ pour les tableaux apr\`es endkeepcontext \end{minipage}\\
+
+\end{tabbing}
+
+
+\subsubsection{ rtf.ascii }
+Ce fichier contient les tables de correspondance ASCII entre MAC, PC et \LaTeX .
+
+
+
+\subsubsection{ rtf.fields.c }
+\begin{tabbing}
+xxxxxxxxxxxxxx\=xxx\=\kill
+Function name \>: \>{\tt filtrefields }\\
+Description \>: \>\begin{minipage}[t]{10cm}Recup\`ere un champ field et le pr\'epare \`a \^etre analyse par yylex \end{minipage}\\
+\end{tabbing}
+
+
+
+\subsubsection{ rtf.output }
+Le fichier {\tt rtf.output} est g\'en\'er\'e par Bison si on l'ex\'ecute avec l'option {\tt -v}.
+Il d\'etaille l'\'etat de la grammaire et de ses r\`egles. Les conflicts qui existent actuellement
+sont dus au fait que la grammaire RTF n'est pas LALR1. Ils ne devraient pas causer de probl\`eme.
+Lors de l'impl\'ementattion de nouvelles r\`egles, il faudra veiller \`a ce que ce nombre n'augmente
+pas.
+
+
+\subsubsection{ rtf.tab.c }
+Il s'agit du fichier g\'en\'er\'e par Bison, et qui sera lui compil\'e pour obtenir l'ex\'ecutable.
+Pour le compiler:
+\begin{quote}
+ $>$cc -o w2latex rtf.tab.c
+\end{quote}
+et \c{c}a y est!
+
+
+\subsubsection{ rtf.motcom.h }
+Ce fichier contient la table de correspondance entre les mots de commande RTF et les tokens. Il s'agit des
+m\^emes mots, mais en majuscules. Lors de l'impl\'ementation de nouvelles r\`egles demandant de nouveaux
+tokens, il ne faut pas oublier de les r\'epertorier ici (et d'augmenter le nombre des \'el\'ements du tableau
+d\'efini dans l'ent\^ete du fichier.
+
+
+
+\newpage
+\section{Documents de R\'ef\'erence}
+
+\begin{itemize}
+\item BISON: The Yacc compatible Parser Generator
+\begin{quote}
+ Bison Version 1.20\\
+ By Charles Donnelly and Richard Stallman
+\end{quote}
+\item A Gentle Introduction to \TeX .
+\begin{quote}
+ Michael Doob\\
+ University of Manitoba
+\end{quote}
+\item Notes de Cous \LaTeX .
+\begin{quote}
+ Claude Gomez\\
+ INRIA
+\end{quote}
+\item Essential \LaTeX .
+\begin{quote}
+ Jon Warbrick
+\end{quote}
+\item \LaTeX : user's guide and Reference Manual
+\begin{quote}
+ Leslie Lamport\\
+ Addison-Wesley
+\end{quote}
+\item Microsoft Rich Text Format (RTF) Specification
+\begin{quote}
+ Microsoft\copyright \\
+ Application Note\\
+ RTF VErsion 1.3 1994
+\end{quote}
+\item Fields Reference
+\begin{quote}
+ Microsoft\copyright\ Word\copyright \\
+ Version 6.0
+\end{quote}
+\end{itemize}
+
+
+
+
+
+
+
+\newpage
+\section{Disclaimer}
+Ce document se rapporte au programme W2\LaTeX , r\'ealis\'e par Javier
+Garmendia\footnote{jgarmend@cyberspace.org}, et a \'et\'e r\'ealis\'e pour le Centre International de
+Rencontres Math\'ematiques de Luminy (Marseille), sous la direction de Jean-Louis
+Maltret\footnote{jlm@cirm.univ-mrs.fr}.
+
+\end{document}
+
+