From c8f6037d99411606a58309f74fba8a93da0167af Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Sun, 15 Jun 2008 23:49:31 +0000 Subject: tablor update (15jun08) git-svn-id: svn://tug.org/texlive/trunk@8763 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/tex/latex/tablor/tablor.sty | 336 +++++++++++++++++++++++--- 1 file changed, 299 insertions(+), 37 deletions(-) (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/tablor/tablor.sty b/Master/texmf-dist/tex/latex/tablor/tablor.sty index 52f9174effe..ebcb6445802 100644 --- a/Master/texmf-dist/tex/latex/tablor/tablor.sty +++ b/Master/texmf-dist/tex/latex/tablor/tablor.sty @@ -1,5 +1,5 @@ \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{tablor}[02/06/2008 v2.08 la machine a creer des tableaux de signes et variations] +\ProvidesPackage{tablor}[12/06/2008 v3.00 la machine a creer des tableaux de signes et variations] % \copyleft Connan le Barbare (aka Guillaume Connan) \copyright % This work may be distributed and/or mofified under the conditions @@ -10,7 +10,7 @@ % tablor.pdf and tablor.html -%% Crée 16 environnements : +%% Cree 16 environnements : %% tableau de signes de 2 facteurs affines % \begin{TSa} % TSa(-2,3,-1,5,\tv); @@ -38,36 +38,44 @@ % \end{TVZ} % % -% tableau avec valeurs intermédiares +% tableau avec valeurs intermediares %\begin{TVI} %TVI([-1,+infinity],[-1],"f","x",x2/sqrt(x+1)-1,1,2,\tv) %\end{TVI} %%% -% tableau de variations avec f' sans zéro formel +% tableau de variations avec f' sans zero formel %\begin{TVapp} % TVapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,\tv) % \end{TVapp} % % -% tableau de variations avec f' sans zéro formel +% tableau de variations avec f' sans zero formel %\begin{TVIapp} % TVIapp([0,+infinity],[0],"g","x",ln(x)-x*exp(2-x),1,0,\tv) % \end{TVIapp} % % %%% -% et leurs pendants étoilés qui permettent l'affichage intermédiaire du +% et leurs pendants etoiles qui permettent l'affichage intermediaire du % fichier metapost pour le modifier % % +% Courbes parametrees +% \begin{TVP} +% TVP([-infinity,+infinity],[[-1,2],[-1]],["x","y"],"t",[t^2/((t+1)*(t-2)),t^2*(t+2)/(t+1)],1,0,\tv) +% \end{TVP} % % +% \begin{TVP} +% TVP([0,pi/2],[[],[]],["x","y"],"t",[2*cos(t),sin(2*t)],1,1,\tv) +% \end{TVP} +% % %% extensions requises -%% Il faudra rajouter dans le préambule \usepackage{graphicx} si vous +%% Il faudra rajouter dans le preambule \usepackage{graphicx} si vous %% ne l'avez pas de base @@ -76,8 +84,9 @@ \RequirePackage{fancyvrb} \RequirePackage{ifpdf} +\fvset{gobble=0} -% option xcas présent +% option xcas present \newboolean{xcas}\setboolean{xcas}{false} @@ -93,13 +102,13 @@ \newboolean{windows}\setboolean{windows}{false} -%% on configure tablor dans un fichier extérieur pour la plateforme -%% l'éditeur et le préambule metapost +%% on configure tablor dans un fichier exterieur pour la plateforme +%% et l'editeur \IfFileExists{tablor.cfg}{\input{tablor.cfg}}%\typeout{pas de fichier tablor.cfg}} -%% Définit des commandes disque selon l'OS utilisé +%% Definit des commandes disque selon l'OS utilise \ifthenelse{\boolean{windows}}% {\newcommand{\rem}{DEL } \newcommand{\cat}{TYPE } \newcommand{\cp}{COPY }}% @@ -120,7 +129,7 @@ %% pour nettoyer les fichiers auxiliaires -\AtEndDocument{\immediate\write18{\rem *.user XCas* Xcas* *.mpx} +\AtEndDocument{\immediate\write18{\rem *.user XCas* Xcas* *.mpx} } @@ -129,17 +138,17 @@ %% Pour clore les fichiers metapost -\begin{VerbatimOut}{queue.mp} + \begin{VerbatimOut}{queue.mp} -end + end \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 +%% Nettoie les fichiers log dont le nom depend du choix de l'utilisateur +%% Par defaut, c'est le nom du fichier tex courant (\jobname) +%% Clôt le fichier metapost contenant le recapitulatif de tous les tableaux @@ -151,7 +160,7 @@ end %% Donne comme prefixe aux tableaux le prefixe courant -%% Peut-être modifié par \initablor +%% Peut-être modifie par \initablor \newcommand{\Tableaux}{\jobname} @@ -165,25 +174,25 @@ end -%% permet de donner un prefixe aux tableaux produits (\jobname par défaut) -%% effectue quelques vérifications : +%% permet de donner un prefixe aux tableaux produits (\jobname par defaut) +%% effectue quelques verifications : \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 +{\IfFileExists{\Tableaux.Tab.mp}% Si Tableaux.mp est present... + {\immediate\write18{\rem \Tableaux.Tab.mp}}% le detruire {}% \immediate\write18{\cp enteteMP.cfg \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 +{\immediate\write18{mpost -interaction=batchmode \Tableaux.Tab}}% l'executer 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 ) + % peuvent être presents ) }}% @@ -727,7 +736,7 @@ fclose(sortie); %% %% Code giac/Xcas pour les Tableaux de Variations avec -%% Valeurs intermédiaires +%% Valeurs intermediaires %% @@ -1166,9 +1175,239 @@ fclose(sortie); +%% +%% Code giac/Xcas pour les Tableaux de variations de courbes parametrees +%% + + + + + + + +\begin{VerbatimOut}{XcasTVP.cxx} + + +TVP(L,F,nom,nomv,ff,ftt,trigo,nmr):={ +//local Z,LLL,FFF,nl,fp,f,S,d,t,ns,k,m,x,j,kk,nz,u,l0; +nl:=size(L); +fp:=[]; +S:=[]; +f:=ff; +Z:=[]; +LLL:=[]; +for(d:=0;d<=1;d++){ +f:=subst(f,f[d]=unapply(f[d],t)); +fp:=append(fp,fonction_derivee(f[d])); +LLL:=concat(L,F[d]); +Z:=LLL union Z; + +ns:=size(resoudre(factor(simplifier(fp[d](t))),t)); +reset_solve_counter(0); +for(k:=0;k=L[0]){ +reset_solve_counter(-1,-1); +S:=concat(S,simplifier(subst(resoudre(factor(simplifier(fp[d](t))),t)[k],n_1=m)));m:=m-1; +reset_solve_counter(-1,-1); +} +}else{ +S:=concat(S,resoudre(factor(simplifier(fp[d](x))),x)); +} +} + si size(S)>0 alors pour j de 0 jusque size(S)-1 faire + qq:=member(simplifier(S[j]),Z)==0; + kk:=(evalf(S[j])>=evalf(L[0])) and (evalf(S[j])<=evalf(L[nl-1])); + if(kk==1){if(qq==1){Z:=append(Z,simplifier(S[j]))}}; + fpour + fsi; + +Z:=sort(Z); +nz:=size(Z); + + + + tantque simplifier(Z[0])==simplifier(Z[1]) faire Z:=Z[1..nz-1];nz:=size(Z); + ftantque; + +nz:=size(Z); +u:=1; + tantque (u2) faire + tantque Z[u]==Z[u+1] faire + Z:=augment(Z[0..u-1],Z[u+1..nz-1]);nz:=size(Z); + ftantque; + u:=u+1; + ftantque; + }; + + +Z:=sort(Z); +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; + + lsi:="",""; + +FFF:=[[],[]]; + +for(d:=0;d<=1;d++){ +FFF[d]:=concat(F[d],[-infinity,+infinity]); + k0:= evalf(limite(f[d](x),x=Z[0],1))> evalf(limite(f[d](x),x=Z[1],-1)); + kz:=evalf(limite(f[d](x),x=Z[nz-1],-1))> evalf(limite(f[d](x),x=Z[nz-2],1)); + + lsi[d]:=lsic+nom[d]+"'("+nomv+")}$ etex);"+if(member(Z[0],FFF[d])==0){"valBarre(btex $"+latex(simplifier(fp[d](Z[0])))+"$ etex);"}else{if(Z[0]==-infinity){" "}else{"nonDefBarre; +"}}+ + if(Z[0]==-infinity){if(sign(evalf(fp[d](if(Z[1]==+infinity){0}else{Z[1]-10^(-5)})))==1){"plus;"}else{"moins;"}}else{if(member(Z[0],F[d])==0){ + if(sign(fp[d](Z[0]+10^(-5)))==1){"plus;"}else{"moins;"}}else{ + if(sign(fp[d]((Z[0]+10^(-5))))==1){"plus;"}else{"moins;"} }} + +if(nz>2){ for(r:=1; r<=nz-2;r++){ ksp:=evalf(fp[d](Z[r]+0.01))>0; + lsp[d]:=lsp[d]+if(member(Z[r],F[d])==0){"valBarre(btex $"+latex(simplifier(fp[d](Z[r])))+"$ etex);"}else{"nonDefBarre;"}+ + if(ksp==1){"plus;"}else{"moins;"} + }; } + +lsf[d]:=if(member(Z[nz-1],FFF[d])==0){"valBarre(btex $"+latex(simplifier(fp[d](Z[nz-1])))+"$ etex);"}else{if(Z[nz-1]==+infinity){" "}else{"nonDefBarre;"}} + + + + + } + + + + + + + + + + + + lm0:=1,2; li:=1,2; krm:=1,2; krp:=1,2; lmrm:=1,2; lmrp:=1,2; lp:="",""; lnz:=1,2; lf:=1,2; Kz:=1,2;K0:=1,2; + + +for(d:=0;d<=1;d++){ + K0[d]:= evalf(limite(f[d](x),x=Z[0],1))> evalf(limite(f[d](x),x=Z[1],-1)); + Kz[d]:=evalf(limite(f[d](x),x,Z[nz-1],-1))> evalf(limite(f[d](x),x,Z[nz-2],1)); +lm0[d]:=limite(f[d](x),x,Z[0],1)==-infinity; + li[d]:=lvic+nom[d]+"}$ etex);"+ + if(member(Z[0],F[d])==0){"valPos(btex $"+if(lm0[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[0],1)))}+"$ etex,"} + else{"nonDefBarre;limDroite(btex $"+if(lm0[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[0],1)))}+"$ etex,"}+ + if(K0[d]==1){"1"}else{"0"}+ + ");"; + + if(nz>2){ for(r:=1; r<=nz-2;r++){ krm[d]:=evalf(limite(f[d](x),x=Z[r-1],1))< evalf(limite(f[d](x),x=Z[r],-1)); + krp[d]:=evalf(limite(f[d](x),x=Z[r],1))> evalf(limite(f[d](x),x,Z[r+1],-1)) ; + lmrm[d]:=limite(f[d](x),x,Z[r],-1)==-infinity;lmrp[d]:=limite(f[d](x),x,Z[r],1)==-infinity; + lp[d]:=lp[d]+if(member(Z[r],F[d])){ + "limGauche(btex + $"+if(lmrm[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[r],-1)))}+"$ + etex,"+if(krm[d]==1){"1);"}else{"0);"}+"nonDefBarre;limDroite(btex $"+if(lmrp[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[r],1)))}+"$ etex,"+if(krp[d]==1){"1);"}else{"0);"}} + else{"valPos(btex $"+latex(simplifier(f[d](Z[r])))+"$ + etex,"+if(sign(evalf(fp[d](Z[r]-0.001)))==sign(evalf((fp[d](Z[r]+0.001))) )){"0.5);"}else{if(krp[d]==1){"1);"}else{"0); +"}}} + }; } + +lnz[d]:=limite(f[d](x),x=Z[nz-1],-1)==-infinity; + lf[d]:=if(member(Z[nz-1],F[d])==0){"valPos(btex $"+if(lnz[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[nz-1],-1)))}+"$ etex,"}else{"nonDefBarre;limGauche(btex $"+if(lnz[d]==1){"-\\infty"}else{latex(simplifier(limite(f[d](x),x,Z[nz-1],-1)))}+"$ etex,"}+ + if(Kz[d]==1){"1);"}else{"0); +"}; + + +} + + + + + + + + +MetaLfc:=if(ftt==2){if(nz>2){" + +beginTableau("+nmr+")"+ + l0+lsi[0]+lsp[0]+lsf[0]+lsi[1]+lsp[1]+lsf[1]+" +endTableau; + +";}else{ +intro+"beginTableau("+nmr+")"+ + l0+ +lsi[0]+lsf[0]+lsi[1]+lsf[1]+" +endTableau; + +"; +} +}else{ if(ftt==0){if(nz>2){"beginTableau("+nmr+")"+ + l0+ +li[0]+ +lp[0]+ +lf[0]+ +li[1]+ +lp[1]+ +lf[1] ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +li[0]+ +lf[0]+ +li[1]+ +lf[1] ++" +endTableau; + +";}}else{ +if(nz>2){"beginTableau("+nmr+")"+ + l0+ +lsi[0]+lsp[0]+lsf[0]+ +li[0]+ +lp[0]+ +lf[0]+ +lsi[1]+lsp[1]+lsf[1]+ +li[1]+ +lp[1]+ +lf[1] ++" +endTableau; + +";}else{"beginTableau("+nmr+")"+ + l0+ +lsi[0]+lsf[0]+ +li[0]+ +lf[0]+ +lsi[1]+lsf[1]+ +li[1]+ +lf[1] ++" +endTableau; + +";} +} +} + +sortie:=fopen("XCasmpfc.mp"); +fprint(sortie,Unquoted,MetaLfc); +fclose(sortie); + +}:; + + +\end{VerbatimOut} + + %% @@ -1329,10 +1568,10 @@ fpour; -Z:=sort(Z); // on classe les zéros dans l'ordre croissant +Z:=sort(Z); // on classe les zeros dans l'ordre croissant 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; // pour les zéros en double + si Z[u]==Z[u+1] alors Z:=Z[0..u-1],Z[u+1..nz-1];nz:=nz-1; // pour les zeros en double fsi; fpour;} @@ -1628,10 +1867,10 @@ fclose(sortie); \newcommand{\dresse}[1]{% -\ifthenelse{\boolean{xcas}}{% Avec l'option "XCas présent" +\ifthenelse{\boolean{xcas}}{% Avec l'option "XCas present" \executGiacmp{XCas#1.giac}% reconstituer le tableau % exporter le source mp - % puis lancer metapost pour créer + % puis lancer metapost pour creer % l'image du tableau \immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab.mp} \immediate\write18{\cat enteteMP.cfg >> \Tableaux.Tab#1.mp} @@ -1654,8 +1893,8 @@ fclose(sortie); %% -%% traitement des fichiers produits par giac/xcas avec possibilité -%% de modifier le fichier metapost (environnement étoilé)) +%% traitement des fichiers produits par giac/xcas avec possibilite +%% de modifier le fichier metapost (environnement etoile)) %% @@ -1664,15 +1903,15 @@ fclose(sortie); \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 +% Si non, lancement des operations de fabrication {\executGiacmp{XCas#1.giac}% \immediate\write18{\editeur XCasmpfc.mp } - % Modification avec l'éditeur choisi + % Modification avec l'editeur choisi \immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab.mp} \immediate\write18{\cp XCasmpfc.mp TSav-\theTVn.mp} % Sauvegarde du % source mp sur le disque pour une - % inclusion ultérieure dans Tableaux.mp. + % inclusion ulterieure dans Tableaux.mp. \immediate\write18{\cat enteteMP.cfg >> \Tableaux.Tab#1.mp} \immediate\write18{\cat XCasmpfc.mp >> \Tableaux.Tab#1.mp}} % Inclusion du % source dans le @@ -1680,7 +1919,7 @@ fclose(sortie); % Tableaux \immediate\write18{\cat queue.mp >> \Tableaux.Tab#1.mp} \immediate\write18{mpost -jobname=\Tableaux.Tab \Tableaux.Tab#1.mp}% Reconstitution des tableaux - % et création du dernier. L'option + % et creation du dernier. L'option % pallie l'absence de end en fin de % fichier \immediate\write18{\rem \Tableaux.Tab#1.mp} @@ -1702,9 +1941,9 @@ fclose(sortie); %% %%% %%% -%%% les "giac" qui permettent d'exécuter la commande rentrée dans le fichier tex +%%% les "giac" qui permettent d'executer la commande rentree 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 +%%% Les versions etoilees permettent de modifier le code metapost produit initialement %%% @@ -1816,6 +2055,29 @@ read("XCasTV.user"); +\begin{VerbatimOut}{XCasTVP.giac} +maple_mode(0); +read("config.cxx"); +read("XcasTVP.cxx"); +read("XCasTVP.user"); +\end{VerbatimOut} + +\newenvironment{TVP}% +{\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVP.user}}% +{\end{VerbatimOut} +\dresse{TVP}} + +\newenvironment{TVP*}[1]{% +\setcounter{TVnbis}{\theTVn} +\setcounter{TVn}{#1} +\VerbatimEnvironment\begin{VerbatimOut}[commandchars=\\??]{XCasTVP.user}}% +{\end{VerbatimOut}\dressetoile{TVP}} + + + + + + -- cgit v1.2.3