<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% -*- coding: utf-8 ; -*-
\documentclass[dvipsnames]{article}% dvipsnames est pour xcolor (chargÃ© par Tikz)
\usepackage{xltxtra}
\usepackage[french]{babel}
\frenchsetup{og = Â« , fg = Â»}

\usepackage[xetex]{geometry}
\geometry{left=2.8cm,right=2.8cm,top=2.5cm,bottom=2.5cm,papersize={21cm,29.7cm}}

\usepackage{amsmath}
\usepackage{color}
\usepackage{verbatim}
\usepackage{mathtools}
\usepackage[hyperfootnotes = false]{hyperref}
\usepackage[footnotehyper]{witharrows}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{varwidth}
\usetikzlibrary{calc}
\usepackage[only,llbracket,rrbracket]{stmaryrd}

% We use \MakeShortVerb of shortvrb and not \DefineShortVerb of fancyvrb
% because we don't want the contents of short verbatim colored in gray
\usepackage{shortvrb}
\MakeShortVerb{\|}


\usepackage{fancyvrb}
\fvset{commandchars=\~\#\@,formatcom={\color{gray}}}


\usepackage{titlesec}
\titlespacing*{\section}{0pt}{6.5ex plus 1ex minus .2ex}{4.3ex plus .2ex}
\titlespacing*{\subsection}{0pt}{4.5ex plus 1ex minus .2ex}{2ex plus .2ex}


\NewDocumentCommand{\Definition}{m}
  {{\setlength{\fboxsep}{1pt}\colorbox{gray!20}{\ttfamily \vphantom{gl}#1}}}

\NewDocumentCommand{\DefinitionCommande}{m}
  {{\setlength{\fboxsep}{1pt}\colorbox{gray!20}{\ttfamily
        \vphantom{gl}\textbackslash #1}}}


\labelformat{equation}{(#1)}

\def\interitem{\vspace{7mm plus 2 mm minus 3mm}}
\def\emphase{\bgroup\color{RoyalPurple}\let\next=}



\usepackage{piton}
\PitonOptions{language = verbatim, detected-commands = {emph,textsl}, splittable = 4}
\SetPitonStyle{ Number = , Comment = }

\ExplSyntaxOn

\dim_new:N \l__pantigny_width_dim 

\keys_define:nn { pantigny }
  { width .dim_set:N = \l__pantigny_width_dim }

\NewPitonEnvironment { Code } { O { } }
  { 
    \medskip
    \char_set_catcode_other:N |
    \cs_set_eq:NN \emph \emphase
    \dim_zero:N \l__pantigny_width_dim 
    \keys_set:nn { pantigny } { #1 }
    \color{gray}
    \dim_compare:nNnT \l__pantigny_width_dim &gt; \c_zero_dim 
      { 
        \PitonOptions { width = \l__pantigny_width_dim } 
        \begin{minipage}[c]{\l__pantigny_width_dim} 
      }
  }
  { 
    \dim_compare:nNnT \l__pantigny_width_dim &gt; \c_zero_dim 
      { \end{minipage} }
    \medskip
  }

\ExplSyntaxOff  




\skip \footins = 2 \bigskipamount

\usepackage[hyperfootnotes = false]{hyperref}

\hypersetup
  {
    pdfinfo = 
      {
        Title = Lâ€™extension witharrows ,
        Subject = Une extension pour plain-TeX et LaTeX  ,
        Author = F. Pantigny 
      }
  }

\NewDocumentEnvironment {scope} {} {} {}

\NewDocumentCommand {\pkg} {m} {\textsf{#1}}
\NewDocumentCommand {\cls} {m} {\textsf{#1}}

\setlength{\parindent}{0pt}

\begin{document}


\VerbatimFootnotes

\title{L'extension \pkg{witharrows} pour plain-TeX et LaTeX\thanks{Ce document correspond Ã&nbsp; la 
version~\myfileversion\space de \pkg{witharrows}, Ã&nbsp; la date du~\myfiledate.}} 
\author{F. Pantigny \\ \texttt{fpantigny@wanadoo.fr}}  

\maketitle


\begin{abstract}
L'extension \pkg{witharrows} fournit des environments |{WithArrows}| et |{DispWithArrows}|
similaires aux environnements |{aligned}| et |{align}| de l'extension \pkg{amsmath} mais
avec la possibilitÃ© de dessiner des flÃ¨ches sur le cÃ´tÃ© droit. Ces flÃ¨ches sont
habituellement utilisÃ©es pour donner des explications concernant le calcul mathÃ©matique
prÃ©sentÃ©.
\end{abstract}


\vspace{1cm} L'extension LaTeX \pkg{witharrows} est entiÃ¨rement contenue dans le fichier
|witharrows.sty|. Ce fichier peut Ãªtre placÃ© dans le rÃ©pertoire courant ou dans une
arborescence |texmf|. Le mieux reste nÃ©anmoins d'installer \pkg{witharrows} avec une
distribution TeX comme MiKTeX, TeX~Live ou MacTeX.

\medskip
En fait, \pkg{witharrows} est aussi une extension utilisable avec plain-TeX et dans ce
cas, le seul fichier nÃ©cessaire est le fichier |witharrows.tex| : voir Ã&nbsp; ce sujet
p.~\pageref{plain-TeX}. Dans la suite, on dÃ©crira l'extension LaTeX.

\medskip
Cette extension peut Ãªtre utilisÃ©e avec |xelatex|, |lualatex|, |pdflatex| mais aussi avec
le cheminement classique |latex|-|dvips|-|ps2pdf| (ou Adobe Distiller). \textsl{NÃ©anmoins,
  le fichier witharrows-french.tex de la prÃ©sente documentation ne peut Ãªtre compilÃ©
  qu'avec LuaLaTeX.} L'extension \pkg{witharrows} charge les extensions \pkg{l3keys2e},
\pkg{tikz}, \pkg{varwidth} ainsi que les bibliothÃ¨ques Tikz \pkg{arrows.meta} et
\pkg{bending}. L'utilisateur final n'a qu'Ã&nbsp; charger l'extension \pkg{witharrows} avec
l'instruction habituelle : |\usepackage{witharrows}|.

\medskip
Les flÃ¨ches sont tracÃ©es avec Tikz et donc \textbf{plusieurs compilations peuvent Ãªtre
  nÃ©cessaires}.\footnote{Si vous utilisez Overleaf, Overleaf effectue automatiquement un
  nombre de compilations suffisant (en utilisant |latexmk|).}

\bigskip
Cette extension fournit un environnement \Definition{\{WithArrows\}} pour construire des
alignements d'Ã©quations avec des flÃ¨ches pour les explications sur le cÃ´tÃ© droit.

\begin{Code}
$\begin{WithArrows}
A &amp; = (a+1)^2 \emph{\Arrow{on dÃ©veloppe}} \\
  &amp; = a^2 + 2a + 1  % &lt;------ ne pas mettre de \\ ici
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1  
\end{WithArrows}$



\medskip
La flÃ¨che a Ã©tÃ© tracÃ©e avec la commande \DefinitionCommande{Arrow} dans la rangÃ©e dont la
flÃ¨che part. La commande |\Arrow| doit Ãªtre utilisÃ©e dans la seconde colonne (le mieux est
de la mettre Ã&nbsp; la fin de la ligne comme dans l'exemple prÃ©cÃ©dent).


\medskip
L'environnement |{WithArrows}| est proche de l'environnement |{aligned}|
de \pkg{amsmath}. L'extension \pkg{witharrows} propose aussi des environnements
|{DispWithArrows}| et |{DispWithArrows*}| qui sont similaires aux environnements |{align}|
et |{align*}| de l'extension \pkg{amsmath}: cf. p.~\pageref{DispWithArrows}.


\section{Options pour la forme des flÃ¨ches}

La commande |\Arrow| a plusieurs options. Ces options peuvent Ãªtre placÃ©es entre crochets,
avant, ou aprÃ¨s, l'argument obligatoire.

\medskip
L'option \Definition{jump} indique le nombre\footnote{Il n'est pas possible de donner une
  valeur nÃ©gative Ã&nbsp; |jump|. Voir plus loin (p.~\pageref{Backwards}) la maniÃ¨re de tracer
  une flÃ¨che qui remonte.} de rangÃ©es que la flÃ¨che doit sauter (la valeur initiale est,
bien entendu,~$1$).


\begin{Code}
$\begin{WithArrows}
A &amp; = \bigl((a+b)+1\bigr)^2 \Arrow[\emph{jump=2}]{on dÃ©veloppe} \\
  &amp; = (a+b)^2 +  2(a+b) +1 \\
  &amp; = a^2 + 2ab + b^2 + 2a + 2b +1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = \bigl((a+b)+1\bigr)^2 \Arrow[jump=1+1]{on dÃ©veloppe} \\
  &amp; = (a+b)^2 + 2(a+b) +1 \\
  &amp; = a^2 + 2ab + b^2 + 2a + 2b +1 
\end{WithArrows}$

\interitem
Il est possible de faire partir plusieurs flÃ¨ches d'une mÃªme rangÃ©e.
\begin{Code}
$\begin{WithArrows}
A &amp; = \bigl((a+b)+1\bigr)^2 \emph{\Arrow{}\Arrow{}[jump=2]} \\
  &amp; = (a+b)^2 + 2(a+b) +1 \\
  &amp; = a^2 + 2ab + b^2 + 2a + 2b +1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = \bigl((a+b)+1\bigr)^2 \Arrow{}\Arrow{}[jump=2] \\
  &amp; = (a+b)^2 + 2(a+b) +1 \\
  &amp; = a^2 + 2ab + b^2 + 2a + 2b +1 
\end{WithArrows}$

\interitem L'option \Definition{xoffset} dÃ©cale la flÃ¨che vers la droite (habituellement,
on ne souhaite pas que les flÃ¨ches soient collÃ©es au texte). La valeur initiale de
|xoffset| est de $3$~mm.
\begin{Code}
$\begin{WithArrows}
A &amp; = \bigl((a+b)+1\bigr)^2 
\Arrow[\emph{xoffset=1cm}]{avec \texttt{xoffset=1cm}} \\
  &amp; = (a+b)^2 + 2(a+b) +1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = \bigl((a+b)+1\bigr)^2 
\Arrow[xoffset=1cm]{avec \texttt{xoffset=1cm}} \\
  &amp; = (a+b)^2 + 2(a+b) +1 
\end{WithArrows}$


\interitem 
Les flÃ¨ches sont tracÃ©es avec Tikz. C'est pourquoi la commande |\Arrow| a une option
\Definition{tikz} qui peut Ãªtre utilisÃ©e pour donner Ã&nbsp; la flÃ¨che (en fait, Ã&nbsp; la commande
|\path| de Tikz) les options proposÃ©es par Tikz pour une telle flÃ¨che. L'exemple suivant
fournit une flÃ¨che en trait Ã©pais. 
\begin{Code}
$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow[\emph{tikz=thick}]{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow[tikz=thick]{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$

\interitem 
Il est Ã©galement possible de changer les pointes de flÃ¨che. Par exemple, nous pouvons
tracer une flÃ¨che qui remonte vers le haut avec l'option Tikz~|&lt;-|.\label{Backwards}

\begin{Code}
$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow\emph{[tikz=&lt;-]}{on factorise} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow[tikz=&lt;-]{on factorise} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$

\interitem 
Il est aussi possible de supprimer les deux pointes de flÃ¨che avec l'option Tikz
Â«|-|Â».\par\nobreak
\begin{Code}
$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow[\emph{tikz=-}]{trÃ¨s classique} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow[tikz=-]{trÃ¨s classique} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$

\interitem
Pour avoir des flÃ¨ches droites et non incurvÃ©es, il convient d'utiliser l'option Tikz 
Â«|bend left = 0|Â».
\begin{Code}
$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow\emph{[tikz={bend left=0}]}{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow[tikz={bend left=0}]{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$

\smallskip 
En fait, il est possible de modifier de maniÃ¨re plus drastique la forme des flÃ¨ches avec
l'option |tikz-code| (prÃ©sentÃ©e p.~\pageref{tikz-code}).

\interitem
Il est possible d'utiliser l'option Â«|text width|Â» pour contrÃ´ler la largeur du texte
associÃ© Ã&nbsp; la flÃ¨che. 
\newcounter{fnnohyphen} \setcounter{fnnohyphen}{\thefootnote}
%
\begin{Code}
$\begin{WithArrows}
A &amp; = \bigl((a+b)+1\bigr)^2 
\Arrow[jump=2,\emph{tikz={text width=5.3cm}}]{Nous avons dÃ©veloppÃ©...} \\
  &amp; = (a+b)^2 + 2(a+b) +1 \\
  &amp; = a^2 + 2ab + b^2 + 2a + 2b +1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = \bigl((a+b)+1\bigr)^2 
\Arrow[jump=2,tikz={text width=5.3cm}]{Nous avons dÃ©veloppÃ© en deux Ã©tapes 
                                       mais il aurait Ã©tÃ© plus habile
                                       d'utiliser la formule du multinÃ´me.} \\
&amp; = (a+b)^2 + 2(a+b) +1 \\
&amp; = a^2 + 2ab + b^2 + 2a + 2b +1
\end{WithArrows}$


\bigskip
Dans les environnements |{DispWithArrows}| et |{DispWithArrows*}|, il y a une
option |wrap-lines|. Lorsque cette option est utilisÃ©e, les lignes des Ã©tiquettes sont
automatiquement coupÃ©es sur la marge droite : voir p.~\pageref{DispWithArrows}.

\interitem
Si on veut changer la fonte du texte associÃ© Ã&nbsp; une flÃ¨che, on peut, bien entendu, placer
une commande comme |\bfseries|, |\large| ou |\sffamily| au dÃ©but du texte. Mais, par
dÃ©faut, les Ã©tiquettes sont composÃ©es avec une combinaison de |\small| et |\itshape|. En
ajoutant |\bfseries| au dÃ©but du texte, on ne va pas supprimer le |\small| et le
|\itshape| et, par consÃ©quent, on aura un texte en gras, italique et petite taille.
%
\begin{Code}
$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow{\emph{\bfseries} on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow{\bfseries on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$

\interitem 
Il est possible de placer des commandes |\\| dans le texte pour forcer des retours Ã&nbsp; la ligne\footnote{Par
dÃ©faut, ce n'est pas possible dans un nÅ“ud Tikz. NÃ©anmoins, dans \pkg{witharrows},
les nÅ“uds sont construits avec l'option |align=left|, et, ainsi, cela devient possible.}. NÃ©anmoins, si on utilise des commandes |\\|, une instruction de fonte placÃ©e au dÃ©but
du texte aura un effet seulement jusqu'Ã&nbsp; la premiÃ¨re occurrence de~|\\| (comme
dans un environnement |{tabular}|). C'est pourquoi Tikz fournit une option
\Definition{font} pour modifier la fonte de tout le texte de l'Ã©tiquette. Cette fois-ci, si on
utilise une option |tikz={font={\bfseries}}|, la spÃ©cification par dÃ©faut constituÃ©e par
|\small| et |\itshape| va Ãªtre Ã©crasÃ©e. 
%
\begin{Code}
$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow[\emph{tikz={font={\bfseries}}}]{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow[tikz={font={\bfseries}}]{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$

\medskip
Si on veut exactement le mÃªme rÃ©sultat que prÃ©cÃ©demment, on doit donner Ã&nbsp; l'option |font|
la valeur |\itshape\small\bfseries|.


\interitem 
Presque toutes les options peuvent Ãªtre donnÃ©es entre crochets Ã&nbsp; l'environnement
|{WithArrows}|. Il ne doit pas y avoir d'espace entre le |\begin{WithArrows}| et le
crochet ouvrant (|[|) des options de l'environnement. Ces options s'appliquent Ã&nbsp; toutes
les flÃ¨ches de l'environnement.\footnote{Elles s'appliquent aussi aux environnements
  imbriquÃ©s dans un environnement |{WithArrows}| donnÃ© (avec des exceptions attendues pour
  les options |interline|, |code-before| et |code-after|).}
%
\begin{Code}
$\begin{WithArrows}[\emph{tikz=blue}]
A &amp; = \bigl((a+b)+1\bigr)^2 \Arrow{premier dÃ©veloppement} \\
  &amp; = (a+b)^2 + 2(a+b) +1 \Arrow{second dÃ©veloppement} \\
  &amp; = a^2 + 2ab + b^2 + 2a + 2b +1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}[tikz=blue]
A &amp; = \bigl((a+b)+1\bigr)^2 \Arrow{premier dÃ©veloppement} \\
  &amp; = (a+b)^2 + 2(a+b) +1 \Arrow{second dÃ©veloppement} \\
  &amp; = a^2 + 2ab + b^2 + 2a + 2b +1 
\end{WithArrows}$


\interitem
L'environnement |{WithArrows}| a une option \Definition{displaystyle}. Avec cette option,
tous les Ã©lÃ©ments sont composÃ©s en |\displaystyle| (comme dans un environnement
|{aligned}| de l'extension \pkg{amsmath}).

\medskip
Sans l'option |displaystyle|:
%
\begin{Verbatim}
$\begin{WithArrows}
\int_0^1 (x+1)^2 dx 
&amp; = \int_0^1 (x^2+2x+1) dx
\Arrow{linÃ©aritÃ© de l'intÃ©gration}     \\
&amp; = \int_0^1 x^2 dx + 2 \int_0^1 x dx + \int_0^1 dx \\
&amp; = \frac{1}{3} + 2\frac{1}{2} + 1 \\
&amp; = \frac{7}{3}
\end{WithArrows}$
\end{Verbatim}

$\begin{WithArrows}
\int_0^1 (x+1)^2 dx 
&amp; = \int_0^1 (x^2+2x+1) dx
\Arrow{linÃ©aritÃ© de l'intÃ©gration}     \\
&amp; = \int_0^1 x^2 dx + 2 \int_0^1 x dx + \int_0^1 dx \\
&amp; = \frac{1}{3} + 2\frac{1}{2} + 1 \\
&amp; = \frac{7}{3}
\end{WithArrows}$


\medskip
Le mÃªme exemple avec l'option |displaystyle|:\par\nobreak

$\begin{WithArrows}[displaystyle]
\int_0^1 (x+1)^2 dx 
&amp; = \int_0^1 (x^2+2x+1) dx
\Arrow{linÃ©aritÃ© de l'intÃ©gration}     \\
&amp; = \int_0^1 x^2 dx + 2 \int_0^1 x dx + \int_0^1 dx \\
&amp; = \frac{1}{3} + 2\frac{1}{2} + 1 \\
&amp; = \frac{7}{3}
\end{WithArrows}$



\interitem 
Presque toutes les options peuvent aussi Ãªtre fixÃ©es au niveau du document avec la
commande \DefinitionCommande{WithArrowsOptions}. Dans ce cas, la portÃ©e des dÃ©clarations
est le groupe TeX courant (de telles dÃ©clarations sont parfois qualifiÃ©es de
Â«semi-globalesÂ»). Par exemple, si nous voulons que tous les environnements |{WithArrows}|
soient composÃ©s en |\displaystyle| avec des flÃ¨ches bleues, nous pouvons Ã©crire
|\WithArrowsOptions{displaystyle,tikz=blue}|.\footnote{Il est aussi possible de configurer
  \pkg{witharrows} en modifiant le style Tikz |WithArrows/arrow| qui est le style utilisÃ©
  par \pkg{witharrows} lors du tracÃ© d'une flÃ¨che. Par exemple, pour avoir les Ã©tiquettes
  en bleu et en caractÃ¨res droits, on peut utiliser l'instruction suivante :
  |\tikzset{WithArrows/arrow/.append style = {blue,font = {}}}|.}

\begin{Code}
\emph{\WithArrowsOptions{displaystyle,tikz=blue}}
$\begin{WithArrows}
\sum_{i=1}^n (x_i+1)^2 
&amp; = \sum_{i=1}^n (x_i^2+2x_i+1) \Arrow{par linÃ©aritÃ©}\\
&amp; = \sum_{i=1}^n x_i^2 + 2\sum_{i=1}^nx_i+ n
\end{WithArrows}$
\end{Code}

\begin{scope}
\WithArrowsOptions{displaystyle,tikz=blue}
$\begin{WithArrows}
\sum_{i=1}^n (x_i+1)^2 
&amp; = \sum_{i=1}^n (x_i^2+2x_i+1) \Arrow{par linÃ©aritÃ©}\\
&amp; = \sum_{i=1}^n x_i^2 + 2\sum_{i=1}^nx_i+ n
\end{WithArrows}$
\end{scope}


\interitem 
La commande |\Arrow| est reconnue seulement dans les environnements de \pkg{witharrows}.
Si on dispose d'une commande |\Arrow| prÃ©cÃ©demment dÃ©finie, il est possible de continuer Ã&nbsp;
l'utiliser Ã&nbsp; l'extÃ©rieur des environnements de \pkg{witharrows}.

NÃ©anmoins, une commande |\Arrow| dÃ©finie prÃ©cÃ©demment pourrait encore Ãªtre utile dans un
environnement |{WithArrows}|. Si vous voulez l'utiliser dans un tel environnement, il est
possible de changer le nom de la commande |\Arrow| de l'extension \pkg{witharrows} grÃ¢ce Ã&nbsp;
une option \Definition{command-name} dÃ©diÃ©e. Le nouveau nom de la commande doit Ãªtre
fourni Ã&nbsp; l'option \emph{sans} la contre-oblique.
%
\begin{Code}
\NewDocumentCommand {\Arrow} {} {\longmapsto}
$\begin{WithArrows}[~emphase#command-name=Explication@]
f &amp; = \bigl(x \Arrow (x+1)^2\bigr)
\emph{\Explication{on travaille directement sur les fonctions}}\\
&amp; = \bigl(x \Arrow x^2+2x+1\bigr)
\end{WithArrows}$
\end{Code}
%
\begin{scope}
\NewDocumentCommand {\Arrow} {} {\longmapsto}
$\begin{WithArrows}[command-name=Explication]
f &amp; = \bigl(x \Arrow (x+1)^2\bigr)
\Explication{on travaille directement sur les fonctions}\\
&amp; = \bigl(x \Arrow x^2+2x+1\bigr)
\end{WithArrows}$
\end{scope}


\interitem 
L'environnement |{WithArrows}| fournit aussi deux options \Definition{code-before} et
\Definition{code-after} pour du code LaTeX qui sera exÃ©cutÃ© au dÃ©but et Ã&nbsp; la fin de
l'environnement. Ces options ne sont pas conÃ§ues pour Ãªtre utilisÃ©es comme des
\emph{hooks} (elles sont disponibles uniquement au niveau de l'environnement et ne
s'appliquent pas aux environnements imbriquÃ©s).
%
\begin{Code}
$\begin{WithArrows}[\emph{code-before = \color{blue}}]
A &amp; = (a+b)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2ab + b^2 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}[code-before = \color{blue}]
A &amp; = (a+b)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2ab + b^2 
\end{WithArrows}$

\medskip 
Des commandes spÃ©ciales sont disponibles dans le |code-after|: une commande
\DefinitionCommande{WithArrowsNbLines} qui indique le nombre de lignes (=rangÃ©es) de
l'environnement courant (pour TeX, il s'agit d'une commande et non d'un compteur), une
forme spÃ©ciale de la commande |\Arrow| et la commande |\MultiArrow| : ces deux derniÃ¨res
commandes sont dÃ©crites Ã&nbsp; partir de la page~\pageref{NestedEnv}.

\section{Nombre et formats des colonnes}

Jusqu'Ã&nbsp; prÃ©sent, nous n'avons utilisÃ© l'environnement |{WithArrows}| qu'avec deux
colonnes. NÃ©anmoins, il est possible de l'utiliser avec un nombre arbitraire de colonnes
grÃ¢ce Ã&nbsp; l'option \Definition{format}. La valeur donnÃ©e Ã&nbsp; cette option est similaire au
prÃ©ambule d'un environnement |{array}|: il s'agit d'une sÃ©quence de lettres |r|, |c| et
|l| mais aussi |R|, |C| et |L|.

\smallskip
Les lettres |R|, |C| et |L| placent des groupes vides |{}| qui permettent un espacement
correct lorsque ces colonnes contiennent des symboles de type |\mathrel| (comme $=$,
$\le$, etc.) ou |\mathbin| (comme $+$, $Ã—$, etc.). Ce systÃ¨me est inspirÃ© par
l'environnement |{IEEEeqnarray}| de \pkg{IEEEtrantools}.

\smallskip
La valeur initiale du paramÃ¨tre |format| est, en fait, |rL|.

\bigskip
Par exemple, si on veut seulement une colonne alignÃ©e Ã&nbsp; gauche, on peut utiliser l'option
|format=l|.
\begin{Code}
$\begin{WithArrows}[\emph{format = l}]
f(x) \ge g(x) \Arrow{on Ã©lÃ¨ve les deux membres au carrÃ©} \\
f(x)^2 \ge g(x)^2 \Arrow{on fait tout passer Ã&nbsp; gauche} \\
f(x)^2 - g(x)^2 \ge 0 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}[format = l]
f(x) \ge g(x) \Arrow{on Ã©lÃ¨ve les deux membres au carrÃ©} \\
f(x)^2 \ge g(x)^2 \Arrow{on fait tout passer Ã&nbsp; gauche} \\
f(x)^2 - g(x)^2 \ge 0 
\end{WithArrows}$

\interitem
Dans l'exemple suivant, on utilise cinq colonnes toutes centrÃ©es (l'environnement
|{DispWithArrows*}| utilisÃ© est prÃ©sentÃ© p.~\pageref{DispWithArrows}).

\begin{Code}
\begin{DispWithArrows*}[\emph{format = cCcCc},
                        wrap-lines,
                        interline=1mm]
k &amp; \;\le\; &amp; t &amp; \;\le\; &amp; k+1 \\
\frac{1}{k+1} &amp; \le &amp; \frac{1}{t} &amp; \le &amp; \frac{1}{k} 
\Arrow{nous pouvons intÃ©grer les inÃ©galitÃ©s puisque $k \leq k+1$ } \\
\int\limits_k^{k+1} \frac{dt}{k+1} 
&amp; \le &amp; \int\limits_k^{k+1} \frac{dt}{t} 
&amp; \le &amp; \int\limits_k^{k+1} \frac{dt}{k} \\
\frac{1}{k+1} &amp; \le &amp; \ln(k+1)-\ln(k) &amp; \le &amp; \frac{1}{k} 
\end{DispWithArrows*}
\end{Code}
\begin{DispWithArrows*}[format = cCcCc,
                        wrap-lines,
                        interline=1mm]
k &amp; \;\le\; &amp; t &amp; \;\le\; &amp; k+1 \\
\frac{1}{k+1} &amp; \le &amp; \frac{1}{t} &amp; \le &amp; \frac{1}{k} 
\Arrow{nous pouvons intÃ©grer les inÃ©galitÃ©s puisque $k \leq k+1$} \\
\int\limits_k^{k+1} \frac{dt}{k+1} 
&amp; \le &amp; \int\limits_k^{k+1} \frac{dt}{t} 
&amp; \le &amp; \int\limits_k^{k+1} \frac{dt}{k} \\
\frac{1}{k+1} &amp; \le &amp; \ln(k+1)-\ln(k) &amp; \le &amp; \frac{1}{k} 
\end{DispWithArrows*}


\section{Positionnement prÃ©cis des flÃ¨ches}

L'environnement |{WithArrows}| construit, lors de la composition du tableau, deux sÃ©ries
de nÅ“uds reprÃ©sentÃ©s en rouge dans l'exemple suivant.\footnote{L'option
  \Definition{show-nodes} peut Ãªtre utilisÃ©e pour visualiser ces nÅ“uds. Les nÅ“uds sont en
  fait des nÅ“uds Tikz de forme rectangulaire et de largeur nulle. Une flÃ¨che entre deux
  nÅ“uds part de l'ancre sud (\emph{south anchor}) du premier nÅ“ud et arrive Ã&nbsp; l'ancre nord
  (\emph{north anchor}) du deuxiÃ¨me nÅ“ud.}


\smallskip
$\begin{WithArrows}[displaystyle,show-nodes]
I
&amp; = \int_{\frac{\pi}{4}}^0 \ln\Bigl(1+\tan\left(\tfrac{\pi}{4}-u\right)\Bigr)(-d u) \\
&amp; = \int_0^{\frac{\pi}{4}} \ln\Bigl(1+\tan\left(\tfrac{\pi}{4}-u\right)\Bigr)d u \\
&amp; = \int_0^{\frac{\pi}{4}}\ln\left(1+\frac{1-\tan u}{1+\tan u}\right)\, d u \\
&amp; =\int_0^{\frac{\pi}{4}}\ln\left(\frac{1+\tan u+1-\tan u}{1+\tan u}\right) d u \\
&amp; =\int_0^{\frac{\pi}{4}} \ln\left(\frac{2}{1+\tan u}\right)\, d u\\
&amp; =\int_0^{\frac{\pi}{4}}\bigl(\ln2-\ln(1+\tan u)\bigr)\, d u \\
&amp; =\frac{\pi}{4}\ln2-\int_0^{\frac{\pi}{4}}\ln(1+\tan u)\, d u  \\
&amp; =\frac{\pi}{4}\ln2-I 
\end{WithArrows}$

\bigskip
Les nÅ“uds sur la gauche sont Ã&nbsp; la fin de chaque ligne de texte. Ces nÅ“uds seront appelÃ©s
\emph{nÅ“uds de gauche}. Les nÅ“uds du cÃ´tÃ© droit sont alignÃ©s verticalement sur le bord
droit de l'alignement d'Ã©quations. Ces nÅ“uds seront appelÃ©s \emph{nÅ“uds de droite}.


Par dÃ©faut, les flÃ¨ches utilisent les nÅ“uds de droite. Nous dirons que ces flÃ¨ches sont
dans le mode \Definition{rr} (\emph{r} for \emph{right} en anglais). Ces flÃ¨ches sont
verticales (nous dirons qu'une flÃ¨che est \emph{verticale} lorsque ses deux extrÃ©mitÃ©s
sont Ã&nbsp; la mÃªme abscisse).



\smallskip
NÃ©anmoins, il est possible d'utiliser les nÅ“uds de gauche, ou une combinaison de nÅ“uds de
gauche et de droite avec l'une des options \Definition{lr}, \Definition{rl} et
\Definition{ll} (\emph{l} for \emph{left} en anglais). Ces flÃ¨ches sont, la plupart du
temps, non verticales. 


Ainsi\enskip
$\begin{WithArrows}[displaystyle]
I
&amp; = \int_{\frac{\pi}{4}}^0 \ln\Bigl(1+\tan\left(\tfrac{\pi}{4}-u\right)\Bigr)(-d u) 
\Arrow[lr]{Cette flÃ¨che utilise une option \texttt{lr}.}\\
&amp; = \int_0^{\frac{\pi}{4}} \ln\Bigl(1+\tan\left(\tfrac{\pi}{4}-u\right)\Bigr)d u \\
&amp; = \int_0^{\frac{\pi}{4}}\ln\left(1+\frac{1-\tan u}{1+\tan u}\right)\, d u \\
&amp; =\int_0^{\frac{\pi}{4}}\ln\left(\frac{1+\tan u+1-\tan u}{1+\tan u}\right) d u 
\Arrow[ll,jump=2,tikz={text width = 5cm}]{Cette flÃ¨che utilise une option \texttt{ll} 
et une option \texttt{jump} fixÃ©e Ã&nbsp; $2$}\\ 
&amp; =\int_0^{\frac{\pi}{4}} \ln\left(\frac{2}{1+\tan u}\right)\, d u\\
&amp; =\int_0^{\frac{\pi}{4}}\bigl(\ln2-\ln(1+\tan u)\bigr)\, d u \\
&amp; =\frac{\pi}{4}\ln2-\int_0^{\frac{\pi}{4}}\ln(1+\tan u)\, d u  \\
&amp; =\frac{\pi}{4}\ln2-I 
\end{WithArrows}$


\interitem 
Il y a aussi une option nommÃ©e \Definition{i} (\emph{i} pour \emph{intermÃ©diaire}). Avec cette option, la flÃ¨che est
verticale et calÃ©e Ã&nbsp; gauche.

\begin{Code}
$\begin{WithArrows}
(a+b)(a+ib)(a-b)(a-ib) 
&amp; = (a+b)(a-b)\cdot(a+ib)(a-ib) \\
&amp; = (a^2-b^2)(a^2+b^2) \Arrow\emph{[i]}{parce que $(x-y)(x+y)=x^2-y^2$}\\
&amp; = a^4-b^4 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
(a+b)(a+ib)(a-b)(a-ib) 
&amp; = (a+b)(a-b)\cdot(a+ib)(a-ib) \\
&amp; = (a^2-b^2)(a^2+b^2) \Arrow[i]{parce que \((x-y)(x+y)=x^2-yÂ²\)}\\
&amp; = a^4-b^4 
\end{WithArrows}$


\interitem 
L'environnement |{WithArrows}| propose aussi une option \Definition{group}. Avec cette option,
\emph{toutes} les flÃ¨ches de l'environnement sont regroupÃ©es sur une mÃªme verticale calÃ©e Ã&nbsp; gauche.
\label{group}
%
\begin{Code}
$\begin{WithArrows}[\emph{displaystyle,group}]
2xy'-3y=\sqrt{x}
&amp; \Longleftrightarrow 2x(K'y_0+Ky_0')-3Ky_0 = \sqrt{x} \\
&amp; \Longleftrightarrow 2xK'y_0 + K(2xy_0'-3y_0) = \sqrt{x} \\
&amp; \Longleftrightarrow 2x K'y_0 = \sqrt{x} \Arrow{...}\\
...
\end{WithArrows}$
\end{Code}


$\begin{WithArrows}[displaystyle,group]
2xy'-3y=\sqrt{x}
&amp; \Longleftrightarrow 2x(K'y_0+Ky_0')-3Ky_0 = \sqrt{x} \\
&amp; \Longleftrightarrow 2xK'y_0 + K(2xy_0'-3y_0) = \sqrt{x} \\
&amp; \Longleftrightarrow 2x K'y_0 = \sqrt{x} \Arrow{on remplace $y_0$ par sa valeur}\\
&amp; \Longleftrightarrow 2xK'x^{\frac{3}{2}} = x^{\frac{1}{2}} \Arrow{simplification par $x$}\\
&amp; \Longleftrightarrow K' = \tfrac{1}{2x^2} \Arrow{on primitive}\\
&amp; \Longleftrightarrow K = -\tfrac{1}{2x} 
\end{WithArrows}$


\bigskip
L'environnement |{WithArrows}| fournit encore une autre option, nommÃ©e \Definition{groups}
(avec un \emph{s} dans le nom). Avec cette option, les flÃ¨ches sont divisÃ©es en plusieurs
Â«groupesÂ». Chaque groupe est un ensemble de flÃ¨ches connectÃ©es entre elles\footnote{Plus
  prÃ©cisÃ©ment : pour chaque flÃ¨che $a$, notons $i(a)$ le numÃ©ro de sa rangÃ©e de dÃ©part et
  $f(a)$ le numÃ©ro de sa rangÃ©e d'arrivÃ©e ; pour deux flÃ¨ches $a$ et $b$, nous noterons
  $a \sim b$ lorsque
  $\llbracket i(a),f(a)\rrbracket \cap \llbracket i(b),f(b)\rrbracket \neq \varnothing$ ;
  les groupes sont les classes d'Ã©quivalence de la clÃ´ture transitive de la relation
  $\sim$.}. Toutes les flÃ¨ches d'un mÃªme groupe sont placÃ©es sur une mÃªme verticale qui
est calÃ©e Ã&nbsp; gauche.


\bigskip
$\begin{WithArrows}[groups]
A &amp; = B \Arrow{un} \\
  &amp; = C+D \Arrow{deux} \\
  &amp; = D' \\
  &amp; = E+F+G+H+I \\
  &amp; = K + L + M \Arrow{trois}\\
  &amp; = N \Arrow{quatre}\\
  &amp; = O
\end{WithArrows}$

\bigskip 
Dans un environnement qui utilise l'option |group| ou l'option |groups|, il est encore
possible de donner une option de position (|ll|, |lr|, |rl|, |rr| ou |i|) Ã&nbsp; une flÃ¨che
individuelle\footnote{Une telle flÃ¨che est qualifiÃ©e d'\emph{indÃ©pendante}
  (\emph{independent} en anglais) dans la documentation technique.}. Une telle flÃ¨che sera
tracÃ©e indÃ©pendamment des groupes. Il est aussi possible de commencer un nouveau groupe
avec l'option \Definition{new-group} pour une certaine flÃ¨che.


\bigskip
Si on le souhaite, on peut passer l'option |group| ou |groups| Ã&nbsp; la commande
|WithArrowsOptions| de telle sorte qu'elle deviendra la valeur par dÃ©faut (jusqu'Ã&nbsp; la fin
du groupe TeX courant). Dans ce cas, il est encore possible de revenir au comportement par
dÃ©faut pour un environnement |{WithArrows}| donnÃ© avec l'option |rr|:
|\begin{WithArrows}[rr]|.


\vspace{1cm} 
Dans l'exemple suivant, nous avons utilisÃ© l'option |groups| pour l'environnement et
l'option |new-group| pour la derniÃ¨re flÃ¨che (c'est pourquoi cette derniÃ¨re flÃ¨che n'est
pas alignÃ©e avec les premiÃ¨res).

\bigskip
$\begin{WithArrows}[interline=1mm,groups]
\sum\limits_{k=0}^n\frac{\cos kx}{\cos^k x}
&amp; = \sum\limits_{k=0}^n \frac{\Re (e^{ikx})}{(\cos x)^k} 
\Arrow{\((\cos x)^k\) est rÃ©el} \\
&amp; = \sum\limits_{k=0}^n \Re\left(\frac{e^{ikx}}{(\cos x)^k}\right)
\Arrow{\(\Re(z+z')=\Re(z)+\Re(z')\)}\\
&amp; = \Re \left(\sum\limits_{k=0}^n \left(\frac{e^{ix}}{\cos x}\right)^k\right)
\Arrow{somme de termes d'une suite gÃ©omÃ©trique} \\
&amp; = \Re \left(\frac{1-\left(\frac{e^{ix}}{\cos x}\right)^{n+1}}{1-\frac{e^{ix}}{\cos x}} \right)
\Arrow{calcul algÃ©brique} \\
&amp; = \Re \left(\frac{1-\frac{e^{i(n+1)x}}{\cos^{n+1}x}}{1-\frac{e^{ix}}{\cos x}}\right)
\Arrow{rÃ©duction au mÃªme dÃ©nominateur} \\
&amp; = \Re \left(\frac{\frac{\cos^{n+1}x-e^{i(n+1)x}}{\cos^{n+1}x}}{\frac{\cos x-e^{ix}}{\cos x}}\right)
\Arrow{\(\Re(kz) = k\cdot\Re(z)\) lorsque \(k\) est rÃ©el} \\
&amp; = \frac{1}{\cos^n x}\Re \left(\frac{\cos^{n+1}x-e^{i(n+1)x}}{\cos x-e^{ix}}\right)
\Arrow[new-group]{forme algÃ©brique des nombres complexes} \\
&amp; =\frac{1}{\cos^n x}
    \Re\left(\frac{\cos^{n+1}x-(\cos(n+1)x+i\sin(n+1)x)}{\cos x-(\cos x+i\sin x)}\right) \\
&amp; =\frac{1}{\cos^n x}
    \Re\left(\frac{(\cos^{n+1}x-\cos(n+1)x)-i\sin(n+1)x}{-i\sin x}\right) \\
&amp; = \frac{1}{\cos^nx}\cdot\frac{\sin(n+1)x}{\sin x}
\end{WithArrows}$


\interitem
\section{L'option Â« o Â» pour des flÃ¨ches individuelles}

\label{option-o}

ConsidÃ©rons, dans un environnement donnÃ©, deux flÃ¨ches notÃ©es formellement $a$ et $b$. 

On notera $i_a$ et $i_b$ les numÃ©ros des lignes de dÃ©part de $a$ et $b$ et $f_a$ et $f_b$
les numÃ©ros de leurs lignes d'arrivÃ©e. On a bien entendu $i_a \le f_a$ et $i_b \le f_b$

\smallskip
On dira que la flÃ¨che~$a$ \emph{recouvre} la flÃ¨che~$b$ lorsque $i_a \le i_b \le f_b \le f_a$


\medskip
\parbox{8cm}{Dans l'exemple ci-contre, la flÃ¨che rouge recouvre la flÃ¨che bleue.}\hspace{3cm}
$\begin{WithArrows}[c]
A &amp; = B \Arrow[tikz=red,jump=3]{}\\
  &amp; = C \Arrow[tikz=blue]{}\\
  &amp; = D \\
  &amp; = E
\end{WithArrows}$

\bigskip
Au niveau local, il existe une option \Definition{o}. Cette option n'est disponible que
lorsque l'on est en mode |group| ou bien en mode |groups| (cf. p.~\pageref{group}).

Une flÃ¨che de type |o| est tracÃ©e avec un dÃ©calage horizontal (comme celui fixÃ© par
|xoffset|) calculÃ© automatiquement en fonction des flÃ¨ches qu'elle
recrouvre.\footnote{Parmi les flÃ¨ches recouvertes, les flÃ¨ches indÃ©pendantes (c'est-Ã&nbsp;-dire
  celles qui ont une option explicite |rr|, |ll|, |rl|, |lr|, |i|, |up| ou |down|) ne sont
  pas prises en compte pour le calcul du |xoffset|.}


\bigskip
\begin{Code}[width=10cm]
$\begin{WithArrows}[groups]
A &amp; = B     \Arrow{un}\Arrow[\emph{o},jump=3]{direct} \\
  &amp; = C + C \Arrow{deux} \\
  &amp; = D + D + D \Arrow{trois} \\
  &amp; = E + E \\
  &amp; = F + F 
\end{WithArrows}$
\end{Code}
$\begin{WithArrows}[c,groups]
A &amp; = B     \Arrow{un}\Arrow[o,jump=3]{direct} \\
  &amp; = C + C \Arrow{deux} \\
  &amp; = D + D + D \Arrow{trois} \\
  &amp; = E + E \\
  &amp; = F + F 
\end{WithArrows}$



\interitem
Les flÃ¨ches de type |o| peuvent elles-mÃªmes Ãªtre recouvertes par d'autres flÃ¨ches de
type~|o|:\par\nobreak

\bigskip
\begin{Code}
$\begin{WithArrows}[groups]
A &amp; = B \Arrow{un}\Arrow[\emph{o},jump=2]{deux}\Arrow[\emph{o},jump=3]{trois}\\
  &amp; = C \\
  &amp; = D \\
  &amp; = E + E + E + E + E + E + E 
\end{WithArrows}$
\end{Code}


\bigskip
$\begin{WithArrows}[c,groups]
A &amp; = B \Arrow{un}\Arrow[o,jump=2]{deux}\Arrow[o,jump=3]{trois}\\
  &amp; = C \\
  &amp; = D \\
  &amp; = E + E + E + E + E + E + E 
\end{WithArrows}$

\bigskip
L'espace (horizontal) entre une flÃ¨che de type |o| et les flÃ¨ches immÃ©diatement
recouvertes est fixÃ© par le paramÃ¨tre \Definition{xoffset-for-o-arrows} que l'on peut
rÃ©gler avec |\WithArrowsOptions| (valeur initiale : 2~mm).

\bigskip
\emph{Remarque} : La lettre |o| a Ã©tÃ© choisie car c'est la premiÃ¨re lettre du mot anglais
\emph{over}. Une flÃ¨che de type~|o| est \emph{au-dessus} des flÃ¨ches qu'elle recouvre.

\interitem

\section{Les options Â« up Â» et Â« down Â» pour des flÃ¨ches individuelles} 

\label{up-and-down}
Au niveau local, il y a deux options pour les flÃ¨ches individuelles, nommÃ©es
\Definition{up} et \Definition{down}. L'exemple suivant illustre ces types de flÃ¨ches:


\begin{Code}
\(\begin{WithArrows}
A &amp; = B 
\Arrow\emph{[up]}{une flÃ¨che de type \texttt{up}} \\
  &amp; = C + C + C + C + C + C + C + C  \\
  &amp; = C + C + C + C + C + C + C + C  
\Arrow\emph{[down]}{une flÃ¨che de type \texttt{down}} \\
  &amp; = E + E 
\end{WithArrows}\)
\end{Code}

\bigskip
$\begin{WithArrows}
A &amp; = B 
\Arrow[up]{une flÃ¨che de type \texttt{up}} \\
  &amp; = C + C + C + C + C + C + C + C  \\
  &amp; = C + C + C + C + C + C + C + C  
\Arrow[down]{une flÃ¨che de type \texttt{down}} \\
  &amp; = E + E 
\end{WithArrows}$


\vspace{1cm} 
Les options |up| et |down| nÃ©cessitent la bibliothÃ¨que Tikz \pkg{calc}. Si elle n'a pas
Ã©tÃ© chargÃ©e au prÃ©alable par l'utilisateur, une erreur sera levÃ©e.

\vspace{1cm}
Les options |up| et |down| peuvent en fait prendre comme valeur une liste de couples
clÃ©-valeur.  
\begin{itemize}
\item La clÃ© \Definition{radius} est le rayon de l'angle arrondi de la flÃ¨che\footnote{La
  valeur initiale de ce paramÃ¨tre est Ã©gale Ã&nbsp; $4$~pt, qui est la valeur par dÃ©faut du
  ``|rounded corners|'' de Tikz.}.
\item La clÃ© \Definition{width} contrÃ´le la largeur (de la partie horizontale) de la flÃ¨che :
\begin{itemize}
\item avec la valeur \Definition{max}, la largeur de la flÃ¨che est ajustÃ©e par rapport Ã&nbsp;
la position des nÅ“uds (c'est le comportement par dÃ©faut des flÃ¨ches |up| et |down| comme
illustrÃ© dans l'exemple prÃ©cÃ©dent) ;
\item avec une valeur numÃ©rique, la largeur de la flÃ¨che est directement fixÃ©e par cette
valeur numÃ©rique ;
\item avec la valeur \Definition{min}, la largeur de la flÃ¨che est ajustÃ©e au contenu de
son Ã©tiquette. 
\end{itemize}
\end{itemize}

\vspace{1cm}
\begin{Code}
$\begin{WithArrows}
A &amp; = B 
\Arrow[\emph{up={width=2cm,radius=0pt}}]{essai} \\
  &amp; = C + C + C + C + C + C + C + C 
\end{WithArrows}$
\end{Code}

\medskip
$\begin{WithArrows}
A &amp; = B 
\Arrow[up={width=2cm,radius=0pt}]{essai} \\
  &amp; = C + C + C + C + C + C + C + C 
\end{WithArrows}$


\vspace{1cm}
\begin{Code}
$\begin{WithArrows}
A &amp; = B 
\Arrow[\emph{up={width=min}}]{essai} \\
  &amp; = C + C + C + C + C + C + C + C 
\end{WithArrows}$
\end{Code}

\medskip
$\begin{WithArrows}
A &amp; = B 
\Arrow[up={width=min}]{essai} \\
  &amp; = C + C + C + C + C + C + C + C 
\end{WithArrows}$

\vspace{1cm}
Les options relatives aux flÃ¨ches |up| et |down| peuvent Ãªtre fixÃ©es au niveau global ou
environnemental avec la clÃ© \Definition{up-and-down}. Cette clÃ© peut aussi Ãªtre utilisÃ©e
comme prÃ©fixe comme illustrÃ© maintenant.
%
\begin{Verbatim}
\WithArrowsOptions{up-and-down/width=min}
\end{Verbatim}

\interitem

\section{Comparaison avec l'environnement \{aligned\}}

L'environnement |{WithArrows}| prÃ©sente des similitudes avec l'environnement |{aligned}|
de l'extension \pkg{amsmath}. Ce sont seulement des similitudes car |{WithArrows}| n'a pas
Ã©tÃ© Ã©crit en s'appuyant sur |{aligned}|.\footnote{En fait, il est possible d'utiliser
  l'extension \pkg{witharrows} sans l'extension \pkg{amsmath}.}

\interitem 

Comme dans les environnements de l'extension \pkg{amsmath}, il est possible de changer
l'espacement entre deux rangÃ©es avec l'option de la commande |\\| de fin de ligne (il est
aussi possible d'utiliser |\\*| mais cela a exactement le mÃªme effet que |\\| puisqu'un
environnement |{WithArrows}| est toujours insÃ©cable). Cette option est conÃ§ue pour Ãªtre
utilisÃ©e avec des valeurs positives uniquement.
%
\begin{Code}
$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \emph{\\[2ex]}
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\*[2ex]
\noalign{\vspace{3mm}}
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$


\interitem 
Dans les environnements de l'extension \pkg{amsmath} (ou de \pkg{mathtools}), l'espace
entre deux rangÃ©es est fixÃ© par un paramÃ¨tre appelÃ© |\jot| (il s'agit d'une dimension et
non d'un ressort). C'est aussi le cas pour l'environnement |{WithArrows}|. Une option
\Definition{jot} a Ã©tÃ© ajoutÃ©e Ã&nbsp; l'environnement |{WithArrows}| dans le but de changer ce
paramÃ¨tre |\jot| pour un environnement donnÃ©.\footnote{Il est aussi possible de changer
  |\jot| avec l'environnement |{spreadlines}| de \pkg{mathtools}.}
%
\begin{Code}
$\begin{WithArrows}[displaystyle,\emph{jot=2ex}]
F &amp; = \frac{1}{2}G     \Arrow{on dÃ©veloppe}\\
  &amp; = H + \frac{1}{2}K \Arrow{on continue}\\
  &amp; = K 
\end{WithArrows}$
\end{Code}


$\begin{WithArrows}[displaystyle,jot=2ex]
F &amp; = \frac{1}{2}G     \Arrow{on dÃ©veloppe}\\
  &amp; = H + \frac{1}{2}K \Arrow{on continue}\\
  &amp; = K 
\end{WithArrows}$


\bigskip
NÃ©anmoins, cette nouvelle valeur de |\jot| sera aussi utilisÃ©e dans les nouveaux
alignements inclus dans l'environnement~|{WithArrows}|:
%
\begin{Code}
$\begin{WithArrows}[\emph{jot=2ex}]
\varphi(x,y) = 0  &amp; \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0 
\Arrow{$x$ et $y$ sont rÃ©els}\\
&amp; \Leftrightarrow \left\{
\begin{aligned}
x+y &amp; = 0 \\
x+2y &amp; = 0 
\end{aligned}
\right.
\end{WithArrows}$
\end{Code}


$\begin{WithArrows}[jot=2ex]
\varphi(x,y) = 0  &amp; \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0 
\Arrow{\(x\) et \(y\) sont rÃ©els}\\
&amp; \Leftrightarrow \left\{
\begin{aligned}
x+y &amp; = 0 \\
x+2y &amp; = 0 
\end{aligned}
\right.
\end{WithArrows}$

\bigskip
Peut-Ãªtre que cela ne correspond pas au rÃ©sultat souhaitÃ©. C'est pourquoi une option
\Definition{interline} est fournie. Il est possible d'utiliser un ressort (\emph{skip})
pour cette option.
%
\begin{Code}
$\begin{WithArrows}[\emph{interline=2ex}]
\varphi(x,y) = 0  &amp; \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0 
\Arrow{$x$ et $y$ sont rÃ©els}\\
&amp; \Leftrightarrow \left\{
\begin{aligned}
x+y &amp; = 0 \\
x+2y &amp; = 0 \\
\end{aligned}
\right.
\end{WithArrows}$
\end{Code}


$\begin{WithArrows}[interline=2ex]
\varphi(x,y) = 0  &amp; \Leftrightarrow (x+y)^2 + (x+2y)^2 = 0 
\Arrow{\(x\) et \(y\) sont rÃ©els}\\
&amp; \Leftrightarrow \left\{
\begin{aligned}
x+y &amp; = 0 \\
x+2y &amp; = 0 \\
\end{aligned}
\right.
\end{WithArrows}$


\interitem 
De mÃªme que l'environnement |{aligned}|, |{WithArrows}| a une option de placement qui peut
prendre les valeurs \Definition{t}, \Definition{c} ou \Definition{b}. NÃ©anmoins, la valeur
initiale n'est pas |c| mais |t|. Si on le souhaite, il est possible d'avoir la valeur |c|
comme valeur par dÃ©faut en utilisant l'instruction |\WithArrowsOptions{c}| au dÃ©but du document.
%
\begin{Verbatim}
Ainsi\enskip
$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$
\end{Verbatim}

Ainsi\enskip 
$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{WithArrows}$

\bigskip
La valeur |c| peut Ãªtre utile, par exemple, si on souhaite mettre une accolade :

\smallskip
% Dans le code suivant, on ne peut utiliser {Code} avec \emph{} Ã&nbsp; cause du \{...
\begin{Verbatim}
On pose\enskip $~emphase#{\left\{@
\begin{WithArrows}[~emphase#c@]
f(x) &amp; = 3x^3+2x^2-x+4 
\Arrow[tikz=-]{les deux sont des polynÃ´mes}\\
g(x) &amp; = 5x^2-5x+6
\end{WithArrows}
~emphase#\right.@
\end{Verbatim}


On pose\enskip $\left\{
\begin{WithArrows}[c]
f(x) &amp; = 3x^3+2x^2-x+4 
\Arrow[tikz=-]{les deux sont des polynÃ´mes}\\
g(x) &amp; = 5x^2-5x+6
\end{WithArrows}
\right.$


\interitem
Contrairement Ã&nbsp; |{aligned}|, l'environnement |{WithArrows}| utilise |\textstyle| par dÃ©faut.

LÃ&nbsp; aussi, il est possible de changer ce comportement avec |\WithArrowsOptions|:

\smallskip
|\WithArrowsOptions{displaystyle}|.


\smallskip
L'exemple suivant est composÃ© avec |{aligned}|:\par\nobreak

\smallskip
$\left\{
\begin{aligned}
\sum_{i=1}^n (x_i+1)^2  
&amp; = \sum_{i=1}^n (x_i^2 + 2x_i+1) \\
&amp; = \sum_{i=1}^n x_i^2 + 2 \sum_{i=1}^n x_i + n 
\end{aligned}
\right.$


\medskip 
L'exemple suivant est composÃ© avec |{WithArrows}[c,displaystyle]|. Les rÃ©sultats 
sont parfaitement identiques.\par\nobreak

\smallskip
$\left\{
\begin{WithArrows}[c,displaystyle]
\sum_{i=1}^n (x_i+1)^2 
&amp; = \sum_{i=1}^n (x_i^2 + 2x_i+1) \\
&amp; = \sum_{i=1}^n x_i^2 + 2 \sum_{i=1}^n x_i + n 
\end{WithArrows}
\right.$


\section{Les flÃ¨ches dans les environnements imbriquÃ©s}

\label{NestedEnv}

Les environnements |{WithArrows}| peuvent Ãªtre imbriquÃ©s. Dans ce cas, les options fournies
Ã&nbsp; l'environnement englobant s'appliquent aussi aux environnements imbriquÃ©s (avec des
exceptions tout Ã&nbsp; fait attendues pour |interline|, |code-before| et |code-after|). La commande
|\Arrow| peut Ãªtre utilisÃ©e dans chaque environnement |{WithArrows}|.

\begin{Code}
$\emph{\begin{WithArrows}}
\varphi(x,y)=0
  &amp; \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \Arrow{les nombres sont rÃ©els}\\
  &amp; \Leftrightarrow
  \left\{\emph{\begin{WithArrows}}[c]
  x+2y &amp; = 0 \\
  2x+4y &amp; = 0 
  \emph{\end{WithArrows}}\right. \\
  &amp; \Leftrightarrow
  \left\{\emph{\begin{WithArrows}}[c]
  x+2y &amp; = 0 \Arrow[tikz=-]{la mÃªme Ã©quation}\\
  x+2y &amp; = 0 
  \emph{\end{WithArrows}}\right. \\
  &amp; \Leftrightarrow x+2y=0 
\emph{\end{WithArrows}}$
\end{Code}

$\begin{WithArrows}
\varphi(x,y)=0
  &amp; \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \Arrow{les nombres sont rÃ©els}\\
  &amp; \Leftrightarrow
  \left\{\begin{WithArrows}[c]
  x+2y &amp; = 0 \\
  2x+4y &amp; = 0 
  \end{WithArrows}\right. \\
  &amp; \Leftrightarrow
  \left\{\begin{WithArrows}[c]
  x+2y &amp; = 0 \Arrow[tikz=-]{la mÃªme Ã©quation}\\
  x+2y &amp; = 0 
  \end{WithArrows}\right. \\
  &amp; \Leftrightarrow x+2y=0 
\end{WithArrows}$

\bigskip
NÃ©anmoins, on peut souhaiter tracer une flÃ¨che entre des rangÃ©es qui ne sont pas dans le
mÃªme environnement. Par exemple, on pourrait souhaiter tracer la flÃ¨che suivante :

\bigskip
$\begin{WithArrows}[code-after = \Arrow[v]{1-2}{2-2}{division par $2$} ]
\varphi(x,y)=0
  &amp; \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
  &amp; \Leftrightarrow
  \left\{\begin{WithArrows}[c]
  x+2y &amp; = 0 \\
  2x+4y &amp; = 0 
  \end{WithArrows}\right. \\
  &amp; \Leftrightarrow
  \left\{\begin{WithArrows}[c]
  x+2y &amp; = 0 \\
  x+2y &amp; = 0 
  \end{WithArrows}\right. \\
  &amp; \Leftrightarrow x+2y=0 
\end{WithArrows}$


\bigskip
Une telle construction est possible en utilisant |\Arrow| dans le |code-after| :
dans le |code-after|, une version spÃ©ciale de la commande |\Arrow| est disponible 
(nous l'appellerons  Â«|\Arrow| dans le |code-after|Â»).

\smallskip
Une commande |\Arrow| dans le |code-after| prend trois arguments :
\begin{itemize}
\item une spÃ©cification pour la rangÃ©e de dÃ©part de la flÃ¨che ;
\item une spÃ©cification pour la rangÃ©e d'arrivÃ©e ;
\item une Ã©tiquette pour la flÃ¨che.
\end{itemize}
Comme d'habitude, il est possible de donner des options entre crochets avant ou aprÃ¨s les
trois arguments obligatoires. NÃ©anmoins, ces options sont limitÃ©es (voir plus bas).

\interitem La spÃ©cification de rangÃ©e est construite avec la position de l'environnement
conidÃ©rÃ© dans l'arbre des imbrications, suivie, aprÃ¨s un trait d'union, par le numÃ©ro de
la rangÃ©e.

\bigskip
Dans l'exemple prÃ©cÃ©dent, il y a deux environnements |{WithArrows}| imbriquÃ©s dans
l'environnement |{WithArrows}| principal.

\medskip
$\begin{WithArrows}[tikz-code = {\path (#1) to node {#3} (#2) ; }]
\varphi(x,y)=0
  &amp; \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
  &amp; \Leftrightarrow \color{blue}
  \left\{\begin{WithArrows}[c]
  x+2y &amp; = 0 \Arrow{environnement \no 1}\\
  2x+4y &amp; = 0 
  \end{WithArrows}\right. \\
  &amp; \Leftrightarrow \color{red}
  \left\{\begin{WithArrows}[c]
  x+2y &amp; = 0 \Arrow{environnement \no 2}\\
  x+2y &amp; = 0 
  \end{WithArrows}\right. \\
  &amp; \Leftrightarrow x+2y=0 
\end{WithArrows}$

\bigskip
La flÃ¨che que nous voulons tracer part de la rangÃ©e~$2$ du sous-environnement \no $1$ (et,
par consÃ©quent, la spÃ©cification est |1-2|) et arrive Ã&nbsp; la rangÃ©e~$2$ du
sous-environnement \no $2$ (et, par consÃ©quent, la spÃ©cification est |2-2|). Nous pouvons
tracer la flÃ¨che avec une commande |\Arrow| dans le |code-after| de la maniÃ¨re suivante :

\begin{Code}
$\begin{WithArrows}[\emph{code-after = \Arrow{1-2}{2-2}{division par $2$}}]
\varphi(x,y)=0
  &amp; \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
.........
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}[code-after = \Arrow{1-2}{2-2}{division par $2$} ]
\varphi(x,y)=0
  &amp; \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
  &amp; \Leftrightarrow
  \left\{\begin{WithArrows}[c]
  x+2y &amp; = 0 \\
  2x+4y &amp; = 0 
  \end{WithArrows}\right. \\
  &amp; \Leftrightarrow
  \left\{\begin{WithArrows}[c]
  x+2y &amp; = 0 \\
  x+2y &amp; = 0 
  \end{WithArrows}\right. \\
  &amp; \Leftrightarrow x+2y=0 
\end{WithArrows}$

\bigskip
Les options autorisÃ©es pour une commande |\Arrow| dans le |code-after| sont : |ll|, |lr|,
|rl|, |rr|, |v|, |xoffset|, |tikz| et |tikz-code|. ExceptÃ©e |v|, qui est spÃ©cifique Ã&nbsp;
|\Arrow| dans le |code-after|, toutes ces options ont leur signification habituelle.


Avec l'option |v|, la flÃ¨che tracÃ©e est verticale Ã&nbsp; une abscisse calculÃ©e avec la rangÃ©e
de dÃ©part et la rangÃ©e d'arrivÃ©e uniquement : les lignes intermÃ©diaires ne sont pas prises
en compte contrairement Ã&nbsp; ce qui se passe avec l'option |i|. Pour le moment, l'option |i|
n'est pas disponible pour la commande~|\Arrow| dans le |code-after|. NÃ©anmoins, il est
toujours possible de dÃ©placer une flÃ¨che avec |xoffset| (ou |xshift| de Tikz).
\begin{Code}
$\begin{WithArrows}[code-after=\Arrow\emph{[v]}{1-2}{2-2}{division by $2$}]
\varphi(x,y)=0
  &amp; \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
.........
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}[code-after = \Arrow[v]{1-2}{2-2}{division par $2$} ]
\varphi(x,y)=0
  &amp; \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
  &amp; \Leftrightarrow
  \left\{\begin{WithArrows}[c]
  x+2y &amp; = 0 \\
  2x+4y &amp; = 0 
  \end{WithArrows}\right. \\
  &amp; \Leftrightarrow
  \left\{\begin{WithArrows}[c]
  x+2y &amp; = 0 \\
  x+2y &amp; = 0 
  \end{WithArrows}\right. \\
  &amp; \Leftrightarrow x+2y=0 
\end{WithArrows}$

 
\interitem 
L'extension \pkg{witharrows} fournit une autre commande disponible dans le |code-after| :
la commande \DefinitionCommande{MultiArrow}. Cette commande dessine un Â«rateauÂ». La liste
des rangÃ©es concernÃ©es par ce rateau est donnÃ©e dans le premier argument de la commande
|\MultiArrow|. La syntaxe utilisÃ©e pour dÃ©crire cette liste est celle de la commande
|\foreach| de \pkg{pgffor}.

\begin{Code}
$\begin{WithArrows}[tikz = rounded corners,
                    code-after = {\emph{\MultiArrow{1,...,4}{text}}} ]
A &amp; = B \\
  &amp; = C \\
  &amp; = D \\
  &amp; = E \\
  &amp; = F
\end{WithArrows}$
\end{Code}


$\begin{WithArrows}[tikz = rounded corners,
                    code-after = {\MultiArrow{1,...,4}{text}}]
A &amp; = B \\
  &amp; = C \\
  &amp; = D \\
  &amp; = E \\
  &amp; = F
\end{WithArrows}$

\medskip
Pour le moment, aucune option n'est disponible pour cette commande |\MultiArrow|.


\medskip
\section{Dessiner des flÃ¨ches depuis l'extÃ©rieur des  environnements \{WithArrows\}}

Si on dÃ©sire dessiner des flÃ¨ches depuis l'extÃ©rieur des environnements |{WithArrows}|, il
est possible de le faire en utilisant les nÅ“uds Tikz crÃ©Ã©s par ces environnements.

Le nom d'un nÅ“ud Tikz crÃ©Ã© par \pkg{witharrows} est prÃ©fixÃ© par |wa-|. Ensuite, on trouve
une liste de nombres qui indique quelle est la position de l'environnement dans l'arbre
d'imbrication des environnements. Ã€ la fin, on a le suffixe |l| pour un nÅ“ud de gauche et
le suffixe |r| pour un nÅ“ud de droite.

\smallskip
Ã€ titre d'illustration, nous donnons un exemple d'environnements |{WithArrows}| imbriquÃ©s
et, pour chaque nÅ“ud de droite, le nom de ce nÅ“ud.\footnote{Il existe une option
  \Definition{show-node-names} pour faire afficher les noms de ces nÅ“uds.}


\medskip
\[\begin{WithArrows}[show-nodes,show-node-names]
A &amp; \vartriangleleft B+B+B+B+B+B+B+B+B+B+B+B+B \\
&amp; \vartriangleleft \left\{
\begin{WithArrows}[c]
C &amp; \vartriangleleft D \\
E &amp; \vartriangleleft F 
\end{WithArrows}
\right. \\
 &amp; \vartriangleleft 
\left\{
\begin{WithArrows}[c]
G &amp; \vartriangleleft H+H+H+H+H+H+H \\
I &amp; \vartriangleleft 
\left\{
\begin{WithArrows}
J &amp;\vartriangleleft K \\
L &amp;\vartriangleleft M 
\end{WithArrows}
\right.
\end{WithArrows}
\right. \\
 &amp; \vartriangleleft 
\left\{
\begin{WithArrows}[c]
N &amp; \vartriangleleft O \\
P &amp; \vartriangleleft Q 
\end{WithArrows}
\right.
\end{WithArrows}\]

\medskip
L'extension \pkg{witharrows} fournit quelques outils pour faciliter l'utilisation de ces nÅ“uds :
\begin{itemize}
\item la commande \DefinitionCommande{WithArrowsLastEnv} donne le numÃ©ro du dernier
environnement de niveau~$0$ (c'est-Ã&nbsp;-dire non imbriquÃ© dans un autre environnement de
\pkg{witharrows}) ; 

\item un nom peut Ãªtre donnÃ© Ã&nbsp; un environnement avec l'option \Definition{name} et, dans
ce cas, les nÅ“uds crÃ©Ã©s dans l'environnement auront des alias construits en utilisant ce
nom ;

\item le style Tikz \Definition{WithArrows/arrow} est le style utilisÃ© par
\pkg{witharrows} pour dessiner une flÃ¨che\footnote{Plus prÃ©cisÃ©ment, ce style est passÃ© Ã&nbsp; Tikz via l'option Â«|every path|Â» avant le dessin de la
  flÃ¨che (qui se fait avec l'instruction Tikz stockÃ©e dans |tikz-code|). Ce style est modifiÃ© par l'option
  |tikz| de \pkg{witharrows} (avec une portÃ©e correspondant au groupe TeX courant).} ;

\item le style Tikz \Definition{WithArrows/arrow/tips} est le style utilisÃ© pour la pointe
de flÃ¨che (ce style est lui-mÃªme chargÃ© par le style |WithArrows/arrow|).
\end{itemize}

Par exemple, nous pouvons tracer une flÃ¨che allant de  \texttt{wa-\WithArrowsLastEnv-2-1-2-r.south}
Ã&nbsp; \texttt{wa-\WithArrowsLastEnv-3-2-r.north} avec l'instruction Tikz suivante :

\begin{Verbatim}
\begin{tikzpicture}[remember picture,overlay]
\draw [WithArrows/arrow] 
      ([xshift=3mm]wa-\WithArrowsLastEnv-2-1-2-r.south)
   to ([xshift=3mm]wa-\WithArrowsLastEnv-3-2-r.north) ;
\end{tikzpicture}
\end{Verbatim}

\[\begin{WithArrows}
A &amp; \vartriangleleft B+B+B+B+B+B+B+B+B+B+B+B+B \\
&amp; \vartriangleleft \left\{
\begin{WithArrows}[c]
C &amp; \vartriangleleft D \\
E &amp; \vartriangleleft F 
\end{WithArrows}
\right. \\
 &amp; \vartriangleleft 
\left\{
\begin{WithArrows}[c]
G &amp; \vartriangleleft H+H+H+H+H+H+H \\
I &amp; \vartriangleleft 
\left\{
\begin{WithArrows}
J &amp;\vartriangleleft K \\
L &amp;\vartriangleleft M 
\end{WithArrows}
\right.
\end{WithArrows}
\right. \\
 &amp; \vartriangleleft 
\left\{
\begin{WithArrows}[c]
N &amp; \vartriangleleft O \\
P &amp; \vartriangleleft Q 
\end{WithArrows}
\right.
\end{WithArrows}
%
\begin{tikzpicture}[remember picture,overlay]
\draw [WithArrows/arrow] 
      ([xshift=3mm]wa-\WithArrowsLastEnv-2-1-2-r.south)
   to ([xshift=3mm]wa-\WithArrowsLastEnv-3-2-r.north) ;
\end{tikzpicture}
\]

\medskip
Dans le cas prÃ©sent, il aurait Ã©tÃ© plus facile d'utiliser une commande |\Arrow| dans le
|code-after| mais c'Ã©tait seulement un exemple pour illustrer comment les nÅ“uds Tikz crÃ©Ã©s
par \pkg{witharrows} peuvent Ãªtre utilisÃ©s.

\bigskip
Dans l'exemple suivant, on crÃ©e des environnements |{WithArrows}| nommÃ©s Â«|premier|Â» et
Â«|second|Â» et on dessine une flÃ¨che entre un nÅ“ud du premier et un nÅ“ud du second.

\begin{Code}
$\begin{WithArrows}[\emph{name=premier}]
A &amp; = B \\
  &amp; = C 
\end{WithArrows}$

\bigskip
$\begin{WithArrows}[\emph{name=second}]
A' &amp; = B' \\
   &amp; = C'
\end{WithArrows}$

\begin{tikzpicture}[remember picture,overlay]
\draw [WithArrows/arrow] 
      ([xshift=3mm]\emph{premier}-1-r.south)
   to ([xshift=3mm]\emph{second}-1-r.north) ;
\end{tikzpicture}
\end{Code}


\begin{center}
$\begin{WithArrows}[name=premier]
A &amp; = B \\
  &amp; = C 
\end{WithArrows}$

\bigskip
$\begin{WithArrows}[name=second]
A' &amp; = B' \\
   &amp; = C' 
\end{WithArrows}$
\end{center}

\begin{tikzpicture}[remember picture,overlay]
\draw [WithArrows/arrow] 
      ([xshift=3mm]premier-1-r.south)
   to ([xshift=3mm]second-1-r.north) ;
\end{tikzpicture}

\section{L'environnement \{DispWithArrows\}}
\label{DispWithArrows}

Comme dit prÃ©cÃ©demment, l'environnement |{WithArrows}| prÃ©sente des similitudes avec
l'environnement |{aligned}| de l'extension \pkg{amsmath} (et de |mathtools|). L'extension
\pkg{witharrows} fournit aussi un environnement \Definition{\{DispWithArrows\}} qui est
similaire aux environnements |{align}| et |{flalign}| de l'extension \pkg{amsmath}.

\medskip
L'environnement |{DispWithArrows}| doit Ãªtre utilisÃ© \emph{hors} du mode mathÃ©matique.
Comme |{align}|, il doit Ãªtre utilisÃ© en mode horizontal.
\begin{Code}
\begin{\emph{DispWithArrows}}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{\emph{DispWithArrows}}
\end{Code}
\begin{DispWithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{DispWithArrows}

\medskip
Il est possible d'utiliser la commande \DefinitionCommande{notag} (ou
\DefinitionCommande{nonumber}) pour supprimer un numÃ©ro d'Ã©quation.

Il est possible d'utiliser la commande \DefinitionCommande{tag} pour placer une Ã©tiquette 
spÃ©ciale (par ex. $\star$).

Il est aussi possible de placer un label pour une ligne de l'environnement avec la
commande \DefinitionCommande{label}.

Ces commandes doivent Ãªtre utilisÃ©es dans la derniÃ¨re colonne de l'environnement.
\begin{Code}
\begin{DispWithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \emph{\notag} \\
  &amp; = a^2 + 2a + 1 \emph{\tag{$\star$} \label{mon-Ã©quation}}
\end{DispWithArrows}
\end{Code}
\begin{DispWithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \notag \\
  &amp; = a^2 + 2a + 1 \tag{$\star$} \label{mon-Ã©quation}
\end{DispWithArrows}
Un lien vers l'Ã©quation \ref{mon-Ã©quation}.\footnote{Dans ce document, les 
rÃ©fÃ©rences ont Ã©tÃ© personnalisÃ©es avec |\labelformat{equation}{(#1)}|}


\medskip
Si \pkg{amsmath} (ou \pkg{mathtools}) est chargÃ©e, il est possible d'utiliser |\tag*| qui
compose le label sans les parenthÃ¨ses. Par exemple, il est possible de l'utiliser pour
mettre le symbole |\square| de \pkg{amssymb}. Ce symbole est souvent utilisÃ© pour marquer
la fin d'une dÃ©monstration.\footnote{Signalons que l'environnement |{DispWithArrows}| est
  compatible avec la commande |\qedhere| de \pkg{amsthm}.}
\begin{Code}
\begin{DispWithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \notag \\
  &amp; = a^2 + 2a + 1 \emph{\tag*{$\square$}}
\end{DispWithArrows}
\end{Code}
\begin{DispWithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \notag \\
  &amp; = a^2 + 2a + 1 \tag*{$\square$} 
\end{DispWithArrows}

\medskip
Il est Ã©galement possible de supprimer tous les numÃ©ros d'Ã©quations avec l'option
boolÃ©enne \Definition{notag} (ou \Definition{nonumber}), au niveau global ou bien au niveau d'un
environnement. 

Enfin, il existe aussi un environnement \Definition{\{DispWithArrows*\}} qui supprime tous
les numÃ©ros.\footnote{MÃªme dans ce cas, il est possible de mettre une Ã©tiquette
  manuellement avec la commande |\tag|.}
\begin{Code}
\begin{\emph{DispWithArrows*}}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{\emph{DispWithArrows*}}
\end{Code}
\begin{DispWithArrows*}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{DispWithArrows*}

\medskip
En fait, il y a une autre option, nommÃ©e \Definition{tagged-lines}, qui peut Ãªtre utilisÃ©e
pour contrÃ´ler quelles lignes seront numÃ©rotÃ©es. La valeur de cette option est la liste
des numÃ©ros de lignes (dans l'environnement) qui seront numÃ©rotÃ©es (par le systÃ¨me de
numÃ©rotage des Ã©quations). Par exemple, avec l'option |tagged-lines = {first,3,last}|,
seulement la premiÃ¨re, la troisiÃ¨me et la derniÃ¨re lignes seront numÃ©rotÃ©es. Il y a aussi
une valeur spÃ©ciale |all| qui signifie que toutes les lignes doivent Ãªtre numÃ©rotÃ©es.
\begin{Code}
\begin{DispWithArrows}[\emph{tagged-lines = last}]
A &amp; = A_1 \Arrow{premiÃ¨re Ã©tape} \\
  &amp; = A_2 \Arrow{deuxiÃ¨me Ã©tape} \\
  &amp; = A_3 
\end{DispWithArrows}
\end{Code}
\begin{DispWithArrows}[tagged-lines = last]
A &amp; = A_1 \Arrow{premiÃ¨re Ã©tape} \\
  &amp; = A_2 \Arrow{deuxiÃ¨me Ã©tape} \\
  &amp; = A_3 
\end{DispWithArrows}

\bigskip
Avec l'option \Definition{fleqn}, l'environnement est composÃ© calÃ© Ã&nbsp; gauche (d'une maniÃ¨re
similaire Ã&nbsp; l'option |fleqn| des classes standard de LaTeX). Dans ce cas, la marge gauche
peut Ãªtre rÃ©glÃ©e avec l'option \Definition{mathindent} (qui a un nom inspirÃ© du paramÃ¨tre
|\mathindent| de LaTeX). La valeur initiale pour cette option est de 25~pt. On peut y
mettre comme valeur un ressort (= \emph{skip} = \emph{glue}).

\begin{Code}
\begin{DispWithArrows}[\emph{fleqn,mathindent = 1cm}]
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{DispWithArrows}
\end{Code}
\begin{DispWithArrows}[fleqn,mathindent = 1cm]
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\end{DispWithArrows}

\medskip
\emph{Remarque} : Par conception, l'option |fleqn| de \pkg{witharrows} est indÃ©pendante de
l'option de classe |fleqn| de LaTeX. En effet, puisque les environnement de
\pkg{witharrows} sont conÃ§us pour Ãªtre utilisÃ©s avec des flÃ¨ches sur le cÃ´tÃ© droit,
l'utilisateur peut souhaiter utiliser \pkg{witharrows} avec l'option |fleqn| (de maniÃ¨re Ã&nbsp;
avoir plus de place sur la droite des Ã©quations pour les flÃ¨ches) tout en continuant Ã&nbsp;
centrer les Ã©quations classiques.

\medskip
Si l'option |leqno| est utilisÃ©e comme option de classe, les labels seront composÃ©s Ã&nbsp;
gauche Ã©galement pour les environnements |{DispWithArrows}|.\footnote{L'extension
  \pkg{amsmath} a une option |leqno| mais \pkg{witharrows}, bien entendu, ne tient pas
  compte de cette option : \pkg{witharrows} vÃ©rifie seulement l'option |leqno| de la
  classe du document.}


\medskip
Si l'extension \pkg{amsmath} est chargÃ©e, il est possible d'utiliser la commande
|\intertext| dans les environnements |{DispWithArrows}|. Il est Ã©galement possible
d'utiliser l'environnement |{subequations}|. NÃ©anmoins, il existe pour les environnements
|{DispWithArrows}| une option \Definition{subequations} qui demande d'encapsuler
l'environnement dans un environnement |{subequations}|.


\medskip
Dans l'exemple suivant, l'option |subequations| est fixÃ©e via la commande
|\WithArrowsOptions|. Chacun des environnements suivants sera alors sous-numÃ©rotÃ© (dans la
portÃ©e de la commande |WithArrowsOptions|).

\begin{Code}
\emph{\WithArrowsOptions{subequations}}
Premier environnement.
\begin{DispWithArrows}
A &amp; = B \\
  &amp; = C 
\end{DispWithArrows}
DeuxiÃ¨me environnement.
\begin{DispWithArrows}
D &amp; = E \\
  &amp; = F 
\end{DispWithArrows}
\end{Code}
%
\begin{scope}
\WithArrowsOptions{subequations}
Premier environnement.
\begin{DispWithArrows}
A &amp; = B \\
  &amp; = C 
\end{DispWithArrows}
DeuxiÃ¨me environnement.
\begin{DispWithArrows}
D &amp; = E \\
  &amp; = F 
\end{DispWithArrows}
\end{scope}

\bigskip
S'il n'y a pas suffisamment de place pour faire appraraÃ®tre le numÃ©ro d'Ã©quation Ã&nbsp; la fin
de la ligne, il n'y a pas de positionnement automatique de ce numÃ©ro sur la ligne suivante
(comme dans les environnements de l'extension \pkg{amsmath}) : il y aura surimpression de texte.
NÃ©anmoins, dans |{DispWithArrows}|, l'utilisateur peut utiliser la commande
\DefinitionCommande{tagnextline} pour demander manuellement la composition du numÃ©ro sur
la ligne suivante. 
\begin{Code}
\begin{DispWithArrows}[displaystyle]
S_{2(p+1)}
&amp; =\sum_{k=1}^{2(p+1)} (-1)^k k^2 \\
&amp; \smash[b]{=\sum_{k=1}^{2p}(-1)^kkÂ²
   +(-1)^{2p+1}(2p+1)^2+(-1)^{2p+2}(2p+2)^2} \emph{\tagnextline} \\
&amp;= S_{2p}-(2p+1)^2+(2p+2)^2\\
&amp;=p(2p+1)-(2p+1)^2+(2p+2)^2\\
&amp;= 2p^2+5p+3 
\end{DispWithArrows}
\end{Code}
\begin{center}
\color{gray}\vrule%
\begin{minipage}{275pt}\color{black}
\begin{DispWithArrows}[displaystyle]
S_{2(p+1)}
&amp; =\sum_{k=1}^{2(p+1)} (-1)^k k^2 \\
&amp; \smash[b]{=\sum_{k=1}^{2p}(-1)^kk^2+(-1)^{2p+1}(2p+1)^2+(-1)^{2p+2}(2p+2)^2}
\tagnextline \\ 
&amp;= S_{2p}-(2p+1)^2+(2p+2)^2\\
&amp;= 2p^2+p-4p^2-4p-1+4p^2+8p+4\\
&amp;= 2p^2+5p+3 
\end{DispWithArrows}
\end{minipage}%
\color{gray}\vrule
\end{center}



\bigskip
Les environnements |{DispWithArrows}| et |{DispWithArrows*}| fournissent Ã©galement une
option \Definition{wrap-lines}. Avec cette option, les lignes de l'Ã©tiquette sont
automatiquement coupÃ©es Ã&nbsp; droite.

\begin{Code}
\begin{DispWithArrows*}[displaystyle,\emph{wrap-lines}]
S_n
&amp; = \frac{1}{n} \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
\Arrow{somme des termes d'une suite gÃ©omÃ©trique de raison $e^{i\frac{2\pi}{n}}$}\\
&amp; = \frac{1}{n} \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}
                            {1-e^{i\frac{\pi}{2n}}}\right)
\Arrow{cette ligne de texte a Ã©tÃ© coupÃ©e automatiquement} \\
&amp; = \frac{1}{n} \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right) 
\end{DispWithArrows*}
\end{Code}
\begin{DispWithArrows*}[displaystyle,wrap-lines]
S_n
&amp; = \frac{1}{n} \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
\Arrow{somme des termes d'une suite gÃ©omÃ©trique de raison $e^{i\frac{2\pi}{n}}$}\\
&amp; = \frac{1}{n} \Re \left(
\frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}} \right) 
\Arrow{cette ligne de texte a Ã©tÃ© coupÃ©e automatiquement} \\
&amp; = \frac{1}{n} \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right) 
\end{DispWithArrows*}

\bigskip
L'option |wrap-lines| ne s'applique pas aux environnements |{WithArrows}|
imbriquÃ©s dans un environnement |{DispWithArrows}| ou |{DispWithArrows*}|. NÃ©anmoins,
elle s'applique aux instructions |\Arrow| et |\MultiArrow| du |code-after|
de l'environnement englobant.

\vspace{1cm}
Nous avons dit que les environnements |{DispWithArrows}| et |{DispWithArrows*}| devaient
Ãªtre utilisÃ©s en mode horizontal et non en mode vertical. Il y a nÃ©anmoins une exception.
Ces environnements peuvent Ãªtre utilisÃ©s directement aprÃ¨s un |\item| d'une liste LaTeX.
Dans ce cas, aucun espace vertical n'est ajoutÃ© avant l'environnement.\footnote{Il est
  possible de dÃ©sactiver cette fonctionnalitÃ© avec l'option
  |standard-behaviour-with-items|.}

\medskip
Voici un exemple oÃ¹, avec |{DispWithArrows}|, on peut insÃ©rer l'Ã©quation dans un
environnement |{enumerate}| tout en utilisant l'option |wrap-lines|.

\smallskip
\begingroup
\small
\begin{Code}
\emph{\begin{enumerate}
\item }
\begin{DispWithArrows}%
  [displaystyle, wrap-lines, tagged-lines = last, fleqn, mathindent = 0 pt]
S_n
&amp; = \frac{1}{n} \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
\Arrow{on utilise la formule pour la somme de termes d'une suite gÃ©omÃ©trique de raison
$e^{i\frac{2\pi}n}$} \\ 
&amp; = \frac{1}{n} \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}
                            {1-e^{i\frac{\pi}{2n}}}\right)
\Arrow{$\bigl(e^{i\frac{\pi}{2n}}\bigr)^n = e^{i\frac{\pi}{2}}=i$} \\
&amp; = \frac{1}{n} \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right) 
\end{DispWithArrows}
\emph{\end{enumerate}}
\end{Code}
\endgroup
\begin{enumerate}
\item 
\begin{DispWithArrows}%
   [displaystyle, wrap-lines, tagged-lines = last, fleqn, mathindent = 0 pt]
S_n
&amp; = \frac{1}{n} \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
\Arrow{on utilise la formule pour la somme de termes d'une suite gÃ©omÃ©trique de raison 
$e^{i\frac{2\pi}n}$}\\ 
&amp; = \frac{1}{n} \Re \left(
\frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}} \right) 
\Arrow{$\bigl(e^{i\frac{\pi}{2n}}\bigr)^n = e^{i\frac{\pi}{2}}=i$} \\
&amp; = \frac{1}{n} \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right) 
\end{DispWithArrows}
\end{enumerate}

\vspace{1cm} 
L'environnement |{DispWithArrows}| est similaire Ã&nbsp; l'environnement |{align}| de
l'extension \pkg{amsmath}. NÃ©anmoins, |{DispWithArrows}| n'est pas construit en utilisant
|{align}| (en fait, il est possible d'utiliser \pkg{witharrows} sans \pkg{amsmath}).

Il y a quelques diffÃ©rences entre |{DispWithArrows}| et |{align}|. 
\begin{itemize}
\item L'environnement |{DispWithArrows}| ne peut pas Ãªtre insÃ©rÃ© dans un environment
|{gather}| de l'extension \pkg{amsmath}.
\item Un environment |{DispWithArrows}| est toujours insÃ©cable (mÃªme avec
|\allowdisplaybreaks| de l'extension \pkg{amsmath}).
\item Les commandes |\label|, |\tag|, |\notag| et |\nonumber| ne sont autorisÃ©es
que dans la derniÃ¨re colonne.
\item AprÃ¨s un |\item| d'une liste LaTeX, aucun espace vertical n'est ajoutÃ© (cela peut Ãªtre 
modifiÃ© avec l'option |standard-behaviour-with-items|).
\item 
\begin{bfseries}
Enfin, par dÃ©faut, les Ã©lÃ©ments d'un environnement |\{DispWithArrows\}|
sont composÃ©s en |textstyle| et non en |displaystyle| (il est possible de modifier
ce point avec l'option |displaystyle|). 
\end{bfseries}
\end{itemize}

\bigskip 
En ce qui concerne les rÃ©fÃ©rences, l'extension \pkg{witharrows} est compatible avec les
extensions \pkg{autonum}, \pkg{cleveref}, \pkg{fancyref}, 
\pkg{hyperref}, \pkg{listlbls}, \pkg{prettyref}, \pkg{refcheck},
\pkg{refstyle}, \pkg{showlabels}, \pkg{smartref}, \pkg{typedref} et
\pkg{varioref} et avec les options |showonlyrefs| et |showmanualtags| de
\pkg{mathtools}.\footnote{Rappelons que \pkg{varioref}, \pkg{hyperref},
\pkg{cleveref} et \pkg{autonum} doivent Ãªtre chargÃ©s dans cet ordre. L'extension
\pkg{witharrows} peut Ãªtre chargÃ©e n'importe oÃ¹.}

Elle n'est pas compatible avec \pkg{showkeys} (certains labels ne sont pas affichÃ©s).




\subsection*{L'option &lt;...&gt; de DispWithArrows}

L'environnement |{DispWithArrows}| propose une option \Definition{left-brace}. Si cette
option est prÃ©sente, son contenu est composÃ© Ã&nbsp; gauche, suivi d'une accolade (d'oÃ¹ le nom)
puis du corps de l'environnement.\footnote{L'option |left-brace| peut aussi Ãªtre utilisÃ©e
  sans valeur: dans ce cas, seule l'accolade est tracÃ©e.}

Pour la lisibilitÃ©, cette option |left-brace| est aussi disponible avec une syntaxe
spÃ©ciale : on peut la rentrer en la mettant entre chevrons (|&lt;| et |&gt;|) juste aprÃ¨s le
|{DispWithArrows}| (et donc avant les Ã©ventuels arguments optionnels entre crochets).

\bigskip
On peut alors faire des constructions avec distinctions de cas, comme dans l'exemple
suivant.\footnote{L'environnement |{cases}| de l'extension \pkg{amsmath} permet de rÃ©aliser de
  telles distinctions de cas mais on ne peut pas utiliser la numÃ©rotation automatique des
  Ã©quations. L'environnement |{numcases}| de l'extension \pkg{cases} (de Donald Arseneau)
  permet d'utiliser ces numÃ©ros d'Ã©quations, mais, bien entendu, il n'y a pas de
  composition de flÃ¨ches.}



\medskip

\begin{Code}
\begin{DispWithArrows}\emph{&lt; \binom{n}{p} = &gt;}[format = ll,fleqn,displaystyle]
0 &amp; \quad \text{si } p &gt; n  
\Arrow{ce cas peut en fait rentrer\\ dans le suivant} \\
\frac{n(n-1)\cdots(n-p+1)}{p!} &amp; \quad \text{si } 0 \leq p \leq n  \\
0 &amp; \quad \text{si } p &lt; 0 
\end{DispWithArrows}
\end{Code}
%
\begin{DispWithArrows}&lt; \binom{n}{p} = &gt;[format = ll,fleqn,displaystyle]
0 &amp; \quad \text{si } p &gt; n  
\Arrow{ce cas peut en fait rentrer\\ dans le suivant} \\
\frac{n(n-1)\cdots(n-p+1)}{p!} &amp; \quad \text{si } 0 \leq p \leq n  \\
0 &amp; \quad \text{si } p &lt; 0 
\end{DispWithArrows}

\interitem
Dans l'exemple suivant, on sous-numÃ©rote les Ã©quations d'un systÃ¨me avec l'option
|subequations| (disponible quand l'|amsmath| est chargÃ©).

\begin{Code}
\begin{DispWithArrows}\emph{&lt; \label{systÃ¨me} \ref*{systÃ¨me} \Leftrightarrow &gt;}%
    [format = l, subequations]
x+y+z = -3 \Arrow[tikz=-,jump=2]{3 equations} \\
xy+xz+yz=-2 \\
xyz = -15 \label{derniÃ¨re-Ã©quation}
\end{DispWithArrows}
\end{Code}
%
\begin{DispWithArrows}&lt; \label{systÃ¨me} \ref*{systÃ¨me} \Leftrightarrow &gt;%
    [format = l, subequations]
x+y+z = -3 \Arrow[tikz=-,jump=2]{3 Ã©quations} \\
xy+xz+yz=-2 \\
xyz = -15 \label{derniÃ¨re-Ã©quation} 
\end{DispWithArrows}

\bigskip
Le systÃ¨me complet est l'Ã©quation \ref{systÃ¨me} (cette rÃ©fÃ©rence a Ã©tÃ© obtenue avec
|\ref{systÃ¨me}|) et la derniÃ¨re Ã©quation est l'Ã©quation \ref{derniÃ¨re-Ã©quation} (rÃ©fÃ©rence
obtenue avec |\ref{derniÃ¨re-Ã©quation}|). Notons que |\ref*|, utilisÃ© dans le code
ci-dessus, est une variante de |ref| qui compose une rÃ©fÃ©rence sans crÃ©er de lien
hypertexte (mÃªme quand \pkg{hyperref} est chargÃ©).

\bigskip
On peut souhaiter remplacer l'accolade gauche par un autre dÃ©limiteur extensible (gauche).
On peut le faire avec l'option \Definition{replace-left-brace-by}. Par exemple,
Â«|replace-left-brace-by = [\enskip|Â» va composer avec un crochet et ajouter aussi un
espace de 0.5~em aprÃ¨s le crochet.

\bigskip
\section{FonctionnalitÃ©s avancÃ©es}

\subsection{Utilisation avec Beamer}

\colorbox{yellow!50}{\textbf{Nouveau 2.9}}\par\nobreak

\smallskip
Si l'extension \pkg{witharrows} est utilisÃ©e avec Beamer, la commande |\Arrow| accepte un
argument entre chevrons (aprÃ¨s l'argument optionnel entre crochets) pour indiquer les
Â«\emph{overlays}Â» concernÃ©s (en interne, \pkg{witharrows} utilise simplement la commande
|\only| de Beamer).

\begin{Code}
\Arrow[jump=2]\emph{&lt;3-&gt;}{Exemple}
\end{Code}

\subsection{Utilisation avec plain-TeX}
\label{plain-TeX}

L'extension \pkg{witharrows} peut Ãªtre utilisÃ©e avec plain-TeX. Pour cela, on doit charger
l'extension avec |\input|:
%
\begin{Verbatim}
\input{witharrows.tex}
\end{Verbatim}

\medskip
En plain-TeX, il n'y a pas d'environnements comme dans LaTeX.

Au lieu de |\begin{WithArrows}| et |\end{WithArrows}| comme en LaTeX, on doit utiliser un
pseudo-environnement dÃ©limitÃ© par |\Witharrows| et |\endWithArrows| (de mÃªme pour
|{DispWithArrows}|). 
%
\begin{Verbatim}
$\WithArrows
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1 
\endWithArrows$
\end{Verbatim}

\medskip
La version pour plain-TeX de \pkg{witharrows} ne propose pas toutes les fonctionnalitÃ©s
proposÃ©es pour la version LaTeX. En particulier, les fonctionnalitÃ©s concernant les
numÃ©ros d'Ã©quations ne sont pas disponibles (puisqu'elles reposent sur le systÃ¨me de
numÃ©rotation de LaTeX).

\subsection{L'option tikz-code : comment changer la forme des flÃ¨ches}

\label{tikz-code}

L'option \Definition{tikz-code} permet Ã&nbsp; l'utilisateur de changer la forme des
flÃ¨ches.\footnote{Si l'option |wrap-lines| est utilisÃ©e dans un environnement
  |{DispWithArrows}| ou |{DispWithArrows*}|, l'option |tikz-code| n'aura pas d'effet sur
  les flÃ¨ches de cet environnement mais uniquement sur les flÃ¨ches des environnements
  |{WithArrows}| imbriquÃ©s.}

\smallskip
Par exemple, les options Â«|up|Â» et Â«|down|Â» dÃ©crites prÃ©cÃ©demment (cf.
p.~\pageref{up-and-down}) sont programmÃ©es en interne avec |tikz-code|.

\smallskip
La valeur de cette option doit Ãªtre une instruction de tracÃ© Tikz valide (avec le
point-virgule final) oÃ¹ les trois marqueurs |#1|, |#2| et |#3| reprÃ©sentent le point de
dÃ©part, le point d'arrivÃ©e et l'Ã©tiquette de la flÃ¨che.


\bigskip
La valeur initiale de |tikz-code| est la suivante :

\smallskip
\qquad |\draw (#1) to node {#3} (#2) ;|


\bigskip
Dans l'exemple suivant, nous remplaÃ§ons le chemin par dÃ©faut par un chemin avec trois
segments (et un nÅ“ud recouvrant le deuxiÃ¨me segment).
\begin{Code}
\begin{WithArrows}[format=c,ygap=5pt,interline=4mm,
      \emph{tikz-code = {\draw[rounded corners]
                        (#1) -- ([xshift=5mm]#1)
                        -- node[circle,
                                draw,
                                auto = false,
                                fill = gray!50,
                                inner sep = 1pt] {\tiny #3} 
                        ([xshift=5mm]#2)
                        -- (#2) ; }}]
3 (2x+4) = 6   \Arrow{$\div 3$} \\
2x+4 = 2       \Arrow{$-4$}     \\
2x = -2        \Arrow{$\div 2$} \\
 x = -1
\end{WithArrows}
\end{Code}


\[\begin{WithArrows}[format=c,
      ygap=5pt,
      interline=4mm,
      tikz-code = {\draw[rounded corners]
                        (#1) 
                        --
                        ([xshift=5mm]#1)
                        -- node[circle,
                                draw,
                                auto=false,
                                fill=gray!50,
                                inner sep = 1pt] {\tiny #3} 
                        ([xshift=5mm]#2)
                        --
                        (#2) ; }]
3 (2x+4) = 6   \Arrow{$\div 3$} \\
2x+4 = 2       \Arrow{$-4$}     \\
2x = -2        \Arrow{$\div 2$} \\
 x = -1
\end{WithArrows}\]

\bigskip
L'environnement |{DispWithArrows}| et sa version Ã©toilÃ©e |{DispWithArrows*}| fournissent
une commande \DefinitionCommande{WithArrowsRightX} qui peut Ãªtre utilisÃ©e dans l'option
|tikz-code|. Cette commande fournit l'abscisse de la marge droite de la boÃ®te de
composition courante (en prenant en compte les Ã©ventuels numÃ©ros des Ã©quations). Pour un
exemple d'utilisation, voir p.~\pageref{example-WithArrowsRightX}.


\bigskip
\subsection{La commande \textbackslash WithArrowsNewStyle}

L'extension \pkg{witharrows} fournit une commande \DefinitionCommande{WithArrowsNewStyle}
pour dÃ©finir des styles d'une maniÃ¨re similaire aux Â«stylesÂ» de Tikz.

\smallskip
La commande |\WithArrowsNewStyle| prend deux arguments obligatoires. Le premier est le nom
du style et le second est une liste de couples clÃ©-valeur. La portÃ©e de la definition
ainsi faite par |\WithArrowsNewStyle| est le groupe TeX courant.\footnote{On rappelle que,
  en particulier, tout environnement LaTeX est un groupe TeX.}

\smallskip
Le style peut Ãªtre utilisÃ© comme une clÃ© au niveau du document (avec
|\WithArrowsOptions|), au niveau d'un environnement (via les arguments optionnels) ou bien
encore dans une autre commande |\WithArrowsNewStyle|.

\smallskip
Pour un exemple d'utilisation, voir p.~\pageref{example-WithArrowsRightX}.


\bigskip
Il n'existe pas de style pour les flÃ¨ches individuelles. NÃ©anmoins, il reste possible de
dÃ©finir de nouvelles commandes s'appuyant sur la commande |\Arrow|. Par exemple :

\begin{Verbatim}
\newcommand{\ThickArrow}{\Arrow[tikz=thick]}
\end{Verbatim}

Cette nouvelle commande |\ThickArrow| garde la possibilitÃ©\footnote{Dans la version de
  \pkg{witharrows} pour LaTeX mais pas dans la version pour plain-TeX.} d'accepter des
clÃ©s entre crochets. On peut Ã©crire |\ThickArrow[jump=2]| car en fait,
|\Arrow[tikz=thick][jump=2]| est une syntaxe autorisÃ©e pour la commande |\Arrow| (on peut
mettre un nombre arbitraire d'arguments optionnels entre crochets aprÃ¨s la commande
|\Arrow|).

\bigskip
\subsection{La clÃ© right-overlap}

La clÃ© \Definition{right-overlap} est une clÃ© boolÃ©enne dont la valeur initiale est
|true|. Elle concerne uniquement les environnements |{WithArrows}|.

Quand la clÃ© |right-overlap| est active, les flÃ¨ches (et leurs Ã©tiquettes) sont tracÃ©es en
dÃ©bordement et n'entrent donc pas dans le calcul de la boÃ®te TeX contenant l'environnement
|{WithArrows}|.

Quand la clÃ© |right-overlap| est mise Ã&nbsp; |false| (dans |\WithArrowsOptions| ou bien dans un
environnement |{WithArrows}| individuel) le dÃ©bord vers la droite est pris en compte dans
le calcul des dimensions de la boÃ®te englobante.

\begin{Code}
$\left\{\begin{WithArrows}[c,format = rCrCl,\emph{right-overlap=false}]
2x &amp; + &amp; 3y &amp; = &amp; 5 \Arrow{on ajoute $L_1$ Ã&nbsp; $L_2$}\\
-2x &amp; - &amp; 5y &amp; = &amp; 2 
\end{WithArrows}\right.$\quad
$\left\{\begin{WithArrows}[c,format = rCrCl]
2x &amp; + &amp; 3y &amp; = &amp; 5 \\
   &amp; - &amp; 2y &amp; = &amp; 7 
\end{WithArrows}\right.$
\end{Code}

\medskip
$\left\{\begin{WithArrows}[c,format = rCrCl,right-overlap=false]
2x &amp; + &amp; 3y &amp; = &amp; 5 \Arrow{on ajoute $L_1$ Ã&nbsp; $L_2$}\\
-2x &amp; - &amp; 5y &amp; = &amp; 2 
\end{WithArrows}\right.$\quad
$\left\{\begin{WithArrows}[c,format = rCrCl]
2x &amp; + &amp; 3y &amp; = &amp; 5 \\
   &amp; - &amp; 2y &amp; = &amp; 7 
\end{WithArrows}\right.$

\bigskip
Le rÃ©glage |right-overlap = false| peut aussi Ãªtre utile en conjonction avec la classe
|standalone|.

\bigskip
\subsection{Positionnement vertical des flÃ¨ches}

Il y a quatre paramÃ¨tres pour ajuster finement la position verticale des flÃ¨ches :
\Definition{ygap}, \Definition{ystart}, \Definition{start-adjust} et
\Definition{end-adjust}. 

\medskip
Nous expliquons d'abord le comportement quand les paramÃ¨tres |start-adjust| et
|end-adjust| sont Ã©gaux Ã&nbsp; zÃ©ro:
\begin{itemize}
\item l'option |ystart| reprÃ©sente la distance verticale entre la ligne de base du
texte et le dÃ©but de la flÃ¨che (valeur initiale : $0.4$~ex);
\item l'option |ygap| reprÃ©sente la distance verticale entre deux flÃ¨ches consÃ©cutives
(valeur initiale : $0.4$~ex).
\end{itemize}


\bigskip
$\begin{WithArrows}[interline=1mm, adjust = 0pt]
 (\cos x + \sin x)^2 &amp; = \cos^2 x +2 \cos x \sin x + \sin^2 x\Arrow{}\tikz[remember picture] \coordinate (A) ; \\
   &amp; = \cos^2x + \sin^2x + 2\sin x\cos x \Arrow{} \\
   &amp; = 1 + \sin(2x) 
\end{WithArrows}$

\begin{tikzpicture}[remember picture,overlay,blue]
\draw (wa-\WithArrowsLastEnv-1-r.south) to ++(1,0) coordinate (B) to ++(0.1,0) ;
\draw (A) to ++(1,0) coordinate (C) to ++(0.1,0) ;
\draw (B) -- (C) ;
\draw[&lt;-] (B) to ++(0,0.2) ;
\draw[&lt;-] (C) to ++(0,-0.2) ;
\path (C) node[right=1mm] {\texttt{ystart}} ;
\draw (wa-\WithArrowsLastEnv-2-r.north) to ++(3,0) coordinate (E) to ++(0.1,0);
\draw (wa-\WithArrowsLastEnv-2-r.south) to ++(3,0) coordinate (F) to ++(0.1,0);
\draw (E) -- (F) ;
\draw[&lt;-] (E) to ++(0,0.2) ;
\draw[&lt;-] (F) to ++(0,-0.2) ;
\path (F) node[right=1mm] {\texttt{ygap}} ;
\end{tikzpicture}

\interitem 
NÃ©anmoins, pour des raisons esthÃ©tiques, quand il est possible, \pkg{witharrows} commence
la flÃ¨che un peu plus haut (d'une quantitÃ© |start-adjust|) et termine la flÃ¨che un peu plus
bas (par une quantitÃ© |end-adjust|). Par dÃ©faut, ces deux paramÃ¨tres |start-adjust|
est |end-adjust| sont Ã©gaux Ã&nbsp; $0.4$~ex.

\bigskip
Voici par exemple le comportement sans le mÃ©canisme de |start-adjust| et
|end-adjust| :
\begin{Code}
$\begin{WithArrows}\emph{[start-adjust=0pt, end-adjust=0pt]}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1  
\end{WithArrows}$
\end{Code}

$\begin{WithArrows}[start-adjust=0pt, end-adjust=0pt]
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1  
\end{WithArrows}$


\bigskip
Voici le comportement par dÃ©faut (les paramÃ¨tres |start-adjust| et |end-ajust| sont
utilisÃ©s avec la valeur initiale $0.4$~ex). La flÃ¨che est plus longue et le rÃ©sultat est
plus esthÃ©tique.

\medskip
$\begin{WithArrows}
A &amp; = (a+1)^2 \Arrow{on dÃ©veloppe} \\
  &amp; = a^2 + 2a + 1  
\end{WithArrows}$


\bigskip
Il est possible d'utiliser l'option \Definition{adjust} qui fixe Ã&nbsp; la fois |start-adjust|
et |end-ajust|.

\bigskip
Une flÃ¨che de |jump| Ã©gal Ã&nbsp;~$1$ a une longueur\footnote{On appelle \emph{longueur} de la
  flÃ¨che la diffÃ©rence entre l'ordonnÃ©e du point de dÃ©part et l'ordonnÃ©e du point
  d'arrivÃ©e.} maximale Ã©gale au paramÃ¨tre \Definition{max-length-of-arrow}. La valeur
initiale de ce paramÃ¨tre est Ã©gale Ã&nbsp;~$2$~cm.

Dans l'exemple suivant, la valeur de |max-length-of-arrow| a Ã©tÃ© fixÃ©e Ã&nbsp; $1.5$~cm.
\begin{Code}
\[\begin{WithArrows}[\emph{max-length-of-arrow = 1.5cm}]
A 
&amp; = 
\begin{vmatrix}
1 &amp; a &amp; a^2 &amp; a^3 &amp; a^4 \\
1 &amp; b &amp; b^2 &amp; b^3 &amp; b^4 \\
1 &amp; c &amp; c^2 &amp; c^3 &amp; c^4 \\
1 &amp; d &amp; d^2 &amp; d^3 &amp; d^4 \\
1 &amp; e &amp; e^2 &amp; e^3 &amp; e^4 
\end{vmatrix}
\Arrow{
$L_2 \gets L_2-L_1$ \\ 
$L_3 \gets L_3-L_1$ \\ 
$L_4 \gets L_4-L_1$ \\
$L_5 \gets L_5-L_1$ % ne pas mettre de \\ ici
} \\
&amp; = 
\begin{vmatrix}
1 &amp; a &amp; a^2 &amp; a^3 &amp; a^4 \\
0 &amp; b-a &amp; b^2-a^2 &amp; b^3-a^3 &amp; b^4-a^4 \\
0 &amp; c-a &amp; c^2-a^2 &amp; c^3-a^3 &amp; c^4-a^4 \\
0 &amp; d-a &amp; d^2-a^2 &amp; d^3-a^3 &amp; d^4-a^4 \\
0 &amp; e-a &amp; e^2-a^2 &amp; e^3-a^3 &amp; e^4-a^4 
\end{vmatrix}
\end{WithArrows}\]
\end{Code}


\bigskip
\[\begin{WithArrows}[max-length-of-arrow = 1.5cm]
A 
&amp; = 
\begin{vmatrix}
1 &amp; a &amp; a^2 &amp; a^3 &amp; a^4 \\
1 &amp; b &amp; b^2 &amp; b^3 &amp; b^4 \\
1 &amp; c &amp; c^2 &amp; c^3 &amp; c^4 \\
1 &amp; d &amp; d^2 &amp; d^3 &amp; d^4 \\
1 &amp; e &amp; e^2 &amp; e^3 &amp; e^4 
\end{vmatrix}
\Arrow{
$L_2 \gets L_2-L_1$ \\ 
$L_3 \gets L_3-L_1$ \\ 
$L_4 \gets L_4-L_1$ \\
$L_5 \gets L_5-L_1$ 
} \\
&amp; = 
\begin{vmatrix}
1 &amp; a &amp; a^2 &amp; a^3 &amp; a^4 \\
0 &amp; b-a &amp; b^2-a^2 &amp; b^3-a^3 &amp; b^4-a^4 \\
0 &amp; c-a &amp; c^2-a^2 &amp; c^3-a^3 &amp; c^4-a^4 \\
0 &amp; d-a &amp; d^2-a^2 &amp; d^3-a^3 &amp; d^4-a^4 \\
0 &amp; e-a &amp; e^2-a^2 &amp; e^3-a^3 &amp; e^4-a^4 
\end{vmatrix}
\end{WithArrows}\]


\bigskip
\subsection{Notes de pied de page dans les environnements de witharrows}

Si vous voulez mettre des notes de pied de page dans un environnement de \pkg{witharrows},
vous pouvez utiliser une paire |\footnotemark|--|\footnotetext|.

\smallskip
Il est aussi possible d'extraire les notes de pieds de page avec l'extension
\pkg{footnote} ou bien l'extension \pkg{footnotehyper}.

\smallskip
Si \pkg{witharrows} est chargÃ©e avec l'option \Definition{footnote} (avec
|\usepackage[footnote]{witharrows}| ou avec |\PassOptionsToPackage|), l'extension
\pkg{footnote} est chargÃ©e (si elle ne l'est pas dÃ©jÃ&nbsp;) et elle est utilisÃ©e pour extraire
les notes de pied de page.

\smallskip
Si \pkg{witharrows} est chargÃ©e avec l'option \Definition{footnotehyper}, l'extension
\pkg{footnotehyper} est chargÃ©e (si elle ne l'est pas dÃ©jÃ&nbsp;) et elle est utilisÃ©e pour
extraire les notes de pied de page.

\smallskip
Attention : Les extensions \pkg{footnote} et \pkg{footnotehyper} sont incompatibles.
L'extension \pkg{footnotehyper} est le successeur de l'extension \pkg{footnote} et devrait
Ãªtre utilisÃ©e prÃ©fÃ©rentiellement. L'extension \pkg{footnote} a quelques dÃ©fauts ; en
particulier, elle doit Ãªtre chargÃ©e aprÃ¨s l'extension \pkg{xcolor} et elle n'est pas
parfaitement compatible avec \pkg{hyperref}.

\medskip
Dans ce document, l'extension \pkg{witharrows} a Ã©tÃ© chargÃ©e avec l'option |footnotehyper|
et nous donnons un exemple avec une note de pied de page dans l'Ã©tiquette d'une flÃ¨che :


\smallskip
$\begin{WithArrows}
A &amp; = (a+b)^2 
\Arrow{on dÃ©veloppe\,\footnote{Une note de pied de page.}} \\
   &amp; = a^2+b^2+2ab
\end{WithArrows}$

\bigskip
\subsection{L'option no-arrows}

L'option \Definition{no-arrows} est une facilitÃ© donnÃ©e Ã&nbsp; l'utilisateur. Avec cette
option, les flÃ¨ches ne sont pas tracÃ©es. NÃ©anmoins, une analyse des flÃ¨ches est effectuÃ©e
et certaines erreurs sont dÃ©tectÃ©es (par exemple, si une flÃ¨che arrive aprÃ¨s la derniÃ¨re
ligne de l'environnement).


\bigskip
\subsection{Note pour les utilisateurs de AUCTeX}

Dans un Ã©diteur de texte paramÃ©trÃ© pour Ã©diter du LaTeX, les environnements
|{DispWithArrows}| et |{DispWithArrows*}| devraient Ãªtre formatÃ©s comme l'environnement
|{equation}| de LaTeX c'est-Ã&nbsp;-dire avec un formatage adaptÃ© au mode mathÃ©matique.

Dans l'Ã©diteur Emacs avec AUCTeX, cela se fait en ajoutant les chaÃ®nes |"DispWithArrows"|
et |"DispWithArrows*"| Ã&nbsp; la variable |font-latex-math-environments|. On peut le faire en
utilisant l'interface de personnalisation de Emacs :

|M-x customize| &gt; |[Text]| &gt; |[TeX]| &gt; |[Font LaTeX]|

\bigskip
\subsection{Note pour les dÃ©veloppeurs}

Si vous dÃ©finissez un environnement s'appuyant sur un environnement de 
\pkg{witharrows}, nous recommandons de faire appel Ã&nbsp; l'environnement de \pkg{witharrows} avec 
|\WithArrows|--|\endWithArrows| ou |\DispWithArrows|--|\endDispWithArrows| (et
non |\begin{WithArrows}|--|\end{WithArrows}|, etc.).

\smallskip
En faisant ainsi, les messages d'erreur affichÃ©s par \pkg{witharrows} mentionneront (le
cas Ã©chÃ©ant) le nom de votre environnement et seront plus faciles Ã&nbsp; comprendre pour
l'utilisateur final.

\smallskip
Par exemple, vous pouvez dÃ©finir un environnement |{DWA}| qui va Ãªtre un alias de
|{DispWithArrows}|:
\begin{BVerbatim}
\NewDocumentEnvironment {DWA} {} {\DispWithArrows}{\endDispWithArrows}
\end{BVerbatim}

\smallskip
Si vous utilisez cet environnement |{DWA}| en mode mathÃ©matique, vous aurez le message
d'erreur suivant :

\begin{BVerbatim}
The environment {DWA} should be used only outside math mode.
\end{BVerbatim}

\interitem
Une autre exemple est donnÃ© en interne par la dÃ©finition de l'environnement |{DispWithArrows*}|
dans l'extension \pkg{witharrows} avec le code suivant:
\begin{Verbatim}
\NewDocumentEnvironment {DispWithArrows*} {}
    {\WithArrowsOptions{notag}%
     \DispWithArrows}
    {\endDispWithArrows}
\end{Verbatim}



\section{Exemples}

\subsection{\textbackslash MoveEqLeft}

Il est possible d'utiliser |\MoveEqLeft| de \pkg{mathtools}. Dans ce cas, on doit se
souvenir que la commande |\MoveEqLeft| a aussi la valeur d'une esperluette (|&amp;|). Il faut
en tenir compte pour le positionnement d'une Ã©ventuelle commande |\Arrow|.

\begingroup
\small
\begin{Code}
$\begin{WithArrows}[interline=0.5ex]
\emph{\MoveEqLeft} \arccos(x) = \arcsin \frac{4}{5} + \arcsin \frac{5}{13} 
\Arrow{parce que les deux sont dans $[-\frac{\pi}{2},\frac{\pi}{2}]$} \\
&amp; \Leftrightarrow x = \sin\left(\arcsin\frac{4}{5} + \arcsin\frac{5}{13}\right) \\
&amp; \Leftrightarrow x = \frac{4}{5}\cos\arcsin\frac{5}{13}+\frac{5}{13}\cos\arcsin\frac{4}{5} 
\Arrow{$\forall x \in [-1,1], \cos(\arcsin x) = \sqrt{1-x^2}$} \\
&amp; \Leftrightarrow x = \frac{4}{5}\sqrt{1-\bigl(\frac{5}{13}\bigr)^2}
+ \frac{5}{13}\sqrt{1-\bigl(\frac{4}{5}\bigr)^2} 
\end{WithArrows}$
\end{Code}
\endgroup

\medskip
$\begin{WithArrows}[interline=0.5ex]
\MoveEqLeft \arccos(x) = \arcsin \frac{4}{5} + \arcsin \frac{5}{13} 
\Arrow{parce que les deux sont dans \([-\frac{\pi}{2},\frac{\pi}{2}]\)} \\
&amp; \Leftrightarrow x = \sin\left(\arcsin\frac{4}{5} + \arcsin\frac{5}{13}\right) \\
&amp; \Leftrightarrow x = \frac{4}{5}\cos\arcsin\frac{5}{13} + \frac{5}{13} \cos\arcsin\frac{4}{5} 
\Arrow{\(\forall x \in [-1,1], \cos(\arcsin x) = \sqrt{1-x^2}\)} \\
&amp; \Leftrightarrow x = \frac{4}{5}\sqrt{1-\bigl(\frac{5}{13}\bigr)^2}
+ \frac{5}{13}\sqrt{1-\bigl(\frac{4}{5}\bigr)^2} 
\end{WithArrows}$


\bigskip
\subsection{Une commande \textbackslash DoubleArrow}

En utilisant l'option |o| (cf. p. \pageref{option-o}) disponible au niveau local, on peut
facilement Ã©crire une commande |\DoubleArrow| pour deux flÃ¨ches allant en sens inverse
l'une de l'autre.

\bigskip
\begin{Code}
\NewDocumentCommand \DoubleArrow { O {} m m }
  {
    \Arrow[tikz=-&gt;,#1]{#2}%
    \Arrow[o,tikz=&lt;-,#1]{#3}
  }
\end{Code}


\NewDocumentCommand \DoubleArrow { O {} m m }
  {
    \Arrow[tikz=-&gt;,#1]{#2}%
    \Arrow[o,tikz=&lt;-,#1]{#3}
  }


\bigskip
Exemple d'utilisation :

\begin{Code}
$\begin{WithArrows}[groups]
A &amp; = (a+b)^2 \DoubleArrow[tikz={font=\bfseries}]{dÃ©veloppement}{factorisation} \\
  &amp; = a^2 + 2ab+b^2 
\end{WithArrows}$
\end{Code} 

\bigskip
$\begin{WithArrows}[groups]
A &amp; = (a+b)^2 \DoubleArrow[tikz={font=\bfseries}]{dÃ©veloppement}{factorisation} \\
  &amp; = a^2 + 2ab+b^2 
\end{WithArrows}$




\bigskip
\subsection{Modifier la forme des nÅ“uds}

Il est possible de changer la forme des Ã©tiquettes, qui sont des nÅ“uds Tikz, en
modifiant la clÃ© Â«|every node|Â» de Tikz.

\begin{Code}
\begin{WithArrows}%
     [format = c,    
      interline = 4mm,
      tikz = {\emph{every node/.style = {circle,
                                   draw,
                                   auto = false,
                                   fill = gray!50,
                                   inner sep = 1pt,
                                   font = \tiny}}}]
 3 (2x+4) = 6 \Arrow{$\div 3$} \\
 2x+4 = 2     \Arrow{$-4$} \\
 2x = -2      \Arrow{$\div 2$} \\
 2x = -1
\end{WithArrows}
\end{Code}

\[\begin{WithArrows}[%
      format = c,
      interline = 4mm,
      tikz = {every node/.style = {circle,
                                   draw,
                                   auto = false,
                                   fill = gray!50,
                                   inner sep = 1pt,
                                   font = \tiny}}]
 3 (2x+4) = 6 \Arrow{$\div 3$} \\
 2x+4 = 2     \Arrow{$-4$}     \\
 2x = -2      \Arrow{$\div 2$} \\
 2x = -1
\end{WithArrows}\]


\bigskip
\subsection{Exemples avec l'option tikz-code}

Rappelons que l'option |tikz-code| est le code Tikz utilisÃ© par \pkg{witharrows}
pour tracer les flÃ¨ches.\footnote{Si un environnement |{DispWithArrows}| ou
|{DispWithArrows*}| est utilisÃ© avec l'option |wrap-lines|, la valeur de l'option
|tikz-code| n'est pas utilisÃ©e pour cet environnement (mais est utilisÃ©e pour les 
environnements imbriquÃ©s Ã&nbsp; l'intÃ©rieur).}

\smallskip
La valeur initiale de |tikz-code| est |\draw (#1) to node {#3} (#2) ;| oÃ¹ les trois
marqueurs |#1|, |#2| et |#3| reprÃ©sentent le point de dÃ©part, le point d'arrivÃ©e et
l'Ã©tiquette de la flÃ¨che.


\bigskip
\subsubsection{Exemple 1}
Dans l'exemple suivant, nous dÃ©finissons la valeur de |tikz-code| avec deux
instructions |\path| : la premiÃ¨re instruction trace la flÃ¨che elle-mÃªme et la seconde
place l'Ã©tiquette dans un nÅ“ud Tikz dans le rectangle dÃ©limitÃ© par la flÃ¨che.

\begin{Code}
\begin{DispWithArrows*}%
      [displaystyle,
       ygap = 2mm,
       ystart = 0mm,
       \emph{tikz-code = {\draw (#1) -- ++(4.5cm,0) |- (#2) ;
                    \path (#1) -- (#2) 
                           node[text width = 4.2cm, right, midway] {#3} ;}}]
S_n
&amp; = \frac{1}{n} \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}{2}\cdot\tfrac{k}{n}\bigr)
...........
\end{Code}


\bigskip
\begin{DispWithArrows*}[
       displaystyle,
       ygap = 2mm,
       ystart = 0mm,
       tikz-code = {\draw (#1) -- ++(4.5cm,0) |- (#2) ;
                    \path (#1) -- (#2) 
                           node[text width = 4.2cm, right, midway] {#3} ;}]
S_n
&amp; = \frac{1}{n} \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}{2}\cdot\tfrac kn\bigr)
\Arrow{$\cos x = \Re(e^{ix})$}\\
&amp; = \frac{1}{n} \sum_{k=0}^{n-1} \Re\left(e^{i\frac{k\pi}{2n}}\right)
\Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
&amp; = \frac{1}{n} \Re\left(\sum_{k=0}^{n-1} e^{i\frac{k\pi}{2n}}\right)
\Arrow{$\exp$ est un morphisme pour $\times$ et $+$} \\
&amp; = \frac{1}{n} \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
\Arrow{somme de termes d'une suite gÃ©omÃ©trique de raison $e^{i\frac{2\pi}n}$}\\
&amp; = \frac{1}{n} \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}}\right)\\
&amp; = \frac{1}{n} \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right) 
\end{DispWithArrows*}

\bigskip
\subsubsection{Exemple 2}

\label{example-WithArrowsRightX}
Il est possible de modifier l'exemple prÃ©cÃ©dent pour avoir Â«|text width|Â» calculÃ©
automatiquement en fonction de la marge droite (d'une maniÃ¨re similaire Ã&nbsp; l'option
|wrap-lines|) dans les environnements |{DispWithArrows}| et |{DispWithArrows*}|. Dans la
dÃ©finition de |tikz-code|, nous utilisons la commande  |\WithArrowsRightX| qui donne
l'abscisse de la marge droite de la boÃ®te de composition (pour TeX, il s'agit d'une
commande et non d'une dimension). Pour la lisibilitÃ©, nous avons utilisÃ© un style de
\pkg{witharrows}. Cet exemple nÃ©cessite l'extension Tikz \pkg{calc}. 

\begin{Code}
\WithArrowsNewStyle{MonStyle}       
  {displaystyle,
   ygap = 2mm, 
   xoffset = 0pt,
   ystart = 0mm,
   tikz-code = {\path let \p1 = (#1)
                      in (#1)
                          -- node [anchor = west, 
                                   text width = {\emph{\WithArrowsRightX} - \x1 - 0.5 em}] 
                                  {#3} 
                         (#2) ;
                \draw let \p1 = (#1) 
                      in (#1) -- ++(\emph{\WithArrowsRightX} - \x1,0) |- (#2) ; }}
\end{Code}

\begin{Verbatim}
\begin{DispWithArrows}[MonStyle]
  S_n
  &amp; = \frac{1}{n} \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}{2}\cdot\tfrac{k}{n}\bigr)
  \Arrow{$\cos x = \Re(e^{ix})$}\\
...........
\end{Verbatim}

\WithArrowsNewStyle{MonStyle}       
{displaystyle,
 ygap = 2mm,
 xoffset = 0pt,
 ystart = 0mm,
 tikz-code = {\path let \p1 = (#1)
                    in (#1)
                        -- node [anchor = west, 
                                 text width = {\WithArrowsRightX - \x1 - 0.5 em}] {#3} 
                       (#2) ;
              \draw let \p1 = (#1) 
                    in (#1) -- ++(\WithArrowsRightX - \x1,0) |- (#2) ; }}

\begin{DispWithArrows}[MonStyle]
S_n
&amp; = \frac{1}{n} \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}{2}\cdot\tfrac{k}{n}\bigr)
\Arrow{$\cos x = \Re(e^{ix})$}\\
&amp; = \frac{1}{n} \sum_{k=0}^{n-1} \Re\left(e^{i\frac{k\pi}{2n}}\right)
\Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
&amp; = \frac{1}{n} \Re\left(\sum_{k=0}^{n-1} e^{i\frac{k\pi}{2n}}\right)
\Arrow{$\exp$ est un morphisme pour $\times$ et $+$} \\
&amp; = \frac{1}{n} \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
\Arrow{somme de termes d'une suite gÃ©omÃ©trique $e^{i\frac{2\pi}n}$}\\
&amp; = \frac{1}{n} \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}}\right)\\
&amp; = \frac{1}{n} \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right) 
\end{DispWithArrows}



\bigskip
\subsubsection{Exemple 3}

Dans l'exemple suivant, nous changeons la forme de la flÃ¨che selon que la rangÃ©e de dÃ©part
est plus longue ou plus courte que la rangÃ©e d'arrivÃ©e. Cet exemple nÃ©cessite l'extension
\pkg{calc} de Tikz. 


\begin{Code}
\begin{WithArrows}[ll,interline=5mm,xoffset=5mm,
      \emph{tikz-code  = {\draw[rounded corners,
                          every node/.style = {circle,
                                               draw,
                                               auto = false,
                                               inner sep = 1pt,
                                               fill = gray!50,
                                               font = \tiny }] 
                          let \p1 = (#1),
                              \p2 = (#2)
                          and \ifdim \x1 &gt; \x2
                               (\p1) -- node {#3} (\x1,\y2) -- (\p2)
                             \else
                               (\p1) -- (\x2,\y1) -- node {#3} (\p2)
                             \fi ;}}]
E &amp; \Longleftrightarrow \frac{(x+4)}{3} + \frac{5x+3}{5} = 7 
\Arrow{$\times 15$}\\
  &amp; \Longleftrightarrow 5(x+4) + 3(5x+3) = 105 \\
  &amp; \Longleftrightarrow 5x+20 + 15x+9 = 105 \\
  &amp; \Longleftrightarrow 20x+29 = 105 
\Arrow{$-29$}\\
  &amp; \Longleftrightarrow 20x = 76 
\Arrow{$\div 20$}\\
  &amp; \Longleftrightarrow x = \frac{38}{10} 
\end{WithArrows}
\end{Code}


\[\begin{WithArrows}[ll,interline=5mm,xoffset=5mm,
      tikz-code  = {\draw[rounded corners,
                          every node/.style = {circle,
                                               draw,
                                               auto = false,
                                               inner sep = 1pt,
                                               fill = gray!50,
                                               font = \tiny}] 
                          let \p1 = (#1),
                              \p2 = (#2)
                          in \ifdim \x1 &gt; \x2
                               (\p1) -- node {#3} (\x1,\y2) -- (\p2)
                             \else
                               (\p1) -- (\x2,\y1) -- node {#3} (\p2)
                             \fi ;}]
E &amp; \Longleftrightarrow \frac{(x+4)}{3} + \frac{5x+3}{5} = 7 
\Arrow{$\times 15$}\\
  &amp; \Longleftrightarrow 5(x+4) + 3(5x+3) = 105 \\
  &amp; \Longleftrightarrow 5x+20 + 15x+9 = 105 \\
  &amp; \Longleftrightarrow 20x+29 = 105 
\Arrow{$-29$}\\
  &amp; \Longleftrightarrow 20x = 76 
\Arrow{$\div 20$}\\
  &amp; \Longleftrightarrow x = \frac{38}{10} 
\end{WithArrows}\]



\subsection{Boucle numÃ©rotÃ©e automatique}

Supposons que nous voulions tracer une boucle avec des flÃ¨ches numÃ©rotÃ©es. Dans ce but, il
est possible d'Ã©crire une commande dÃ©diÃ©e |\NumberedLoop| qui fera le travail quand elle
sera utilisÃ©e dans le |code-after|. Dans l'exemple suivant, nous avons Ã©crit cette
commande avec |\foreach| de \pkg{pgffor} (cette extension est chargÃ©e quand \pkg{witharrows} est chargÃ©.).

\begin{Verbatim}
\NewDocumentCommand \NomberedLoop {}
        {\foreach \j in {2,...,\WithArrowsNbLines} 
              { \pgfmathtruncatemacro{\i}{\j-1}
                \Arrow[rr]{\i}{\j}{\i} }
         \Arrow[rr,xoffset=1cm,tikz=&lt;-]{1}{\WithArrowsNbLines}{\WithArrowsNbLines}}
\end{Verbatim}

La commande |\WithArrowsNbLines| est une commande disponible dans le |code-after| qui donne
le nombre total de lignes (=rangÃ©es) dans l'environnement courant (pour TeX, il s'agit
d'une commande et non d'un compteur).


\medskip
\begin{Code}
$\begin{WithArrows}[\emph{code-after = \NumberedLoop}]
a.\;&amp; f \text{ est continue sur } E \\
b.\;&amp; f \text{ est continue en } 0 \\
c.\;&amp; f \text{ est bornÃ©e sur la sphÃ¨re unitÃ©} \\
d.\;&amp; \exists K &gt; 0\quad \forall x \in E\quad \|f(x)\| \le K \|x\| \\
e.\;&amp; f \text{ est lipschitzienne} 
\end{WithArrows}$
\end{Code}

\bigskip
\begin{scope}
\NewDocumentCommand \NumberedLoop {}
        {\foreach \j in {2,...,\WithArrowsNbLines} 
              { \pgfmathtruncatemacro{\i}{\j-1}
                \Arrow[rr]{\i}{\j}{\i} }
         \Arrow[rr,xoffset=1cm,tikz=&lt;-]{1}{\WithArrowsNbLines}{\WithArrowsNbLines}}


$\begin{WithArrows}[code-after = \NumberedLoop]
a.\;&amp; f \text{ est continue sur } E \\
b.\;&amp; f \text{ est continue en } 0 \\
c.\;&amp; f \text{ est bornÃ©e sur la sphÃ¨re unitÃ©} \\
d.\;&amp; \exists K &gt; 0\quad \forall x \in E\quad \|f(x)\| \le K \|x\| \\
e.\;&amp; f \text{ est lipschitzienne} 
\end{WithArrows}$


\bigskip
Comme d'habitude, il est possible changer les caractÃ©ristiques des flÃ¨ches et des nÅ“uds 
avec l'option |tikz|. NÃ©anmoins, si nous voulons changer le style pour avoir, par
exemple, les numÃ©ros entre parenthÃ¨ses, le moyen le plus rapide est de changer la valeur de
|tikz-code|:

\begin{Code}
tikz-code = {\draw (#1) to node {\footnotesize (#3)} (#2) ;}
\end{Code}

\WithArrowsOptions{tikz-code = {\draw (#1) to node {\footnotesize (#3)} (#2) ;}}

$\begin{WithArrows}[code-after = \NumberedLoop]
a.\;&amp; f \text{ est continue on } E \\
b.\;&amp; f \text{ est continue dans } 0 \\
c.\;&amp; f \text{ est bornÃ©e sur la sphÃ¨re unitÃ©} \\
d.\;&amp; \exists K &gt; 0\quad \forall x \in E\quad \|f(x)\| \le K \|x\| \\
e.\;&amp; f \text{ est lipschitzienne}  
\end{WithArrows}$

\end{scope}


\section*{Autre documentation}

Le document |witharrows.pdf| (fourni avec l'extension \pkg{witharrows}) contient une
traduction anglaise de la documentation ici prÃ©sente, ainsi que le code source commentÃ© et
un historique des versions.  

\tableofcontents

\end{document}
</pre></body></html>