texlive[51602] Master/texmf-dist: witharrows (10jul19)

commits+karl at tug.org commits+karl at tug.org
Wed Jul 10 22:29:32 CEST 2019


Revision: 51602
          http://tug.org/svn/texlive?view=revision&revision=51602
Author:   karl
Date:     2019-07-10 22:29:32 +0200 (Wed, 10 Jul 2019)
Log Message:
-----------
witharrows (10jul19)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/witharrows/README.md
    trunk/Master/texmf-dist/doc/latex/witharrows/witharrows.pdf
    trunk/Master/texmf-dist/source/latex/witharrows/witharrows.dtx
    trunk/Master/texmf-dist/tex/latex/witharrows/witharrows.sty

Modified: trunk/Master/texmf-dist/doc/latex/witharrows/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/witharrows/README.md	2019-07-10 20:29:18 UTC (rev 51601)
+++ trunk/Master/texmf-dist/doc/latex/witharrows/README.md	2019-07-10 20:29:32 UTC (rev 51602)
@@ -1,12 +1,14 @@
 # Readme for the package witharrows
 
+Author : F. Pantigny (`fpantigny at wanadoo.fr`).
+
+CTAN page : `https://ctan.org/pkg/witharrows`
+
 ## License
 The LaTeX extension `witharrows` is distributed under the LPPL 1.3 license.
 
 ## Presentation
-This extension has been written by F. Pantigny (`fpantigny at wanadoo.fr`).
 
-
 The LaTeX package `witharrows` provides environments `{WithArrows}` and `{DispWithArrows}`
 similar to the environments `{aligned}` and `{align}` of `amsmath` but with the possibility to draw arrows on the right side of the alignment. These arrows are usually used to give explanations concerning the mathematical calculus presented.
 

Modified: trunk/Master/texmf-dist/doc/latex/witharrows/witharrows.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/witharrows/witharrows.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/witharrows/witharrows.dtx	2019-07-10 20:29:18 UTC (rev 51601)
+++ trunk/Master/texmf-dist/source/latex/witharrows/witharrows.dtx	2019-07-10 20:29:32 UTC (rev 51602)
@@ -15,8 +15,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{1.16}
-\def\myfiledate{2019/03/11}
+\def\myfileversion{1.17}
+\def\myfiledate{2019/07/09}
 %
 %
 %<*batchfile>
@@ -247,7 +247,7 @@
 %
 % \smallskip 
 % In fact, it's possible to change more drastically the shape or the arrows with
