Tikz : échelle d'avancement

Anne tikz dessin

Il s’agit de faire une figure représentant un état d’avancement.

Comme par exemple :

échelle d’avancement><

J’ai appris à l’occasion que les nombre en TeX ne pouvait pas excéder 16384 (voir cette réponse dans TeX.sx). On obtient un message d’erreur de type : dimensions too large. Pour avoir accès à des nombres plus grand, on peut utiliser /pgf/fpu comme on peut le voir ci-dessous.

Le point le plus délicat est ici la gestion du dégradé car on veut qu’il soit le même quelque soit l'état d’avancement. Pour cela, on fait le dégradé sur toute la largeur, et on utilise \clip pour ne garder que la partie qui nous intéresse.

Voilà le code complet :

\documentclass[tikz]{standalone}
\usepackage{fp}
\usetikzlibrary[positioning,calc, fpu, shadows]
\newcommand{\avancement}[3][Avancement]{%
  \def\max{10cm}
  \begin{tikzpicture}[node distance=2mm]
    % computation (to avoid "Dimension too large" problem)
    \pgfkeys{/pgf/fpu,/pgf/fpu/output format=fixed}
        \pgfmathsetmacro{\rf}{ #2 / #3 }
        \pgfmathsetmacro{\prf}{ 100 * \rf }
        \pgfmathprintnumberto[precision=1]{\prf}{\pprf}
    \pgfkeys{/pgf/fpu=false}

    % La barre grise :
    \node[draw, minimum width=\max, fill=black!20, drop shadow] (BG)  { };
    % Le texte à gauche :
    \node[left =  of BG.west]{#1:};
    % la barre d'avancement :
    \begin{scope}
      \clip (BG.south west) rectangle ($(BG.north west)!\rf!(BG.north east)$);
      \node[draw,minimum width= \max, anchor=west,
            left color=red!40, right color=green!40] (Bx) at (BG.west) {};
    \end{scope}
    \node[draw, minimum width= \max*\rf, anchor=west, ] (BB) at (BG.west) {};
    % le nombre (avancement) :
    \node[above = of BB.north east]{#2};
    % le nombre total :
    \node[above = of BG.north east, anchor=south east]{#3};
    % le pourcentage:
    \node[right = of BG.east]{\pprf\% };
  \end{tikzpicture}
  }
\begin{document}
\avancement{453}{543}
\end{document}

Voir aussi :