From 17036ad38f780e71d150dd4b6272d79dd19e9997 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Mon, 29 Mar 2010 23:33:43 +0000 Subject: spreadtab 0.3 (28mar10) git-svn-id: svn://tug.org/texlive/trunk@17613 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/spreadtab/spreadtab.sty | 232 ++++++++++++++------- 1 file changed, 151 insertions(+), 81 deletions(-) (limited to 'Master/texmf-dist/tex/latex/spreadtab') 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 "<>" 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 <> 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 <> + 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 -- cgit v1.2.3