summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/spreadtab
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-03-29 23:33:43 +0000
committerKarl Berry <karl@freefriends.org>2010-03-29 23:33:43 +0000
commit17036ad38f780e71d150dd4b6272d79dd19e9997 (patch)
tree3f9a273e20a6136d5898a38f4ce0599c9e3ad664 /Master/texmf-dist/tex/latex/spreadtab
parent4015a058f2c68e873ea7f12eb582b49b9a903cd7 (diff)
spreadtab 0.3 (28mar10)
git-svn-id: svn://tug.org/texlive/trunk@17613 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/spreadtab')
-rw-r--r--Master/texmf-dist/tex/latex/spreadtab/spreadtab.sty232
1 files changed, 151 insertions, 81 deletions
diff --git a/Master/texmf-dist/tex/latex/spreadtab/spreadtab.sty b/Master/texmf-dist/tex/latex/spreadtab/spreadtab.sty
index cc07b217401..0b99176c0e3 100644
--- a/Master/texmf-dist/tex/latex/spreadtab/spreadtab.sty
+++ b/Master/texmf-dist/tex/latex/spreadtab/spreadtab.sty
@@ -1,9 +1,9 @@
% ____________________________________________________________________________
% | |
% | |
-% | spreadtab v0.2a |
+% | spreadtab v0.3 |
% | |
-% | February 2, 2010 |
+% | March 28, 2010 |
% | |
% |___________________________________________________________________________|
%
@@ -12,12 +12,11 @@
% Copyright Christian Tellechea 2009-2010
% email : unbonpetit@gmail.com
%
-% The "spreadtab" package consists of the 8 following files:
+% The "spreadtab" package consists of the 6 following files:
% spreadtab.sty (this file)
% README
% spreadtab_doc_fr.tex, spreadtab_doc_fr.pdf (manual in french)
% spreadtab_doc_en.tex, spreadtab_doc_en.pdf (manual in english)
-% spreadtab_doc_vn.tex, spreadtab_doc_vn.pdf (manual in vietnamese)
%
% -------------------------------------------------------------------
% This work may be distributed and/or modified under the
@@ -38,21 +37,23 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%% Définitions préalables %%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\newcommand\ST@ver {0.2a}
-\newcommand\ST@date {2010/02/02}
-\newcommand\ST@fr@date {2 f\'evrier 2010}
-\newcommand\ST@eng@date{February $2^\text{nd}$ 2010}
+\newcommand\ST@ver {0.3}
+\newcommand\ST@date {2010/03/28}
+\newcommand\ST@fr@date {28 mars 2010}
+\newcommand\ST@eng@date{March $28^\text{th}$ 2010}
\ProvidesPackage{spreadtab}[\ST@date\space v\ST@ver\space Spreadsheet features for table environments]
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{fp}% pour les calculs scientifiques
-\RequirePackage{xstring}[2009/06/04]% version nécessaire
+\RequirePackage{xstring}[2010/03/28]% version nécessaire
\newcount\ST@count
\newcount\ST@colcount
\newcount\ST@colcount@i
\newcount\ST@rowcount
\newcount\ST@rowcount@i
+\newcount\ST@intpart
+
\newif\ifST@hiddencol
\newif\ifST@debugmode
\newif\ifST@colortblloaded
@@ -61,6 +62,13 @@
% Définit le marqueur qui signale le commencement du champ numérique
\newcommand\STnumericfieldmarker{:=}
+% Définit les caractères entre lesquels doivent entre enveloppées les références des cellules
+% que l'on veut afficher dans les champs textuels
+\newcommand\STsetdisplaymarks[2]{%
+ \def\ST@startdisplay{#1}\def\ST@enddisplay{#2}%
+}
+\STsetdisplaymarks{<<}{>>}% délimiteurs par défaut
+
% définit le marqueur qui signale une cellule de texte
\makeatother\newcommand\STtextcell{@}\makeatletter
@@ -304,7 +312,6 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Lecture du tableau %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% lit le tableau : considère que \\ sépare les lignes
-% Si le tableau se termine par \\, la dernière ligne peut-être incomplète (\hline, par exemple)
\newcommand\ST@read@tab{%
\def\ST@total@colnumber{0}%
\ST@rowcount\z@
@@ -378,11 +385,11 @@
\ifx\ST@temp@a\@empty% \ST@temp@a contient la formule : si la formule est vide
\ifx\ST@copylist\@empty% pas de copylist ?
\@namedef{code@\number\ST@colcount @\number\ST@rowcount}{0}% met le code à 0
- \StrDel[1]\ST@current@cell\STnumericfieldmarker[\ST@current@cell]% on supprime aussi ":="
\else% si la copylist existe
\ST@lookincopylist{\number\ST@colcount}{\number\ST@rowcount}\ST@celltocopy% on cherche si la cellule en cours est dans une plage de copie
\ifx\ST@celltocopy\@empty
\@namedef{code@\number\ST@colcount @\number\ST@rowcount}{0}% si c'est non, met le code à 0
+ \StrDel[1]\ST@current@cell\STnumericfieldmarker[\ST@current@cell]% on supprime aussi ":="
\else
\ST@letname{formula@\number\ST@colcount @\number\ST@rowcount}\ST@celltocopy% il y a une cellule à copier : on l'assigne au champ numérique
\@namedef{code@\number\ST@colcount @\number\ST@rowcount}{1}% et on met le code à 1
@@ -418,12 +425,12 @@
{\ST@findcopyargs\ST@current@cell\ST@copyrange\ST@copyformula% on chope les arguments de \STcopy
\ST@seekcopyoffset\ST@copyrange% cherche les décalages
\edef\ST@copyrange{\ST@hoffest,\ST@voffest}% et affecte sous forme a,b où a et b sont des nombres ou sont vides
- \expandafter\def\expandafter\ST@newtocopylist\expandafter{\expandafter{\ST@copyformula}}% \ST@newtocopylist est le nouvel élément à ajouter à la copylist
+ \expandafter\def\expandafter\ST@newtocopylist\expandafter{\expandafter|\ST@copyformula|}% \ST@newtocopylist est le nouvel élément à ajouter à la copylist
\ST@edefadd@tomacro\ST@newtocopylist{[\number\ST@colcount,\number\ST@rowcount]}%
\ST@expadd@tomacro\ST@newtocopylist{\expandafter(\ST@copyrange)}%
\ST@expadd@tomacro\ST@newtocopylist\ST@copylist% ajoute la copylist à la fin
\let\ST@copylist\ST@newtocopylist% et l'assigne à copylist
- \ST@transposeformula00\ST@copyformula\ST@copyformula
+ \ST@transposeformula00\ST@copyformula\ST@copyformula% on transpose éventuellement pour gérer les "!"
\ST@letname{formula@\number\ST@colcount @\number\ST@rowcount}\ST@copyformula% affecte la formule inchangée au champ numérique courant
}%
{\ST@letname{formula@\number\ST@colcount @\number\ST@rowcount}\ST@current@cell% et on assigne toute la cellule
@@ -532,7 +539,7 @@
\number\numexpr\integerpart+\ST@addrow@}%
\ifnum\numexpr\integerpart+\ST@addrow@<\@ne\ST@illegal@copy\fi% erreur de copie ?
\else
- \let\ST@temp@formula\@xs@afterinteger
+ \let\ST@temp@formula\@xs@afterinteger
\ST@expadd@tomacro\ST@transposed@formula\ST@firstcar
\fi
}%
@@ -614,16 +621,17 @@
% si oui, affecte à #3 la formule transposée
% La liste de copy est parcourue de gauche à droite avec sortie dès qu'une plage qui convient est rencontrée
\newcommand\ST@lookincopylist[3]{%
- \let\ST@copylist@\ST@copylist\let\ST@returnedformula\@empty
+ \let\ST@alias@copylist\ST@copylist
+ \let\ST@returnedformula\@empty
\def\ST@copycol{#1}\def\ST@copyrow{#2}\let#3\@empty
\ST@lookincopylist@i
\let#3\ST@returnedformula
}
\newcommand\ST@lookincopylist@i{%
- \expandafter\ST@testfirstincopylist\ST@copylist@\@nil
+ \expandafter\ST@testfirstincopylist\ST@alias@copylist\@nil
\csname
- \ifx\@empty\ST@copylist@ relax%
+ \ifx\@empty\ST@alias@copylist relax%
\else
\ifx\@empty\ST@returnedformula ST@lookincopylist@i%
\else relax%
@@ -632,14 +640,19 @@
}
% Teste si un élément de la copylist contient une plage qui inclus la cellule en cours.
-\def\ST@testfirstincopylist#1[#2,#3](#4,#5)#6\@nil%
+\def\ST@testfirstincopylist|#1|[#2,#3](#4,#5)#6\@nil%
{%
- \def\ST@copylist@{#6}% on enlève le premier élément de la copylist
+ \def\ST@alias@copylist{#6}% on enlève le premier élément de la copylist
\ST@Ifin\ST@copycol\ST@copyrow[#2,#3](#4,#5)% si ça correspond
{\def\ST@returnedformula{#1}%
\ST@transposeformula{\numexpr\ST@copycol-#2}{\numexpr\ST@copyrow-#3}\ST@returnedformula\ST@returnedformula
}%
- \relax
+ {\ifx\@empty#5\@empty\else
+ \ifnum\ST@copyrow>\numexpr#3+#5\relax
+ \ST@subst\ST@copylist{|#1|[#2,#3](#4,#5)}{}% si on a dépassé la ligne, on retire ce premier élément de la copylist
+ \fi
+ \fi
+ }%
}
% Cherche dans la sc#1 du type ">4,v9" les décalages horizontaux et verticaux
@@ -769,8 +782,14 @@
\expandafter\let\expandafter\ST@temp@a\csname formula@#1@#2\endcsname% \ST@temp@a est le contenu de la formule
\ST@Iffirstis\ST@temp@a-{\expandafter\def\expandafter\ST@temp@a\expandafter{\expandafter0\ST@temp@a}}\relax
\FPeval\ST@temp@a\ST@temp@a% on calcule cette formule
- \unless\ifx\ST@autouround\@empty\FPround\ST@temp@a\ST@temp@a\ST@autouround\fi% on arrondi s'il faut
- \FPclip\ST@temp@a\ST@temp@a% puis on supprime les 0 inutiles
+ \unless\ifx\ST@rounddigit\@empty\FPround\ST@temp@a\ST@temp@a\ST@rounddigit\fi% on arrondi s'il faut
+ \ifST@clipround% on arrondit en enlevant les 0 inutiles ?
+ \FPclip\ST@temp@a\ST@temp@a
+ \else% si on laisse certains 0 inutiles
+ \unless\ifx\ST@rounddigit\@empty% on ne tronque que si le nombre n'est pas vide
+ \FPtrunc\ST@temp@a\ST@temp@a\ST@rounddigit
+ \fi
+ \fi
\ST@letname{formula@#1@#2}\ST@temp@a% assigne le résultat à la formule
\@namedef{code@#1@#2}{2}% et met le code à 2 (cellule calculée)
\fi
@@ -942,8 +961,8 @@
\else% il y a une référence dans l'argument de la fontion
\ifnum\csname code@\ST@temp@formula\endcsname=\z@% si la référence est une cellule texte
\expandafter\let\expandafter\ST@current@formula\csname text@\ST@temp@formula\endcsname% alias pour la zone texte distante
- % on ne prend que le texte s'il y a un \multicolumn qui traine
- \ST@Ifinstr\ST@current@formula{\@empty\multicolumn}%
+ \StrDel[1]\ST@current@formula\STnumericfieldmarker[\ST@current@formula]% on enlève le := si besoin
+ \ST@Ifinstr\ST@current@formula{\@empty\multicolumn}% on ne prend que le texte s'il y a un \multicolumn qui traine
{\ST@thirdarg@after\ST@current@formula\multicolumn\ST@current@formula}\relax
\let\ST@tobereplaced\ST@function@namefound\ST@expadd@tomacro\ST@tobereplaced{\expandafter(\ST@function@argfound)}%
\csname ST@func@\ST@function@namefound\endcsname\ST@current@formula\ST@result@func% puis on évalue la fonction
@@ -971,6 +990,27 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Macro-fonctions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% liste des fonctions dont l'argument est numérique
+\newcommand\ST@functions@with@num@arg{%
+ fact,ifeq,ifgt,iflt,numtofrshortdate,numtoengshortdate,numtofrlongdate,gcd,lcm,%
+ numtoenglongdate,numtofrmonth,numtoengmonth,numtofrday,numtoengday}
+
+% liste des fonctions dont l'argument est une plage ou est vide
+\newcommand\ST@functions@with@range@arg{sum,rand,randint,sumprod}
+
+% liste des fonctions dont l'argument ne doit pas être calculé
+\newcommand\ST@functions@no@calc@arg{ifeq,ifgt,iflt,gcd,lcm}
+
+% liste des fonctions dont l'argument est un texte
+\newcommand\ST@functions@with@text@arg{frshortdatetonum,engshortdatetonum,englongdatetonum,frlongdatetonum,scitodec}
+
+% liste des fonctions dont le résultat est un texte
+\newcommand\ST@functions@with@textresult{numtofrshortdate,numtoengshortdate,numtofrlongdate,numtoenglongdate,numtofrmonth,numtoengmonth,numtofrday,numtoengday}
+
+% liste totale des fonctions
+\edef\ST@functions@list{\ST@functions@with@num@arg,\ST@functions@with@range@arg,\ST@functions@with@text@arg}
+
\newcommand\ST@for[2]{% \ST@for{#1}{code} -> exécute le code pour toutes les cellules des plages passées en argument #1
\def\ST@forcode{#2}%
\expandafter\def\expandafter\ST@for@rangelist\expandafter{#1;}%
@@ -1016,26 +1056,6 @@
\ST@nextfor
}
-% liste des fonctions dont l'argument est numérique
-\newcommand\ST@functions@with@num@arg{%
- fact,ifeq,ifgt,iflt,numtofrshortdate,numtoengshortdate,numtofrlongdate,gcd,lcm,%
- numtoenglongdate,numtofrmonth,numtoengmonth,numtofrday,numtoengday}
-
-% liste des fonctions dont l'argument est une plage ou est vide
-\newcommand\ST@functions@with@range@arg{sum,rand,randint,sumprod}
-
-% liste des fonctions dont l'argument ne doit pas être calculé
-\newcommand\ST@functions@no@calc@arg{ifeq,ifgt,iflt,gcd,lcm}
-
-% liste des fonctions dont l'argument est un texte
-\newcommand\ST@functions@with@text@arg{frshortdatetonum,engshortdatetonum,englongdatetonum,frlongdatetonum}
-
-% liste des fonctions dont le résultat est un texte
-\newcommand\ST@functions@with@textresult{numtofrshortdate,numtoengshortdate,numtofrlongdate,numtoenglongdate,numtofrmonth,numtoengmonth,numtofrday,numtoengday}
-
-% liste totale des fonctions
-\edef\ST@functions@list{\ST@functions@with@num@arg,\ST@functions@with@range@arg,\ST@functions@with@text@arg}
-
% Cette macro cherche dans la sc #1 la première fonction qu'elle trouve ne contenant pas d'autre fonction dans son argument
% En sortie, \ST@function@namefound contient le nom de la fonction trouvée et \ST@function@argfound son argument.
% Si aucune fonction mot-clé n'est trouvé, ces 2 dernières séquences de contrôles sont vides.
@@ -1258,6 +1278,21 @@
\FPrandom#2%
}
+\newcommand\ST@genzeros[1]{\if#1m0\expandafter\ST@genzeros\fi}
+\newcommand\ST@powerten[2]{% génère 10^abs(#1) dans la sc #2
+ \edef#2{1\expandafter\ST@genzeros\romannumeral\number\ifnum#1<\z@-\fi#1000\relax}%
+}
+\newcommand\ST@func@scitodec[2]{% #1=sc contenant l'argument #2: sc recevant le résultat
+ \expandafter\lowercase\expandafter{\expandafter\def\expandafter#1\expandafter{#1}}%
+ \ST@Ifinstr#1{ee}% on regarde s'il y a "ee"
+ {\ST@split#1{ee}\ST@mantissa\ST@exposant
+ \ST@powerten\ST@exposant\ST@tenpow
+ \csname FP\ifnum\ST@exposant<\z@ div\else mul\fi\endcsname#2\ST@mantissa\ST@tenpow}%
+ {\IfDecimal#1%
+ {\let#2#1}%
+ {\@latex@error{\ST@errname Illegal number in scitodec argument}\ST@seedoc@i}}%
+}
+
% les fonctions de test
\def\ST@list@offour#1,#2,#3,#4\@nil{%
\def\ST@argA{#1}\def\ST@argB{#2}\def\ST@argC{#3}\def\ST@argD{#4}%
@@ -1277,8 +1312,6 @@
\newcommand\ST@func@ifgt[2]{\ST@def@funcif#1#2{gt}}
\newcommand\ST@func@iflt[2]{\ST@def@funcif#1#2{lt}}
-
-
% Transforme une date en nombre
\newcommand\ST@datetonum[4]{% #1=sc recevant le résultat #2=jj #3=mm #4=aa
\FPeval#1{#3+9-12*trunc((#3+9)/12,0)}%
@@ -1459,6 +1492,25 @@
{\edef\ST@lastshowcol{\number\ST@colcount}}%
}
+% cherche "<<ref>>" dans la sc #1 et remplace toutes ces occurences par le champ numérique de "ref"
+\newcommand\ST@displaynumfields[1]{%
+ \StrBehind#1\ST@startdisplay[\ST@dipslaycell]%
+ \StrBefore\ST@dipslaycell\ST@enddisplay[\ST@dipslaycell]%
+ \let\ST@next\@gobble% à priori, on ne reboucle pas
+ \unless\ifx\@empty\ST@dipslaycell% si ce qui a entre les marqueurs n'est pas vide
+ \ST@ifref\ST@dipslaycell% et si c'est une référence valide
+ {\let\ST@next\ST@startdisplay
+ \ST@expadd@tomacro\ST@next\ST@dipslaycell
+ \ST@expadd@tomacro\ST@next\ST@enddisplay
+ \expandafter\let\expandafter\ST@dipslaycell\csname formula@\ST@temp@formula\endcsname% alias pour la formule distante
+ \unless\ifx\ST@decsep\ST@decsepfp\ST@substdecsep\ST@dipslaycell\fi% subsitution du séparateur décimal s'il y a lieu
+ \StrSubstitute#1\ST@next\ST@dipslaycell[#1]% on substitue <<ref>> par le champ numérique de la formule distante
+ \let\ST@next\ST@displaynumfields
+ }\relax
+ \fi
+ \ST@next#1%
+}
+
\newcommand\ST@build@tab{%
\ST@rowcount\@ne\ST@colcount\@ne
\expandafter\ST@expadd@tomacro\expandafter\ST@tab\csname endrow@0\endcsname% la (ou les) éventuelle ligne supérieure du tableau
@@ -1478,13 +1530,16 @@
{%
\ST@hiddencolfalse
\ifcsname text@\number\ST@colcount @\number\ST@rowcount\endcsname% si la cellule existe
- \expandafter\let\expandafter\ST@temp@a\csname formula@\number\ST@colcount @\number\ST@rowcount\endcsname% la valeur
- \expandafter\let\expandafter\ST@temp@b\csname text@\number\ST@colcount @\number\ST@rowcount\endcsname% on créé un alias
+ \expandafter\let\expandafter\ST@temp@b\csname text@\number\ST@colcount @\number\ST@rowcount\endcsname% on créé un alias pour le texte
+ \exploregroups
\ifnum\csname code@\number\ST@colcount @\number\ST@rowcount\endcsname=\tw@% si la cellule contient un champ numérique
+ \expandafter\let\expandafter\ST@temp@a\csname formula@\number\ST@colcount @\number\ST@rowcount\endcsname% alias pour la valeur
\unless\ifx\ST@decsep\ST@decsepfp\ST@substdecsep\ST@temp@a\fi% et si le "." doit être remplacé par "," on substitue
+ \StrSubstitute[1]\ST@temp@b\STnumericfieldmarker\ST@temp@a[\ST@temp@a]% on remplace le flag de formule par la valeur calculée
+ \else% si la cellule ne contient pas de champ numérique
+ \StrDel[1]\ST@temp@b\STnumericfieldmarker[\ST@temp@a]% on enlève l'éventuel marqueur
\fi
- \exploregroups
- \StrSubstitute[1]\ST@temp@b\STnumericfieldmarker\ST@temp@a[\ST@temp@a]% on remplace le flag de formule par la valeur calculée
+ \ST@displaynumfields\ST@temp@a% affiche les champs numériques des cellules entre << et >>
\noexploregroups
\ST@expadd@tomacro\ST@tab\ST@temp@a% on ajoute la cellule au tableau
\fi
@@ -1531,8 +1586,11 @@
\ifST@colortblloaded\noexpand\cellcolor[gray]{.6}\fi
}
-\newcommand\STdebug{%
- \begingroup\ifmmode\scriptscriptstyle\else\scriptsize\fi
+\newcommand\STdebug[1]{%
+ \ST@debugmodetrue% on se met en mode débogage
+ \begingroup
+ \def\ST@debuginfo{#1}%
+ \ifmmode\scriptscriptstyle\else\scriptsize\fi
\def\ST@temp@a{formula}% pour n'afficher les fins de ligne que dans ce cas
\IfStrEqCase\ST@debuginfo{%
{formula}\relax{text}\relax{code}\relax
@@ -1602,20 +1660,24 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% définit le séparateur décimal
-\newcommand\STsetdecimalsep[1]{\StrChar{#1}1[\ST@decsep]}
+\newcommand\STsetdecimalsep[1]{\def\ST@decsep{#1}}
\def\ST@decsepfp{.}% le séparateur décimal donné par fp
\STsetdecimalsep.% le point par défaut
\STmessage{true}% affiche les messages par défaut
-\newcommand\STautoround[1]{\def\ST@autouround{#1}}
+\newif\ifST@clipround
+\newcommand\STautoround{\@ifstar{\ST@cliproundfalse\ST@autoround}{\ST@cliproundtrue\ST@autoround}}
+\newcommand\ST@autoround[1]{\def\ST@rounddigit{#1}}
\STautoround{}% pas d'arrondi par défaut
\newcommand\STsavecell[2]{% met dans la sc #1 la valeur du champ numérique de la cellule spécifiée par sa référence ABSOLUE
\def\ST@temp@ref{#2}%
\ST@ifref\ST@temp@ref\relax\ST@illegal@ref
\ST@Ifinstr\ST@temp@ref[\ST@illegal@ref\relax
- \expandafter\global\expandafter\let\expandafter#1\csname formula@\ST@temp@formula\endcsname
+ \expandafter\let\expandafter#1\csname formula@\ST@temp@formula\endcsname% le nombre est assigné à #1
+ \unless\ifx\ST@decsep\ST@decsepfp\ST@substdecsep#1\fi% et si le "." doit être remplacé par "," on substitue
+ \global\let#1#1% on rend l'assignation globale
}
\long\def\ST@get@body#1\end{%
@@ -1654,24 +1716,21 @@
\ST@emit@message{ok^^J}%
\ST@search@lastshowcol% cherche la dernière colonne affichée
\ST@debugmodefalse% à priori, on n'est pas en mode débogage
- \loop% affiche éventuellement les tableaux de débogage
- \ST@Ifinstr\ST@optcode{\@empty\STdebug}{\ST@debugmodetrue\iftrue}\iffalse% \fi
- \ST@firstarg@after\ST@optcode\STdebug\ST@debuginfo
- \ST@emit@message{\space\space\space\space\space Debug mode: display debug tab "\ST@debuginfo"^^J}%
- \StrDel\ST@optcode{\expandafter\STdebug\expandafter{\ST@debuginfo}}[\ST@optcode]%
- \STdebug
- \repeat
- \ifST@debugmode
- \ST@Ifinstr\ST@optcode{\@empty\STdisplaytab}%
- {\ST@debugmodefalse
- \ST@emit@message{\space\space\space\space\space Debug mode: display final tab^^J}%
- }\relax
- \fi
- \let\STdisplaytab\relax% on neutralise au cas où l'arg optionnel contient cette commande sans contenir \STdebug
+ \let\ST@savecell\STsavecell
+ \let\STsavecell\@gobbletwo
+ \let\STdisplaytab\relax
+ \ST@optcode% exécute l'argument optionnel en ne tenant compte que de \STdebug
+ \let\STdebug\@gobble
+ \def\STdisplaytab{%
+ \ST@debugmodefalse
+ \ST@emit@message{\space\space\space\space\space Debug mode: display final tab^^J}%
+ \let\STdisplaytab\relax}%
+ \ST@optcode% exécute l'argument optionnel en ne tenant compte que de \STdisplaytab s'il y figure
\unless\ifST@debugmode% si on doit afficher le tableau, on fait le boulot
\ST@emit@message{* computing formulas:^^J}%
\ST@eval@tab
- \ST@optcode% exécute l'argument optionnel
+ \let\STsavecell\ST@savecell
+ \ST@optcode% exécute l'argument optionnel en ne tenant compte que de \STsavecell
\expandafter\def\expandafter\ST@tab\expandafter{\expandafter\begin\ST@tab@preamble}%
\ST@emit@message{* building tab:}%
\ST@build@tab
@@ -1771,17 +1830,28 @@ v0.2a 2010/02/02
documentation française.
2 Implementation beta et donc non visible des macros fonctions gcd, lcm
Ces macro-fonctions ne sont pas encore documentées.
-
+-------------------------------------------------------------------------------
+v0.3 2010/03/28
+ 1 La macro \STautoround{x} admet une version étoilée pour laquelle les
+ nombres sont arrondis et formatés pour avoir x chiffres après la
+ virgules en rajoutant des 0 inutiles si besoin
+ 2 La valeur sauvegardée par \STsavecell tient désormais compte du
+ séparateur décimal
+ 3 Macro fonctions "gcd" (PGCD), "lcm" (PPCM) et "scitodec" pour convertir
+ une écriture scientifique en une écriture décimale
+ 4 Dans le champ textuel d'une cellule, on peut désormais afficher le
+ champ numérique d'une cellule avec <<ref>>
+ 5 Amélioration de l'algorithme pour \STcopy : enleve une formule de
+ \ST@copylist lorsqu'on a dépassé la dernière ligne de la plage où elle
+ doit être copiée
+ 6 Correction d'un bug lorsque la macro-fonction admettant un argument
+ textuel a un argument faisant référence à une autre cellule : enlever
+ ":=" si besoin
+ 7 Correction d'un bug dans xstring qui changeait les catcodes des tokens
+ de \@xs@afterinteger lorsqu'on appelle \IfInteger
+ 8 Correction d'un bug dans \ST@build@tab@i pour prendre en compte les
+ cellules de code 0 dans lesquelles ":=" doit être supprimé
###############################################################################
# TODO list #
###############################################################################
- 1 Augmenter le nombre de macro-fonctions
- - conversion : deg-rad-gra et système métrique <-> anglo saxon
- - autres...
- 2 Améliorer l'algorithme pour \STcopy : enlever une formule de
- \ST@copylist lorsqu'on a dépassé la dernière ligne de la plage où elle
- doit être copiée
- 3 Améliorer les tableaux de débogage
- 4 Dans un champ textuel, créer une nouvelle fonctionnalité pour afficher
- le résultat du champ numérique d'une autre cellule, sans avoir à le
- sauvegarder avec \STsave pour l'afficher ensuite. \ No newline at end of file
+ 1 Améliorer les tableaux de débogage. \ No newline at end of file