previous up next contents
Previous: 7 Postscript Up: Applyx 045 Next: 9 Scilab   Contents

Subsections


8 Algorithmic


8.1 Le package floats

  1. Une figure, ce n'est pas un graphique. Une figure, c'est un ensemble d'objets qui se positionne tout d'un bloc (positionne au singulier puisque c'est le bloc qui flotte "tout d'un bloc"). Parmi ces objets, il y a le cadre (tracé ou non), la légende, le contenu et la trace engendrée dans la table des matières..
  2. Dans les temps préhistoriques, il n'existait que des encadrés figure et table, avec des numérotations séparées et des Tables séparées. Il s'est greffé là-dessus toute une série de règles éternelles de la typographie éternelle... qui changent avec les revues concernées. Bilan : chaque style contient des mic-macs ahurissants quant à la façon de typographier les encadrés.
  3. Le positionnement préférentiel des encadrés est proposé comme htbp (here, top, bottom, page), à la fois en tant qu'option globale que pour chaque encadré, ou bien être spécifié H, i.e. "here, definitely".
  4. Les compteurs associés aux encadrés se gèrent comme tout autre compteur. Le nom véritable est c@name. La création par \newcounter{name}, puis \setcounter{name} et enfin, la récupération de la valeur (formattée) par \thename.
  5. Au moment d'introduire une nouvelle typologie d'encadrés, le package floats a tenté de faire en sorte que figure, table, algorithm et autres fonctionnent de la même façon. Le package floats définit trois styles d'encadrés, qui sont plain, ruled et boxed (cf . FIG. 4, 5, 6), et prévoit de définir la typographie d'un encadré par un couple de commandes à la façon de : \floatstyle{boxed} \restylefloat{figure}.

    plainfigure

    FIG. 4: plain
    texte
de l'encadré plané

    ruledfigure

    FIG. 5: ruled
    texte de l'encadré
roulé

    boxedfigure
    FIG. 6: boxed
    texte
de l'encadré boxé

    plainfigure

  6. L'inertie, et le fait que seulement trois styles non configurables soient fournis a fait que les "grandes revues" n'ont pas changé leur façon de faire et ne se sont pas décidées à définir figure et table en tant que floats particuliers. Au contraire, les "autres floats" sont le plus souvent ignorés.
  7. Pour la non-langue american, le CaptionSeparator est ":". Celui-ci est codé en dur dans la définition des compteurs plain et boxed. Et les règles éternelles de la typographie éternelle font que le CaptionSeparator des encadrés roulés est... vide (FIG. 5). Pour la langue frenchb, la commande \CaptionSeparator est positionnée par babel sur " - " et sert à redéfinir les compteurs figure et table... et aucun autre.


    \begin{algorithm}
% latex2html id marker 1239
[h]
\begin{algorithmic}
\par
\STAT...
...d{algorithmic}\par
\caption{Tirets français et tirets anglais.
}
\end{algorithm}

  8. Nous avons décidé de recoder systématiquement les noms utilisés pour fabriquer les légendes et les références de façon à ce qu'ils se terminent par un caractère significatif.
    \def\figurename{{\scshape Fig.}} 
    \def\tablename{{\scshape Tab.}} 
    \def\fname@algorithm{{\scshape Listing}}
  9. Ceci impose de recoder les légendes des encadrés :
    \def\CaptionSeparator{: } 
    \def\fnum@figure{\figurename\space\thefigure} 
    \def\fnum@table{\tablename\space\thetable} 
    \def\fnum@algorithm{\fname@algorithm\space\thealgorithm:} 

  10. On obtient alors en americain FIG. 7, TAB. 2, LISTING 15, Subsection 8.2, etc.

    FIG. 7: Figure vide
    %
\framebox{\begin{minipage}[b][1\totalheight][t]{70mm}%
 %
\end{minipage}}%
\par


    TAB. 2: Table vide
    %
\framebox{\begin{minipage}[b][1\totalheight][t]{70mm}%
 %
\end{minipage}}%
\par



    \begin{algorithm}
% latex2html id marker 1303
[H]
\par
\caption{objet vide
}
\end{algorithm}

  11. On obtient alors en français FIG. 8, TAB. 3, LISTING 16, Subsection 8.2, etc.

    FIG. 8: Figure vide
    %
\framebox{\begin{minipage}[b][1\totalheight][t]{70mm}%
 %
\end{minipage}}%
\par


    TAB. 3: Table vide
    %
\framebox{\begin{minipage}[b][1\totalheight][t]{70mm}%
 %
\end{minipage}}%
\par



    \begin{algorithm}
% latex2html id marker 1334
[H]
\par
\caption{Listing vide
}
\end{algorithm}


8.2 Le package prettyref

  1. Ce package permet d'utiliser des références formatées c'est à dire nommées. Une référence fig:chat-noir est décodée en "figure" + "chat-noir"... à condition que babel (ou un autre) n'ait pas redéfini le caractère $ \left[ : \right]$.
  2. Quand tout va bien, on a le nom_du_type de l'objet référencé, un espace insécable (fourni par prettyref) puis la valeur du compteur utilisé (fourni par ref, à qui prettyref soustraite la deuxième partie de la référence).
  3. Dans $ SuSE-9.3$, prettyref ne fait plus partie de la distribution LATEX standard. Ceci peut être dû au manque de compatibilité, ou à toute autre raison. On peut la retrouver depuis ctan mais... cela ne fonctionne pas (conflit avec babel).
Nous avons fini par réécrire ce package en entier, avec les remarques suivantes :

  1. Le package prettyref n'est pas le mieux placé pour définir les noms des figures et des sous-sections. Mais babel ne fournit pas les noms des sous-sections et des théorèmes (cela se trouve éparpillé dans diverses feuilles de style). Nous avons donc décidé d'utiliser les noms des trois flottants usuels et de coder en dur les autres noms.
  2. Il faut faire protéger le caractère $ \left[ : \right]$ des plaisanteries babelisantes. Pour cela, l'ancienne procédure prettyref est masquée en pprettyref (LISTING 17) et est précédée par un \catcode qui remet le caractère $ \left[ : \right]$ à sa valeur simple.


    \begin{algorithm}
% latex2html id marker 1352
[!tbph]
\vskip 0.5 em
\par
\verba...
...ettyref-sty.txt}
\par
\caption{La nouvelle procédure prettyref
}
\end{algorithm}

