modules utilisés: multido, fp

Utiliser multido

le but

Avec PSTricks, on peut avoir des tâches répétitives à faire; dans ce cas, le module multido est utile. Nous l'avons vu à la page précédente, mais sur un cas trop simple.

Notre probléme ici, va consister à tracer 21 segments joignant les points (0.05k-1; 0) et (1; exp(0.05k)*(2-0.05k)) avec k prenant les valeurs entières de 0 à 20.

Accessoirement, on fera un petit dégradé de couleurs entre le gris bleu de code rgb(0, 0.5,0.5) et le rouge pâle de code rgb (1, 0.5, 0.5)


le problème

Le problème est que dans \multido{\i=0+1}{21}{psplot(1,…)(…0)} , on ne pourra remplacer chaque … que par une variable et non par une fonction de \i. Le paquetage fp va permettre ceci.

le module fp

On va définir deux variables

\FPeval{absc}{\i*0.05-1} 
\FPeval{ordo}{exp(\i*0.05)*(2-\i*0.05)} 

La documentation de fp n'est pas très «user friendly » et est réduite à ce fichier

le code complet

\documentclass[a4paper,10pt]{report}
\usepackage[latin1]{inputenc}
\usepackage[french]{babel}
\usepackage[T1]{fontenc}

\usepackage{pstricks,pst-plot}
\usepackage{fp}
\usepackage{multido}
\begin{document}
\psset{xunit=6cm,yunit=3cm}
\begin{pspicture}(-1.1,-0.1)(1.1,3)
\psaxes(0,0)(-1,0)(1,3)
\multido{\i=0+1}{21}{%
	\FPeval{absc}{\i*0.05-1} 
	\FPeval{ordo}{exp(\i*0.05)*(2-\i*0.05)} 
	\FPeval{coul}{\i*0.05}
	\definecolor{couleur}{rgb}{\coul,0.5,0.5}
	\psline[linewidth=0.2pt,linecolor=couleur](1,\ordo)(\absc,0)
}
\end{pspicture}
\end{document}

On a placé % pour qu'il n'y ait pas d'espace après l'accolade ouvrante. Il semble que ce soit une bonne habitude à prendre quand on fait de la programmation avec LaTeX. De même une ligne vide à l'intérieur des accolades déclenchera une erreur.

Une variante

Une variante sans fp mais avec pstricks-add que m'a proposé l'immense Jean-Éric Visca

Au lieu d'utiliser \psline qui trace un segment, il utilise \psplot qui dessine une fonction.

\documentclass[10pt,a4paper]{article}
\usepackage[latin1]{inputenc}
\usepackage{multido}
\usepackage{pstricks-add}
\begin{document}
\psset{xunit=8,yunit=4}
\begin{pspicture}(-1,0)(1.5,2)
\psaxes{->}(0,0)(-1,0)(1,2)
\multido{\n=-1+0.05}{21}{%
\definecolor{couleur}{rgb}{-\n,0.5,0.5}
\psplot[algebraic,linecolor=couleur]{\n }{1}
{2.718^(\n +1)*(1-\n)/(1-\n)*x+2.718^(\n +1)*(1-\n)-2.718^(\n +1)*(1-\n)/(1-\n)}}
\end{pspicture}
\end{document}