\NeedsTeXFormat{LaTeX2e}[1995/12/01] \ProvidesPackage{tablor}[19/03/2008 v1.9 la machine à créer des tableaux de signes et variations] % \copyleft Connan le Barbare \copyright % avec l'efficace participation de Jean-Michel Boucart %% Crée 10 environnements : %% tableau de signes de 2 facteurs affines % \begin{TSa} % TSa(-2,3,-1,5,\tv); % \end{TSa} % %%%%%% Pour des tableaux de plus de 2 facteurs % % \begin{TS} % TS([-2*x+3,x^2-1,x^2+1,x-1,x^2-2],[a,b],\tv); % \end{TS} % % pour les tableaux de signes avec quotient %\begin{TSq} %TSq("Q",[-2*x+3,-4*x+5],[x^2-16,x-2],[a,b],\tv) %%\end{TSq} % un tableau de variation : % % \begin{TV} % TV([0,+infinity],[0],"h","x",ln(x)-(ln(x))^2,1,\tv) % \end{TV} % % tableau avec valeurs intermédiares %\begin{TVI} %TVI([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,\tv) %\end{TVI} %%% % % et leurs pendants étoilés qui permet l'affichage intermédiaire du % fichier metapost pour le modifier % % % % %% extensions requises %% Il faudra rajouter dans le préambule \usepackage{graphicx} si vous %% ne l'avez pas de base \RequirePackage{ifthen} \RequirePackage{fancyvrb} \RequirePackage{ifpdf} % option xcas présent \newboolean{xcas}\setboolean{xcas}{false} \DeclareOption{xcas}{\setboolean{xcas}{true}} %% Initialisation du choix d'OS \newboolean{windows}\setboolean{windows}{false} %% on configure tablor dans un fichier extérieur pour la plateforme %% et l'éditeur \IfFileExists{tablor.cfg}{\input{tablor.cfg}}%\typeout{pas de fichier tablor.cfg}} \ProcessOptions\relax %% pour ceux compilant via pdflatex \ifpdf \DeclareGraphicsRule{*}{mps}{*}{} \fi %% pour nettoyer les fichiers auxiliaires \AtEndDocument{\immediate\write18{\rem tete.* *.user XCas* Xcas* *.mpx}} %% En-tête pour le fichier metapost contenant les codes %% de tous les tableaux produits \begin{VerbatimOut}{tete.mp} input tableauVariation; verbatimtex %&latex \documentclass{article} \usepackage[upright]{fourier} \usepackage{amsmath} \newcommand{\Mathbold}[1]{\mbox{\boldmath$#1$\unboldmath}} \begin{document} etex \end{VerbatimOut} %% Nettoie les fichiers log dont le nom dépend du choix de l'utilisateur %% Par défaut, c'est le nom du fichier tex courant (\jobname) %% Clôt le fichier metapost contenant le récapitulatif de tous les tableaux %% Définit des commandes disque selon l'OS utilisé \ifthenelse{\boolean{windows}}% {\newcommand{\rem}{DEL } \newcommand{\cat}{TYPE } \newcommand{\cp}{COPY }}% {\newcommand{\rem}{rm }\newcommand{\cat}{cat } \newcommand{\cp}{cp }} \newcommand{\nettoyer}[1][\jobname]% {\immediate\write18{\rem #1.Tab.log} \immediate\write18{echo end >> #1.Tab.mp} } %% Donne comme prefixe aux tableaux le prefixe courant %% Peut-être modifié par \initablor \newcommand{\Tableaux}{\jobname} %% initialise les compteurs \newcounter{TVn} \newcommand{\tv}{\theTVn} \newcounter{TVnbis} \newcommand{\tvbis}{\theTVnbis} %% permet de donner un prefixe aux tableaux produits (\jobname par défaut) %% effectue quelques vérifications : \newcommand{\initablor}[1][\jobname]{% \renewcommand{\Tableaux}{#1}% Arret du nom des tableaux \setcounter{TVn}{0}% Initialisation du compteur de tableaux. \ifthenelse{\boolean{xcas}}% Avec l'option XCas {\IfFileExists{\Tableaux.Tab.mp}% Si Tableaux.mp est présent... {\immediate\write18{\rem \Tableaux.Tab.mp}}% le détruire {}% \immediate\write18{\cp -f tete.mp \Tableaux.Tab.mp}% Reconstituer l'entête de Tableaux.mp } {\IfFileExists{\Tableaux.Tab.mp}% Sans l'option XCas, si % Tableaux.mp existe {\immediate\write18{mpost -interaction=batchmode \Tableaux.Tab}}% l'exécuter pour reconstituer les figures {\PackageWarning{tablor}{Pas de source metapost pour creer les tableaux.}}% sinon message d'erreur % (mais pas d'arret car les tableaux % peuvent être présents ) }}% %% commande pour lancer giac selon l'OS \makeatletter \newcommand{\executGiacmp}[1]{% \ifthenelse{\boolean{windows}}% {\immediate\write18{giac #1 }}% {\immediate\write18{giac <#1 }}} \makeatother %%% % %%% LES SCRIPTS GIAC/XCAS % %%% %% %% Code giac/Xcas pour les Tableaux de Variations %% \begin{VerbatimOut}{XcasTV.cxx} TV(L,F,nom,nomv,f,ftt,nmr):={ nl:=size(L); f:=unapply(f,x); fp:=fonction_derivee(f); Z:=concat(L,F); S:=resoudre(fp(x),x); si size(S)>0 alors pour j de 0 jusque size(S)-1 faire kk:=(evalf(S[j])>=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1])); if(kk==1){Z:=append(Z,simplifier(S[j]))}; fpour fsi; Z:=sort(Z); nz:=size(Z); si Z[0]==Z[1] alors Z:=augment(Z[0],Z[2..nz-1]);nz:=nz-1; fsi; pour u de 1 jusque nz-2 faire si Z[u]==Z[u+1] alors Z:=augment(Z[0..u-1],Z[u+1..nz-1]);nz:=nz-1; fsi; fpour; nz:=size(Z); l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" "; pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex); ";fpour; k0:= evalf(limite(f(x),x=Z[0],1))> evalf(limite(f(x),x=Z[1],-1)); kz:=evalf(limite(f(x),x=Z[nz-1],-1))> evalf(limite(f(x),x=Z[nz-2],1)); lsi:=" newLigneSignes(btex $\\hbox{ Signe de }\\atop{\\displaystyle "+nom+"'("+nomv+")}$ etex);"+ if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ if(sign(fp(Z[0]+10^(-5)))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ if(sign(fp((Z[0]+10^(-5))))==1){"plus;"}else{"moins;"} }} if(nz>2){ for(r:=1; r<=nz-2;r++){ ksp:=evalf(fp(Z[r]+0.01))>0; lsp:=lsp+if(member(Z[r],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ if(ksp==1){"plus;"}else{"moins;"} }; } lsf:=if(member(Z[nz-1],F)==0){""}else{"nomDefBarre; "} lm0:=limite(f(x),x=Z[0],1)==-infinity; li:=" newLigneVariations(btex $\\hbox{\\bf Variations de }\\atop{\\displaystyle \\Mathbold{"+nom+"}}$ etex);"+ if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"} else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"}+ if(k0==1){"1"}else{"0"}+ ");"; if(nz>2){ for(r:=1; r<=nz-2;r++){ krm:=evalf(limite(f(x),x=Z[r-1],1))< evalf(limite(f(x),x=Z[r],-1)); krp:=evalf(limite(f(x),x=Z[r],1))> evalf(limite(f(x),x=Z[r+1],-1)) ; lmrm:=limite(f(x),x=Z[r],-1)==-infinity;lmrp:=limite(f(x),x=Z[r],1)==-infinity; lp:=lp+if(member(Z[r],F)){ "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} else{"valPos(btex $"+latex(simplifier(f(Z[r])))+"$ etex,"+if(sign(evalf(fp(Z[r]-0.01)))==sign(fp(Z[r]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0); "}}} }; } lnz:=limite(f(x),x=Z[nz-1],-1)==-infinity; lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}else{"nonDefBarre;limGauche(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}+ if(kz==1){"1);"}else{"0); "}; intro:="input tableauVariation; verbatimtex %&latex \\documentclass{article} \\usepackage[upright]{fourier} \\usepackage{amsmath} \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} \\begin{document} etex; " MetaL:=if(ftt==2){if(nz>2){intro+"beginTableau("+nmr+")"+ l0+lsi+lsp+lsf+" endTableau; end ";}else{ intro+"beginTableau("+nmr+")"+ l0+ lsi+lsf+" endTableau; end"; } }else{ if(ftt==0){if(nz>2){intro+"beginTableau("+nmr+")"+ l0+ li+ lp+ lf +" endTableau; end";}else{intro+"beginTableau("+nmr+")"+ l0+ li+ lf +" endTableau; end";}}else{ if(nz>2){intro+"beginTableau("+nmr+")"+ l0+ lsi+lsp+lsf+ li+ lp+ lf +" endTableau; end";}else{intro+"beginTableau("+nmr+")"+ l0+ lsi+lsf+ li+ lf +" endTableau; end";} }} MetaLfc:=if(ftt==2){if(nz>2){" beginTableau("+nmr+")"+ l0+lsi+lsp+lsf+" endTableau; ";}else{ intro+"beginTableau("+nmr+")"+ l0+ lsi+lsf+" endTableau; "; } }else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+ l0+ li+ lp+ lf +" endTableau; ";}else{"beginTableau("+nmr+")"+ l0+ li+ lf +" endTableau; ";}}else{ if(nz>2){"beginTableau("+nmr+")"+ l0+ lsi+lsp+lsf+ li+ lp+ lf +" endTableau; ";}else{"beginTableau("+nmr+")"+ l0+ lsi+lsf+ li+ lf +" endTableau; ";} }} sortie:=fopen("XCasmpfc.mp"); fprint(sortie,Unquoted,MetaLfc); fclose(sortie); return(MetaL); }:; \end{VerbatimOut} %% %% Code giac/Xcas pour les Tableaux de Variations avec %% Valeurs intermédiaires %% \begin{VerbatimOut}{XcasTVI.cxx} TVI(L,F,nom,nomv,f,ftt,ao,nmr):={ nl:=size(L); f:=unapply(f,x); fp:=fonction_derivee(f); Z:=concat(L,F); S:=resoudre(fp(x),x); si size(S)>0 alors pour j de 0 jusque size(S)-1 faire kk:=(evalf(S[j])>=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1])); if(kk==1){Z:=append(Z,simplifier(S[j]))}; fpour fsi; Z:=sort(Z); nz:=size(Z); si Z[0]==Z[1] alors Z:=augment(Z[0],Z[2..nz-1]);nz:=nz-1; fsi; pour u de 1 jusque nz-2 faire si Z[u]==Z[u+1] alors Z:=augment(Z[0..u-1],Z[u+1..nz-1]);nz:=nz-1; fsi; fpour; nz:=size(Z); l0:=" newLigneVariables(btex $"+nomv+"$ etex);";lp:=" "; lf:=" ";lsp:=" "; LI:=limite(f(x),x,Z[0],1); LF:=limite(f(x),x,Z[nz-1],-1); LP:=NULL; if(nz>2){ for(r:=1; r<=nz-2;r++){LP:=LP,if(member(Z[r],F)){limite(f(x),x,Z[r],-1),limite(f(x),x,Z[r],1)}else{f(Z[r])}}}; if(nz>2){ LL:=[LI,LP,LF]}else{LL:=[LI,LF]}; NL:=size(LL); A:=NULL;aa:=1;kk:=0; if(NL==nz){for(k:=0;knz){for(k:=0;k evalf(limite(f(x),x=Z[1],-1)); kz:=evalf(limite(f(x),x=Z[nz-1],-1))> evalf(limite(f(x),x=Z[nz-2],1)); lsi:=" newLigneSignes(btex $\\hbox{ Signe de }\\atop{\\displaystyle "+nom+"'("+nomv+")}$ etex);"+ if(Z[0]==-infinity){if(sign(evalf(fp(if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1){"plus;"}else{"moins;"}}else{if(member(Z[0],F)==0){ if(fp(Z[0])==0){"valBarre(btex 0 etex);"}else{" "}+ if(sign(fp((Z[0]+10^(-10))))==1){"plus;"}else{"moins;"}}else{"nonDefBarre;"+ if(sign(fp(10^(-10)+Z[0]))==1){"plus;"}else{"moins;"} }}+if(TestS==0){"valBarre(btex$ $ etex);"+ if(sign(fp(10^(-10)+Z[0]))==1){"plus;"}else{"moins;"}}else{" "}; if(nz>2){rr:=1; if(nz==NL){for(r:=1; r<=NL-2;r++){ TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); ksp:=evalf(fp(Z[r]+0.01))>0; TestL:=(abs(LL[r])==abs(LL[r+1])); lsp:=lsp+if(member(Z[r],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ if(ksp==1){"plus;"}else{"moins;"}+if(TestS==0){"valBarre(btex $ $ etex);"}else{" "}+if(TestS==0){if(ksp==1){"plus;"}else{"moins;"}}else{" "}; }} else{for(r:=1; r<=NL-2;r++){kspp:=evalf(fp(Z[rr]+0.01))>0;TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); TestL:=(abs(LL[r])==abs(LL[r+1])); if(TestS==0){if( TestL==1 ){lsp:=lsp}else{lsp:=lsp+if(member(Z[rr],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ if(kspp==1){"plus;"}else{"moins;"}+"valBarre(btex $ $ etex);"+if(kspp==1){"plus;"}else{"moins;"};rr:=rr+1;} } else{lsp:=lsp+if(member(Z[rr],F)==0){"valBarre(btex 0 etex);"}else{"nonDefBarre;"}+ if(kspp==1){"plus;"}else{"moins;"};rr:=rr+1;} }} }; lsf:=if(member(Z[nz-1],F)==0){""}else{"nomDefBarre;"} lm0:=limite(f(x),x=Z[0],1)==-infinity; TestS:=(sign(evalf(LL[0]-ao))==sign(evalf(LL[1]-ao))) or (sign(evalf(LL[0]-ao))==0.0) or (sign(evalf(LL[1]-ao))==0.0); li:=" newLigneVariations(btex $\\hbox{\\bf Variations de }\\atop{\\displaystyle \\Mathbold{"+nom+"}}$ etex); "+ if(member(Z[0],F)==0){"valPos(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"} else{"nonDefBarre;limDroite(btex $"+if(lm0==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[0],1)))}+"$ etex,"}+ if(k0==1){"1);"}else{"0);"}+if(TestS==0){"valPos(btex $ "+ao+" $ etex,0.5);"}else{" "}; if(nz>2){if(nz==NL){for(r:=1; r<=nz-2;r++){TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); krm:=evalf(limite(f(x),x=Z[r-1],1))< evalf(limite(f(x),x=Z[r],-1)); krp:=evalf(limite(f(x),x=Z[r],1))> evalf(limite(f(x),x=Z[r+1],-1)) ; lmrm:=limite(f(x),x=Z[r],-1)==-infinity;lmrp:=limite(f(x),x=Z[r],1)==-infinity; lp:=lp+if(member(Z[r],F)) { "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[r],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} else{"valPos(btex $"+latex(simplifier(f(Z[r])))+"$ etex,"+if(sign(evalf(fp(Z[r]-0.01)))==sign(fp(Z[r]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0);"}}}+if(TestS==0){"valPos(btex $ "+ao+" $ etex,0.5);" }else{" "}; };//for }else{rr:=1;for(r:=1; r<=NL-2;r++){TestS:=(sign(evalf(LL[r]-ao))==sign(evalf(LL[r+1]-ao))) or (sign(evalf(LL[r]-ao))==0.0)or (sign(evalf(LL[r+1]-ao))==0.0); krm:=evalf(limite(f(x),x=Z[rr-1],1))< evalf(limite(f(x),x=Z[rr],-1)); krp:=evalf(limite(f(x),x=Z[rr],1))> evalf(limite(f(x),x=Z[rr+1],-1)) ; lmrm:=limite(f(x),x=Z[rr],-1)==-infinity;lmrp:=limite(f(x),x=Z[rr],1)==-infinity; TestL:=(abs(LL[r])==abs(LL[r+1])); if(TestS==0){if( TestL==1 ){lp:=lp}else{ lp:=lp+if(member(Z[rr],F)) { "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} else{"valPos(btex $"+latex(simplifier(f(Z[rr])))+"$ etex,"+if(sign(evalf(fp(Z[rr]-0.01)))==sign(fp(Z[rr]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0);"}}}+"valPos(btex $ "+ao+" $ etex,0.5); ";rr:=rr+1; }// else testL==1 }//testS==0 else{lp:=lp+if(member(Z[rr],F)){ "limGauche(btex $"+if(lmrm==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],-1)))}+"$ etex,"+if(krm==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[rr],1)))}+"$ etex,"+if(krp==1){"1);"}else{"0);"}} else{"valPos(btex $"+latex(simplifier(f(Z[rr])))+"$ etex,"+if(sign(evalf(fp(Z[rr]-0.01)))==sign(fp(Z[rr]+0.01))){"0.5);"}else{if(krp==1){"1);"}else{"0); "}}};rr:=rr+1; }//else testS==0 }//for nz2 lnz:=limite(f(x),x=Z[nz-1],-1)==-infinity; lf:=if(member(Z[nz-1],F)==0){"valPos(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}else{"nonDefBarre;limGauche(btex $"+if(lnz==1){"-\\infty"}else{latex(simplifier(limite(f(x),x=Z[nz-1],-1)))}+"$ etex,"}+ if(kz==1){"1);"}else{"0);"}; intro:=" input tableauVariation; verbatimtex %&latex \\documentclass{article} \\usepackage[upright]{fourier} \\usepackage{amsmath} \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} \\begin{document} etex; "; MetaL:= if(ftt==2){if(nz>2){intro+"beginTableau("+nmr+")"+ l0+lsi+lsp+lsf+" endTableau; end";}else{ intro+"beginTableau("+nmr+")"+ l0+ lsi+lsf+" endTableau; end"; } }else{ if(ftt==0){if(nz>2){intro+"beginTableau("+nmr+")"+ l0+ li+ lp+ lf +" endTableau; end";}else{intro+"beginTableau("+nmr+")"+ l0+ li+ lf +" endTableau; end";}}else{ if(nz>2){intro+"beginTableau("+nmr+")"+ l0+ lsi+lsp+lsf+ li+ lp+ lf +" endTableau; end";}else{intro+"beginTableau("+nmr+")"+ l0+ lsi+lsf+ li+ lf +" endTableau; end";} }}; MetaLfc:= if(ftt==2){if(nz>2){"beginTableau("+nmr+")"+ l0+lsi+lsp+lsf+" endTableau; ";}else{ "beginTableau("+nmr+")"+ l0+ lsi+lsf+" endTableau; "; } }else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+ l0+ li+ lp+ lf +" endTableau; ";}else{"beginTableau("+nmr+")"+ l0+ li+ lf +" endTableau; ";}}else{ if(nz>2){"beginTableau("+nmr+")"+ l0+ lsi+lsp+lsf+ li+ lp+ lf +" endTableau; ";}else{"beginTableau("+nmr+")"+ l0+ lsi+lsf+ li+ lf +" endTableau; ";} }}; sortie:=fopen("XCasmpfc.mp"); fprint(sortie,Unquoted,MetaLfc); fclose(sortie); return(MetaL); }:; \end{VerbatimOut} %% %% Code giac/Xcas pour les Tableaux de signes de produits %% \begin{VerbatimOut}{XcasTabSignL.cxx} TS(L,D,nmr):={ L:=apply(f->unapply(f,x),L) n:=size(L); Z:=NULL; mini:=D[0]; maxi:=D[1]; pour k de 0 jusque n-1 faire S:=resoudre(L[k](x),x); si size(S)>0 alors pour j de 0 jusque size(S)-1 faire if(S[j]>mini and S[j]2){pour u de 1 jusque nz-2 faire si Z[u]==Z[u+1] alors Z:=Z[0..u-1],Z[u+1..nz-1];nz:=nz-1; fsi; fpour;}; nz:=size(Z); if(nz==0){li:="";l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);"; for(p:=0;p<=n-1;p++){li:=li+" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(L[p](x))+"}}$ etex);"+ if(mini!=-infinity and L[p](mini)==0){" valBarre(btex 0 etex);"}else{" "}+ if(L[p]((mini+maxi)*0.5>0)){"plus;"}else{"moins;"}+if(maxi!=+infinity and L[p](maxi)==0){" valBarre(btex 0 etex);"}else{" "} } lf:=if(product(L[s]((mini+maxi)*.5),s,0,n-1)>0){"plus;"}else{"moins;"}; MetaL:=" input tableauVariation; verbatimtex %&latex \\documentclass{article} \\usepackage[upright]{fourier} \\usepackage{amsmath} \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} \\begin{document} etex; beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); "+l0+li+ " newLigneSignes(btex $\\hbox{\\bf Signe du }\\atop{{\\bf produit}}$ etex);"+ if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}+ lf+ if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}+" endTableau; end" ; MetaLfc:=" beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); "+l0+li+ " newLigneSignes(btex $\\hbox{\\bf Signe du }\\atop{{\\bf produit}}$ etex);"+ if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}+ lf+ if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}+" endTableau; " ; }else{ l0:="val(btex $"+latex(D[0])+"$ etex);";li:=" ";lr:=" "; pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex); ";fpour; l0:=l0+"val(btex $"+latex(D[1])+"$ etex);"; for(p:=0;p<=n-1;p++){lp:=""; li:=li+" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(L[p](x))+"}}$ etex);"+ if(mini!=-infinity and L[p](mini)==0){" valBarre(btex 0 etex);"}else{" "}+ if(L[p](Z[0]-0.01)>0){"plus;"}else{"moins;"}; for(r:=0; r<=nz-2;r++){ lp:=lp+if(simplifier(L[p](Z[r]))==0){" valBarre(btex 0 etex);"}else{"barre; "}+ if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}; li:=li+lp+ if(simplifier(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins; "}+if(maxi!=+infinity and L[p](maxi)==0){" valBarre(btex 0 etex);"}else{" "} }; pour t de 0 jusque nz-2 faire lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);" fpour MetaL:=" input tableauVariation; verbatimtex %&latex \\documentclass{article} \\usepackage[upright]{fourier} \\usepackage{amsmath} \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} \\begin{document} etex; beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); "+l0+ li + " newLigneSignes(btex $\\hbox{\\bf Signe du }\\atop{{\\bf produit}}$ etex);"+ if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}+ if(product(L[s](Z[0]-0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"+ lr+ if(product(L[s](Z[nz-1]+0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+ if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}+" endTableau; end" ; MetaLfc:=" beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); "+l0+ li + " newLigneSignes(btex $\\hbox{\\bf Signe du }\\atop{{\\bf produit}}$ etex);"+ if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}+ if(product(L[s](Z[0]-0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"+ lr+ if(product(L[s](Z[nz-1]+0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+ if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}+" endTableau; "; } sortie:=fopen("XCasmpfc.mp"); fprint(sortie,Unquoted,MetaLfc); fclose(sortie); return(MetaL); }:; \end{VerbatimOut} %% %% Code giac/Xcas pour les Tableaux de signes de quotients %% \begin{VerbatimOut}{XcasTabSignQ.cxx} TSq(nomf,L,Fo,D,nmr):={ L:=apply(f->unapply(f,x),L); Fo:=apply(f->unapply(f,x),Fo); L:=concat(L,Fo); n:=size(L); Z:=NULL; m:=size(Fo); F:=NULL;FF:=NULL; mini:=D[0]; maxi:=D[1]; pour k de 0 jusque n-1 faire S:=resoudre(L[k](x),x); si size(S)>0 alors pour j de 0 jusque size(S)-1 faire if(S[j]>mini and S[j]0 alors pour j de 0 jusque size(SF)-1 faire FF:=FF,simplifier(SF[j]); if(SF[j]>mini and SF[j]2){pour u de 1 jusque nz-2 faire si Z[u]==Z[u+1] alors Z:=Z[0..u-1],Z[u+1..nz-1];nz:=nz-1; // pour les zéros en double fsi; fpour;} Z:=sort(Z); nz:=size(Z); if(nz>2){pour u de 1 jusque nz-2 faire si Z[u]==Z[u+1] alors Z:=Z[0..u-1],Z[u+1..nz-1];nz:=nz-1; fsi; fpour;}; nz:=size(Z); if(nz==0){li:="";l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);"; for(p:=0;p<=n-1;p++){li:=li+" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(L[p](x))+"}}$ etex);"+ if(mini!=-infinity and L[p](mini)==0){" valBarre(btex 0 etex);"}else{" "}+ if(L[p]((mini+maxi)*0.5>0)){"plus;"}else{"moins;"}+if(maxi!=+infinity and L[p](maxi)==0){" valBarre(btex 0 etex);"}else{" "} } lf:=if(product(L[s]((mini+maxi)*.5),s,0,n-1)>0){"plus;"}else{"moins;"}; MetaL:=" input tableauVariation; verbatimtex %&latex \\documentclass{article} \\usepackage[upright]{fourier} \\usepackage{amsmath} \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} \\begin{document} etex; beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); "+l0+li+ " newLigneSignes(btex $\\hbox{\\bf Signe }\\atop{{\\bf de "+nomf+"(x)}}$ etex);"+ if(member(mini,FF)==0){if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}}else{"nonDefBarre;"}+ lf+ if(member(maxi,FF)==0){if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}}else{"nonDefBarre;"}+" endTableau; end" ; MetaLfc:=" beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); "+l0+li+ " newLigneSignes(btex $\\hbox{\\bf Signe }\\atop{{\\bf de "+nomf+"(x)}}$ etex);"+ if(member(mini,FF)==0){if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}}else{"nonDefBarre;"}+ lf+ if(member(maxi,FF)==0){if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}}else{"nonDefBarre;"}+" endTableau; " ; }else{ l0:="val(btex $"+latex(D[0])+"$ etex);";li:=" ";lr:=" "; pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex); ";fpour; l0:=l0+"val(btex $"+latex(D[1])+"$ etex);"; for(p:=0;p<=n-1;p++){lp:=""; li:=li+" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(L[p](x))+"}}$ etex);"+ if(mini!=-infinity and L[p](mini)==0){" valBarre(btex 0 etex);"}else{" "}+ if(L[p](Z[0]-0.01)>0){"plus;"}else{"moins;"}; for(r:=0; r<=nz-2;r++){ lp:=lp+if(simplifier(L[p](Z[r]))==0){" valBarre(btex 0 etex);"}else{"barre; "}+ if(L[p]((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}}; li:=li+lp+ if(simplifier(L[p](Z[nz-1]))==0){"valBarre(btex 0 etex);"}else{"barre;"}+ if(L[p](Z[nz-1]+1.0)>0){"plus;"}else{"moins; "}+if(maxi!=+infinity and L[p](maxi)==0){" valBarre(btex 0 etex);"}else{" "} }; pour t de 0 jusque nz-2 faire lr:=lr+if(product(L[s]((Z[t]+Z[t+1])*.5),s,0,n-1)>0){"plus;"}else{"moins;"}+ if(member(Z[t+1],FF)==0){"valBarre(btex 0 etex);"}else{ "nonDefBarre;"} fpour MetaL:=" input tableauVariation; verbatimtex %&latex \\documentclass{article} \\usepackage[upright]{fourier} \\usepackage{amsmath} \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} \\begin{document} etex; beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); "+l0+ li + " newLigneSignes(btex $\\hbox{\\bf Signe }\\atop{{\\bf de"+nomf+"(x)}}$ etex);"+ if(member(mini,FF)==0){if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}}else{"nonDefBarre;"}+ if(product(L[s](Z[0]-0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+ if(member(Z[0],FF)==0){"valBarre(btex 0 etex);"}else{ "nonDefBarre;"}+ lr+ if(product(L[s](Z[nz-1]+0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+ if(member(maxi,FF)==0){if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}}else{"nonDefBarre;"}+" endTableau; end" ; MetaLfc:=" beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); "+l0+ li + " newLigneSignes(btex $\\hbox{\\bf Signe }\\atop{{\\bf de"+nomf+"(x)}}$ etex);"+ if(member(mini,FF)==0){if(mini!=-infinity and product(L[s](mini),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}}else{"nonDefBarre;"}+ if(product(L[s](Z[0]-0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+ if(member(Z[0],FF)==0){"valBarre(btex 0 etex);"}else{ "nonDefBarre;"}+ lr+ if(product(L[s](Z[nz-1]+0.01),s,0,n-1)>0){"plus;"}else{"moins;"}+ if(member(maxi,FF)==0){if(maxi!=+infinity and product(L[s](maxi),s,0,n-1)==0){" valBarre(btex 0 etex);"}else{" "}}else{"nonDefBarre;"}+" endTableau; " } sortie:=fopen("XCasmpfc.mp"); fprint(sortie,Unquoted,MetaLfc); fclose(sortie); return(MetaL); }:; \end{VerbatimOut} %% Code giac/Xcas pour les Tableaux de signes du produit %% de 2 facteurs affines %% \begin{VerbatimOut}{XcasTabSign.cxx} TSa(a,b,c,d,nmr):={ zA:=resoudre(a*x+b=0,x)[0]; zB:=resoudre(c*x+d=0,x)[0]; zmin:=min(zA,zB); zmax:=max(zA,zB); Meta:= " input tableauVariation; verbatimtex %&latex \\documentclass{article} \\usepackage[upright]{fourier} \\usepackage{amsmath} \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} \\begin{document} etex; beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); val(btex $-\\infty$ etex);val(btex $"+latex(zmin)+"$ etex); val(btex $"+latex(zmax)+"$etex); val(btex $+\\infty$ etex); newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+"}}$ etex);" + if(a>0){"moins;"}else{"plus;"}+ if(zmin==zA){"valBarre(btex 0 etex);"}else{"barre;"}+ if(zmin==zA){si a>0 alors "plus;"; sinon "moins;";fsi} else{si a>0 alors "moins;"; sinon "plus;"; fsi}+ if(zmin==zA){"barre;"}else{"valBarre(btex 0 etex);"}+ if(a>0){"plus;"}else{"moins;"} +" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+"}}$ etex);" + if(c>0){"moins"}else{"plus"}+";"+ if(zmin==zB){"valBarre(btex 0 etex);"}else{"barre;"}+ if(zmin==zB){si c>0 alors "plus;"; sinon "moins;";fsi} else{si c>0 alors "moins;"; sinon "plus;"; fsi}+ if(zmin==zB){"barre;"}else{"valBarre(btex 0 etex);"}+ if(c>0){"plus;"}else{"moins;"} +" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{("+if(a==1){"x+"}else{if(a==-1){"-x+"}else{a+"x+"}}+b+")("+if(c==1){"x+"}else{if(c==-1){"-x+"}else{c+"x+"}}+d+")}}$ etex);" + si a*c>0 alors plus; sinon moins;fsi+";"+ "valBarre(btex 0 etex);"+ si a*c>0 alors moins; sinon plus;fsi+";"+ "valBarre(btex 0 etex);"+ si a*c>0 alors plus; sinon moins;fsi+";"+" endTableau; end" ; return(Meta); }:; \end{VerbatimOut} %% %% Code giac/Xcas pour les Tableaux de Signes d'expression ne contenant %% qu'un seul terme \begin{VerbatimOut}{XcasTSc.cxx} TSc(g,D,nmr):={ f:=unapply(g,x); Z:=NULL; mini:=D[0]; maxi:=D[1];lm:=" "; S:=resoudre(f(x),x); if(size(S)==0){ l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);"; li:=if(mini!=-infinity and f(mini)==0){" valBarre(btex 0 etex);"}else{" "}+ if(mini!=-infinity or maxi!=+infinity){if(f((mini+maxi)*0.5>0)){"plus;"}else{"moins;"}}else{if(f(0)>0){"plus;"}else{"moins;"}}; lf:=if(maxi!=+infinity and f(maxi)==0){" valBarre(btex 0 etex);"}else{" "}; } else{pour j de 0 jusque size(S)-1 faire if(S[j]>mini and S[j]2){pour u de 1 jusque nz-2 faire si Z[u]==Z[u+1] alors Z:=Z[0..u-1],Z[u+1..nz-1];nz:=nz-1; fsi; fpour;} nz:=size(Z); l0:=" ";li:=" ";lr:=" "; if(nz==0){l0:="val(btex $"+latex(D[0])+"$ etex);val(btex $"+latex(D[1])+"$ etex);"; li:=if(mini!=-infinity and f(mini)==0){" valBarre(btex 0 etex);"}else{" "}+ if(f((mini+maxi)*0.5>0)){"plus;"}else{"moins;"}; lf:=if(maxi!=+infinity and f(maxi)==0){" valBarre(btex 0 etex);"}else{" "}; }else{ l0:="val(btex $"+latex(D[0])+"$ etex);";li:=" "; pour m de 0 jusque nz-1 faire l0:=l0+"val(btex $"+latex(Z[m])+"$ etex); "; fpour; l0:=l0+"val(btex $"+latex(D[1])+"$ etex);"; li:= if(mini!=-infinity and f(mini)==0){" valBarre(btex 0 etex);"}else{" "}+ if(f(Z[0]-0.01)>0){"plus;"}else{"moins;"}+"valBarre(btex 0 etex);"; lm:=if(nz>=2){for(r:=0; r<=nz-2;r++){lm:=lm+if(f((Z[r]+Z[r+1])*.5)>0){"plus;"}else{"moins;"}+ "valBarre(btex 0 etex);" }}else{" "}; lf:=if(f(Z[nz-1]+1.0)>0){"plus;"}else{"moins;"}+if(maxi!=+infinity and f(maxi)==0){"valBarre(btex 0 etex);"}else{" "}; }}; MetaL:=" input tableauVariation; verbatimtex %&latex \\documentclass{article} \\usepackage[upright]{fourier} \\usepackage{amsmath} \\newcommand{\\Mathbold}[1]{\\mbox{\\boldmath$#1$\\unboldmath}} \\begin{document} etex; beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); "+l0+" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(f(x))+"}}$ etex);"+ li+lm+lf +" endTableau; end" ; MetaLfc:=" beginTableau("+nmr+") newLigneVariables(btex $\\Mathbold{x}$ etex); "+l0+" newLigneSignes(btex $\\hbox{\\bf Signe de }\\atop{\\displaystyle \\Mathbold{"+latex(f(x))+"}}$ etex);"+ li+lm+lf +" endTableau; " ; sortie:=fopen("XCasmpfc.mp"); fprint(sortie,Unquoted,MetaLfc); fclose(sortie); return(MetaL); }:; \end{VerbatimOut} %% %% %% traitement des fichiers produits par giac/xcas %% %% \newcommand{\dresse}[1]{% \ifthenelse{\boolean{xcas}}{% Avec l'option "XCas présent" \executGiacmp{XCas#1.giac}% reconstituer le tableau % exporter le source mp % puis lancer metapost pour créer % l'image du tableau \immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab.mp} \immediate\write18{mpost -interaction=batchmode -jobname=\Tableaux.Tab XCasmp#1}}% {% sinon, si le tableau est absent, alerte. \IfFileExists{\Tableaux.Tab.\theTVn}{}{% \PackageError{tablor}{Tableau absent non reconstituable.}{Pour compiler il faut, soit les fichiers de tableaux, soit le fichier \Tableaux.Tab.mp, soit disposer de XCas.}}} \begin{center} \includegraphics{\Tableaux.Tab.\theTVn} \end{center} \stepcounter{TVn}} %% %% traitement des fichiers produits par giac/xcas avec possibilité %% de modifier le fichier metapost (environnement étoilé)) %% \newcommand{\dressetoile}[1]{% \IfFileExists{\Tableaux.Tab.\theTVn}{% Test sur l'existence du tableau % Si oui, inclusion du fichier source de sauvegarde mp dans Tableaux \immediate\write18{\cat TSav-\theTVn.mp >> \Tableaux.Tab.mp}} % Si non, lancement des opérations de fabrication {\executGiacmp{XCas#1.giac}% \immediate\write18{\editeur XCasmpfc.mp} % Modification avec l'éditeur choisi \immediate\write18{\cp -f XCasmpfc.mp TSav-\theTVn.mp} % Sauvegarde du % source mp sur le disque pour une % inclusion ultérieure dans Tableaux.mp. \immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab.mp}} % Inclusion du % source dans le % fichier % Tableaux \immediate\write18{mpost -interaction=batchmode \Tableaux.Tab}% Reconstitution des tableaux % et création du dernier. L'option % pallie l'absence de end en fin de % fichier \begin{center} \includegraphics{\Tableaux.Tab.\theTVn} \end{center} \setcounter{TVn}{\theTVnbis} % Restauration du compteur TVn } %% %% %%% %%% %%% les "giac" qui permettent d'exécuter la commande rentrée dans le fichier tex %%% suivis des environnements qui permettront la saisie du code giac/xcas %%% Les versions étoilées permettent de modifier le code metapost produit initialement %%% \begin{VerbatimOut}{XCas.giac} maple_mode(0); read("XcasTabSign.cxx"); Sortie:=fopen("XCasmp.mp"); vect.xcas.user := read("XCas.user"); vxo := vect.xcas.user; dim.vxo := dim(vxo); nbr.line.vxo := dim.vxo; Resultat:=cat(" "); rslt := vxo[0]; RslT:=cat(rslt); Resultat:=cat(Resultat,RslT); fprint(Sortie,Unquoted,Resultat); fclose(Sortie); \end{VerbatimOut} \newenvironment{TSa} {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCas.user}} {\end{VerbatimOut} \dresse{} } \begin{VerbatimOut}{XCasQ.giac} maple_mode(0); read("XcasTabSignQ.cxx"); Sortie:=fopen("XCasmpQ.mp"); vect.xcas.user := read("XCasQ.user"); vxo := vect.xcas.user; dim.vxo := dim(vxo); nbr.line.vxo := dim.vxo; Resultat:=cat(" "); rslt := vxo[0]; RslT:=cat(rslt); Resultat:=cat(Resultat,RslT); fprint(Sortie,Unquoted,Resultat); fclose(Sortie); \end{VerbatimOut} \newenvironment{TSq}% {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasQ.user}} {\end{VerbatimOut}\dresse{Q}} \newenvironment{TSq*}[1]% {\setcounter{TVnbis}{\theTVn} \setcounter{TVn}{#1} \VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasQ.user}} {\end{VerbatimOut}\dressetoile{Q}} \begin{VerbatimOut}{XCasL.giac} maple_mode(0); read("XcasTabSignL.cxx"); Sortie:=fopen("XCasmpL.mp"); vect.xcas.user := read("XCasL.user"); vxo := vect.xcas.user; dim.vxo := dim(vxo); nbr.line.vxo := dim.vxo; Resultat:=cat(" "); rslt := vxo[0]; RslT:=cat(rslt); Resultat:=cat(Resultat,RslT); fprint(Sortie,Unquoted,Resultat); fclose(Sortie); \end{VerbatimOut} \newenvironment{TS}% {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasL.user}} {\end{VerbatimOut}\dresse{L}} \newenvironment{TS*}[1] {\setcounter{TVnbis}{\theTVn} \setcounter{TVn}{#1} \VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasL.user}} {\end{VerbatimOut}\dressetoile{L}} \begin{VerbatimOut}{XCasTSc.giac} maple_mode(0); read("XcasTSc.cxx"); Sortie:=fopen("XCasmpTSc.mp"); vect.xcas.user := read("XCasTSc.user"); vxo := vect.xcas.user; dim.vxo := dim(vxo); nbr.line.vxo := dim.vxo; Resultat:=cat(" "); rslt := vxo[0]; RslT:=cat(rslt); Resultat:=cat(Resultat,RslT); fprint(Sortie,Unquoted,Resultat); fclose(Sortie); \end{VerbatimOut} \newenvironment{TSc*}[1]% {\setcounter{TVnbis}{\theTVn} \setcounter{TVn}{#1} \VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTSc.user}} {\end{VerbatimOut}\dressetoile{TSc}} \newenvironment{TSc}% {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTSc.user}} {\end{VerbatimOut}\dresse{TSc}} \begin{VerbatimOut}{XCasTV.giac} maple_mode(0); read("XcasTV.cxx"); Sortie:=fopen("XCasmpTV.mp"); vect.xcas.user := read("XCasTV.user"); vxo := vect.xcas.user; dim.vxo := dim(vxo); nbr.line.vxo := dim.vxo; Resultat:=cat(" "); rslt := vxo[0]; RslT:=cat(rslt); Resultat:=cat(Resultat,RslT); fprint(Sortie,Unquoted,Resultat); fclose(Sortie); \end{VerbatimOut} \newenvironment{TV}% {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTV.user}}% {\end{VerbatimOut} \dresse{TV}} \newenvironment{TV*}[1]{% \setcounter{TVnbis}{\theTVn} \setcounter{TVn}{#1} \VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTV.user}}% {\end{VerbatimOut}\dressetoile{TV}} \begin{VerbatimOut}{XCasTVI.giac} maple_mode(0); read("XcasTVI.cxx"); Sortie:=fopen("XCasmpTVI.mp"); vect.xcas.user := read("XCasTVI.user"); vxo := vect.xcas.user; dim.vxo := dim(vxo); nbr.line.vxo := dim.vxo; Resultat:=cat(" "); rslt := vxo[0]; RslT:=cat(rslt); Resultat:=cat(Resultat,RslT); fprint(Sortie,Unquoted,Resultat); fclose(Sortie); \end{VerbatimOut} \newenvironment{TVI}% {\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTVI.user}}% {\end{VerbatimOut}\dresse{TVI}} \newenvironment{TVI*}[1]% {\setcounter{TVnbis}{\theTVn} \setcounter{TVn}{#1} \VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\£µ]{XCasTVI.user}}% {\end{VerbatimOut}\dressetoile{TVI}} %% %% Zi end -> enjoy :)