summaryrefslogtreecommitdiff
path: root/Master
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
parent112eb1c71994a8eb4b4eabab5fe993f03cb9c248 (diff)
systeme (13jan19)
git-svn-id: svn://tug.org/texlive/trunk@49690 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/generic/systeme/README6
-rw-r--r--Master/texmf-dist/doc/generic/systeme/systeme_fr.pdfbin459542 -> 454193 bytes
-rw-r--r--Master/texmf-dist/doc/generic/systeme/systeme_fr.tex48
-rw-r--r--Master/texmf-dist/tex/generic/systeme/systeme.sty1
-rw-r--r--Master/texmf-dist/tex/generic/systeme/systeme.tex1035
5 files changed, 549 insertions, 541 deletions
diff --git a/Master/texmf-dist/doc/generic/systeme/README b/Master/texmf-dist/doc/generic/systeme/README
index d89332a02f4..d7310e3496a 100644
--- a/Master/texmf-dist/doc/generic/systeme/README
+++ b/Master/texmf-dist/doc/generic/systeme/README
@@ -1,9 +1,9 @@
L'extension
systeme
- v0.31
+ v0.32
- 1er janvier 2018
+ 13 janvier 2019
Author : Christian Tellechea
Email : unbonpetit@netc.fr (CT)
@@ -24,4 +24,4 @@ rendu o\`u les termes et les signes sont align\'es verticalement
This package allows you to enter systems of linear equations or
inequalities in a intuitive way, and produces output where the terms
-and signs are aligned vertically. \ No newline at end of file
+and signs are aligned vertically.
diff --git a/Master/texmf-dist/doc/generic/systeme/systeme_fr.pdf b/Master/texmf-dist/doc/generic/systeme/systeme_fr.pdf
index 19a5910ca1f..7d81a5ae886 100644
--- a/Master/texmf-dist/doc/generic/systeme/systeme_fr.pdf
+++ b/Master/texmf-dist/doc/generic/systeme/systeme_fr.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/generic/systeme/systeme_fr.tex b/Master/texmf-dist/doc/generic/systeme/systeme_fr.tex
index 0c5f23eca9a..657911336d7 100644
--- a/Master/texmf-dist/doc/generic/systeme/systeme_fr.tex
+++ b/Master/texmf-dist/doc/generic/systeme/systeme_fr.tex
@@ -1,22 +1,14 @@
% Documentation de systeme
-\documentclass[10pt]{article}
+\documentclass[10pt,french]{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
-\usepackage[a4paper,margin=2.75cm,head=12pt,headsep=7mm,footskip=7mm]{geometry}
+\usepackage[a4paper,margin=3cm,head=12pt,headsep=7mm,footskip=7mm]{geometry}
\usepackage[bottom]{footmisc}
-\usepackage{libertine}
+\usepackage{libertine,amsmath,fancybox,enumitem,systeme,xcolor,amssymb,array,longtable,fancyhdr}
\renewcommand*\oldstylenums[1]{{\fontfamily{fxlj}\selectfont #1}}
\usepackage[scaled=0.8]{luximono}
\usepackage[libertine]{newtxmath}%
-\usepackage{amsmath}
-\usepackage{fancybox}
-\usepackage{enumitem}
-\usepackage{systeme}
-\usepackage{xcolor}
-\usepackage{amssymb}
-\usepackage{array,longtable}
\usepackage[protrusion=true,expansion,final,babel=true]{microtype}
-\usepackage{fancyhdr}
\fancypagestyle{plain}{%
\fancyhead[L]{\small L'extension \bfseries systeme}
\fancyhead[C]{}
@@ -93,12 +85,13 @@
\def\longfrdate{\expandafter\longfrdate@i\SYSdate\@nil}
\makeatother
-\usepackage[frenchb]{babel}
+\usepackage{babel}
\frenchbsetup{StandardLists=true}
\usepackage[plainpages=false,pdfpagelabels,bookmarks=true,bookmarksopen=true,colorlinks=true,hyperfootnotes=false,filecolor=black,linkcolor=blue,urlcolor=magenta,pdfauthor={Christian TELLECHEA},pdftitle={systeme},pdfsubject={Saisie intuitive de systèmes d'équations},pdfkeywords={systeme},pdfcreator={LaTeX}]{hyperref}
\setitemize{leftmargin=3em,topsep=0pt,parsep=0pt,itemsep=0pt,label=--}
+
\begin{document}
\begin{titlepage}
\null\par\vspace{1.5cm}
@@ -156,7 +149,7 @@ a+8b+5c=8,
-a+2b+c=-5}/
La virgule, qui est le séparateur par défaut, peut être changée en tout autre caractère. Il suffit de placer ce nouveau caractère dans l'argument de la commande \verb-\syseqsep-.
-La commande \verb-\systeme- fonctionnera en mode math ou non et donnera un résultat correct si toutes les inconnues se trouvent dans le membre de gauche, le membre de droite étant celui des constantes. Les équations doivent être \emph{développées}, c'est-à-dire que chaque terme est séparé de son voisin par un "+" ou un "-". De plus, les inconnues doivent être des lettres minuscules non accentuées, c'est-à-dire tout caractère de \og\verb-a-\fg{} à \og\verb-z-\fg.
+La commande \verb-\systeme- fonctionnera en mode math ou non et donnera un résultat correct si toutes les inconnues se trouvent dans le membre de gauche, le membre de droite étant celui des constantes. Les équations doivent être \emph{développées}, c'est-à-dire que chaque terme est séparé de son voisin par un "+" ou un "-". De plus, les inconnues doivent être des lettres minuscules non accentuées, c'est-à-dire tout caractère de \og\verb-a-\fg{} à \og\verb-z-\fg. Les espaces sont ignorés dans l'argument de la macro \verb|\systeme|.
L'alignement construit sera un tableau précédé d'une accolade et aura les spécificités suivantes :
\begin{itemize}
@@ -225,7 +218,7 @@ z-y+2x=-1,
y_1-x_1+3y_2=4,
2x_1-y_2-y_1=-1}/
-Lorque les inconnues sont indicées, elles sont classés alphabétiquement puis dans l'ordre croissant de leur indice.
+Lorsque les inconnues sont indicées, elles sont classés alphabétiquement puis dans l'ordre croissant de leur indice.
Le tri alphabétique est une facilité mais il peut s'avérer gênant surtout dans les systèmes $4\times4$ où, bien souvent, la 4\ieme{} inconnue est \og$t$\fg{} :
\exemple{Tri alphabétique indésirable}/\systeme{x+2y-3z+t=0,
@@ -252,8 +245,8 @@ Cet argument optionnel implique d'autres fonctionnalités, qui, avec le tri forc
A-\alpha+3\beta=4,
2A+\alpha-\beta=0,
-A+3\alpha-2\beta=5}/
- \item seules les inconnues figurant dans l'argument optionnel sont reconnues dans les équations. Dans l'exemple ci dessous, la lettre $m$ n'est pas reconnue comme inconnue :
- \exemple{Iconnues forcées}/\systeme[xy]{mx-y=3,
+ \item seules les inconnues figurant dans l'argument optionnel sont reconnues dans les équations. Dans l'exemple ci dessous, la lettre $m$ n'est pas comprise comme étant une inconnue :
+ \exemple{Inconnues forcées}/\systeme[xy]{mx-y=3,
x-m^2y=-1}/
\end{enumerate}
@@ -305,7 +298,7 @@ On peut faire varier l'espacement entre les lignes avec la commande \verb-\sysli
\systeme{x+2y-z=0,2x-y+z=1,x-3y+2z=1}/
\subsection{Colonne supplémentaire}
-Lorsqu'une équation comporte le signe \og\verb-@-\fg{}, tout ce qui se trouve à droite de ce caractère sera mis dans une colonne supplementaire au fer à gauche qui se trouvera à droite du système, en dernière position.
+Lorsqu'une équation comporte le signe \og\verb-@-\fg{}, tout ce qui se trouve à droite de ce caractère sera mis dans une colonne supplémentaire au fer à gauche qui se trouvera à droite du système, en dernière position.
\exemple{Colonne supplémentaire}/\systeme{x+y=125@L_1,
x-y=12@L_2}/
@@ -351,10 +344,14 @@ Le schéma spécifié avec la commande \verb-\sysautonum- n'est valable \emph{qu
\systeme{a+b=4,2a-b=5}
\quad
\systeme{x-3y=0,2x+y=1}/
+
On peut effacer (et donc annuler) le schéma de numérotation automatique en entrant un argument vide : \verb-\sysautonum{}-.
-Il existe un compteur global\footnote{Il s'agit d'un compteur \TeX{} portant le doux nom de {\ttfamily\string\SYSeqnum}, accessible via les commandes \TeX{} habituelles, c'est-à-dire qu'on peut le faire précéder de \texttt{\string\number}, \texttt{\string\romannumeral} pour l'afficher.} d'équations accessible de la même façon que le compteur local mais avec \og\verb-**-\fg{}. Voici un exemple de numérotation persistante, où l'on voit que \number\SYSeqnum\ équations ont été écrites jusqu'ici :
-\exemple{Numérotation globale}/\sysautonum*{\hbox{eq (**)}}
+Il existe un compteur global\footnote{Il s'agit d'un compteur \TeX{} portant le doux nom de {\ttfamily\string\SYSeqnum}, accessible via les commandes \TeX{} habituelles, c'est-à-dire qu'on peut le faire précéder de \texttt{\string\number}, \texttt{\string\romannumeral} pour l'afficher.} d'équations accessible de la même façon que le compteur local mais avec \og\verb-**-\fg{}. Voici un exemple de numérotation persistante :
+\exemple{Numérotation globale}/On met en évidence que \number\SYSeqnum{}
+équations ont été écrites jusqu'ici~:
+
+\sysautonum*{\hbox{eq (**)}}
\systeme{x-y+z=3,
2x+y+z=1,
x-z=8}
@@ -362,10 +359,20 @@ x-z=8}
\systeme{u+w=9,
v+2w=0,
u-v=1}/
+
+Il est enfin possible d'utiliser la colonne supplémentaire pour retenir le numéro d'une équation et le rappeler plus tard :
+\exemple{Numérotation globale}/\syscodeextracol{\kern1em}{}
+\systeme{x-y+z=3@\gdef\foo{**}(\textbf{**}),
+ 2x+y+z=1@\gdef\bar{**}(\textbf{**}),
+ x-z=8@\gdef\baz{**}(\textbf{**})}
+
+L'équation \no\foo{} est la première du système,
+\bar{} et \baz{} sont les deux suivantes./
+
On peut à tout moment réinitialiser le compteur global d'équations à l'aide de \og\verb-\sysreseteqnum-\fg.
\subsection{Substitution post traitement}
-Juste avant l'affichage du système, il est encore possible de substituter dans le code du système tout caractère par un autre\footnote{Plus exactement, toute \emph{suite de tokens} par une autre.}. Pour cela, la commande \verb-\syssubstitute- agit pour tous les systèmes à venir et son argument est fait de caractères allant par paires; le premier étant le caractère à substituer et le second étant ce par quoi il le sera. Les subtitutions définies par \verb-\syssubstitute- viennent \emph{s'ajouter} à celles déjà définies.
+Juste avant l'affichage du système, il est encore possible de substituer dans le code du système tout caractère par un autre\footnote{Plus exactement, toute \emph{suite de tokens} par une autre.}. Pour cela, la commande \verb-\syssubstitute- agit pour tous les systèmes à venir et son argument est fait de caractères allant par paires; le premier étant le caractère à substituer et le second étant ce par quoi il le sera. Les substitutions définies par \verb-\syssubstitute- viennent \emph{s'ajouter} à celles déjà définies.
Dans cet exemple, on entre des coefficients décimaux où le point est le séparateur décimal. On va demander à ce que tous les \og\verb-.-\fg{} soient remplacés par des \og\verb-,-\fg{}. On remplacera aussi l'inconnue $a_1$ par $x_n$, et $a_2$ par $x_{n+1}$, ces 3 substitutions étant faites avec \verb-\syssubstitute{.,{a_1}{x_n}{a_2}{x_{n+1}}}- :
\exemple{Substitution post traitement}/\syssubstitute{.,{a_1}{x_n}{a_2}{x_{n+1}}}
@@ -375,7 +382,6 @@ La commande \verb-\sysnosubstitute- annule toutes les substitutions précédemme
\section{Liste des commandes}
Voici la liste de toutes les commandes définies par cette extension :
-
\begin{longtable}{>\footnotesize l>\footnotesize p{9cm}}\\\hline
\hfill\normalsize Commandes\hfill\null &\hfill\normalsize Description\hfill\null\\\hline
\verb-\systeme{<code système>}-&compose un système d'équations ou d'inéquations\\
diff --git a/Master/texmf-dist/tex/generic/systeme/systeme.sty b/Master/texmf-dist/tex/generic/systeme/systeme.sty
index 33ba751f0ae..a86309a80fb 100644
--- a/Master/texmf-dist/tex/generic/systeme/systeme.sty
+++ b/Master/texmf-dist/tex/generic/systeme/systeme.sty
@@ -1,3 +1,4 @@
+\def\SYSstyfile{0}
\RequirePackage{xstring}
\input systeme.tex
\ProvidesPackage\SYSname[\SYSdate\space v\SYSver\space Mise en forme de systemes d'equations (CT)]
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