summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/spreadtab
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2010-06-08 00:47:54 +0000
committerKarl Berry <karl@freefriends.org>2010-06-08 00:47:54 +0000
commit382d08439593ce35f62e6f2d132c13575a690e5b (patch)
treecde1dc32098562e09c956fee34dc4bc1a3337a21 /Master/texmf-dist/tex/latex/spreadtab
parentfe44ae97f5ad74bfe41b87807fb078d7d46cc884 (diff)
spreadtab 0.3b (6jun10)
git-svn-id: svn://tug.org/texlive/trunk@18807 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/spreadtab')
-rw-r--r--Master/texmf-dist/tex/latex/spreadtab/spreadtab.sty94
1 files changed, 61 insertions, 33 deletions
diff --git a/Master/texmf-dist/tex/latex/spreadtab/spreadtab.sty b/Master/texmf-dist/tex/latex/spreadtab/spreadtab.sty
index 3b82d43ee65..049a2910181 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.3a |
+% | spreadtab v0.3b |
% | |
-% | May 15, 2010 |
+% | June 6, 2010 |
% | |
% |___________________________________________________________________________|
%
@@ -37,10 +37,10 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%% Définitions préalables %%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\newcommand\ST@ver {0.3a}
-\newcommand\ST@date {2010/05/15}
-\newcommand\ST@fr@date {15 mai 2010}
-\newcommand\ST@eng@date{May $15^\text{th}$ 2010}
+\newcommand\ST@ver {0.3b}
+\newcommand\ST@date {2010/06/06}
+\newcommand\ST@fr@date {6 juin 2010}
+\newcommand\ST@eng@date{June $6^\text{th}$ 2010}
\ProvidesPackage{spreadtab}[\ST@date\space v\ST@ver\space Spreadsheet features for table environments]
\NeedsTeXFormat{LaTeX2e}
@@ -345,7 +345,7 @@
\let\ST@next@readrows\relax
\edef\ST@total@rownumber{\number\ST@rowcount}}%
\ST@Ifinstr\ST@current@row{\@empty\SThiderow}% il est demandé de masquer la colonne ?
- {\edef\ST@row@skiplist{\number\ST@rowcount,\ST@row@skiplist}% on ajoute le numéro de ligne à masquer à la skiplist
+ {\edef\ST@row@skiplist{(\number\ST@rowcount)\ST@row@skiplist}% on ajoute le numéro de ligne à masquer à la skiplist
\StrDel\ST@current@row{\@empty\SThiderow}[\ST@current@row]%
}%
\relax
@@ -365,9 +365,9 @@
\let\ST@next@readcells\relax
\ifnum\ST@colcount>\ST@total@colnumber\edef\ST@total@colnumber{\number\ST@colcount}\fi}%
\ST@Ifinstr\ST@current@cell{\@empty\SThidecol}% on doit masquer cette colonnes ?
- {\ST@Ifinstr{\ST@col@skiplist,}{\number\ST@colcount,}% ça a déjà été demandé ?
+ {\ST@Ifinstr\ST@col@skiplist{\expandafter(\number\ST@colcount)}% ça a déjà été demandé ?
\relax% on fait rien
- {\edef\ST@col@skiplist{\number\ST@colcount,\ST@col@skiplist}% sinon -> ajout à la skiplist
+ {\edef\ST@col@skiplist{(\number\ST@colcount)\ST@col@skiplist}% sinon -> ajout à la skiplist
\ifnum\ST@colcount>\ST@last@skipcol\edef\ST@last@skipcol{\number\ST@colcount}\fi
}%
\StrDel\ST@current@cell{\@empty\SThidecol}[\ST@current@cell]%
@@ -447,7 +447,7 @@
}%
\noexploregroups
\unless\ifnum\csname code@\number\ST@colcount @\number\ST@rowcount\endcsname=\z@% si le code est <> 0
- \ST@try@calc@cell(\number\ST@colcount,\number\ST@rowcount)% on essaie de calculer la cellule en cours TODO : bug
+ \ST@try@calc@cell(\number\ST@colcount,\number\ST@rowcount)% on essaie de calculer la cellule
\fi
\ST@letname{text@\number\ST@colcount @\number\ST@rowcount}\ST@current@cell
\unless\ifx\@empty\ST@multicol@number% si c'est une cellule qui contient \multicolumn
@@ -861,7 +861,6 @@
{%
\ifnum\csname code@#1@#2\endcsname=\@ne% on ne fait quelque chose que si le code est 1 : cellule non calculée
\def\ST@current@colnumber{#1}\def\ST@current@rownumber{#2}%
- \let\ST@nexteval\ST@next@onstack% à priori, on regarde à la fin s'il reste quelque chose sur la pile d'appels
\expandafter\ST@find@first@func\csname formula@#1@#2\endcsname% cherche une fonction dans la formule
\ifx\@empty\ST@function@namefound% il n'y a pas de fonction
\IfSubStr[2]\ST@dependance@tree{(#1,#2)}%
@@ -873,9 +872,13 @@
\ST@calc@cell(#1,#2)% on calcule la cellule en cours
\else
\ST@Ifinstr{\ST@functions@with@textresult,}{\ST@function@namesaved,}% si la dernière fonction rend du texte
- {\@namedef{code@#1@#2}{0}% on met le code à 0, la cellule devient textuelle
- \expandafter\let\csname text@#1@#2\expandafter\endcsname\csname formula@#1@#2\endcsname% copie de la formule vers la zone texte (avec écrasement de ce qui s'y trouvait)
- \ST@letname{formula@#1@#2}\@empty% et plus rien dansla formule
+ {\ifx\ST@stackcall\@empty% et si on est dans la cellule source
+ \@namedef{code@#1@#2}{0}% on met le code à 0, la cellule devient textuelle
+ \expandafter\let\csname text@#1@#2\expandafter\endcsname\csname formula@#1@#2\endcsname% copie de la formule vers la zone texte (avec écrasement de ce qui s'y trouvait)
+ \ST@letname{formula@#1@#2}\@empty% et plus rien dansla formule
+ \else
+ \ST@calc@cell(#1,#2)% sinon, on se trouve dans une cellule appelée par une macrofonction et donc, on la calcule
+ \fi
}%
{\ST@calc@cell(#1,#2)}% c'est une fonction qui donne un arg numérique : on calcule la cellule en cours
\fi
@@ -897,7 +900,7 @@
\relax
% on remplace toutes les références par la valeur distante
\expandafter\ST@expsubst\csname formula@#1@#2\endcsname\ST@ref@found\ST@distant@formula
- \def\ST@nexteval{\ST@eval@cell@i(#1,#2)}% puis, on évalue à nouveau cette cellule
+ \edef\ST@stackcall{(#1,#2)\ST@stackcall}% puis, on évalue à nouveau cette cellule
\else% code distant n'est pas {0,1,2} donc est -1, pas bon du tout !
\edef\ST@temp@callcell{#1,#2}% coordonnées de la cellule appelante
\ST@subst\ST@coord @,% coordonnées appelées
@@ -923,11 +926,11 @@
\ST@Ifinstr{\ST@functions@no@calc@arg,}{\ST@function@namefound,}% doit-on calculer l'argument de cette fonction ?
\relax
{\FPeval\ST@function@argfound\ST@function@argfound\FPclip\ST@function@argfound\ST@function@argfound}%
- \csname ST@func@\ST@function@namefound\endcsname\ST@function@argfound\ST@result@func% puis on évalue la fonction
+ \csname ST@func@\ST@function@namefound\endcsname\ST@function@argfound\ST@result@func% puis on évalue la fonctionfound
\ST@Iffirstis\ST@result@func-{\expandafter\def\expandafter\ST@result@func\expandafter{\expandafter(\ST@result@func)}}\relax
\ST@expsubst\ST@current@formula\ST@tobereplaced\ST@result@func% on replace dans l'alias
\ST@letname{formula@#1@#2}\ST@current@formula% on l'assigne dans la formule
- \def\ST@nexteval{\ST@eval@cell@i(#1,#2)}% puis, on évalue à nouveau cette cellule
+ \edef\ST@stackcall{(#1,#2)\ST@stackcall}% puis, on évalue à nouveau cette cellule
\else
\ifnum\csname code@\ST@temp@formula\endcsname=\tw@% si la référence est calculée, on la replace par sa valeur
\expandafter\let\expandafter\ST@current@formula\csname formula@\ST@temp@formula\endcsname% alias pour la formule distante
@@ -938,7 +941,7 @@
\let\ST@replaced\ST@tobereplaced
\ST@expsubst\ST@replaced\ST@ref@found\ST@current@formula
\expandafter\ST@expsubst\csname formula@#1@#2\endcsname\ST@tobereplaced\ST@replaced
- \def\ST@nexteval{\ST@eval@cell@i(#1,#2)}% puis, on évalue à nouveau cette cellule
+ \edef\ST@stackcall{(#1,#2)\ST@stackcall}%
\else% la référence n'est pas calculée, donc d'abord il faut
\edef\ST@stackcall{(\ST@distant@colnumber,\ST@distant@rownumber)(#1,#2)\ST@stackcall}% l'évaluer, et ensuite ré-evaluer la cellule courante
\edef\ST@dependance@tree{\ST@dependance@tree(\ST@distant@colnumber,\ST@distant@rownumber)}% mise à jour de l'arbre des dépendances
@@ -952,7 +955,7 @@
\ST@Iffirstis\ST@result@func-{\expandafter\def\expandafter\ST@result@func\expandafter{\expandafter(\ST@result@func)}}\relax
\ST@expsubst\ST@current@formula\ST@tobereplaced\ST@result@func% on replace dans l'alias
\ST@letname{formula@#1@#2}\ST@current@formula% on l'assigne dans la formule
- \def\ST@nexteval{\ST@eval@cell@i(#1,#2)}% puis, on évalue à nouveau cette cellule
+ \edef\ST@stackcall{(#1,#2)\ST@stackcall}% puis, on évalue à nouveau cette cellule
\fi
\or% le code vaut 3, c'est un fonction dont l'argument est textuel
\let\ST@function@argfound@edefed\ST@function@argfound
@@ -964,7 +967,7 @@
\csname ST@func@\ST@function@namefound\endcsname\ST@function@argfound@edefed\ST@result@func% puis on évalue la fonction
\ST@expsubst\ST@current@formula\ST@tobereplaced\ST@result@func% on replace dans l'alias
\ST@letname{formula@#1@#2}\ST@current@formula% on l'assigne dans la formule
- \def\ST@nexteval{\ST@eval@cell@i(#1,#2)}% puis, on évalue à nouveau cette cellule
+ \edef\ST@stackcall{(#1,#2)\ST@stackcall}% puis, on évalue à nouveau cette cellule
\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
@@ -974,14 +977,14 @@
\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
\expandafter\ST@expsubst\csname formula@#1@#2\endcsname\ST@tobereplaced\ST@result@func
- \def\ST@nexteval{\ST@eval@cell@i(#1,#2)}% puis, on évalue à nouveau cette cellule
+ \edef\ST@stackcall{(#1,#2)\ST@stackcall}% puis, on évalue à nouveau cette cellule
\else
\@latex@error{\ST@errname Macro function \ST@function@namefound\space requires a reference to a text cell!}\ST@seedoc@i
\fi
\fi
\fi
\fi
- \expandafter\ST@nexteval
+ \expandafter\ST@next@onstack
\fi
}
@@ -989,18 +992,27 @@
% Si oui, on enlève le 1er appel de la pile lifo et on l'exécute
\newcommand\ST@next@onstack{%
\unless\ifx\ST@stackcall\@empty
- \ST@split\ST@stackcall)\ST@temp@a\ST@stackcall\ST@add@tomacro\ST@temp@a)%
+ \ST@split\ST@stackcall)\ST@temp@a\ST@stackcall
+ \ST@add@tomacro\ST@temp@a)%
+ \ST@sanitize@stack
\expandafter\expandafter\expandafter\ST@eval@cell@i\expandafter\ST@temp@a
\fi
}
+\newcommand\ST@sanitize@stack{% enlève de \ST@stackcall toutes les occurrences de \ST@temp@a
+ \ST@Ifinstr\ST@stackcall\ST@temp@a
+ {\expandafter\ST@subst\expandafter\ST@stackcall\expandafter{\ST@temp@a}{}%
+ \ST@sanitize@stack}%
+ \relax
+}
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 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,%
+ id,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
@@ -1013,7 +1025,9 @@
\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}
+\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}
@@ -1112,7 +1126,7 @@
\edef\ST@openbrace@catcode{\number\catcode`\(}\edef\ST@closebrace@catcode{\number\catcode`\)}%
\catcode`\(1 \catcode`\)2
\everyeof{\relax}\endlinechar\m@ne
- \afterassignment\ST@gobble@remain% TODO bug
+ \afterassignment\ST@gobble@remain
\expandafter\def\expandafter#2\scantokens\expandafter{#1}%
\catcode`\(\ST@openbrace@catcode\catcode`\)\ST@closebrace@catcode
\def\ST@assignarg##1\relax{\def#2{##1}}%
@@ -1125,11 +1139,11 @@
\ST@for{#1}% on parcourt la <plage de cellules>
{\ifcase\csname code@\number\ST@colcount@i @\number\ST@rowcount@i\endcsname% on ne prend en compte que les code 1 et 2
\or% code=1
- \edef\ST@temp@stack{(\number\ST@colcount@i,\number\ST@rowcount@i)\ST@temp@stack}%
- \edef\ST@dependance@tree{\ST@dependance@tree(\number\ST@colcount@i,\number\ST@rowcount@i)}% mise à jour de l'arbre des dépendances
+ \edef\ST@temp@stack{\ST@temp@stack(\number\ST@colcount@i,\number\ST@rowcount@i)}%
\or% code=2
\ifx\ST@temp@stack\@empty% on ne prend la peine d'additionner que si toutes les cellules sont calculées
\expandafter\FPadd\expandafter#2\expandafter#2\csname formula@\number\ST@colcount@i @\number\ST@rowcount@i\endcsname
+ \edef\ST@dependance@tree{\ST@dependance@tree(\number\ST@colcount@i,\number\ST@rowcount@i)}% mise à jour de l'arbre des dépendances
\fi
\fi
}%
@@ -1178,7 +1192,7 @@
{\def\ST@inter@result{0}% résultat partiel nul pour l'instant
\ifcase\csname code@\number\ST@colcount@i @\number\ST@rowcount@i\endcsname
\or% code =1
- \edef\ST@temp@stack{(\number\ST@colcount@i,\number\ST@rowcount@i)\ST@temp@stack}%
+ \edef\ST@temp@stack{\ST@temp@stack(\number\ST@colcount@i,\number\ST@rowcount@i)}%
\edef\ST@dependance@tree{\ST@dependance@tree(\number\ST@colcount@i,\number\ST@rowcount@i)}% mise à jour de l'arbre des dépendances
\or% code=2
\expandafter\let\expandafter\ST@inter@result\csname formula@\number\ST@colcount@i @\number\ST@rowcount@i\endcsname
@@ -1190,7 +1204,7 @@
\def\ST@inter@result{0}% code =0 -> on met le résultat partiel à 0
\or% code =1
\ST@subst\ST@tempcoord @,%
- \edef\ST@temp@stack{(\ST@tempcoord)\ST@temp@stack}%
+ \edef\ST@temp@stack{\ST@temp@stack(\ST@tempcoord)}%
\edef\ST@dependance@tree{\ST@dependance@tree(\ST@tempcoord)}% mise à jour de l'arbre des dépendances
\or% code=2
\expandafter\FPmul\expandafter\ST@inter@result\expandafter\ST@inter@result\csname formula@\ST@tempcoord\endcsname
@@ -1210,6 +1224,8 @@
\fi
}
+\newcommand\ST@func@id[2]{\expandafter\def\expandafter#2\expandafter{#1}}
+
% Calcule la factorielle du nombre #1 et met le résultat dans la sc #2
\newcommand\ST@func@fact[2]{%
\FPifint{#1}%
@@ -1494,7 +1510,7 @@
}
\newcommand\ST@search@lastshowcol@i{%
- \ST@Ifinstr{\ST@col@skiplist,}{\number\ST@colcount,}%
+ \ST@Ifinstr{\ST@col@skiplist}{\expandafter(\number\ST@colcount)}%
{\advance\ST@colcount\m@ne\ST@search@lastshowcol@i}%
{\edef\ST@lastshowcol{\number\ST@colcount}}%
}
@@ -1529,10 +1545,10 @@
\let\ST@nextcell\relax
\else
\let\ST@nextcell\ST@build@tab@i
- \ST@Ifinstr\ST@row@skiplist{\number\ST@rowcount,}% la ligne fait partie de la skiplist ?
+ \ST@Ifinstr\ST@row@skiplist{\expandafter(\number\ST@rowcount)}% la ligne fait partie de la skiplist ?
{\advance\ST@rowcount\@ne}% on passe à la ligne suivante
{%
- \ST@Ifinstr\ST@col@skiplist{\number\ST@colcount,}% la colonne fait partie de la skiplist ?
+ \ST@Ifinstr\ST@col@skiplist{\expandafter(\number\ST@colcount)}% la colonne fait partie de la skiplist ?
\ST@hiddencoltrue
{%
\ST@hiddencolfalse
@@ -1863,6 +1879,18 @@ v0.3a 2010/05/15
1 Correction d'un bug dans \ST@gobble@remain : ce qui reste à manger peut
contenir des tokens de catcode 1 ou 2 ce qui fait que l'utilisation
d'arguments délimités ne fonctionnerait pas dans ces cas.
+-------------------------------------------------------------------------------
+v0.3b 2010/06/06
+ 1 Correction d'un bug concernant les macro-fonctions renvoyant un texte.
+ Lorsque leur argument contenait une référence, celle-ci devenait une
+ cellule texte.
+ 2 Correction d'un bug sur la macro \ST@stackcall : il faut y enlever
+ toutes les occurrences de la cellule en train d'être calculée
+ 3 Modification de l'ordre de calcul des cellules concernées par les macro
+ fonctions sum et somprod
+ 4 Correction d'un bug dans la façon dont sont produites les skiplist
+ \ST@row@skiplist et \STcol@skiplist
+ 5 Implémentation de la macro fonction "id"
###############################################################################
# TODO list #
###############################################################################