summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/generic/systeme/systeme.tex
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-01-13 23:30:37 +0000
committerKarl Berry <karl@freefriends.org>2019-01-13 23:30:37 +0000
commit45703352bcad374f3e88099a40425df3ba5c3395 (patch)
treee86c153d4e8f9c2a661a9838ba82ad5553308603 /Master/texmf-dist/tex/generic/systeme/systeme.tex
parent112eb1c71994a8eb4b4eabab5fe993f03cb9c248 (diff)
systeme (13jan19)
git-svn-id: svn://tug.org/texlive/trunk@49690 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/generic/systeme/systeme.tex')
-rw-r--r--Master/texmf-dist/tex/generic/systeme/systeme.tex1035
1 files changed, 518 insertions, 517 deletions
diff --git a/Master/texmf-dist/tex/generic/systeme/systeme.tex b/Master/texmf-dist/tex/generic/systeme/systeme.tex
index 1bceaa21725..9bda0ef0460 100644
--- a/Master/texmf-dist/tex/generic/systeme/systeme.tex
+++ b/Master/texmf-dist/tex/generic/systeme/systeme.tex
@@ -1,657 +1,651 @@
% !TeX encoding = ISO-8859-1
% Ce fichier contient le code de l'extension "systeme"
-\expandafter\edef\csname SYS@savedatcatcode\endcsname{\number\catcode`\@}
-\catcode`\@11
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
\def\SYSname {systeme} %
-\def\SYSver {0.31} %
+\def\SYSver {0.32} %
% %
-\def\SYSdate {2018/01/01} %
+\def\SYSdate {2019/01/13} %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%
-% --------------------------------------------------------------------
-% Author : Christian Tellechea
-% Status : Maintained
-% Email : unbonpetit@netc.fr
-% Package URL: https://www.ctan.org/pkg/systeme
-% Bug tracker: https://framagit.org/unbonpetit/systeme/issues
-% Repository : https://framagit.org/unbonpetit/systeme/tree/master
-% Copyright : Christian Tellechea 2017
-% Licence : Released under the LaTeX Project Public License v1.3c
-% or later, see http://www.latex-project.org/lppl.txt
-% Files : 1) systeme.tex
-% 2) systeme.sty
-% 3) systeme-fr.tex
-% 4) systeme-fr.pdf
-% 5) README
-% --------------------------------------------------------------------
-% --------------------------------------------------------------------
-
-\def\SYS@newmacro#1{%
- \ifdefined#1%
- \errmessage{Package systeme Error: la macro \string#1\space existe deja. Contacter l'auteur svp.}%
- \fi
- \def#1%
-}
-\SYS@newmacro\SYSlongdate {1\ier{} janvier 218}
+% %
+% Author : Christian Tellechea %
+% Status : Maintained %
+% Email : unbonpetit@netc.fr %
+% Package URL: https://www.ctan.org/pkg/systeme %
+% Bug tracker: https://framagit.org/unbonpetit/systeme/issues %
+% Repository : https://framagit.org/unbonpetit/systeme/tree/master %
+% Copyright : Christian Tellechea 2011-2019 %
+% Licence : Released under the LaTeX Project Public License v1.3c %
+% or later, see http://www.latex-project.org/lppl.txt %
+% Files : 1) systeme.tex %
+% 2) systeme.sty %
+% 3) systeme-fr.tex %
+% 4) systeme-fr.pdf %
+% 5) README %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\unless\ifdefined\SYSstyfile
+ \immediate\write-1 {Package: \SYSname\space\SYSdate\space\space v\SYSver\space\space Saisie naturelle de systemes d'equations}%
+\fi
-\newtoks\SYS@systemecode
-\newtoks\SYS@systempreamble
+\expandafter\edef\csname SYS_restorecatcode\endcsname{\catcode\number`\_=\number\catcode`\_\relax}
+\catcode`\_11
-\newif\ifSYS@firstterm
-\newif\ifSYS@sortvariable
-\newif\ifSYS@star
-\newif\ifSYS@extracol
-\newif\ifSYS@autonum
-\newif\ifSYS@followautonum
-\newif\ifSYS@constterm
+\begingroup
+ \catcode`\_8
+ \gdef\SYSunder{_}
+\endgroup
+
+\unless\ifdefined\xstringversion
+ \def\SYS_nextaction{\input xstring.tex\relax}%
+ \expandafter\SYS_nextaction
+\fi
+
+\newtoks\SYS_systemecode
+\newtoks\SYS_systempreamble
+
+\newif\ifSYS_firstterm
+\newif\ifSYS_sortvariable
+\newif\ifSYS_star
+\newif\ifSYS_extracol
+\newif\ifSYS_autonum
+\newif\ifSYS_followautonum
+\newif\ifSYS_constterm
\newcount\SYSeqnum
-\expandafter\ifx\csname @latexerr\endcsname\relax% on n'utilise pas LaTeX ?
- \ifdefined\xstringversion\else\def\SYS@nextaction{\input xstring.tex}\expandafter\SYS@nextaction\fi
- \immediate\write\m@ne{Package: \SYSname\space\SYSdate\space\space v\SYSver\space\space Saisie naturelle de systemes d'equations}%
- \newskip\normalbaselineskip \normalbaselineskip=12pt
- \long\def\@firstoftwo#1#2{#1}
- \long\def\@secondoftwo#1#2{#2}
- \long\def\@firstofone#1{#1}
- \long\def\@gobble#1{}
- \long\def\@ifnextchar#1#2#3{%
- \let\reserved@d=#1%
- \def\reserved@a{#2}%
- \def\reserved@b{#3}%
- \futurelet\@let@arg\@ifnch}
- \def\@ifnch{%
- \ifx\@let@arg\@sptoken
- \let\reserved@c\@xifnch
- \else
- \ifx\@let@arg\reserved@d
- \let\reserved@c\reserved@a
- \else
- \let\reserved@c\reserved@b
- \fi
- \fi
- \reserved@c}
- \def\:{\let\@sptoken= } \:
- \def\:{\@xifnch} \expandafter\def\: {\futurelet\@let@arg\@ifnch}
- \long\def\@testopt#1#2{\@ifnextchar[{#1}{#1[{#2}]}}
- \def\@ifstar#1{\@ifnextchar *{\@firstoftwo{#1}}}
- \def\@empty{}
- \def\space{ }
+\long\def\SYS_execarg#1{#1}
+\long\def\SYS_gobtwoargs#1#2{}
+\def\SYS_addtotok#1#2{#1\expandafter{\the#1#2}}
+\def\SYS_expaddtotok#1#2{\xs_exparg{\SYS_addtotok#1}{#2}}
+\def\SYS_addtotab{\SYS_addtotok\SYS_systemecode}
+\def\SYS_cslet#1{\expandafter\let\csname#1\endcsname}
+\def\SYS_letcs#1#2{\expandafter\let\expandafter#1\csname#2\endcsname}
+\def\SYS_firstinlist#1,#2\_nil{#1}
+\def\SYS_removefirstinlist#1,{}
+\def\SYS_ifinstr#1#2{%
+ \def\SYS_ifinstr_i##1#2##2\_nil{\xs_ifempty{##2}\xs_execsecond\xs_execfirst}%
+ \SYS_ifinstr_i#1\__nil#2\_nil
+}
+
+\ifdefined\usepackage\else% on n'utilise pas LaTeX ?
+ \newskip\normalbaselineskip
+ \normalbaselineskip=12pt
\fi
-% d\'efinit ce qu'est le s\'eparateur des \'equations par d\'efaut
-\SYS@newmacro\syseqsep{\def\SYS@defaulteqsep}
+% définit ce qu'est le séparateur des équations par défaut
+\def\syseqsep{\def\SYS_defaulteqsep}
\syseqsep{,}
-% d\'efinit le coefficient pour l'espacement interligne
-\SYS@newmacro\syslineskipcoeff{\def\SYS@lineskipcoeff}
+% définit le coefficient pour l'espacement interligne
+\def\syslineskipcoeff{\def\SYS_lineskipcoeff}
\syslineskipcoeff{1.25}
-% d\'efinit le signe qui marquera une colonne suppl\'ementaire \`a droite du tableau
-\SYS@newmacro\sysextracolsign{\def\SYS@extracolsign}
-\expandafter\sysextracolsign\expandafter{\string @}% on d\'efinit l'arobas avec le bon catcode.
+% définit le signe qui marquera une colonne supplémentaire à droite du tableau
+\def\sysextracolsign{\def\SYS_extracolsign}
+\xs_exparg\sysextracolsign{\string @}% on définit l'arobas avec le bon catcode.
-% d\'efinit ce qui sera ins\'er\'e au d\'ebut et \`a la fin de la colonne suppl\'ementaire
-\SYS@newmacro\syscodeextracol#1#2{\def\SYS@extracolstart{#1}\def\SYS@extracolend{#2}}
+% définit ce qui sera inséré au début et à la fin de la colonne supplémentaire
+\def\syscodeextracol#1#2{\def\SYS_extracolstart{#1}\def\SYS_extracolend{#2}}
\syscodeextracol{\kern1.5em$}{$}
-\SYS@newmacro\sysreseteqnum{\global\SYSeqnum\z@}
-
-\SYS@newmacro\SYS@cslet#1{\expandafter\let\csname#1\endcsname}
+\def\sysreseteqnum{\global\SYSeqnum0 }
-% d\'efinit l'autonum\'erotation
-\SYS@newmacro\sysautonum{\@ifstar{\SYS@followautonumtrue\SYS@autonum}{\SYS@followautonumfalse\SYS@autonum}}
+% définit l'autonumérotation
+\def\sysautonum{%
+ \xs_ifstar
+ {\SYS_followautonumtrue\SYS_autonum}
+ {\SYS_followautonumfalse\SYS_autonum}%
+}
-\SYS@newmacro\SYS@autonum#1{%
- \ifx\@empty#1\@empty
- \SYS@extracolfalse
- \SYS@autonumfalse
- \else
- \SYS@extracoltrue
- \SYS@autonumtrue
- \def\SYS@autonumarg{#1}%
- \fi
+\def\SYS_autonum#1{%
+ \xs_ifempty{#1}
+ {\SYS_extracolfalse
+ \SYS_autonumfalse
+ }
+ {\SYS_extracoltrue
+ \SYS_autonumtrue
+ \def\SYS_autonumarg{#1}%
+ }%
}
-% dimension qui sera ajout\'ee \`a la hauteur et \`a la profondeur du strutup ou strutdown
-% ins\'er\'e \`a la premi\`ere et la derni\`ere \'equation
-\SYS@newmacro\SYS@extrastrutdim{1.5pt}
+% dimension qui sera ajoutée à la hauteur et à la profondeur du strutup ou strutdown
+% inséré à la première et la dernière équation
+\def\SYS_extrastrutdim{1.5pt}
-% liste des signes devant \^etre compris comme signe d'\'egalit\'e s\'eparant les 2 membres de l'\'equation
-\SYS@newmacro\SYS@equalsignlist{<=,>=,=,<,>,\leq,\geq,\leqslant,\geqslant}
+% liste des signes devant être compris comme signe d'égalité séparant les 2 membres de l'équation
+\def\SYS_equalsignlist{<=,>=,=,<,>,\leq,\geq,\leqslant,\geqslant}
-\SYS@newmacro\sysaddeqsign#1{%
+\def\sysaddeqsign#1{%
\saveexpandmode\expandarg
- \IfSubStr{\expandafter,\SYS@equalsignlist,}{,#1,}
- \relax
- {\expandafter\def\expandafter\SYS@equalsignlist\expandafter{\SYS@equalsignlist,#1}}%
+ \IfSubStr{\expandafter,\SYS_equalsignlist,}{,#1,}
+ {}
+ {\xs_exparg{\def\SYS_equalsignlist}{\SYS_equalsignlist,#1}}%
\restoreexpandmode
}
-% enl\`eve l'item #2 de la sc #1 qui contient une liste
-\SYS@newmacro\SYS@removeiteminlist#1#2{%
+% enlève l'item #2 de la sc #1 qui contient une liste
+\def\SYS_removeiteminlist#1#2{%
\saveexpandmode\expandarg
\IfSubStr{\expandafter,#1,}{,#2,}
- {\StrSubstitute{\expandafter\@nil\expandafter,#1,\@nil}{,#2,},[#1]%
- \StrDel#1{\noexpand\@nil,}[#1]%
- \StrDel#1{,\@nil}[#1]%
+ {\StrSubstitute{\expandafter\_nil\expandafter,#1,\_nil}{,#2,},[#1]%
+ \StrDel#1{\noexpand\_nil,}[#1]%
+ \StrDel#1{,\_nil}[#1]%
}%
- \relax
+ {}%
\restoreexpandmode
}
-\SYS@newmacro\sysremoveeqsign#1{%
- \SYS@removeiteminlist\SYS@equalsignlist{#1}%
- \SYS@removeiteminlist\SYS@equivsignlist{#1}%
+\def\sysremoveeqsign#1{%
+ \SYS_removeiteminlist\SYS_equalsignlist{#1}%
+ \SYS_removeiteminlist\SYS_equivsignlist{#1}%
}
-% d\'efinit le signe d'\'egalit\'e #1 comme devant \^etre remplac\'e par #2 lors de l'affichage
-\SYS@newmacro\sysequivsign#1#2{%
- \IfSubStr\SYS@equivsignlist{\noexpand#1,}\relax{\expandafter\def\expandafter\SYS@equivsignlist\expandafter{\SYS@equivsignlist#1,}}%
- \expandafter\def\csname SYS@equivsign@\string#1\endcsname{#2}%
+% définit le signe d'égalité #1 comme devant être remplacé par #2 lors de l'affichage
+\def\sysequivsign#1#2{%
+ \IfSubStr\SYS_equivsignlist{\noexpand#1,}
+ {}
+ {\xs_exparg{\def\SYS_equivsignlist}{\SYS_equivsignlist#1,}}%
+ \expandafter\def\csname SYS_equivsign_\string#1\endcsname{#2}%
}
-\SYS@newmacro\SYS@equivsignlist{}
+\def\SYS_equivsignlist{}
\sysequivsign{<=}\leq
\sysequivsign{>=}\geq
-\SYS@newmacro\SYS@firstiteminlist#1,#2\@nil{#1}
-
-\SYS@newmacro\SYS@removefirstiteminlist#1,{}
-
-% #1 est l'\'equation courante. La macro la s\'epare en 2 membres -> \SYS@leftmember et \SYS@rightmember
-% le signe de s\'eparation entre les 2 membres se trouve dans \SYS@currenteqsign
-\SYS@newmacro\SYS@splitinmembers#1{%
- \def\SYS@leftmember{#1}\let\SYS@currenteqsign\@empty\let\SYS@rightmember\@empty
- \expandafter\SYS@splitinmembers@i\expandafter{\SYS@equalsignlist,}% parcourt \SYS@equalsignlist pour s\'eparer en 2 membres
- \IfSubStr{\expandafter,\SYS@equivsignlist}{\expandafter,\SYS@currenteqsign,}% si le signe est dans la liste des substitutions
- {\expandafter\let\expandafter\SYS@currenteqsign\csname SYS@equivsign@\detokenize\expandafter{\SYS@currenteqsign}\endcsname}% le remplacer
- \relax
+% #1 est l'équation courante. La macro la sépare en 2 membres -> \SYS_leftmember et \SYS_rightmember
+% le signe de séparation entre les 2 membres se trouve dans \SYS_currenteqsign
+\def\SYS_splitinmembers#1{%
+ \def\SYS_leftmember{#1}%
+ \let\SYS_currenteqsign\empty
+ \let\SYS_rightmember\empty
+ \xs_exparg\SYS_splitinmembers_i{\SYS_equalsignlist,}% parcourt \SYS_equalsignlist pour séparer en 2 membres
+ \IfSubStr{\expandafter,\SYS_equivsignlist}{\expandafter,\SYS_currenteqsign,}% si le signe est dans la liste des substitutions
+ {\SYS_letcs\SYS_currenteqsign{SYS_equivsign_\detokenize\expandafter{\SYS_currenteqsign}}}% le remplacer
+ {}%
}
-% #1 est la liste des signes d'\'egalit\'e
-\SYS@newmacro\SYS@splitinmembers@i#1{%
- \ifx\@empty#1\@empty
- \else
- \IfSubStr\SYS@leftmember{\SYS@firstiteminlist#1\@nil}% si l'\'equation contient un des signes
- {\expandafter\def\expandafter\SYS@currenteqsign\expandafter{\SYS@firstiteminlist#1\@nil}% sauvagarde le signe
- \StrBehind\SYS@leftmember\SYS@currenteqsign[\SYS@rightmember]% proc\`ede \`a la s\'eparation
- \StrBefore\SYS@leftmember\SYS@currenteqsign[\SYS@leftmember]% en deux membres
- \let\SYS@nextaction\relax
+% #1 est la liste des signes d'égalité
+\def\SYS_splitinmembers_i#1{%
+ \xs_ifempty{#1}
+ {}
+ {\IfSubStr\SYS_leftmember{\SYS_firstinlist#1\_nil}% si l'équation contient un des signes
+ {\xs_exparg{\def\SYS_currenteqsign}{\SYS_firstinlist#1\_nil}% sauvagarde le signe
+ \StrBehind\SYS_leftmember\SYS_currenteqsign[\SYS_rightmember]% procède à la séparation
+ \StrBefore\SYS_leftmember\SYS_currenteqsign[\SYS_leftmember]% en deux membres
}%
- {\def\SYS@nextaction{\expandafter\SYS@splitinmembers@i\expandafter{\SYS@removefirstiteminlist#1}}}% sinon, recommencer en enlevant le 1er signe
- \expandafter\SYS@nextaction
- \fi
-}
-
-\SYS@newmacro\SYS@ifcontains#1#2{%
- \def\SYS@ifcontains@i##1#2##2\@nil{\ifx\@empty##2\@empty\expandafter\@secondoftwo\else\expandafter\@firstoftwo\fi}%
- \SYS@ifcontains@i#1\@@nil#2\@nil
+ {\xs_exparg\SYS_splitinmembers_i{\SYS_removefirstinlist#1}% sinon, recommencer en enlevant le 1er signe
+ }%
+ }%
}
-% analyse une \'equation et la d\'ecoupe en termes et signes
-\SYS@newmacro\SYS@spliteqinterms#1{%
- \IfSubStr{\noexpand#1}\SYS@extracolsign% y a t-il un signe de colonne suppl\'ementaire ?
- {\StrBefore{\noexpand#1}\SYS@extracolsign[\SYS@leftmember]%
- \StrBehind{\noexpand#1}\SYS@extracolsign[\SYS@rightmember]%
- \SYS@cslet{SYS@extracol@\SYS@eqnumber}\SYS@rightmember
- \SYS@extracoltrue
+% analyse une équation et la découpe en termes et signes
+\def\SYS_spliteqinterms#1{%
+ \IfSubStr{\noexpand#1}\SYS_extracolsign% y a t-il un signe de colonne supplémentaire ?
+ {\StrBefore{\noexpand#1}\SYS_extracolsign[\SYS_leftmember]%
+ \StrBehind{\noexpand#1}\SYS_extracolsign[\SYS_rightmember]%
+ \SYS_cslet{SYS_extracol_\SYS_eqnumber}\SYS_rightmember
+ \SYS_extracoltrue
}%
- {\def\SYS@leftmember{#1}}%
- \expandafter\SYS@splitinmembers\expandafter{\SYS@leftmember}% trouver les membres de gauche et droite et le signe qui les s\'epare
- \unless\ifx\SYS@currenteqsign\@empty
- \SYS@cslet{SYS@eqsign@\SYS@eqnumber}\SYS@currenteqsign% stocker ce signe s'il existe
- \fi
- \IfBeginWith\SYS@leftmember\space{\StrGobbleLeft\SYS@leftmember\@ne[\SYS@leftmember]}\relax% pas d'espace pour commencer le membre de gauche
- \IfBeginWith\SYS@leftmember+% amputer le membre de gauche du premier signe et le stocker temporairement s'il existe et sinon...
- {\StrSplit\SYS@leftmember\@ne\SYS@currentsign\SYS@leftmember}%
- {\IfBeginWith\SYS@leftmember-%
- {\StrSplit\SYS@leftmember\@ne\SYS@currentsign\SYS@leftmember}%
- {\def\SYS@currentsign{+}}}% ce signe est "+"
- \SYS@spliteqinterms@i\@ne
- \SYS@cslet{SYS@right@\SYS@eqnumber}\SYS@rightmember
+ {\def\SYS_leftmember{#1}%
+ }%
+ \xs_exparg\SYS_splitinmembers{\SYS_leftmember}% trouver les membres de gauche et droite et le signe qui les sépare
+ \xs_ifx{\SYS_currenteqsign\empty}
+ {}%
+ {\SYS_cslet{SYS_eqsign_\SYS_eqnumber}\SYS_currenteqsign}% stocker ce signe s'il existe
+ \IfBeginWith\SYS_leftmember\space
+ {\StrGobbleLeft\SYS_leftmember1[\SYS_leftmember]}
+ {}% pas d'espace pour commencer le membre de gauche
+ \IfBeginWith\SYS_leftmember+% amputer le membre de gauche du premier signe et le stocker temporairement s'il existe et sinon...
+ {\StrSplit\SYS_leftmember1\SYS_currentsign\SYS_leftmember
+ }%
+ {\IfBeginWith\SYS_leftmember-%
+ {\StrSplit\SYS_leftmember1\SYS_currentsign\SYS_leftmember}%
+ {\def\SYS_currentsign{+}}% ce signe est "+"
+ }%
+ \SYS_spliteqinterms_i1%
+ \SYS_cslet{SYS_right_\SYS_eqnumber}\SYS_rightmember
}
-\SYS@newmacro\SYS@spliteqinterms@i#1{%
- \StrPosition\SYS@leftmember+[\SYS@posplus]%
- \StrPosition\SYS@leftmember-[\SYS@posminus]%
- \ifnum\numexpr\SYS@posplus+\SYS@posminus=\z@ % il n'y a ni "+" ni "-"
- \let\SYS@currentterm\SYS@leftmember% prendre tout ce qui reste
- \SYS@assignterm% et assigner ce dernier terme avec le dernier signe trouv\'e
- \else
- \edef\SYS@nextsign{\ifnum\SYS@posplus=\z@-\else\ifnum\SYS@posminus=\z@+\else\ifnum\SYS@posplus<\SYS@posminus+\else-\fi\fi\fi}% d\'ecider de ce qu'est le prochain signe
- \StrBefore\SYS@leftmember\SYS@nextsign[\SYS@currentterm]% prendre ce qu'il y a avant
- \StrBehind\SYS@leftmember\SYS@nextsign[\SYS@leftmember]% et stocker ce qu'il y a ensuite pour apr\`es
- \SYS@assignterm% assigner ce qu'il y a avant avec le dernier signe trouv\'e
- \let\SYS@currentsign\SYS@nextsign% on continue, le prochain signe devient le signe courant
- \expandafter\SYS@spliteqinterms@i\expandafter{\number\numexpr#1+1\expandafter}%
- \fi
+\def\SYS_spliteqinterms_i#1{%
+ \StrPosition\SYS_leftmember+[\SYS_posplus]%
+ \StrPosition\SYS_leftmember-[\SYS_posminus]%
+ \xs_ifnum{\numexpr\SYS_posplus+\SYS_posminus=0 }% il n'y a ni "+" ni "-"
+ {\let\SYS_currentterm\SYS_leftmember% prendre tout ce qui reste
+ \SYS_assignterm% et assigner ce dernier terme avec le dernier signe trouvé
+ }
+ {\edef\SYS_nextsign{\ifnum\SYS_posplus=0 -\else\ifnum\SYS_posminus=0 +\else\ifnum\SYS_posplus<\SYS_posminus+\else-\fi\fi\fi}% décider de ce qu'est le prochain signe
+ \StrBefore\SYS_leftmember\SYS_nextsign[\SYS_currentterm]% prendre ce qu'il y a avant
+ \StrBehind\SYS_leftmember\SYS_nextsign[\SYS_leftmember]% et stocker ce qu'il y a ensuite pour après
+ \SYS_assignterm% assigner ce qu'il y a avant avec le dernier signe trouvé
+ \let\SYS_currentsign\SYS_nextsign% on continue, le prochain signe devient le signe courant
+ \xs_exparg\SYS_spliteqinterms_i{\number\numexpr#1+1}%
+ }%
}
-\SYS@newmacro\SYS@assignterm{%
- \expandafter\SYS@findletter\expandafter{\SYS@currentterm}% trouver le nom de la variable
- \ifx\SYS@letterfound\@empty
- \SYS@consttermtrue
- \ifcsname SYS@term@const@\SYS@eqnumber\endcsname% si terme constant d\'ej\`a rencontr\'e, l'ajouter \`a celui qui existe
- \SYS@expaddtocs\SYS@currentsign\SYS@currentterm
- \expandafter\SYS@expaddtocs\csname SYS@term@const@\SYS@eqnumber\endcsname{\SYS@currentsign}%
+\def\SYS_assignterm{%
+ \xs_exparg\SYS_findletter{\SYS_currentterm}% trouver le nom de la variable
+ \xs_ifx{\SYS_letterfound\empty}
+ {\SYS_consttermtrue
+ \ifcsname SYS_term_const_\SYS_eqnumber\endcsname% si terme constant déjà rencontré, l'ajouter à celui qui existe
+ \xs_eaddtomacro\SYS_currentsign\SYS_currentterm
+ \expandafter\xs_eaddtomacro\csname SYS_term_const_\SYS_eqnumber\endcsname{\SYS_currentsign}%
\else
- \SYS@cslet{SYS@sign@const@\SYS@eqnumber}\SYS@currentsign% sinon proc\'eder aux assignations
- \SYS@cslet{SYS@term@const@\SYS@eqnumber}\SYS@currentterm
+ \SYS_cslet{SYS_sign_const_\SYS_eqnumber}\SYS_currentsign% sinon procéder aux assignations
+ \SYS_cslet{SYS_term_const_\SYS_eqnumber}\SYS_currentterm
\fi
- \else
- \ifcsname SYS@term@\detokenize\expandafter{\SYS@letterfound}@\SYS@eqnumber\endcsname
- \errmessage{Package systeme Error: l'inconnue "\detokenize\expandafter{\SYS@letterfound}" a deja ete trouvee dans l'equation !}%
+ }
+ {\ifcsname SYS_term_\detokenize\expandafter{\SYS_letterfound}_\SYS_eqnumber\endcsname
+ \errmessage{Package systeme Error: l'inconnue "\detokenize\expandafter{\SYS_letterfound}" a deja ete trouvee dans l'équation !}%
\fi
- \ifSYS@sortvariable
- \SYS@insletter\SYS@letterfound% l'ins\'erer si besoin dans la liste ordonn\'ee des variables
+ \ifSYS_sortvariable
+ \SYS_insletter\SYS_letterfound% l'insérer si besoin dans la liste ordonnée des variables
\fi
-% \show\SYS@letterlist
- \SYS@cslet{SYS@sign@\detokenize\expandafter{\SYS@letterfound}@\SYS@eqnumber}\SYS@currentsign% proc\'eder aux assignations
- \SYS@cslet{SYS@term@\detokenize\expandafter{\SYS@letterfound}@\SYS@eqnumber}\SYS@currentterm
- \fi
+ \SYS_cslet{SYS_sign_\detokenize\expandafter{\SYS_letterfound}_\SYS_eqnumber}\SYS_currentsign% procéder aux assignations
+ \SYS_cslet{SYS_term_\detokenize\expandafter{\SYS_letterfound}_\SYS_eqnumber}\SYS_currentterm
+ }%
}
-% cherche la premi\`ere lettre minuscule dans #1
-\SYS@newmacro\SYS@findletter#1{%
+% cherche la première lettre minuscule dans #1
+\def\SYS_findletter#1{%
\saveexploremode\exploregroups
- \StrRemoveBraces{#1}[\SYS@currentfindletter]%
- \let\SYS@letterfound\@empty
- \SYS@findletter@i
+ \StrRemoveBraces{#1}[\SYS_currentfindletter]%
+ \let\SYS_letterfound\empty
+ \SYS_findletter_i
\restoreexploremode
}
-\SYS@newmacro\SYS@findletter@i{%
- \StrSplit\SYS@currentfindletter\@ne\SYS@currentchar\SYS@currentfindletter
- \ifSYS@sortvariable% si le tri auto est activ\'e
- \ifcat\relax\expandafter\noexpand\SYS@currentchar
- \let\SYS@nextaction\@secondoftwo% faux si c'est une sc
+\def\SYS_findletter_i{%
+ \StrSplit\SYS_currentfindletter1\SYS_currentchar\SYS_currentfindletter
+ \ifSYS_sortvariable% si le tri auto est activé
+ \ifcat\relax\expandafter\noexpand\SYS_currentchar
+ \let\SYS_nextaction\xs_execsecond% faux si c'est une sc
\else
- \ifnum\expandafter`\SYS@currentchar<`a
- \let\SYS@nextaction\@secondoftwo% pas une lettre minuscule
- \else
- \ifnum\expandafter`\SYS@currentchar>`z
- \let\SYS@nextaction\@secondoftwo% pas une lettre minuscule
- \else
- \SYS@testsubscript% tester s'il y a un indice
- \let\SYS@nextaction\@firstoftwo
- \fi
- \fi
+ \xs_ifnum{\expandafter`\SYS_currentchar<`a }
+ {\let\SYS_nextaction\xs_execsecond% pas une lettre minuscule
+ }
+ {\xs_ifnum{\expandafter`\SYS_currentchar>`z }
+ {\let\SYS_nextaction\xs_execsecond% pas une lettre minuscule
+ }
+ {\SYS_testsubscript% tester s'il y a un indice
+ \let\SYS_nextaction\xs_execfirst
+ }%
+ }%
\fi
\else
\noexploregroups
- \IfSubStr\SYS@letterlist\SYS@currentchar% ce qui est trouv\'e est dans la liste ?
- {\SYS@testsubscript% tester s'il y a un indice apr\`es le caract\`ere courant
- \let\SYS@nextaction\@firstoftwo
+ \IfSubStr\SYS_letterlist\SYS_currentchar% ce qui est trouvé est dans la liste ?
+ {\SYS_testsubscript% tester s'il y a un indice après le caractère courant
+ \let\SYS_nextaction\xs_execfirst
+ }%
+ {\let\SYS_nextaction\xs_execsecond
}%
- {\let\SYS@nextaction\@secondoftwo}%
\exploregroups
\fi
- \SYS@nextaction
- {\let\SYS@letterfound\SYS@currentchar
- \IfSubStr\SYS@letterfound_\relax{\SYS@addtocs\SYS@letterfound{_{-1}}}%
+ \SYS_nextaction
+ {\let\SYS_letterfound\SYS_currentchar
+ \IfSubStr\SYS_letterfound\SYSunder\relax{\xs_eaddtomacro\SYS_letterfound{\SYSunder{-1}}}%
+ }%
+ {\xs_ifx{\SYS_currentfindletter\empty}{}{\SYS_findletter_i}%
}%
- {\unless\ifx\SYS@currentfindletter\@empty\expandafter\SYS@findletter@i\fi}%
}
-\SYS@newmacro\SYS@addtocs#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
-
-\SYS@newmacro\SYS@expaddtocs#1#2{\expandafter\SYS@addtocs\expandafter#1\expandafter{#2}}
-
-% teste si \SYS@currentfindletter commence par "_" et si oui, rajoute les 2 caract\`eres \`a \SYS@currentchar et les enl\`eve \`a \SYS@currentfindletter
-\SYS@newmacro\SYS@testsubscript{%
+% teste si \SYS_currentfindletter commence par "_" et si oui, rajoute les 2 caractères à \SYS_currentchar et les enlève à \SYS_currentfindletter
+\def\SYS_testsubscript{%
\noexploregroups
- \IfBeginWith\SYS@currentfindletter_%
- {%\StrChar\SYS@currentfindletter\tw@[\SYS@currentletterafter]% TODO BUGFIX
- \StrGobbleLeft\SYS@currentfindletter1[\SYS@currentletterafter]%
-% \show\SYS@currentletterafter
+ \IfBeginWith\SYS_currentfindletter\SYSunder
+ {\StrGobbleLeft\SYS_currentfindletter1[\SYS_currentletterafter]%
\exploregroups
- \StrRemoveBraces\SYS@currentletterafter[\SYS@currentletterafter]%
- \IfInteger\SYS@currentletterafter
- {\ifnum\SYS@currentletterafter=\m@ne\errmessage{L'indice ne doit pas etre -1.}\fi}%
- {\errmessage{L'indice n'est pas un nombre entier !}}%
- \SYS@expaddtocs\SYS@currentchar{\expandafter_\expandafter{\SYS@currentletterafter}}%
- }\relax
+ \StrRemoveBraces\SYS_currentletterafter[\SYS_currentletterafter]%
+ \IfInteger\SYS_currentletterafter
+ {\xs_ifnum{\SYS_currentletterafter=-1 }
+ {\errmessage{L'indice ne doit pas etre -1.}}
+ {}%
+ }%
+ {\errmessage{L'indice n'est pas un nombre entier !}%
+ }%
+ \xs_eeaddtomacro\SYS_currentchar{\expandafter\SYSunder\expandafter{\number\SYS_currentletterafter}}% Bug 0.31 -> corrigé 0.32: si espace après l'inbdice : supprimé
+ }
+ {}%
\exploregroups
}
-% ins\`ere l'inconnue dans la sc #1 \`a sa place dans \SYS@letterlist
-\SYS@newmacro\SYS@insletter#1{%
- \IfSubStr\SYS@letterlist{#1}%
- \relax
- {\let\SYS@insunknown#1%
- \StrChar{#1}\thr@@[\SYS@insnum]%
- \StrRemoveBraces\SYS@insnum[\SYS@insnum]%
- \StrChar{#1}\@ne[\SYS@currentinsletter]%
- \let\SYS@letterlist@left\@empty
- \let\SYS@letterlist@right\SYS@letterlist
- \SYS@insletter@i}%
+% insère l'inconnue dans la sc #1 à sa place dans \SYS_letterlist
+\def\SYS_insletter#1{%
+ \IfSubStr\SYS_letterlist{#1}%
+ {}
+ {\let\SYS_insunknown#1%
+ \StrChar{#1}3[\SYS_insnum]%
+ \StrRemoveBraces\SYS_insnum[\SYS_insnum]%
+ \StrChar{#1}1[\SYS_currentinsletter]%
+ \let\SYS_letterlist_left\empty
+ \let\SYS_letterlist_right\SYS_letterlist
+ \SYS_insletter_i
+ }%
}
-\SYS@newmacro\SYS@insletter@i{%
- \ifx\SYS@letterlist@right\@empty% l'inconnue viendra \`a la fin de \SYS@letterlist
- \SYS@expaddtocs\SYS@letterlist@left\SYS@insunknown
- \let\SYS@letterlist\SYS@letterlist@left
- \else
- \StrChar\SYS@letterlist@right\@ne[\SYS@currentletter]% la lettre suivante
- \unless\ifnum\expandafter`\SYS@currentinsletter>\expandafter`\SYS@currentletter% est elle la bonne ?
- \let\SYS@letterlist@right@right\SYS@letterlist@right
- \let\SYS@letterlist@right@left\@empty
- \expandafter\expandafter\expandafter\SYS@insletter@ii%
- \else% sinon
- \StrSplit\SYS@letterlist@right\thr@@\SYS@currentletter\SYS@letterlist@right
- \SYS@expaddtocs\SYS@letterlist@left\SYS@currentletter
- \expandafter\expandafter\expandafter\SYS@insletter@i
- \fi
- \fi
+\def\SYS_insletter_i{%
+ \xs_ifx{\SYS_letterlist_right\empty}% l'inconnue viendra à la fin de \SYS_letterlist
+ {\xs_eaddtomacro\SYS_letterlist_left\SYS_insunknown
+ \let\SYS_letterlist\SYS_letterlist_left
+ }
+ {\StrChar\SYS_letterlist_right1[\SYS_currentletter]% la lettre suivante
+ \xs_ifnum{\expandafter`\SYS_currentinsletter>\expandafter`\SYS_currentletter\relax}% lettre pas bonne ?
+ {\StrSplit\SYS_letterlist_right3\SYS_currentletter\SYS_letterlist_right
+ \xs_eaddtomacro\SYS_letterlist_left\SYS_currentletter
+ \SYS_insletter_i
+ }% sinon
+ {\let\SYS_letterlist_right_right\SYS_letterlist_right
+ \let\SYS_letterlist_right_left\empty
+ \SYS_insletter_ii%
+ }%
+ }%
}
-\SYS@newmacro\SYS@insletter@ii{%
- \ifx\SYS@letterlist@right@right\@empty
- \let\SYS@letterlist\SYS@letterlist@left
- \SYS@expaddtocs\SYS@letterlist\SYS@letterlist@right@left
- \SYS@expaddtocs\SYS@letterlist\SYS@insunknown
- \else
- \StrChar\SYS@letterlist@right@right\@ne[\SYS@currentletter]% la lettre suivante
- \ifnum\expandafter`\SYS@currentinsletter<\expandafter`\SYS@currentletter% est elle une autre ?
- \let\SYS@letterlist\SYS@letterlist@left
- \SYS@expaddtocs\SYS@letterlist\SYS@letterlist@right@left
- \SYS@expaddtocs\SYS@letterlist\SYS@insunknown
- \SYS@expaddtocs\SYS@letterlist\SYS@letterlist@right@right
- \else
- \StrChar\SYS@letterlist@right@right\thr@@[\SYS@currentsubscript]% le prochain indice
- \StrRemoveBraces\SYS@currentsubscript[\SYS@currentsubscript]%
- \unless\ifnum\SYS@insnum>\SYS@currentsubscript% est-il le bon, c'est-\`a-dire trop grand ?
- \let\SYS@letterlist\SYS@letterlist@left
- \SYS@expaddtocs\SYS@letterlist\SYS@letterlist@right@left
- \SYS@expaddtocs\SYS@letterlist\SYS@insunknown
- \SYS@expaddtocs\SYS@letterlist\SYS@letterlist@right@right
- \else
- \StrSplit\SYS@letterlist@right@right\thr@@\SYS@currentletter\SYS@letterlist@right@right
- \SYS@expaddtocs\SYS@letterlist@right@left\SYS@currentletter
- \expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\expandafter\SYS@insletter@ii
- \fi
- \fi
- \fi
+\def\SYS_insletter_ii{%
+ \xs_ifx{\SYS_letterlist_right_right\empty}
+ {\let\SYS_letterlist\SYS_letterlist_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_letterlist_right_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_insunknown
+ }
+ {\StrChar\SYS_letterlist_right_right1[\SYS_currentletter]% la lettre suivante
+ \xs_ifnum{\expandafter`\SYS_currentinsletter<\expandafter`\SYS_currentletter\relax}% est elle une autre ?
+ {\let\SYS_letterlist\SYS_letterlist_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_letterlist_right_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_insunknown
+ \xs_eaddtomacro\SYS_letterlist\SYS_letterlist_right_right
+ }
+ {\StrChar\SYS_letterlist_right_right3[\SYS_currentsubscript]% le prochain indice
+ \StrRemoveBraces\SYS_currentsubscript[\SYS_currentsubscript]%
+ \xs_ifnum{\SYS_insnum>\SYS_currentsubscript\relax}% est-il le bon, c'est-à-dire trop grand ?
+ {\StrSplit\SYS_letterlist_right_right3\SYS_currentletter\SYS_letterlist_right_right
+ \xs_eaddtomacro\SYS_letterlist_right_left\SYS_currentletter
+ \SYS_insletter_ii
+ }
+ {\let\SYS_letterlist\SYS_letterlist_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_letterlist_right_left
+ \xs_eaddtomacro\SYS_letterlist\SYS_insunknown
+ \xs_eaddtomacro\SYS_letterlist\SYS_letterlist_right_right
+ }%
+ }%
+ }%
}
-\SYS@newmacro\SYS@addtotok#1#2{#1\expandafter{\the#1#2}}
-
-\SYS@newmacro\SYS@expaddtotok#1#2{\expandafter\SYS@addtotok\expandafter#1\expandafter{#2}}
-
-\SYS@newmacro\SYS@addtocode{\SYS@addtotok\SYS@systemecode}
-
-\SYS@newmacro\SYS@expaddtocode#1{\expandafter\SYS@addtocode\expandafter{#1}}
-
% reconstruit le code du tableau qui sera dans le \halign
-\SYS@newmacro\SYS@buildsystem#1#2{% #1=no ligne, #2=no inconnue
- \StrSplit\SYS@letterlist@tmp3\SYS@currentvariable\SYS@letterlist@tmp
- \ifcsname SYS@sign@\detokenize\expandafter{\SYS@currentvariable}@#1\endcsname
- \expandafter\expandafter\expandafter\ifx\csname SYS@sign@\detokenize\expandafter{\SYS@currentvariable}@#1\endcsname+% signe + ?
- \ifnum#2=\@ne% premi\`ere variable ?
- \let\SYS@nextaction\@gobble
- \else
- \ifSYS@firstterm% premier terme de l'\'equation ?'
- \let\SYS@nextaction\@gobble
+\def\SYS_buildsystem#1#2{% #1=no ligne, #2=no inconnue
+ \StrSplit\SYS_letterlist_tmp3\SYS_currentvariable\SYS_letterlist_tmp
+ \ifcsname SYS_sign_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname
+ \xs_eearg\xs_ifx{\csname SYS_sign_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname+}% signe + ?
+ {\xs_ifnum{#2=1 }% première variable ?
+ {\xs_gobarg
+ }
+ {\ifSYS_firstterm% premier terme de l'équation ?'
+ \expandafter\xs_gobarg
\else
- \let\SYS@nextaction\@firstofone
+ \expandafter\SYS_execarg
\fi
- \fi
- \else
- \ifnum#2=\@ne
- \expandafter\def\csname SYS@term@\detokenize\expandafter{\SYS@currentvariable}@#1\expandafter\expandafter\expandafter\endcsname
+ }%
+ }
+ {\xs_ifnum{#2=1 }
+ {\expandafter\def\csname SYS_term_\detokenize\expandafter{\SYS_currentvariable}_#1\expandafter\expandafter\expandafter\endcsname
\expandafter\expandafter\expandafter{%
- \csname SYS@sign@\detokenize\expandafter{\SYS@currentvariable}@#1\expandafter\expandafter\expandafter\endcsname
- \csname SYS@term@\detokenize\expandafter{\SYS@currentvariable}@#1\endcsname}%
- \let\SYS@nextaction\@gobble
- \else
- \let\SYS@nextaction\@firstofone
- \fi
- \fi
- \SYS@nextaction{%
- \SYS@addtocode{{}}%
- \expandafter\SYS@expaddtocode\expandafter{\csname SYS@sign@\detokenize\expandafter{\SYS@currentvariable}@#1\endcsname{}}%
+ \csname SYS_sign_\detokenize\expandafter{\SYS_currentvariable}_#1\expandafter\expandafter\expandafter\endcsname
+ \csname SYS_term_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname}%
+ \xs_gobarg
+ }
+ {\SYS_execarg
+ }%
+ }%
+ {%
+ \SYS_addtotab{{}}%
+ \xs_eearg\SYS_addtotab{\csname SYS_sign_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname{}}%
}%
- \SYS@firsttermfalse
+ \SYS_firsttermfalse
\fi
- \unless\ifSYS@star
- \unless\ifnum#2=\@ne\SYS@addtocode&\fi
+ \unless\ifSYS_star
+ \xs_ifnum{#2=1 }
+ {}
+ {\SYS_addtotab&}%
\fi
- \ifcsname SYS@term@\detokenize\expandafter{\SYS@currentvariable}@#1\endcsname
- \expandafter\SYS@expaddtocode\expandafter{\csname SYS@term@\detokenize\expandafter{\SYS@currentvariable}@#1\endcsname}%
+ \ifcsname SYS_term_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname
+ \xs_eearg\SYS_addtotab{\csname SYS_term_\detokenize\expandafter{\SYS_currentvariable}_#1\endcsname}%
\fi
- \unless\ifSYS@star\SYS@addtocode&\fi
- \ifnum#2<\SYS@numberofvariable
- \edef\SYS@nextaction{\noexpand\SYS@buildsystem{#1}{\number\numexpr#2+1}}%
- \expandafter\SYS@nextaction
- \else
- \ifSYS@constterm
- \SYS@addtocode{{}}%
- \ifSYS@firstterm\else\expandafter\SYS@expaddtocode\expandafter{\csname SYS@sign@const@#1\endcsname}\fi
- \SYS@addtocode{{}&}%
- \expandafter\SYS@expaddtocode\expandafter{\csname SYS@term@const@#1\endcsname&}%
+ \unless\ifSYS_star
+ \SYS_addtotab&%
+ \fi
+ \xs_ifnum{#2<\SYS_numberofvariable\relax}
+ {\xs_exparg{\SYS_buildsystem{#1}}{\number\numexpr#2+1}%
+ }
+ {\ifSYS_constterm
+ \ifcsname SYS_sign_const_#1\endcsname% si le terme constant existe dans cette ligne
+ \SYS_addtotab{{}}%
+ \ifSYS_firstterm\else
+ \xs_eearg\SYS_addtotab{\csname SYS_sign_const_#1\endcsname}%
+ \fi
+ \SYS_addtotab{{}}%
+ \unless\ifSYS_star
+ \SYS_addtotab&% Bug 0.31 -> corrigé 0.32
+ \fi
+ \xs_eearg\SYS_addtotab{\csname SYS_term_const_#1\endcsname}%
+ \else
+ \unless\ifSYS_star
+ \SYS_addtotab&% Bug 0.31 -> corrigé 0.32
+ \fi
+ \fi
+ \SYS_addtotab&%
\fi
- \ifcsname SYS@eqsign@#1\endcsname
- \SYS@addtocode{{}}%
- \expandafter\SYS@expaddtocode\expandafter{\csname SYS@eqsign@#1\endcsname{}&}%
- \expandafter\SYS@expaddtocode\expandafter{\csname SYS@right@#1\endcsname}%
+ \ifcsname SYS_eqsign_#1\endcsname
+ \SYS_addtotab{{}}%
+ \xs_eearg\SYS_addtotab{\csname SYS_eqsign_#1\endcsname{}&}%
+ \xs_eearg\SYS_addtotab{\csname SYS_right_#1\endcsname}%
\else
- \SYS@addtocode&%
+ \SYS_addtotab&%
\fi
\saveexploremode\exploregroups
- \ifcsname SYS@extracol@#1\endcsname
- \SYS@addtocode&%
- \expandafter\IfSubStr\csname SYS@extracol@#1\endcsname{**}% le contenu de l'extra col contient-il "**" ?
- {\expandafter\let\expandafter\SYS@autonumarg\csname SYS@extracol@#1\endcsname
- \StrSubstitute\SYS@autonumarg{**}{\number\numexpr\SYSeqnum+#1-\SYS@eqnumber}[\SYS@currentautonum]%
- \SYS@cslet{SYS@extracol@#1}\SYS@currentautonum
- \SYS@autonumtrue
+ \ifcsname SYS_extracol_#1\endcsname
+ \SYS_addtotab&%
+ \expandafter\IfSubStr\csname SYS_extracol_#1\endcsname{**}% le contenu de l'extra col contient-il "**" ?
+ {\SYS_letcs\SYS_autonumarg{SYS_extracol_#1}%
+ \StrSubstitute\SYS_autonumarg{**}{\number\numexpr\SYSeqnum+#1-\SYS_eqnumber}[\SYS_currentautonum]%
+ \SYS_cslet{SYS_extracol_#1}\SYS_currentautonum
+ \SYS_autonumtrue
}%
- {\expandafter\IfSubStr\csname SYS@extracol@#1\endcsname*% le contenu de l'extra col contient-il "*" ?
- {\expandafter\let\expandafter\SYS@autonumarg\csname SYS@extracol@#1\endcsname
- \StrSubstitute\SYS@autonumarg*{\noexpand#1}[\SYS@currentautonum]%
- \SYS@cslet{SYS@extracol@#1}\SYS@currentautonum
- \SYS@autonumtrue
+ {\expandafter\IfSubStr\csname SYS_extracol_#1\endcsname*% le contenu de l'extra col contient-il "*" ?
+ {\SYS_letcs\SYS_autonumarg{SYS_extracol_#1}%
+ \StrSubstitute\SYS_autonumarg*{\noexpand#1}[\SYS_currentautonum]%
+ \SYS_cslet{SYS_extracol_#1}\SYS_currentautonum
+ \SYS_autonumtrue
}%
- {\ifSYS@autonum
- \IfSubStr\SYS@autonumarg{**}%
- {\StrSubstitute\SYS@autonumarg{**}{\number\numexpr\SYSeqnum+#1-\SYS@eqnumber}[\SYS@currentautonum]}%
- {\StrSubstitute\SYS@autonumarg*{\noexpand#1}[\SYS@currentautonum]}%
- \SYS@expaddtocode\SYS@currentautonum
+ {\ifSYS_autonum
+ \IfSubStr\SYS_autonumarg{**}%
+ {\StrSubstitute\SYS_autonumarg{**}{\number\numexpr\SYSeqnum+#1-\SYS_eqnumber}[\SYS_currentautonum]}%
+ {\StrSubstitute\SYS_autonumarg*{\noexpand#1}[\SYS_currentautonum]}%
+ \xs_exparg\SYS_addtotab\SYS_currentautonum
\fi
}%
}%
- \expandafter\SYS@expaddtocode\expandafter{\csname SYS@extracol@#1\endcsname}%
+ \xs_eearg\SYS_addtotab{\csname SYS_extracol_#1\endcsname}%
\else% pas d'extra colonne pour cette ligne ?
- \ifSYS@autonum% mais si il y un autonum
- \SYS@addtocode&%
- \IfSubStr\SYS@autonumarg{**}%
- {\StrSubstitute\SYS@autonumarg{**}{\number\numexpr\SYSeqnum+#1-\SYS@eqnumber}[\SYS@currentautonum]}%
- {\StrSubstitute\SYS@autonumarg*{\noexpand#1}[\SYS@currentautonum]}%
- \SYS@expaddtocode\SYS@currentautonum
+ \ifSYS_autonum% mais si il y un autonum
+ \SYS_addtotab&%
+ \IfSubStr\SYS_autonumarg{**}%
+ {\StrSubstitute\SYS_autonumarg{**}{\number\numexpr\SYSeqnum+#1-\SYS_eqnumber}[\SYS_currentautonum]}%
+ {\StrSubstitute\SYS_autonumarg*{\noexpand#1}[\SYS_currentautonum]}%
+ \xs_exparg\SYS_addtotab\SYS_currentautonum
\fi
\fi
\restoreexploremode
- \ifnum#1<\SYS@eqnumber
- \SYS@addtocode\cr
- \SYS@firsttermtrue
- \let\SYS@letterlist@tmp\SYS@letterlist
- \edef\SYS@nextaction{\noexpand\SYS@buildsystem{\number\numexpr#1+1}{1}}%
- \expandafter\expandafter\expandafter\SYS@nextaction
- \else% fin de l'alignement
- \SYS@addtocode{\SYS@strutdown\cr}%
- \fi
- \fi
+ \xs_ifnum{#1<\SYS_eqnumber\relax}
+ {\SYS_addtotab\cr
+ \SYS_firsttermtrue
+ \let\SYS_letterlist_tmp\SYS_letterlist
+ \xs_exparg\SYS_buildsystem{\number\numexpr#1+1}{1}%
+ }% fin de l'alignement
+ {\SYS_addtotab{\SYS_strutdown\cr}%
+ }%
+ }%
}
-% ajoute "_\m@ne" \`a tous les tokens de #1 qui n'ont pas un indice
-\SYS@newmacro\SYS@scanletterlist#1{%
- \let\SYS@letterlist\@empty
- \def\SYS@lettersremaining{#1}%
- \SYS@scanletterlist@i
+% ajoute "_{-1}" à tous les tokens de #1 qui n'ont pas un indice
+\def\SYS_scanletterlist#1{%
+ \let\SYS_letterlist\empty
+ \def\SYS_lettersremaining{#1}%
+ \SYS_scanletterlist_i
}
-\SYS@newmacro\SYS@scanletterlist@i{%
- \StrSplit\SYS@lettersremaining\@ne\SYS@currentchar\SYS@lettersremaining
- \SYS@expaddtocs\SYS@letterlist\SYS@currentchar
- \IfBeginWith\SYS@lettersremaining_%
- {\StrChar\SYS@lettersremaining\tw@[\SYS@currentchar]%
- \StrRemoveBraces\SYS@currentchar[\SYS@currentchar]%
- \SYS@expaddtocs\SYS@letterlist{\expandafter_\expandafter{\SYS@currentchar}}%
- \StrGobbleLeft\SYS@lettersremaining\tw@[\SYS@lettersremaining]%
+\def\SYS_scanletterlist_i{%
+ \StrSplit\SYS_lettersremaining1\SYS_currentchar\SYS_lettersremaining
+ \xs_eaddtomacro\SYS_letterlist\SYS_currentchar
+ \IfBeginWith\SYS_lettersremaining\SYSunder
+ {\StrChar\SYS_lettersremaining2[\SYS_currentchar]%
+ \StrRemoveBraces\SYS_currentchar[\SYS_currentchar]%
+ \xs_eeaddtomacro\SYS_letterlist{\expandafter\SYSunder\expandafter{\SYS_currentchar}}%
+ \StrGobbleLeft\SYS_lettersremaining2[\SYS_lettersremaining]%
}%
- {\SYS@addtocs\SYS@letterlist{_{-1}}}%
- \unless\ifx\SYS@lettersremaining\empty\expandafter\SYS@scanletterlist@i\fi
+ {\xs_eaddtomacro\SYS_letterlist{\SYSunder{-1}}%
+ }%
+ \xs_ifx{\SYS_lettersremaining\empty}
+ {}
+ {\SYS_scanletterlist_i}%
}
-\SYS@newmacro\sysdelim#1#2{\def\SYS@delim@left{\left#1}\def\SYS@delim@right{\right#2}}
+\def\sysdelim#1#2{\def\SYS_delim_left{\left#1}\def\SYS_delim_right{\right#2}}
\sysdelim\{.
-\SYS@newmacro\systeme{\@ifstar{\SYS@startrue\SYS@systeme@i}{\SYS@starfalse\SYS@systeme@i}}
+\def\systeme{\xs_ifstar{\SYS_startrue\SYS_systeme_i}{\SYS_starfalse\SYS_systeme_i}}
-\SYS@newmacro\SYS@systeme@i{%
+\def\SYS_systeme_i{%
\relax\iffalse{\fi\ifnum0=`}\fi
\begingroup
\mathcode`\,="013B
- \catcode`\^7 \catcode`\_8
+ \catcode`\^7
+ \catcode`\_8
\expandarg\noexploregroups
- \setbox\z@\hbox{$($}%
- \edef\SYS@strutup{\vrule depth\z@ width\z@ height\dimexpr\ht\z@+\SYS@extrastrutdim\relax}%
- \edef\SYS@strutdown{\vrule height\z@ width\z@ depth\dimexpr\dp\z@+\SYS@extrastrutdim\relax}%
- \SYS@cslet++\SYS@cslet--%
- \@testopt\SYS@systeme@ii{}%
+ \setbox0 \hbox{$($}%
+ \edef\SYS_strutup {\vrule depth0pt width0pt height\dimexpr\ht0 +\SYS_extrastrutdim\relax}%
+ \edef\SYS_strutdown{\vrule height0pt width0pt depth\dimexpr\dp0 +\SYS_extrastrutdim\relax}%
+ \SYS_cslet++\SYS_cslet--%
+ \xs_testopt\SYS_systeme_ii{}%
}
-\SYS@newmacro\SYS@systeme@ii[#1]{%
- \ifx\@empty#1\@empty
- \let\SYS@letterlist\@empty
- \SYS@sortvariabletrue
- \else
- \SYS@scanletterlist{#1}% ajoute des _{-1} si besoin
- \SYS@sortvariablefalse
- \fi
- \SYS@consttermfalse
- \expandafter\@testopt\expandafter\SYS@systeme@iii\expandafter{\SYS@defaulteqsep}%
+\def\SYS_systeme_ii[#1]{%
+ \xs_ifempty{#1}
+ {\let\SYS_letterlist\empty
+ \SYS_sortvariabletrue
+ }
+ {\SYS_scanletterlist{#1}% ajoute des _{-1} si besoin
+ \SYS_sortvariablefalse
+ }%
+ \SYS_consttermfalse
+ \xs_exparg{\xs_testopt\SYS_systeme_iii}{\SYS_defaulteqsep}%
}
-\SYS@newmacro\SYS@systeme@iii[#1]#2{%
- \SYS@newmacro\SYS@systeme@iv##1#1##2\@nil{%
- \ifx\@empty##1\@empty
- \SYS@addtocode\cr% une ligne vide
- \else
- \SYS@spliteqinterms{##1}% analyser l'eq courante
- \fi
- \ifx\@empty##2\@empty% tant qu'il reste des \'equations
- \else
- \edef\SYS@eqnumber{\number\numexpr\SYS@eqnumber+\@ne}% augmenter de 1 leur nombre
- \global\advance\SYSeqnum\@ne
- \def\SYS@nextaction{\SYS@systeme@iv##2\@nil}% recommencer avec ce qu'il reste
- \expandafter\SYS@nextaction
- \fi
+\def\SYS_systeme_iii[#1]#2{%
+ \def\SYS_systeme_iv##1#1##2\_nil{%
+ \xs_ifempty{##1}
+ {\SYS_addtotab\cr}% on a une ligne vide
+ {\SYS_spliteqinterms{##1}}% analyser l'éq courante
+ \xs_ifempty{##2}% tant qu'il reste des équations
+ {}
+ {\edef\SYS_eqnumber{\number\numexpr\SYS_eqnumber+1}% augmenter de 1 leur nombre
+ \global\advance\SYSeqnum1
+ \SYS_systeme_iv##2\_nil% recommencer avec ce qu'il reste
+ }%
}%
- \global\advance\SYSeqnum\@ne
- \def\SYS@eqnumber{1}%
- \ifdefined\SYS@autonumarg
- \ifx\SYS@autonumarg\@empty% on initialise que si \SYS@autonumarg est vide
- \SYS@extracolfalse
- \SYS@autonumfalse
- \fi
+ \global\advance\SYSeqnum1
+ \def\SYS_eqnumber{1}%
+ \ifdefined\SYS_autonumarg
+ \xs_ifx{\SYS_autonumarg\empty}% on initialise que si \SYS_autonumarg est vide
+ {\SYS_extracolfalse
+ \SYS_autonumfalse
+ }
+ {}%
\else
- \SYS@extracolfalse
- \SYS@autonumfalse
+ \SYS_extracolfalse
+ \SYS_autonumfalse
\fi
- \SYS@systeme@iv#2#1\@nil% analyser toutes les \'equations et en faire des termes et des signes
- \StrCount\SYS@letterlist_[\SYS@numberofvariable]%
- \SYS@systemecode{}\SYS@systempreamble{}%
- \ifSYS@star
- \SYS@makesyspreamble\@ne
- \else
- \SYS@makesyspreamble\SYS@numberofvariable% fabriquer le pr\'eambule du \halign
- \fi
- \SYS@firsttermtrue
- \let\SYS@letterlist@tmp\SYS@letterlist
- \SYS@buildsystem11% construire le syst\`eme...
- \ifdefined\SYS@substlist
- \unless\ifx\SYS@substlist\@empty
- \edef\SYS@systemcs{\the\SYS@systemecode}%
- \SYS@substlist
- \SYS@systemecode\expandafter{\SYS@systemcs}%
- \fi
- \fi
- \ifmmode
- \expandafter\@firstofone
- \else
- \expandafter\SYS@entermath
+ \SYS_systeme_iv#2#1\_nil% analyser toutes les équations et en faire des termes et des signes
+ \StrCount\SYS_letterlist\SYSunder[\SYS_numberofvariable]%
+ \SYS_systemecode{}\SYS_systempreamble{}%
+ \xs_exparg\SYS_makesyspreamble{\number\ifSYS_star1\else\SYS_numberofvariable\fi\space}% fabriquer le préambule du \halign
+ \SYS_firsttermtrue
+ \let\SYS_letterlist_tmp\SYS_letterlist
+ \SYS_buildsystem11% construire le système...
+ \ifdefined\SYS_substlist
+ \xs_ifx{\SYS_substlist\empty}
+ {}
+ {\edef\SYS_systemcs{\the\SYS_systemecode}%
+ \SYS_substlist
+ \SYS_systemecode\expandafter{\SYS_systemcs}%
+ }%
\fi
- {\SYS@delim@left
+ \csname SYS_\ifmmode execarg\else entermath\fi\endcsname
+ {\SYS_delim_left
\vcenter{%
- \lineskiplimit\z@\lineskip\z@
- \baselineskip\SYS@lineskipcoeff\normalbaselineskip
- \halign\expandafter\expandafter\expandafter{\expandafter\the\expandafter\SYS@systempreamble\the\SYS@systemecode}%
+ \lineskiplimit=0pt
+ \lineskip=0pt
+ \baselineskip\SYS_lineskipcoeff\normalbaselineskip
+ \halign\expandafter\expandafter\expandafter{\expandafter\the\expandafter\SYS_systempreamble\the\SYS_systemecode}%
}%
- \SYS@delim@right
+ \SYS_delim_right
}% ...l'afficher en mode math
\endgroup
\ifnum0=`{\fi\iffalse}\fi
- \unless\ifSYS@followautonum
- \ifdefined\SYS@autonumarg
- \let\SYS@autonumarg\@empty% annule la num\'erotation auto
+ \unless\ifSYS_followautonum
+ \ifdefined\SYS_autonumarg
+ \let\SYS_autonumarg\empty% annule la numérotation auto
\fi
\fi
}
-% Construire le pr\'eambule du \halign
-\SYS@newmacro\SYS@makesyspreamble#1{%
- \def\SYS@preamblenum{#1}%
- \SYS@makesyspreamble@i\@ne
+% Construire le préambule du \halign
+\def\SYS_makesyspreamble#1{%
+ \def\SYS_preamblenum{#1}%
+ \SYS_makesyspreamble_i1%
}
-\SYS@newmacro\SYS@makesyspreamble@i#1{%
- \ifnum#1<\SYS@preamblenum% tant qu'il reste des variables
- \SYS@addtotok\SYS@systempreamble{\hfil$##$&\hfil$##$&}% une colonne pour le terme et une pour le signe
- \expandafter\SYS@makesyspreamble@i\expandafter{\number\numexpr#1+\@ne\expandafter}%
- \else
- \ifSYS@constterm
- \SYS@addtotok\SYS@systempreamble{\hfil$##$&\hfil$##$&}% une colonne pour le terme constant et son signe
+\def\SYS_makesyspreamble_i#1{%
+ \xs_ifnum{#1<\SYS_preamblenum\relax}% tant qu'il reste des variables
+ {\SYS_addtotok\SYS_systempreamble{\hfil$##$&\hfil$##$&}% une colonne pour le terme et une pour le signe
+ \xs_exparg\SYS_makesyspreamble_i{\number\numexpr#1+1}%
+ }
+ {\ifSYS_constterm
+ \SYS_addtotok\SYS_systempreamble{\hfil$##$&\hfil$##$&}% une colonne pour le terme constant et son signe
\fi
- \SYS@addtotok\SYS@systempreamble{\hfil$##$&$##$&$##$\hfil\null}% ajouter 1 colonne pour le signe = et une pour le terme de droite
- \ifSYS@extracol
- \SYS@addtotok\SYS@systempreamble{&\SYS@extracolstart##\SYS@extracolend\hfil\null}% la colonne suppl\'ementaire (pas de mode math)
+ \SYS_addtotok\SYS_systempreamble{\hfil$##$&$##$&$##$\hfil\null}% ajouter 1 colonne pour le signe = et une pour le terme de droite
+ \ifSYS_extracol
+ \SYS_addtotok\SYS_systempreamble{&\SYS_extracolstart##\SYS_extracolend\hfil\null}% la colonne supplémentaire (pas de mode math)
\fi
- \SYS@addtotok\SYS@systempreamble{\cr\SYS@strutup}% ajouter la fin du pr\'eambule et le strut de premi\`ere ligne
- \fi
+ \SYS_addtotok\SYS_systempreamble{\cr\SYS_strutup}% ajouter la fin du préambule et le strut de première ligne
+ }%
}
-\SYS@newmacro\SYS@entermath#1{$\relax#1$}
+\def\SYS_entermath#1{$\relax#1$}
-% d\'efinit les substitutions \`a faire dans le tableau avant l'affichage
-\SYS@newmacro\syssubstitute{%
- \unless\ifdefined\SYS@substlist\let\SYS@substlist\@empty\fi
- \SYS@substitute@i
+% définit les substitutions à faire dans le tableau avant l'affichage
+\def\syssubstitute{%
+ \unless\ifdefined\SYS_substlist\let\SYS_substlist\empty\fi
+ \SYS_substitute_i
}
-\SYS@newmacro\SYS@substitute@i#1{%
- \ifx\@empty#1\@empty
- \else
- \SYS@addtocs\SYS@substlist{\StrSubstitute\SYS@systemcs}%
- \StrChar{\noexpand#1}\@ne[\SYS@currentchar]\StrRemoveBraces\SYS@currentchar[\SYS@currentchar]%
- \SYS@expaddtocs\SYS@substlist{\expandafter{\expandafter\noexpand\SYS@currentchar}}%
- \StrChar{\noexpand#1}\tw@[\SYS@currentchar]\StrRemoveBraces\SYS@currentchar[\SYS@currentchar]%
- \SYS@expaddtocs\SYS@substlist{\expandafter{\expandafter\noexpand\SYS@currentchar}[\SYS@systemcs]}%
- \def\SYS@nextaction{\expandafter\SYS@substitute@i\expandafter{\@gobbletwo#1}}%
- \expandafter\SYS@nextaction
- \fi
+\def\SYS_substitute_i#1{%
+ \xs_ifempty{#1}
+ {}
+ {\xs_addtomacro\SYS_substlist{\StrSubstitute\SYS_systemcs}%
+ \StrChar{\noexpand#1}1[\SYS_currentchar]\StrRemoveBraces\SYS_currentchar[\SYS_currentchar]%
+ \xs_eaddtomacro\SYS_substlist{\expandafter{\expandafter\noexpand\SYS_currentchar}}%
+ \StrChar{\noexpand#1}2[\SYS_currentchar]\StrRemoveBraces\SYS_currentchar[\SYS_currentchar]%
+ \xs_eaddtomacro\SYS_substlist{\expandafter{\expandafter\noexpand\SYS_currentchar}[\SYS_systemcs]}%
+ \xs_exparg\SYS_substitute_i{\SYS_gobtwoargs#1}%
+ }%
}
% annule les substitutions
-\SYS@newmacro\sysnosubstitute{\let\SYS@substlist\@empty}
+\def\sysnosubstitute{\let\SYS_substlist\empty}
-\catcode`\@\SYS@savedatcatcode\relax
+\SYS_restorecatcode
\endinput
@@ -660,29 +654,36 @@
######################################################################
v0.1 27/02/2011
- - Premi\`ere version publique sur le CTAN
+ - Première version publique sur le CTAN.
----------------------------------------------------------------------
v0.2 08/03/2011
- Le premier argument optionnel met en place de nouvelles
- fonctionnalit\'es
- - Possibilit\'e d'avoir des inconnues indic\'ees
- - Mise en place d'une colonne suppl\'ementaire et d'une
- num\'erotation automatique
- - La commande \'etoil\'ee \systeme* d\'egrade l'alignement pour ne
- plus prendre en compte que les signes d'\'egalit\'e
+ fonctionnalités.
+ - Possibilité d'avoir des inconnues indicées.
+ - Mise en place d'une colonne supplémentaire et d'une
+ numérotation automatique.
+ - La commande étoilée \systeme* dégrade l'alignement pour ne
+ plus prendre en compte que les signes d'égalité.
- Une substitution est possible en fin de traitement, juste
- avant d'afficher le syst\`eme.
+ avant d'afficher le système.
----------------------------------------------------------------------
v0.2a 15/05/2011
- - Bug corrig\'e lorsque les termes comportent des accolades
+ - Bug corrigé lorsque les termes comportent des accolades.
----------------------------------------------------------------------
-v0.2b 2011/06/23
- - La commande \setdelim permet de modifier les d\'elimiteurs
- extensibles plac\'es de part et d'autre du syst\`eme.
+v0.2b 23/06/2011
+ - La commande \setdelim permet de modifier les délimiteurs
+ extensibles placés de part et d'autre du système.
----------------------------------------------------------------------
v0.3 21/12/2013
- - Un terme constant est permis dans le membre de gauche
- ----------------------------------------------------------------------
+ - Un terme constant est permis dans le membre de gauche.
+----------------------------------------------------------------------
v0.31 01/01/2018
- - Il manquait un "&" apr\`es le terme constant, merci \`a Thomas Soll
- de l'avoir signal\'e \ No newline at end of file
+ - Il manquait un "&" après le terme constant, merci à Thomas Soll
+ de l'avoir signalé.
+----------------------------------------------------------------------
+v0.32 13/01/2019
+ - Correction d'un bug : les espaces étaient pris en compte dans
+ les noms des termes.
+ - Correction d'un bug : si version étoilée et terme constant dans
+ membre de gauche, défaut d'alignement.
+ - Nettoyage du code. \ No newline at end of file