texlive[49054] Master/texmf-dist: witharrows (2nov18)

commits+karl at tug.org commits+karl at tug.org
Fri Nov 2 21:53:13 CET 2018


Revision: 49054
          http://tug.org/svn/texlive?view=revision&revision=49054
Author:   karl
Date:     2018-11-02 21:53:13 +0100 (Fri, 02 Nov 2018)
Log Message:
-----------
witharrows (2nov18)

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	2018-11-02 20:53:02 UTC (rev 49053)
+++ trunk/Master/texmf-dist/doc/latex/witharrows/README.md	2018-11-02 20:53:13 UTC (rev 49054)
@@ -1,9 +1,24 @@
-The LaTeX extension witharrows is distributed under the LPPL 1.3 license.
+# Readme for the package witharrows
 
-This extension has been written by F. Pantigny (fpantigny at wanadoo.fr).
+## License
+The LaTeX extension `witharrows` is distributed under the LPPL 1.3 license.
 
-This extension is entirely contained in a single file : witharrows.sty
+## Presentation
+This extension has been written by F. Pantigny (`fpantigny at wanadoo.fr`).
 
-The extension witharrows gives a LaTeX environment {WithArrows} which is similar
-to the environment {aligned} of amsmath but which gives the possibility to draw arrows 
-on the right side of the equations for explanations.
\ No newline at end of file
+The extension `witharrows` gives a LaTeX environment `{WithArrows}` which is similar
+to the environment `{aligned}` of `amsmath` but which gives the possibility to draw arrows 
+on the right side of the equations for explanations.
+
+## Installation
+
+The package `witharrows` is present in the distributions MiKTeX, TeXLive and MacTeX.
+
+For a manual installation:
+
+* put the files `witharrows.ins` dans `witharrows.dtx` in the same directory; 
+* run `latex witharrows.ins`.
+
+The file `witharrows.sty` will be generated.
+
+The file `witharrows.sty` is the only file necessary to use the extension `witharrows`.

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	2018-11-02 20:53:02 UTC (rev 49053)
+++ trunk/Master/texmf-dist/source/latex/witharrows/witharrows.dtx	2018-11-02 20:53:13 UTC (rev 49054)
@@ -15,8 +15,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{1.10.1}
-\def\myfiledate{2018/09/24}
+\def\myfileversion{1.11}
+\def\myfiledate{2018/11/02}
 %
 %
 %<*batchfile>
@@ -484,7 +484,7 @@
 % \end{WithArrows}$
 % 
 % \medskip 
-% Special commands are available in |CodeAfter|: a command |\NbLines| which gives the number of lines (=rows) of
+% Special commands are available in |CodeAfter|: 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}.
@@ -1237,7 +1237,9 @@
 % \pkg{nccmath} if this package is loaded).
 %
 % If the option |leqno| is used as a class option, the labels will be composed on the left also for the
-% environments |{DispWithArrows}| et |{DispWithArrows*}|.
+% environments |{DispWithArrows}| and |{DispWithArrows*}|.\footnote{The package \pkg{amsmath} has an option |leqno|
+% but \pkg{witharrows}, of course, is not aware of that option: \pkg{witharrows} only checks the option |leqno| of
+% the document class.}
 %
 % \bigskip 
 % The environment |{DispWithArrows}| is similar to the environment |{align}| of \pkg{amsmath}. However,
@@ -1294,6 +1296,8 @@
 % |{DispWithArrows}| or |{DispWithArrows*}|. However, it applies to the instructions |\Arrow| and |\MultiArrow| of
 % the |CodeAfter| of the environments |{DispWithArrows}| or |{DispWithArrows*}|.
 % 
+%
+%
 % \section{Advanced features}
 %
 %
