Previous: 7 Postscript
Up: Applyx 045
Next: 9 Scilab
  Contents
Subsections
8 Algorithmic
8.1 Le package floats
- 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..
- 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.
- 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".
- 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.
- 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
ruledfigure
boxedfigure
plainfigure
- 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.
- 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.
- 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}}
- 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:}
- On obtient alors en americain FIG. 7, TAB. 2,
LISTING 15, Subsection 8.2, etc.
- On obtient alors en français FIG. 8, TAB. 3,
LISTING 16, Subsection 8.2, etc.
8.2 Le package prettyref
- 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
.
- 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).
- Dans
, 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 :
- 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.
- Il faut faire protéger le caractère
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
à sa valeur simple.
Cela ne sert à rien, car il faudrait une coopération babel/floats/revues...
- 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.
- 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.
- On peut alors utiliser tout cela dans la définition d'un encadré flottant
:
- 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.
- 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
- 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}
- comment avoir une gestion des marges non stupide (= pas de décroché
pour les paragraphes ?). Demi-solution : paragraphes standard (et
non pas code) et alors caractère typewriter (cf LISTING 20).
- 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
- L'objectif est d'utiliser des noms raisonnables, d'ajouter quelques
commentaires, et surtout d'ajouter de nouvelles commandes.
- Commandes "courtes", c'est à dire tenant sur une
seule ligne. Ainsi
\IFS { cond } { action } \ENDIFS
- Commandes de service : \DEF{ procedure }
\LOCAL { variables locales }
Previous: 7 Postscript
Up: Applyx 045
Next: 9 Scilab
  Contents
douillet@ensait.fr
2007-12-06