Sortie latex d'algobox : alignement et taille de police

Tout ce qui concerne l'utilisation ou l'installation de LaTeX.

Modérateur: gdm_tex

Règles du forum
Merci d'éviter le style SMS dans vos messages et de penser à utiliser la fonction Recherche avant de poster un message. Pour joindre des fichiers à vos messages, consulter ce sujet.
> Penser à utiliser les balises Code pour poster du code.

Sortie latex d'algobox : alignement et taille de police

Messagepar djiblamb » Jeudi 19 Juin 2014, 18:54

Bonsoir.
J'utilise la sortie Latex d'Algobox dans sa dernière version. Le code ci-dessous est donc issu directement d'Algobox.

Code: Tout sélectionner
\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[colorlinks=true,urlcolor=black]{hyperref}
\usepackage{fancyhdr}
%FONTES POUR ALGO
\DeclareFontFamily{T1}{lmtt}{}
\DeclareFontShape{T1}{lmtt}{m}{n}{<-> ec-lmtl10}{}
\DeclareFontShape{T1}{lmtt}{m}{\itdefault}{<-> ec-lmtlo10}{}
\DeclareFontShape{T1}{lmtt}{\bfdefault}{n}{<-> ec-lmtk10}{}
\DeclareFontShape{T1}{lmtt}{\bfdefault}{\itdefault}{<-> ec-lmtko10}{}
\renewcommand{\ttdefault}{lmtt}
% PACKAGES NECESSAIRES POUR ALGO
\usepackage{xcolor}
\usepackage{framed}
\usepackage{algorithm}
\usepackage{algpseudocode}
%MISE EN PAGE
\usepackage{geometry}
\renewcommand{\headrulewidth}{0.5pt}
\renewcommand{\footrulewidth}{0pt}
\geometry{tmargin=2.5cm,lmargin=2cm,rmargin=2cm,bmargin=2.5cm}
\fancyhead[C]{\small \url{piecebis.alg} - \texttt{Page \thepage} }
\fancyfoot[C]{\small \texttt{Généré par Algobox le 22.05.2014} }
\pagestyle{fancy}
%ALGO
\definecolor{fond}{RGB}{136,136,136}
\definecolor{sicolor}{RGB}{128,0,128}
\definecolor{tantquecolor}{RGB}{221,111,6}
\definecolor{pourcolor}{RGB}{187,136,0}
\definecolor{bloccolor}{RGB}{128,0,0}
\newenvironment{cadrecode}{%
\def\FrameCommand{{\color{fond}\vrule width 5pt}\fcolorbox{fond}{white}}%
\MakeFramed {\hsize \linewidth \advance\hsize-\width \FrameRestore}\begin{footnotesize}}%
{\end{footnotesize}\endMakeFramed}
\makeatletter
\def\therule{\makebox[\algorithmicindent][l]{\hspace*{.5em}\color{fond} \vrule width 1pt height .75\baselineskip depth .25\baselineskip}}%
\newtoks\therules
\therules={}
\def\appendto#1#2{\expandafter#1\expandafter{\the#1#2}}
\def\gobblefirst#1{#1\expandafter\expandafter\expandafter{\expandafter\@gobble\the#1}}%
\def\Ligne{\State\unskip\the\therules}%
\def\pushindent{\appendto\therules\therule}%
\def\popindent{\gobblefirst\therules}%
\def\printindent{\unskip\the\therules}%
\def\printandpush{\printindent\pushindent}%
\def\popandprint{\popindent\printindent}%
\def\Variables{\Ligne \textcolor{bloccolor}{\textbf{VARIABLES}}}
\def\Si#1{\Ligne \textcolor{sicolor}{\textbf{SI}} #1 \textcolor{sicolor}{\textbf{ALORS}}}%
\def\Sinon{\Ligne \textcolor{sicolor}{\textbf{SINON}}}%
\def\Pour#1#2#3{\Ligne \textcolor{pourcolor}{\textbf{POUR}} #1 \textcolor{pourcolor}{\textbf{ALLANT\_DE}} #2 \textcolor{pourcolor}{\textbf{A}} #3}%
\def\Tantque#1{\Ligne \textcolor{tantquecolor}{\textbf{TANT\_QUE}} #1 \textcolor{tantquecolor}{\textbf{FAIRE}}}%
\algdef{SE}[WHILE]{DebutTantQue}{FinTantQue}
  {\pushindent \printindent  \textcolor{tantquecolor}{\textbf{DEBUT\_TANT\_QUE}}}
  {\printindent \popindent  \textcolor{tantquecolor}{\textbf{FIN\_TANT\_QUE}}}%
