%######################################################################################## %########################### MACROS POUR LES DROITES GRADUÉES ########################### %########################### v 0.2 du 7/1/2008 ########################### %######################################################################################## % % Auteur : Christian TELLECHEA % Site : www.bricamath.net % \newcommand*{\Position}[1]{\ifdim #1cm=0cm c \fi \ifdim #1cm>0cm b \fi \ifdim #1cm<0cm t \fi} % _________________________________________________ %| | %| Marque un point sur la droite graduée | %|_________________________________________________| % #1 optionnel : épaisseur du point, par défaut 3.5pt \newcommand*{\MarquePoint}[2][3.5]{\psdots[dotsize=#1pt 0](! #2 0)} % __________________________________________________________ %| | %| Marque un trait vertical sur la droite graduée | %|__________________________________________________________| % #1 optionnel : hauteur du trait de part et d'autre de la droite. Par défaut 0.25cm \newcommand*{\MarqueTrait}[2][0.25]{\psline[linewidth=1pt](! #2 -#1)(! #2 #1)} % _________________________________________________________________ %| | %| Affiche un texte à une abscisse et une hauteur donnée | %|_________________________________________________________________| %#1 : abscisse %#2 : decalage vertical (espace en cm entre le haut ou la bas de la lettre et la droite graduée) %#3 : texte \newcommand*{\AfficheTexte}[3]{\rput[\Position{#2}](! #1 #2){#3}} % ________________________________________________________ %| | %| Affiche une flèche verticale | %| au dessus ou au dessous de la droite graduée | %| avec ou sans texte | %|________________________________________________________| \makeatletter \newcommand{\AfficheFleche}[3][0.15]{\@ifnextchar[{\AfficheFleche@i[#1]{#2}{#3}}{\AfficheFleche@i[#1]{#2}{#3}[]}} \def\AfficheFleche@i[#1]#2#3[#4]{% % #1 : décalage vertical entre bout de la flèche et la droite. Par défaut=0.15 % #2 : abscisse de la flèche % #3 : hauteur de la flèche en cm (positif:flèche au dessus, négatif:flèche au dessous) % #4 : Optionnel : texte à afficher \pstVerb{/Signe #3 dup 0 eq {pop 0}{dup 0 lt {pop 1 neg}{pop 1} ifelse} ifelse def}% renvoie -1 0 ou 1 selon le signe de #3 \psline[arrowsize=2pt 3]{->}(! #2 #3 abs #1 abs add Signe mul)(!#2 #1 abs Signe mul)% \rput[\Position{#3}](! #2 #3 abs #1 abs add 0.1 add Signe mul){#4}% } % ___________________________________________ %| | %| ENVIRONNEMENT DroiteGraduée | %| Trace une droite gradué | %|___________________________________________| \newenvironment{DroiteGraduee}[8][all]{% % Les arguments de l'environnement % #1 : Optionnel = affichage des nombres. Par défaut all (none est le contraire) % #2 : largeur totale de la droite en cm % #3 : abscisse de la 1ère graduation % #4 : abscisse de la dernière graduation % #5 : Nombre d'intervalles sudivisant la graduation principale % #6 : Incrément entre 2 graduations principales % #7 : Nombre de graduations principales à afficher avant la première % #8 : Nombre de graduations principales à afficher après la dernière \newdimen\x@gauche \newdimen\x@droite \newdimen\x@@unite \newdimen\c@rrection \newdimen\n@m \newdimen\d@n \x@@unite=1cm% pour les conversions \c@rrection=0.6cm% largeur de la flèche \x@gauche=-#7cm \advance\x@gauche #3cm \x@droite=#4cm \advance\x@droite #8cm \pst@divide\x@gauche\x@@unite\x@@gauche% conversion pt-->cm \n@m=-\c@rrection \advance\n@m #2cm% n@m=largeur-epaisseur_fleche \d@n=-\x@gauche \advance\d@n\x@droite% d@n=xdroite-xgauche \pst@divide\n@m\d@n\x@unite% x@unit=(largeur-largeur_fleche)/(xdroite-xgauche) \pst@divide\c@rrection{\x@unite cm}{\Fl@che} \newdimen\EpFl@che \EpFl@che=\Fl@che cm \advance\x@droite\EpFl@che \pst@divide\x@droite\x@@unite\x@@droite% on corrige de la largeur de la flèche, et on convertit \psset{xunit=\x@unite cm,yunit=1cm,arrowsize=4pt 3}% \begin{pspicture}(\x@@gauche,-1)(\x@@droite,1)% \psaxes[comma,labelsep=5pt,labels=#1,Ox=#3,Dx=#6,yAxis=false,subticks=#5,ticksize=-0.15cm 0.15cm,tickwidth=1.5pt,subticksize=0.7,subtickwidth=0.8pt,subtickcolor=black]{->}(#3,0)(\x@@gauche,-1)(\x@@droite,1) } {\end{pspicture}} % ___________________________________________________ %| | %| Représentation graphique de l'ensemble | %| des solutions d'une inéquation du 1è degrés | %|___________________________________________________| % \makeatletter \newcommand*{\GraphiqueInequation}[3][n]{\@ifnextchar[{\GraphiqueInequation@i[#1]{#2}{#3}}{\GraphiqueInequation@i[#1]{#2}{#3}[5]}} \def\GraphiqueInequation@i[#1]#2#3[#4]{% % #1 : optionnel = 0 par défaut (pas de hachure pour ce qui ne convient pas) sinon #1=H ou h % #2 : signe de l'inégalité < ou <= ou =< ou > ou >= ou => % #3 : nombre à afficher au dessus de la borne % #4 : optionnel = largeur de la représentation en cm. Par défaut 5. \newdimen\xMaxi \xMaxi=#4cm \divide\xMaxi2 \psset{unit=1 cm,arrowsize=4pt 3} \begin{pspicture*}(-\xMaxi,-0.3)(\xMaxi,1.2)% \pstVerb{% début code PostScript /DecalCrochet 0.07 def /DecalOrigine 0.07 def /EpFleche 0.2 def /Angle 0 def /Inferieur (#2)(<)eq (#2)(<=)eq or (#2)(=<)eq or def /Superieur (#2)(>)eq (#2)(>=)eq or (#2)(=>)eq or def /Large (#2)(<=)eq (#2)(=<)eq or (#2)(>=)eq or (#2)(=>)eq or def /Stricte (#2)(<)eq (#2)(>)eq or def Superieur {/Signe 1 def} if Inferieur {/Signe 1 neg def} if (#1)(H)eq (#1)(h)eq or {/yHachures 0.15 def}{/yHachures 0 def} ifelse Large { /TaillePoint 0.075 def /TailleTrait 0 def /xOrigine 0 def /xCrochet DecalCrochet Signe neg mul def /xHachures xCrochet def Inferieur {/Angle 180 def} if } if Stricte { /TaillePoint 0 def /TailleTrait 0.15 def /xOrigine DecalOrigine def /xCrochet DecalCrochet Signe mul def /xHachures 0 def Superieur {/Angle 180 def} if } if /xExtremeHachures #4 2 div Signe neg mul def /xExtreme #4 2 div Signe mul def Superieur {/xExtreme xExtreme EpFleche sub def} if Inferieur {/xExtremeHachures xExtremeHachures 2 EpFleche mul sub def} if /xOrigine xOrigine Signe mul def }%% fin code PostScript \psline[linewidth=1pt]{->}(! #4 2 div neg 0)(! #4 2 div 0)% tracé de la droite \psline[linewidth=2.5pt](! xExtreme 0)(! xOrigine 0)% on repasse en gras \psellipse*(! 0 0)(! TaillePoint TaillePoint)% marque éventuellement le point \psline[linewidth=1pt](! 0 TailleTrait neg)(! 0 TailleTrait)% trace éventuellement un trait \rput[c]{! Angle}(! xCrochet 0){\LARGE\textbf{[}}% on place le crochet \rput[b](! 0 0.4){#3}% affichage de la borne \psframe[linestyle=none,fillstyle=hlines,hatchwidth=0.5pt,hatchsep=3pt](! xHachures yHachures neg)(! xExtremeHachures yHachures)% hachures \end{pspicture*} } \makeatother