<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% !TeX TS-program = lualatex
\documentclass[10pt,french]{article}
\usepackage[no-math]{fontspec}
\usepackage[libertine]{newtxmath}
\usepackage{libertineRoman}
\DeclareSymbolFont{operators}{\encodingdefault}{\familydefault}{m}{n}
\usepackage[a4paper,margin=2cm,head=12pt,headsep=7mm,footskip=7mm]{geometry}
\usepackage[bottom]{footmisc}
\usepackage{amsmath,fancybox,enumitem,systeme,xcolor,fancyhdr,babel,cprotect}
\setmonofont[Scale=0.8]{Luxi Mono}
\frenchsetup{og=Â«,fg=Â»,AutoSpaceFootnotes=false,AutoSpacePunctuation=true,StandardLists=true}
\usepackage[protrusion=true,expansion,final,babel=true]{microtype}
\fancypagestyle{plain}{%
	\fancyhead[L]{\small L'extension \bfseries systeme}
	\fancyhead[C]{}
	\fancyhead[R]{\scriptsize\slshape\leftmark}
	\fancyfoot[l]{}
	\fancyfoot[c]{}
	\fancyfoot[r]{\thepage}}
\renewcommand\headrulewidth{0.4pt}

\makeatletter
\long\def\defactive#1#2{\catcode`#1=13 \begingroup\lccode`\~`#1 \lowercase{\endgroup\long\def~{#2}}}
\newcommand\disable@lig[1]{\defactive#1{\leavevmode\kern\z@\string#1}}
\def\codefont{\ttfamily\small}
\def\code{\expandafter\code@i\string}
\newif\ifspecialcode
\def\specialcode{\specialcodetrue}
\def\code@i#1{%
	\begingroup
	\par\smallbreak\nobreak\parindent0pt
	\parskip=0pt
	\leftskip.1\linewidth
	\rightskip0pt
	\ifspecialcode\else
		\defactive\&lt;{\begingroup$\langle$\itshape}%
		\defactive\&gt;{$\rangle$\endgroup}%
	\fi
	\let\do\@makeother \dospecials
	\codefont
	\defactive\^^I{\space\space\space\space}%
	\defactive\^^M{\par\noindent}%
	\defactive\ {\space}%
	\def\code@ii##1#1{##1\par\endgroup\specialcodefalse}%
	\code@ii
}

\newcommand\exemple{%
	\medbreak\nobreak\noindent
	\begingroup
	\parindent\z@
	\parskip\z@
	\@makeother\;\@makeother\!\@makeother\?\@makeother\:% neutralise frenchb
	\exemple@}

\newcommand\exemple@[2][50]{%
	\begingroup
		\let\do\@makeother\dospecials
		\defactive\ {\space}%
		\defactive\^^M{\par\noexpand\color{black}\leavevmode\noexpand\normalshape}%
		\defactive\^^I{\space\space\space\space}%
		\defactive\,{\leavevmode\kern\z@\string,}%
		\defactive\-{\leavevmode\kern\z@\string-}%
		\defactive\%{\noexpand\itshape\noexpand\color{gray}\char37 }%
		\exemple@@{#1}{#2}%
}

\newcommand\exemple@@[3]{%
	\def\@tempa##1#3{\exemple@@@{#1}{#2}{##1}}%
	\@tempa
}

\newcommand\exemple@@@[3]{%
	\xdef\the@code{#3}%
	\endgroup
	\boxput*(0,1)
		{\fboxsep\z@
		\hbox{\colorbox{white}{\leavevmode\kern0.25em{\small\bfseries#2}\kern0.25em}}%
		}%
		{\fboxsep5pt
		\fbox{%
			$\vcenter{\hsize\dimexpr0.#1\linewidth-\fboxsep-\fboxrule\relax
				\kern5pt\parskip0pt \ttfamily\small\the@code}%
			\vcenter{\kern5pt\hsize\dimexpr\linewidth-0.#1\linewidth-\fboxsep-\fboxrule\relax
				\small\newlinechar`\^^M\everyeof{\noexpand}\scantokens{#3}}$%
			}%
		}%
	\medbreak
	\endgroup
}

\newcommand\falseverb[1]{{\ttfamily\detokenize{#1}}}

\long\def\centerverb#1{%
	\def\centerverb@i##1#1{##1\hfill\null\par\egroup}
	\bgroup
		\ttfamily\@noligs
		\parskip2pt\par\hfill
		\let\do\@makeother\dospecials
		\@vobeyspaces
		\centerverb@i}

\begingroup
\catcode`\&lt;13 \catcode`\&gt;13
\gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
	\bgroup
	\verb@eol@error \let\do\@makeother \dospecials
	\verbatim@font\@noligs
	\catcode`\&lt;13 \catcode`\&gt;13 \def&lt;{\begingroup$\langle$\itshape}\def&gt;{\/$\rangle$\endgroup}%
	\@ifstar\@sverb\@verb}
\endgroup

\def\longfrdate@i#1/#2/#3\@nil{\number#3\relax\ifnum#3=1 \ier\fi\space\ifcase #2 \or janvier\or fÃ©vrier\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or dÃ©cembre\fi\space#1}
\def\longfrdate{\expandafter\longfrdate@i\SYSdate\@nil}
\makeatother
\newcommand*\chevrons[1]{\textlangle\textit{#1}\textrangle}
\def\STkey#1{\textcolor{teal}{\texttt{\detokenize{#1}}}}
\newcommand*\STval[2][]{{\color{teal}\ttfamily#1#2}\if\relax\detokenize{#2}\relax\quad(vide)\fi}
\newcommand*\STkv[2]{\STkey{#1}{\color{teal}${}={}$}\STval{#2}}
\newcommand*\NEW[1]{\leavevmode\llap{\footnotesize\itshape\textcolor{red}{nouveau v#1}\kern2em }}

\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}
\begin{document}
\setitemize{leftmargin=3em,topsep=\dimexpr-\parskip+1.5pt\relax,parsep=0pt,itemsep=1.5pt,label=---}
\begin{titlepage}
	\null\par\vspace{0.5cm}
	\begin{center}
		\begin{minipage}{0.75\linewidth}
			\begin{center}
				\Huge L'extension pour \TeX{} et \LaTeX{}\normalsize\par
				\fontsize{50pt}{50pt}\selectfont\bfseries\SYSname\par
				\par\vspace{5pt}\normalsize
				v\SYSver\par\vspace{5pt}
				\longfrdate\par\vspace{10pt}
				\normalsize Manuel de l'utilisateur
			\end{center}
		\end{minipage}
	\end{center}
	\vspace{0.5cm}
	\begin{center}
		Christian {\sc Tellechea}\par\small
		\href{mailto:unbonpetit@netc.fr}{\texttt{\textbf{unbonpetit@netc.fr}}}
	\end{center}
	\vspace{1cm}
	\begin{center}
		\begin{minipage}{0.8\linewidth}
			\noindent\hrulefill\par
			\hfill\textbf{\textit{RÃ©sumÃ©}}\hfill{}\medskip\par\small
				Cette petite extension met en forme des systÃ¨mes d'Ã©quations ou d'inÃ©quations oÃ¹ les termes et les signes sont alignÃ©s verticalement, tout en permettant une saisie quasi naturelle.\par
			\hrulefill
		\end{minipage}
	\end{center}
	\vspace{1cm}
	\tableofcontents
\end{titlepage}
\AddToHook{env/itemize/before}{\vskip1pt \relax}
\AddToHook{env/itemize/after}{\smallbreak}
\pagestyle{plain}
\parskip5pt plus 2 pt minus 1pt
\parindent0pt

Pour l'utiliser l'extension Â« \textsf{systeme} Â» , il faut exÃ©cuter :
\begin{itemize}
	\item {\color{blue}\verb-input systeme.tex-} lorsqu'on utilise (pdf)(Xe)(lua)\TeX;
	\item {\color{blue}\verb-\usepackage{systeme}-} dans le prÃ©ambule lorsqu'on utilise (pdf)(Xe)(lua)\LaTeX.
\end{itemize}
Les extensions \href{https://www.ctan.org/pkg/xstring}{\texttt{\textbf{xstring}}} et \href{https://www.ctan.org/pkg/simplekv}{\texttt{\textbf{simplekv}}} sont requises et chargÃ©es si cela n'a pas Ã©tÃ© le cas.

\section{Versions 0.4x}
Nouveau dans les versions 0.4x :
\begin{itemize}
	\item les inconnues peuvent dÃ©sormais se trouver dans le membre de droite oÃ¹ elles y sont triÃ©es et alignÃ©es;
	\item possibilitÃ© d'insÃ©rer une espace mathÃ©matique entre une inconnue et le coefficient qui la prÃ©cÃ¨de;
	\item il est possible de stocker dans une macro tout le code produit par la commande \verb|\systeme|;
	\item tous les rÃ©glages se font par clÃ©s/valeurs et ce qui implique la suppression de toutes les macros ou arguments optionnels permettant les rÃ©glages dans les versions prÃ©cÃ©dentes;
	\item \NEW{0.41} possibilitÃ© de spÃ©cifier des indices non numÃ©riques dans une consigne de tri manuelle;
	\item \NEW{0.41} nouvelle consigne manuelle de tri Â«\texttt{\detokenize{a_{*}}}Â» pour indiquer que l'inconnue \texttt a, quel que soit son indice, est Ã&nbsp; considÃ©rer comme inconnue;
	\item \NEW{0.41} nouvelle clÃ© \STkey{align const sign} pour contrÃ´ler si les signes des termes constants doivent Ãªtre alignÃ©s entre-eux ou bien placÃ©s au plus proche du terme constant;
	\item \NEW{0.42} nouvelle clÃ© \STkey{code before} pour exÃ©cuter un code arbitraire avant le \verb|\halign|;
	\item \NEW{0.43} nouvelle clÃ© boolÃ©enne \STkey{ignore empty eq} pour ignorer ou pas les Ã©quations vides;
	\item \NEW{0.43} nouvelle clÃ© boolÃ©enne \STkey{cr eq sep} pour faire du retour charriot le sÃ©parateur entre Ã©quations, moyennant quelques contraintes.
\end{itemize}

\textbf{Important}. La version 0.4 va crÃ©er une rupture de compatibilitÃ© avec les versions prÃ©cÃ©dentes, notamment :
\begin{itemize}
	\item si la macro \verb-\systeme- est utilisÃ©e avec un ou plusieurs arguments optionnels comme cela Ã©tait possible avec les versions antÃ©rieures;
	\item \spaceskip5pt plus 3pt minus 3pt\relax si les macros suivantes, dÃ©sormais supprimÃ©es, sont utilisÃ©es : \verb-\sysdelim-, \verb-\syseqsep-, \verb-\sysalign-, \verb-\syssignspace-, \verb-\syseqspace-, \verb-\syslineskipcoeff-, \verb-\sysequivsign-, \verb-\sysaddeqsign-, \verb-\sysremoveeqsign-, \verb-\sysextracolsign-, \verb-\syscodeextracol-, \verb-\sysautonum-, \verb-\syssubstitute- et \verb-\sysnosubstitute-.
\end{itemize}

\section{La commande \texttt{\textbackslash systeme}}
La commande principale est \verb-\systeme- dont l'argument obligatoire contient les Ã©quations sÃ©parÃ©es par une virgule :

\exemple{La commande \ttfamily\string\systeme}|un systÃ¨me : \systeme{
	2a-3b+4c=2,
	a+8b+5c=8,
	-a+2b+c=-5
}|

La commande \verb-\systeme- fonctionnera indiffÃ©remment en mode math ou non. Les Ã©quations doivent Ãªtre \emph{dÃ©veloppÃ©es}, c'est-Ã&nbsp;-dire que chaque terme est sÃ©parÃ© de son voisin par un Â«\verb-+-Â» ou un Â«\verb+-+Â». De plus, les inconnues doivent Ãªtre des lettres minuscules non accentuÃ©es, c'est-Ã&nbsp;-dire tout caractÃ¨re de Â«\verb-a-Â» Ã&nbsp; Â«\verb-z-Â». Les espaces sont ignorÃ©s dans l'argument de la macro \verb|\systeme|.

L'alignement construit sera prÃ©cÃ©dÃ© d'une accolade et aura les spÃ©cificitÃ©s suivantes :
\begin{itemize}
	\item les sÃ©parateurs de membres (signes d'Ã©galitÃ© ou d'inÃ©galitÃ©) sont alignÃ©s;
	\item les signes Â«\verb-+-Â» ou Â«\verb+-+Â» entre chaque terme des membres sont alignÃ©s;
	\item les terme du membre de gauche se trouvent dans une colonne au fer Ã&nbsp; droite et ceux du membre de droite dans une colonne au fer Ã&nbsp; gauche.
\end{itemize}

Les inconnues peuvent avoir un indice, sous rÃ©serve que celui-ci soit un nombre \emph{entier positif ou nul}\footnote{La clÃ© \STkey{sort} permet, depuis la version 0.41 de spÃ©cifier des indices non entiers.} :
\exemple{Inconnues indicÃ©es}|\systeme{
	4x_1-x_2=3,
	-x_1+5x_2=-1
}|

Si une inconnue est manquante dans une Ã©quation, la colonne de l'alignement reste vide :
\exemple{Inconnues manquantes}|\systeme{
	a-2b=3,
	b-3c=4,
	-a+4c=-1
}|

Les inconnues et les termes constants peuvent Ãªtre prÃ©sents aussi bien dans le membre de droite que celui de gauche. Les termes constants sont toujours affichÃ©s en dernier.
\exemple{Inconnues dans les deux membres}|\systeme{
	-a+c-3=-2b+3c-1,
	2b-3c=a+2b-2,
	a-b+c+1=2a-c
}|

Quel que soit l'ordre dans lequel sont entrÃ©es les inconnues lors de la saisie, elles seront triÃ©es par ordre alphabÃ©tique Ã&nbsp; l'affichage, en tenant compte de leur Ã©ventuel indice. Un signe Â«\verb-+-Â» ne sera pas affichÃ© lorsqu'il prÃ©cÃ¨de le premier terme d'une Ã©quation :
\exemple{Tri des inconnues}|\systeme{
	2y+x-3z=4,
	z-y+2x=-1,
	-2x+3z-4y=0
}|

Les macros \verb|\+| et \verb|\-| sont redÃ©finies pendant l'exÃ©cution de la macro \verb|\systeme| pour Ã©chapper Â«\verb-+-Â» et Â«\verb+-+Â», au cas oÃ¹ les coefficients doivent contenir ces signes, afin qu'ils ne soient compris comme la fin d'un terme :
\exemple{Coefficient contenant une addition ou soustraction}/\systeme{
	(2\+\sqrt2)x-(1\-\sqrt2)y=1,
	x+(1\+\sqrt2)y=-1
}/

\section{La commande \texttt{\textbackslash setsysteme}}
La macro \verb|\setsysteme| reÃ§oit dans son argument obligatoire une liste de Â« clÃ©s/valeurs Â»
\code|\setsysteme{&lt;clÃ©1&gt;=&lt;valeur1&gt; , &lt;clÃ©2&gt;=&lt;valeur2&gt;, etc}|

Les rÃ©glages concernÃ©s seront modifiÃ©s pour tout le reste du document. Pour revenir aux rÃ©glages par dÃ©faut, il faut exÃ©cuter la macro \verb|\resetsysteme|.

Pour modifier les rÃ©glages pour un seul systÃ¨me, les \verb|&lt;clÃ©s&gt;|=\verb|&lt;valeurs&gt;| doivent se trouver dans l'argument optionnel de la macro \verb|\systeme|:
\code|\systeme[&lt;clÃ©1&gt;=&lt;valeur1&gt; , &lt;clÃ©2&gt;=&lt;valeur2&gt;, etc]{code du systÃ¨me}|

Remarque : lorsqu'une \verb|&lt;valeur&gt;| contient une virgule, un crochet fermant ou un signe Ã©gal, cette \verb|&lt;valeur&gt;| \emph{doit} se trouver entre accolades afin que ces caractÃ¨res spÃ©ciaux n'interfÃ¨rent pas avec la syntaxe d'autres commandes et ne provoque une erreur de compilation.

\section{Les clÃ©s et valeurs}
Toutes les clÃ©s et pour chacune, la valeur par dÃ©faut ainsi qu'une brÃ¨ve description de leur action se trouvent ci-aprÃ¨s.

\subsection{SÃ©parateur entre Ã©quations, la clÃ© \STkey{eq sep}}
Cette clÃ© permet de choisir le sÃ©parateur entre les Ã©quations. Sa valeur par dÃ©faut est 
\code|eq sep = { , }|

Pour Ã©crire des coefficients dÃ©cimaux, il convient de redÃ©finir ce sÃ©parateur :
\exemple{SÃ©parateur entre Ã©quations}|\systeme[eq sep = \\ ]{
	1,5x-0,45y=0,7\\
	x-0,8y=1,4
}|

\subsection{Retour charriot entre Ã©quations, la clÃ© \STkey{cr eq sep}}
Afin que la saisie soit la plus naturelle possible, la clÃ© boolÃ©enne \STkey{cr eq sep} dÃ©finie par dÃ©faut Ã&nbsp;
\code|cr eq sep = false|
permet, si elle est \verb|true| de faire du retour charriot le sÃ©parateur entre Ã©quations, quelle que soit la valeur de la clÃ© \STkey{eq sep}.

Dans ce cas :
\begin{itemize}
	\item il est impossible\cprotect\footnote{Pour contourner cette limitation et si l'on comprend ce que l'on fait quant au comportement du retour charriot, on peut cependant modifier momentanÃ©ment le code de catÃ©gorie du retour charriot avant et aprÃ¨s l'exÃ©cution de la \verb|\macro| avec les macros \verb|\SYSmakecrother| et \verb|\SYSrestorecr| :
	\par\qquad\verb|\SYSmakecrother\macro{\systeme[cr eq sep = true]{...}}\SYSrestorecr|} d'utiliser la macro \verb|\systeme| dans l'argument d'une \verb|\macro| ; cela conduira Ã&nbsp; une erreur de compilation ou Ã&nbsp; des rÃ©sultats non attendus;
	\item la clÃ© \STkey{ignore empty eq} (voir ci-dessous) est mise Ã&nbsp; \verb|true| pour le systÃ¨me concernÃ©.
\end{itemize}

\exemple{Retour charriot entre Ã©quations}/\systeme[cr eq sep = true]{
	2a-c=-1
	a-2b+c=4
	-3a-b+2c=-1
}/

\subsection{Ã‰quations vides ignorÃ©es, la clÃ© \STkey{ignore empty eq}}
Cette clÃ© vaut par dÃ©faut
\code|ignore empty eq = true|
Elle peut Ãªtre rÃ©glÃ©e Ã&nbsp; \verb|false| pour tenir compte des Ã©quations vides qui alors, produisent une ligne blanche.

\exemple{Ã‰quations vides}/\systeme{
	a+b+c=1,
	a-b+c=-2,
	 ,
	a-b-c=3
}\qquad
\systeme[ignore empty eq = false]{
	a+b+c=1,
	a-b+c=-2,
	 ,
	a-b-c=3
}/

\subsection{Choix des dÃ©limiteurs, la clÃ© \STkey{delim}}
Cette clÃ© dÃ©finit les sÃ©parateurs gauche et droit du systÃ¨me. Ces dÃ©limiteurs sont mis en argument des primitives \verb|\left| et \verb|\right|. La valeur par dÃ©faut est
\code|delim = { \{ , . } |
ce qui place une accolade Ã&nbsp; gauche du systÃ¨me et rien Ã&nbsp; droite.

\exemple{Choix des dÃ©limiteurs}/\systeme[delim={[,]}]{2a+3b=5,3a-b=8}\qquad
\systeme[delim={.,|}]{2a+3b=5,3a-b=8}\qquad
\systeme[delim={(,\rfloor}]{2a+3b=5,3a-b=8}/

\subsection{Alignement des termes dans les colonnes, la clÃ© \STkey{align}}
Chaque terme est alignÃ© au fer Ã&nbsp; droite dans le membre de gauche et au fer Ã&nbsp; gauche dans celui de droite. C'est ce que spÃ©cifie par dÃ©faut \STkey{align}. Pour chaque membre, on a le choix entre \verb|r|, \verb|c| ou \verb|l|. La valeur par dÃ©faut est 
\code|align = { r , l }|

\exemple{Alignement des termes}|\systeme{3x-y=5a-b,x+4y=a+3b}
    \quad(par dÃ©faut, droite/gauche)

\systeme[align={l,l}]{3x-y=5a-b,x+4y=a+3b}
    \quad(alignement gauche/gauche)

\systeme[align={r,r}]{3x-y=5a-b,x+4y=a+3b}
    \quad(alignement droite/droite)

\systeme[align={l,r}]{3x-y=5a-b,x+4y=a+3b}
    \quad(alignement gauche/droite)

\systeme[align={c,c}]{3x-y=5a-b,x+4y=a+3b}
    \quad(alignement centrÃ©/centrÃ©)|

\subsection{Alignement des signes des termes constants, la clÃ© \STkey{align const sign}}
Par souci d'esthÃ©tique ou par goÃ»t personnel, on peut dÃ©sirer que les signes des termes constants (lorsque la composition de fait au fer Ã&nbsp; droite) ne soient pas alignÃ©s entre-eux. Cette clÃ© a pour valeur par dÃ©faut
\code|align const sign = true|
ce qui aligne toujours les signes des termes constants.

Il faut la mettre Ã&nbsp; \verb|false| pour l'effet contraire

\exemple{Alignement des signes des termes constants}|\systeme{
	2a-b+\sqrt{2}-1=0,
	a-2b+1=0
}

\systeme[align const sign=false]{
	2a-b+\sqrt{2}-1=0,
	a-2b+1=0
}|

\subsection{Liste des sÃ©parateurs de membres, la clÃ© \STkey{member sep list}}
Cette clÃ© dÃ©finit tous les ensembles de tokens qui seront compris par \textsf{systeme} comme sÃ©parateur de membres.
La valeur par dÃ©faut est
\specialcode\code|member sep list = { &lt;= , &gt;= , = , &lt; , &gt; , \leq , \geq , \leqslant , \geqslant }|

Il appartient Ã&nbsp; l'utilisateur, s'il en a le besoin, d'ajouter Ã&nbsp; cette liste d'autres possibilitÃ©s (voir ci-dessous)

\subsection{Ajout/suppression d'un sÃ©parateur de membres, les clÃ©s \STkey{add member sep} et \STkey{remove member sep}}
La clÃ© \STkey{add member sep} permet d'ajouter un signe sÃ©parateur de membres et \STkey{remove member sep} d'en supprimer un existant. Leurs valeurs par dÃ©faut sont
\code|add member sep={}
remove member sep = {}|

\exemple{Ajout de signe d'Ã©galitÃ©}|\setsysteme{add member sep = \approx}
\systeme{
	x+y\approx-6,
	-2x+3y\approx1
}|

\subsection{Substitution de sÃ©parateur de membres, la clÃ© \STkey{member sep subst}}
On spÃ©cifie avec cette clÃ© une substitutions Ã&nbsp; faire entre les tokens Â« bruts Â» compris comme sÃ©parateur de membres (voir clÃ© \STkey{member sep list}) et tokens servant Ã&nbsp; afficher le signe. Cette clÃ© ajoute une substitution Ã&nbsp; chaque invocation selon la syntaxe
\code|member sep subst = { &lt;tokens bruts&gt; , &lt;tokens pour affichage&gt; }|

Cette clÃ© est exÃ©cutÃ©e 2 fois par dÃ©faut
\specialcode\code|member sep subst = { &lt;= , \leq },
member sep subst = { &gt;= , \geq }|

\subsection{Espacements : les clÃ©s \STkey{sign space}, \STkey{member sep space}, \STkey{line skip coeff} et \STkey{coeff space}}
La clÃ© \STkey{sign space} spÃ©cifie l'espace supplÃ©mentaire qui sera ajoutÃ©e de part et d'autre de chaque signe Â«\verb|+|Â» ou Â«\verb|-|Â» compris comme sÃ©parateur de termes.

La clÃ© \STkey{member sep space} joue le mÃªme rÃ´le pour les signes sÃ©parant les membres.

L'espacement vertical entre chaque Ã©quation est multipliÃ© par le coefficient \STkey{line skip coeff}.

Les valeurs par dÃ©faut sont
\code|sign space       = 0pt,
member sep space = 0pt,
line skip coeff  = 1.25|

\exemple[55]{Espacement vertical}|\systeme{x+y=200,x-y=10}\qquad
\systeme[line skip coeff=1]{x+y=200,x-y=10}\qquad
\systeme[line skip coeff=1.75]{x+y=200,x-y=10}|

Lorsqu'une inconnue est prÃ©cÃ©dÃ©e d'un coefficient explicite (c'est-Ã&nbsp;-dire que cette inconnue ne suit pas un signe \verb|+| ou \verb|-|), la clÃ© \STkey{coeff space} permet de dÃ©finir une espace mathÃ©matique (donc impÃ©rativement exprimÃ©e en \texttt{mu}) \emph{positive} qui sera insÃ©rÃ© entre le coefficient et l'inconnue. Si la valeur spÃ©cifiÃ©e est vide, aucune espace n'est insÃ©rÃ©e. Sa valeur pas dÃ©faut est
\code|coeff space = {}|

\exemple{Espace aprÃ¨s le coefficient}|\systeme{
	2x-3y=4a-1,
	-5x+y=3a+4
}

\systeme[coeff space = 2mu ]{
	2x-3y=4a-1,
	-5x+y=3a+4
}|

\subsection{Tri des inconnues, la clÃ© \STkey{sort}}
\subsubsection{Inconnues non indicÃ©es}
Par dÃ©faut, les inconnues sont triÃ©es par ordre alphabÃ©tique, aussi bien dans le membre de droite que dans celui de gauche. On peut spÃ©cifier un tri avec la syntaxe
\code|sort = {&lt;consigne pour le membre de gauche&gt; = &lt;consigne pour le membre de droite&gt;}|

Lorsqu'une \verb|&lt;consigne&gt;| vaut Â«\verb|*|Â», le tri automatique alphabÃ©tique par dÃ©faut est en vigueur. En effet, la valeur par dÃ©faut de la clÃ© est 
\code|sort = {*=*}|

Au lieu de \verb|*|, on peut spÃ©cifier une liste d'inconnues sÃ©parÃ©es par des virgules (les espaces sont ignorÃ©s dans les consignes de tri) :
\exemple{Tri des inconnues}|Tri alphabÃ©tique : \systeme{
	x+2y-3z+t=0,
	2x-y-z+3t=4,
	2y+3z+4t=-1,
	3x-2z-2t=3
}

Tri forcÃ© : \systeme[sort={x, y, z, t = * }]{
	x+2y-3z+t=0,
	2x-y-z+3t=4,
	2y+3z+4t=-1,
	3x-2z-2t=3
}|

Toute lettre ne se trouvant pas dans la consigne de tri n'est pas considÃ©rÃ©e comme inconnue. C'est ici le cas avec $m$ dans le membre de gauche :
\exemple{Inconnues ignorÃ©es}|\systeme[sort={x, y = m, n}]{
	mx-y=1+m^2+n,
	x-m^2y=-3+2m-n^2
}|

On peut ainsi utiliser des inconnues en lettre majuscules ou grecques, qui ne sont pas autorisÃ©es par dÃ©faut :
\exemple{Inconnues majuscules ou grecques}|\systeme[sort={A, \alpha, \beta = *}]{
	A-\alpha+3\beta=4,
	2A+\alpha-\beta=0,
	-A+3\alpha-2\beta=5
}|

Cas particuliers :
\begin{itemize}
\item si une consigne de tri est vide comme dans \verb|sort{x, y={}}|, aucune lettre se sera considÃ©rÃ©e comme Ã©tant une inconnue dans le terme considÃ©rÃ© et donc, tout membre sera considÃ©rÃ© comme le terme constant ;
\item si le signe \verb|=| n'est pas contenu dans la clÃ© \STkey{sort}, les 2 consignes de tri sont considÃ©rÃ©es comme Ã©gales au contenu de la clÃ©. Ainsi, \verb|sort={x, y}| est compris comme \verb|sort={x, y=x, y}|.
\end{itemize}

\subsubsection{Inconnues indicÃ©es}
On peut indiquer une liste d'inconnues indicÃ©es dans la consigne de tri. Dans cet exemple, seules \verb|a_1| et \verb|a_3| sont considÃ©rÃ©es comme inconnues et on voit que \verb|a_2| est considÃ©rÃ© comme terme constant
\exemple{Inconnues indicÃ©es}|\systeme[ sort = {a_1, a_3={}} ]{
	2a_1-3a_2+a_3+4=-1,
	a_1-a_2-3a_3=5
}|

Il est Ã©galement possible d'indiquer dans la consigne de tri des indices non numÃ©riques :
\exemple{Indices non numÃ©riques}|\systeme[ sort = {a_n, a_{n+1}={}} ]{
	2a_n-3a_{n+1}-a_0+1=5,
	a_n-a_{n+1}+4=2
}|

On peut Ã©galement mettre \verb|x_{*}| pour indiquer que \verb|x| seul ou muni d'un indice (numÃ©rique ou non) doit Ãªtre considÃ©rÃ© comme inconnue. L'astÃ©risque \emph{doit} Ãªtre entre accolades. Dans le systÃ¨me final, l'ordre d'apparition des inconnues est celui dans lequel elles apparaissent dans le code.
\exemple{Indices quelconques}|\systeme[ sort = {x_{*}={} } ]{
	x_1-x_n+2x_0=3,
	x_0-3x_1+2x_n+1=0,
	x_n-x_0+2x_1-1=0
}|

\subsection{Colonne supplÃ©mentaire, clÃ©s \STkey{extra col sign}, \STkey{extra col pre} et \STkey{extra col post}}
Lorsqu'une Ã©quation comporte le signe Â«\verb-@-Â», tout ce qui se trouve Ã&nbsp; droite de ce caractÃ¨re sera mis dans une colonne supplÃ©mentaire au fer Ã&nbsp; gauche qui se trouvera Ã&nbsp; droite du systÃ¨me, en derniÃ¨re position.

Le signe Â«\verb-@-Â» peut Ãªtre changÃ© en un autre avec la clÃ© \STkey{extra col sign} dont la valeur par dÃ©faut est
\code|extra col sign = @|

\exemple{Colonne supplÃ©mentaire}/\systeme{
	x+y=125@L_1,
	x-y=12@L_2
}/

Cette colonne supplÃ©mentaire n'est \emph{pas} composÃ©e en mode mathÃ©matique, mais deux codes sont insÃ©rÃ©es au dÃ©but et Ã&nbsp; la fin de cette colonne. Ils sont dÃ©finis par les clÃ©s \STkey{extra col pre} et \STkey{extra col post} dont les valeurs par dÃ©faut sont
\code|extra col pre  = \kern1.5em$,
extra col post = $|

ce qui signifie qu'une espace horizontale d'1.5em est insÃ©rÃ©e et le Â«\verb-$-Â» entre en mode mathÃ©matique au dÃ©but de la colonne. Enfin, pour le second argument, Â«\verb-$-Â» termine le mode math Ã&nbsp; la fin de la colonne.

On va redÃ©finir ces deux codes pour ne pas se mettre en mode math et insÃ©rer une espace de 2.5em :
\exemple{Personnalisation de la colonne supplÃ©mentaire}/\systeme[
        extra col pre  = \kern2.5em ,
        extra col post = {} ,
        extra col sign =  | ]{
	x+y=125|somme des deux nombres,
	x-y=12 |diffÃ©rence des deux nombres
}/

\subsection{NumÃ©rotation automatique, les clÃ©s \STkey{autonum code}, \STkey{autonum continue}}
La colonne supplÃ©mentaire peut Ãªtre utilisÃ©e pour y mettre une numÃ©rotation automatique. La premiÃ¨re faÃ§on de procÃ©der est d'indiquer le schÃ©ma que doit prendre cette numÃ©rotation automatique Ã&nbsp; la premiÃ¨re ligne, sachant que le caractÃ¨re Â«\verb-*-Â» dÃ©clenche la mise en place de la numÃ©rotation automatique et sera remplacÃ© par le numÃ©ro de la ligne dans le systÃ¨me. Les autres lignes, mÃªme si elles n'ont pas de colonne supplÃ©mentaire, porteront un numÃ©ro :
\exemple{NumÃ©rotation automatique}/\systeme{x+y-z=3@L_{*},
	2x+y+z=4,
	x-y+2z=0
}/

Si on souhaite spÃ©cifier explicitement des colonnes supplÃ©mentaires aux lignes qui n'en ont pas, la numÃ©rotation automatique vient \emph{avant} le contenu explicite des colonnes supplÃ©mentaires :
\exemple{NumÃ©rotation automatique}/\systeme{
	x+y-z=3@L_{*}\quad,
	2x+y+z=4,
	x-y+2z=0
}

\systeme{
	x+y-z=3@L'_{*},
	3x+2y=7@=L_1+L_2,
	3x+y=6@=2L_1+L_3}
	/

Il est ennuyeux que l'on ne puisse mettre Â«\verb-L'_{*}=L_1-Â» Ã&nbsp; la premiÃ¨re ligne car la totalitÃ© de ce schÃ©ma et notamment la partie indÃ©sirable Â«\verb-L_1-Â» serait reproduite aux lignes suivantes. On peut donc spÃ©cifier le schÃ©ma de numÃ©rotation d'une deuxiÃ¨me faÃ§on, \emph{avant} d'Ã©crire le systÃ¨me. On utilise la clÃ© \STkey{autonum code} pour dÃ©finir ce schÃ©ma. Sa valeur par dÃ©faut est
\code|autonum code = {}|

\exemple{NumÃ©rotation automatique}/\systeme[autonum code = L_{*} ]{
	x+y-z=3,
	2x+y+z=4,
	x-y+2z=0
}

\systeme[autonum code = L'_{*}\longleftarrow ]{
	x+y-z=3@L_1,
	3x+2y=7@L_1+L_2,
	3x+y=6@2L_1+L_3
}/

Le schÃ©ma spÃ©cifiÃ© avec la clÃ© \STkey{autonum code} n'est valable \emph{que pour le prochain systÃ¨me} et sera effacÃ© ensuite, sauf si on met Ã&nbsp; \verb|true| la valeur de la clÃ© \STkey{autonum continue}, auquel cas le schÃ©ma de numÃ©rotation se poursuit pour tous les systÃ¨mes Ã&nbsp; venir. La valeur par dÃ©faut est
\code|autonum continue = false|

\exemple{NumÃ©rotation automatique persistante}/\setsysteme{
	autonum code     = L_{*},
	autonum continue = true}
\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 mettant Ã&nbsp; vide la valeur de la clÃ© \STkey {autonum code} :
\code|autonum code = {}|

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-Ã&nbsp;-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 Â«\verb-**-Â». Voici un exemple de numÃ©rotation persistante :
\exemple{NumÃ©rotation globale}/On met en Ã©vidence que \number\SYSeqnum{}
Ã©quations ont Ã©tÃ© Ã©crites jusqu'ici~:

\setsysteme{autonum code     = \hbox{eq (**)},
            autonum continue = true}
\systeme{x-y+z=3,
	2x+y+z=1,
	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}/\setsysteme{
	extra col pre = \kern1em ,
	extra col post = {}
}
\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 Ã&nbsp; tout moment rÃ©initialiser le compteur global d'Ã©quations Ã&nbsp; l'aide de la clÃ© \STkey{main eq count}:
\code|main eq count = &lt;valeur entiÃ¨re&gt;|
L'assignation ainsi effectuÃ©e est globale.

\subsection{Augmentation en hauteur et profondeur, la cle \STkey{extra height}}
L'alignement constituÃ© par le systÃ¨me peut avoir sa hauteur et sa profondeur augmentÃ©es de la valeur \emph{positive} de la clÃ© \STkey{extra height} dont la valeur par dÃ©faut est
\code|extra height = 1.5pt|

Cet ajustement permet dans certains cas que la taille des dÃ©limiteurs soit mieux adaptÃ©e Ã&nbsp; celle du systÃ¨me.

\subsection{Non alignement des termes, la clÃ© \STkey{align terms}}
Cette clÃ©, qui vaut \verb|true| par dÃ©faut, permet, si elle est assignÃ©e Ã&nbsp; \verb|false| de ne pas aligner les termes dans un mÃªme membre. Dans ce cas, seul les signes sÃ©parateurs de membres sont alignÃ©s.
\exemple{Non alignement des termes}|\systeme{
	x-3y=4a-1,
	-5x+y=a+4
}

\systeme[align terms=false]{
	x-3y=4a-1,
	-5x+y=a+4
}|

\subsection{Substitution post traitement, la clÃ© \STkey{post subst}}
Juste avant l'affichage du systÃ¨me, il est encore possible de substituer dans le code du systÃ¨me toute suite de token par une autre. On utilise pour cela la clÃ© \STkey{post subst}:
\code|post subst = {&lt;x1&gt; &lt;y1&gt; &lt;x2&gt; &lt;y2&gt;...&lt;xn&gt; &lt;yn&gt;}|
ce qui a pour effet de remplacer toutes les occurrences de \verb|&lt;x1&gt;| par \verb|&lt;y1&gt;|, celles de \verb|&lt;x2&gt;| par \verb|&lt;y2&gt;|, etc. Un ou plusieurs espaces (ignorÃ©s) peuvent se trouver entre les motifs de substitution.

La valeur de cette clÃ© est
\code|post subst = {}|


Dans cet exemple, on entre des coefficients dÃ©cimaux oÃ¹ le point est le sÃ©parateur dÃ©cimal. On va demander Ã&nbsp; ce que tous les Â«\verb-.-Â» soient remplacÃ©s par des Â«\verb-,-Â». On remplacera aussi l'inconnue $a_1$ par $x_n$, et $a_2$ par $x_{n+1}$ :
\exemple[60]{Substitution post traitement}/\systeme[post subst = {.}{,} {a_1}{x_n} {a_2}{x_{n+1}} ]{
	1.5a_1-0.5a_2=2,
	1.6a_1-2a_2=0.4
}/

\subsection{Sauvegarde du code produit dans une macro, la clÃ© \STkey{store}}
Pour sauvegarder le code rÃ©sultant de la macro \verb|systeme| dans une \verb|&lt;macro&gt;| en vue de l'utiliser Ã&nbsp; sa guise plus tard, on utilise la clÃ© \STkey{store}. Son contenu doit Ãªtre soit vide (aucune sauvegarde n'est effectuÃ©e), soit une macro \emph{seule} qui recevra le code. Toute autre valeur conduit Ã&nbsp; une erreur.

La valeur par dÃ©faut est
\code|store = {}|

Si la clÃ© contient une \verb|&lt;macro&gt;|, la commande \verb|systeme| ne produit aucun affichage et sauvegarde la totalitÃ© du code qu'elle produit dans la \verb|&lt;macro&gt;|. L'assignation est globale. AprÃ¨s avoir Ã©tÃ© utilisÃ©e par la commande \verb|\systeme|, la clÃ© \STkey{store} est rÃ©initialisÃ©e Ã&nbsp; sa valeur par dÃ©faut.

Si l'on Ã©crit
\code|\systeme[store=\mysys]{3x-2y+z=-4,
                       x+5z=2,
                       -x+y-2z=0}|
alors la macro \verb|\mysys| contient le code suivant
\begingroup
\code|\csname SYS_\ifmmode id\else enter_math\fi\endcsname{%
	\left\{%
	\vcenter{\lineskiplimit=0pt \lineskip=0pt \baselineskip1.25\normalbaselineskip
		\halign{%
			\hfil$##$&amp;%
			\hbox to12.22214pt{\hss$##$\hss}&amp;%
			\hfil$##$&amp;%
			\hbox to12.22214pt{\hss$##$\hss}&amp;%
			\hfil$##$&amp;%
			\hfil$##$\hfil&amp;%
			$##$\hfil
		\cr
			\vrule depth0pt width0pt height9.0pt%
			3x&amp;-&amp;2y&amp;+&amp;z&amp;{}={}&amp;-4%
		\cr
			x&amp;&amp;&amp;+&amp;5z&amp;{}={}&amp;2%
		\cr
			-x&amp;+&amp;y&amp;-&amp;2z&amp;{}={}&amp;0%
			\vrule height0pt width0pt depth4.0pt%
		\cr
		}%
	}\right.%
}|%
\endgroup

\subsection{Code exÃ©cutÃ© avant l'alignement, la clÃ© \STkey{code before}}
Juste avant que le \verb|\halign| n'entre en action, la valeur de la clÃ© \STkey{code before} est exÃ©cutÃ©e. Elle peut Ãªtre utile pour exÃ©cuter un code arbitraire en vue, par exemple, de faire certains rÃ©glages mathÃ©matiques effectuÃ©s par \verb|\mathcode|, \verb|\delcode| ou autre. Par dÃ©faut, la valeur de cette clÃ© est
\code|code before = \mathcode`\, "013B|
ce qui donne Ã&nbsp; la virgule des espacements corrects lorsqu'elle est utilisÃ©e comme dÃ©limiteur dÃ©cimal comme c'est l'usage en France.

\section{Exemples}
La macro \verb|\systeme| peut Ãªtre un peu dÃ©tournÃ©e de ses fins pour Ã©crire sans contrainte des calculs en ligne, oÃ¹ le signe \verb|=| est rÃ©pÃ©tÃ© au dÃ©but de chaque ligne de calcul.

Certains rÃ©glages sont cependant nÃ©cessaires (dÃ©limiteurs dÃ©sactivÃ©s, pas d'alignement des termes, alignement des colonnes, interdiction du tri automatique) :
\exemple{Calculs en ligne}|\systeme[
		delim={.,.},
		align terms=false,
		align={r,l},
		sort={{}={}}
		]{
	A=(2x-1)^2-(x-2)^2,
	=4x^2-4x+1-(x^2-4x+4),
	=4x^2-4x+1-x^2+4x-4,
	=3x^2-3,
	=3(x^2-1),
	=3(x-1)(x+1)
}|

La macro \verb|\aligncalc|, intÃ©grÃ©e dans le package \textsf{systeme}, est programmÃ©e de la faÃ§on suivante 
\code/\def\aligncalc{%
	\systeme[
		delim={.,.},
		align terms=false,
		align={r,l},
		sort={{}={}},
		extra col pre=\kern1.5em,
		extra col post={}
	]}/
Ce qui permet d'allÃ©ger la syntaxe.
\exemple{Calculs en ligne}|\aligncalc{
	D=x^2+4x-21,
	 =x^2+4x+4-4-21  @faire apparaitre $x^2+4x+4$,
	 =(x+2)^2-25     @qui se factorise en $(x+2)^2$,
	 =(x+2)^2-5^2    @diffÃ©rence de 2 carrÃ©s,
	 =(x+2+5)(x+2-5) @factorisation,
	 =(x+7)(x-3)     @rÃ©sultat final
}|

Les Ã©quations sans signe $=$ et sans second membre sont Ã©galement acceptÃ©es.
\exemple{Lignes sans second membre}|\systeme{
	-2a+b-c,
	a-5c,
	3a-2b+3c
}|

On peut ainsi, moyennant quelques rÃ©glages, mimer l'environnement \verb|cases| de \LaTeX.
\exemple[53]{Mimer 'cases'}!% https://tex.stackexchange.com/questions/366500
$ns=\systeme[
		align terms=false,
		sort={{}={}},
		align={l,l},
		extra col pre=\kern2em\hfill,
		extra col post={}
		]{
	s+s+\ldots+s          @($n$ fois) si $n&gt;0$,
	0                     @si $n=0$,
	(-s)+(-s)+\ldots+(-s) @($|n|$ fois) si $n&lt;0$%
}$!

Charge Ã&nbsp; l'utilisateur de programmer une macro qui lui est spÃ©cifique pour allÃ©ger la syntaxe.
\bigbreak
Voici des rÃ©ponses valides Ã&nbsp; quelques questions posÃ©es sur le dÃ©sormais moribond site StackExchange.
\exemple{}|% https://tex.stackexchange.com/questions/679847
\systeme[sort={x,y={}},align const sign=false]{
	x + y +2z = a,
	2x + 2y + {( 4+b )} z = b,
	-x -2z  = ab,
	y + bz = a + b
}|

\exemple{}|% https://tex.stackexchange.com/questions/685384
\systeme[sort={{}=x_{*}}]{
	x_1'(t) = x_1(t)-x_2(t)+2x_3(t),
	x_2'(t) = -2x_1(t)+5x_2(t)+2x_3(t),
	x_3'(t) = 8x_1(t)-5x_2(t)-2x_3(t)
}|

\exemple{}|% https://tex.stackexchange.com/questions/696681
\systeme[sort={x,y,z={}} ]{
	a_1 x+b_1 y+c_1 z=d_1,
	a_2 x+b_2 y+c_2 z=d_2,
	a_3 x+b_3 y+c_3 z=d_3
}|

\exemple{}|% https://tex.stackexchange.com/questions/728852
\systeme[sort = {\alpha,\beta,\gamma={}} ]{
	2 \sin \alpha - \cos \beta + 3\tan \gamma= 3,
	4 \sin \alpha + 2\cos \beta - 2\tan \gamma = 2,
	6 \sin \alpha - 3\cos \beta + \tan \gamma = 9
}|

\exemple{}|% https://tex.stackexchange.com/questions/692368
\systeme[ sort = {x_i , x_2 = {} } ]{
	x_{i}=x_0,
	x_{2}=x_1
}|

\begin{center}
	$\star$\par\nointerlineskip
	$\star$\kern0.66em$\star$
\end{center}

J'espÃ¨re que ce package vous sera utile !\par\nobreak
Merci de me signaler par \href{mailto:unbonpetit@netc.fr}{email} tout bug ou toute proposition d'amÃ©lioration.
\end{document}</pre></body></html>