-% the option |TikzCode| presented p.~\pageref{TikzCode}.
+% the option |tikz-code| (presented p.~\pageref{tikz-code}.
 %
 % \interitem
 % It's possible to use the Tikz option ``|text width|'' to control the width of
@@ -331,8 +331,8 @@
 % environment |{WithArrows}|. \textbf{There must be no space before the opening
 % bracket (|[|) of the options of the environment.} The options apply to all the
 % arrows of the environment.\footnote{They also apply to the nested environments
-% |{WithArrows}| (with the logical exceptions of |interline|, |CodeBefore| and
-% |CodeAfter|).}
+% |{WithArrows}| (with the logical exceptions of |interline|, |code-before| and
+% |code-after|).}
 % %
 % \begin{Verbatim}
 % $\begin{WithArrows}[~emphase#tikz=blue@]
@@ -432,13 +432,14 @@
 % However, a previouly defined command |\Arrow| may still be useful in an
 % environment |{WithArrows}|. If we want to use it in such an environment, it's
 % possible to change the name of the command |\Arrow| of the package
-% \pkg{witharrows}: there is an option |CommandName| for this purpose. The new
-% name of the command must be given to the option \emph{without} the leading
-% backslash.
+% \pkg{witharrows}: there is an option |command-name|\footnote{For historical
+% reasons, there is an alias for this option: |CommandName|.} for this purpose.
+% The new name of the command must be given to the option \emph{without} the
+% leading backslash.
 % %
 % \begin{Verbatim}
 % \NewDocumentCommand {\Arrow} {} {\longmapsto}
-% $\begin{WithArrows}[~emphase#CommandName=Explanation@]
+% $\begin{WithArrows}[~emphase#command-name=Explanation@]
 % f & = \bigl(x \Arrow (x+1)^2\bigr)
 % ~emphase#\Explanation{we work directly on fonctions}@\\
 % & = \bigl(x \Arrow x^2+2x+1\bigr)
@@ -447,7 +448,7 @@
 % %
 % \begin{scope}
 % \NewDocumentCommand {\Arrow} {} {\longmapsto}
-% $\begin{WithArrows}[CommandName=Explanation]
+% $\begin{WithArrows}[command-name=Explanation]
 % f & = \bigl(x \Arrow (x+1)^2\bigr)
 % \Explanation{we work directly on fonctions}\\
 % & = \bigl(x \Arrow x^2+2x+1\bigr)
@@ -456,32 +457,88 @@
 %
 %
 % \interitem 
-% The environment |{WithArrows}| gives also two options |CodeBefore| and
-% |CodeAfter| for LaTeX code that will be executed at the beginning and at the
-% end of the environment. These options are not designed to be hooks (they are
-% available only at the environment level and they do not apply to the nested
-% environments).
+% The environment |{WithArrows}| gives also two options |code-before| and
+% |code-after|\footnote{For historical reasons, there are aliases for these
+% options: |CodeBefore| and |CodeAfter|.} for LaTeX code that will be executed
+% at the beginning and at the end of the environment. These options are not
+% designed to be hooks (they are available only at the environment level and
+% they do not apply to the nested environments).
 % %
 % \begin{Verbatim}
-% $\begin{WithArrows}[~emphase#CodeBefore = \color{blue}@]
+% $\begin{WithArrows}[~emphase#code-before = \color{blue}@]
 % A & = (a+b)^2 \Arrow{we expand} \\
 %   & = a^2 + 2ab + b^2 
 % \end{WithArrows}$
 % \end{Verbatim}
 %
-% $\begin{WithArrows}[CodeBefore = \color{blue}]
+% $\begin{WithArrows}[code-before = \color{blue}]
 % A & = (a+b)^2 \Arrow{we expand} \\
 %   & = a^2 + 2ab + b^2 
 % \end{WithArrows}$
 % 
 % \medskip 
-% Special commands are available in |CodeAfter|: a command |\WithArrowsNbLines|
+% Special commands are available in |code-after|: a command |\WithArrowsNbLines|
 % which gives the number of lines (=rows) of the current environment (this is a
 % command and not a counter), a special form of the command |\Arrow| and the
 % command |\MultiArrow|: these commands are described in the section concerning
 % the nested environments, p.~\pageref{NestedEnv}.
 %
+% \section{Numbers of columns}
 %
+% So far, we have used the environment |{WithArrows}| with two columns. However,
+% it's possible to use the environment with an arbitrary number of columns with
+% the option |format|. The value given to this option is like the preamble of an
+% environment |{array}|, that is to say a sequence of letters |r|, |c| and |l|.
+% The default value of the option |format| is, in fact, |rl|.
+%
+% \bigskip
+% For exemple, if we want only one column left-aligned, we use the option |format=l|.
+% \begin{Verbatim}
+% $\begin{WithArrows}[~emphase#format = l@]
+% f(x) \ge g(x) \Arrow{by squaring both sides} \\
+% f(x)^2 \ge g(x)^2 \Arrow{by moving to left side} \\
+% f(x)^2 - g(x)^2 \ge 0 
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% $\begin{WithArrows}[format = l]
+% f(x) \ge g(x) \Arrow{by squaring both sides} \\
+% f(x)^2 \ge g(x)^2 \Arrow{by moving to left side} \\
+% f(x)^2 - g(x)^2 \ge 0 
+% \end{WithArrows}$
+%
+% \interitem
+% In the following example, we use five columns all centered (the environment
+% |{DispWithArrows*}| is  presented p.~\pageref{DispWithArrows}).
+%
+% \begin{Verbatim}
+% \begin{DispWithArrows*}[~emphase#format = ccccc@,
+%                         wrap-lines,
+%                         tikz = {align = flush left},
+%                         interline=1mm]
+% k & \;\le\; & t & \;\le\; & k+1 \\
+% \frac{1}{k+1} & \le & \frac{1}{t} & \le & \frac{1}{k} 
+% \Arrow{we can integrate the inequalities since $k \leq k+1$ } \\
+% \int\limits_k^{k+1} \frac{\text{d} t}{k+1} 
+% & \le & \int\limits_k^{k+1} \frac{\text{d} t}{t} 
+% & \le & \int\limits_k^{k+1} \frac{\text{d} t}{k} \\
+% \frac{1}{k+1} & \le & \ln(k+1)-\ln(k) & \le & \frac{1}{k} 
+% \end{DispWithArrows*}
+% \end{Verbatim}
+% \begin{DispWithArrows*}[format = ccccc,
+%                         wrap-lines,
+%                         tikz = {align = flush left},
+%                         interline=1mm]
+% k & \;\le\; & t & \;\le\; & k+1 \\
+% \frac{1}{k+1} & \le & \frac{1}{t} & \le & \frac{1}{k} 
+% \Arrow{we can integrate the inequalities since $k \leq k+1$ } \\
+% \int\limits_k^{k+1} \frac{\text{d} t}{k+1} 
+% & \le & \int\limits_k^{k+1} \frac{\text{d} t}{t} 
+% & \le & \int\limits_k^{k+1} \frac{\text{d} t}{k} \\
+% \frac{1}{k+1} & \le & \ln(k+1)-\ln(k) & \le & \frac{1}{k} 
+% \end{DispWithArrows*}
+% 
+%
 % \section{Precise positioning of the arrows}
 %
 %
@@ -525,12 +582,12 @@
 % $\begin{WithArrows}[displaystyle]
 % I
 % & = \int_{\frac{\pi}4}^0 \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)(-d u) 
-% \Arrow[lr]{This arrow uses the \texttt{lr} option.}\\
+% \Arrow[lr]{This arrow uses the |lr| option.}\\
 % & = \int_0^{\frac{\pi}4} \ln\Bigl(1+\tan\left(\tfrac{\pi}4-u\right)\Bigr)d u \\
 % & = \int_0^{\frac{\pi}4}\ln\left(1+\frac{1-\tan u}{1+\tan u}\right)\, d u \\
 % & =\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}]{This arrow uses a \texttt{ll} option
-% and a \texttt{jump} equal to $2$}\\ 
+% \Arrow[ll,jump=2,tikz={text width = 5cm}]{This arrow uses a |ll| option
+% and a |jump| equal to $2$}\\ 
 % & =\int_0^{\frac{\pi}4} \ln\left(\frac2{1+\tan u}\right)\, d u\\
 % & =\int_0^{\frac{\pi}4}\bigl(\ln2-\ln(1+\tan u)\bigr)\, d u \\
 % & =\frac{\pi}4\ln2-\int_0^{\frac{\pi}4}\ln(1+\tan u)\, d u  \\
@@ -540,7 +597,7 @@
 %
 %
 % \interitem
-% There is also an option called \texttt{i} ($i$ for \emph{intermediate}). With
+% There is also an option called |i| (\emph{i} for \emph{intermediate}). With
 % this option, the arrow is vertical and at the leftmost position.
 %
 % \begin{Verbatim}
@@ -651,7 +708,8 @@
 %
 % \interitem
 %
-% \section{The options ``up'' and ``down'' for individual arrows}
+% \section[The options 'up' and 'down' for individual arrows]%
+%     {The options ``up'' and ``down'' for individual arrows} 
 %
 % \label{up-and-down}
 % At the local level, there are also two options for individuals arrows, called
@@ -661,10 +719,10 @@
 % \begin{Verbatim}
 % \(\begin{WithArrows}
 % A & = B 
-% \Arrow~emphase#[up]@{an arrow of type "up"} \\
+% \Arrow~emphase#[up]@{an arrow of type \texttt{up}} \\
 %   & = C + C + C + C + C + C + C + C  \\
 %   & = C + C + C + C + C + C + C + C  
-% \Arrow~emphase#[down]@{an arrow of type "down"} \\
+% \Arrow~emphase#[down]@{an arrow of type \texttt{down}} \\
 %   & = E + E 
 % \end{WithArrows}\)
 % \end{Verbatim}
@@ -672,10 +730,10 @@
 % \vspace{1cm}
 % \(\begin{WithArrows}
 % A & = B 
-% \Arrow[up]{an arrow of type "up"} \\
+% \Arrow[up]{an arrow of type \texttt{up}} \\
 %   & = C + C + C + C + C + C + C + C  \\
 %   & = C + C + C + C + C + C + C + C  
-% \Arrow[down]{an arrow of type "down"} \\
+% \Arrow[down]{an arrow of type \texttt{down}} \\
 %   & = E + E 
 % \end{WithArrows}\)
 %
@@ -684,6 +742,7 @@
 % The options |up| and |down| require the package \pkg{varwidth} and the Tikz
 % library \pkg{calc}. It they are not loaded, an error will be raised.
 %
+%
 % \interitem
 %
 % \section{Comparison with the environment \{aligned\}}
@@ -887,7 +946,7 @@
 %
 % The environments |{WithArrows}| can be nested. In this case, the options given
 % to the encompassing environment applies also to the inner ones (with logical
-% exceptions for |interline|, |CodeBefore| and |CodeAfter|). The command |Arrow|
+% exceptions for |interline|, |code-before| and |code-after|). The command |Arrow|
 % can be used as usual in each environment |{WithArrows}|.
 % 
 % \begin{Verbatim}[formatcom=\small\color{gray}]
@@ -929,7 +988,7 @@
 % environment. For example, one may want to draw the following arrow :
 %
 % \bigskip
-% $\begin{WithArrows}[CodeAfter = \Arrow[v]{1-2}{2-2}{division by $2$} ]
+% $\begin{WithArrows}[code-after = \Arrow[v]{1-2}{2-2}{division by $2$} ]
 % \varphi(x,y)=0
 %   & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
 %   & \Leftrightarrow
@@ -947,12 +1006,12 @@
 %
 %
 % \bigskip
-% Such a construction is possible by using |\Arrow| in the |CodeAfter| option.
-% Indeed, in |CodeAfter|, a special version of |\Arrow| is available (we will
-% call it ``|\Arrow| in |CodeAfter|'').
+% Such a construction is possible by using |\Arrow| in the |code-after| option.
+% Indeed, in |code-after|, a special version of |\Arrow| is available (we will
+% call it ``|\Arrow| in |code-after|'').
 %
 % \smallskip
-% A command |\Arrow| in |CodeAfter| takes three arguments :
+% A command |\Arrow| in |code-after| takes three arguments :
 % \begin{itemize}
 % \item a specification of the start row of the arrow ;
 % \item a specification of the end row of the arrow ;
@@ -970,7 +1029,7 @@
 % In the previous example, there are two environments |{WithArrows}| nested in
 % the main environment |{WithArrows}|.
 %
-% $\begin{WithArrows}[TikzCode = {\path (#1) to node {#3} (#2) ; }]
+% $\begin{WithArrows}[tikz-code = {\path (#1) to node {#3} (#2) ; }]
 % \varphi(x,y)=0
 %   & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
 %   & \Leftrightarrow \color{blue}
@@ -990,9 +1049,9 @@
 % The arrow we want to draw starts in the row~$2$ of the sub-environment
 % number~$1$ (and therefore, the specification is |1-2|) and ends in the row~$2$
 % of the sub-environment number~$2$ (and therefore, the specification is |2-2|).
-% We can draw the arrow with the following command |\Arrow| in |CodeAfter| :
+% We can draw the arrow with the following command |\Arrow| in |code-after| :
 % \begin{Verbatim}
-% $\begin{WithArrows}[~emphase#CodeAfter = \Arrow{1-2}{2-2}{division by $2$}@ ]
+% $\begin{WithArrows}[~emphase#code-after = \Arrow{1-2}{2-2}{division by $2$}@ ]
 % \varphi(x,y)=0
 %   & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
 % .........
@@ -999,7 +1058,7 @@
 % \end{WithArrows}$
 % \end{Verbatim}
 %
-% $\begin{WithArrows}[CodeAfter = \Arrow{1-2}{2-2}{division by $2$} ]
+% $\begin{WithArrows}[code-after = \Arrow{1-2}{2-2}{division by $2$} ]
 % \varphi(x,y)=0
 %   & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
 %   & \Leftrightarrow
@@ -1016,18 +1075,18 @@
 % \end{WithArrows}$
 % 
 % \bigskip
-% The options allowed for a command |\Arrow| in |CodeAfter| are : |ll|, |lr|,
-% |rl|, |rr|, |v|, |xoffset|, |tikz| and |TikzCode|. Except |v|, which is
-% specific to |\Arrow| in |CodeAfter|, all these options have their usual
+% The options allowed for a command |\Arrow| in |code-after| are : |ll|, |lr|,
+% |rl|, |rr|, |v|, |xoffset|, |tikz| and |tikz-code|. Except |v|, which is
+% specific to |\Arrow| in |code-after|, all these options have their usual
 % meaning.
 %
 % With the option |v|, the arrow drawn is vertical to an abscissa computed with
 % the start row and the end row only : the intermediate lines are not taken into
 % account unlike with the option |i|. Currently, the option |i| is not available
-% for the command~|\Arrow| in |CodeAfter|. However, it's always possible to
+% for the command~|\Arrow| in |code-after|. However, it's always possible to
 % translate an arrow with |xoffset| (or |xshift| of Tikz).
 % \begin{Verbatim}
-% $\begin{WithArrows}[CodeAfter=\Arrow~emphase#[v]@{1-2}{2-2}{division by $2$}]
+% $\begin{WithArrows}[code-after=\Arrow~emphase#[v]@{1-2}{2-2}{division by $2$}]
 % \varphi(x,y)=0
 %   & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
 % .........
@@ -1034,7 +1093,7 @@
 % \end{WithArrows}$
 % \end{Verbatim}
 %
-% $\begin{WithArrows}[CodeAfter = \Arrow[v]{1-2}{2-2}{division by $2$} ]
+% $\begin{WithArrows}[code-after = \Arrow[v]{1-2}{2-2}{division by $2$} ]
 % \varphi(x,y)=0
 %   & \Leftrightarrow (x+2y)^2+(2x+4y)^2 = 0 \\
 %   & \Leftrightarrow
@@ -1053,7 +1112,7 @@
 %  
 % \interitem
 % The package \pkg{witharrows} gives also another command available only in
-% |CodeAfter|: the command |\MultiArrow|. This command draws a ``rak''. The list
+% |code-after|: the command |\MultiArrow|. This command draws a ``rak''. The list
 % of the rows of the environment concerned by this rak are given in the first
 % argument of the command |\MultiArrow|. This list is given with the syntax of
 % the list in a |\foreach| command of \pkg{pgffor}.
@@ -1061,7 +1120,7 @@
 %
 % \begin{Verbatim}
 % $\begin{WithArrows}[tikz = rounded corners,
-%                     CodeAfter = {~emphase#\MultiArrow{1,...,4}{text}@} ]
+%                     code-after = {~emphase#\MultiArrow{1,...,4}{text}@} ]
 % A & = B \\
 %   & = C \\
 %   & = D \\
@@ -1072,7 +1131,7 @@
 % 
 % 
 % $\begin{WithArrows}[tikz = rounded corners,
-%                     CodeAfter = {\MultiArrow{1,...,4}{text}}]
+%                     code-after = {\MultiArrow{1,...,4}{text}}]
 % A & = B \\
 %   & = C \\
 %   & = D \\
@@ -1147,7 +1206,7 @@
 % \item the Tikz style |WithArrows/arrow| is the style used by \pkg{witharrows}
 % when drawing an arrow\footnote{More precisely, this style is given to the Tikz
 % option ``|every path|'' before drawing the arrow with the code of the option
-% |TikzCode|. This style is modified (in TeX scopes) by the option |tikz| of
+% |tikz-code|. This style is modified (in TeX scopes) by the option |tikz| of
 % \pkg{witharrows}.};
 %
 % \item the Tikz style |WithArrows/arrow/tips| is the style for the tip of the
@@ -1154,9 +1213,8 @@
 % arrow (loaded by |WithArrows/arrow|).
 % \end{itemize}
 %
-% For example, we can draw an arrow from 
-% \texttt{wa-\WithArrowsLastEnv-2-1-2-r.south} to
-% \texttt{wa-\WithArrowsLastEnv-3-2-r.north} with the following Tikz command.
+% For example, we can draw an arrow from \texttt{wa-\WithArrowsLastEnv-2-1-2-r.south}
+% to \texttt{wa-\WithArrowsLastEnv-3-2-r.north} with the following Tikz command. 
 %
 % \begin{Verbatim}
 % \begin{tikzpicture}[remember picture,overlay]
@@ -1203,7 +1261,7 @@
 % \end{tikzpicture}
 %
 % \medskip
-% In this case, it would be easier to use a command |\Arrow| in |CodeAfter| but
+% In this case, it would be easier to use a command |\Arrow| in |code-after| but
 % this is an example to explain how the Tikz nodes created by \pkg{witharrows}
 % can be used.
 % 
@@ -1453,7 +1511,7 @@
 % \bigskip
 % The option |wrap-lines| doesn't apply to the environments |{WithArrows}|
 % nested in an environment |{DispWithArrows}| or |{DispWithArrows*}|. However,
-% it applies to the instructions |\Arrow| and |\MultiArrow| of the |CodeAfter|
+% it applies to the instructions |\Arrow| and |\MultiArrow| of the |code-after|
 % of the environments |{DispWithArrows}| or |{DispWithArrows*}|.
 % 
 % \vspace{1cm}
@@ -1504,19 +1562,19 @@
 %
 % There are differences between |{DispWithArrows}| and |{align}|. 
 % \begin{itemize}
-% \item The environment |{DispWithArrows}| allows only two columns.
-% \item The environment |{DispWithArrows}| can not be inserted in an environment
+% \item The environment |{DispWithArrows}| cannot be inserted in an environment
 % |{gather}| of \pkg{amsmath}.
 % \item An environment |{DispWithArrows}| is always unbreakable (even with
 % |\allowdisplaybreaks| of \pkg{amsmath}).
 % \item The commands |\label|, |\tag|, |\notag| and |\nonumber| are allowed only
-% in the second column.
-% \item After an |\item| of a LaTeX list, no vertical space is added.
+% in the last column.
+% \item After an |\item| of a LaTeX list, no vertical space is added (this can
+% be changed with the option |standard-behaviour-with-items|).
 % \item 
 % \begin{bfseries}
-% Last but not least, by default, the elements of a \texttt{\{DispWithArrows\}}
-% are composed in \texttt{textstyle} and not in \texttt{displaystyle} (it's
-% possible to change this point with the option \texttt{displaystyle}).
+% Last but not least, by default, the elements of a |\{DispWithArrows\}|
+% are composed in |textstyle| and not in |displaystyle| (it's possible to change
+% this point with the option |displaystyle|). 
 % \end{bfseries}
 % \end{itemize}
 % 
@@ -1535,20 +1593,21 @@
 % 
 % \section{Advanced features}
 %
-% 
-% \subsection{The option TikzCode : how to change the shape of the arrows}
 %
-% \label{TikzCode}
+% \subsection{The option tikz-code : how to change the shape of the arrows}
 %
-% The option |TikzCode| allows the user to change the shape of the
+% \label{tikz-code}
+%
+% The option |tikz-code|\footnote{For historical reasons, the option |tikz-code|
+% has an alias: |TikzCode|.} allows the user to change the shape of the 
 % arrows.\footnote{If the option |wrap-lines| is used in an environment
-% |{DispWithArrows}| or |{DispWithArrows*}|, the option |TikzCode| will have no
+% |{DispWithArrows}| or |{DispWithArrows*}|, the option |tikz-code| will have no
 % effect for the arrows of this environment but only for the arrows in the
 % nested environments |{WithArrows}|.}
 %
 % \smallskip
 % For example, the options ``|up|'' and ``|down|'' described previously (cf.
-% p.~\pageref{up-and-down}) are programmed internally with |TikzCode|.
+% p.~\pageref{up-and-down}) are programmed internally with |tikz-code|.
 % 
 % \smallskip
 % The value of this option must be a valid Tikz drawing instruction (with the
@@ -1566,8 +1625,8 @@
 % In the following example, we replace this default path by a path with three
 % segments (and the node overwriting the second segment).
 % \begin{Verbatim}
-% \begin{WithArrows}[ygap=5pt,interline=4mm,
-%       ~emphase#TikzCode = {\draw[rounded corners]@
+% \begin{WithArrows}[format=c,ygap=5pt,interline=4mm,
+%       ~emphase#tikz-code = {\draw[rounded corners]@
 %       ~emphase#                  (~#1) -- ([xshift=5mm]~#1)@
 %       ~emphase#                  -- node[circle,@
 %       ~emphase#                          draw,@
@@ -1576,17 +1635,18 @@
 %       ~emphase#                          inner sep = 1pt] {\tiny ~#3}@ 
 %       ~emphase#                  ([xshift=5mm]~#2)@
 %       ~emphase#                  -- (~#2) ; }@]
-% E & \Longleftrightarrow 3 (2x+4) = 6   \Arrow{$\div 3$} \\
-%   & \Longleftrightarrow 2x+4 = 2       \Arrow{$-4$}     \\
-%   & \Longleftrightarrow 2x = -2        \Arrow{$\div 2$} \\
-%   & \Longleftrightarrow  x = -1
+% 3 (2x+4) = 6   \Arrow{$\div 3$} \\
+% 2x+4 = 2       \Arrow{$-4$}     \\
+% 2x = -2        \Arrow{$\div 2$} \\
+%  x = -1
 % \end{WithArrows}
 % \end{Verbatim}
 %
 % 
-% \[\begin{WithArrows}[ygap=5pt,
+% \[\begin{WithArrows}[format=c,
+%       ygap=5pt,
 %       interline=4mm,
-%       TikzCode = {\draw[rounded corners]
+%       tikz-code = {\draw[rounded corners]
 %                         (#1) 
 %                         --
 %                         ([xshift=5mm]#1)
@@ -1598,25 +1658,22 @@
 %                         ([xshift=5mm]#2)
 %                         --
 %                         (#2) ; }]
-% E & \Longleftrightarrow 3 (2x+4) = 6 
-% \Arrow{$\div 3$}\\
-%   & \Longleftrightarrow 2x+4 = 2 
-% \Arrow{$-4$}\\
-%   & \Longleftrightarrow 2x = -2 
-% \Arrow{$\div 2$} \\
-%   & \Longleftrightarrow x = -1
+% 3 (2x+4) = 6   \Arrow{$\div 3$} \\
+% 2x+4 = 2       \Arrow{$-4$}     \\
+% 2x = -2        \Arrow{$\div 2$} \\
+%  x = -1
 % \end{WithArrows}\]
 %
 % \bigskip
 % The environments |{DispWithArrows}| and its starred version
 % |{DispWithArrows*}| provide a command |\WithArrowsRightX| which can be used in
-% a definition of |TikzCode|. This command gives the $x$-value of the right side
+% a definition of |tikz-code|. This command gives the $x$-value of the right side
 % of the composition box (taking into account the eventual tags of the
 % equations). For an example of use, see p.~\pageref{example-WithArrowsRightX}.
 %
 %
 % \bigskip
-% \subsection{The command WithArrowsNewStyle}
+% \subsection{The command \textbackslash WithArrowsNewStyle}
 %
 % The extension \pkg{witharrows} provides a command |\WithArrowsNewStyle| to
 % define styles in a way similar to the ``styles'' of Tikz.
@@ -1663,13 +1720,13 @@
 % \draw (B) -- (C) ;
 % \draw[<-] (B) to ++(0,0.2) ;
 % \draw[<-] (C) to ++(0,-0.2) ;
-% \path (C) node[right=1mm] {\texttt{ystart}} ;
+% \path (C) node[right=1mm] {|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[<-] (E) to ++(0,0.2) ;
 % \draw[<-] (F) to ++(0,-0.2) ;
-% \path (F) node[right=1mm] {\texttt{ygap}} ;
+% \path (F) node[right=1mm] {|ygap|} ;
 % \end{tikzpicture}
 %
 % \interitem 
@@ -1810,28 +1867,8 @@
 %
 % \section{Examples}
 %
-% \subsection{With only one column}
+% \subsection{\textbackslash MoveEqLeft}
 %
-% It's possible to use the environment |{WithArrows}| with making use of the
-% left column only, or the right column only.
-% %
-% \begin{Verbatim}
-% $\begin{WithArrows}
-% & f(x) \ge g(x) \Arrow{by squaring both sides} \\
-% & f(x)^2 \ge g(x)^2 \Arrow{by moving to left side} \\
-% & f(x)^2 - g(x)^2 \ge 0 
-% \end{WithArrows}$
-% \end{Verbatim}
-%
-% $\begin{WithArrows}
-% & f(x) \ge g(x) \Arrow{by squaring both sides} \\
-% & f(x)^2 \ge g(x)^2 \Arrow{by moving to left side} \\
-% & f(x)^2 - g(x)^2 \ge 0 
-% \end{WithArrows}$
-%
-% \bigskip
-% \subsection{MoveEqLeft}
-%
 % It's possible to use |\MoveEqLeft| of \pkg{mathtools} (if we don't want
 % ampersand on the first line):
 % %
@@ -1868,7 +1905,8 @@
 %
 % \begin{Verbatim}
 % \begin{WithArrows}%
-%      [interline = 4mm,
+%      [format = c,
+%       interline = 4mm,
 %       tikz = {~emphase#every node/.style = {circle,@
 %               ~emphase#                     draw,@
 %               ~emphase#                     auto = false,@
@@ -1875,17 +1913,15 @@
 %               ~emphase#                     fill = gray!50,@
 %               ~emphase#                     inner sep = 1pt,@
 %               ~emphase#                     font = \tiny}@}]
-% E & \Longleftrightarrow 3 (2x+4) = 6 
-% \Arrow{$\div 3$}\\
-%   & \Longleftrightarrow 2x+4 = 2 
-% \Arrow{$-4$}\\
-%   & \Longleftrightarrow 2x = -2 
-% \Arrow{$\div 2$} \\
-%   & \Longleftrightarrow 2x = -1
+%  3 (2x+4) = 6 \Arrow{$\div 3$} \\
+%  2x+4 = 2     \Arrow{$-4$} \\
+%  2x = -2      \Arrow{$\div 2$} \\
+%  2x = -1
 % \end{WithArrows}
 % \end{Verbatim}
 %
 % \[\begin{WithArrows}[%
+%       format = c,
 %       interline = 4mm,
 %       tikz = {every node/.style = {circle,
 %                                    draw,
@@ -1893,27 +1929,24 @@
 %                                    fill = gray!50,
 %                                    inner sep = 1pt,
 %                                    font = \tiny}}]
-% E & \Longleftrightarrow 3 (2x+4) = 6 
-% \Arrow{$\div 3$}\\
-%   & \Longleftrightarrow 2x+4 = 2 
-% \Arrow{$-4$}\\
-%   & \Longleftrightarrow 2x = -2 
-% \Arrow{$\div 2$} \\
-%   & \Longleftrightarrow 2x = -1
+%  3 (2x+4) = 6 \Arrow{$\div 3$} \\
+%  2x+4 = 2     \Arrow{$-4$}     \\
+%  2x = -2      \Arrow{$\div 2$} \\
+%  2x = -1
 % \end{WithArrows}\]
 %
 %
 % \bigskip
-% \subsection{Examples with the option TikzCode}
+% \subsection{Examples with the option tikz-code}
 %
-% We recall that the option |TikzCode| is the Tikz code used by \pkg{witharrows}
+% We recall that the option |tikz-code| is the Tikz code used by \pkg{witharrows}
 % to draw the arrows.\footnote{If an environment |{DispWithArrows}| or
 % |{DispWithArrows*}| is used with the option |wrap-lines|, the value of the
-% option |TikzCode| is not used for this environment (but is used for the
+% option |tikz-code| is not used for this environment (but is used for the
 % environments nested inside).}
 %
 % \smallskip
-% The value by defaut of |TikzCode| is \verb|\draw (#1) to node {#3} (#2) ;|
+% The value by defaut of |tikz-code| is \verb|\draw (#1) to node {#3} (#2) ;|
 % where the three markers |#1|, |#2| and |#3| represent the start row, the end
 % row and the label of the arrow.
 %
@@ -1920,7 +1953,7 @@
 %
 % \bigskip
 % \subsubsection{Example 1}
-% In the following example, we define the value of |TikzCode| with two
+% In the following example, we define the value of |tikz-code| with two
 % instructions |\path| : the first instruction draws the arrow itself and the
 % second puts the label in a Tikz node in the rectangle delimited by the arrow.
 %
@@ -1929,9 +1962,9 @@
 %       [displaystyle,
 %        ygap = 2mm,
 %        ystart = 0mm,
-%        ~emphase#TikzCode = {\draw (~#1) -- ++(4.5cm,0) |- (~#2) ;@
-%        ~emphase#            \path (~#1) -- (~#2) @
-%        ~emphase#                   node[text width = 4.2cm, right, midway] {~#3} ;}@]
+%        ~emphase#tikz-code = {\draw (~#1) -- ++(4.5cm,0) |- (~#2) ;@
+%        ~emphase#             \path (~#1) -- (~#2) @
+%        ~emphase#                    node[text width = 4.2cm, right, midway] {~#3} ;}@]
 % S_n
 % & = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
 % ...........
@@ -1943,9 +1976,9 @@
 %        displaystyle,
 %        ygap = 2mm,
 %        ystart = 0mm,
-%        TikzCode = {\draw (#1) -- ++(4.5cm,0) |- (#2) ;
-%                    \path (#1) -- (#2) 
-%                           node[text width = 4.2cm, right, midway] {#3} ;}]
+%        tikz-code = {\draw (#1) -- ++(4.5cm,0) |- (#2) ;
+%                     \path (#1) -- (#2) 
+%                            node[text width = 4.2cm, right, midway] {#3} ;}]
 % S_n
 % & = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
 % \Arrow{$\cos x = \Re(e^{ix})$}\\
@@ -1966,7 +1999,7 @@
 % It's possible to modify the previous example to have the ``|text width|''
 % automatically computed with the right margin (in a way similar as the
 % |wrap-lines| option) in the environments |{DispWithArrows}| and
-% |{DispWithArrows*}|. In the definition of |TikzCode|, we use the command
+% |{DispWithArrows*}|. In the definition of |tikz-code|, we use the command
 % |\WithArrowsRightX| which is the $x$-value of the right margin of the current
 % composition box (it's a TeX command and not a dimension). For lisibility, we
 % use a style. This example requires the Tikz library \pkg{calc}.
@@ -1977,14 +2010,14 @@
 %    ygap = 2mm,
 %    xoffset = 0pt,
 %    ystart = 0mm,
-%    TikzCode = {\path let \p1 = (~#~#1)
-%                      in (~#~#1)
-%                          -- node [anchor = west, 
-%                                   text width = {~emphase#\WithArrowsRightX@ - \x1 - 0.5 em}] 
-%                                  {~#~#3} 
-%                         (~#~#2) ;
-%                \draw let \p1 = (~#~#1) 
-%                      in (~#~#1) -- ++(~emphase#\WithArrowsRightX@ - \x1,0) |- (~#~#2) ; }}
+%    tikz-code = {\path let \p1 = (~#~#1)
+%                       in (~#~#1)
+%                           -- node [anchor = west, 
+%                                    text width = {~emphase#\WithArrowsRightX@ - \x1 - 0.5 em}] 
+%                                   {~#~#3} 
+%                          (~#~#2) ;
+%                 \draw let \p1 = (~#~#1) 
+%                       in (~#~#1) -- ++(~emphase#\WithArrowsRightX@ - \x1,0) |- (~#~#2) ; }}
 % \end{Verbatim}
 %
 % \begin{Verbatim}
@@ -2000,13 +2033,13 @@
 %  ygap = 2mm,
 %  xoffset = 0pt,
 %  ystart = 0mm,
-%  TikzCode = {\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) ; }}
+%  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}[MyStyle]
 % S_n
@@ -2027,26 +2060,26 @@
 % \bigskip
 % \subsubsection{Example 3}
 % 
-% In the following example, we change the shape of the arrow depending on wether
+% In the following example, we change the shape of the arrow depending on whether
 % the start row is longer than the end row or not. This example requires the
 % Tikz library \pkg{calc}.
 % 
 % \begin{Verbatim}
 % \begin{WithArrows}[ll,interline=5mm,xoffset=5mm,
-%       ~emphase#TikzCode  = {\draw[rounded corners,@
-%       ~emphase#                   every node/.style = {circle,@
-%       ~emphase#                                        draw,@
-%       ~emphase#                                        auto = false,@
-%       ~emphase#                                        inner sep = 1pt,@
-%       ~emphase#                                        fill = gray!50,@
-%       ~emphase#                                        font = \tiny }]@ 
-%       ~emphase#                   let \p1 = (~#1),@
-%       ~emphase#                       \p2 = (~#2)@
-%       ~emphase#                   in \ifdim \x1 > \x2@
-%       ~emphase#                        (\p1) -- node {~#3} (\x1,\y2) -- (\p2)@
-%       ~emphase#                      \else@
-%       ~emphase#                        (\p1) -- (\x2,\y1) -- node {~#3} (\p2)@
-%       ~emphase#                      \fi ;}@]
+%       ~emphase#tikz-code  = {\draw[rounded corners,@
+%       ~emphase#                    every node/.style = {circle,@
+%       ~emphase#                                         draw,@
+%       ~emphase#                                         auto = false,@
+%       ~emphase#                                         inner sep = 1pt,@
+%       ~emphase#                                         fill = gray!50,@
+%       ~emphase#                                         font = \tiny }]@ 
+%       ~emphase#                    let \p1 = (~#1),@
+%       ~emphase#                        \p2 = (~#2)@
+%       ~emphase#                    in \ifdim \x1 > \x2@
+%       ~emphase#                         (\p1) -- node {~#3} (\x1,\y2) -- (\p2)@
+%       ~emphase#                       \else@
+%       ~emphase#                         (\p1) -- (\x2,\y1) -- node {~#3} (\p2)@
+%       ~emphase#                       \fi ;}@]
 % E & \Longleftrightarrow \frac{(x+4)}3 + \frac{5x+3}5 = 7 
 % \Arrow{$\times 15$}\\
 %   & \Longleftrightarrow 5(x+4) + 3(5x+3) = 105 \\
@@ -2061,20 +2094,20 @@
 %
 %
 % \[\begin{WithArrows}[ll,interline=5mm,xoffset=5mm,
-%       TikzCode  = {\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 > \x2
-%                               (\p1) -- node {#3} (\x1,\y2) -- (\p2)
-%                             \else
-%                               (\p1) -- (\x2,\y1) -- node {#3} (\p2)
-%                             \fi ;}]
+%       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 > \x2
+%                                (\p1) -- node {#3} (\x1,\y2) -- (\p2)
+%                              \else
+%                                (\p1) -- (\x2,\y1) -- node {#3} (\p2)
+%                              \fi ;}]
 % E & \Longleftrightarrow \frac{(x+4)}3 + \frac{5x+3}5 = 7 
 % \Arrow{$\times 15$}\\
 %   & \Longleftrightarrow 5(x+4) + 3(5x+3) = 105 \\
@@ -2092,7 +2125,7 @@
 %
 % Assume we want to draw a loop of numbered arrows. In this purpose, it's
 % possible to write a dedicated command |\NumberedLoop| which will do the job
-% when used in |CodeAfter|. In the following example, we write this command with
+% when used in |code-after|. In the following example, we write this command with
 % |\NewDocumentCommand| of \pkg{xparse} and |\foreach| of \pkg{pgffor} (both
 % packages are loaded when \pkg{witharrows} is loaded).
 %
@@ -2104,7 +2137,7 @@
 %          \Arrow[rr,xoffset=1cm,tikz=<-]{1}{\WithArrowsNbLines}{\WithArrowsNbLines}}
 % \end{Verbatim}
 % 
-% The command |\WithArrowsNbLines| is a command available in |CodeAfter| which
+% The command |\WithArrowsNbLines| is a command available in |code-after| which
 % gives the total number of lines (=rows) of the current environment (it's a
 % command and not a counter).
 %
@@ -2111,7 +2144,7 @@
 %
 % \bigskip
 % \begin{Verbatim}
-% $\begin{WithArrows}[~emphase#CodeAfter = \NumberedLoop@]
+% $\begin{WithArrows}[~emphase#code-after = \NumberedLoop@]
 % a.\;& f \text{ est continuous on } E \\
 % b.\;& f \text{ est continuous in } 0 \\
 % c.\;& f \text{ is bounded on the unit sphere} \\
@@ -2129,7 +2162,7 @@
 %          \Arrow[rr,xoffset=1cm,tikz=<-]{1}{\WithArrowsNbLines}{\WithArrowsNbLines}}
 %
 %
-% $\begin{WithArrows}[CodeAfter = \NumberedLoop]
+% $\begin{WithArrows}[code-after = \NumberedLoop]
 % a.\;& f \text{ est continuous on } E \\
 % b.\;& f \text{ est continuous in } 0 \\
 % c.\;& f \text{ is bounded on the unit sphere} \\
@@ -2142,15 +2175,15 @@
 % As usual, it's possible to change the characteristic of both arrows and nodes
 % with the option |tikz|. However, if we want to change the style to have, for
 % example, numbers in parenthesis, the best way is to change the value of
-% |TikzCode|:
+% |tikz-code|:
 %
 % \begin{Verbatim}
-% TikzCode = {\draw (~#1) to node {\footnotesize (~#3)} (~#2) ;}
+% tikz-code = {\draw (~#1) to node {\footnotesize (~#3)} (~#2) ;}
 % \end{Verbatim}
 %
-% \WithArrowsOptions{TikzCode = {\draw (#1) to node {\footnotesize (#3)} (#2) ;}}
+% \WithArrowsOptions{tikz-code = {\draw (#1) to node {\footnotesize (#3)} (#2) ;}}
 %
-% $\begin{WithArrows}[CodeAfter = \NumberedLoop]
+% $\begin{WithArrows}[code-after = \NumberedLoop]
 % a.\;& f \text{ est continuous on } E \\
 % b.\;& f \text{ est continuous in } 0 \\
 % c.\;& f \text{ is bounded on the unit sphere} \\
@@ -2320,7 +2353,7 @@
 %    \end{macrocode}
 % The flag |\g_@@_footnote_bool| is raised and so, we will only have to test
 % |\g_@@_footnote_bool| in order to know if we have to insert an environnement
-% |{savenotes}| (the |\begin{savenotes}| is in |\@@_pre_environment:n| and
+% |{savenotes}| (the |\begin{savenotes}| is in |\@@_pre_halign:n| and
 % |\end{savenotes}| at the end of the environments |{WithArrows}| and
 % |{DispWithArrows}|).
 %
@@ -2353,7 +2386,11 @@
 \cs_generate_variant:Nn \@@_error:nn { n x }
 %    \end{macrocode}
 % 
-%
+%    \begin{macrocode}
+\cs_generate_variant:Nn \tl_put_right:Nn { N v }
+\cs_generate_variant:Nn \seq_set_split:Nnn { N x x }
+%    \end{macrocode}
+% 
 % \medskip
 % We create booleans in order to know if some packages are loaded. For example,
 % for the package \pkg{amsmath}, the boolean is called
@@ -2379,7 +2416,7 @@
 %
 % \bigskip
 % We define a command |\@@_strcmp:nn| to compare two token lists. It will be
-% available wether the engine is pdfTeX, XeTeX or LuaTeX.
+% available whether the engine is pdfTeX, XeTeX or LuaTeX.
 %    \begin{macrocode}
 \sys_if_engine_luatex:TF
   { 
@@ -2412,11 +2449,6 @@
   }
 %    \end{macrocode}
 % 
-% \bigskip
-% The following variant will be used in the following command.
-%    \begin{macrocode}
-\cs_generate_variant:Nn \seq_set_split:Nnn { N x x }
-%    \end{macrocode}
 % 
 % \bigskip
 % The command |\@@_save:N| saves a \pkg{expl3} variable by creating a global
@@ -2525,19 +2557,19 @@
 \tikzset 
  { 
    WithArrows / arrow / .style  = 
-   { 
-     align = left ,
+     { 
+       align = left ,
 %    \end{macrocode}
 %
 % We have put the option |align = left| because we want to give the user the
 % possibility of using |\\| in the labels.
 %    \begin{macrocode}
-     auto = left ,
-     font = \small \itshape ,
-     WithArrows / arrow / tips ,
-     bend~left = 45 ,
-     -> 
-   }
+       auto = left ,
+       font = \small \itshape ,
+       WithArrows / arrow / tips ,
+       bend~left = 45 ,
+       -> 
+     } 
  }
 %    \end{macrocode}
 %
@@ -2567,17 +2599,26 @@
 %    \end{macrocode}
 %
 % \bigskip
+% For the construction of the preambles of the environments |{WithArrows}| and
+% |{DispWithArrows}|, we will have to insert the token |#| (catcode 6). We put it
+% in a \emph{toks register} of TeX (with no equivalent in \pkg{expl3}).
+%    \begin{macrocode}
+\newtoks \@@_parameter_token
+\@@_parameter_token = { # } 
+%    \end{macrocode}
+%
+% \bigskip
 % \subsection{Variables}
 %
 % The boolean |\l_@@_in_WithArrows_bool| will be raised in an environment
-% |{WithArrows}| and the boolean |\l_@@_in_dispwitharrows_bool| in an
-% environment |{DispWithArrows}| or |{DispWithArrows*}|. The boolean
-% |\l_@@_in_CodeAfter_bool| will be raised during the execution of the
-% |CodeAfter| (option |CodeAfter|).
+% |{WithArrows}| and the boolean |\l_@@_in_dispwitharrows_bool| will be raised
+% in an environment |{DispWithArrows}| or |{DispWithArrows*}|. The boolean
+% |\l_@@_in_code_after_bool| will be raised during the execution of the
+% |code-after| (option |code-after|).
 %    \begin{macrocode}
 \bool_new:N \l_@@_in_WithArrows_bool
 \bool_new:N \l_@@_in_DispWithArrows_bool
-\bool_new:N \l_@@_in_CodeAfter_bool
+\bool_new:N \l_@@_in_code_after_bool
 %    \end{macrocode}
 %
 % \bigskip
@@ -2607,7 +2648,7 @@
 % \bigskip
 % The integer |\l_@@_pos_arrow_int| indicates the position of the arrow with the
 % following code (the option |v| is accessible only for the arrows in
-% |CodeAfter| where the options |i|, |group| et |groups| are not available).
+% |code-after| where the options |i|, |group| et |groups| are not available).
 %
 % \begin{center}
 % \begin{tabular}{l}
@@ -2618,7 +2659,7 @@
 % |\l_@@_pos_arrow_int| & $0$  & $1$  & $2$  & $3$  & $4$ & $5$  & $6$  & $7$  \\
 % \bottomrule
 % \end{tabular} \\
-% \footnotesize The option |v| can be used only in |\Arrow| in |CodeAfter| (see
+% \footnotesize The option |v| can be used only in |\Arrow| in |code-after| (see
 % below). 
 % \end{tabular}
 % \end{center}
@@ -2631,10 +2672,11 @@
 %
 % \bigskip
 % In the |\halign| of an environment |{WithArrows}| or |{DispWithArrows}|, we
-% will have to use two counters:
+% will have to use four counters:
 % \begin{itemize}
 % \item |\g_@@_arrow_int| to count the arrows created in the environment ;
-% \item |\g_@@_line_int| to count the lines of the |\halign|.
+% \item |\g_@@_line_int| to count the lines of the |\halign| ;
+% \item |\g_@@_col_int| to count the column of the |\halign|.
 % \end{itemize}
 %
 % These counters will be incremented in a cell of the |\halign| and, therefore,
@@ -2647,6 +2689,8 @@
 \int_new:N \g_@@_arrow_int
 \seq_new:N \g_@@_line_int_seq
 \int_new:N \g_@@_line_int
+\seq_new:N \g_@@_col_int_seq
+\int_new:N \g_@@_col_int
 %    \end{macrocode}
 %
 % 
@@ -2659,18 +2703,37 @@
 \clist_new:N \l_@@_tags_clist
 \clist_set:Nn \l_@@_tags_clist { all }
 %    \end{macrocode}
-% 
 %
 % \bigskip
+% During the execution of an environment |{DispWithArrows}|, if a row must be
+% tagged, the (local) value of |\l_@@_tags_clist| will be put (by convention) to
+% |all|. 
 %    \begin{macrocode}
-\str_set:Nn \l_@@_CommandName_str { Arrow }
+\cs_new_protected:Npn \@@_test_if_to_tag:
+  { 
+    \clist_if_in:NVT \l_@@_tags_clist \g_@@_line_int
+      { \clist_set:Nn \l_@@_tags_clist { all } }
+  }
 %    \end{macrocode}
 %
+%
 % \bigskip
+% If the user has given a value for the option |command-name| (at the global or
+% at the \emph{environment} level), a command with this name is defined locally
+% in the environment with meaning |\@@_Arrow|. The default value of the option
+% |command-name| is ``|Arrow|'' and thus, by default, the name of the command
+% will be |\Arrow|.
+%    \begin{macrocode}
+\str_new:N \l_@@_command_name_str
+\str_set:Nn \l_@@_command_name_str { Arrow }
+%    \end{macrocode}
+%
+% \bigskip
 % The string |\l_@@_string_Arrow_for_msg_str| is only a string that will be
-% displayed in some error messages. For example, if |CommandName| is defined to
+% displayed in some error messages. For example, if |command-name| is defined to
 % be |Explanation|, this string will contain ``|\Arrow alias \Explanation|''. 
 %    \begin{macrocode}
+\str_new:N \l_@@_string_Arrow_for_msg_str 
 \str_set:Nx \l_@@_string_Arrow_for_msg_str { \token_to_str:N \Arrow }
 %    \end{macrocode}
 %
@@ -2696,6 +2759,31 @@
 %    \end{macrocode}
 % 
 % \bigskip
+%    \begin{macrocode}
+\bool_new:N \l_@@_in_first_columns_bool
+\bool_new:N \l_@@_tag_star_bool
+\bool_new:N \l_@@_tag_next_line_bool
+\bool_new:N \l_@@_qedhere_bool
+\bool_new:N \l_@@_new_group_bool
+\bool_new:N \l_@@_initial_r_bool
+\bool_new:N \l_@@_final_r_bool
+\tl_new:N \l_@@_initial_tl
+\tl_new:N \l_@@_final_tl
+\int_new:N \l_@@_nb_of_columns_int
+\bool_new:N \l_@@_last_col_bool
+%    \end{macrocode}
+% 
+% \bigskip
+% The string |\l_@@_format_str| will contain the \emph{format} of the array
+% which is a succession of letters |r|, |c| and |l| specifying the type of the
+% columns of the |\halign| (except the column for the labels of the equations
+% in the environment |{DispWithArrows}|). 
+%    \begin{macrocode}
+\str_new:N \l_@@_format_str
+%    \end{macrocode}
+% 
+%
+% \bigskip
 % \subsection{The definition of the options}
 %
 % There are four levels where options can be set:
@@ -2708,7 +2796,7 @@
 % the current TeX group.};
 % \item with |\begin{WithArrows}[...]|: this level will be called
 % \emph{environment} level;
-% \item with |\Arrow[...]| (included in |CodeAfter|): this level will be called
+% \item with |\Arrow[...]| (included in |code-after|): this level will be called
 % \emph{local} level.
 % \end{itemize}
 %
@@ -2715,10 +2803,11 @@
 %
 % \bigskip
 % When we scan a list of options, we want to be able to raise an error if two
-% options of position of the arrows are present. That's why we keep 
-% the first option of position in a variable called |\l_@@_previous_key_str|.
-% The following function |\@@_eval_if_allowed:n| will execute its argument only
-% if a first key of position has not been set (and raise an error elsewhere).
+% options of position (|ll|, |rl|, |i|, etc.) of the arrows are present. That's
+% why we keep the first option of position in a variable called
+% |\l_@@_previous_key_str|. The following function |\@@_eval_if_allowed:n| will
+% execute its argument only if a first key of position has not been set (and
+% raise an error elsewhere). 
 %
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_eval_if_allowed:n #1
@@ -2751,16 +2840,17 @@
     ystart .value_required:n = true ,
     ystart .initial:n = 0.4 ex ,
     more-columns .code:n = 
-      \@@_msg_redirect_name:nn { Third~column~in~WithArrows } { none } ,
+      \@@_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } ,
     more-columns .value_forbidden:n = true,
-    CommandName .code:n =
-      \str_set:Nn \l_@@_CommandName_str { #1 }
+    command-name .code:n =
+      \str_set:Nn \l_@@_command_name_str { #1 }
       \str_set:Nx \l_@@_string_Arrow_for_msg_str
         { \c_backslash_str Arrow~alias~\c_backslash_str #1 } ,
-    CommandName .value_required:n = true ,
-    TikzCode .tl_set:N = \l_@@_tikz_code_tl,
-    TikzCode .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
-    TikzCode .value_required:n = true ,
+    command-name .value_required:n = true ,
+    tikz-code .tl_set:N = \l_@@_tikz_code_tl,
+    tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
+    tikz-code .value_required:n = true ,
+    TikzCode .meta:n = { tikz-code = #1 } ,
     displaystyle .bool_set:N = \l_@@_displaystyle_bool ,
     displaystyle .default:n = true ,
     show-nodes .code:n =  
@@ -2826,7 +2916,7 @@
 % With the option |no-arrows|, the arrows won't be drawn. However, the ``first
 % pass'' of the arrows is done and some errors may be detected. The
 % nullification of |\@@_draw_arrows:nn| is for the standard arrows and the
-% nullification of |\@@_draw_arrow:nnn| is for ``Arrow in CodeAfter''.
+% nullification of |\@@_draw_arrow:nnn| is for ``Arrow in code-after''.
 %    \begin{macrocode}
     no-arrows .code:n = 
       \cs_set_eq:NN \@@_draw_arrows:nn \use_none:nn
@@ -2908,12 +2998,37 @@
         { \seq_gput_left:Nn \g_@@_names_seq { #1 } }
       \str_set:Nn \l_@@_name_str { #1 } ,
     name .value_required:n = true ,
-    CodeBefore .code:n = \tl_put_right:Nn \l_@@_code_before_tl { #1 } ,
-    CodeBefore .value_required:n = true,
-    CodeAfter .code:n = \tl_put_right:Nn \l_@@_code_after_tl { #1 } ,
-    CodeAfter .value_required:n = true 
+    code-before .code:n = \tl_put_right:Nn \l_@@_code_before_tl { #1 } ,
+    code-before .value_required:n = true,
+    CodeBefore .meta:n = { code-before = #1 } ,
+    code-after .code:n = \tl_put_right:Nn \l_@@_code_after_tl { #1 } ,
+    code-after .value_required:n = true ,
+    CodeAfter  .meta:n = { code-after = #1 } ,
+    format .code:n = \@@_set_option_format:n { #1 },
+    format .value_required:n = true ,
   }
 %    \end{macrocode}
+%
+% \medskip
+% An option |format| should contain only the letters |r|, |c| and |l|. That's
+% why we write a function to validate and set the value given to |format|.
+%    \begin{macrocode} 
+\cs_new_protected:Npn \@@_set_option_format:n #1
+  { 
+    \bool_set_true:N \l_tmpa_bool
+    \str_map_inline:nn { #1 }
+      {
+        \str_if_in:nnF {rcl} { ##1 }
+          { 
+            \bool_set_false:N \l_tmpa_bool
+            \@@_error:n { Invalid~option~format }
+            \str_map_break:
+          }
+      }
+    \bool_if:NT \l_tmpa_bool { \tl_set:Nn \l_@@_format_str { #1 } }
+  }
+%    \end{macrocode}
+%
 % 
 % \bigskip
 % Now, we begin the construction of the major sets of keys which are named
@@ -2944,29 +3059,30 @@
   }
 %    \end{macrocode}
 % 
-% \medskip
-%    \begin{macrocode}
-\keys_define:nn { WithArrows / WithArrows } 
-  { 
-    unknown .code:n  = 
-      \@@_sort_seq:N \l_@@_options_WithArrows_seq 
-      \@@_error:n { Unknown~option~WithArrows } 
-  }
-%    \end{macrocode}
 % 
 % \bigskip
 % A sequence of the options available in |{WithArrows}|. This sequence will be
 % used in the error messages and can be modified dynamically.
 %    \begin{macrocode}
+\seq_new:N \l_@@_options_WithArrows_seq
 \seq_set_from_clist:Nn \l_@@_options_WithArrows_seq
   { 
-    adjust, b, c, CodeAfter, CodeBefore, CommandName, displaystyle, end-adjust,
-    group, groups, i, interline, jot, ll, lr, more-columns, name, no-arrows, rl,
-    rr, show-node-names, show-nodes, start-adjust, t, tikz, TikzCode, xoffset,
-    ygap, ystart
+    adjust, b, c, code-after, code-before, command-name, displaystyle, end-adjust,
+    format, group, groups, i, interline, jot, ll, lr, more-columns, name,
+    no-arrows, rl, rr, show-node-names, show-nodes, start-adjust, t, tikz,
+    tikz-code, xoffset, ygap, ystart
   } 
 %    \end{macrocode}
 %
+% \medskip
+%    \begin{macrocode}
+\keys_define:nn { WithArrows / WithArrows } 
+  { 
+    unknown .code:n  = 
+      \@@_sort_seq:N \l_@@_options_WithArrows_seq 
+      \@@_error:n { Unknown~option~WithArrows } 
+  }
+%    \end{macrocode}
 %
 % \bigskip
 %    \begin{macrocode}
@@ -2982,13 +3098,14 @@
 % A sequence of the options available in |{DispWithArrows}|. This sequence will
 % be used in the error messages and can be modified dynamically.
 %    \begin{macrocode}
+\seq_new:N \l_@@_options_DispWithArrows_seq
 \seq_set_from_clist:Nn \l_@@_options_DispWithArrows_seq
   { 
-    allow-multiple-labels, CodeAfter, CodeBefore, CommandName, TikzCode, adjust,
-    displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr, 
-    mathindent, name, no-arrows, nonumber, notag, rl, rr, show-node-names,
-    show-nodes, start-adjust, tagged-lines, tikz, wrap-lines, xoffset, ygap,
-    ystart 
+    allow-multiple-labels, code-after, code-before, command-name, tikz-code, adjust,
+    displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot,
+    ll, lr, mathindent, name, no-arrows, nonumber, notag, rl, rr,
+    show-node-names, show-nodes, start-adjust, tagged-lines, tikz, wrap-lines,
+    xoffset, ygap, ystart 
   }
 %    \end{macrocode}
 % 
@@ -3010,10 +3127,11 @@
 % A sequence of the options available in |\WithArrowsOptions|. This sequence
 % will be used in the error messages and can be modified dynamically.
 %    \begin{macrocode}
+\seq_new:N \l_@@_options_WithArrowsOptions_seq
 \seq_set_from_clist:Nn \l_@@_options_WithArrowsOptions_seq
   { 
-    allow-duplicate-names, allow-multiple-labels, b, c, CommandName,
-    more-columns, TikzCode, adjust, displaystyle, end-adjust, fleqn, group,
+    allow-duplicate-names, allow-multiple-labels, b, c, command-name,
+    more-columns, tikz-code, adjust, displaystyle, end-adjust, fleqn, group,
     groups, i, interline, jot, ll, lr, mathindent, no-arrows, nonumber, notag,
     rl, rr, show-node-names, show-nodes, standard-behaviour-with-items,
     start-adjust, t, tagged-lines, tikz, wrap-lines, xoffset, ygap, ystart 
@@ -3022,7 +3140,7 @@
 % 
 % \bigskip
 % The command |\@@_set_independent:| is a command without argument that will be
-% used to specifiy that the arrow will be ``independent'' (of the potential
+% used to specify that the arrow will be ``independent'' (of the potential
 % groups of the option |group| or |groups|). This information will be stored in
 % the field ``status'' of the arrow. Another value of the field ``status'' is
 % ``new-group''.
@@ -3079,8 +3197,8 @@
 % listed in this keys set. An unknown key will be detected at the point of the
 % command |\Arrow| and not at the end of the environment.
 %    \begin{macrocode}
-    TikzCode .code:n = \prg_do_nothing: ,
-    TikzCode .value_required:n = true ,
+    tikz-code .code:n = \prg_do_nothing: ,
+    tikz-code .value_required:n = true ,
     tikz .code:n = \prg_do_nothing: ,
     tikz .value_required:n = true ,
 %    \end{macrocode}
@@ -3110,9 +3228,10 @@
 % A sequence of the options available in |\Arrow|. This sequence will be used in
 % the error messages and can be modified dynamically.
 %    \begin{macrocode}
+\seq_new:N \l_@@_options_Arrow_seq
 \seq_set_from_clist:Nn \l_@@_options_Arrow_seq
   { 
-    adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, TikzCode,
+    adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, tikz-code,
     xoffset 
   }
 %    \end{macrocode}
@@ -3138,8 +3257,8 @@
 %    \begin{macrocode} 
 \keys_define:nn {WithArrows / Arrow / SecondPass }
   { 
-    TikzCode .tl_set:N = \l_@@_tikz_code_tl ,
-    TikzCode .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
+    tikz-code .tl_set:N = \l_@@_tikz_code_tl ,
+    tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
     tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
     tikz .initial:n = \c_empty_tl ,
     rr .code:n = \@@_fix_pos_arrow:n 3 ,
@@ -3170,7 +3289,7 @@
 % |\WithArrowsOptions| is the command of the \pkg{witharrows} package to fix
 % options at the document level. It's possible to fix in |\WithArrowsOptions|
 % some options specific to |{WithArrows}| (in contrast with |{DispWithArrows}|)
-% or specific to |{DispWithArrows}| (in construct with |{WithArrows}|). That's
+% or specific to |{DispWithArrows}| (in contrast with |{WithArrows}|). That's
 % why we have constructed a set of keys specific to |\WithArrowsOptions|.
 %    \begin{macrocode}
 \NewDocumentCommand \WithArrowsOptions { m }
@@ -3182,12 +3301,12 @@
 %
 % 
 % \bigskip
-% \subsection{The command Arrow}
+% \subsection{The command \textbackslash Arrow}
 %
 % In fact, the internal command is not named |\Arrow| but |\@@_Arrow|. Usually,
 % at the beginning of an environment |{WithArrows}|, |\Arrow| is set to be
 % equivalent to |\@@_Arrow|. However, the user can change the name with the
-% option |CommandName| and the user command for |\@@_Arrow| will be different.
+% option |command-name| and the user command for |\@@_Arrow| will be different.
 % This mechanism can be useful when the user has already a command named
 % |\Arrow| he still wants to use in the environments |{WithArrows}| or
 % |{DispWithArrows}|. 
@@ -3279,23 +3398,30 @@
 %    \end{macrocode}
 %
 % \medskip
+% The command |\Arrow| (or the corresponding command with a name given by the
+% user with the option |command-name|) will be available only in the last column of
+% the environments |{WithArrows}| and |{DispWithArrows}|. In the other columns,
+% the command will be linked to the following command |\@@_Arrow_first_columns:|
+% which will raise an error.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_Arrow_first_column: 
-  { \@@_error:n { Arrow~in~first~column } \@@_Arrow }
+\cs_new_protected:Npn \@@_Arrow_first_columns: 
+  { \@@_error:n { Arrow~not~in~last~column } \@@_Arrow }
 %    \end{macrocode}
 %                                
 %
 % \bigskip
-% \subsection{The environment \{WithArrows\}}
+% \subsection{The environments \{WithArrows\} and \{DispWithArrows\}}
 %
-% The command |\@@_pre_environement:| is a code common to the environments
+% \subsubsection{Code before the \textbackslash halign}
+%
+% The command |\@@_pre_halign:n| is a code common to the environments
 % |{WithArrows}| and |{DispWithArrows}|. The argument is the list of options
 % given to the environment.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_pre_environment:n #1
+\cs_new_protected:Npn \@@_pre_halign:n #1
 %    \end{macrocode}
 %
-% First the initialisation of |\l_@@_type_env_str| which is the name of the
+% First, the initialisation of |\l_@@_type_env_str| which is the name of the
 % encompassing environment. In fact, this token list is used only in the error
 % messages.
 %    \begin{macrocode}
@@ -3348,14 +3474,16 @@
 %    \end{macrocode}
 %
 % 
-% The initialisation of the counters |\g_@@_arrow_int| and |\g_@@_line_int|.
-% However, we have to save their previous values with the two stacks created for
-% this end.
+% The initialisation of the counters |\g_@@_arrow_int|, |\g_@@_line_int| and
+% |\g_@@_col_int|. However, we have to save their previous values with the
+% stacks created for this end. 
 %    \begin{macrocode}
     \seq_gput_right:NV \g_@@_arrow_int_seq \g_@@_arrow_int
     \int_gzero:N \g_@@_arrow_int 
     \seq_gput_right:NV \g_@@_line_int_seq \g_@@_line_int
     \int_gzero:N \g_@@_line_int 
+    \seq_gput_right:NV \g_@@_col_int_seq \g_@@_col_int
+    \int_gzero:N \g_@@_col_int 
 %    \end{macrocode}
 % 
 % \bigskip
@@ -3393,18 +3521,32 @@
     \int_zero_new:N \l_@@_arrow_int
     \int_zero_new:N \l_@@_pos_of_arrow_int
     \int_zero_new:N \l_@@_jump_int
+%    \end{macrocode}
+%
+% \medskip
+% The counter |\l_@@_jump_int| corresponds to the option |jump|. Now, we set the
+% default value for this option.
+%    \begin{macrocode}
     \int_set:Nn \l_@@_jump_int \c_one_int
 %    \end{macrocode}
 %
+% \medskip
+% The string |\l_@@_format_str| corresponds to the option |format|. Now, we set
+% the default value for this option.
+%    \begin{macrocode}
+    \str_set:Nn \l_@@_format_str { rl }
+%    \end{macrocode}
+% 
 % \bigskip
-% The boolean |\l_@@_in_first_column_bool| will be used to know wether we are in
-% the first column of the environment |{WithArrows}| or |{DispWithArrows}|.
+% The boolean |\l_@@_last_col_bool| will be used only during the construction of
+% the preamble (in |\@@_construct_halign:|).
 %    \begin{macrocode}
-    \bool_set_false:N \l_@@_in_first_column_bool
+    \bool_set_true:N \l_@@_last_col_bool
 %    \end{macrocode}
 %
+%
 % \bigskip
-% In (the second column of) |{DispWithArrows}|, it's possible to put several
+% In (the last column of) |{DispWithArrows}|, it's possible to put several
 % labels (for the same number of equation). That's why these labels will be
 % stored in a sequence |\l_@@_labels_seq|.
 %    \begin{macrocode}
@@ -3425,10 +3567,10 @@
 %    \end{macrocode}
 %
 % \bigskip
-% The value corresponding to the key |CodeBefore| is put to nil before the
+% The value corresponding to the key |code-before| is put to nil before the
 % treatment of the options of the environment, because, of course, we don't want
 % the code executed at the beginning of all the nested
-% environments~|{WithArrows}|. Idem for |CodeAfter|. 
+% environments~|{WithArrows}|. Idem for |code-after|. 
 %    \begin{macrocode}
     \tl_clear_new:N \l_@@_code_before_tl
     \tl_clear_new:N \l_@@_code_after_tl
@@ -3445,9 +3587,37 @@
       { \keys_set:nn { WithArrows / DispWithArrows } { #1 } }
 %    \end{macrocode}
 %
+% \medskip
+% Now we link the command |\Arrow| (or the corresponding command with a name
+% given by the user with the option |command-name|: that's why the following line
+% must be after the loading of the options) to the command
+% |\@@_Arrow_first_columns:| which will raise an error. 
+%    \begin{macrocode}
+    \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_first_columns: 
+%    \end{macrocode}
+% It's only in the last column of the environment that it will be linked to the
+% command |\@@_Arrow:|.
+%
+% \medskip
+% The counter |\l_@@_nb_of_columns_int| is the number of columns in the
+% |\halign| (excepted the column for the labels of equations in
+% |{DispWithArrows}| and excepted evenutals other columns in |{WithArrows}| if
+% the user uses the option |more-columns|).
+%    \begin{macrocode}
+    \int_set:Nn \l_@@_nb_of_columns_int { \str_count:N \l_@@_format_str } 
+%    \end{macrocode}
+%
+% \medskip
+% We convert the format in a sequence because we use it as a stack in the
+% construction of the preamble.
+%    \begin{macrocode}
+    \seq_clear_new:N \l_@@_format_seq
+    \seq_set_split:NnV \l_@@_format_seq { } \l_@@_format_str
+%    \end{macrocode}
+%
 % \bigskip
 % If the option |footnote| or the option |footnotehyper| is used, then we
-% extract the footnotes with a environment |{savenotes}| (of the package
+% extract the footnotes with an environment |{savenotes}| (of the package
 % \pkg{footnote} or the package \pkg{footnotehyper}).
 %    \begin{macrocode}
     \bool_if:NT \g_@@_footnote_bool { \begin { savenotes } }
@@ -3454,23 +3624,26 @@
 %    \end{macrocode}
 %
 % \bigskip
-% We execute the code |\l_@@_code_before_tl| of the option |CodeBefore| of the
-% environment after the eventual |\savenotes| and, symetrically, we will execute
-% the |\l_@@_code_after_tl| before the eventual |\endsavenotes| (we have a good
-% reason for the last point: we want to extract the footnotes of the arrows
-% executed in the |CodeAfter|).
+% We execute the code |\l_@@_code_before_tl| of the option |code-before| of the
+% environment after the eventual |\begin{savenotes}| and, symetrically, we will
+% execute the |\l_@@_code_after_tl| before the eventual |\end{savenotes}| (we
+% have a good reason for the last point: we want to extract the footnotes of the
+% arrows executed in the |code-after|).
 %    \begin{macrocode}
     \l_@@_code_before_tl
 %    \end{macrocode}
 %
 % \bigskip
-% If the user has given a value for the option |CommandName| (at the global or
-% at the \emph{environment} level), a command with this name is defined locally
-% in the environment with meaning |\@@_Arrow|. The default value of the option
-% |CommandName| is ``|Arrow|'' and thus, by default, the name of the command
-% will be |\Arrow|.
+% The command |\spread at equation| is the command used by \pkg{amsmath} in the
+% beginning of an alignment to fix the interline. When used, it becomes no-op.
+% However, it's possible to use \pkg{witharrows} without \pkg{amsmath} since we
+% have redefined |\spread at equation| (if it is not defined yet).
 %    \begin{macrocode}
-    \cs_set_eq:cN \l_@@_CommandName_str \@@_Arrow
+    \spread at equation
+%    \end{macrocode}
+%
+%
+%    \begin{macrocode}
     \cs_set_eq:NN \notag \@@_notag:
     \cs_set_eq:NN \nonumber \@@_notag:
     \cs_set_eq:NN \tag \@@_tag
@@ -3479,74 +3652,141 @@
     \cs_set_eq:NN \tagnextline \@@_tagnextline:
   }
 %    \end{macrocode}
-% This is the end of |\@@_pre_environment:n|.
+% This is the end of |\@@_pre_halign:n|.
 %
+% \bigskip
+% \subsubsection{The construction of the preamble of the \textbackslash halign}
 %
-% \bigskip
-% Now, we begin the environment |{WithArrows}|.
+% The control sequence |\@@_construct_halign:| will ``start'' the |\halign| and
+% the preamble. In fact, it constructs all the preamble excepted the end of
+% the last column (more precisely: except the part concerning the construction
+% of the left node and the right node).
+%
+% The same function |\@@_construct_halign:| will be used both for |{WithArrows}|
+% and |{DispWithArrows}|.
+% 
+% Several important points must be noted concerning that construction of the
+% preamble.
+% \begin{itemize}
+% \item The construction of the preamble is done by reading backwards the
+% format |\l_@@_format_str| and adding the corresponding tokens in the input
+% stream of TeX. That means that the part of the preamble concerning the last
+% cell will be constructed first.
+% \item The function |\@@_construct_halign:| is recursive in order to treat
+% succesively all the letters of the preamble.
+% \item Each part of the preamble is created with a |\use:x| function. This
+% expansion of the preamble gives the ability of controlling which parts of the
+% code will be expanded during the construction of the preamble (other parts
+% will be expanded and executed only during the execution of the |\halign|).
+% \end{itemize}
+% 
 %    \begin{macrocode}
-\NewDocumentEnvironment { WithArrows } { ! O { } }
-  { 
-    \bool_set_true:N \l_@@_in_WithArrows_bool
-    \bool_set_false:N \l_@@_in_DispWithArrows_bool
-    \@@_pre_environment:n { #1 } 
-    \if_mode_math: \else:
-      \@@_error:n { WithArrows~outside~math~mode }
-    \fi:
+\cs_new_protected:Npn \@@_construct_halign:
+  {
+    \seq_pop_right:NNTF \l_@@_format_seq \l_@@_type_col_str
+      {
 %    \end{macrocode}
-% \bigskip 
-% The environment begins with a |\vtop|, a |\vcenter| or a
-% |\vbox|\footnote{Notice that the use of |\vtop| seems color-safe here...}
-% depending of the value of |\l_@@_pos_env_int| (fixed by the options |t|, |c|
-% or |b|). The environment |{WithArrows}| must be used in math mode\footnote{An
-% error is raised if the environment is used outside math mode.} and therefore,
-% we can use |\vcenter|.
+% Here is the |\use:x| which is fundamental: it will really construct the part
+% of the preamble corresponding to a column by expanding only some parts of the
+% following code.
 %    \begin{macrocode}
-    \int_case:nn \l_@@_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
-    \bgroup
+        \use:x
+          {
 %    \end{macrocode}
+% Before the recursive call of |\@@_construct_halign:|, 
+% we lower the flag |\l_@@_last_col_bool| in order that all the recursive calls
+% will know that they are not in the last column. But, during the construction
+% of the first column, it is \emph{not} lowered because |\bool_set_false:N|,
+% which is protected, won't be expanded by the |\use:x|.
 %
-% \bigskip
-% The command |\spread at equation| is the command used by \pkg{amsmath} in the
-% beginning of an alignment to fix the interline. When used, it becomes no-op.
-% However, it's possible to use \pkg{witharrows} without \pkg{amsmath} since we
-% have redefined |\spread at equation| (if it is not defined yet).
+% We begin the construction of a generic column.
 %    \begin{macrocode}
-    \spread at equation
+            \bool_set_false:N \l_@@_last_col_bool 
+            \@@_construct_halign:
+            \bool_if:NT \l_@@_last_col_bool 
+              { 
 %    \end{macrocode}
-%
-% \bigskip
-% We begin the |\halign| and the preamble.
+% We redefine the command |\Arrow| (or the name given to the corresponding
+% command by the option |command-name|) in each cell of the last column.
+% The braces around |\l_@@_command_name_str| are mandatory because
+% |\l_@@_command_name_str| will be expanded by the |\use:x| and the command
+% |\cs_set_eq:cN| must still be efficient during the execution of the |\halign|.
 %    \begin{macrocode}
-    \ialign \bgroup
+                \cs_set_eq:cN { \l_@@_command_name_str } \@@_Arrow
+                \bool_if:NT \l_@@_in_DispWithArrows_bool
+                  {
 %    \end{macrocode}
-%
-% \bigskip 
-% We increment the counter |\g_@@_line_int| which will be used in the names of
-% the Tikz nodes created in the array. This incrementation must be global
-% (|gincr|) because we are in the cell of a |\halign|. It's recalled that we
-% manage a stack for this counter.
+% The command |\@@_test_if_to_tag:| (which is protected and, thus, will not be
+% expanded during the construction of the preamble) will test, at each row,
+% whether the current row must be tagged (and the tag will be put in the very
+% last column).
 %    \begin{macrocode}
-    \int_gincr:N \g_@@_line_int 
-    \cs_set_eq:cN \l_@@_CommandName_str \@@_Arrow_first_column: 
-    \bool_set_true:N \l_@@_in_first_column_bool
-    \strut \hfil
-    $ 
-    \bool_if:NT \l_@@_displaystyle_bool \displaystyle 
-    { ## } 
-    $
-    & 
+                    \@@_test_if_to_tag:
 %    \end{macrocode}
+% The command |\@@_set_qedhere:| will do a redefinition of |\qedhere| in each
+% cell of the last column.
+%    \begin{macrocode}
+                    \bool_if:NT \c_@@_amsthm_loaded_bool \@@_set_qedhere:
+                  }
+              }
+            \str_if_eq:VnT \l_@@_type_col_str { c } \hfil
+            \str_if_eq:VnT \l_@@_type_col_str { r } \hfill
+            \int_gincr:N \g_@@_col_int
+            $ % $
+              {
+                { }
+                \bool_if:NT \l_@@_displaystyle_bool \displaystyle
+                ####
+              }
+            $ % $
+            \bool_if:NTF \l_@@_last_col_bool
+              { \@@_construct_nodes: }
+              {
+%    \end{macrocode}
+% The following glue (|\hfil|) will be added only if we are not in the last cell
+% because, in the last cell, a glue is added beetween the nodes (in
+% |\@@_construct_nodes:|). 
+%    \begin{macrocode}
+                \str_if_eq:VnT \l_@@_type_col_str { l } \hfil
+                \str_if_eq:VnT \l_@@_type_col_str { c } \hfil
+                \bool_if:NT \l_@@_in_DispWithArrows_bool { \tabskip = \c_zero_skip }
+                &
+              }
+          } 
+      }
+%    \end{macrocode}
+% Now the tokens that will be inserted after the analyze of all the tokens of
+% the format: here is the token |\halign|.
+%    \begin{macrocode}
+      { 
+        \bool_if:NTF \l_@@_in_WithArrows_bool
+          {
+            \ialign
+            \bgroup
+          }
+          {
+            \halign to
+            \bool_if:NTF \l_@@_inlabel_bool \linewidth \displaywidth
+            \bgroup
+            \bool_if:NT \l_@@_fleqn_bool
+              { \skip_horizontal:N \l_@@_mathindent_dim }
+          }
+        \int_gincr:N \g_@@_line_int 
+        \int_gzero:N \g_@@_col_int
+        \strut
+      }
+  }
+%    \end{macrocode}
 % 
+%
 % \bigskip
+% The command |\@@_construct_nodes:| is only for the lisibility of the code
+% because, in fact, it is used only once. It construct the ``left node'' and the
+% ``right node'' at the end of each row of the arrow.
 %    \begin{macrocode}
-    $ 
-    \bool_if:NT \l_@@_displaystyle_bool \displaystyle 
-    { { } ## } 
-    $
+\cs_new_protected:Npn \@@_construct_nodes:
+  { 
 %    \end{macrocode}
-%
-% \bigskip
 % We create the ``left node'' of the line (when using macros in Tikz node names,
 % the macros have to be fully expandable: here, |\int_use:N| is fully
 % expandable).
@@ -3588,17 +3828,59 @@
     \bool_if:NT \l_@@_show_node_names_bool
       { 
         \hbox_overlap_right:n 
-          { \small wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int }
+          { \small wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r }
       }
+  }
 %    \end{macrocode}
+%
+%
+%
+% \bigskip
+% \subsubsection{The environment \{WithArrows\}}
+%
+%
 % 
+%    \begin{macrocode}
+\NewDocumentEnvironment { WithArrows } { ! O { } }
+  { 
+    \bool_set_true:N \l_@@_in_WithArrows_bool
+    \bool_set_false:N \l_@@_in_DispWithArrows_bool
+    \@@_pre_halign:n { #1 } 
+    \if_mode_math: \else:
+      \@@_error:n { WithArrows~outside~math~mode }
+    \fi:
+%    \end{macrocode}
+%
+% \bigskip 
+% The environment begins with a |\vtop|, a |\vcenter| or a
+% |\vbox|\footnote{Notice that the use of |\vtop| seems color-safe here...}
+% depending of the value of |\l_@@_pos_env_int| (fixed by the options |t|, |c|
+% or |b|). The environment |{WithArrows}| must be used in math mode\footnote{An
+% error is raised if the environment is used outside math mode.} and therefore,
+% we can use |\vcenter|.
+%    \begin{macrocode}
+    \int_case:nn \l_@@_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
+    \bgroup
+%    \end{macrocode}
+%
 % \bigskip
-% Usually, the |\halign| of an environment |{WithArrows}| will have exactly two
-% columns. Nevertheless, if the user wants to use more columns (without arrows)
+% We begin the |\halign| and the preamble.
+%    \begin{macrocode}
+    \@@_construct_halign: 
+%    \end{macrocode}
+% 
+% 
+% \medskip
+% In fact, the construction of the preamble is not finished. We add a little more.
+% 
+% \medskip
+% An environmemnt |{WithArrows}| should have a number of columns equal to the
+% length of its format (by default, 2 since the default format is |rl|).
+% Nevertheless, if the user wants to use more columns (without arrows)
 % it's possible with the option |more-columns|.
 %    \begin{macrocode}
     && 
-    \@@_error:n { Third~column~in~WithArrows }
+    \@@_error:n { Too~much~columns~in~WithArrows }
     $ 
     \bool_if:NT \l_@@_displaystyle_bool \displaystyle 
     { ## } 
@@ -3607,6 +3889,7 @@
   }
 %    \end{macrocode}
 %
+%
 % \bigskip 
 % We begin the second part of the environment |{WithArrows}|. We have two
 % |\egroup|\,: one for the |\halign| and one for the |\vtop| (or |\vcenter| or
@@ -3616,7 +3899,7 @@
     \\
     \egroup 
     \egroup
-    \@@_post_environment:
+    \@@_post_halign:
 %    \end{macrocode}
 %
 % \bigskip
@@ -3631,10 +3914,12 @@
 % 
 %
 % \bigskip
-% The command |\@@_post_environment:| is a code common to the second part of the
+% \subsubsection{After the construction of the \textbackslash halign}
+%
+% The command |\@@_post_halign:| is a code common to the second part of the
 % environment |{WithArrows}| and the environment |{DispWithArrows}|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_post_environment:
+\cs_new_protected:Npn \@@_post_halign:
 %    \end{macrocode}
 %
 % \bigskip
@@ -3652,7 +3937,7 @@
 %    \end{macrocode}
 %
 % \bigskip
-% We will execute the code specified in the option |CodeAfter|, after some
+% We will execute the code specified in the option |code-after|, after some
 % settings. 
 %    \begin{macrocode}
     \group_begin:
@@ -3663,16 +3948,16 @@
 %    \begin{macrocode}
       \cs_set:Npn \WithArrowsNbLines { \int_use:N \g_@@_line_int }
 %    \end{macrocode}
-% The command |\MultiArrow| is available in |CodeAfter|, and we have a special
-% version of |\Arrow|, called ``|\Arrow| in |CodeAfter|'' in the
+% The command |\MultiArrow| is available in |code-after|, and we have a special
+% version of |\Arrow|, called ``|\Arrow| in |code-after|'' in the
 % documentation.\footnote{As for now, |\MultiArrow| has no option, and that's
 % why its internal name is a name of \pkg{expl3} with the signature |:nn|
-% whereas |\Arrow| in |CodeAfter| provides options and has the name of a
+% whereas |\Arrow| in |code-after| provides options and has the name of a
 % function defined with |\NewDocumentCommand|.}
 %    \begin{macrocode}
       \cs_set_eq:NN \MultiArrow \@@_MultiArrow:nn
-      \cs_set_eq:cN \l_@@_CommandName_str \@@_Arrow_code_after
-      \bool_set_true:N \l_@@_in_CodeAfter_bool
+      \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_code_after
+      \bool_set_true:N \l_@@_in_code_after_bool
       \l_@@_code_after_tl
     \group_end:
 %    \end{macrocode}
@@ -3696,19 +3981,23 @@
 %    \end{macrocode}
 %
 % \bigskip
-% Finally, we restore the previous values of the counters |\g_@@_arrow_int| and
-% |\g_@@_line_int| It is recalled that we manage three stacks in order to be
-% able to do such a restoration.
+% Finally, we restore the previous values of the counters |\g_@@_arrow_int|,
+% |\g_@@_line_int| and |\g_@@_col_int|. It is recalled that we manage three
+% stacks in order to be able to do such a restoration.
 %    \begin{macrocode}
     \seq_gpop_right:NN \g_@@_arrow_int_seq \l_tmpa_tl 
     \int_gset:Nn \g_@@_arrow_int \l_tmpa_tl 
     \seq_gpop_right:NN \g_@@_line_int_seq \l_tmpa_tl
     \int_gset:Nn \g_@@_line_int \l_tmpa_tl
+    \seq_gpop_right:NN \g_@@_col_int_seq \l_tmpa_tl
+    \int_gset:Nn \g_@@_col_int \l_tmpa_tl
   }
 %    \end{macrocode}
-% That's the end of the command |\@@_post_environment:|.
+% That's the end of the command |\@@_post_halign:|.
 %
 % \bigskip
+% \subsubsection{The command of end of row}
+%
 % We give now the definition of |\@@_cr:| which is the definition of |\\| in an
 % environment |{WithArrows}|. The two \pkg{expl3} commands
 % |\group_align_safe_begin:| and |\group_align_safe_end:| are specifically
@@ -3723,7 +4012,7 @@
 \cs_new_protected:Npn \@@_cr:
   { 
     \scan_stop:
-    \bool_if:NT \l_@@_in_first_column_bool { & { } } 
+    \prg_replicate:nn { \l_@@_nb_of_columns_int - \g_@@_col_int } { & { } } 
     \group_align_safe_begin:
     \peek_meaning_remove:NTF * \@@_cr_i: \@@_cr_i:
   }
@@ -3853,7 +4142,7 @@
 %    \end{macrocode}
 % We use |\@eqnnum| (we recall that there are two definitions of |\@eqnnum|, a
 % standard definition and another, loaded if the class option |leqno| is used).
-% However, of course, the position of the |v|-node is not the same wether the
+% However, of course, the position of the |v|-node is not the same whether the
 % option |leqno| is used or not. That's here that we use the flag
 % |\c_@@_leqno_bool|.
 %    \begin{macrocode}
@@ -3889,173 +4178,31 @@
 % According to the documentation of \pkg{expl3}, the previous addition in 
 % ``|#1 + \l_@@_interline_skip|'' is really an addition of skips (=glues).
 %
+% \bigskip
+% \subsubsection{The environment \{DispWithArrows\}}
 %
+% For the environment |{DispWithArrows}|, the general form of the construction
+% is of the type:
+%
+% |\[\vtop{\halign to \displaywidth {...}}\]|
 % 
-% \bigskip
-% \subsection{The commands tag, notag, label, tagnextline and qedhere for
-% DispWithArrows} 
+% The purpose of the |\vtop| is to have an environment unbreakable.
 %
-% Some commands are allowed only in the second column of the environment
-% |{DispWithArrows}|. We write a command |\@@_if_in_second_col_of_disp:Nn| to
-% execute this command only if we are in the second column. If we are in the
-% first column, an error is raised. The first argument of
-% |\@@_if_in_second_col_of_disp:Nn| is the name of the command used in the error
-% message and the second is the code to execute.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_if_in_second_col_of_disp:Nn #1 #2
-  { 
-    \bool_if:NTF \l_@@_in_WithArrows_bool
-      { \@@_error:nn { Not~allowed~in~WithArrows } { #1 } }
-      { 
-        \bool_if:NTF \l_@@_in_first_column_bool
-          { \@@_error:nn { Not~allowed~in~DispWithArrows } { #1 } }
-          { #2 }
-      }
-  }
-%    \end{macrocode}
+% However, if we are juste after an item of a LaTeX list, the construction is
+% slightly different:
+%
+% |\[\vtop{\halign to \linewidth {...}}\]|
 % 
-% \bigskip
-% The command |\@@_notag:| will be linked to |\notag| and |\nonumber| in the
-% environments |{WithArrows}| and |{DispWithArrows}|.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_notag: 
-  { \@@_if_in_second_col_of_disp:Nn \notag { \clist_clear:N \l_@@_tags_clist } }
-%    \end{macrocode}
 % 
-%
 % \bigskip
-% The command |\@@_tag| will be linked to |\tag| in the environments
-% |{WithArrows}| and |{DispWithArrows}|. We use |\NewDocumentCommand| because
-% this command has a starred version.
+% The boolean |\l_@@_inlabel_bool| will be raised if we are just after a |\item|
+% of a list of LaTeX.
 %    \begin{macrocode}
-\NewDocumentCommand \@@_tag { s m } 
-  { 
-    \@@_if_in_second_col_of_disp:Nn \tag
-      { 
-        \tl_if_empty:NF \l_@@_tag_tl
-          { \@@_error:nn  { Multiple~tags } { #2 } }
-        \clist_set:Nn \l_@@_tags_clist { all }
-        \bool_if:nT \c_@@_mathtools_loaded_bool
-          {
-            \MH_if_boolean:nT { show_only_refs }
-              {
-                \MH_if_boolean:nF { show_manual_tags }
-                  { \clist_clear:N \l_@@_tags_clist }
-              }
-          }
-        \tl_set:Nn \l_@@_tag_tl { #2 }
-        \bool_set:Nn \l_@@_tag_star_bool { #1 }
+\bool_new:N \l_@@_inlabel_bool
 %    \end{macrocode}
-% The starred version |\tag*| can't be used if \pkg{amsmath} has not been loaded
-% because this version does the job by deactivating the command |\tagform@|
-% inserted by \pkg{amsmath} in the (two versions of the) command
-% |\@eqnnum|.\footnote{There are two versions of |@eqnnum|, a standard version
-% and a version for the option |leqno|.}
-%    \begin{macrocode}
-        \bool_if:nT { #1 && ! \bool_if_p:N \c_@@_amsmath_loaded_bool }
-          { \@@_error:n { tag*~without~amsmath } } 
-      }
-  }
-%    \end{macrocode}
 %
-% \bigskip
-% The command |\@@_label:n| will be linked to |\label| in the environments
-% |{WithArrows}| and |{DispWithArrows}|. In these environments, it's possible to
-% put several labels for the same line (it's not possible in the environments of
-% \pkg{amsmath}). That's why we store the differents labels of a same line in a
-% sequence |\l_@@_labels_seq|.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_label:n #1
-  {  
-    \@@_if_in_second_col_of_disp:Nn \label
-      { 
-        \seq_if_empty:NF \l_@@_labels_seq 
-          { 
-            \bool_if:NTF \c_@@_cleveref_loaded_bool
-              { \@@_error:n { Multiple~labels~with~cleveref } }
-              { \@@_error:n { Multiple~labels } } 
-          }
-        \seq_put_right:Nn \l_@@_labels_seq { #1 }
-        \bool_if:nT \c_@@_mathtools_loaded_bool
-          {
-            \MH_if_boolean:nT { show_only_refs } 
-              { 
-                \cs_if_exist:cTF { MT_r_#1 }
-                  { \clist_set:Nn \l_@@_tags_clist { all } }
-                  { \clist_clear:N \l_@@_tags_clist } 
-              }
-          }
-        \bool_if:nT \c_@@_autonum_loaded_bool
-          { 
-            \cs_if_exist:cTF { autonum@#1Referenced }
-              { \clist_set:Nn \l_@@_tags_clist { all } }
-              { \clist_clear:N \l_@@_tags_clist } 
-          } 
-      } 
-  }
-%    \end{macrocode}
-%
-% \bigskip
-% The command |\@@_tagnextline:| will be linked to |\tagnextline| in the
-% environments |{WithArrows}| and |{DispWithArrows}|.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_tagnextline:
-  { 
-    \@@_if_in_second_col_of_disp:Nn \tagnextline
-      { \bool_set_true:N \l_@@_tag_next_line_bool }
-  }
-%    \end{macrocode}
-%
-%
-% \bigskip
-% The environments |{DispWithArrows}| and |{DispWithArrows*}| are compliant with
-% the command |\qedhere| of \pkg{amsthm}. However, this compatibility requires a
-% special version of |\qedhere|.
 % 
-% This special version is called |\@@_qedhere:| and will be linked with
-% |\qedhere| in the second column of the environment |{DispWithArrows}| (only if
-% the package \pkg{amsthm} has been loaded). |\@@_qedhere:| raises the boolean
-% |\l_@@_qedhere_bool|.
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_qedhere: { \bool_set_true:N \l_@@_qedhere_bool }
-%    \end{macrocode}
-%
-% In the third column of the |\halign| of |{DispWithArrows}|, a command
-% |\@@_qedhere_i:| will be issued if the flag |\l_@@_qedhere_bool| has been
-% raised. The code of this command is an adaptation of the code of |\qedhere| in
-% \pkg{amsthm}.
-%    \begin{macrocode}
-\cs_new_protected:Npn \@@_qedhere_i: 
-  {
-    \group_begin:
-      \cs_set_eq:NN \qed \qedsymbol
-%    \end{macrocode}
-% The line |\cs_set_eq:NN \qed at elt \setQED at elt| is a preparation for an action
-% on the \textsc{qed} stack. Despite its form, the instruction |\QED at stack|
-% executes an operation on the stack. This operation prints the \textsc{qed}
-% symbol and nullify the top of the stack.
-%    \begin{macrocode}
-      \cs_set_eq:NN \qed at elt \setQED at elt 
-      \QED at stack \relax \relax 
-    \group_end: 
-  }
-%    \end{macrocode}
-% 
-% 
-% \bigskip
-% \subsection{The environment \{DispWithArrows\}}
-%
-%
-% For the environment |{DispWithArrows}|, the construction is a construction of
-% the type:
-%
-% |\[\vcenter{\halign to \displaywidth {...}}\]|
-% 
-% The purpose of the |\vcenter| is to have an environment unbreakable.
-% 
-% \bigskip
-%    \begin{macrocode}
-\bool_new:N \l_@@_inlabel_bool
 \NewDocumentEnvironment { DispWithArrows } { ! O { } }
   { 
 %    \end{macrocode}
@@ -4062,7 +4209,7 @@
 % If \pkg{mathtools} has been loaded with the option |showonlyrefs|, we disable
 % the code of \pkg{mathtools} for the option |showonlyrefs| with the command
 % |\MT_showonlyrefs_false:| (it will be reactivated at the end of the
-% environment).
+% environment). 
 %    \begin{macrocode}
     \bool_if:nT \c_@@_mathtools_loaded_bool 
       { 
@@ -4091,7 +4238,7 @@
 %    \begin{macrocode}
     \bool_if:NT \c_@@_amsmath_loaded_bool \intertext@
     \bool_set_true:N \l_@@_in_DispWithArrows_bool
-    \@@_pre_environment:n { #1 }
+    \@@_pre_halign:n { #1 }
 %    \end{macrocode}
 %
 % Since the version 1.16 of \pkg{witharrows}, no space is added between an
@@ -4133,8 +4280,8 @@
 %    \end{macrocode}
 %
 % \bigskip
-% The construction is not exactly the same wether we are just after an |\item|
-% of a LaTeX list or not. We know if we are after un |\item| thanks to the
+% The construction is not exactly the same whether we are just after an |\item|
+% of a LaTeX list or not. We know if we are after an |\item| thanks to the
 % boolean |\l_@@_inlabel_bool|.
 %    \begin{macrocode}
     \bool_if:NTF \l_@@_inlabel_bool
@@ -4152,86 +4299,38 @@
         $$
       }
 %    \end{macrocode}
-% We use a |\vcenter| in order to prevent page breaks in the environment.
+% We use a |\vtop| in order to prevent page breaks in the environment.
 %    \begin{macrocode}
-    \bool_if:NTF \l_@@_inlabel_bool \vtop \vcenter \bgroup 
-    \spread at equation 
+    \vtop \bgroup 
     \bool_if:NTF \l_@@_fleqn_bool
       { \tabskip = \c_zero_skip }
       { \tabskip = 0 pt plus 1000 pt minus 1000 pt }
-    \halign to \bool_if:NTF \l_@@_inlabel_bool \linewidth \displaywidth 
-    \bgroup
-    \int_gincr:N \g_@@_line_int
-    \cs_set_eq:cN \l_@@_CommandName_str \@@_Arrow_first_column:
-    \bool_set_true:N \l_@@_in_first_column_bool
-    \strut
-    \bool_if:NT \l_@@_fleqn_bool { \skip_horizontal:n \l_@@_mathindent_dim }
-    \hfil
-    $
-    \bool_if:NT \l_@@_displaystyle_bool \displaystyle 
-    { ## } 
-    $
-    \tabskip = \c_zero_skip
-    &
-    \clist_if_in:NVT \l_@@_tags_clist \g_@@_line_int
-      { \clist_set:Nn \l_@@_tags_clist { all } }
 %    \end{macrocode}
-% The command |\qedhere| of \pkg{amsthm} is redefined here. 
+%
+%
 %    \begin{macrocode}
-    \bool_if:NT \c_@@_amsthm_loaded_bool 
-      { \cs_set_eq:NN \qedhere \@@_qedhere: }
-    $
-    \bool_if:NT \l_@@_displaystyle_bool \displaystyle 
-    { { } ## }
-    $
+    \@@_construct_halign:
     \tabskip = 0 pt plus 1000 pt minus 1000 pt
-    \tikz [ remember~picture , overlay ]
-      \node 
-        [ 
-          node~contents = { } ,
-          @@_node_style ,
-          name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - l ,
-          alias = 
-            { 
-              \str_if_empty:NF \l_@@_name_str 
-                { \l_@@_name_str - \int_use:N \g_@@_line_int - l } 
-            } 
-        ] 
-        ;
-    \hfil
-    \tikz [ remember~picture , overlay ]
-      \node 
-        [
-          node~contents = { } ,
-          @@_node_style ,
-          name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r ,
-          alias = 
-            { 
-              \str_if_empty:NF \l_@@_name_str
-                { \l_@@_name_str - \int_use:N \g_@@_line_int - r } 
-            } 
-        ] 
-        ;
-    \bool_if:NT \l_@@_show_node_names_bool
-      { 
-        \hbox_overlap_right:n 
-          { \small wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int } 
-      }
     & 
 %    \end{macrocode}
 %
-% We put now the contents of the third column in math mode because because we
-% don't want an error if the user uses a third column with contents in math
-% mode: the error will be in the next cell.
+% If the user try to use more columns than the lenght of the format, we have to
+% raise an error. However, the error won't be in the next column which is the
+% columns for the labels of the equations. The error will be after... and it
+% must be after. That means that we must not have an error in the next column
+% simply because we are not in math mode. That's why this column, even if it is
+% for the labels, is in math mode.
 %    \begin{macrocode}
     $ ## $
     \tabskip = \c_zero_skip
     && 
-    \@@_error:n { Third~column~in~DispWithArrows } 
+    \@@_error:n { Too~much~columns~in~DispWithArrows } 
     \bool_if:nT \c_false_bool { ## }
     \cr
   }
 %    \end{macrocode}
+% 
+% \bigskip
 % We begin the second part of the environment |{DispWithArrows}|.
 %    \begin{macrocode}
   { 
@@ -4243,13 +4342,13 @@
 %    \begin{macrocode}
     \egroup 
 %    \end{macrocode}
-% The following |\egroup| is for the |\vcenter| (aimed to prevent page breaks).
+% The following |\egroup| is for the |\vtop|.
 %    \begin{macrocode}
     \egroup 
 %    \end{macrocode}
 %
-% If we are in an environment |{DispWithArrows}| or |{DispWithArrows*}|, we
-% compute the dimension |\g_@@_right_x_dim|. As a first approximation,
+%
+% We compute the dimension |\g_@@_right_x_dim|. As a first approximation,
 % |\g_@@_right_x_dim| is the $x$-value of the right side of the current
 % composition box. In fact, we must take into account the potential labels of
 % the equations. That's why we compute |\g_@@_right_x_dim| with the |v|-nodes of
@@ -4256,32 +4355,29 @@
 % each row specifically built in this goal. |\g_@@_right_x_dim| is the minimal
 % value of the $x$-value of these nodes.
 %    \begin{macrocode}
-    \bool_if:NT \l_@@_in_DispWithArrows_bool
-      { 
-        \dim_gzero_new:N \g_@@_right_x_dim 
-        \dim_gset_eq:NN \g_@@_right_x_dim \c_max_dim
-        \begin { tikzpicture } [ @@_standard ]
-          \int_step_variable:nNn \g_@@_line_int \l_tmpa_int
+    \dim_gzero_new:N \g_@@_right_x_dim 
+    \dim_gset_eq:NN \g_@@_right_x_dim \c_max_dim
+    \begin { tikzpicture } [ @@_standard ]
+      \int_step_variable:nNn \g_@@_line_int \l_tmpa_int
+        { 
+          \cs_if_free:cTF 
+            { pgf at sh@ns at wa - \l_@@_prefix_str - \l_tmpa_int - v }
+            { \@@_error:n { Inexistent~v-node } }
             { 
-              \cs_if_free:cTF 
-                { pgf at sh@ns at wa - \l_@@_prefix_str - \l_tmpa_int - v }
-                { \@@_error:n { Inexistent~v-node } }
-                { 
-                  \tikz at parse@node\pgfutil at firstofone ( \l_tmpa_int - v )
-                  \dim_set:Nn \l_tmpa_dim \pgf at x
-                  \dim_compare:nNnT \l_tmpa_dim < \g_@@_right_x_dim
-                    { \dim_gset:Nn \g_@@_right_x_dim \l_tmpa_dim } 
-                } 
-            }
-        \end { tikzpicture } 
-      }
+              \tikz at parse@node\pgfutil at firstofone ( \l_tmpa_int - v )
+              \dim_set:Nn \l_tmpa_dim \pgf at x
+              \dim_compare:nNnT \l_tmpa_dim < \g_@@_right_x_dim
+                { \dim_gset:Nn \g_@@_right_x_dim \l_tmpa_dim } 
+            } 
+        }
+    \end { tikzpicture } 
 %    \end{macrocode}
 % 
 % \bigskip
-% The code in |\@@_post_environment:| is common to |{WithArrows}| and
+% The code in |\@@_post_halign:| is common to |{WithArrows}| and
 % |{DispWithArrows}|.
 %    \begin{macrocode}
-    \@@_post_environment:
+    \@@_post_halign:
 %    \end{macrocode}
 % If \pkg{mathtools} has been loaded with the option |showonlyrefs|, we
 % reactivate the code of \pkg{mathtools} for the option |showonlyrefs| with the
@@ -4291,7 +4387,8 @@
     \bool_if:nT \c_@@_mathtools_loaded_bool
       { \MH_if_boolean:nT { show_only_refs } \MT_showonlyrefs_true: }
     \bool_if:NTF \l_@@_inlabel_bool
-      { $ % $
+      { 
+        $ % $
         \skip_vertical:N \belowdisplayskip
       }
       { $$ }
@@ -4320,7 +4417,162 @@
   \endDispWithArrows
 %    \end{macrocode}
 %
+% 
+% \bigskip
+% \subsection{The commands \textbackslash tag, \textbackslash notag,
+% \textbackslash label, \textbackslash tagnextline and \textbackslash qedhere for
+% \{DispWithArrows\}} 
 %
+% Some commands are allowed only in the last column of the environment
+% |{DispWithArrows}|. We write a command |\@@_if_in_last_col_of_disp:Nn| to
+% execute this command only if we are in the last column. If we are in 
+% another column, an error is raised. The first argument of
+% |\@@_if_in_last_col_of_disp:Nn| is the name of the command used in the error
+% message and the second is the code to execute.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_if_in_last_col_of_disp:Nn #1 #2
+  { 
+    \bool_if:NTF \l_@@_in_WithArrows_bool
+      { \@@_error:nn { Not~allowed~in~WithArrows } { #1 } }
+      { 
+        \int_compare:nNnTF \g_@@_col_int < \l_@@_nb_of_columns_int
+          { \@@_error:nn { Not~allowed~in~DispWithArrows } { #1 } }
+          { #2 }
+      }
+  }
+%    \end{macrocode}
+% 
+% \bigskip
+% The command |\@@_notag:| will be linked to |\notag| and |\nonumber| in the
+% environments |{WithArrows}| and |{DispWithArrows}|.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_notag: 
+  { \@@_if_in_last_col_of_disp:Nn \notag { \clist_clear:N \l_@@_tags_clist } }
+%    \end{macrocode}
+% 
+%
+% \bigskip
+% The command |\@@_tag| will be linked to |\tag| in the environments
+% |{WithArrows}| and |{DispWithArrows}|. We use |\NewDocumentCommand| because
+% this command has a starred version.
+%    \begin{macrocode}
+\NewDocumentCommand \@@_tag { s m } 
+  { 
+    \@@_if_in_last_col_of_disp:Nn \tag
+      { 
+        \tl_if_empty:NF \l_@@_tag_tl
+          { \@@_error:nn  { Multiple~tags } { #2 } }
+        \clist_set:Nn \l_@@_tags_clist { all }
+        \bool_if:nT \c_@@_mathtools_loaded_bool
+          {
+            \MH_if_boolean:nT { show_only_refs }
+              {
+                \MH_if_boolean:nF { show_manual_tags }
+                  { \clist_clear:N \l_@@_tags_clist }
+              }
+          }
+        \tl_set:Nn \l_@@_tag_tl { #2 }
+        \bool_set:Nn \l_@@_tag_star_bool { #1 }
+%    \end{macrocode}
+% The starred version |\tag*| can't be used if \pkg{amsmath} has not been loaded
+% because this version does the job by deactivating the command |\tagform@|
+% inserted by \pkg{amsmath} in the (two versions of the) command
+% |\@eqnnum|.\footnote{There are two versions of |@eqnnum|, a standard version
+% and a version for the option |leqno|.}
+%    \begin{macrocode}
+        \bool_if:nT { #1 && ! \bool_if_p:N \c_@@_amsmath_loaded_bool }
+          { \@@_error:n { tag*~without~amsmath } } 
+      }
+  }
+%    \end{macrocode}
+%
+% \bigskip
+% The command |\@@_label:n| will be linked to |\label| in the environments
+% |{WithArrows}| and |{DispWithArrows}|. In these environments, it's possible to
+% put several labels for the same line (it's not possible in the environments of
+% \pkg{amsmath}). That's why we store the differents labels of a same line in a
+% sequence |\l_@@_labels_seq|.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_label:n #1
+  {  
+    \@@_if_in_last_col_of_disp:Nn \label
+      { 
+        \seq_if_empty:NF \l_@@_labels_seq 
+          { 
+            \bool_if:NTF \c_@@_cleveref_loaded_bool
+              { \@@_error:n { Multiple~labels~with~cleveref } }
+              { \@@_error:n { Multiple~labels } } 
+          }
+        \seq_put_right:Nn \l_@@_labels_seq { #1 }
+        \bool_if:nT \c_@@_mathtools_loaded_bool
+          {
+            \MH_if_boolean:nT { show_only_refs } 
+              { 
+                \cs_if_exist:cTF { MT_r_#1 }
+                  { \clist_set:Nn \l_@@_tags_clist { all } }
+                  { \clist_clear:N \l_@@_tags_clist } 
+              }
+          }
+        \bool_if:nT \c_@@_autonum_loaded_bool
+          { 
+            \cs_if_exist:cTF { autonum@#1Referenced }
+              { \clist_set:Nn \l_@@_tags_clist { all } }
+              { \clist_clear:N \l_@@_tags_clist } 
+          } 
+      } 
+  }
+%    \end{macrocode}
+%
+% \bigskip
+% The command |\@@_tagnextline:| will be linked to |\tagnextline| in the
+% environments |{DispWithArrows}|.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_tagnextline:
+  { 
+    \@@_if_in_last_col_of_disp:Nn \tagnextline
+      { \bool_set_true:N \l_@@_tag_next_line_bool }
+  }
+%    \end{macrocode}
+%
+%
+% \bigskip
+% The environments |{DispWithArrows}| and |{DispWithArrows*}| are compliant with
+% the command |\qedhere| of \pkg{amsthm}. However, this compatibility requires a
+% special version of |\qedhere|.
+% 
+% This special version is called |\@@_qedhere:| and will be linked with
+% |\qedhere| in the last column of the environment |{DispWithArrows}| (only if
+% the package \pkg{amsthm} has been loaded). |\@@_qedhere:| raises the boolean
+% |\l_@@_qedhere_bool|.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_qedhere: { \bool_set_true:N \l_@@_qedhere_bool }
+\cs_new_protected:Npn \@@_set_qedhere: { \cs_set_eq:NN \qedhere \@@_qedhere: }  
+%    \end{macrocode}
+%
+% In the third column of the |\halign| of |{DispWithArrows}|, a command
+% |\@@_qedhere_i:| will be issued if the flag |\l_@@_qedhere_bool| has been
+% raised. The code of this command is an adaptation of the code of |\qedhere| in
+% \pkg{amsthm}.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_qedhere_i: 
+  {
+    \group_begin:
+      \cs_set_eq:NN \qed \qedsymbol
+%    \end{macrocode}
+% The line |\cs_set_eq:NN \qed at elt \setQED at elt| is a preparation for an action
+% on the \textsc{qed} stack. Despite its form, the instruction |\QED at stack|
+% executes an operation on the stack. This operation prints the \textsc{qed}
+% symbol and nullify the top of the stack.
+%    \begin{macrocode}
+      \cs_set_eq:NN \qed at elt \setQED at elt 
+      \QED at stack \relax \relax 
+    \group_end: 
+  }
+%    \end{macrocode}
+% 
+% 
+%
+%
 % \subsection{We draw the arrows}
 %
 % \bigskip
@@ -4374,7 +4626,7 @@
 % |\l_@@_last_line_of_group_int| will be the last line involved in the group
 % (impossible to guess in advance).
 %
-% |\l_@@_last_arrows_seq| will the list of all the arrows of the group
+% |\l_@@_last_arrows_seq| will be the list of all the arrows of the group
 % ending at the last line of the group (impossible to guess in advance).
 %    \begin{macrocode}
     \int_zero_new:N \l_@@_first_arrow_of_group_int 
@@ -4426,7 +4678,7 @@
 % \bigskip
 % We recall that, after the construction of the |\halign|, |\g_@@_line_int| is
 % the total number of lines of the environment. Therefore, the conditionnal
-% |\l_@@_final_int > \g_@@_line_int| tests wether an arrow arrives after the
+% |\l_@@_final_int > \g_@@_line_int| tests whether an arrow arrives after the
 % last line of the environment. In this case, we raise an error (except in the
 % second step of treatment for the option |group|). The arrow will be completely
 % ignored, even for the computation of |\l_@@_x_dim|.
@@ -4693,7 +4945,7 @@
 % |\l_@@_pos_arrow_int| & $0$  & $1$  & $2$  & $3$  & $4$ & $5$  & $6$  & $7$ \\
 % \bottomrule
 % \end{tabular} \\
-% \footnotesize The option |v| can be used only in |\Arrow| in |CodeAfter| (see
+% \footnotesize The option |v| can be used only in |\Arrow| in |code-after| (see
 % below). 
 % \end{tabular}
 % \end{center}
@@ -4805,7 +5057,7 @@
 % Eventually, we can draw the arrow with the code in |\l_@@_tikz_code_tl|. We
 % recall that the value by default for this token list is :\enskip
 % ``\verb|\draw (#1) to node {#3} (#2) ;|''. This value can be modified with the
-% option |TikzCode|. We use the variant |\@@_draw_arrow:nno| of the macro
+% option |tikz-code|. We use the variant |\@@_draw_arrow:nno| of the macro
 % |\@@_draw_arrow:nnn| because of the characters \emph{underscore} in the name
 % |\l_tmpa_tl|: if the user uses the Tikz library |babel|, the third argument of
 % the command |\@@_draw_arrow:nno| will be rescanned because this third argument
@@ -4860,7 +5112,7 @@
 %
 % \medskip
 % If the option |wrap-lines| is used, we have to use a special version of
-% |\l_@@_tikz_code_tl| (which corresponds to the option |TikzCode|).
+% |\l_@@_tikz_code_tl| (which corresponds to the option |tikz-code|).
 %    \begin{macrocode}
     \bool_if:nT { \l_@@_wrap_lines_bool && \l_@@_in_DispWithArrows_bool }
        { \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_wrap_lines_tl }
@@ -4877,7 +5129,7 @@
 % 
 % \bigskip
 % If the option |wrap-lines| is used, we have to use a special version of
-% |\l_@@_tikz_code_tl| (which corresponds to the option |TikzCode|).
+% |\l_@@_tikz_code_tl| (which corresponds to the option |tikz-code|).
 %    \begin{macrocode}
 \tl_const:Nn \c_@@_tikz_code_wrap_lines_tl
   { 
@@ -4961,16 +5213,16 @@
 %    \end{macrocode}
 %
 % \bigskip
-% \subsection{The command Arrow in CodeAfter}
+% \subsection{The command \textbackslash Arrow in code-after}
 %
-% The option |CodeAfter| is an option of the environment |{WithArrows}| (this
-% option is only available at the environment level). In the option |CodeAfter|,
+% The option |code-after| is an option of the environment |{WithArrows}| (this
+% option is only available at the environment level). In the option |code-after|,
 % one can use the command |Arrow| but it's a special version of the command
 % |Arrow|. For this special version (internally called |\@@_Arrow_code_after|),
-% we define a special set of keys called |WithArrows/Arrow/CodeAfter|.
+% we define a special set of keys called |WithArrows/Arrow/code-after|.
 %
 %    \begin{macrocode}
-\keys_define:nn { WithArrows / Arrow / CodeAfter }
+\keys_define:nn { WithArrows / Arrow / code-after }
   {
     tikz     .code:n = 
       \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
@@ -4985,22 +5237,23 @@
     lr       .code:n            = \@@_fix_pos_option:n 3 ,
     v        .value_forbidden:n = true ,
     v        .code:n            = \@@_fix_pos_option:n 4 ,
-    TikzCode .tl_set:N          = \l_@@_tikz_code_tl ,
-    TikzCode .value_required:n  = true ,
+    tikz-code .tl_set:N          = \l_@@_tikz_code_tl ,
+    tikz-code .value_required:n  = true ,
     xoffset  .dim_set:N         = \l_@@_xoffset_dim ,
     xoffset  .value_required:n  = true ,
     unknown .code:n  = 
-      \@@_sort_seq:N \l_@@_options_Arrow_CodeAfter_seq
-      \@@_error:n { Unknown~option~Arrow~in~CodeAfter } 
+      \@@_sort_seq:N \l_@@_options_Arrow_code_after_seq
+      \@@_error:n { Unknown~option~Arrow~in~code-after } 
   }
 %    \end{macrocode}
 %
 % \bigskip
-% A sequence of the options available in |\Arrow| in |\CodeAfter|. This sequence
+% A sequence of the options available in |\Arrow| in |\code-after|. This sequence
 % will be used in the error messages and can be modified dynamically.
 %    \begin{macrocode}
-\seq_set_from_clist:Nn \l_@@_options_Arrow_CodeAfter_seq
-  { ll, lr, rl, rr, tikz, TikzCode, v, x, offset }
+\seq_new:N \l_@@_options_Arrow_code_after_seq
+\seq_set_from_clist:Nn \l_@@_options_Arrow_code_after_seq
+  { ll, lr, rl, rr, tikz, tikz-code, v, x, offset }
 %    \end{macrocode}
 % 
 % \bigskip
@@ -5010,7 +5263,7 @@
     \int_set:Nn \l_@@_pos_arrow_int 1
     \str_clear_new:N \l_@@_previous_key_str
     \group_begin:
-      \keys_set:nn { WithArrows / Arrow / CodeAfter } 
+      \keys_set:nn { WithArrows / Arrow / code-after } 
         { #1, #5, tikz = { xshift = \l_@@_xoffset_dim } }
       \bool_set_false:N \l_@@_initial_r_bool
       \bool_set_false:N \l_@@_final_r_bool
@@ -5029,7 +5282,7 @@
       \tl_if_eq:nnTF { #2 } { #3 }
         { \@@_error:nn { Both~lines~are~equal } { #2 } }
 %    \end{macrocode}
-% We test wether the two Tikz nodes |(#2-l)| and |(#3-l)| really exist. If not,
+% We test whether the two Tikz nodes |(#2-l)| and |(#3-l)| really exist. If not, 
 % the arrow won't be drawn.
 %    \begin{macrocode}
         {
@@ -5076,15 +5329,15 @@
 %
 %                               
 % \bigskip
-% \subsection{MultiArrow}
+% \subsection{The command \textbackslash MultiArrow in code-after}
 % The command |\@@_MultiArrow:nn| will be linked to |\MultiArrow| when the
-% |CodeAfter| is executed.
+% |code-after| is executed.
 %    
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_MultiArrow:nn #1 #2
   {  
 %    \end{macrocode}
-% The user of the command |\MultiArrow| (in |CodeAfter|) will be able to specify
+% The user of the command |\MultiArrow| (in |code-after|) will be able to specify
 % the list of lines with the same syntax as the loop |\foreach| of \pkg{pgffor}.
 % That's why we construct a ``clist'' of \pkg{expl3} from the specification of
 % list given by the user. The construction of the ``clist'' must be global in
@@ -5152,7 +5405,7 @@
           \bool_if:nT { \l_@@_wrap_lines_bool && \l_@@_in_DispWithArrows_bool }
             { 
               \dim_set:Nn \l_tmpb_dim 
-                 { \g_@@_right_x_dim - \pgf at x - 0.3333 em }
+                { \g_@@_right_x_dim - \pgf at x - 0.3333 em }
               \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim
                 { \dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim } 
             }
@@ -5187,9 +5440,19 @@
 %    \begin{macrocode}
 \str_const:Nn \c_@@_option_ignored_str
   { If~you~go~on,~this~option~will~be~ignored. }
+\str_const:Nn \c_@@_command_ignored_str
+  { If~you~go~on,~this~command~will~be~ignored. }
 %    \end{macrocode}
-% 
+%
 %    \begin{macrocode}
+\@@_msg_new:nn { Invalid~option~format }
+  {
+    The~option~'format'~should~contain~only~letters~r,~c~and~l.\\
+    \c_@@_option_ignored_str
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 \@@_msg_new:nn { Value~for~a~key }
   {
     The~key~'\l_keys_key_tl'~should~be~used~without~value. \\
@@ -5255,37 +5518,38 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\@@_msg_new:nnn { Unknown~option~Arrow~in~CodeAfter }
+\@@_msg_new:nnn { Unknown~option~Arrow~in~code-after }
   { 
     The~option~'\l_keys_key_tl'~is~unknown~in~
     \token_to_str:N \Arrow\
-    in~\token_to_str:N \CodeAfter. \\
+    in~\token_to_str:N \code-after. \\
     \c_@@_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
   }
   { 
     The~available~keys~are~(in~alphabetic~order):~
-    \seq_use:Nnnn \l_@@_options_Arrow_CodeAfter_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l_@@_options_Arrow_code_after_seq {~and~} {,~} {~and~}.
   }
 %    \end{macrocode}
 %
 %
 %    \begin{macrocode}          
-\@@_msg_new:nn { Third~column~in~WithArrows }
+\@@_msg_new:nn { Too~much~columns~in~WithArrows }
   { 
-    By~default,~an~environment~\{\l_@@_type_env_str\}~can~only~have~
-    two~columns.~Maybe~you~have~forgotten~a~
-    \c_backslash_str\c_backslash_str.~If~you~really~want~more~than~
-    two~columns,~you~should~use~the~option~'more-columns'~at~a~global~
-    level~or~for~an~environment. \\
+    Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N 
+    \l_@@_nb_of_columns_int\ columns~and~you~try~to~use~one~more.~
+    Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str.~
+    If~you~really~want~to~use~more~columns~(after~the~arrows)~you~should~use~ 
+    the~option~'more-columns'~at~a~global~level~or~for~an~environment. \\
     However,~you~can~go~one~for~this~time.
   }
 %    \end{macrocode}
 %
 %    \begin{macrocode}          
-\@@_msg_new:nn { Third~column~in~DispWithArrows }
+\@@_msg_new:nn { Too~much~columns~in~DispWithArrows }
   { 
-    An~environment~\{\l_@@_type_env_str\}~can~only~have~two~columns.~
+    Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N 
+    \l_@@_nb_of_columns_int\ columns~and~you~try~to~use~one~more.~
     Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str\ 
     at~the~end~of~row~\int_use:N \g_@@_line_int. \\
     If~you~go~on,~you~may~have~other~errors.
@@ -5362,10 +5626,10 @@
   { You~try~to~use~the~option~'\l_keys_key_tl'~but~
     this~option~is~incompatible~or~redundant~with~the~option~
     '\l_@@_previous_key_str'~set~in~the~same~command~
-    \bool_if:NT \l_@@_in_CodeAfter_bool
+    \bool_if:NT \l_@@_in_code_after_bool
       { 
         \l_@@_string_Arrow_for_msg_str\
-        in~the~CodeAfter~of~your~environment~\{\l_@@_type_env_str\}
+        in~the~code-after~of~your~environment~\{\l_@@_type_env_str\}
       }. \\
     \c_@@_option_ignored_str
   }
@@ -5372,11 +5636,10 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\@@_msg_new:nn { Arrow~in~first~column }
+\@@_msg_new:nn { Arrow~not~in~last~column }
   { 
-    You~should~not~use~the~command~\l_@@_string_Arrow_for_msg_str\
-    in~the~first~column~of~your~environment~\{\l_@@_type_env_str\}~
-    but~only~in~the~second~column. \\
+    You~should~use~the~command~\l_@@_string_Arrow_for_msg_str\
+    only~in~the~last~column~of~your~environment~\{\l_@@_type_env_str\}.\\
     However~you~can~go~on~for~this~time.
   }
 %    \end{macrocode}
@@ -5386,8 +5649,8 @@
   { 
     The~specification~of~line~'#1'~you~use~in~the~command~
     \l_@@_string_Arrow_for_msg_str\
-    in~the~'CodeAfter'~of~\{\l_@@_type_env_str\}~doesn't~exist. \\
-    If~you~go~on,~this~command~will~be~ignored.
+    in~the~'code-after'~of~\{\l_@@_type_env_str\}~doesn't~exist. \\
+    \c_@@_option_ignored_str
   }
 %    \end{macrocode}
 %
@@ -5394,9 +5657,9 @@
 %    \begin{macrocode}
 \@@_msg_new:nn { Both~lines~are~equal }
   {
-    In~the~'CodeAfter'~of~\{\l_@@_type_env_str\}~you~try~to~
+    In~the~'code-after'~of~\{\l_@@_type_env_str\}~you~try~to~
     draw~an~arrow~going~to~it~self~from~the~line~'#1'.~This~is~not~possible. \\
-    If~you~go~on,~this~command~will~be~ignored.
+    \c_@@_option_ignored_str
   }
 %    \end{macrocode}
 % 
@@ -5413,7 +5676,7 @@
   { 
     The~specification~of~lines~you~gave~to~\token_to_str:N \MultiArrow\ 
     is~too~small:~you~need~at~least~two~lines. \\
-    If~you~go~on,~this~command~will~be~ignored.
+    \c_@@_option_ignored_str
   }
 %    \end{macrocode}
 %
@@ -5431,9 +5694,8 @@
 \@@_msg_new:nn { Not~allowed~in~DispWithArrows }
   { 
     The~command~\token_to_str:N #1
-    is~not~allowed~in~the~first~column~of~\{\l_@@_type_env_str\}~but~
-    only~in~the~second~column. \\
-    If~you~go~on,~this~command~will~be~ignored.
+    is~allowed~only~in~the~last~columnm~of~\{\l_@@_type_env_str\}. \\
+    \c_@@_option_ignored_str
   }
 %    \end{macrocode}
 % 
@@ -5441,8 +5703,8 @@
 \@@_msg_new:nn { Not~allowed~in~WithArrows }
   { 
     The~command~\token_to_str:N #1 is~not~allowed~in~\{\l_@@_type_env_str\}~
-    (it's~allowed~in~the~second~column~of~\{DispWithArrows\}). \\
-    If~you~go~on,~this~command~will~be~ignored.
+    (it's~allowed~in~the~last~column~of~\{DispWithArrows\}). \\
+    \c_@@_option_ignored_str
   }
 %    \end{macrocode}
 %
@@ -5505,7 +5767,7 @@
 %
 % 
 %
-% \subsection{The command WithArrowsNewStyle}
+% \subsection{The command \textbackslash WithArrowsNewStyle}
 %
 % A new key defined with |\WithArrowsNewStyle| will not be available at the
 % local level.
@@ -5563,7 +5825,7 @@
 % user will have an error only if he uses the option |up| or the option |down|.
 % 
 % \medskip
-% The token list |\c_@@_tikz_code_up_tl| is the value of |TikzCode| which will
+% The token list |\c_@@_tikz_code_up_tl| is the value of |tikz-code| which will
 % be used for an option |up|.
 %    \begin{macrocode}
 \tl_const:Nn \c_@@_tikz_code_up_tl
@@ -5628,7 +5890,7 @@
 %    \end{macrocode}
 % We have to set |\l_@@_wrap_lines_bool| to |false| because, otherwise, if the
 % option |wrap_lines| is used at a higher level (global or environment), we will
-% have a special affectation to |TikzCode| that will overwrite our affectation.
+% have a special affectation to |tikz-code| that will overwrite our affectation.
 %    \begin{macrocode}
                   \bool_set_false:N \l_@@_wrap_lines_bool
                   \tl_set_eq:NN \l_@@_tikz_code_tl 
@@ -5678,7 +5940,7 @@
   { 
     You~can't~use~the~option~'\l_keys_key_tl'~because~you~don't~have~loaded~the~
     Tikz~library~'calc'.You~should~add~'\token_to_str:N\usetikzlibrary{calc}'
-    ~in~your~preamble. \\
+    ~in~the~preamble~of~your~document. \\
     \c_@@_option_ignored_str
   }
 %    \end{macrocode}
@@ -5719,7 +5981,6 @@
 %
 % New option |groups| (with a \emph{s})
 %
-% Better error messages
 % 
 % \subsection*{Changes between versions 1.2 and 1.3}
 % 
@@ -5734,15 +5995,15 @@
 % \subsection*{Changes between versions 1.4 and 1.5}
 % 
 % The Tikz code used to draw the arrows can be changed with the option
-% |TikzCode|.
+% |tikz-code|.
 %
-% Two new options |CodeBefore| and |CodeAfter| have been added at the
+% Two new options |code-before| and |code-after| have been added at the
 % environment level.
 %
-% A special version of |\Arrow| is available in |CodeAfter| in order to draw
+% A special version of |\Arrow| is available in |code-after| in order to draw
 % arrows in nested environments.
 % 
-% A command |\MultiArrow| is available in |CodeAfter| to draw arrows of other
+% A command |\MultiArrow| is available in |code-after| to draw arrows of other
 % shapes.
 % 
 % \subsection*{Changes between versions 1.5 and 1.6}
@@ -5752,11 +6013,8 @@
 %
 % A new option |name| is available for the environments |{WithArrows}|.
 %
-% In the version 1.6.1, correction of a bug that leads to incompatibility with
-% |\usetikzlibrary{babel}|.
+% \subsection*{Changes between 1.6 and 1.7}
 %
-% \subsection*{Changes between 1.6.1 and 1.7}
-%
 % New environments |{DispWithArrows}| and |{DispWithArrows*}|.
 %
 % \subsection*{Changes between 1.7 and 1.8}
@@ -5817,7 +6075,7 @@
 % \WithArrowsOptions{adjust = 0pt}
 % \end{Verbatim}
 %
-% \subsection*{Changes between 1.13 et 1.14}
+% \subsection*{Changes between 1.13 and 1.14}
 %
 % New options |up| and |down| for the arrows.
 %
@@ -5838,10 +6096,10 @@
 % 1.12 but this was a mistake since this error is used with the option |xoffset|
 % at the local level. The error is put back.
 % 
-% \subsection*{Changes between 1.14 et 1.15}
+% \subsection*{Changes between 1.14 and 1.15}
 %
 % Option |new-group| to start a new group of arrows (only available when the
-% environment is composed with the option the option |groups|).
+% environment is composed with the option |groups|).
 %
 % Tikz externalization is now deactivated in the environments of the
 % extension \pkg{witharrows}.\footnote{Before this version, there was an error
@@ -5849,7 +6107,7 @@
 % possible to externalize the Tikz elements constructed by \pkg{witharrows}
 % because they use the options |overlay| and |remember picture|.} 
 %
-% \subsection*{Changes between 1.15 et 1.16}
+% \subsection*{Changes between 1.15 and 1.16}
 %
 % Option |no-arrows| 
 %
@@ -5861,6 +6119,11 @@
 % it's possible to deactivate this control with the option
 % |allow-duplicate-names|.
 % 
+%
+% \subsection*{Changes between 1.16 and 1.17}
+% 
+% Option |format|
+% 
 % \endinput
 % Local Variables:
 % TeX-fold-mode: nil

Modified: trunk/Master/texmf-dist/tex/latex/witharrows/witharrows.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/witharrows/witharrows.sty	2019-07-10 20:29:18 UTC (rev 51601)
+++ trunk/Master/texmf-dist/tex/latex/witharrows/witharrows.sty	2019-07-10 20:29:32 UTC (rev 51602)
@@ -18,8 +18,8 @@
 %% and version 1.3 or later is part of all distributions of
 %% LaTeX version 2005/12/01 or later.
 %% 
-\def\myfileversion{1.16}
-\def\myfiledate{2019/03/11}
+\def\myfileversion{1.17}
+\def\myfiledate{2019/07/09}
 \RequirePackage{tikz}
 \usetikzlibrary{arrows.meta,bending}
 \RequirePackage{expl3}[2019/02/15]
@@ -99,6 +99,8 @@
 \cs_new_protected:Npn \__wa_error:n { \msg_error:nn { witharrows } }
 \cs_new_protected:Npn \__wa_error:nn  { \msg_error:nnn { witharrows } }
 \cs_generate_variant:Nn \__wa_error:nn { n x }
+\cs_generate_variant:Nn \tl_put_right:Nn { N v }
+\cs_generate_variant:Nn \seq_set_split:Nnn { N x x }
 \AtBeginDocument
   {
     \clist_map_inline:nn
@@ -137,7 +139,6 @@
           \sort_return_same:
       }
   }
-\cs_generate_variant:Nn \seq_set_split:Nnn { N x x }
 \cs_new_protected:Npn \__wa_save:N #1
   {
     \seq_set_split:Nxx \l_tmpa_seq
@@ -191,14 +192,14 @@
 \tikzset
  {
    WithArrows / arrow / .style  =
-   {
-     align = left ,
-     auto = left ,
-     font = \small \itshape ,
-     WithArrows / arrow / tips ,
-     bend~left = 45 ,
-     ->
-   }
+     {
+       align = left ,
+       auto = left ,
+       font = \small \itshape ,
+       WithArrows / arrow / tips ,
+       bend~left = 45 ,
+       ->
+     }
  }
 \AtBeginDocument
   {
@@ -211,9 +212,11 @@
           }
       }
   }
+\newtoks \__wa_parameter_token
+\__wa_parameter_token = { # }
 \bool_new:N \l__wa_in_WithArrows_bool
 \bool_new:N \l__wa_in_DispWithArrows_bool
-\bool_new:N \l__wa_in_CodeAfter_bool
+\bool_new:N \l__wa_in_code_after_bool
 \seq_new:N \g__wa_position_in_the_tree_seq
 \seq_gput_right:Nn \g__wa_position_in_the_tree_seq 1
 \int_new:N \g__wa_last_env_int
@@ -224,12 +227,33 @@
 \int_new:N \g__wa_arrow_int
 \seq_new:N \g__wa_line_int_seq
 \int_new:N \g__wa_line_int
+\seq_new:N \g__wa_col_int_seq
+\int_new:N \g__wa_col_int
 \clist_new:N \l__wa_tags_clist
 \clist_set:Nn \l__wa_tags_clist { all }
-\str_set:Nn \l__wa_CommandName_str { Arrow }
+\cs_new_protected:Npn \__wa_test_if_to_tag:
+  {
+    \clist_if_in:NVT \l__wa_tags_clist \g__wa_line_int
+      { \clist_set:Nn \l__wa_tags_clist { all } }
+  }
+\str_new:N \l__wa_command_name_str
+\str_set:Nn \l__wa_command_name_str { Arrow }
+\str_new:N \l__wa_string_Arrow_for_msg_str
 \str_set:Nx \l__wa_string_Arrow_for_msg_str { \token_to_str:N \Arrow }
 \seq_new:N \g__wa_names_seq
 \bool_new:N \l__wa_sbwi_bool
+\bool_new:N \l__wa_in_first_columns_bool
+\bool_new:N \l__wa_tag_star_bool
+\bool_new:N \l__wa_tag_next_line_bool
+\bool_new:N \l__wa_qedhere_bool
+\bool_new:N \l__wa_new_group_bool
+\bool_new:N \l__wa_initial_r_bool
+\bool_new:N \l__wa_final_r_bool
+\tl_new:N \l__wa_initial_tl
+\tl_new:N \l__wa_final_tl
+\int_new:N \l__wa_nb_of_columns_int
+\bool_new:N \l__wa_last_col_bool
+\str_new:N \l__wa_format_str
 \cs_new_protected:Npn \__wa_eval_if_allowed:n #1
   {
     \str_if_empty:NTF \l__wa_previous_key_str
@@ -250,16 +274,17 @@
     ystart .value_required:n = true ,
     ystart .initial:n = 0.4 ex ,
     more-columns .code:n =
-      \__wa_msg_redirect_name:nn { Third~column~in~WithArrows } { none } ,
+      \__wa_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } ,
     more-columns .value_forbidden:n = true,
-    CommandName .code:n =
-      \str_set:Nn \l__wa_CommandName_str { #1 }
+    command-name .code:n =
+      \str_set:Nn \l__wa_command_name_str { #1 }
       \str_set:Nx \l__wa_string_Arrow_for_msg_str
         { \c_backslash_str Arrow~alias~\c_backslash_str #1 } ,
-    CommandName .value_required:n = true ,
-    TikzCode .tl_set:N = \l__wa_tikz_code_tl,
-    TikzCode .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
-    TikzCode .value_required:n = true ,
+    command-name .value_required:n = true ,
+    tikz-code .tl_set:N = \l__wa_tikz_code_tl,
+    tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
+    tikz-code .value_required:n = true ,
+    TikzCode .meta:n = { tikz-code = #1 } ,
     displaystyle .bool_set:N = \l__wa_displaystyle_bool ,
     displaystyle .default:n = true ,
     show-nodes .code:n =
@@ -370,11 +395,29 @@
         { \seq_gput_left:Nn \g__wa_names_seq { #1 } }
       \str_set:Nn \l__wa_name_str { #1 } ,
     name .value_required:n = true ,
-    CodeBefore .code:n = \tl_put_right:Nn \l__wa_code_before_tl { #1 } ,
-    CodeBefore .value_required:n = true,
-    CodeAfter .code:n = \tl_put_right:Nn \l__wa_code_after_tl { #1 } ,
-    CodeAfter .value_required:n = true
+    code-before .code:n = \tl_put_right:Nn \l__wa_code_before_tl { #1 } ,
+    code-before .value_required:n = true,
+    CodeBefore .meta:n = { code-before = #1 } ,
+    code-after .code:n = \tl_put_right:Nn \l__wa_code_after_tl { #1 } ,
+    code-after .value_required:n = true ,
+    CodeAfter  .meta:n = { code-after = #1 } ,
+    format .code:n = \__wa_set_option_format:n { #1 },
+    format .value_required:n = true ,
   }
+\cs_new_protected:Npn \__wa_set_option_format:n #1
+  {
+    \bool_set_true:N \l_tmpa_bool
+    \str_map_inline:nn { #1 }
+      {
+        \str_if_in:nnF {rcl} { ##1 }
+          {
+            \bool_set_false:N \l_tmpa_bool
+            \__wa_error:n { Invalid~option~format }
+            \str_map_break:
+          }
+      }
+    \bool_if:NT \l_tmpa_bool { \tl_set:Nn \l__wa_format_str { #1 } }
+  }
 \keys_define:nn { WithArrows }
   {
     WithArrows .inherit:n =
@@ -396,6 +439,14 @@
         WithArrows / DispWithArrowsSpecific
       }
   }
+\seq_new:N \l__wa_options_WithArrows_seq
+\seq_set_from_clist:Nn \l__wa_options_WithArrows_seq
+  {
+    adjust, b, c, code-after, code-before, command-name, displaystyle, end-adjust,
+    format, group, groups, i, interline, jot, ll, lr, more-columns, name,
+    no-arrows, rl, rr, show-node-names, show-nodes, start-adjust, t, tikz,
+    tikz-code, xoffset, ygap, ystart
+  }
 \keys_define:nn { WithArrows / WithArrows }
   {
     unknown .code:n  =
@@ -402,13 +453,6 @@
       \__wa_sort_seq:N \l__wa_options_WithArrows_seq
       \__wa_error:n { Unknown~option~WithArrows }
   }
-\seq_set_from_clist:Nn \l__wa_options_WithArrows_seq
-  {
-    adjust, b, c, CodeAfter, CodeBefore, CommandName, displaystyle, end-adjust,
-    group, groups, i, interline, jot, ll, lr, more-columns, name, no-arrows, rl,
-    rr, show-node-names, show-nodes, start-adjust, t, tikz, TikzCode, xoffset,
-    ygap, ystart
-  }
 \keys_define:nn { WithArrows / DispWithArrows }
   {
     unknown .code:n  =
@@ -415,13 +459,14 @@
       \__wa_sort_seq:N \l__wa_options_DispWithArrows_seq
       \__wa_error:n { Unknown~option~DispWithArrows }
   }
+\seq_new:N \l__wa_options_DispWithArrows_seq
 \seq_set_from_clist:Nn \l__wa_options_DispWithArrows_seq
   {
-    allow-multiple-labels, CodeAfter, CodeBefore, CommandName, TikzCode, adjust,
-    displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr,
-    mathindent, name, no-arrows, nonumber, notag, rl, rr, show-node-names,
-    show-nodes, start-adjust, tagged-lines, tikz, wrap-lines, xoffset, ygap,
-    ystart
+    allow-multiple-labels, code-after, code-before, command-name, tikz-code, adjust,
+    displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot,
+    ll, lr, mathindent, name, no-arrows, nonumber, notag, rl, rr,
+    show-node-names, show-nodes, start-adjust, tagged-lines, tikz, wrap-lines,
+    xoffset, ygap, ystart
   }
 \keys_define:nn { WithArrows / WithArrowsOptions }
   {
@@ -432,10 +477,11 @@
       \__wa_sort_seq:N \l__wa_options_WithArrowsOptions_seq
       \__wa_error:n { Unknown~option~WithArrowsOptions }
   }
+\seq_new:N \l__wa_options_WithArrowsOptions_seq
 \seq_set_from_clist:Nn \l__wa_options_WithArrowsOptions_seq
   {
-    allow-duplicate-names, allow-multiple-labels, b, c, CommandName,
-    more-columns, TikzCode, adjust, displaystyle, end-adjust, fleqn, group,
+    allow-duplicate-names, allow-multiple-labels, b, c, command-name,
+    more-columns, tikz-code, adjust, displaystyle, end-adjust, fleqn, group,
     groups, i, interline, jot, ll, lr, mathindent, no-arrows, nonumber, notag,
     rl, rr, show-node-names, show-nodes, standard-behaviour-with-items,
     start-adjust, t, tagged-lines, tikz, wrap-lines, xoffset, ygap, ystart
@@ -473,8 +519,8 @@
       \int_compare:nTF { \l__wa_pos_arrow_int = 6 }
         { \str_set:Nn \l__wa_status_arrow_str { new-group } }
         { \__wa_error:n { new-group~without~groups } } ,
-    TikzCode .code:n = \prg_do_nothing: ,
-    TikzCode .value_required:n = true ,
+    tikz-code .code:n = \prg_do_nothing: ,
+    tikz-code .value_required:n = true ,
     tikz .code:n = \prg_do_nothing: ,
     tikz .value_required:n = true ,
     xoffset .code:n =
@@ -491,9 +537,10 @@
       \__wa_sort_seq:N \l__wa_options_Arrow_seq
       \__wa_error:n { Unknown~option~in~Arrow }
   }
+\seq_new:N \l__wa_options_Arrow_seq
 \seq_set_from_clist:Nn \l__wa_options_Arrow_seq
   {
-    adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, TikzCode,
+    adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, tikz-code,
     xoffset
   }
 \cs_new_protected:Npn \__wa_fix_pos_arrow:n #1
@@ -506,8 +553,8 @@
   }
 \keys_define:nn {WithArrows / Arrow / SecondPass }
   {
-    TikzCode .tl_set:N = \l__wa_tikz_code_tl ,
-    TikzCode .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
+    tikz-code .tl_set:N = \l__wa_tikz_code_tl ,
+    tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
     tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
     tikz .initial:n = \c_empty_tl ,
     rr .code:n = \__wa_fix_pos_arrow:n 3 ,
@@ -547,9 +594,9 @@
       { g__wa_arrow _ \l__wa_prefix_str _ \int_use:N \g__wa_arrow_int _ prop }
       \l_tmpa_prop
   }
-\cs_new_protected:Npn \__wa_Arrow_first_column:
-  { \__wa_error:n { Arrow~in~first~column } \__wa_Arrow }
-\cs_new_protected:Npn \__wa_pre_environment:n #1
+\cs_new_protected:Npn \__wa_Arrow_first_columns:
+  { \__wa_error:n { Arrow~not~in~last~column } \__wa_Arrow }
+\cs_new_protected:Npn \__wa_pre_halign:n #1
   {
     \str_clear_new:N \l__wa_type_env_str
     \str_set:NV \l__wa_type_env_str \@currenvir
@@ -563,6 +610,8 @@
     \int_gzero:N \g__wa_arrow_int
     \seq_gput_right:NV \g__wa_line_int_seq \g__wa_line_int
     \int_gzero:N \g__wa_line_int
+    \seq_gput_right:NV \g__wa_col_int_seq \g__wa_col_int
+    \int_gzero:N \g__wa_col_int
     \seq_gput_right:Nn \g__wa_position_in_the_tree_seq 1
     \seq_set_eq:NN \l_tmpa_seq \g__wa_position_in_the_tree_seq
     \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
@@ -576,7 +625,8 @@
     \int_zero_new:N \l__wa_pos_of_arrow_int
     \int_zero_new:N \l__wa_jump_int
     \int_set:Nn \l__wa_jump_int \c_one_int
-    \bool_set_false:N \l__wa_in_first_column_bool
+    \str_set:Nn \l__wa_format_str { rl }
+    \bool_set_true:N \l__wa_last_col_bool
     \seq_clear_new:N \l__wa_labels_seq
     \bool_set_false:N \l__wa_tag_next_line_bool
     \skip_zero:N \l__wa_interline_skip
@@ -587,9 +637,13 @@
       { \keys_set:nn { WithArrows / WithArrows } { #1 } }
     \bool_if:NT \l__wa_in_DispWithArrows_bool
       { \keys_set:nn { WithArrows / DispWithArrows } { #1 } }
+    \cs_set_eq:cN \l__wa_command_name_str \__wa_Arrow_first_columns:
+    \int_set:Nn \l__wa_nb_of_columns_int { \str_count:N \l__wa_format_str }
+    \seq_clear_new:N \l__wa_format_seq
+    \seq_set_split:NnV \l__wa_format_seq { } \l__wa_format_str
     \bool_if:NT \g__wa_footnote_bool { \begin { savenotes } }
     \l__wa_code_before_tl
-    \cs_set_eq:cN \l__wa_CommandName_str \__wa_Arrow
+    \spread at equation
     \cs_set_eq:NN \notag \__wa_notag:
     \cs_set_eq:NN \nonumber \__wa_notag:
     \cs_set_eq:NN \tag \__wa_tag
@@ -597,31 +651,63 @@
     \cs_set_eq:NN \label \__wa_label:n
     \cs_set_eq:NN \tagnextline \__wa_tagnextline:
   }
-\NewDocumentEnvironment { WithArrows } { ! O { } }
+\cs_new_protected:Npn \__wa_construct_halign:
   {
-    \bool_set_true:N \l__wa_in_WithArrows_bool
-    \bool_set_false:N \l__wa_in_DispWithArrows_bool
-    \__wa_pre_environment:n { #1 }
-    \if_mode_math: \else:
-      \__wa_error:n { WithArrows~outside~math~mode }
-    \fi:
-    \int_case:nn \l__wa_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
-    \bgroup
-    \spread at equation
-    \ialign \bgroup
-    \int_gincr:N \g__wa_line_int
-    \cs_set_eq:cN \l__wa_CommandName_str \__wa_Arrow_first_column:
-    \bool_set_true:N \l__wa_in_first_column_bool
-    \strut \hfil
-    $
-    \bool_if:NT \l__wa_displaystyle_bool \displaystyle
-    { ## }
-    $
-    &
-    $
-    \bool_if:NT \l__wa_displaystyle_bool \displaystyle
-    { { } ## }
-    $
+    \seq_pop_right:NNTF \l__wa_format_seq \l__wa_type_col_str
+      {
+        \use:x
+          {
+            \bool_set_false:N \l__wa_last_col_bool
+            \__wa_construct_halign:
+            \bool_if:NT \l__wa_last_col_bool
+              {
+                \cs_set_eq:cN { \l__wa_command_name_str } \__wa_Arrow
+                \bool_if:NT \l__wa_in_DispWithArrows_bool
+                  {
+                    \__wa_test_if_to_tag:
+                    \bool_if:NT \c__wa_amsthm_loaded_bool \__wa_set_qedhere:
+                  }
+              }
+            \str_if_eq:VnT \l__wa_type_col_str { c } \hfil
+            \str_if_eq:VnT \l__wa_type_col_str { r } \hfill
+            \int_gincr:N \g__wa_col_int
+            $ % $
+              {
+                { }
+                \bool_if:NT \l__wa_displaystyle_bool \displaystyle
+                ####
+              }
+            $ % $
+            \bool_if:NTF \l__wa_last_col_bool
+              { \__wa_construct_nodes: }
+              {
+                \str_if_eq:VnT \l__wa_type_col_str { l } \hfil
+                \str_if_eq:VnT \l__wa_type_col_str { c } \hfil
+                \bool_if:NT \l__wa_in_DispWithArrows_bool { \tabskip = \c_zero_skip }
+                &
+              }
+          }
+      }
+      {
+        \bool_if:NTF \l__wa_in_WithArrows_bool
+          {
+            \ialign
+            \bgroup
+          }
+          {
+            \halign to
+            \bool_if:NTF \l__wa_inlabel_bool \linewidth \displaywidth
+            \bgroup
+            \bool_if:NT \l__wa_fleqn_bool
+              { \skip_horizontal:N \l__wa_mathindent_dim }
+          }
+        \int_gincr:N \g__wa_line_int
+        \int_gzero:N \g__wa_col_int
+        \strut
+      }
+  }
+\cs_new_protected:Npn \__wa_construct_nodes:
+  {
     \tikz [ remember~picture , overlay ]
       \node
         [
@@ -652,10 +738,22 @@
     \bool_if:NT \l__wa_show_node_names_bool
       {
         \hbox_overlap_right:n
-          { \small wa - \l__wa_prefix_str - \int_use:N \g__wa_line_int }
+          { \small wa - \l__wa_prefix_str - \int_use:N \g__wa_line_int - r }
       }
+  }
+\NewDocumentEnvironment { WithArrows } { ! O { } }
+  {
+    \bool_set_true:N \l__wa_in_WithArrows_bool
+    \bool_set_false:N \l__wa_in_DispWithArrows_bool
+    \__wa_pre_halign:n { #1 }
+    \if_mode_math: \else:
+      \__wa_error:n { WithArrows~outside~math~mode }
+    \fi:
+    \int_case:nn \l__wa_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
+    \bgroup
+    \__wa_construct_halign:
     &&
-    \__wa_error:n { Third~column~in~WithArrows }
+    \__wa_error:n { Too~much~columns~in~WithArrows }
     $
     \bool_if:NT \l__wa_displaystyle_bool \displaystyle
     { ## }
@@ -666,10 +764,10 @@
     \\
     \egroup
     \egroup
-    \__wa_post_environment:
+    \__wa_post_halign:
     \bool_if:NT \g__wa_footnote_bool { \end { savenotes } }
   }
-\cs_new_protected:Npn \__wa_post_environment:
+\cs_new_protected:Npn \__wa_post_halign:
   {
     \cs_set:Npn \WithArrowsRightX { \g__wa_right_x_dim }
     \int_compare:nNnT \g__wa_arrow_int > 0 \__wa_scan_arrows:
@@ -677,8 +775,8 @@
       \tikzset { every~picture / .style = __wa_standard }
       \cs_set:Npn \WithArrowsNbLines { \int_use:N \g__wa_line_int }
       \cs_set_eq:NN \MultiArrow \__wa_MultiArrow:nn
-      \cs_set_eq:cN \l__wa_CommandName_str \__wa_Arrow_code_after
-      \bool_set_true:N \l__wa_in_CodeAfter_bool
+      \cs_set_eq:cN \l__wa_command_name_str \__wa_Arrow_code_after
+      \bool_set_true:N \l__wa_in_code_after_bool
       \l__wa_code_after_tl
     \group_end:
     \seq_gpop_right:NN \g__wa_position_in_the_tree_seq \l_tmpa_tl
@@ -691,11 +789,13 @@
     \int_gset:Nn \g__wa_arrow_int \l_tmpa_tl
     \seq_gpop_right:NN \g__wa_line_int_seq \l_tmpa_tl
     \int_gset:Nn \g__wa_line_int \l_tmpa_tl
+    \seq_gpop_right:NN \g__wa_col_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__wa_col_int \l_tmpa_tl
   }
 \cs_new_protected:Npn \__wa_cr:
   {
     \scan_stop:
-    \bool_if:NT \l__wa_in_first_column_bool { & { } }
+    \prg_replicate:nn { \l__wa_nb_of_columns_int - \g__wa_col_int } { & { } }
     \group_align_safe_begin:
     \peek_meaning_remove:NTF * \__wa_cr_i: \__wa_cr_i:
   }
@@ -779,21 +879,111 @@
       }
     \cr \noalign { \skip_vertical:n { #1 + \l__wa_interline_skip } \scan_stop: }
   }
-\cs_new_protected:Npn \__wa_if_in_second_col_of_disp:Nn #1 #2
+\bool_new:N \l__wa_inlabel_bool
+\NewDocumentEnvironment { DispWithArrows } { ! O { } }
   {
+    \bool_if:nT \c__wa_mathtools_loaded_bool
+      {
+        \MH_if_boolean:nT { show_only_refs }
+          {
+            \MT_showonlyrefs_false:
+            \MH_set_boolean_T:n { show_only_refs }
+          }
+      }
+    \bool_if:NT \c__wa_typedref_loaded_bool { \str_set:Nn \sr at name { equation } }
+    \bool_if:NT \c__wa_amsmath_loaded_bool \intertext@
+    \bool_set_true:N \l__wa_in_DispWithArrows_bool
+    \__wa_pre_halign:n { #1 }
+    \bool_if:NF \l__wa_sbwi_bool
+      {
+        \if at inlabel
+        \bool_set_true:N \l__wa_inlabel_bool
+        \fi
+      }
+    \tl_clear_new:N \l__wa_tag_tl
+    \bool_set_false:N \l__wa_qedhere_bool
+    \bool_set_false:N \l__wa_tag_star_bool
+    \if_mode_math:
+      \__wa_error:n { DispWithArrows~in~math~mode }
+    \fi:
+    \bool_if:NTF \l__wa_inlabel_bool
+      { $ } % $
+      {
+        \if_mode_vertical:
+        \nointerlineskip
+        \hbox_to_wd:nn { .6 \linewidth } { }
+        \fi:
+        $$
+      }
+    \vtop \bgroup
+    \bool_if:NTF \l__wa_fleqn_bool
+      { \tabskip = \c_zero_skip }
+      { \tabskip = 0 pt plus 1000 pt minus 1000 pt }
+    \__wa_construct_halign:
+    \tabskip = 0 pt plus 1000 pt minus 1000 pt
+    &
+    $ ## $
+    \tabskip = \c_zero_skip
+    &&
+    \__wa_error:n { Too~much~columns~in~DispWithArrows }
+    \bool_if:nT \c_false_bool { ## }
+    \cr
+  }
+  {
+    \clist_if_in:NnT \l__wa_tags_clist { last }
+      { \clist_set:Nn \l__wa_tags_clist { all } }
+    \\
+    \egroup
+    \egroup
+    \dim_gzero_new:N \g__wa_right_x_dim
+    \dim_gset_eq:NN \g__wa_right_x_dim \c_max_dim
+    \begin { tikzpicture } [ __wa_standard ]
+      \int_step_variable:nNn \g__wa_line_int \l_tmpa_int
+        {
+          \cs_if_free:cTF
+            { pgf at sh@ns at wa - \l__wa_prefix_str - \l_tmpa_int - v }
+            { \__wa_error:n { Inexistent~v-node } }
+            {
+              \tikz at parse@node\pgfutil at firstofone ( \l_tmpa_int - v )
+              \dim_set:Nn \l_tmpa_dim \pgf at x
+              \dim_compare:nNnT \l_tmpa_dim < \g__wa_right_x_dim
+                { \dim_gset:Nn \g__wa_right_x_dim \l_tmpa_dim }
+            }
+        }
+    \end { tikzpicture }
+    \__wa_post_halign:
+    \bool_if:nT \c__wa_mathtools_loaded_bool
+      { \MH_if_boolean:nT { show_only_refs } \MT_showonlyrefs_true: }
+    \bool_if:NTF \l__wa_inlabel_bool
+      {
+        $ % $
+        \skip_vertical:N \belowdisplayskip
+      }
+      { $$ }
+    \bool_if:NT \g__wa_footnote_bool { \end {savenotes } }
+    \ignorespacesafterend
+  }
+\NewDocumentEnvironment { DispWithArrows* } { }
+  {
+    \WithArrowsOptions { notag }
+    \DispWithArrows
+  }
+  \endDispWithArrows
+\cs_new_protected:Npn \__wa_if_in_last_col_of_disp:Nn #1 #2
+  {
     \bool_if:NTF \l__wa_in_WithArrows_bool
       { \__wa_error:nn { Not~allowed~in~WithArrows } { #1 } }
       {
-        \bool_if:NTF \l__wa_in_first_column_bool
+        \int_compare:nNnTF \g__wa_col_int < \l__wa_nb_of_columns_int
           { \__wa_error:nn { Not~allowed~in~DispWithArrows } { #1 } }
           { #2 }
       }
   }
 \cs_new_protected:Npn \__wa_notag:
-  { \__wa_if_in_second_col_of_disp:Nn \notag { \clist_clear:N \l__wa_tags_clist } }
+  { \__wa_if_in_last_col_of_disp:Nn \notag { \clist_clear:N \l__wa_tags_clist } }
 \NewDocumentCommand \__wa_tag { s m }
   {
-    \__wa_if_in_second_col_of_disp:Nn \tag
+    \__wa_if_in_last_col_of_disp:Nn \tag
       {
         \tl_if_empty:NF \l__wa_tag_tl
           { \__wa_error:nn  { Multiple~tags } { #2 } }
@@ -814,7 +1004,7 @@
   }
 \cs_new_protected:Npn \__wa_label:n #1
   {
-    \__wa_if_in_second_col_of_disp:Nn \label
+    \__wa_if_in_last_col_of_disp:Nn \label
       {
         \seq_if_empty:NF \l__wa_labels_seq
           {
@@ -842,10 +1032,11 @@
   }
 \cs_new_protected:Npn \__wa_tagnextline:
   {
-    \__wa_if_in_second_col_of_disp:Nn \tagnextline
+    \__wa_if_in_last_col_of_disp:Nn \tagnextline
       { \bool_set_true:N \l__wa_tag_next_line_bool }
   }
 \cs_new_protected:Npn \__wa_qedhere: { \bool_set_true:N \l__wa_qedhere_bool }
+\cs_new_protected:Npn \__wa_set_qedhere: { \cs_set_eq:NN \qedhere \__wa_qedhere: }
 \cs_new_protected:Npn \__wa_qedhere_i:
   {
     \group_begin:
@@ -854,152 +1045,6 @@
       \QED at stack \relax \relax
     \group_end:
   }
-\bool_new:N \l__wa_inlabel_bool
-\NewDocumentEnvironment { DispWithArrows } { ! O { } }
-  {
-    \bool_if:nT \c__wa_mathtools_loaded_bool
-      {
-        \MH_if_boolean:nT { show_only_refs }
-          {
-            \MT_showonlyrefs_false:
-            \MH_set_boolean_T:n { show_only_refs }
-          }
-      }
-    \bool_if:NT \c__wa_typedref_loaded_bool { \str_set:Nn \sr at name { equation } }
-    \bool_if:NT \c__wa_amsmath_loaded_bool \intertext@
-    \bool_set_true:N \l__wa_in_DispWithArrows_bool
-    \__wa_pre_environment:n { #1 }
-    \bool_if:NF \l__wa_sbwi_bool
-      {
-        \if at inlabel
-        \bool_set_true:N \l__wa_inlabel_bool
-        \fi
-      }
-    \tl_clear_new:N \l__wa_tag_tl
-    \bool_set_false:N \l__wa_qedhere_bool
-    \bool_set_false:N \l__wa_tag_star_bool
-    \if_mode_math:
-      \__wa_error:n { DispWithArrows~in~math~mode }
-    \fi:
-    \bool_if:NTF \l__wa_inlabel_bool
-      { $ } % $
-      {
-        \if_mode_vertical:
-        \nointerlineskip
-        \hbox_to_wd:nn { .6 \linewidth } { }
-        \fi:
-        $$
-      }
-    \bool_if:NTF \l__wa_inlabel_bool \vtop \vcenter \bgroup
-    \spread at equation
-    \bool_if:NTF \l__wa_fleqn_bool
-      { \tabskip = \c_zero_skip }
-      { \tabskip = 0 pt plus 1000 pt minus 1000 pt }
-    \halign to \bool_if:NTF \l__wa_inlabel_bool \linewidth \displaywidth
-    \bgroup
-    \int_gincr:N \g__wa_line_int
-    \cs_set_eq:cN \l__wa_CommandName_str \__wa_Arrow_first_column:
-    \bool_set_true:N \l__wa_in_first_column_bool
-    \strut
-    \bool_if:NT \l__wa_fleqn_bool { \skip_horizontal:n \l__wa_mathindent_dim }
-    \hfil
-    $
-    \bool_if:NT \l__wa_displaystyle_bool \displaystyle
-    { ## }
-    $
-    \tabskip = \c_zero_skip
-    &
-    \clist_if_in:NVT \l__wa_tags_clist \g__wa_line_int
-      { \clist_set:Nn \l__wa_tags_clist { all } }
-    \bool_if:NT \c__wa_amsthm_loaded_bool
-      { \cs_set_eq:NN \qedhere \__wa_qedhere: }
-    $
-    \bool_if:NT \l__wa_displaystyle_bool \displaystyle
-    { { } ## }
-    $
-    \tabskip = 0 pt plus 1000 pt minus 1000 pt
-    \tikz [ remember~picture , overlay ]
-      \node
-        [
-          node~contents = { } ,
-          __wa_node_style ,
-          name = wa - \l__wa_prefix_str - \int_use:N \g__wa_line_int - l ,
-          alias =
-            {
-              \str_if_empty:NF \l__wa_name_str
-                { \l__wa_name_str - \int_use:N \g__wa_line_int - l }
-            }
-        ]
-        ;
-    \hfil
-    \tikz [ remember~picture , overlay ]
-      \node
-        [
-          node~contents = { } ,
-          __wa_node_style ,
-          name = wa - \l__wa_prefix_str - \int_use:N \g__wa_line_int - r ,
-          alias =
-            {
-              \str_if_empty:NF \l__wa_name_str
-                { \l__wa_name_str - \int_use:N \g__wa_line_int - r }
-            }
-        ]
-        ;
-    \bool_if:NT \l__wa_show_node_names_bool
-      {
-        \hbox_overlap_right:n
-          { \small wa - \l__wa_prefix_str - \int_use:N \g__wa_line_int }
-      }
-    &
-    $ ## $
-    \tabskip = \c_zero_skip
-    &&
-    \__wa_error:n { Third~column~in~DispWithArrows }
-    \bool_if:nT \c_false_bool { ## }
-    \cr
-  }
-  {
-    \clist_if_in:NnT \l__wa_tags_clist { last }
-      { \clist_set:Nn \l__wa_tags_clist { all } }
-    \\
-    \egroup
-    \egroup
-    \bool_if:NT \l__wa_in_DispWithArrows_bool
-      {
-        \dim_gzero_new:N \g__wa_right_x_dim
-        \dim_gset_eq:NN \g__wa_right_x_dim \c_max_dim
-        \begin { tikzpicture } [ __wa_standard ]
-          \int_step_variable:nNn \g__wa_line_int \l_tmpa_int
-            {
-              \cs_if_free:cTF
-                { pgf at sh@ns at wa - \l__wa_prefix_str - \l_tmpa_int - v }
-                { \__wa_error:n { Inexistent~v-node } }
-                {
-                  \tikz at parse@node\pgfutil at firstofone ( \l_tmpa_int - v )
-                  \dim_set:Nn \l_tmpa_dim \pgf at x
-                  \dim_compare:nNnT \l_tmpa_dim < \g__wa_right_x_dim
-                    { \dim_gset:Nn \g__wa_right_x_dim \l_tmpa_dim }
-                }
-            }
-        \end { tikzpicture }
-      }
-    \__wa_post_environment:
-    \bool_if:nT \c__wa_mathtools_loaded_bool
-      { \MH_if_boolean:nT { show_only_refs } \MT_showonlyrefs_true: }
-    \bool_if:NTF \l__wa_inlabel_bool
-      { $ % $
-        \skip_vertical:N \belowdisplayskip
-      }
-      { $$ }
-    \bool_if:NT \g__wa_footnote_bool { \end {savenotes } }
-    \ignorespacesafterend
-  }
-\NewDocumentEnvironment { DispWithArrows* } { }
-  {
-    \WithArrowsOptions { notag }
-    \DispWithArrows
-  }
-  \endDispWithArrows
 \cs_new_protected:Npn \__wa_scan_arrows:
   {
     \group_begin:
@@ -1265,7 +1310,7 @@
       }
   }
 \cs_new:Npn \WithArrowsLastEnv { \int_use:N \g__wa_last_env_int }
-\keys_define:nn { WithArrows / Arrow / CodeAfter }
+\keys_define:nn { WithArrows / Arrow / code-after }
   {
     tikz     .code:n =
       \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
@@ -1280,22 +1325,23 @@
     lr       .code:n            = \__wa_fix_pos_option:n 3 ,
     v        .value_forbidden:n = true ,
     v        .code:n            = \__wa_fix_pos_option:n 4 ,
-    TikzCode .tl_set:N          = \l__wa_tikz_code_tl ,
-    TikzCode .value_required:n  = true ,
+    tikz-code .tl_set:N          = \l__wa_tikz_code_tl ,
+    tikz-code .value_required:n  = true ,
     xoffset  .dim_set:N         = \l__wa_xoffset_dim ,
     xoffset  .value_required:n  = true ,
     unknown .code:n  =
-      \__wa_sort_seq:N \l__wa_options_Arrow_CodeAfter_seq
-      \__wa_error:n { Unknown~option~Arrow~in~CodeAfter }
+      \__wa_sort_seq:N \l__wa_options_Arrow_code_after_seq
+      \__wa_error:n { Unknown~option~Arrow~in~code-after }
   }
-\seq_set_from_clist:Nn \l__wa_options_Arrow_CodeAfter_seq
-  { ll, lr, rl, rr, tikz, TikzCode, v, x, offset }
+\seq_new:N \l__wa_options_Arrow_code_after_seq
+\seq_set_from_clist:Nn \l__wa_options_Arrow_code_after_seq
+  { ll, lr, rl, rr, tikz, tikz-code, v, x, offset }
 \NewDocumentCommand \__wa_Arrow_code_after { O { } m m m ! O { } }
   {
     \int_set:Nn \l__wa_pos_arrow_int 1
     \str_clear_new:N \l__wa_previous_key_str
     \group_begin:
-      \keys_set:nn { WithArrows / Arrow / CodeAfter }
+      \keys_set:nn { WithArrows / Arrow / code-after }
         { #1, #5, tikz = { xshift = \l__wa_xoffset_dim } }
       \bool_set_false:N \l__wa_initial_r_bool
       \bool_set_false:N \l__wa_final_r_bool
@@ -1388,7 +1434,7 @@
           \bool_if:nT { \l__wa_wrap_lines_bool && \l__wa_in_DispWithArrows_bool }
             {
               \dim_set:Nn \l_tmpb_dim
-                 { \g__wa_right_x_dim - \pgf at x - 0.3333 em }
+                { \g__wa_right_x_dim - \pgf at x - 0.3333 em }
               \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim
                 { \dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim }
             }
@@ -1413,6 +1459,13 @@
   }
 \str_const:Nn \c__wa_option_ignored_str
   { If~you~go~on,~this~option~will~be~ignored. }
+\str_const:Nn \c__wa_command_ignored_str
+  { If~you~go~on,~this~command~will~be~ignored. }
+\__wa_msg_new:nn { Invalid~option~format }
+  {
+    The~option~'format'~should~contain~only~letters~r,~c~and~l.\\
+    \c__wa_option_ignored_str
+  }
 \__wa_msg_new:nn { Value~for~a~key }
   {
     The~key~'\l_keys_key_tl'~should~be~used~without~value. \\
@@ -1462,30 +1515,31 @@
     The~available~keys~are~(in~alphabetic~order):~
     \seq_use:Nnnn \l__wa_options_WithArrowsOptions_seq {~and~} {,~} {~and~}.
   }
-\__wa_msg_new:nnn { Unknown~option~Arrow~in~CodeAfter }
+\__wa_msg_new:nnn { Unknown~option~Arrow~in~code-after }
   {
     The~option~'\l_keys_key_tl'~is~unknown~in~
     \token_to_str:N \Arrow\
-    in~\token_to_str:N \CodeAfter. \\
+    in~\token_to_str:N \code-after. \\
     \c__wa_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
   }
   {
     The~available~keys~are~(in~alphabetic~order):~
-    \seq_use:Nnnn \l__wa_options_Arrow_CodeAfter_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__wa_options_Arrow_code_after_seq {~and~} {,~} {~and~}.
   }
-\__wa_msg_new:nn { Third~column~in~WithArrows }
+\__wa_msg_new:nn { Too~much~columns~in~WithArrows }
   {
-    By~default,~an~environment~\{\l__wa_type_env_str\}~can~only~have~
-    two~columns.~Maybe~you~have~forgotten~a~
-    \c_backslash_str\c_backslash_str.~If~you~really~want~more~than~
-    two~columns,~you~should~use~the~option~'more-columns'~at~a~global~
-    level~or~for~an~environment. \\
+    Your~environment~\{\l__wa_type_env_str\}~has~\int_use:N
+    \l__wa_nb_of_columns_int\ columns~and~you~try~to~use~one~more.~
+    Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str.~
+    If~you~really~want~to~use~more~columns~(after~the~arrows)~you~should~use~
+    the~option~'more-columns'~at~a~global~level~or~for~an~environment. \\
     However,~you~can~go~one~for~this~time.
   }
-\__wa_msg_new:nn { Third~column~in~DispWithArrows }
+\__wa_msg_new:nn { Too~much~columns~in~DispWithArrows }
   {
-    An~environment~\{\l__wa_type_env_str\}~can~only~have~two~columns.~
+    Your~environment~\{\l__wa_type_env_str\}~has~\int_use:N
+    \l__wa_nb_of_columns_int\ columns~and~you~try~to~use~one~more.~
     Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str\
     at~the~end~of~row~\int_use:N \g__wa_line_int. \\
     If~you~go~on,~you~may~have~other~errors.
@@ -1539,18 +1593,17 @@
   { You~try~to~use~the~option~'\l_keys_key_tl'~but~
     this~option~is~incompatible~or~redundant~with~the~option~
     '\l__wa_previous_key_str'~set~in~the~same~command~
-    \bool_if:NT \l__wa_in_CodeAfter_bool
+    \bool_if:NT \l__wa_in_code_after_bool
       {
         \l__wa_string_Arrow_for_msg_str\
-        in~the~CodeAfter~of~your~environment~\{\l__wa_type_env_str\}
+        in~the~code-after~of~your~environment~\{\l__wa_type_env_str\}
       }. \\
     \c__wa_option_ignored_str
   }
-\__wa_msg_new:nn { Arrow~in~first~column }
+\__wa_msg_new:nn { Arrow~not~in~last~column }
   {
-    You~should~not~use~the~command~\l__wa_string_Arrow_for_msg_str\
-    in~the~first~column~of~your~environment~\{\l__wa_type_env_str\}~
-    but~only~in~the~second~column. \\
+    You~should~use~the~command~\l__wa_string_Arrow_for_msg_str\
+    only~in~the~last~column~of~your~environment~\{\l__wa_type_env_str\}.\\
     However~you~can~go~on~for~this~time.
   }
 \__wa_msg_new:nn { Wrong~line~in~Arrow }
@@ -1557,14 +1610,14 @@
   {
     The~specification~of~line~'#1'~you~use~in~the~command~
     \l__wa_string_Arrow_for_msg_str\
-    in~the~'CodeAfter'~of~\{\l__wa_type_env_str\}~doesn't~exist. \\
-    If~you~go~on,~this~command~will~be~ignored.
+    in~the~'code-after'~of~\{\l__wa_type_env_str\}~doesn't~exist. \\
+    \c__wa_option_ignored_str
   }
 \__wa_msg_new:nn { Both~lines~are~equal }
   {
-    In~the~'CodeAfter'~of~\{\l__wa_type_env_str\}~you~try~to~
+    In~the~'code-after'~of~\{\l__wa_type_env_str\}~you~try~to~
     draw~an~arrow~going~to~it~self~from~the~line~'#1'.~This~is~not~possible. \\
-    If~you~go~on,~this~command~will~be~ignored.
+    \c__wa_option_ignored_str
   }
 \__wa_msg_new:nn { Wrong~line~specification~in~MultiArrow }
   {
@@ -1575,7 +1628,7 @@
   {
     The~specification~of~lines~you~gave~to~\token_to_str:N \MultiArrow\
     is~too~small:~you~need~at~least~two~lines. \\
-    If~you~go~on,~this~command~will~be~ignored.
+    \c__wa_option_ignored_str
   }
 \__wa_msg_new:nn { tag*~without~amsmath }
   {
@@ -1587,15 +1640,14 @@
 \__wa_msg_new:nn { Not~allowed~in~DispWithArrows }
   {
     The~command~\token_to_str:N #1
-    is~not~allowed~in~the~first~column~of~\{\l__wa_type_env_str\}~but~
-    only~in~the~second~column. \\
-    If~you~go~on,~this~command~will~be~ignored.
+    is~allowed~only~in~the~last~columnm~of~\{\l__wa_type_env_str\}. \\
+    \c__wa_option_ignored_str
   }
 \__wa_msg_new:nn { Not~allowed~in~WithArrows }
   {
     The~command~\token_to_str:N #1 is~not~allowed~in~\{\l__wa_type_env_str\}~
-    (it's~allowed~in~the~second~column~of~\{DispWithArrows\}). \\
-    If~you~go~on,~this~command~will~be~ignored.
+    (it's~allowed~in~the~last~column~of~\{DispWithArrows\}). \\
+    \c__wa_option_ignored_str
   }
 \__wa_msg_new:nn { Multiple~tags }
   {
@@ -1752,7 +1804,7 @@
   {
     You~can't~use~the~option~'\l_keys_key_tl'~because~you~don't~have~loaded~the~
     Tikz~library~'calc'.You~should~add~'\token_to_str:N\usetikzlibrary{calc}'
-    ~in~your~preamble. \\
+    ~in~the~preamble~of~your~document. \\
     \c__wa_option_ignored_str
   }
 \__wa_msg_new:nnn { Duplicate~name }



More information about the tex-live-commits mailing list