8.3 Tentative de réécriture de floats.sty

Cela ne sert à rien, car il faudrait une coopération babel/floats/revues...

  1. Gestion des espaces. Il faut un espace insécable entre le nom de l'encadré \figurename (par exemple) et le compteur \thefigure. C'est utile pour une référence en plein texte comme FIG. 14. Et il faut un espace entre le compteur et le séparateur. Et pas plus. Mon choix est de faire porter ces espaces insécables par les objets. Il y a donc un ~ au bon endroit. Ne pas confondre les espaces indispensables pour séparer les blocs non initialisés, et un espace "non syntaxique" qui s'imprimera.

    Donc xxx ALG.  1 - xxx : avec une définition efficace, on met des espaces partout... et cela se démerde.

  2. Gestion des fontes. Pour le nom de l'encadré et sa légende, il faut tenir compte des "habitudes de syntaxe". Et donc il faut deux couches d'accolades.
    rappel des fontes latex :
    rmfamily, sffamily, ttfamily
    normalfont (??), bfseries, mdseries : syntaxe { \bfseries }
    itshape, slshape, scshape, upshape : syntaxe \itshape{ }
    Le listing pour le cas ruled donne ce qui suit, et les autres se traitent de la même façon.


    \begin{algorithm}
% latex2html id marker 1374
[htbp]
\texttt{\textbackslash{}new...
...iftrue}
\par
\texttt{\}}
\par
\caption{floatc@ruled et fs@ruled}
\end{algorithm}

  3. On peut alors utiliser tout cela dans la définition d'un encadré flottant :


    \begin{algorithm}
% latex2html id marker 1411
[htbp]
\texttt{\textbackslash{}new...
...\{\} \}}
\par
\texttt{\}} \\
\texttt{}
\par
\caption{newfloat}
\end{algorithm}

8.4 L'environnement algorithm

  1. Le package latex "algorithm" est prévu pour encapsuler un texte "algorithmic" dans un environnement flottant. LYX permet (maintenant) une utilisation automatique de ce package.
  2. Documentation : consulter les fichiers

    /usr/share/texmf/tex/latex/algorith/algorithm.sty 
    /usr/share/texmf/tex/latex/algorith/algorithmic.sty 
    /usr/share/texmf/doc/latex/styles/algorithms.dvi 

  3. Pour utiliser ces packages, placer une invocation dans le préambule Latex. Il faut aussi définir le nom des algorithmes... si l'on ne veut pas voir ALGORITHM. On a donc :

    \usepackage{algorithm} 
    \floatname{algorithm}{Alg.} 
    \usepackage{algorithmic} 

8.5 Environnement algorithmic

  1. On reprend le tout à l'aide d'un batch
    cd /usr/share/texmf/tex/latex/algorithm 
    sed -f sed_algo algorithmic.suse.sty > algorithmic.sty 
    kwrite algorithmic.sty
  2. L'objectif est d'utiliser des noms raisonnables, d'ajouter quelques commentaires, et surtout d'ajouter de nouvelles commandes.

    1. Commandes "courtes", c'est à dire tenant sur une seule ligne. Ainsi
      \IFS { cond } { action } \ENDIFS
    2. Commandes de service : \DEF{ procedure } \LOCAL { variables locales }

    \begin{algorithm}
% latex2html id marker 1500
[htbp]
\begin{algorithmic}[1]
\par...
... \beta$ }
\par
\end{algorithmic}\par
\caption{Version active.}
\end{algorithm}


    \begin{algorithm}
% latex2html id marker 1514
[htbp]
\vskip 0.5 em \textbackslas...
...rithmic\} \vskip 0.5 em
\par
\caption{Les sources du précédent.}
\end{algorithm}


previous up next contents
Previous: 7 Postscript Up: Applyx 045 Next: 9 Scilab   Contents


douillet@ensait.fr
2007-12-06