summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/tablor
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2008-06-15 23:49:31 +0000
committerKarl Berry <karl@freefriends.org>2008-06-15 23:49:31 +0000
commitc8f6037d99411606a58309f74fba8a93da0167af (patch)
treed8633de0fa7bd06556fcec66e9f678f0fa63cc6c /Master/texmf-dist/tex/latex/tablor
parentc4f690378dab1eb49ee454e7ecce5b0010d1af8a (diff)
tablor update (15jun08)
git-svn-id: svn://tug.org/texlive/trunk@8763 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/tablor')
-rw-r--r--Master/texmf-dist/tex/latex/tablor/tablor.sty336
1 files changed, 299 insertions, 37 deletions
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<ns;k++){
+if(trigo==1){
+all_trig_solutions:=1;
+reset_solve_counter(-1,-1);m:=0;
+while(simplifier(subst(resoudre(factor(simplifier(fp[d](t))),t)[k],n_1=m))<=evalf(L[nl-1])){
+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);
+};m:=-1;
+while(evalf(subst(resoudre(factor(simplifier(fp[d](t))),t)[k],n_1=m))>=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 (u<nz-2) and (nz>2) 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}}
+
+
+
+
+
+