\algdef{SE}[FOR]{DebutPour}{FinPour}
  {\pushindent \printindent \textcolor{pourcolor}{\textbf{DEBUT\_POUR}}}
  {\printindent \popindent  \textcolor{pourcolor}{\textbf{FIN\_POUR}}}%
\algdef{SE}[IF]{DebutSi}{FinSi}%
  {\pushindent \printindent \textcolor{sicolor}{\textbf{DEBUT\_SI}}}
  {\printindent \popindent \textcolor{sicolor}{\textbf{FIN\_SI}}}%
\algdef{SE}[IF]{DebutSinon}{FinSinon}
  {\pushindent \printindent \textcolor{sicolor}{\textbf{DEBUT\_SINON}}}
  {\printindent \popindent \textcolor{sicolor}{\textbf{FIN\_SINON}}}%
\algdef{SE}[PROCEDURE]{DebutAlgo}{FinAlgo}
   {\printandpush \textcolor{bloccolor}{\textbf{DEBUT\_ALGORITHME}}}%
   {\popandprint \textcolor{bloccolor}{\textbf{FIN\_ALGORITHME}}}%
\makeatother
\newenvironment{algobox}%
{%
\begin{ttfamily}
\begin{algorithmic}[1]
\begin{cadrecode}
}
{%
\end{cadrecode}
\end{algorithmic}
\end{ttfamily}
}
\begin{document}

\begin{algobox}
\Variables
\Ligne piece EST\_DU\_TYPE NOMBRE
\Ligne N EST\_DU\_TYPE NOMBRE
\Ligne I EST\_DU\_TYPE NOMBRE
\Ligne Num EST\_DU\_TYPE NOMBRE
\Ligne freq EST\_DU\_TYPE NOMBRE
\DebutAlgo
\Ligne Num PREND\_LA\_VALEUR 0
\Ligne LIRE N
\Pour{I}{1}{N}
\DebutPour
\Ligne piece PREND\_LA\_VALEUR ALGOBOX\_ALEA\_ENT(0,1)
\Si{(piece==1)}
\DebutSi
\Ligne Num PREND\_LA\_VALEUR Num+1
\FinSi
\Sinon
\DebutSinon
\Ligne piece PREND\_LA\_VALEUR ALGOBOX\_ALEA\_ENT(0,1)
\Si{(piece==1)}
\DebutSi
\Ligne Num PREND\_LA\_VALEUR Num+1
\FinSi
\FinSinon
\FinPour
\Ligne AFFICHER "Nombre de coups gagnants : "
\Ligne AFFICHER Num
\Ligne AFFICHER " sur "
\Ligne AFFICHER N
\Ligne AFFICHER " lancers."
\Ligne AFFICHER "Fréquence : "
\Ligne freq PREND\_LA\_VALEUR Num/N
\Ligne AFFICHER freq
\FinAlgo

\end{algobox}
\end{document}

La compilation en 10 pts produit bien ce qui est attendu ; mais si je change la taille de la police en passant en 12 pts, un décalage apparaît dans la ligne verticale au passage de la ligne 9 à la ligne 10. Voir les fichiers joints ci-dessous :
algopiece1.ps
(132.67 Kio) Téléchargé 80 fois

algopiece2.ps
(132.71 Kio) Téléchargé 75 fois

Pour essayer de mieux voir, j'ai modifié la fréquence de numérotation des lignes de l'algorithme en numérotant toutes les cinq lignes ; et là, en 12 pts, j'obtiens un décalage chaque fois que le numéro de ligne s'affiche.
algopiece3.ps
(130.96 Kio) Téléchargé 80 fois