@@ -1322,13 +1326,13 @@
 % \begin{Verbatim}
 % \begin{WithArrows}[ygap=5pt,interline=4mm,
 %       ~emphase#TikzCode = {\draw[rounded corners]@
-%       ~emphase#                  (~#1) -- ($(~#1) + (5mm,0)$)@
+%       ~emphase#                  (~#1) -- ([xshift=5mm]~#1)@
 %       ~emphase#                  -- node[circle,@
 %       ~emphase#                          draw,@
 %       ~emphase#                          auto = false,@
 %       ~emphase#                          fill = gray!50,@
 %       ~emphase#                          inner sep = 1pt] {\tiny ~#3}@ 
-%       ~emphase#                  ($(~#2) + (5mm,0)$)@
+%       ~emphase#                  ([xshift=5mm]~#2)@
 %       ~emphase#                  -- (~#2) ; }@]
 % E & \Longleftrightarrow 3 (2x+4) = 6   \Arrow{$\div 3$} \\
 %   & \Longleftrightarrow 2x+4 = 2       \Arrow{$-4$}     \\
@@ -1343,13 +1347,13 @@
 %       TikzCode = {\draw[rounded corners]
 %                         (#1) 
 %                         --
-%                         ($(#1) + (5mm,0)$)
+%                         ([xshift=5mm]#1)
 %                         -- node[circle,
 %                                 draw,
 %                                 auto=false,
 %                                 fill=gray!50,
 %                                 inner sep = 1pt] {\tiny #3} 
-%                         ($(#2) + (5mm,0)$)
+%                         ([xshift=5mm]#2)
 %                         --
 %                         (#2) ; }]
 % E & \Longleftrightarrow 3 (2x+4) = 6 
@@ -1361,7 +1365,29 @@
 %   & \Longleftrightarrow 2x = -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 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}
+%
+% The extension \pkg{witharrows} provides a command |\WithArrowsNewStyle| to define styles in a way similar to the
+% ``styles'' of Tikz.
+%
+% The command |\WithArrowsNewStyle| takes two mandatory arguments. The first is the name of the style and the
+% second is a list of key-value pairs. The scope of the definition done by |\WithArrowsNewStyle| is the current TeX
+% scope. 
+%
+% The style can be used as a key at the document level (with |\WithArrowsOptions|) or at the environment level (in
+% the optional arguments of |{WithArrows}| and |{DispWithArrows}|).
+%
+% For an example of use, see p.~\pageref{example-WithArrowsRightX}.
+% 
+% \bigskip
 % \subsection{Footnotes in the environments of witharrows}
 % 
 % If you want to put footnotes in an environment |{WithArrows}| or |{DispWithArrows}|, you can use a pair
@@ -1509,7 +1535,7 @@
 % draws the arrow itself and the second puts the label in a Tikz node in the rectangle delimited by the arrow.
 %
 % \begin{Verbatim}
-% $\begin{WithArrows}[
+% \begin{DispWithArrows*}[
 %        displaystyle,
 %        ygap = 2mm,
 %        ystart = 0mm,
@@ -1523,7 +1549,7 @@
 %
 %
 % \bigskip
-% $\begin{WithArrows}[
+% \begin{DispWithArrows*}[
 %        displaystyle,
 %        ygap = 2mm,
 %        ystart = 0mm,
@@ -1541,11 +1567,74 @@
 % \Arrow{sum of terms of a geometric progression of ratio $e^{i\frac{2\pi}n}$}\\
 % & = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}}\right)\\
 % & = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right) 
-% \end{WithArrows}$
+% \end{DispWithArrows*}
 %
 % \bigskip
 % \subsubsection{Example 2}
+%
+% \label{example-WithArrowsRightX}
+% 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 |\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 lisibilit, we use a style. This example requires the Tikz library \pkg{calc}.
+%
+% \begin{Verbatim}
+% \WithArrowsNewStyle{MyStyle}%       
+%   {displaystyle,
+%    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) ; }}
+% \end{Verbatim}
+%
+% \begin{Verbatim}
+%\begin{DispWithArrows}[MyStyle]
+%   S_n
+%   & = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
+%   \Arrow{$\cos x = \Re(e^{ix})$}\\
+% ...........
+% \end{Verbatim}
 % 
+% \WithArrowsNewStyle{MyStyle}%       
+% {displaystyle,
+%  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) ; }}
+%
+%\begin{DispWithArrows}[MyStyle]
+% S_n
+% & = \frac1n \sum_{k=0}^{n-1}\cos\bigl(\tfrac{\pi}2\cdot\tfrac kn\bigr)
+% \Arrow{$\cos x = \Re(e^{ix})$}\\
+% & = \frac1n\sum_{k=0}^{n-1} \Re\left(e^{i\frac{k\pi}{2n}}\right)
+% \Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
+% & = \frac1n \Re\left(\sum_{k=0}^{n-1} e^{i\frac{k\pi}{2n}}\right)
+% \Arrow{$\exp$ is a morphism for $\times$ et $+$} \\
+% & = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
+% \Arrow{sum of terms of a geometric progression of ratio $e^{i\frac{2\pi}n}$}\\
+% & = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}}\right)\\
+% & = \frac1n \Re \left(\frac{1-i}{1-e^{i\frac{\pi}{2n}}}\right) 
+% \end{DispWithArrows}
+% 
+%
+% 
+% \bigskip
+% \subsubsection{Example 3}
+% 
 % In the following example, we change the shape of the arrow depending on wether the start row is longer than the
 % end row or not. This example requires the Tikz library \pkg{calc}.
 % 
@@ -1615,13 +1704,13 @@
 %
 % \begin{Verbatim}
 % \NewDocumentCommand \NumberedLoop {}
-%         {\foreach \j in {2,...,\NbLines} 
+%         {\foreach \j in {2,...,\WithArrowsNbLines} 
 %               { \pgfmathtruncatemacro{\i}{\j-1}
 %                 \Arrow[rr]{\i}{\j}{\i} }
-%          \Arrow[rr,xoffset=1cm,tikz=<-]{1}{\NbLines}{\NbLines}}
+%          \Arrow[rr,xoffset=1cm,tikz=<-]{1}{\WithArrowsNbLines}{\WithArrowsNbLines}}
 % \end{Verbatim}
 % 
-% The command |\NbLines| is a command available in |CodeAfter| which gives the total number of lines (=rows) of the
+% The command |\WithArrowsNbLines| is a command available in |CodeAfter| which gives the total number of lines (=rows) of the
 % current environment (it's a command and not a counter).
 %
 %
@@ -1639,10 +1728,10 @@
 % \bigskip
 % \begin{scope}
 % \NewDocumentCommand \NumberedLoop {}
-%         {\foreach \j in {2,...,\NbLines} 
+%         {\foreach \j in {2,...,\WithArrowsNbLines} 
 %               { \pgfmathtruncatemacro{\i}{\j-1}
 %                 \Arrow[rr]{\i}{\j}{\i} }
-%          \Arrow[rr,xoffset=1cm,tikz=<-]{1}{\NbLines}{\NbLines}}
+%          \Arrow[rr,xoffset=1cm,tikz=<-]{1}{\WithArrowsNbLines}{\WithArrowsNbLines}}
 %
 %
 % $\begin{WithArrows}[CodeAfter = \NumberedLoop]
@@ -1842,8 +1931,10 @@
 % \subsection{Some technical definitions}
 %
 %    \begin{macrocode}
-\cs_new_protected:Nn \@@_msg_error:n 
+\cs_new_protected:Nn \@@_error:n 
         {\msg_error:nn {witharrows} {#1}}
+\cs_new_protected:Nn \@@_error:nn
+        {\msg_error:nnn {witharrows} {#1} {#2}}
 %    \end{macrocode}
 % 
 % \medskip
@@ -1930,10 +2021,11 @@
 % \subsection{Variables}
 %
 %
-% The boolean |\l_@@_in_witharrows_bool| will be raised if (and only if) we are in an environment |{WithArrows}|
-% (and not in an environment |{DispWithArrows}| or |{DispWithArrows*}|).
+% The boolean |\l_@@_in_WithArrows_bool| will be raised in an environment |{WithArrows}| and the
+% boolean |\l_@@_in_dispwitharrows_bool| in a an environment |{DispWithArrows}| or |{DispWithArrows*}|.
 %    \begin{macrocode}
-\bool_new:N \l_@@_in_witharrows_bool
+\bool_new:N \l_@@_in_WithArrows_bool
+\bool_new:N \l_@@_in_DispWithArrows_bool
 %    \end{macrocode}
 %
 % The following sequence is the position of the last environment |{WithArrows}| in the tree of the nested
@@ -2066,7 +2158,7 @@
 %    \begin{macrocode}
 \seq_new:N \l_@@_labels_seq
 \cs_set:Nn \@@_label:n {\seq_if_empty:NF \l_@@_labels_seq 
-                           {\@@_msg_error:n {Multiple~labels}}
+                           {\@@_error:n {Multiple~labels}}
                         \seq_put_right:Nn \l_@@_labels_seq {#1}
 %    \end{macrocode}
 %
@@ -2133,17 +2225,17 @@
 % |{DispWithArrows}| or |{DispWithArrows*}|
 %    \begin{macrocode}
 \keys_define:nn {WithArrows/GlobalOrEnv}
-   {  t   .code:n            = {\bool_if:NTF \l_@@_in_witharrows_bool
-                                 {\int_set:Nn \l_@@_pos_env_int 0}
-                                 {\@@_msg_error:n {Option~will~be~ignored}}},
+   {  t   .code:n            = {\bool_if:NTF \l_@@_in_DispWithArrows_bool
+                                 {\@@_error:n {Option~will~be~ignored}
+                                 {\int_set:Nn \l_@@_pos_env_int 0}}},
       t   .value_forbidden:n = true,
-      c   .code:n            = {\bool_if:NTF \l_@@_in_witharrows_bool
-                                 {\int_set:Nn \l_@@_pos_env_int 1}
-                                 {\@@_msg_error:n {Option~will~be~ignored}}},
+      c   .code:n            = {\bool_if:NTF \l_@@_in_DispWithArrows_bool
+                                 {\@@_error:n {Option~will~be~ignored}}
+                                 {\int_set:Nn \l_@@_pos_env_int 1}},
       c   .value_forbidden:n = true,
-      b   .code:n            = {\bool_if:NTF \l_@@_in_witharrows_bool
-                                 {\int_set:Nn \l_@@_pos_env_int 2}
-                                 {\@@_msg_error:n {Option~will~be~ignored}}},
+      b   .code:n            = {\bool_if:NTF \l_@@_in_DispWithArrows_bool
+                                 {\@@_error:n {Option~will~be~ignored}}
+                                 {\int_set:Nn \l_@@_pos_env_int 2}},
       b   .value_forbidden:n = true,
 %    \end{macrocode}
 %
@@ -2228,7 +2320,7 @@
 % leftmost position.
 %    \begin{macrocode}
       group    .code:n    = {\int_compare:nNnT \l_@@_previous_pos_arrows_int > {-1}
-                                    {\@@_msg_error:n {Two~options~are~incompatible}}
+                                    {\@@_error:n {Two~options~are~incompatible}}
                              \int_set:Nn \l_@@_previous_pos_arrows_int 6
                              \int_set:Nn \l_@@_pos_arrows_int 6} ,
       group    .value_forbidden:n = true,
@@ -2241,7 +2333,7 @@
 % for a individual key.
 %    \begin{macrocode}
       groups   .code:n   = {\int_compare:nNnT \l_@@_previous_pos_arrows_int > {-1}
-                                   {\@@_msg_error:n {Two~options~are~incompatible}}
+                                   {\@@_error:n {Two~options~are~incompatible}}
                             \int_set:Nn \l_@@_previous_pos_arrows_int 7
                             \int_set:Nn \l_@@_pos_arrows_int 7} ,
       groups   .value_forbidden:n = true,
@@ -2252,7 +2344,7 @@
 % the eventual |\begin{savenotes}|).
 %    \begin{macrocode}
       CodeBefore  .code:n = {\int_compare:nNnTF \l_@@_level_int = 1
-                              {\@@_msg_error:n {Option~will~be~ignored}}
+                              {\@@_error:n {Option~will~be~ignored}}
                               {\tl_put_right:Nn \l_@@_code_before_tl {#1}}} ,
       CodeBefore  .value_required:n = true,
 %    \end{macrocode}
@@ -2262,7 +2354,7 @@
 % eventual |\end{savenotes}|).
 %    \begin{macrocode}
       CodeAfter .code:n = {\int_compare:nNnTF \l_@@_level_int = 1
-                              {\@@_msg_error:n {Option~will~be~ignored}}
+                              {\@@_error:n {Option~will~be~ignored}}
                               {\tl_put_right:Nn \l_@@_code_after_tl {#1}}} ,
       CodeAfter .value_required:n = true,
 %    \end{macrocode}
@@ -2273,7 +2365,7 @@
 % the environment).
 %    \begin{macrocode}
       name .code:n = {\int_compare:nNnTF \l_@@_level_int = 1
-                              {\@@_msg_error:n {Option~will~be~ignored}}
+                              {\@@_error:n {Option~will~be~ignored}}
                               {\tl_set:Nn \l_@@_name_tl {#1}}} ,
       name .value_required:n = true,
 %    \end{macrocode}
@@ -2281,8 +2373,8 @@
 % \bigskip
 % The option |fleqn| indicates wether the environments |{DispWithArrows}| are composed centered or flush left.
 %    \begin{macrocode}
-      fleqn   .code:n = {\bool_if:NTF \l_@@_in_witharrows_bool
-                             {\@@_msg_error:n {Option~will~be~ignored}}
+      fleqn   .code:n = {\bool_if:NTF \l_@@_in_WithArrows_bool
+                             {\@@_error:n {Option~will~be~ignored}}
                              {\tl_if_eq:nnTF {#1} {true}
                                  {\bool_set_true:N \l_@@_fleqn_bool}
                                  {\bool_set_false:N \l_@@_fleqn_bool}}},
@@ -2292,8 +2384,8 @@
 % \bigskip
 % The option |mathindent| is the left margin of the environments |{DispWithArrows}| when the option |fleqn| is used.
 %    \begin{macrocode}
-      mathindent   .code:n = {\bool_if:NTF \l_@@_in_witharrows_bool
-                               {\@@_msg_error:n {Option~will~be~ignored}}
+      mathindent   .code:n = {\bool_if:NTF \l_@@_in_WithArrows_bool
+                               {\@@_error:n {Option~will~be~ignored}}
                                {\dim_set:Nn \l_@@_mathindent_dim {#1}}},
       mathindent   .value_required:n = true,
 %    \end{macrocode}
@@ -2301,8 +2393,8 @@
 % \bigskip
 % The option |notag| indicates wether the environments |{DispWithArrows}| will be without tags (like |{DispWithArrows*}|).
 %    \begin{macrocode}
-      notag   .code:n = {\bool_if:NTF \l_@@_in_witharrows_bool
-                             {\@@_msg_error:n {Option~will~be~ignored}}
+      notag   .code:n = {\bool_if:NTF \l_@@_in_WithArrows_bool
+                             {\@@_error:n {Option~will~be~ignored}}
                              {\tl_if_eq:nnTF {#1} {true}
                                  {\bool_set_true:N \l_@@_notag_bool}
                                  {\bool_set_false:N \l_@@_notag_bool}}},
@@ -2314,8 +2406,8 @@
 % The option |AllowMultipleLabels| indicates wether multiple labels are allowed for the same line of an environment
 % |{DispWithArrows}| or |{DispWithArrows*}|.
 %    \begin{macrocode}
-      AllowMultipleLabels .code:n = {\bool_if:NTF \l_@@_in_witharrows_bool
-                                         {\@@_msg_error:n {Option~will~be~ignored}}
+      AllowMultipleLabels .code:n = {\bool_if:NTF \l_@@_in_WithArrows_bool
+                                         {\@@_error:n {Option~will~be~ignored}}
                                          {\msg_redirect_name:nnn {witharrows} 
                                                            {Multiple~labels}
                                                            {none}}},
@@ -2326,8 +2418,8 @@
 % With the option |wrap-lines|, a special |TikzCode| is used in the environments |{DispWithArrows}| and
 % |{DispWithArrows*}| and, with this |TikzCode|, the lines of the labels are automatically wrapped on the right.
 %    \begin{macrocode}
-      wrap-lines   .code:n = {\bool_if:NTF \l_@@_in_witharrows_bool
-                             {\@@_msg_error:n {Option~will~be~ignored}}
+      wrap-lines   .code:n = {\bool_if:NTF \l_@@_in_WithArrows_bool
+                             {\@@_error:n {Option~will~be~ignored}}
                              {\tl_if_eq:nnTF {#1} {true}
                                  {\bool_set_true:N \l_@@_wrap_lines_bool}
                                  {\bool_set_false:N \l_@@_wrap_lines_bool}}},
@@ -2334,7 +2426,7 @@
       wrap-lines   .default:n = true,
 %    \end{macrocode}
 %    \begin{macrocode}
-      unknown .code:n  = \@@_msg_error:n {Option~unknown}
+      unknown .code:n  = \@@_error:n {Option~unknown}
      }
 %    \end{macrocode}
 %
@@ -2378,7 +2470,7 @@
 %    \begin{macrocode}
       xoffset  .code:n  = {\bool_if:nTF {\int_compare_p:nNn \l_@@_level_int = 3 &&
                                         \int_compare_p:nNn \l_@@_pos_arrows_int > 5}
-                               {\@@_msg_error:n {Option~incompatible~with~"group(s)"}}
+                               {\@@_error:n {Option~incompatible~with~"group(s)"}}
                                {\dim_set:Nn \l_@@_xoffset_dim {#1}}} ,
       xoffset  .value_required:n  = true,
 %    \end{macrocode}
@@ -2390,7 +2482,7 @@
 %    \begin{macrocode}
       jot       .code:n     = {\int_compare:nNnTF \l_@@_level_int = 2
                                   {\dim_set:Nn \jot {#1}}
-                                  {\@@_msg_error:n {Option~will~be~ignored}}} , 
+                                  {\@@_error:n {Option~will~be~ignored}}} , 
       jot       .value_required:n  = true,
 %    \end{macrocode}
 %
@@ -2401,7 +2493,7 @@
 %    \begin{macrocode}
       interline   .code:n       = {\int_compare:nNnTF \l_@@_level_int = 2
                                       {\skip_set:Nn \l_@@_interline_skip {#1}}
-                                      {\@@_msg_error:n {Option~will~be~ignored}}} ,
+                                      {\@@_error:n {Option~will~be~ignored}}} ,
       interline   .value_required:n = true,
 %    \end{macrocode}
 %
@@ -2408,8 +2500,8 @@
 % \bigskip
 % Eventually, a key |jump| (see below) and a key for unknown keys.
 %    \begin{macrocode}
-      jump    .code:n  = \@@_msg_error:n {Option~will~be~ignored} ,
-      unknown .code:n  = \@@_msg_error:n {Option~unknown}
+      jump    .code:n  = \@@_error:n {Option~will~be~ignored} ,
+      unknown .code:n  = \@@_error:n {Option~unknown}
 }
 %    \end{macrocode}
 %
@@ -2422,7 +2514,7 @@
 \keys_define:nn {WithArrows/jump}
      {jump  .code:n = {\int_set:Nn \l_@@_jump_int {#1}
                        \int_compare:nNnF \l_@@_jump_int > 0
-                           {\@@_msg_error:n {The~option~"jump"~must~be~non~negative}}} ,
+                           {\@@_error:n {The~option~"jump"~must~be~non~negative}}} ,
       jump  .value_required:n  = true}
 %    \end{macrocode}
 %
@@ -2432,7 +2524,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Nn \@@_analyze_option_position:n
      {\int_compare:nNnT \l_@@_previous_pos_arrows_int > {-1}
-        {\@@_msg_error:n {Two~options~are~incompatible}}
+        {\@@_error:n {Two~options~are~incompatible}}
       \int_set:Nn \l_@@_previous_pos_arrows_int {#1}
 %    \end{macrocode}
 %
@@ -2443,7 +2535,7 @@
 %    \begin{macrocode}
       \bool_if:nTF { \int_compare_p:nNn \l_@@_level_int = 3 &&
                      \int_compare_p:nNn \l_@@_pos_arrows_int > 5}
-         {\@@_msg_error:n {Option~incompatible~with~"group(s)"}}
+         {\@@_error:n {Option~incompatible~with~"group(s)"}}
          {\int_set:Nn \l_@@_pos_arrows_int {#1}}}
 %    \end{macrocode}
 %
@@ -2533,10 +2625,10 @@
 \cs_new_protected:Nn \@@_Arrow_first_column: 
 %    \end{macrocode}
 % All messages of LaTeX3 must be \emph{fully expandable} and that's why we do the affectation (necessary for a
-% comparison) before the |\msg_error:nn|.
+% comparison) before the |\@@_error:n|.
 %    \begin{macrocode}
                {\tl_set:Nn \l_tmpa_tl {Arrow}
-                \@@_msg_error:n {Arrow~in~first~column}
+                \@@_error:n {Arrow~in~first~column}
                 \@@_Arrow}
 %    \end{macrocode}
 %                                
@@ -2650,9 +2742,9 @@
 % Now, we begin the environment |{WithArrows}|.
 %    \begin{macrocode}
 \NewDocumentEnvironment {WithArrows} {O{}}
-         { \bool_set_true:N \l_@@_in_witharrows_bool
+         { \bool_set_true:N \l_@@_in_WithArrows_bool
            \reverse_if:N \if_mode_math:
-                             \@@_msg_error:n {{WithArrows}~used~outside~math~mode}
+                             \@@_error:n {{WithArrows}~used~outside~math~mode}
                          \fi:
            \cs_set:Npn \notag {\msg_error:nnn {witharrows} 
                                               {Command~not~allowed~in~{WithArrows}} 
@@ -2746,7 +2838,7 @@
 % Usually, the |\halign| of an environment |{WithArrows}| will have exactly two columns. Nevertheless, if the user
 % wants to use more columns (without arrows) it's possible with the option |MoreColumns|.
 %    \begin{macrocode}
-           && \@@_msg_error:n {Third~column~in~an~environment~{WithArrows}}
+           && \@@_error:n {Third~column~in~an~environment~{WithArrows}}
            $\bool_if:NT \l_@@_displaystyle_bool \displaystyle {##}$
            \cr
           }
@@ -2782,9 +2874,15 @@
 % an \textsc{pgf} error for an unknown node since the nodes are created in the second column).
 %    \begin{macrocode}
           {\int_compare:nNnT \g_@@_line_bis_int < \g_@@_line_int
-                  {\@@_msg_error:n {All~lines~must~have~an~ampersand}}
+                  {\@@_error:n {All~lines~must~have~an~ampersand}}
 %    \end{macrocode}
 %
+% \bigskip
+% The command |\WithArrowsRightX| is not used by \pkg{witharrows}. It's only a convenience given to the user. 
+%    \begin{macrocode}
+           \cs_set:Npn \WithArrowsRightX {\g_@@_right_x_dim} 
+%    \end{macrocode}
+%
 % \bigskip 
 % It there is really arrows in the environment, we draw the arrows:
 % \begin{itemize}
@@ -2806,9 +2904,9 @@
            \group_begin:
            \tikzset{every~picture/.style = @@_standard}
 %    \end{macrocode}
-% The command |\NbLines| is not used by \pkg{witharrows}. It's only a convenience given to the user.
+% The command |\WithArrowsNbLines| is not used by \pkg{witharrows}. It's only a convenience given to the user. 
 %    \begin{macrocode}
-           \cs_set:Npn \NbLines {\int_use:N \g_@@_line_int}
+           \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 documentation.\footnote{As for now, |\MultiArrow| has no option, and that's
@@ -2878,7 +2976,7 @@
 % For the environment |{DispWithArrows}|, the behaviour of |\\| is different because we add the third column which
 % is the column for the tag (number of the equation). 
 %    \begin{macrocode}
-       \bool_if:NF \l_@@_in_witharrows_bool
+       \bool_if:NT \l_@@_in_DispWithArrows_bool
            {\bool_if:NTF \l_@@_notag_bool 
 %    \end{macrocode}
 % If there is no tag to put, we use as well the third column because you want to raise an error if the user uses
@@ -3007,9 +3105,9 @@
 %    \begin{macrocode}
            \bool_if:NT \c_@@_amsmath_loaded_bool \intertext@
            \if_mode_math:
-               \@@_msg_error:n {{DispWithArrows}~used~in~math~mode}
+               \@@_error:n {{DispWithArrows}~used~in~math~mode}
            \fi:
-           \bool_set_false:N \l_@@_in_witharrows_bool
+           \bool_set_true:N \l_@@_in_DispWithArrows_bool
            \@@_pre_environment:n {#1}
 %    \end{macrocode}
 % We don't use |\[| of LaTeX because some extensions, like \pkg{autonum}, do a redefinition of |\[|. However, we
@@ -3080,7 +3178,7 @@
                                                    -\int_use:N\g_@@_line_int}}
             & ##
              \tabskip = \c_zero_skip
-            && \@@_msg_error:n {Third~column~in~an~environment~{DispWithArrows}} 
+            && \@@_error:n {Third~column~in~an~environment~{DispWithArrows}} 
                \iffalse ## \fi
              \cr}
           {\\
@@ -3094,21 +3192,21 @@
            \egroup 
 %    \end{macrocode}
 %
-% If the option |wrap-lines| is used (only in |{DispWithArrows}| and |{DispWithArrows*}|), we compute
-% |\g_@@_x_right_dim|. As a first approximation, |\g_@@_x_right_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_@@_x_right_dim| with the |v|-nodes of each row specifically built in this goal. |\g_@@_x_right_dim|
-% is the minimal value of the $x$-value of these nodes.
+% If we are in an environment |{DispWithArrows}| or |{DispWithArrows*}|, 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 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_@@_wrap_lines_bool
-             {\dim_gzero_new:N \g_@@_x_right_dim 
-              \dim_gset:Nn \g_@@_x_right_dim \c_max_dim
+           \bool_if:NT \l_@@_in_DispWithArrows_bool
+             {\dim_gzero_new:N \g_@@_right_x_dim 
+              \dim_gset:Nn \g_@@_right_x_dim \c_max_dim
               \begin{tikzpicture} [@@_standard]
               \int_step_variable:nnnNn 1 1 \g_@@_line_int \l_tmpa_int
                     {\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_@@_x_right_dim
-                            {\dim_gset:Nn \g_@@_x_right_dim \l_tmpa_dim} }
+                     \dim_compare:nNnT \l_tmpa_dim < \g_@@_right_x_dim
+                            {\dim_gset:Nn \g_@@_right_x_dim \l_tmpa_dim} }
               \end{tikzpicture}}
 %    \end{macrocode}
 % 
@@ -3150,12 +3248,12 @@
      \tl_set:Nn \l_@@_tag_tl {#2}
      \bool_set:Nn \l_@@_tag_star_bool {#1}
 %    \end{macrocode}
-% The starred version |\tag*| can't be use if \pkg{amsmath} has not been loaded because this version does the job
+% The starred version |\tag*| can't be used if \pkg{amsmath} has not been loaded because this version does the job
 % by desactivating 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}
-          { \@@_msg_error:n {tag*~without~amsmath} }
+          { \@@_error:n {tag*~without~amsmath} }
     }
 %    \end{macrocode}
 % 
@@ -3334,11 +3432,11 @@
 % the case where the user goes on and we try to avoid other errors.}
 %    \begin{macrocode}
       \int_compare:nNnTF \l_@@_final_int > \g_@@_line_int
-         {\@@_msg_error:n {Too~few~lines~for~an~arrow}}
+         {\@@_error:n {Too~few~lines~for~an~arrow}}
          {\cs_if_free:cTF{pgf at sh@ns at wa-\l_@@_prefix_str-\int_use:N\l_@@_initial_int-l}
-             { \@@_msg_error:n {A~PGF~node~doesn't~exist} }
+             { \@@_error:n {A~PGF~node~doesn't~exist} }
              {\cs_if_free:cTF{pgf at sh@ns at wa-\l_@@_prefix_str-\int_use:N\l_@@_final_int-l}
-                 { \@@_msg_error:n {A~PGF~node~doesn't~exist} }
+                 { \@@_error:n {A~PGF~node~doesn't~exist} }
                  {\@@_draw_arrows_i:}}}
       \int_incr:N \l_@@_arrow_int
      } 
@@ -3515,7 +3613,7 @@
 % 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|). 
 %    \begin{macrocode}
-            \bool_if:nT {\l_@@_wrap_lines_bool && ! \l_@@_in_witharrows_bool}
+            \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 }
 %    \end{macrocode}
 % 
@@ -3544,9 +3642,9 @@
 %    \end{macrocode}
 % We compute in |\l_tmpa_dim| the maximal width possible for the label. |0.3333 em| is the default value of 
 % |inner sep| in the nodes of Tikz. Maybe we should put the exact Tikz parameter. Here is the use of
-% |\g_@@_x_right_dim| which has been computed previously with the |v|-nodes.
+% |\g_@@_right_x_dim| which has been computed previously with the |v|-nodes.
 %    \begin{macrocode}
-                   \dim_set:Nn \l_tmpa_dim {\g_@@_x_right_dim - \pgf at x - 0.3333 em} 
+                   \dim_set:Nn \l_tmpa_dim {\g_@@_right_x_dim - \pgf at x - 0.3333 em} 
 %    \end{macrocode}
 % We retrieve in |\g_tmpa_tl| the current value of the Tikz parameter ``|text width|''.\footnote{In fact, it's not
 % the current value of ``|text width|'': it's the value of ``|text width|'' set in the option |tikz| provided by
@@ -3562,7 +3660,7 @@
                        \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim
                            {\dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim}}
 %    \end{macrocode}
-% Now, we can put the label with the right value for |``text width''|.
+% Now, we can put the label with the right value for ``|text width|''.
 %    \begin{macrocode}
                    \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim
                       {\path (@@_label.west) 
@@ -3700,7 +3798,7 @@
 % We sort the list |\g_tmpa_clist| because we want to extract the minimum and the maximum.
 %    \begin{macrocode}
      \int_compare:nNnTF {\clist_count:N \g_tmpa_clist} < 2 
-       {\@@_msg_error:n {Too~small~specification~for~MultiArrow}}
+       {\@@_error:n {Too~small~specification~for~MultiArrow}}
        {\clist_sort:Nn \g_tmpa_clist 
                        {\int_compare:nNnTF {##1} > {##2}
                              {\sort_return_swapped:}
@@ -3738,8 +3836,8 @@
           \dim_set:Nn \l_tmpa_dim {20 cm}
           \path \pgfextra {\tl_gset:Nx \g_tmpa_tl \tikz at text@width} ;
           \tl_if_empty:NF \g_tmpa_tl {\dim_set:Nn \l_tmpa_dim \g_tmpa_tl}
-          \bool_if:nT {\l_@@_wrap_lines_bool && ! \l_@@_in_witharrows_bool}
-                  {\dim_set:Nn \l_tmpb_dim {\g_@@_x_right_dim - \pgf at x - 0.3333 em}
+          \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}
                    \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim
                            {\dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim}}
           \path (@@_label.west) 
@@ -3980,9 +4078,9 @@
                       \bool_set_true:N \l_@@_notag_bool}}
            \bool_if:NT \c_@@_amsmath_loaded_bool \intertext@
            \if_mode_math:
-               \@@_msg_error:n {{DispWithArrows}~used~in~math~mode}
+               \@@_error:n {{DispWithArrows}~used~in~math~mode}
            \fi:
-           \bool_set_false:N \l_@@_in_witharrows_bool
+           \bool_set_true:N \l_@@_in_DispWithArrows_bool
            %
            \_@@_pre_environment:n {#2}
            \nointerlineskip
@@ -4042,7 +4140,7 @@
                                                       -\int_use:N\g_@@_line_int}}
                & ##
                 \tabskip = \c_zero_skip
-               && \@@_msg_error:n {Third~column~in~an~environment~{DispWithArrows}}
+               && \@@_error:n {Third~column~in~an~environment~{DispWithArrows}}
                   \if_false: ## \fi:
                 \cr}
           {   \\
@@ -4080,6 +4178,35 @@
            }
 %    \end{macrocode}
 %
+% \subsection{The command WithArrowsNewStyle}
+%
+% A new key defined with |\WithArrowsNewStyle| will not be available at the local level (|\l_@@_level_int| = 3).
+%    \begin{macrocode}
+\NewDocumentCommand \WithArrowsNewStyle {mm}
+   { \keys_if_exist:nnTF {WithArrows/General} {#1}
+       {\@@_error:nn {Key~already~defined} {#1}}
+       {\keys_define:nn {WithArrows/General}
+            {#1 .code:n = {\int_compare:nNnTF \l_@@_level_int < 3
+                              {\keys_set:nn {WithArrows/General} {#2}}
+                              {\@@_error:n {Option~unknown}}}}
+%    \end{macrocode}
+% We set the options in a TeX group in order to detect if some keys in |#2| are unknown. If a key is unknown, an
+% error will be raised. However, the key will, even so, be stored in the definition of key |#1|. When the key |#1|
+% will be used, the error will be raised again.
+%    \begin{macrocode}
+        \group_begin:
+           \WithArrowsOptions{#2}
+        \group_end:} }
+%    \end{macrocode}
+% 
+%    \begin{macrocode}
+\msg_new:nnn {witharrows}
+             {Key~already~defined}
+             {The~key~'#1'~is~already~defined.~If~you~go~on,~
+              your~instruction~\token_to_str:N\WithArrowsNewStyle\ will~be~ignored.}
+%    \end{macrocode}
+%
+%
 % \section{History}
 %
 % \subsection{Changes between versions 1.0 and 1.1}
@@ -4159,10 +4286,9 @@
 % Correction of a bug: |\nointerlineskip| and |\makebox[.6\linewidth]{}| should be inserted in |{DispWithArrows}|.
 % only in vertical mode.
 %
-% \subsection{Changes between 1.10 and 1.10.1}
+% \subsection{Changes between 1.10 and 1.11}
 %
-% The test of collision in the environments |{DispWithArrows}| is deleted (because the programmation was
-% incorrect).
+% Commands |\WithArrowsNewStyle| and |\WithArrowsRightX|.
 %
 % \endinput
 %

Modified: trunk/Master/texmf-dist/tex/latex/witharrows/witharrows.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/witharrows/witharrows.sty	2018-11-02 20:53:02 UTC (rev 49053)
+++ trunk/Master/texmf-dist/tex/latex/witharrows/witharrows.sty	2018-11-02 20:53:13 UTC (rev 49054)
@@ -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.10.1}
-\def\myfiledate{2018/09/24}
+\def\myfileversion{1.11}
+\def\myfiledate{2018/11/02}
 \RequirePackage{tikz}
 \usetikzlibrary{arrows.meta,bending}
 \RequirePackage{l3keys2e}
@@ -85,8 +85,10 @@
 \DeclareOption {leqno} {\bool_set_true:N \c__ww_leqno_bool}
 \DeclareOption* {}
 \ProcessOptions \relax
-\cs_new_protected:Nn \__ww_msg_error:n
+\cs_new_protected:Nn \__ww_error:n
         {\msg_error:nn {witharrows} {#1}}
+\cs_new_protected:Nn \__ww_error:nn
+        {\msg_error:nnn {witharrows} {#1} {#2}}
 \AtBeginDocument{\clist_map_inline:nn
                     {amsmath,mathtools,autonum,cleveref,hyperref,typedref}
                     {\bool_new:c {c__ww_#1_loaded_bool}
@@ -115,7 +117,8 @@
        {\cs_set_protected:Npn \spread at equation
            {\openup\jot
             \cs_set_protected:Npn \spread at equation {}}}}
-\bool_new:N \l__ww_in_witharrows_bool
+\bool_new:N \l__ww_in_WithArrows_bool
+\bool_new:N \l__ww_in_DispWithArrows_bool
 \seq_new:N \g__ww_position_in_the_tree_seq
 \seq_gput_right:Nn \g__ww_position_in_the_tree_seq 1
 \int_new:N \g__ww_last_env_int
@@ -138,7 +141,7 @@
 \bool_new:N \l__ww_tag_star_bool
 \seq_new:N \l__ww_labels_seq
 \cs_set:Nn \__ww_label:n {\seq_if_empty:NF \l__ww_labels_seq
-                           {\__ww_msg_error:n {Multiple~labels}}
+                           {\__ww_error:n {Multiple~labels}}
                         \seq_put_right:Nn \l__ww_labels_seq {#1}
                         \bool_if:nT \c__ww_mathtools_loaded_bool
                            {\MH_if_boolean:nT {show_only_refs}
@@ -155,17 +158,17 @@
 \bool_new:N \l__ww_wrap_lines_bool
 \int_set:Nn \l__ww_level_int 1
 \keys_define:nn {WithArrows/GlobalOrEnv}
-   {  t   .code:n            = {\bool_if:NTF \l__ww_in_witharrows_bool
-                                 {\int_set:Nn \l__ww_pos_env_int 0}
-                                 {\__ww_msg_error:n {Option~will~be~ignored}}},
+   {  t   .code:n            = {\bool_if:NTF \l__ww_in_DispWithArrows_bool
+                                 {\__ww_error:n {Option~will~be~ignored}
+                                 {\int_set:Nn \l__ww_pos_env_int 0}}},
       t   .value_forbidden:n = true,
-      c   .code:n            = {\bool_if:NTF \l__ww_in_witharrows_bool
-                                 {\int_set:Nn \l__ww_pos_env_int 1}
-                                 {\__ww_msg_error:n {Option~will~be~ignored}}},
+      c   .code:n            = {\bool_if:NTF \l__ww_in_DispWithArrows_bool
+                                 {\__ww_error:n {Option~will~be~ignored}}
+                                 {\int_set:Nn \l__ww_pos_env_int 1}},
       c   .value_forbidden:n = true,
-      b   .code:n            = {\bool_if:NTF \l__ww_in_witharrows_bool
-                                 {\int_set:Nn \l__ww_pos_env_int 2}
-                                 {\__ww_msg_error:n {Option~will~be~ignored}}},
+      b   .code:n            = {\bool_if:NTF \l__ww_in_DispWithArrows_bool
+                                 {\__ww_error:n {Option~will~be~ignored}}
+                                 {\int_set:Nn \l__ww_pos_env_int 2}},
       b   .value_forbidden:n = true,
       ygap .dim_set:N        = \l__ww_ygap_dim,
       ygap .value_required:n = true,
@@ -196,57 +199,57 @@
       shownodenames .bool_set:N    = \l__ww_shownodenames_bool,
       shownodenames .initial:n     = false,
       group    .code:n    = {\int_compare:nNnT \l__ww_previous_pos_arrows_int > {-1}
-                                    {\__ww_msg_error:n {Two~options~are~incompatible}}
+                                    {\__ww_error:n {Two~options~are~incompatible}}
                              \int_set:Nn \l__ww_previous_pos_arrows_int 6
                              \int_set:Nn \l__ww_pos_arrows_int 6} ,
       group    .value_forbidden:n = true,
       groups   .code:n   = {\int_compare:nNnT \l__ww_previous_pos_arrows_int > {-1}
-                                   {\__ww_msg_error:n {Two~options~are~incompatible}}
+                                   {\__ww_error:n {Two~options~are~incompatible}}
                             \int_set:Nn \l__ww_previous_pos_arrows_int 7
                             \int_set:Nn \l__ww_pos_arrows_int 7} ,
       groups   .value_forbidden:n = true,
       CodeBefore  .code:n = {\int_compare:nNnTF \l__ww_level_int = 1
-                              {\__ww_msg_error:n {Option~will~be~ignored}}
+                              {\__ww_error:n {Option~will~be~ignored}}
                               {\tl_put_right:Nn \l__ww_code_before_tl {#1}}} ,
       CodeBefore  .value_required:n = true,
       CodeAfter .code:n = {\int_compare:nNnTF \l__ww_level_int = 1
-                              {\__ww_msg_error:n {Option~will~be~ignored}}
+                              {\__ww_error:n {Option~will~be~ignored}}
                               {\tl_put_right:Nn \l__ww_code_after_tl {#1}}} ,
       CodeAfter .value_required:n = true,
       name .code:n = {\int_compare:nNnTF \l__ww_level_int = 1
-                              {\__ww_msg_error:n {Option~will~be~ignored}}
+                              {\__ww_error:n {Option~will~be~ignored}}
                               {\tl_set:Nn \l__ww_name_tl {#1}}} ,
       name .value_required:n = true,
-      fleqn   .code:n = {\bool_if:NTF \l__ww_in_witharrows_bool
-                             {\__ww_msg_error:n {Option~will~be~ignored}}
+      fleqn   .code:n = {\bool_if:NTF \l__ww_in_WithArrows_bool
+                             {\__ww_error:n {Option~will~be~ignored}}
                              {\tl_if_eq:nnTF {#1} {true}
                                  {\bool_set_true:N \l__ww_fleqn_bool}
                                  {\bool_set_false:N \l__ww_fleqn_bool}}},
       fleqn   .default:n = true,
-      mathindent   .code:n = {\bool_if:NTF \l__ww_in_witharrows_bool
-                               {\__ww_msg_error:n {Option~will~be~ignored}}
+      mathindent   .code:n = {\bool_if:NTF \l__ww_in_WithArrows_bool
+                               {\__ww_error:n {Option~will~be~ignored}}
                                {\dim_set:Nn \l__ww_mathindent_dim {#1}}},
       mathindent   .value_required:n = true,
-      notag   .code:n = {\bool_if:NTF \l__ww_in_witharrows_bool
-                             {\__ww_msg_error:n {Option~will~be~ignored}}
+      notag   .code:n = {\bool_if:NTF \l__ww_in_WithArrows_bool
+                             {\__ww_error:n {Option~will~be~ignored}}
                              {\tl_if_eq:nnTF {#1} {true}
                                  {\bool_set_true:N \l__ww_notag_bool}
                                  {\bool_set_false:N \l__ww_notag_bool}}},
       notag   .default:n = true,
       nonumber .meta:n   = notag,
-      AllowMultipleLabels .code:n = {\bool_if:NTF \l__ww_in_witharrows_bool
-                                         {\__ww_msg_error:n {Option~will~be~ignored}}
+      AllowMultipleLabels .code:n = {\bool_if:NTF \l__ww_in_WithArrows_bool
+                                         {\__ww_error:n {Option~will~be~ignored}}
                                          {\msg_redirect_name:nnn {witharrows}
                                                            {Multiple~labels}
                                                            {none}}},
       AllowMultipleLabels .value_forbidden:n = true,
-      wrap-lines   .code:n = {\bool_if:NTF \l__ww_in_witharrows_bool
-                             {\__ww_msg_error:n {Option~will~be~ignored}}
+      wrap-lines   .code:n = {\bool_if:NTF \l__ww_in_WithArrows_bool
+                             {\__ww_error:n {Option~will~be~ignored}}
                              {\tl_if_eq:nnTF {#1} {true}
                                  {\bool_set_true:N \l__ww_wrap_lines_bool}
                                  {\bool_set_false:N \l__ww_wrap_lines_bool}}},
       wrap-lines   .default:n = true,
-      unknown .code:n  = \__ww_msg_error:n {Option~unknown}
+      unknown .code:n  = \__ww_error:n {Option~unknown}
      }
 \keys_define:nn {WithArrows/General}
      {tikz     .code:n            = \tikzset {WithArrows/arrow/.append~style = {#1}},
@@ -264,32 +267,32 @@
       i        .code:n            = \__ww_analyze_option_position:n 5 ,
       xoffset  .code:n  = {\bool_if:nTF {\int_compare_p:nNn \l__ww_level_int = 3 &&
                                         \int_compare_p:nNn \l__ww_pos_arrows_int > 5}
-                               {\__ww_msg_error:n {Option~incompatible~with~"group(s)"}}
+                               {\__ww_error:n {Option~incompatible~with~"group(s)"}}
                                {\dim_set:Nn \l__ww_xoffset_dim {#1}}} ,
       xoffset  .value_required:n  = true,
       jot       .code:n     = {\int_compare:nNnTF \l__ww_level_int = 2
                                   {\dim_set:Nn \jot {#1}}
-                                  {\__ww_msg_error:n {Option~will~be~ignored}}} ,
+                                  {\__ww_error:n {Option~will~be~ignored}}} ,
       jot       .value_required:n  = true,
       interline   .code:n       = {\int_compare:nNnTF \l__ww_level_int = 2
                                       {\skip_set:Nn \l__ww_interline_skip {#1}}
-                                      {\__ww_msg_error:n {Option~will~be~ignored}}} ,
+                                      {\__ww_error:n {Option~will~be~ignored}}} ,
       interline   .value_required:n = true,
-      jump    .code:n  = \__ww_msg_error:n {Option~will~be~ignored} ,
-      unknown .code:n  = \__ww_msg_error:n {Option~unknown}
+      jump    .code:n  = \__ww_error:n {Option~will~be~ignored} ,
+      unknown .code:n  = \__ww_error:n {Option~unknown}
 }
 \keys_define:nn {WithArrows/jump}
      {jump  .code:n = {\int_set:Nn \l__ww_jump_int {#1}
                        \int_compare:nNnF \l__ww_jump_int > 0
-                           {\__ww_msg_error:n {The~option~"jump"~must~be~non~negative}}} ,
+                           {\__ww_error:n {The~option~"jump"~must~be~non~negative}}} ,
       jump  .value_required:n  = true}
 \cs_new_protected:Nn \__ww_analyze_option_position:n
      {\int_compare:nNnT \l__ww_previous_pos_arrows_int > {-1}
-        {\__ww_msg_error:n {Two~options~are~incompatible}}
+        {\__ww_error:n {Two~options~are~incompatible}}
       \int_set:Nn \l__ww_previous_pos_arrows_int {#1}
       \bool_if:nTF { \int_compare_p:nNn \l__ww_level_int = 3 &&
                      \int_compare_p:nNn \l__ww_pos_arrows_int > 5}
-         {\__ww_msg_error:n {Option~incompatible~with~"group(s)"}}
+         {\__ww_error:n {Option~incompatible~with~"group(s)"}}
          {\int_set:Nn \l__ww_pos_arrows_int {#1}}}
 \NewDocumentCommand \WithArrowsOptions {m}
     {\int_set:Nn \l__ww_previous_pos_arrows_int {-1}
@@ -314,7 +317,7 @@
           }
 \cs_new_protected:Nn \__ww_Arrow_first_column:
                {\tl_set:Nn \l_tmpa_tl {Arrow}
-                \__ww_msg_error:n {Arrow~in~first~column}
+                \__ww_error:n {Arrow~in~first~column}
                 \__ww_Arrow}
 \cs_new_protected:Nn \__ww_pre_environment:n
          { \seq_gput_right:NV \g__ww_arrow_int_seq \g__ww_arrow_int
@@ -344,9 +347,9 @@
            \l__ww_code_before_tl
            \cs_set_eq:cN \l__ww_CommandName_tl \__ww_Arrow}
 \NewDocumentEnvironment {WithArrows} {O{}}
-         { \bool_set_true:N \l__ww_in_witharrows_bool
+         { \bool_set_true:N \l__ww_in_WithArrows_bool
            \reverse_if:N \if_mode_math:
-                             \__ww_msg_error:n {{WithArrows}~used~outside~math~mode}
+                             \__ww_error:n {{WithArrows}~used~outside~math~mode}
                          \fi:
            \cs_set:Npn \notag {\msg_error:nnn {witharrows}
                                               {Command~not~allowed~in~{WithArrows}}
@@ -389,7 +392,7 @@
            \bool_if:NT \l__ww_shownodenames_bool
                 {\hbox_overlap_right:n {\small wa-\l__ww_prefix_str
                                                  -\int_use:N\g__ww_line_int}}
-           && \__ww_msg_error:n {Third~column~in~an~environment~{WithArrows}}
+           && \__ww_error:n {Third~column~in~an~environment~{WithArrows}}
            $\bool_if:NT \l__ww_displaystyle_bool \displaystyle {##}$
            \cr
           }
@@ -401,7 +404,8 @@
 }
 \cs_new_protected:Nn \__ww_post_environment:
           {\int_compare:nNnT \g__ww_line_bis_int < \g__ww_line_int
-                  {\__ww_msg_error:n {All~lines~must~have~an~ampersand}}
+                  {\__ww_error:n {All~lines~must~have~an~ampersand}}
+           \cs_set:Npn \WithArrowsRightX {\g__ww_right_x_dim}
            \int_compare:nNnT \g__ww_arrow_int > 0
                   {\int_compare:nNnTF \l__ww_pos_arrows_int > 5
                     \__ww_draw_arrows:
@@ -408,7 +412,7 @@
                     {\__ww_draw_arrows:nn 1 \g__ww_arrow_int}}
            \group_begin:
            \tikzset{every~picture/.style = __ww_standard}
-           \cs_set:Npn \NbLines {\int_use:N \g__ww_line_int}
+           \cs_set:Npn \WithArrowsNbLines {\int_use:N \g__ww_line_int}
            \cs_set_eq:NN \MultiArrow \__ww_MultiArrow:nn
            \cs_set_eq:cN \l__ww_CommandName_tl \__ww_Arrow_code_after
            \l__ww_code_after_tl
@@ -433,7 +437,7 @@
       {\peek_meaning:NTF [ {\__ww_cr_ii:} {\__ww_cr_ii:[\c_zero_dim]} }
 \cs_new_protected:Npn \__ww_cr_ii:[#1]
       {\group_align_safe_end:
-       \bool_if:NF \l__ww_in_witharrows_bool
+       \bool_if:NT \l__ww_in_DispWithArrows_bool
            {\bool_if:NTF \l__ww_notag_bool
                 {& \tikz [__ww_standard] \coordinate (\int_use:N\g__ww_line_int-v)  ; }
                 {
@@ -482,9 +486,9 @@
                       \bool_set_true:N \l__ww_notag_bool}}
            \bool_if:NT \c__ww_amsmath_loaded_bool \intertext@
            \if_mode_math:
-               \__ww_msg_error:n {{DispWithArrows}~used~in~math~mode}
+               \__ww_error:n {{DispWithArrows}~used~in~math~mode}
            \fi:
-           \bool_set_false:N \l__ww_in_witharrows_bool
+           \bool_set_true:N \l__ww_in_DispWithArrows_bool
            \__ww_pre_environment:n {#1}
            \if_mode_vertical:
              \nointerlineskip
@@ -544,21 +548,21 @@
                                                    -\int_use:N\g__ww_line_int}}
             & ##
              \tabskip = \c_zero_skip
-            && \__ww_msg_error:n {Third~column~in~an~environment~{DispWithArrows}}
+            && \__ww_error:n {Third~column~in~an~environment~{DispWithArrows}}
                \iffalse ## \fi
              \cr}
           {\\
            \egroup
            \egroup
-           \bool_if:NT \l__ww_wrap_lines_bool
-             {\dim_gzero_new:N \g__ww_x_right_dim
-              \dim_gset:Nn \g__ww_x_right_dim \c_max_dim
+           \bool_if:NT \l__ww_in_DispWithArrows_bool
+             {\dim_gzero_new:N \g__ww_right_x_dim
+              \dim_gset:Nn \g__ww_right_x_dim \c_max_dim
               \begin{tikzpicture} [__ww_standard]
               \int_step_variable:nnnNn 1 1 \g__ww_line_int \l_tmpa_int
                     {\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__ww_x_right_dim
-                            {\dim_gset:Nn \g__ww_x_right_dim \l_tmpa_dim} }
+                     \dim_compare:nNnT \l_tmpa_dim < \g__ww_right_x_dim
+                            {\dim_gset:Nn \g__ww_right_x_dim \l_tmpa_dim} }
               \end{tikzpicture}}
            \__ww_post_environment:
            \bool_if:nT \c__ww_mathtools_loaded_bool
@@ -579,7 +583,7 @@
      \tl_set:Nn \l__ww_tag_tl {#2}
      \bool_set:Nn \l__ww_tag_star_bool {#1}
      \bool_if:nT {#1 && ! \bool_if_p:N \c__ww_amsmath_loaded_bool}
-          { \__ww_msg_error:n {tag*~without~amsmath} }
+          { \__ww_error:n {tag*~without~amsmath} }
     }
 \NewDocumentEnvironment {DispWithArrows*} {}
      {\WithArrowsOptions{notag}
@@ -642,11 +646,11 @@
                     {final} \l_tmpa_tl
       \int_set:Nn \l__ww_final_int {\l_tmpa_tl}
       \int_compare:nNnTF \l__ww_final_int > \g__ww_line_int
-         {\__ww_msg_error:n {Too~few~lines~for~an~arrow}}
+         {\__ww_error:n {Too~few~lines~for~an~arrow}}
          {\cs_if_free:cTF{pgf at sh@ns at wa-\l__ww_prefix_str-\int_use:N\l__ww_initial_int-l}
-             { \__ww_msg_error:n {A~PGF~node~doesn't~exist} }
+             { \__ww_error:n {A~PGF~node~doesn't~exist} }
              {\cs_if_free:cTF{pgf at sh@ns at wa-\l__ww_prefix_str-\int_use:N\l__ww_final_int-l}
-                 { \__ww_msg_error:n {A~PGF~node~doesn't~exist} }
+                 { \__ww_error:n {A~PGF~node~doesn't~exist} }
                  {\__ww_draw_arrows_i:}}}
       \int_incr:N \l__ww_arrow_int
      }
@@ -705,7 +709,7 @@
            \end{tikzpicture}}}
 \cs_new_protected:Nn \__ww_draw_arrow:nnn
            {
-            \bool_if:nT {\l__ww_wrap_lines_bool && ! \l__ww_in_witharrows_bool}
+            \bool_if:nT {\l__ww_wrap_lines_bool && \l__ww_in_DispWithArrows_bool}
                { \tl_set_eq:NN \l__ww_tikz_code_tl \c__ww_tikz_code_wrap_lines_tl }
             \exp_args:No \__ww_def_function_tmpa:n \l__ww_tikz_code_tl
             \__ww_tmpa:nnn {#1} {#2} {#3} }
@@ -714,7 +718,7 @@
                  {
                    \draw (#1) to node (__ww_label) {} (#2) ;
                    \tikz at parse@node \pgfutil at firstofone (__ww_label.west)
-                   \dim_set:Nn \l_tmpa_dim {\g__ww_x_right_dim - \pgf at x - 0.3333 em}
+                   \dim_set:Nn \l_tmpa_dim {\g__ww_right_x_dim - \pgf at x - 0.3333 em}
                    \path \pgfextra {\tl_gset:Nx \g_tmpa_tl \tikz at text@width} ;
                    \tl_if_empty:NF \g_tmpa_tl
                       {\dim_set:Nn \l_tmpb_dim \g_tmpa_tl
@@ -798,7 +802,7 @@
                                             {\x}}
                             {\clist_gput_right:Nx \g_tmpa_clist {\x}}}
      \int_compare:nNnTF {\clist_count:N \g_tmpa_clist} < 2
-       {\__ww_msg_error:n {Too~small~specification~for~MultiArrow}}
+       {\__ww_error:n {Too~small~specification~for~MultiArrow}}
        {\clist_sort:Nn \g_tmpa_clist
                        {\int_compare:nNnTF {##1} > {##2}
                              {\sort_return_swapped:}
@@ -817,8 +821,8 @@
           \dim_set:Nn \l_tmpa_dim {20 cm}
           \path \pgfextra {\tl_gset:Nx \g_tmpa_tl \tikz at text@width} ;
           \tl_if_empty:NF \g_tmpa_tl {\dim_set:Nn \l_tmpa_dim \g_tmpa_tl}
-          \bool_if:nT {\l__ww_wrap_lines_bool && ! \l__ww_in_witharrows_bool}
-                  {\dim_set:Nn \l_tmpb_dim {\g__ww_x_right_dim - \pgf at x - 0.3333 em}
+          \bool_if:nT {\l__ww_wrap_lines_bool && \l__ww_in_DispWithArrows_bool}
+                  {\dim_set:Nn \l_tmpb_dim {\g__ww_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}}
           \path (__ww_label.west)
@@ -980,9 +984,9 @@
                       \bool_set_true:N \l__ww_notag_bool}}
            \bool_if:NT \c__ww_amsmath_loaded_bool \intertext@
            \if_mode_math:
-               \__ww_msg_error:n {{DispWithArrows}~used~in~math~mode}
+               \__ww_error:n {{DispWithArrows}~used~in~math~mode}
            \fi:
-           \bool_set_false:N \l__ww_in_witharrows_bool
+           \bool_set_true:N \l__ww_in_DispWithArrows_bool
            %
            \__ww_pre_environment:n {#2}
            \nointerlineskip
@@ -1042,7 +1046,7 @@
                                                       -\int_use:N\g__ww_line_int}}
                & ##
                 \tabskip = \c_zero_skip
-               && \__ww_msg_error:n {Third~column~in~an~environment~{DispWithArrows}}
+               && \__ww_error:n {Third~column~in~an~environment~{DispWithArrows}}
                   \if_false: ## \fi:
                 \cr}
           {   \\
@@ -1078,6 +1082,20 @@
                           \MT_showonlyrefs_true:}
            \ignorespacesafterend
            }
+\NewDocumentCommand \WithArrowsNewStyle {mm}
+   { \keys_if_exist:nnTF {WithArrows/General} {#1}
+       {\__ww_error:nn {Key~already~defined} {#1}}
+       {\keys_define:nn {WithArrows/General}
+            {#1 .code:n = {\int_compare:nNnTF \l__ww_level_int < 3
+                              {\keys_set:nn {WithArrows/General} {#2}}
+                              {\__ww_error:n {Option~unknown}}}}
+        \group_begin:
+           \WithArrowsOptions{#2}
+        \group_end:} }
+\msg_new:nnn {witharrows}
+             {Key~already~defined}
+             {The~key~'#1'~is~already~defined.~If~you~go~on,~
+              your~instruction~\token_to_str:N\WithArrowsNewStyle\ will~be~ignored.}
 \endinput
 %%
 %% End of file `witharrows.sty'.



More information about the tex-live-commits mailing list