algopiece4.ps
(131 Kio) Téléchargé 73 fois

Quelqu'un aurait-il une explication ? Comment éviter ces décalages peu esthétiques ? Par avance merci.
Djib
djiblamb
Hecto-utilisateur
 
Messages: 89
Inscription: Samedi 27 Septembre 2008, 09:58
Statut actuel: Actif et salarié | Enseignant

Publicité

Re: Sortie latex d'algobox : alignement et taille de police

Messagepar OG » Jeudi 26 Juin 2014, 13:35

Bonjour

J'ai regardé le code. Le problème vient en fait du paquet algorithmicx qui définit une
taille par défaut de la largeur du label. Vu la fonte et la taille, la largeur de "10 :" est plus
important que "9 :", d'où le décalage quand on arrive à 10.

Voici une rustine
Code: Tout sélectionner
    \renewenvironment{algorithmic}[1][0]%
   {%
   \edef\ALG@numberfreq{#1}%
   \def\@currentlabel{\theALG@line}%
   %
   \setcounter{ALG@line}{0}%
   \setcounter{ALG@rem}{0}%
   %
   \let\\\algbreak%
   %
   \expandafter\edef\csname ALG@currentblock@\theALG@nested\endcsname{0}%
   \expandafter\let\csname ALG@currentlifetime@\theALG@nested\endcsname\relax%
   %
   \begin{list}%
      {\ALG@step}%
      {%
      \rightmargin\z@%
      \itemsep\z@ \itemindent\z@ \listparindent2em%
      \partopsep\z@ \parskip\z@ \parsep\z@%
      \labelsep 0.5em \topsep 0.2em%\skip 1.2em
      \ifthenelse{\equal{#1}{0}}%
         {\labelwidth 0.5em}%
         {\labelwidth 1.5em}%    %%%%%%%%% ICI MODIFICATIONS DE 1.2em a 1.5em
      \leftmargin\labelwidth \addtolength{\leftmargin}{\labelsep}% Ok. the perfect leftmargin :-))
      \ALG@tlm\z@%
      }%
   \setcounter{ALG@nested}{0}%
   \ALG@beginalgorithmic%
   }%
   {% end{algorithmic}
   % check if all blocks are closed
   \ALG@closeloops%
   \expandafter\ifnum\csname ALG@currentblock@\theALG@nested\endcsname=0\relax%
   \else%
      \PackageError{algorithmicx}{Some blocks are not closed!!!}{}%
   \fi%
   \ALG@endalgorithmic%
   \end{list}%
   }%
\makeatother



J'ai ajouté un commentaire là où j'ai modifié le labelwidth

O.G.
OG
Modérateur
 
Messages: 2274
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence

Re: Sortie latex d'algobox : alignement et taille de police

Messagepar djiblamb » Jeudi 26 Juin 2014, 16:52

Merci à OG. La rustine remplit son office et l'alignement se retrouve aussi bien avec une police 10 pts qu'avec une police 12 pts.
Djib
djiblamb
Hecto-utilisateur
 
Messages: 89
Inscription: Samedi 27 Septembre 2008, 09:58
Statut actuel: Actif et salarié | Enseignant

Re: Sortie latex d'algobox : alignement et taille de police

Messagepar OG » Jeudi 26 Juin 2014, 20:10

djiblamb a écrit:Merci à OG. La rustine remplit son office et l'alignement se retrouve aussi bien avec une police 10 pts qu'avec une police 12 pts.
Djib

De rien, ça n'a pas été facile. Je ne suis pas spécialiste en paquet LaTeX mais peut-être qu'une
variable "Labelwidth" serait intéressante à ajouter à ce paquet (si tout fonctionne correctement).

O.G.
OG
Modérateur
 
Messages: 2274
Inscription: Lundi 12 Mars 2007, 11:20
Localisation: Rouen
Statut actuel: Actif et salarié | Maître de conférence


Retourner vers LaTeX

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum: Bing [Bot], Grapeshot [Crawler] et 9 invités