texlive[53246] Master/texmf-dist: witharrows (28dec19)

commits+karl at tug.org commits+karl at tug.org
Sat Dec 28 23:24:44 CET 2019


Revision: 53246
          http://tug.org/svn/texlive?view=revision&revision=53246
Author:   karl
Date:     2019-12-28 23:24:44 +0100 (Sat, 28 Dec 2019)
Log Message:
-----------
witharrows (28dec19)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/witharrows/witharrows-french.pdf
    trunk/Master/texmf-dist/doc/generic/witharrows/witharrows-french.tex
    trunk/Master/texmf-dist/doc/generic/witharrows/witharrows.pdf
    trunk/Master/texmf-dist/doc/generic/witharrows/witharrows.tex
    trunk/Master/texmf-dist/source/generic/witharrows/witharrows.dtx
    trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.sty

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

Modified: trunk/Master/texmf-dist/doc/generic/witharrows/witharrows-french.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/witharrows/witharrows-french.tex	2019-12-28 22:24:30 UTC (rev 53245)
+++ trunk/Master/texmf-dist/doc/generic/witharrows/witharrows-french.tex	2019-12-28 22:24:44 UTC (rev 53246)
@@ -417,9 +417,8 @@
 
 Néanmoins, une commande |\Arrow| définie précédemment pourrait encore être utile dans un environnement
 |{WithArrows}|. Si vous voulez l'utiliser dans un tel environnement, il est possible de changer le nom de la
-commande |\Arrow| de l'extension \pkg{witharrows} grâce à une option |command-name|\footnote{Pour des raisons
-  historiques, il y a un alias pour cette option : |CommandeName|.} dédiée. Le nouveau nom de la commande doit être
-fourni à l'option \emph{sans} la contre-oblique.
+commande |\Arrow| de l'extension \pkg{witharrows} grâce à une option |command-name| dédiée. Le nouveau nom de la
+commande doit être fourni à l'option \emph{sans} la contre-oblique.
 %
 \begin{Verbatim}
 \NewDocumentCommand {\Arrow} {} {\longmapsto}
@@ -441,8 +440,7 @@
 
 
 \interitem 
-L'environnement |{WithArrows}| fournit aussi deux options |code-before| et |code-after|\footnote{Pour des raisons
-  historiques, il y a aussi des alias pour ces options : |CodeBefore| et |CodeAfter|.} pour du code LaTeX qui sera
+L'environnement |{WithArrows}| fournit aussi deux options |code-before| et |code-after| pour du code LaTeX qui sera 
 exécuté au début et à la fin de l'environnement. Ces options ne sont pas conçues pour être utilisées comme des
 \emph{hooks} (elles sont disponibles uniquement au niveau de l'environnement et ne s'appliquent pas aux
 environnements imbriqués).
@@ -689,10 +687,10 @@
 
 \interitem
 
-\section{Les options «up» et «down» pour des flèches individuelles} 
+\section{Les options « up » et « down » pour des flèches individuelles} 
 
 \label{up-and-down}
-Au niveau local, il y a deux options pour les flèches individuelles, nommée «|up|» et «|down|». L'exemple
+Au niveau local, il y a deux options pour les flèches individuelles, nommées «|up|» et «|down|». L'exemple
 suivant illustre ces types de flèches: 
 
 
@@ -707,7 +705,7 @@
 \end{WithArrows}\)
 \end{Verbatim}
 
-\vspace{1cm}
+\bigskip
 $\begin{WithArrows}
 A & = B 
 \Arrow[up]{une flèche de type \texttt{up}} \\
@@ -719,10 +717,64 @@
 
 
 \vspace{1cm} 
-Les options |up| et |down| nécessitent l'extension \pkg{varwidth} et l'extension Tikz \pkg{calc}. Si elles ne sont
-pas chargées, une erreur sera levée.
+Les options |up| et |down| nécessitent l'extension \pkg{varwidth} et l'extension Tikz \pkg{calc}. Si elles n'ont
+pas été chargées au préalable par l'utilisateur, une erreur sera levée.
 
+\vspace{1cm}
+Les options |up| et |down| peuvent en fait prendre comme valeur une liste de couples clé-valeur. 
+\begin{itemize}
+\item La clé |radius| est le rayon de l'angle arrondi de la flèche\footnote{La valeur initiale de ce paramètre est égale à
+$4$~pt, qui est la valeur par défaut du ``|rounded corners|'' de Tikz.}.
+\item La clé |width| contrôle la largeur (de la partie horizontale) de la flèche :
+\begin{itemize}
+\item avec la valeur |max|, la largeur de la flèche est ajustée par rapport à la position des nœuds (c'est le
+comportement par défaut des flèches |up| et |down| comme illustré dans l'exemple précédent) ;
+\item avec une valeur numérique, la largeur de la flèche est directement fixée par cette valeur numérique ;
+\item avec la valeur |min|, la largeur de la flèche est ajustée au contenu de son étiquette.
+\end{itemize}
+\end{itemize}
 
+\vspace{1cm}
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = B 
+\Arrow[~emphase#up={width=2cm,radius=0pt}@]{essai} \\
+  & = C + C + C + C + C + C + C + C 
+\end{WithArrows}$
+\end{Verbatim}
+
+\medskip
+$\begin{WithArrows}
+A & = B 
+\Arrow[up={width=2cm,radius=0pt}]{essai} \\
+  & = C + C + C + C + C + C + C + C 
+\end{WithArrows}$
+
+
+\vspace{1cm}
+\begin{Verbatim}
+$\begin{WithArrows}
+A & = B 
+\Arrow[~emphase#up={width=min}@]{essai} \\
+  & = C + C + C + C + C + C + C + C 
+\end{WithArrows}$
+\end{Verbatim}
+
+\medskip
+$\begin{WithArrows}
+A & = B 
+\Arrow[up={width=min}]{essai} \\
+  & = C + C + C + C + C + C + C + C 
+\end{WithArrows}$
+
+\vspace{1cm}
+Les options relatives aux flèches |up| and |down| peuvent être fixées au niveau global ou environnemental avec la
+clé |up-and-down|. Cette clé peut aussi être utilisée comme préfixe comme illustré maintenant.
+%
+\begin{Verbatim}
+\WithArrowsOptions{up-and-down/width=min}
+\end{Verbatim}
+
 \interitem
 
 \section{Comparaison avec l'environnement \{aligned\}}
@@ -1220,13 +1272,14 @@
 P & \vartriangleleft Q 
 \end{WithArrows}
 \right.
-\end{WithArrows}\]
-
+\end{WithArrows}
+%
 \begin{tikzpicture}[remember picture,overlay]
 \draw [WithArrows/arrow] 
       ([xshift=3mm]wa-\WithArrowsLastEnv-2-1-2-r.south)
    to ([xshift=3mm]wa-\WithArrowsLastEnv-3-2-r.north) ;
 \end{tikzpicture}
+\]
 
 \medskip
 Dans le cas présent, il aurait été plus facile d'utiliser une commande |\Arrow| dans le |code-after| mais
@@ -1691,8 +1744,7 @@
 
 \label{tikz-code}
 
-L'option |tikz-code|\footnote{Pour des raisons historiques, l'option |tikz-code| a un alias :
-  |TikzCode|.} permet à l'utilisateur de changer la forme des flèches.\footnote{Si l'option |wrap-lines|
+L'option |tikz-code| permet à l'utilisateur de changer la forme des flèches.\footnote{Si l'option |wrap-lines|
   est utilisée dans un environnement |{DispWithArrows}| ou |{DispWithArrows*}|, l'option |tikz-code|
   n'aura pas d'effet sur les flèches de cet environnement mais uniquement sur les flèches des environnements
   |{WithArrows}| imbriqués.}

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

Modified: trunk/Master/texmf-dist/doc/generic/witharrows/witharrows.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/witharrows/witharrows.tex	2019-12-28 22:24:30 UTC (rev 53245)
+++ trunk/Master/texmf-dist/doc/generic/witharrows/witharrows.tex	2019-12-28 22:24:44 UTC (rev 53246)
@@ -18,22 +18,22 @@
 %% and version 1.3 or later is part of all distributions of
 %% LaTeX version 2005/12/01 or later.
 %% 
-\def\myfileversion{2.2}
-\def\myfiledate{2019/12/10}
+\def\myfileversion{2.3}
+\def\myfiledate{2019/12/27}
 \input tikz.tex
 \input expl3-generic.tex
 \usetikzlibrary{arrows.meta,bending}
 \ExplSyntaxOn
 \catcode `\@ = 11
-\cs_new_protected:Npn \@@_msg_new:nn { \msg_new:nnn { witharrows } }
-\cs_new_protected:Npn \@@_msg_new:nnn { \msg_new:nnnn { witharrows } }
-\cs_new_protected:Npn \@@_msg_redirect_name:nn
+\cs_new_protected:Npn \__witharrows_msg_new:nn { \msg_new:nnn { witharrows } }
+\cs_new_protected:Npn \__witharrows_msg_new:nnn { \msg_new:nnnn { witharrows } }
+\cs_new_protected:Npn \__witharrows_msg_redirect_name:nn
   { \msg_redirect_name:nnn { witharrows } }
-\cs_new_protected:Npn \@@_error:n { \msg_error:nn { witharrows } }
-\cs_new_protected:Npn \@@_warning:n { \msg_warning:nn { witharrows } }
-\cs_new_protected:Npn \@@_fatal:n { \msg_fatal:nn { witharrows } }
-\cs_new_protected:Npn \@@_error:nn  { \msg_error:nnn { witharrows } }
-\cs_generate_variant:Nn \@@_error:nn { n x }
+\cs_new_protected:Npn \__witharrows_error:n { \msg_error:nn { witharrows } }
+\cs_new_protected:Npn \__witharrows_warning:n { \msg_warning:nn { witharrows } }
+\cs_new_protected:Npn \__witharrows_fatal:n { \msg_fatal:nn { witharrows } }
+\cs_new_protected:Npn \__witharrows_error:nn  { \msg_error:nnn { witharrows } }
+\cs_generate_variant:Nn \__witharrows_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
@@ -44,26 +44,26 @@
         typedref, unicode-math, varwidth
       }
       {
-        \bool_new:c { c_@@_#1_loaded_bool }
-        \bool_set_false:c { c_@@_#1_loaded_bool }
+        \bool_new:c { c__witharrows_#1_loaded_bool }
+        \bool_set_false:c { c__witharrows_#1_loaded_bool }
       }
   }
 \sys_if_engine_luatex:TF
   {
-    \cs_new_protected:Npn \@@_strcmp:nn  #1 #2
+    \cs_new_protected:Npn \__witharrows_strcmp:nn  #1 #2
       { \lua_now:e { l3kernel.strcmp('#1','#2') } }
   }
   {
-    \cs_new_protected:Npn \@@_strcmp:nn #1 #2
+    \cs_new_protected:Npn \__witharrows_strcmp:nn #1 #2
       { \tex_strcmp:D { #1 } { #2 } }
   }
-\cs_new_protected:Npn \@@_sort_seq:N #1
+\cs_new_protected:Npn \__witharrows_sort_seq:N #1
   {
     \seq_sort:Nn #1
       {
         \int_compare:nNnTF
           {
-            \@@_strcmp:nn
+            \__witharrows_strcmp:nn
               { \str_lower_case:n { ##1 } }
               { \str_lower_case:n { ##2 } }
           }
@@ -72,7 +72,7 @@
           \sort_return_same:
       }
   }
-\cs_new_protected:Npn \@@_convert_to_str_seq:N #1
+\cs_new_protected:Npn \__witharrows_convert_to_str_seq:N #1
   {
     \seq_clear:N \l_tmpa_seq
     \seq_map_inline:Nn #1
@@ -81,12 +81,12 @@
       }
     \seq_set_eq:NN #1 \l_tmpa_seq
   }
-\cs_new_protected:Npn \@@_set_seq_of_str_from_clist:Nn #1 #2
+\cs_new_protected:Npn \__witharrows_set_seq_of_str_from_clist:Nn #1 #2
   {
     \seq_set_from_clist:Nn #1 { #2 }
-    \@@_convert_to_str_seq:N #1
+    \__witharrows_convert_to_str_seq:N #1
   }
-\cs_new_protected:Npn \@@_save:N #1
+\cs_new_protected:Npn \__witharrows_save:N #1
   {
     \seq_set_split:Nxx \l_tmpa_seq
        { \char_generate:nn { `_ } { 12 } }
@@ -102,7 +102,7 @@
     \use:c { \l_tmpa_str _gset_eq:cN }
       { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ } #1
   }
-\cs_new_protected:Npn \@@_restore:N #1
+\cs_new_protected:Npn \__witharrows_restore:N #1
   {
     \seq_set_split:Nxx \l_tmpa_seq
       { \char_generate:nn { `_ } { 12 } }
@@ -114,21 +114,21 @@
   }
 \tikzset
   {
-    @@_node_style / .style =
+    __witharrows_node_style / .style =
       {
-        above = \l_@@_ystart_dim ,
+        above = \l__witharrows_ystart_dim ,
         inner~sep = \c_zero_dim ,
         minimum~width = \c_zero_dim ,
-        minimum~height = \l_@@_ygap_dim
+        minimum~height = \l__witharrows_ygap_dim
       }
   }
 \tikzset
   {
-    @@_standard / .style =
+    __witharrows_standard / .style =
       {
         remember~picture ,
         overlay ,
-        name~prefix = wa - \l_@@_prefix_str -
+        name~prefix = wa - \l__witharrows_prefix_str -
       }
   }
 \tikzset
@@ -152,163 +152,144 @@
             \openup \jot
             \cs_set_eq:NN \spread at equation \prg_do_nothing:
           }
-\tl_new:N \l_@@_left_brace_tl
-\tl_set_eq:NN \l_@@_left_brace_tl \c_novalue_tl
-\bool_new:N \l_@@_in_WithArrows_bool
-\bool_new:N \l_@@_in_DispWithArrows_bool
-\bool_new:N \l_@@_in_code_after_bool
-\seq_new:N \g_@@_position_in_the_tree_seq
-\seq_gput_right:Nn \g_@@_position_in_the_tree_seq 1
-\int_new:N \g_@@_last_env_int
-\int_new:N \l_@@_pos_env_int
-\int_new:N \l_@@_pos_arrow_int
-\int_set:Nn \l_@@_pos_arrow_int 3
-\seq_new:N \g_@@_arrow_int_seq
-\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
-\seq_new:N \g_@@_static_col_int_seq
-\int_new:N \g_@@_static_col_int
-\str_new:N \l_@@_command_name_str
-\str_set:Nn \l_@@_command_name_str { Arrow }
-\str_new:N \l_@@_string_Arrow_for_msg_str
-\str_set:Nx \l_@@_string_Arrow_for_msg_str { \token_to_str:N \Arrow }
-\seq_new:N \g_@@_names_seq
-\bool_new:N \l_@@_in_first_columns_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_cols_int
-\str_new:N \l_@@_format_str
-\cs_new_protected:Npn \@@_eval_if_allowed:n #1
+\tl_new:N \l__witharrows_left_brace_tl
+\tl_set_eq:NN \l__witharrows_left_brace_tl \c_novalue_tl
+\bool_new:N \l__witharrows_in_WithArrows_bool
+\bool_new:N \l__witharrows_in_DispWithArrows_bool
+\bool_new:N \l__witharrows_in_code_after_bool
+\seq_new:N \g__witharrows_position_in_the_tree_seq
+\seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1
+\int_new:N \g__witharrows_last_env_int
+\int_new:N \l__witharrows_pos_env_int
+\int_new:N \l__witharrows_pos_arrow_int
+\int_set:Nn \l__witharrows_pos_arrow_int 3
+\seq_new:N \g__witharrows_arrow_int_seq
+\int_new:N \g__witharrows_arrow_int
+\seq_new:N \g__witharrows_line_int_seq
+\int_new:N \g__witharrows_line_int
+\seq_new:N \g__witharrows_col_int_seq
+\int_new:N \g__witharrows_col_int
+\seq_new:N \g__witharrows_static_col_int_seq
+\int_new:N \g__witharrows_static_col_int
+\str_new:N \l__witharrows_command_name_str
+\str_set:Nn \l__witharrows_command_name_str { Arrow }
+\str_new:N \l__witharrows_string_Arrow_for_msg_str
+\str_set:Nx \l__witharrows_string_Arrow_for_msg_str { \token_to_str:N \Arrow }
+\seq_new:N \g__witharrows_names_seq
+\bool_new:N \l__witharrows_in_first_columns_bool
+\bool_new:N \l__witharrows_new_group_bool
+\bool_new:N \l__witharrows_initial_r_bool
+\bool_new:N \l__witharrows_final_r_bool
+\tl_new:N \l__witharrows_initial_tl
+\tl_new:N \l__witharrows_final_tl
+\int_new:N \l__witharrows_nb_cols_int
+\str_new:N \l__witharrows_format_str
+\dim_new:N \l__witharrows_arrow_width_dim
+\dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim
+\dim_new:N \l__witharrows_up_and_down_radius_dim
+\dim_set:Nn \l__witharrows_up_and_down_radius_dim { 4 pt }
+\cs_new_protected:Npn \__witharrows_eval_if_allowed:n #1
   {
-    \str_if_empty:NTF \l_@@_previous_key_str
+    \str_if_empty:NTF \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
         #1
       }
-      { \@@_error:n { Incompatible~options } }
+      { \__witharrows_error:n { Incompatible~options } }
   }
-\cs_new_protected:Npn \@@_fix_pos_option:n #1
-  { \@@_eval_if_allowed:n { \int_set:Nn \l_@@_pos_arrow_int { #1 } } }
+\cs_new_protected:Npn \__witharrows_fix_pos_option:n #1
+  { \__witharrows_eval_if_allowed:n { \int_set:Nn \l__witharrows_pos_arrow_int { #1 } } }
 \keys_define:nn { WithArrows / Global }
   {
-    max-length-of-arrow .dim_set:N = \l_@@_max_length_of_arrow_dim ,
+    max-length-of-arrow .dim_set:N = \l__witharrows_max_length_of_arrow_dim ,
     max-length-of-arrow .value_required:n = true ,
     max-length-of-arrow .initial:n = 2 cm ,
-    ygap .dim_set:N = \l_@@_ygap_dim ,
-    ygap .value_required:n = true ,
+    ygap .dim_set:N = \l__witharrows_ygap_dim ,
     ygap .initial:n = 0.4 ex ,
-    ystart .dim_set:N = \l_@@_ystart_dim ,
-    ystart .value_required:n = true ,
+    ystart .dim_set:N = \l__witharrows_ystart_dim ,
+
     ystart .initial:n = 0.4 ex ,
     more-columns .code:n =
-      \@@_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } ,
-    more-columns .value_forbidden:n = true,
+      \__witharrows_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } ,
     command-name .code:n =
-      \str_set:Nn \l_@@_command_name_str { #1 }
-      \str_set:Nx \l_@@_string_Arrow_for_msg_str
+      \str_set:Nn \l__witharrows_command_name_str { #1 }
+      \str_set:Nx \l__witharrows_string_Arrow_for_msg_str
         { \c_backslash_str Arrow~alias~\c_backslash_str #1 } ,
-    command-name .value_required:n = true ,
-    tikz-code .tl_set:N = \l_@@_tikz_code_tl,
+    tikz-code .tl_set:N = \l__witharrows_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 .bool_set:N = \l__witharrows_displaystyle_bool ,
     displaystyle .default:n = true ,
     show-nodes .code:n =
-      \tikzset { @@_node_style / .append~style = { draw , red } } ,
-    show-nodes .value_forbidden:n = true,
-    show-node-names .bool_set:N = \l_@@_show_node_names_bool ,
+      \tikzset { __witharrows_node_style / .append~style = { draw , red } } ,
+    show-node-names .bool_set:N = \l__witharrows_show_node_names_bool ,
     show-node-names .default:n = true ,
     group .code:n =
-      \str_if_empty:NTF \l_@@_previous_key_str
+      \str_if_empty:NTF \l__witharrows_previous_key_str
         {
-          \str_set:Nn \l_@@_previous_key_str { group }
-          \seq_remove_all:Nn \l_@@_options_Arrow_seq { xoffset }
-          \int_set:Nn \l_@@_pos_arrow_int 7
+          \str_set:Nn \l__witharrows_previous_key_str { group }
+          \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset }
+          \int_set:Nn \l__witharrows_pos_arrow_int 7
         }
-        { \@@_error:n { Incompatible~options } } ,
-    group .value_forbidden:n = true ,
+        { \__witharrows_error:n { Incompatible~options } } ,
     groups .code:n =
-      \str_if_empty:NTF \l_@@_previous_key_str
+      \str_if_empty:NTF \l__witharrows_previous_key_str
         {
-          \str_set:Nn \l_@@_previous_key_str { groups }
-          \seq_if_in:NnF \l_@@_options_Arrow_seq { new-group }
-            { \seq_put_right:Nn \l_@@_options_Arrow_seq { new-group } }
-          \seq_remove_all:Nn \l_@@_options_Arrow_seq { xoffset }
-          \int_set:Nn \l_@@_pos_arrow_int 6
+          \str_set:Nn \l__witharrows_previous_key_str { groups }
+          \seq_if_in:NnF \l__witharrows_options_Arrow_seq { new-group }
+            { \seq_put_right:Nn \l__witharrows_options_Arrow_seq { new-group } }
+          \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset }
+          \int_set:Nn \l__witharrows_pos_arrow_int 6
         }
-        { \@@_error:n { Incompatible~options } } ,
-    groups .value_forbidden:n = true ,
+        { \__witharrows_error:n { Incompatible~options } } ,
     tikz   .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
     tikz   .initial:n         = \c_empty_tl ,
-    tikz   .value_required:n  = true ,
-    rr     .value_forbidden:n = true ,
-    rr     .code:n            = \@@_fix_pos_option:n 3 ,
-    ll     .value_forbidden:n = true ,
-    ll     .code:n            = \@@_fix_pos_option:n 1 ,
-    rl     .value_forbidden:n = true ,
-    rl     .code:n            = \@@_fix_pos_option:n 2 ,
-    lr     .value_forbidden:n = true ,
-    lr     .code:n            = \@@_fix_pos_option:n 0 ,
-    i      .value_forbidden:n = true ,
-    i      .code:n            = \@@_fix_pos_option:n 5 ,
-    xoffset .dim_set:N  = \l_@@_xoffset_dim ,
-    xoffset .value_required:n  = true ,
+    rr     .code:n            = \__witharrows_fix_pos_option:n 3 ,
+    ll     .code:n            = \__witharrows_fix_pos_option:n 1 ,
+    rl     .code:n            = \__witharrows_fix_pos_option:n 2 ,
+    lr     .code:n            = \__witharrows_fix_pos_option:n 0 ,
+    i      .code:n            = \__witharrows_fix_pos_option:n 5 ,
+    xoffset .dim_set:N  = \l__witharrows_xoffset_dim ,
     xoffset .initial:n = 3 mm ,
     jot .dim_set:N = \jot ,
-    jot .value_required:n = true ,
-    interline .skip_set:N = \l_@@_interline_skip ,
-    interline .value_required:n = true ,
-    start-adjust .dim_set:N = \l_@@_start_adjust_dim ,
-    start-adjust .value_required:n = true ,
+    interline .skip_set:N = \l__witharrows_interline_skip ,
+    start-adjust .dim_set:N = \l__witharrows_start_adjust_dim ,
     start-adjust .initial:n = 0.4 ex ,
-    end-adjust .dim_set:N = \l_@@_end_adjust_dim ,
-    end-adjust .value_required:n = true ,
+    end-adjust .dim_set:N = \l__witharrows_end_adjust_dim ,
     end-adjust .initial:n = 0.4 ex ,
     adjust .meta:n  = { start-adjust = #1 , end-adjust = #1 } ,
-    adjust .value_required:n = true ,
+    up-and-down .code:n = \keys_set:nn { WithArrows / up-and-down } { #1 } ,
     no-arrows .code:n =
-      \cs_set_eq:NN \@@_draw_arrows:nn \use_none:nn
-      \cs_set_eq:NN \@@_draw_arrow:nnn \use_none:nnn  ,
-    no-arrows .value_forbidden:n = true ,
+      \cs_set_eq:NN \__witharrows_draw_arrows:nn \use_none:nn
+      \cs_set_eq:NN \__witharrows_draw_arrow:nnn \use_none:nnn  ,
   }
 \keys_define:nn { WithArrows / WithArrowsSpecific }
   {
-    t   .code:n            = \int_set:Nn \l_@@_pos_env_int O ,
-    t   .value_forbidden:n = true ,
-    c   .code:n            = \int_set:Nn \l_@@_pos_env_int 1 ,
-    c   .value_forbidden:n = true ,
-    b   .code:n            = \int_set:Nn \l_@@_pos_env_int 2 ,
-    b   .value_forbidden:n = true
+    t   .code:n            = \int_set:Nn \l__witharrows_pos_env_int O ,
+    c   .code:n            = \int_set:Nn \l__witharrows_pos_env_int 1 ,
+    b   .code:n            = \int_set:Nn \l__witharrows_pos_env_int 2 ,
   }
-\clist_new:N \c_@@_extensible_delimiters_clist
-\clist_set:Nn \c_@@_extensible_delimiters_clist
+\clist_new:N \c__witharrows_extensible_delimiters_clist
+\clist_set:Nn \c__witharrows_extensible_delimiters_clist
   {
     ., \{, (, [, \lbrace, \lbrack, \lgroup, \langle, \lmoustache, \lceil, \lfloor
   }
 \keys_define:nn { WithArrows / DispWithArrowsSpecific }
   {
-    fleqn .bool_set:N = \l_@@_fleqn_bool ,
+    fleqn .bool_set:N = \l__witharrows_fleqn_bool ,
     fleqn .default:n = true ,
-    mathindent .dim_set:N = \l_@@_mathindent_dim ,
-    mathindent .value_required:n = true ,
+    mathindent .dim_set:N = \l__witharrows_mathindent_dim ,
     mathindent .initial:n = 25 pt ,
-    wrap-lines .bool_set:N = \l_@@_wrap_lines_bool ,
+    wrap-lines .bool_set:N = \l__witharrows_wrap_lines_bool ,
     wrap-lines .default:n = true ,
     replace-left-brace-by .code:n =
       {
         \tl_set:Nx \l_tmpa_tl { \tl_head:n { #1 } }
         \clist_if_in:NVTF
-          \c_@@_extensible_delimiters_clist
+          \c__witharrows_extensible_delimiters_clist
           \l_tmpa_tl
-          { \tl_set:Nn \l_@@_replace_left_brace_by_tl { #1 } }
-          { \@@_error:n { Bad~value~for~replace~brace~by } }
+          { \tl_set:Nn \l__witharrows_replace_left_brace_by_tl { #1 } }
+          { \__witharrows_error:n { Bad~value~for~replace~brace~by } }
       } ,
     replace-left-brace-by .initial:n = \lbrace ,
   }
@@ -316,25 +297,25 @@
   {
     name .code:n =
       \str_set:Nn \l_tmpa_str { #1 }
-      \seq_if_in:NVTF \g_@@_names_seq \l_tmpa_str
-        { \@@_error:n { Duplicate~name } }
-        { \seq_gput_left:NV \g_@@_names_seq \l_tmpa_str }
-      \str_set_eq:NN \l_@@_name_str \l_tmpa_str ,
-    name .value_required:n = true ,
-    code-before .code:n = \tl_put_right:Nn \l_@@_code_before_tl { #1 } ,
-    code-before .value_required:n = true,
+      \seq_if_in:NVTF \g__witharrows_names_seq \l_tmpa_str
+        { \__witharrows_error:n { Duplicate~name } }
+        { \seq_gput_left:NV \g__witharrows_names_seq \l_tmpa_str }
+      \str_set_eq:NN \l__witharrows_name_str \l_tmpa_str ,
+    code-before .code:n = \tl_put_right:Nn \l__witharrows_code_before_tl { #1 } ,
     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 } ,
+    code-after .code:n = \tl_put_right:Nn \l__witharrows_code_after_tl { #1 } ,
+    CodeAfter .meta:n = { code-after = #1 } ,
     format .code:n =
       \tl_if_empty:nTF { #1 }
-        { \@@_error:n { Invalid~option~format } }
+        { \__witharrows_error:n { Invalid~option~format } }
         {
           \regex_match:nnTF { \A[rcl]*\Z } { #1 }
-            { \tl_set:Nn \l_@@_format_str { #1 } }
-            { \@@_error:n { Invalid~option~format } }
+            { \tl_set:Nn \l__witharrows_format_str { #1 } }
+            { \__witharrows_error:n { Invalid~option~format } }
         } ,
+    code-before .value_required:n = true,
+    code-after .value_required:n = true ,
+    name .value_required:n = true ,
     format .value_required:n = true ,
   }
 \keys_define:nn { WithArrows }
@@ -345,6 +326,7 @@
         WithArrows / WithArrowsSpecific ,
         WithArrows / Env
       } ,
+    WithArrows / up-and-down .inherit:n = WithArrows / up-and-down ,
     DispWithArrows .inherit:n =
       {
         WithArrows / DispWithArrowsSpecific ,
@@ -351,15 +333,17 @@
         WithArrows / Global ,
         WithArrows / Env ,
       } ,
+    DispWithArrows / up-and-down .inherit:n = WithArrows / up-and-down ,
     WithArrowsOptions .inherit:n =
       {
         WithArrows / Global ,
         WithArrows / WithArrowsSpecific ,
-        WithArrows / DispWithArrowsSpecific
-      }
+        WithArrows / DispWithArrowsSpecific ,
+      } ,
+    WithArrowsOptions / up-and-down .inherit:n = WithArrows / up-and-down
   }
-\seq_new:N \l_@@_options_WithArrows_seq
-\@@_set_seq_of_str_from_clist:Nn \l_@@_options_WithArrows_seq
+\seq_new:N \l__witharrows_options_WithArrows_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrows_seq
   {
     adjust, b, c, code-after, code-before, command-name,
     displaystyle, end-adjust,
@@ -366,74 +350,79 @@
     format, group, groups, i,
     interline, jot, ll,
     lr, max-length-of-arrow, more-columns, name,
-    no-arrows, rl, rr,
+    no-arrows, rl, rr, up-and-down,
     show-node-names, show-nodes, start-adjust,
     t, tikz, tikz-code,
     xoffset, ygap, ystart
   }
-\@@_convert_to_str_seq:N \l_@@_options_WithArrows_seq
+\__witharrows_convert_to_str_seq:N \l__witharrows_options_WithArrows_seq
 \keys_define:nn { WithArrows / WithArrows }
   {
     unknown .code:n  =
-      \@@_sort_seq:N \l_@@_options_WithArrows_seq
-      \@@_error:n { Unknown~option~WithArrows }
+      \__witharrows_sort_seq:N \l__witharrows_options_WithArrows_seq
+      \__witharrows_error:n { Unknown~option~WithArrows }
   }
 \keys_define:nn { WithArrows / DispWithArrows }
   {
-    left-brace .tl_set:N = \l_@@_left_brace_tl ,
+    left-brace .tl_set:N = \l__witharrows_left_brace_tl ,
     unknown .code:n  =
-      \@@_sort_seq:N \l_@@_options_DispWithArrows_seq
-      \@@_error:n { Unknown~option~DispWithArrows }
+      \__witharrows_sort_seq:N \l__witharrows_options_DispWithArrows_seq
+      \__witharrows_error:n { Unknown~option~DispWithArrows } ,
   }
-\seq_new:N \l_@@_options_DispWithArrows_seq
-\@@_set_seq_of_str_from_clist:Nn \l_@@_options_DispWithArrows_seq
+\seq_new:N \l__witharrows_options_DispWithArrows_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_DispWithArrows_seq
   {
     code-after, code-before, command-name, tikz-code, adjust,
     displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot,
     left-brace, ll, lr, max-length-of-arrow, mathindent, name, no-arrows,
-    replace-left-brace-by, rl, rr, show-node-names, show-nodes, start-adjust,
-    tikz, wrap-lines, xoffset, ygap, ystart,
+    up-and-down, replace-left-brace-by, rl, rr, show-node-names,
+    show-nodes, start-adjust, tikz, wrap-lines, xoffset, ygap, ystart,
   }
 \keys_define:nn { WithArrows / WithArrowsOptions }
   {
     allow-duplicate-names .code:n =
-      \@@_msg_redirect_name:nn { Duplicate~name } { none } ,
+      \__witharrows_msg_redirect_name:nn { Duplicate~name } { none } ,
     allow-duplicate-names .value_forbidden:n = true ,
     unknown .code:n  =
-      \@@_sort_seq:N \l_@@_options_WithArrowsOptions_seq
-      \@@_error:n { Unknown~option~WithArrowsOptions }
+      \__witharrows_sort_seq:N \l__witharrows_options_WithArrowsOptions_seq
+      \__witharrows_error:n { Unknown~option~WithArrowsOptions }
   }
-\seq_new:N \l_@@_options_WithArrowsOptions_seq
-\@@_set_seq_of_str_from_clist:Nn \l_@@_options_WithArrowsOptions_seq
+\seq_new:N \l__witharrows_options_WithArrowsOptions_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrowsOptions_seq
   {
     allow-duplicate-names, b, c, command-name, more-columns, tikz-code, adjust,
     displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr,
-    mathindent, max-length-of-arrow, no-arrows, rl, rr, show-node-names,
-    show-nodes, start-adjust, t, tikz, wrap-lines, xoffset, ygap, ystart,
+    mathindent, max-length-of-arrow, no-arrows, up-and-down, rl, rr,
+    show-node-names, show-nodes, start-adjust, t, tikz, wrap-lines, xoffset,
+    ygap, ystart,
   }
-\cs_new_protected:Npn \@@_set_independent:
+\cs_new_protected:Npn \__witharrows_set_independent:
   {
-    \str_if_empty:NTF \l_@@_previous_key_str
+    \str_if_eq:VnF \l_keys_value_tl { NoValue }
+      { \__witharrows_error:n { Value~for~a~key } }
+    \__witharrows_set_independent_bis:
+  }
+\cs_new_protected:Npn \__witharrows_set_independent_bis:
+  {
+    \str_if_empty:NTF \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
-        \str_set:Nn \l_@@_status_arrow_str { independent }
-        \str_if_eq:VnF \l_keys_value_tl { NoValue }
-          { \@@_error:n { Value~for~a~key } }
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
+        \str_set:Nn \l__witharrows_status_arrow_str { independent }
       }
-      { \@@_error:n { Incompatible~options~in~Arrow } }
+      { \__witharrows_error:n { Incompatible~options~in~Arrow } }
   }
 \keys_define:nn { WithArrows / Arrow / FirstPass }
   {
     jump .code:n =
       \int_compare:nTF { #1 > 0 }
-        { \int_set:Nn \l_@@_jump_int { #1 } }
-        { \@@_error:n { Negative~jump } } ,
+        { \int_set:Nn \l__witharrows_jump_int { #1 } }
+        { \__witharrows_error:n { Negative~jump } } ,
     jump .value_required:n  = true,
-    rr .code:n = \@@_set_independent: ,
-    ll .code:n = \@@_set_independent: ,
-    rl .code:n = \@@_set_independent: ,
-    lr .code:n = \@@_set_independent: ,
-    i  .code:n = \@@_set_independent: ,
+    rr .code:n = \__witharrows_set_independent: ,
+    ll .code:n = \__witharrows_set_independent: ,
+    rl .code:n = \__witharrows_set_independent: ,
+    lr .code:n = \__witharrows_set_independent: ,
+    i  .code:n = \__witharrows_set_independent: ,
     rr .default:n = NoValue ,
     ll .default:n = NoValue ,
     rl .default:n = NoValue ,
@@ -441,9 +430,9 @@
     i  .default:n = NoValue ,
     new-group .value_forbidden:n = true,
     new-group .code:n =
-      \int_compare:nTF { \l_@@_pos_arrow_int = 6 }
-        { \str_set:Nn \l_@@_status_arrow_str { new-group } }
-        { \@@_error:n { new-group~without~groups } } ,
+      \int_compare:nTF { \l__witharrows_pos_arrow_int = 6 }
+        { \str_set:Nn \l__witharrows_status_arrow_str { new-group } }
+        { \__witharrows_error:n { new-group~without~groups } } ,
     tikz-code .code:n = \prg_do_nothing: ,
     tikz-code .value_required:n = true ,
     tikz .code:n = \prg_do_nothing: ,
@@ -456,208 +445,208 @@
     adjust .value_required:n = true ,
     xoffset .code:n = ,
     unknown .code:n =
-      \@@_sort_seq:N \l_@@_options_Arrow_seq
-      \seq_if_in:NVTF \l_@@_options_WithArrows_seq \l_keys_key_tl
+      \__witharrows_sort_seq:N \l__witharrows_options_Arrow_seq
+      \seq_if_in:NVTF \l__witharrows_options_WithArrows_seq \l_keys_key_tl
         {
           \str_set:Nn \l_tmpa_str
            { ~However,~this~key~can~be~used~in~the~options~of~{WithArrows}. }
         }
         { \str_clear:N \l_tmpa_str }
-      \@@_error:n { Unknown~option~in~Arrow }
+      \__witharrows_error:n { Unknown~option~in~Arrow }
   }
-\seq_new:N \l_@@_options_Arrow_seq
-\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_seq
+\seq_new:N \l__witharrows_options_Arrow_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_seq
   {
     adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, tikz-code,
     xoffset
   }
-\cs_new_protected:Npn \@@_fix_pos_arrow:n #1
+\cs_new_protected:Npn \__witharrows_fix_pos_arrow:n #1
   {
-    \str_if_empty:NT \l_@@_previous_key_str
+    \str_if_empty:NT \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
-        \int_set:Nn \l_@@_pos_arrow_int { #1 }
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
+        \int_set:Nn \l__witharrows_pos_arrow_int { #1 }
       }
   }
 \keys_define:nn {WithArrows / Arrow / SecondPass }
   {
-    tikz-code .tl_set:N = \l_@@_tikz_code_tl ,
+    tikz-code .tl_set:N = \l__witharrows_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 ,
-    ll .code:n = \@@_fix_pos_arrow:n 1 ,
-    rl .code:n = \@@_fix_pos_arrow:n 2 ,
-    lr .code:n = \@@_fix_pos_arrow:n 0 ,
-    i  .code:n = \@@_fix_pos_arrow:n 5 ,
+    rr .code:n = \__witharrows_fix_pos_arrow:n 3 ,
+    ll .code:n = \__witharrows_fix_pos_arrow:n 1 ,
+    rl .code:n = \__witharrows_fix_pos_arrow:n 2 ,
+    lr .code:n = \__witharrows_fix_pos_arrow:n 0 ,
+    i  .code:n = \__witharrows_fix_pos_arrow:n 5 ,
     xoffset .code:n  =
       \bool_if:nTF
         {
-          \int_compare_p:nNn \g_@@_arrow_int > 1
+          \int_compare_p:nNn \g__witharrows_arrow_int > 1
           &&
-          \int_compare_p:nNn \l_@@_pos_arrow_int > 5
+          \int_compare_p:nNn \l__witharrows_pos_arrow_int > 5
           &&
-          ! \str_if_eq_p:Vn \l_@@_status_arrow_str { independent }
+          ! \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent }
         }
-        { \@@_error:n { Option~xoffset~forbidden } }
-        { \dim_set:Nn \l_@@_xoffset_dim { #1 } } ,
+        { \__witharrows_error:n { Option~xoffset~forbidden } }
+        { \dim_set:Nn \l__witharrows_xoffset_dim { #1 } } ,
     xoffset .value_required:n = true ,
-    start-adjust .dim_set:N = \l_@@_start_adjust_dim,
-    end-adjust .dim_set:N = \l_@@_end_adjust_dim,
+    start-adjust .dim_set:N = \l__witharrows_start_adjust_dim,
+    end-adjust .dim_set:N = \l__witharrows_end_adjust_dim,
     adjust .code:n  =
-      \dim_set:Nn \l_@@_start_adjust_dim { #1 }
-      \dim_set:Nn \l_@@_end_adjust_dim { #1 } ,
+      \dim_set:Nn \l__witharrows_start_adjust_dim { #1 }
+      \dim_set:Nn \l__witharrows_end_adjust_dim { #1 } ,
   }
 \cs_set_protected:Npn \WithArrowsOptions #1
   {
-    \str_clear_new:N \l_@@_previous_key_str
+    \str_clear_new:N \l__witharrows_previous_key_str
     \keys_set:nn { WithArrows / WithArrowsOptions } { #1 }
   }
-\cs_new_protected:Npn \@@_Arrow
+\cs_new_protected:Npn \__witharrows_Arrow
   {
     \peek_meaning:NTF [
-      { \@@_Arrow_i }
-      { \@@_Arrow_i [ ] }
+      { \__witharrows_Arrow_i }
+      { \__witharrows_Arrow_i [ ] }
   }
-\cs_new_protected:Npn \@@_Arrow_i [ #1 ] #2
+\cs_new_protected:Npn \__witharrows_Arrow_i [ #1 ] #2
   {
     \peek_meaning:NTF [
-      { \@@_Arrow_ii [ #1 ] { #2 } }
-      { \@@_Arrow_ii [ #1 ] { #2 } [ ] }
+      { \__witharrows_Arrow_ii [ #1 ] { #2 } }
+      { \__witharrows_Arrow_ii [ #1 ] { #2 } [ ] }
   }
-\cs_new_protected:Npn \@@_Arrow_ii [ #1 ] #2 [ #3 ]
+\cs_new_protected:Npn \__witharrows_Arrow_ii [ #1 ] #2 [ #3 ]
   {
-    \int_gincr:N \g_@@_arrow_int
-    \str_clear_new:N \l_@@_previous_key_str
+    \int_gincr:N \g__witharrows_arrow_int
+    \str_clear_new:N \l__witharrows_previous_key_str
     \keys_set:nn { WithArrows / Arrow / FirstPass } { #1 , #3 }
-    \prop_put:NnV \l_tmpa_prop { initial } \g_@@_line_int
-    \int_set:Nn \l_tmpa_int { \g_@@_line_int + \l_@@_jump_int }
+    \prop_put:NnV \l_tmpa_prop { initial } \g__witharrows_line_int
+    \int_set:Nn \l_tmpa_int { \g__witharrows_line_int + \l__witharrows_jump_int }
     \prop_put:NnV \l_tmpa_prop { final } \l_tmpa_int
-    \prop_put:NnV \l_tmpa_prop { status } \l_@@_status_arrow_str
+    \prop_put:NnV \l_tmpa_prop { status } \l__witharrows_status_arrow_str
     \prop_put:Nnn \l_tmpa_prop { options } { #1 , #3 }
     \prop_put:Nnn \l_tmpa_prop { label } { #2 }
     \prop_put:Nnx \l_tmpa_prop { input-line } \msg_line_number:
     \prop_gclear_new:c
-      { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \g_@@_arrow_int _ prop }
+      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop }
     \prop_gset_eq:cN
-      { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \g_@@_arrow_int _ prop }
+      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop }
       \l_tmpa_prop
   }
-\cs_new_protected:Npn \@@_Arrow_first_columns:
-  { \@@_error:n { Arrow~not~in~last~column } \@@_Arrow }
-\cs_new_protected:Npn \@@_pre_halign:n #1
+\cs_new_protected:Npn \__witharrows_Arrow_first_columns:
+  { \__witharrows_error:n { Arrow~not~in~last~column } \__witharrows_Arrow }
+\cs_new_protected:Npn \__witharrows_pre_halign:n #1
   {
     \cs_if_exist:NT \tikz at library@external at loaded
       { \tikzset { external / export = false } }
-    \str_clear_new:N \l_@@_name_str
-    \str_clear_new:N \l_@@_status_arrow_str
-    \dim_zero_new:N \l_@@_x_dim
-    \str_clear_new:N \l_@@_input_line_str
-    \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
-    \seq_gput_right:NV \g_@@_static_col_int_seq \g_@@_static_col_int
-    \int_gzero:N \g_@@_static_col_int
-    \seq_gput_right:Nn \g_@@_position_in_the_tree_seq 1
-    \seq_set_eq:NN \l_tmpa_seq \g_@@_position_in_the_tree_seq
+    \str_clear_new:N \l__witharrows_name_str
+    \str_clear_new:N \l__witharrows_status_arrow_str
+    \dim_zero_new:N \l__witharrows_x_dim
+    \str_clear_new:N \l__witharrows_input_line_str
+    \seq_gput_right:NV \g__witharrows_arrow_int_seq \g__witharrows_arrow_int
+    \int_gzero:N \g__witharrows_arrow_int
+    \seq_gput_right:NV \g__witharrows_line_int_seq \g__witharrows_line_int
+    \int_gzero:N \g__witharrows_line_int
+    \seq_gput_right:NV \g__witharrows_col_int_seq \g__witharrows_col_int
+    \int_gzero:N \g__witharrows_col_int
+    \seq_gput_right:NV \g__witharrows_static_col_int_seq \g__witharrows_static_col_int
+    \int_gzero:N \g__witharrows_static_col_int
+    \seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1
+    \seq_set_eq:NN \l_tmpa_seq \g__witharrows_position_in_the_tree_seq
     \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
-    \str_clear_new:N \l_@@_prefix_str
-    \str_set:Nx \l_@@_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - }
-    \cs_set_eq:NN \\ \@@_cr:
+    \str_clear_new:N \l__witharrows_prefix_str
+    \str_set:Nx \l__witharrows_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - }
+    \cs_set_eq:NN \\ \__witharrows_cr:
     \dim_zero:N \mathsurround
-    \int_zero_new:N \l_@@_initial_int
-    \int_zero_new:N \l_@@_final_int
-    \int_zero_new:N \l_@@_arrow_int
-    \int_zero_new:N \l_@@_pos_of_arrow_int
-    \int_zero_new:N \l_@@_jump_int
-    \int_set:Nn \l_@@_jump_int \c_one_int
-    \str_set:Nn \l_@@_format_str { rl }
-    \skip_zero:N \l_@@_interline_skip
-    \tl_clear_new:N \l_@@_code_before_tl
-    \tl_clear_new:N \l_@@_code_after_tl
-    \str_clear_new:N \l_@@_previous_key_str
-    \bool_if:NT \l_@@_in_WithArrows_bool
+    \int_zero_new:N \l__witharrows_initial_int
+    \int_zero_new:N \l__witharrows_final_int
+    \int_zero_new:N \l__witharrows_arrow_int
+    \int_zero_new:N \l__witharrows_pos_of_arrow_int
+    \int_zero_new:N \l__witharrows_jump_int
+    \int_set:Nn \l__witharrows_jump_int \c_one_int
+    \str_set:Nn \l__witharrows_format_str { rl }
+    \skip_zero:N \l__witharrows_interline_skip
+    \tl_clear_new:N \l__witharrows_code_before_tl
+    \tl_clear_new:N \l__witharrows_code_after_tl
+    \str_clear_new:N \l__witharrows_previous_key_str
+    \bool_if:NT \l__witharrows_in_WithArrows_bool
       { \keys_set:nn { WithArrows / WithArrows } { #1 } }
-    \bool_if:NT \l_@@_in_DispWithArrows_bool
+    \bool_if:NT \l__witharrows_in_DispWithArrows_bool
       { \keys_set:nn { WithArrows / DispWithArrows } { #1 } }
-    \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_first_columns:
-    \int_set:Nn \l_@@_nb_cols_int { \str_count:N \l_@@_format_str }
-    \int_gset_eq:NN \g_@@_col_int \l_@@_nb_cols_int
-    \seq_clear_new:N \l_@@_format_seq
-    \seq_set_split:NnV \l_@@_format_seq { } \l_@@_format_str
-    \l_@@_code_before_tl
+    \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_first_columns:
+    \int_set:Nn \l__witharrows_nb_cols_int { \str_count:N \l__witharrows_format_str }
+    \int_gset_eq:NN \g__witharrows_col_int \l__witharrows_nb_cols_int
+    \seq_clear_new:N \l__witharrows_format_seq
+    \seq_set_split:NnV \l__witharrows_format_seq { } \l__witharrows_format_str
+    \l__witharrows_code_before_tl
     \spread at equation
   }
-\cs_new_protected:Npn \@@_construct_halign:
+\cs_new_protected:Npn \__witharrows_construct_halign:
   {
-    \seq_pop_right:NNTF \l_@@_format_seq \l_@@_type_col_str
+    \seq_pop_right:NNTF \l__witharrows_format_seq \l__witharrows_type_col_str
       {
         \use:x
           {
-            \int_gdecr:N \g_@@_col_int
-            \@@_construct_halign:
-            \int_compare:nNnT \g_@@_col_int = \l_@@_nb_cols_int
+            \int_gdecr:N \g__witharrows_col_int
+            \__witharrows_construct_halign:
+            \int_compare:nNnT \g__witharrows_col_int = \l__witharrows_nb_cols_int
               {
-                \cs_set_eq:cN { \l_@@_command_name_str } \@@_Arrow
+                \cs_set_eq:cN { \l__witharrows_command_name_str } \__witharrows_Arrow
               }
-            \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
-            \int_gset:Nn \g_@@_static_col_int { \int_use:N \g_@@_col_int }
+            \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil
+            \str_if_eq:VnT \l__witharrows_type_col_str { r } \hfill
+            \int_gincr:N \g__witharrows_col_int
+            \int_gset:Nn \g__witharrows_static_col_int { \int_use:N \g__witharrows_col_int }
             \c_math_toggle_token
               {
                 { }
-                \bool_if:NT \l_@@_displaystyle_bool \displaystyle
+                \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
                 ####
               }
             \c_math_toggle_token
-            \int_compare:nNnTF \g_@@_col_int = \l_@@_nb_cols_int
-              { \@@_construct_nodes: }
+            \int_compare:nNnTF \g__witharrows_col_int = \l__witharrows_nb_cols_int
+              { \__witharrows_construct_nodes: }
               {
-                \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 }
+                \str_if_eq:VnT \l__witharrows_type_col_str { l } \hfil
+                \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil
+                \bool_if:NT \l__witharrows_in_DispWithArrows_bool { \tabskip = \c_zero_skip }
                 &
               }
           }
       }
       {
-        \bool_if:NTF \l_@@_in_WithArrows_bool
+        \bool_if:NTF \l__witharrows_in_WithArrows_bool
           {
             \ialign
             \bgroup
           }
           {
-            \halign to \l_@@_linewidth_dim
+            \halign to \l__witharrows_linewidth_dim
             \bgroup
-            \bool_if:NT \l_@@_fleqn_bool
-              { \skip_horizontal:N \l_@@_mathindent_dim }
+            \bool_if:NT \l__witharrows_fleqn_bool
+              { \skip_horizontal:N \l__witharrows_mathindent_dim }
           }
-        \int_gincr:N \g_@@_line_int
-        \int_gzero:N \g_@@_col_int
-        \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl
+        \int_gincr:N \g__witharrows_line_int
+        \int_gzero:N \g__witharrows_col_int
+        \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl
           {
             \skip_horizontal:n
-              { \box_wd:N \l_@@_left_brace_box + \l_@@_delim_wd_dim }
+              { \box_wd:N \l__witharrows_left_brace_box + \l__witharrows_delim_wd_dim }
           }
         \strut
       }
   }
-\cs_new_protected:Npn \@@_construct_nodes:
+\cs_new_protected:Npn \__witharrows_construct_nodes:
   {
     \tikz [ remember~picture , overlay ]
       \node
         [
           node~contents = { } ,
-          @@_node_style ,
-          name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - l ,
+          __witharrows_node_style ,
+          name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - l ,
           alias =
             {
-              \str_if_empty:NF \l_@@_name_str
-                { \l_@@_name_str - \int_use:N \g_@@_line_int - l }
+              \str_if_empty:NF \l__witharrows_name_str
+                { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - l }
             }
         ]
         ;
@@ -666,19 +655,19 @@
       \node
         [
           node~contents = { } ,
-          @@_node_style ,
-          name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r ,
+          __witharrows_node_style ,
+          name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r ,
           alias =
             {
-              \str_if_empty:NF \l_@@_name_str
-                { \l_@@_name_str - \int_use:N \g_@@_line_int - r }
+              \str_if_empty:NF \l__witharrows_name_str
+                { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - r }
             }
         ]
         ;
-    \bool_if:NT \l_@@_show_node_names_bool
+    \bool_if:NT \l__witharrows_show_node_names_bool
       {
         \hbox_overlap_right:n
-          { \small wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r }
+          { \small wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r }
       }
   }
 \cs_new_protected:Npn \WithArrows
@@ -690,21 +679,21 @@
   }
 \cs_new_protected:Npn \WithArrows_i [ #1 ]
   {
-    \bool_set_true:N \l_@@_in_WithArrows_bool
-    \bool_set_false:N \l_@@_in_DispWithArrows_bool
-    \str_clear_new:N \l_@@_type_env_str
-    \str_set:Nn \l_@@_type_env_str { WithArrows }
-    \@@_pre_halign:n { #1 }
+    \bool_set_true:N \l__witharrows_in_WithArrows_bool
+    \bool_set_false:N \l__witharrows_in_DispWithArrows_bool
+    \str_clear_new:N \l__witharrows_type_env_str
+    \str_set:Nn \l__witharrows_type_env_str { WithArrows }
+    \__witharrows_pre_halign:n { #1 }
     \if_mode_math: \else:
-      \@@_error:n { WithArrows~outside~math~mode }
+      \__witharrows_error:n { WithArrows~outside~math~mode }
     \fi:
-    \int_case:nn \l_@@_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
+    \int_case:nn \l__witharrows_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
     \bgroup
-    \@@_construct_halign:
+    \__witharrows_construct_halign:
     &&
-    \@@_error:n { Too~much~columns~in~WithArrows }
+    \__witharrows_error:n { Too~much~columns~in~WithArrows }
     \c_math_toggle_token
-    \bool_if:NT \l_@@_displaystyle_bool \displaystyle
+    \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
     { ## }
     \c_math_toggle_token
     \cr
@@ -714,73 +703,73 @@
     \\
     \egroup
     \egroup
-    \@@_post_halign:
+    \__witharrows_post_halign:
     \group_end:
   }
-\cs_new_protected:Npn \@@_post_halign:
+\cs_new_protected:Npn \__witharrows_post_halign:
   {
-    \cs_set:Npn \WithArrowsRightX { \g_@@_right_x_dim }
+    \cs_set:Npn \WithArrowsRightX { \g__witharrows_right_x_dim }
     \normalbaselines
-    \int_compare:nNnT \g_@@_arrow_int > 0
+    \int_compare:nNnT \g__witharrows_arrow_int > 0
       {
-        \int_compare:nNnT \g_@@_arrow_int = 1
+        \int_compare:nNnT \g__witharrows_arrow_int = 1
           {
-            \int_compare:nNnT \l_@@_pos_arrow_int > 5
-              { \int_set:Nn \l_@@_pos_arrow_int 5 }
+            \int_compare:nNnT \l__witharrows_pos_arrow_int > 5
+              { \int_set:Nn \l__witharrows_pos_arrow_int 5 }
           }
-        \@@_scan_arrows:
+        \__witharrows_scan_arrows:
       }
     \group_begin:
-      \tikzset { every~picture / .style = @@_standard }
-      \cs_set:Npn \WithArrowsNbLines { \int_use:N \g_@@_line_int }
-      \cs_set_eq:NN \MultiArrow \@@_MultiArrow:nn
-      \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_code_after
-      \bool_set_true:N \l_@@_in_code_after_bool
-      \l_@@_code_after_tl
+      \tikzset { every~picture / .style = __witharrows_standard }
+      \cs_set:Npn \WithArrowsNbLines { \int_use:N \g__witharrows_line_int }
+      \cs_set_eq:NN \MultiArrow \__witharrows_MultiArrow:nn
+      \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_code_after
+      \bool_set_true:N \l__witharrows_in_code_after_bool
+      \l__witharrows_code_after_tl
     \group_end:
-    \seq_gpop_right:NN \g_@@_position_in_the_tree_seq \l_tmpa_tl
-    \seq_gpop_right:NN \g_@@_position_in_the_tree_seq \l_tmpa_tl
-    \seq_gput_right:Nx \g_@@_position_in_the_tree_seq
+    \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl
+    \seq_gput_right:Nx \g__witharrows_position_in_the_tree_seq
       { \int_eval:n { \l_tmpa_tl + 1 } }
-    \int_compare:nNnT { \seq_count:N \g_@@_position_in_the_tree_seq } = 1
-      { \int_gincr:N \g_@@_last_env_int }
-    \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
-    \seq_gpop_right:NN \g_@@_static_col_int_seq \l_tmpa_tl
-    \int_gset:Nn \g_@@_static_col_int \l_tmpa_tl
+    \int_compare:nNnT { \seq_count:N \g__witharrows_position_in_the_tree_seq } = 1
+      { \int_gincr:N \g__witharrows_last_env_int }
+    \seq_gpop_right:NN \g__witharrows_arrow_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_arrow_int \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_line_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_line_int \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_col_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_col_int \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_static_col_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_static_col_int \l_tmpa_tl
   }
-\cs_new_protected:Npn \@@_cr:
+\cs_new_protected:Npn \__witharrows_cr:
   {
     \scan_stop:
-    \int_compare:nNnF \g_@@_col_int = \g_@@_static_col_int
-      { \@@_error:n { omit~probably~used } }
-    \prg_replicate:nn { \l_@@_nb_cols_int - \g_@@_static_col_int } { & { } }
+    \int_compare:nNnF \g__witharrows_col_int = \g__witharrows_static_col_int
+      { \__witharrows_error:n { omit~probably~used } }
+    \prg_replicate:nn { \l__witharrows_nb_cols_int - \g__witharrows_static_col_int } { & { } }
     \group_align_safe_begin:
-    \peek_meaning_remove:NTF * \@@_cr_i: \@@_cr_i:
+    \peek_meaning_remove:NTF * \__witharrows_cr_i: \__witharrows_cr_i:
   }
-\cs_new_protected:Npn \@@_cr_i:
-  { \peek_meaning:NTF [ \@@_cr_ii: { \@@_cr_ii: [ \c_zero_dim ] } }
-\cs_new_protected:Npn \@@_cr_ii: [ #1 ]
+\cs_new_protected:Npn \__witharrows_cr_i:
+  { \peek_meaning:NTF [ \__witharrows_cr_ii: { \__witharrows_cr_ii: [ \c_zero_dim ] } }
+\cs_new_protected:Npn \__witharrows_cr_ii: [ #1 ]
   {
     \group_align_safe_end:
-    \bool_if:NT \l_@@_in_DispWithArrows_bool
+    \bool_if:NT \l__witharrows_in_DispWithArrows_bool
       {
             &
-            \tikz [ @@_standard ]
-               \coordinate ( \int_use:N \g_@@_line_int - v ) ;
+            \tikz [ __witharrows_standard ]
+               \coordinate ( \int_use:N \g__witharrows_line_int - v ) ;
       }
     \dim_compare:nNnT { #1 } < \c_zero_dim
-       { \@@_error:n { option~of~cr~negative } }
+       { \__witharrows_error:n { option~of~cr~negative } }
 
     \cr
     \noalign
       {
         \dim_set:Nn \l_tmpa_dim { \dim_max:nn { #1 } \c_zero_dim }
-        \skip_vertical:n { \l_tmpa_dim + \l_@@_interline_skip }
+        \skip_vertical:n { \l_tmpa_dim + \l__witharrows_interline_skip }
         \scan_stop:
       }
   }
@@ -799,12 +788,12 @@
   }
 \cs_new_protected:Npn \DispWithArrows_ii < #1 > [ #2 ]
   {
-    \bool_set_true:N \l_@@_in_DispWithArrows_bool
-    \str_clear_new:N \l_@@_type_env_str
-    \str_set:Nn \l_@@_type_env_str { DispWithArrows }
-    \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l_@@_left_brace_tl { #1 } }
-    \@@_pre_halign:n { #2 }
-    \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl
+    \bool_set_true:N \l__witharrows_in_DispWithArrows_bool
+    \str_clear_new:N \l__witharrows_type_env_str
+    \str_set:Nn \l__witharrows_type_env_str { DispWithArrows }
+    \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l__witharrows_left_brace_tl { #1 } }
+    \__witharrows_pre_halign:n { #2 }
+    \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl
       {
         \hbox_set:Nn \l_tmpa_box
           {
@@ -811,20 +800,20 @@
             \group_begin:
             \dim_set_eq:NN \nulldelimiterspace \c_zero_dim
             \c_math_toggle_token
-            \left \l_@@_replace_left_brace_by_tl \vcenter to 1 cm { } \right.
+            \left \l__witharrows_replace_left_brace_by_tl \vcenter to 1 cm { } \right.
             \c_math_toggle_token
             \group_end:
           }
-        \dim_zero_new:N \l_@@_delim_wd_dim
-        \dim_set:Nn \l_@@_delim_wd_dim { \box_wd:N \l_tmpa_box }
-        \box_clear_new:N \l_@@_left_brace_box
-        \hbox_set:Nn \l_@@_left_brace_box
+        \dim_zero_new:N \l__witharrows_delim_wd_dim
+        \dim_set:Nn \l__witharrows_delim_wd_dim { \box_wd:N \l_tmpa_box }
+        \box_clear_new:N \l__witharrows_left_brace_box
+        \hbox_set:Nn \l__witharrows_left_brace_box
           {
             \group_begin:
-              \cs_set_eq:NN \label \@@_old_label
+              \cs_set_eq:NN \label \__witharrows_old_label
               \c_math_toggle_token
-              \bool_if:NT \l_@@_displaystyle_bool \displaystyle
-              \l_@@_left_brace_tl
+              \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
+              \l__witharrows_left_brace_tl
               { }
               \c_math_toggle_token
             \group_end:
@@ -831,7 +820,7 @@
           }
       }
     \if_mode_math:
-      \@@_fatal:n { DispWithArrows~in~math~mode }
+      \__witharrows_fatal:n { DispWithArrows~in~math~mode }
     \fi:
      \dim_zero_new:N \linewidth
      \dim_set_eq:NN \linewidth \displaywidth
@@ -840,21 +829,21 @@
         \hbox_to_wd:nn { .6 \linewidth } { }
         \fi:
         \c_math_toggle_token \c_math_toggle_token
-    \dim_zero_new:N \l_@@_linewidth_dim
-    \dim_set_eq:NN \l_@@_linewidth_dim \displaywidth
-    \box_clear_new:N \l_@@_halign_box
-    \setbox \l_@@_halign_box \vtop \bgroup
+    \dim_zero_new:N \l__witharrows_linewidth_dim
+    \dim_set_eq:NN \l__witharrows_linewidth_dim \displaywidth
+    \box_clear_new:N \l__witharrows_halign_box
+    \setbox \l__witharrows_halign_box \vtop \bgroup
     \tabskip =
-      \bool_if:NTF \l_@@_fleqn_bool
+      \bool_if:NTF \l__witharrows_fleqn_bool
         \c_zero_skip
         { 0 pt plus 1000 pt minus 1000 pt }
-    \@@_construct_halign:
+    \__witharrows_construct_halign:
     \tabskip = 0 pt plus 1000 pt minus 1000 pt
     &
     $ ## $
     \tabskip = \c_zero_skip
     &&
-    \@@_fatal:n { Too~much~columns~in~DispWithArrows }
+    \__witharrows_fatal:n { Too~much~columns~in~DispWithArrows }
     \bool_if:nT \c_false_bool { ## }
     \cr
   }
@@ -866,34 +855,34 @@
     \box_set_to_last:N \l_tmpa_box
     \nointerlineskip
     \box_use:N \l_tmpa_box
-    \dim_gzero_new:N \g_@@_alignment_dim
-    \dim_gset:Nn \g_@@_alignment_dim { \box_wd:N \l_tmpa_box }
-    \box_clear_new:N \l_@@_new_box
-    \hbox_set:Nn \l_@@_new_box { \hbox_unpack_clear:N \l_tmpa_box }
+    \dim_gzero_new:N \g__witharrows_alignment_dim
+    \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l_tmpa_box }
+    \box_clear_new:N \l__witharrows_new_box
+    \hbox_set:Nn \l__witharrows_new_box { \hbox_unpack_clear:N \l_tmpa_box }
     \dim_compare:nNnT
-      { \box_wd:N \l_@@_new_box } < \g_@@_alignment_dim
-      { \dim_gset:Nn \g_@@_alignment_dim { \box_wd:N \l_@@_new_box } }
+      { \box_wd:N \l__witharrows_new_box } < \g__witharrows_alignment_dim
+      { \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l__witharrows_new_box } }
     \egroup
-     \tl_if_eq:NNTF \l_@@_left_brace_tl \c_novalue_tl
-       { \box_use_drop:N \l_@@_halign_box }
+     \tl_if_eq:NNTF \l__witharrows_left_brace_tl \c_novalue_tl
+       { \box_use_drop:N \l__witharrows_halign_box }
        {
-         \hbox_to_wd:nn \l_@@_linewidth_dim
+         \hbox_to_wd:nn \l__witharrows_linewidth_dim
            {
-            \bool_if:NTF \l_@@_fleqn_bool
-              { \skip_horizontal:n \l_@@_mathindent_dim }
+            \bool_if:NTF \l__witharrows_fleqn_bool
+              { \skip_horizontal:n \l__witharrows_mathindent_dim }
               \hfil
-            \hbox_to_wd:nn \g_@@_alignment_dim
+            \hbox_to_wd:nn \g__witharrows_alignment_dim
               {
-                \box_use_drop:N \l_@@_left_brace_box
+                \box_use_drop:N \l__witharrows_left_brace_box
                 \dim_set:Nn \l_tmpa_dim
                   {
-                    \box_ht:N \l_@@_halign_box
-                    + \box_dp:N \l_@@_halign_box
+                    \box_ht:N \l__witharrows_halign_box
+                    + \box_dp:N \l__witharrows_halign_box
                   }
                 \group_begin:
                 \dim_set_eq:NN \nulldelimiterspace \c_zero_dim
                 \c_math_toggle_token
-                  \left \l_@@_replace_left_brace_by_tl
+                  \left \l__witharrows_replace_left_brace_by_tl
                     \vcenter to \l_tmpa_dim { \vfil }
                   \right.
                 \c_math_toggle_token
@@ -902,266 +891,266 @@
               }
             \hfil
            }
-         \skip_horizontal:n { - \l_@@_linewidth_dim }
-         \vcenter { \box_use_drop:N \l_@@_halign_box }
+         \skip_horizontal:n { - \l__witharrows_linewidth_dim }
+         \vcenter { \box_use_drop:N \l__witharrows_halign_box }
        }
-    \dim_gzero_new:N \g_@@_right_x_dim
-    \dim_gset_eq:NN \g_@@_right_x_dim \c_max_dim
-    \tikzpicture [ @@_standard ]
-      \int_step_variable:nNn \g_@@_line_int \l_tmpa_int
+    \dim_gzero_new:N \g__witharrows_right_x_dim
+    \dim_gset_eq:NN \g__witharrows_right_x_dim \c_max_dim
+    \tikzpicture [ __witharrows_standard ]
+      \int_step_variable:nNn \g__witharrows_line_int \l_tmpa_int
         {
           \cs_if_free:cTF
-            { pgf at sh@ns at wa - \l_@@_prefix_str - \l_tmpa_int - v }
-            { \@@_fatal:n { Inexistent~v-node } }
+            { pgf at sh@ns at wa - \l__witharrows_prefix_str - \l_tmpa_int - v }
+            { \__witharrows_fatal: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 }
+              \dim_compare:nNnT \l_tmpa_dim < \g__witharrows_right_x_dim
+                { \dim_gset:Nn \g__witharrows_right_x_dim \l_tmpa_dim }
             }
         }
     \endtikzpicture
-    \@@_post_halign:
+    \__witharrows_post_halign:
       \c_math_toggle_token \c_math_toggle_token
     \group_end:
   }
-\cs_new_protected:Npn \@@_if_in_last_col_of_disp:Nn #1 #2
+\cs_new_protected:Npn \__witharrows_if_in_last_col_of_disp:Nn #1 #2
   {
-    \bool_if:NTF \l_@@_in_WithArrows_bool
-      { \@@_error:nn { Not~allowed~in~WithArrows } { #1 } }
+    \bool_if:NTF \l__witharrows_in_WithArrows_bool
+      { \__witharrows_error:nn { Not~allowed~in~WithArrows } { #1 } }
       {
-        \int_compare:nNnTF \g_@@_col_int < \l_@@_nb_cols_int
-          { \@@_error:nn { Not~allowed~in~DispWithArrows } { #1 } }
+        \int_compare:nNnTF \g__witharrows_col_int < \l__witharrows_nb_cols_int
+          { \__witharrows_error:nn { Not~allowed~in~DispWithArrows } { #1 } }
           { #2 }
       }
   }
-\cs_new_protected:Npn \@@_scan_arrows:
+\cs_new_protected:Npn \__witharrows_scan_arrows:
   {
     \group_begin:
-    \int_compare:nNnT \l_@@_pos_arrow_int = 7
+    \int_compare:nNnT \l__witharrows_pos_arrow_int = 7
       {
-        \@@_scan_arrows_i:
-        \int_set:Nn \l_@@_pos_arrow_int 8
+        \__witharrows_scan_arrows_i:
+        \int_set:Nn \l__witharrows_pos_arrow_int 8
       }
-    \@@_scan_arrows_i:
+    \__witharrows_scan_arrows_i:
     \group_end:
   }
-\cs_new_protected:Npn \@@_scan_arrows_i:
+\cs_new_protected:Npn \__witharrows_scan_arrows_i:
   {
-    \int_zero_new:N \l_@@_first_arrow_of_group_int
-    \int_zero_new:N \l_@@_first_line_of_group_int
-    \int_zero_new:N \l_@@_last_line_of_group_int
-    \seq_clear_new:N \l_@@_first_arrows_seq
-    \seq_clear_new:N \l_@@_last_arrows_seq
-    \bool_set_true:N \l_@@_new_group_bool
-    \int_set:Nn \l_@@_arrow_int \c_one_int
-    \int_until_do:nNnn \l_@@_arrow_int > \g_@@_arrow_int
+    \int_zero_new:N \l__witharrows_first_arrow_of_group_int
+    \int_zero_new:N \l__witharrows_first_line_of_group_int
+    \int_zero_new:N \l__witharrows_last_line_of_group_int
+    \seq_clear_new:N \l__witharrows_first_arrows_seq
+    \seq_clear_new:N \l__witharrows_last_arrows_seq
+    \bool_set_true:N \l__witharrows_new_group_bool
+    \int_set:Nn \l__witharrows_arrow_int \c_one_int
+    \int_until_do:nNnn \l__witharrows_arrow_int > \g__witharrows_arrow_int
       {
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
           { initial } \l_tmpa_tl
-        \int_set:Nn \l_@@_initial_int \l_tmpa_tl
+        \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
           { final } \l_tmpa_tl
-        \int_set:Nn \l_@@_final_int \l_tmpa_tl
+        \int_set:Nn \l__witharrows_final_int \l_tmpa_tl
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
-          { status } \l_@@_status_arrow_str
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { status } \l__witharrows_status_arrow_str
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
-          { input-line } \l_@@_input_line_str
-        \int_compare:nNnTF \l_@@_final_int > \g_@@_line_int
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { input-line } \l__witharrows_input_line_str
+        \int_compare:nNnTF \l__witharrows_final_int > \g__witharrows_line_int
           {
-            \int_compare:nNnF \l_@@_pos_arrow_int = 8
-              { \@@_error:n { Too~few~lines~for~an~arrow } }
+            \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
+              { \__witharrows_error:n { Too~few~lines~for~an~arrow } }
           }
-          \@@_code_for_possible_arrow:
-        \int_incr:N \l_@@_arrow_int
+          \__witharrows_code_for_possible_arrow:
+        \int_incr:N \l__witharrows_arrow_int
       }
     \bool_if:nT
       {
-        \int_compare_p:n { \l_@@_pos_arrow_int != 7 }
+        \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 }
           &&
-        \int_compare_p:nNn \l_@@_first_arrow_of_group_int > 0
+        \int_compare_p:nNn \l__witharrows_first_arrow_of_group_int > 0
       }
-      { \@@_draw_arrows:nn \l_@@_first_arrow_of_group_int \g_@@_arrow_int }
+      { \__witharrows_draw_arrows:nn \l__witharrows_first_arrow_of_group_int \g__witharrows_arrow_int }
   }
-\cs_new_protected:Npn \@@_code_for_possible_arrow:
+\cs_new_protected:Npn \__witharrows_code_for_possible_arrow:
   {
     \bool_if:nT
       {
-        \int_compare_p:nNn \l_@@_arrow_int > \c_one_int
+        \int_compare_p:nNn \l__witharrows_arrow_int > \c_one_int
         &&
-       ( \int_compare_p:n { \l_@@_initial_int > \l_@@_last_line_of_group_int }
+       ( \int_compare_p:n { \l__witharrows_initial_int > \l__witharrows_last_line_of_group_int }
            &&
-         \int_compare_p:n { \l_@@_pos_arrow_int != 7 }
+         \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 }
            ||
-         \str_if_eq_p:Vn \l_@@_status_arrow_str { new-group }
+         \str_if_eq_p:Vn \l__witharrows_status_arrow_str { new-group }
        )
       }
       {
-        \int_compare:nNnF \l_@@_first_arrow_of_group_int = \c_zero_int
+        \int_compare:nNnF \l__witharrows_first_arrow_of_group_int = \c_zero_int
           {
-            \@@_draw_arrows:nn
-              \l_@@_first_arrow_of_group_int
-              { \l_@@_arrow_int - 1 }
+            \__witharrows_draw_arrows:nn
+              \l__witharrows_first_arrow_of_group_int
+              { \l__witharrows_arrow_int - 1 }
           }
-        \bool_set_true:N \l_@@_new_group_bool
+        \bool_set_true:N \l__witharrows_new_group_bool
       }
-    \bool_if:nTF \l_@@_new_group_bool
+    \bool_if:nTF \l__witharrows_new_group_bool
       {
-        \bool_set_false:N \l_@@_new_group_bool
-        \int_set_eq:NN \l_@@_first_arrow_of_group_int \l_@@_arrow_int
-        \int_set_eq:NN \l_@@_first_line_of_group_int \l_@@_initial_int
-        \int_set_eq:NN \l_@@_last_line_of_group_int \l_@@_final_int
-        \seq_clear:N \l_@@_first_arrows_seq
-        \seq_put_left:NV \l_@@_first_arrows_seq \l_@@_arrow_int
-        \seq_clear:N \l_@@_last_arrows_seq
-        \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int
-        \int_compare:nT { \l_@@_pos_arrow_int != 8 }
-          { \dim_set:Nn \l_@@_x_dim { - \c_max_dim } }
+        \bool_set_false:N \l__witharrows_new_group_bool
+        \int_set_eq:NN \l__witharrows_first_arrow_of_group_int \l__witharrows_arrow_int
+        \int_set_eq:NN \l__witharrows_first_line_of_group_int \l__witharrows_initial_int
+        \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int
+        \seq_clear:N \l__witharrows_first_arrows_seq
+        \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int
+        \seq_clear:N \l__witharrows_last_arrows_seq
+        \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int
+        \int_compare:nT { \l__witharrows_pos_arrow_int != 8 }
+          { \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim } }
       }
       {
         \bool_if:nF
-          { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } }
+          { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } }
           {
             \int_compare:nT
-              { \l_@@_initial_int = \l_@@_first_line_of_group_int }
-              { \seq_put_left:NV \l_@@_first_arrows_seq \l_@@_arrow_int }
-            \int_compare:nNnTF \l_@@_final_int > \l_@@_last_line_of_group_int
+              { \l__witharrows_initial_int = \l__witharrows_first_line_of_group_int }
+              { \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int }
+            \int_compare:nNnTF \l__witharrows_final_int > \l__witharrows_last_line_of_group_int
               {
-                \int_set_eq:NN \l_@@_last_line_of_group_int \l_@@_final_int
-                \seq_clear:N \l_@@_last_arrows_seq
-                \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int
+                \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int
+                \seq_clear:N \l__witharrows_last_arrows_seq
+                \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int
               }
               {
-                \int_compare:nNnT \l_@@_final_int = \l_@@_last_line_of_group_int
-                  { \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int }
+                \int_compare:nNnT \l__witharrows_final_int = \l__witharrows_last_line_of_group_int
+                  { \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int }
               }
           }
       }
-    \bool_if:nF { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } }
+    \bool_if:nF { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } }
       {
-        \int_compare:nT { \l_@@_pos_arrow_int != 8 }
-          { \@@_update_x:nn \l_@@_initial_int \l_@@_final_int }
+        \int_compare:nT { \l__witharrows_pos_arrow_int != 8 }
+          { \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int }
       }
   }
 \cs_generate_variant:Nn \keys_set:nn { n o }
-\cs_new_protected:Npn \@@_keys_set:
+\cs_new_protected:Npn \__witharrows_keys_set:
   { \keys_set_known:no { WithArrows / Arrow / SecondPass } }
-\cs_new_protected:Npn \@@_draw_arrows:nn #1 #2
+\cs_new_protected:Npn \__witharrows_draw_arrows:nn #1 #2
   {
     \group_begin:
-    \int_zero_new:N \l_@@_first_arrow_int
-    \int_set:Nn \l_@@_first_arrow_int { #1 }
-    \int_zero_new:N \l_@@_last_arrow_int
-    \int_set:Nn \l_@@_last_arrow_int { #2 }
-    \int_set:Nn \l_@@_arrow_int \l_@@_first_arrow_int
-    \int_until_do:nNnn \l_@@_arrow_int > \l_@@_last_arrow_int
+    \int_zero_new:N \l__witharrows_first_arrow_int
+    \int_set:Nn \l__witharrows_first_arrow_int { #1 }
+    \int_zero_new:N \l__witharrows_last_arrow_int
+    \int_set:Nn \l__witharrows_last_arrow_int { #2 }
+    \int_set:Nn \l__witharrows_arrow_int \l__witharrows_first_arrow_int
+    \int_until_do:nNnn \l__witharrows_arrow_int > \l__witharrows_last_arrow_int
       {
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
           { initial } \l_tmpa_tl
-        \int_set:Nn \l_@@_initial_int \l_tmpa_tl
+        \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
           { final } \l_tmpa_tl
-        \int_set:Nn \l_@@_final_int \l_tmpa_tl
-        \int_compare:nT { \l_@@_final_int <= \g_@@_line_int } \@@_draw_arrows_i:
-        \int_incr:N \l_@@_arrow_int
+        \int_set:Nn \l__witharrows_final_int \l_tmpa_tl
+        \int_compare:nT { \l__witharrows_final_int <= \g__witharrows_line_int } \__witharrows_draw_arrows_i:
+        \int_incr:N \l__witharrows_arrow_int
       }
     \group_end:
   }
-\cs_new_protected:Npn \@@_draw_arrows_i:
+\cs_new_protected:Npn \__witharrows_draw_arrows_i:
   {
     \group_begin:
     \prop_get:cnN
-      { g_@@_arrow _\l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+      { g__witharrows_arrow _\l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
       { options } \l_tmpa_tl
-    \str_clear_new:N \l_@@_previous_key_str
+    \str_clear_new:N \l__witharrows_previous_key_str
     \exp_args:NNo \exp_args:No
-    \@@_keys_set: { \l_tmpa_tl , tikz = { xshift = \l_@@_xoffset_dim } }
-    \bool_set_false:N \l_@@_initial_r_bool
-    \bool_set_false:N \l_@@_final_r_bool
-    \int_case:nn \l_@@_pos_arrow_int
+    \__witharrows_keys_set: { \l_tmpa_tl , tikz = { xshift = \l__witharrows_xoffset_dim } }
+    \bool_set_false:N \l__witharrows_initial_r_bool
+    \bool_set_false:N \l__witharrows_final_r_bool
+    \int_case:nn \l__witharrows_pos_arrow_int
       {
-        0 { \bool_set_true:N \l_@@_final_r_bool }
-        2 { \bool_set_true:N \l_@@_initial_r_bool }
+        0 { \bool_set_true:N \l__witharrows_final_r_bool }
+        2 { \bool_set_true:N \l__witharrows_initial_r_bool }
         3
           {
-            \bool_set_true:N \l_@@_initial_r_bool
-            \bool_set_true:N \l_@@_final_r_bool
+            \bool_set_true:N \l__witharrows_initial_r_bool
+            \bool_set_true:N \l__witharrows_final_r_bool
           }
       }
-    \int_compare:nNnT \l_@@_pos_arrow_int = 5
+    \int_compare:nNnT \l__witharrows_pos_arrow_int = 5
       {
-        \dim_set:Nn \l_@@_x_dim { - \c_max_dim }
-        \@@_update_x:nn \l_@@_initial_int \l_@@_final_int
+        \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim }
+        \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int
       }
-    \tl_set:Nx \l_@@_initial_tl
+    \tl_set:Nx \l__witharrows_initial_tl
       {
-        \int_use:N \l_@@_initial_int - \bool_if:NTF \l_@@_initial_r_bool rl
+        \int_use:N \l__witharrows_initial_int - \bool_if:NTF \l__witharrows_initial_r_bool rl
         .south
       }
-    \tl_set:Nx \l_@@_final_tl
-      { \int_use:N \l_@@_final_int - \bool_if:NTF \l_@@_final_r_bool rl .north }
+    \tl_set:Nx \l__witharrows_final_tl
+      { \int_use:N \l__witharrows_final_int - \bool_if:NTF \l__witharrows_final_r_bool rl .north }
     \prop_get:cnN
-      { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
       { label }
       \l_tmpa_tl
-    \seq_if_in:NxTF \l_@@_first_arrows_seq
-      { \int_use:N \l_@@_arrow_int }
+    \seq_if_in:NxTF \l__witharrows_first_arrows_seq
+      { \int_use:N \l__witharrows_arrow_int }
       { \bool_set_true:N \l_tmpa_bool }
       { \bool_set_false:N \l_tmpa_bool }
-    \seq_if_in:NxTF \l_@@_last_arrows_seq
-      { \int_use:N \l_@@_arrow_int }
+    \seq_if_in:NxTF \l__witharrows_last_arrows_seq
+      { \int_use:N \l__witharrows_arrow_int }
       { \bool_set_true:N \l_tmpb_bool }
       { \bool_set_false:N \l_tmpb_bool }
-    \int_compare:nNnT \l_@@_pos_arrow_int = 5
+    \int_compare:nNnT \l__witharrows_pos_arrow_int = 5
       {
         \bool_set_true:N \l_tmpa_bool
         \bool_set_true:N \l_tmpb_bool
       }
-    \dim_gzero_new:N \g_@@_x_initial_dim
-    \dim_gzero_new:N \g_@@_x_final_dim
-    \dim_gzero_new:N \g_@@_y_initial_dim
-    \dim_gzero_new:N \g_@@_y_final_dim
-    \tikzpicture [ @@_standard ]
-      \tikz at scan@one at point \pgfutil at firstofone ( \l_@@_initial_tl )
-      \dim_gset:Nn \g_@@_x_initial_dim \pgf at x
-      \dim_gset:Nn \g_@@_y_initial_dim \pgf at y
-      \tikz at scan@one at point \pgfutil at firstofone ( \l_@@_final_tl )
-      \dim_gset:Nn \g_@@_x_final_dim \pgf at x
-      \dim_gset:Nn \g_@@_y_final_dim \pgf at y
+    \dim_gzero_new:N \g__witharrows_x_initial_dim
+    \dim_gzero_new:N \g__witharrows_x_final_dim
+    \dim_gzero_new:N \g__witharrows_y_initial_dim
+    \dim_gzero_new:N \g__witharrows_y_final_dim
+    \tikzpicture [ __witharrows_standard ]
+      \tikz at scan@one at point \pgfutil at firstofone ( \l__witharrows_initial_tl )
+      \dim_gset:Nn \g__witharrows_x_initial_dim \pgf at x
+      \dim_gset:Nn \g__witharrows_y_initial_dim \pgf at y
+      \tikz at scan@one at point \pgfutil at firstofone ( \l__witharrows_final_tl )
+      \dim_gset:Nn \g__witharrows_x_final_dim \pgf at x
+      \dim_gset:Nn \g__witharrows_y_final_dim \pgf at y
     \endtikzpicture
     \bool_if:nTF
-      { \dim_compare_p:nNn { \g_@@_y_initial_dim - \g_@@_y_final_dim }
-                                > \l_@@_max_length_of_arrow_dim
+      { \dim_compare_p:nNn { \g__witharrows_y_initial_dim - \g__witharrows_y_final_dim }
+                                > \l__witharrows_max_length_of_arrow_dim
         &&
-        \int_compare_p:nNn { \l_@@_final_int - \l_@@_initial_int } = 1
+        \int_compare_p:nNn { \l__witharrows_final_int - \l__witharrows_initial_int } = 1
       }
       {
         \tl_gset:Nx \g_tmpa_tl
           {
-            \int_compare:nNnTF \l_@@_pos_arrow_int < 5
-              { \dim_use:N \g_@@_x_initial_dim }
-              { \dim_use:N \l_@@_x_dim } ,
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_initial_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
             \dim_eval:n
               {
-                ( \g_@@_y_initial_dim + \g_@@_y_final_dim ) / 2
-                + ( \l_@@_max_length_of_arrow_dim / 2 )
+                ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
+                + ( \l__witharrows_max_length_of_arrow_dim / 2 )
               }
           }
         \tl_gset:Nx \g_tmpb_tl
           {
-            \int_compare:nNnTF \l_@@_pos_arrow_int < 5
-              { \dim_use:N \g_@@_x_final_dim }
-              { \dim_use:N \l_@@_x_dim } ,
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_final_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
             \dim_eval:n
               {
-                ( \g_@@_y_initial_dim + \g_@@_y_final_dim ) / 2
-                - ( \l_@@_max_length_of_arrow_dim / 2 )
+                ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
+                - ( \l__witharrows_max_length_of_arrow_dim / 2 )
               }
           }
       }
@@ -1168,33 +1157,33 @@
       {
         \tl_gset:Nx \g_tmpa_tl
           {
-            \int_compare:nNnTF \l_@@_pos_arrow_int < 5
-              { \dim_use:N \g_@@_x_initial_dim }
-              { \dim_use:N \l_@@_x_dim } ,
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_initial_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
             \bool_if:NTF \l_tmpa_bool
-              { \dim_eval:n { \g_@@_y_initial_dim + \l_@@_start_adjust_dim } }
-              { \dim_use:N \g_@@_y_initial_dim }
+              { \dim_eval:n { \g__witharrows_y_initial_dim + \l__witharrows_start_adjust_dim } }
+              { \dim_use:N \g__witharrows_y_initial_dim }
           }
         \tl_gset:Nx \g_tmpb_tl
           {
-            \int_compare:nNnTF \l_@@_pos_arrow_int < 5
-              { \dim_use:N \g_@@_x_final_dim }
-              { \dim_use:N \l_@@_x_dim } ,
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_final_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
             \bool_if:NTF \l_tmpb_bool
-              { \dim_eval:n { \g_@@_y_final_dim - \l_@@_end_adjust_dim } }
-              { \dim_use:N \g_@@_y_final_dim }
+              { \dim_eval:n { \g__witharrows_y_final_dim - \l__witharrows_end_adjust_dim } }
+              { \dim_use:N \g__witharrows_y_final_dim }
           }
       }
-    \@@_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl
+    \__witharrows_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl
     \group_end:
   }
-\cs_new_protected:Npn \@@_def_function_tmpa:n #1
+\cs_new_protected:Npn \__witharrows_def_function_tmpa:n #1
   {
-    \cs_set:Npn \@@_tmpa:nnn ##1 ##2 ##3
+    \cs_set:Npn \__witharrows_tmpa:nnn ##1 ##2 ##3
       {
         \tikzpicture
           [
-            @@_standard ,
+            __witharrows_standard ,
             every~path / .style = WithArrows / arrow
           ]
           #1
@@ -1201,20 +1190,20 @@
         \endtikzpicture
       }
   }
-\cs_new_protected:Npn \@@_draw_arrow:nnn #1 #2 #3
+\cs_new_protected:Npn \__witharrows_draw_arrow:nnn #1 #2 #3
   {
-    \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 }
-    \exp_args:NV \@@_def_function_tmpa:n \l_@@_tikz_code_tl
-    \@@_tmpa:nnn { #1 } { #2 } { #3 }
+    \bool_if:nT { \l__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool }
+       { \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_wrap_lines_tl }
+    \exp_args:NV \__witharrows_def_function_tmpa:n \l__witharrows_tikz_code_tl
+    \__witharrows_tmpa:nnn { #1 } { #2 } { #3 }
   }
-\cs_generate_variant:Nn \@@_draw_arrow:nnn { n n o }
-\tl_const:Nn \c_@@_tikz_code_wrap_lines_tl
+\cs_generate_variant:Nn \__witharrows_draw_arrow:nnn { n n o }
+\tl_const:Nn \c__witharrows_tikz_code_wrap_lines_tl
   {
-    \draw ( #1 ) to node ( @@_label ) { } ( #2 ) ;
-    \tikz at parse@node \pgfutil at firstofone ( @@_label.west )
+    \draw ( #1 ) to node ( __witharrows_label ) { } ( #2 ) ;
+    \tikz at parse@node \pgfutil at firstofone ( __witharrows_label.west )
     \dim_set:Nn \l_tmpa_dim
-      { \g_@@_right_x_dim - \pgf at x - \pgfkeysvalueof { / pgf / inner~xsep } }
+      { \g__witharrows_right_x_dim - \pgf at x - \pgfkeysvalueof { / pgf / inner~xsep } }
     \path \pgfextra { \tl_gset:Nx \g_tmpa_tl \tikz at text@width } ;
     \tl_if_empty:NF \g_tmpa_tl
       {
@@ -1224,23 +1213,23 @@
       }
     \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim
       {
-        \path ( @@_label.west )
+        \path ( __witharrows_label.west )
            node [ anchor = west , text~width = \dim_use:N \l_tmpa_dim ]
                 { #3 } ;
       }
   }
-\cs_new_protected:Npn \@@_update_x:nn #1 #2
+\cs_new_protected:Npn \__witharrows_update_x:nn #1 #2
   {
     \int_step_inline:nnn { #1 } { #2 }
       {
-        \tikzpicture [ @@_standard ]
+        \tikzpicture [ __witharrows_standard ]
           \tikz at scan@one at point \pgfutil at firstofone ( ##1 - l )
-          \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \l_@@_x_dim \pgf at x }
+          \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \l__witharrows_x_dim \pgf at x }
         \endtikzpicture
-        \dim_set_eq:NN \l_@@_x_dim \g_tmpa_dim
+        \dim_set_eq:NN \l__witharrows_x_dim \g_tmpa_dim
       }
   }
-\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g_@@_last_env_int }
+\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g__witharrows_last_env_int }
 \keys_define:nn { WithArrows / Arrow / code-after }
   {
     tikz     .code:n =
@@ -1247,69 +1236,69 @@
       \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
     tikz     .value_required:n  = true ,
     rr       .value_forbidden:n = true ,
-    rr       .code:n            = \@@_fix_pos_option:n 0 ,
+    rr       .code:n            = \__witharrows_fix_pos_option:n 0 ,
     ll       .value_forbidden:n = true,
-    ll       .code:n            = \@@_fix_pos_option:n 1 ,
+    ll       .code:n            = \__witharrows_fix_pos_option:n 1 ,
     rl       .value_forbidden:n = true ,
-    rl       .code:n            = \@@_fix_pos_option:n 2 ,
+    rl       .code:n            = \__witharrows_fix_pos_option:n 2 ,
     lr       .value_forbidden:n = true ,
-    lr       .code:n            = \@@_fix_pos_option:n 3 ,
+    lr       .code:n            = \__witharrows_fix_pos_option:n 3 ,
     v        .value_forbidden:n = true ,
-    v        .code:n            = \@@_fix_pos_option:n 4 ,
-    tikz-code .tl_set:N          = \l_@@_tikz_code_tl ,
+    v        .code:n            = \__witharrows_fix_pos_option:n 4 ,
+    tikz-code .tl_set:N          = \l__witharrows_tikz_code_tl ,
     tikz-code .value_required:n  = true ,
-    xoffset  .dim_set:N         = \l_@@_xoffset_dim ,
+    xoffset  .dim_set:N         = \l__witharrows_xoffset_dim ,
     xoffset  .value_required:n  = true ,
     unknown .code:n  =
-      \@@_sort_seq:N \l_@@_options_Arrow_code_after_seq
-      \@@_error:n { Unknown~option~Arrow~in~code-after }
+      \__witharrows_sort_seq:N \l__witharrows_options_Arrow_code_after_seq
+      \__witharrows_error:n { Unknown~option~Arrow~in~code-after }
   }
-\seq_new:N \l_@@_options_Arrow_code_after_seq
-\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_code_after_seq
+\seq_new:N \l__witharrows_options_Arrow_code_after_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_code_after_seq
   { ll, lr, rl, rr, tikz, tikz-code, v, x, offset }
-\cs_new_protected:Npn \@@_Arrow_code_after
+\cs_new_protected:Npn \__witharrows_Arrow_code_after
   {
     \peek_meaning:NTF [
-      { \@@_Arrow_code_after_i }
-      { \@@_Arrow_code_after_i [ ] }
+      { \__witharrows_Arrow_code_after_i }
+      { \__witharrows_Arrow_code_after_i [ ] }
   }
-\cs_new_protected:Npn \@@_Arrow_code_after_i [ #1 ] #2 #3 #4
+\cs_new_protected:Npn \__witharrows_Arrow_code_after_i [ #1 ] #2 #3 #4
   {
     \peek_meaning:NTF [
-      { \@@_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } }
-      { \@@_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } [ ] }
+      { \__witharrows_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } }
+      { \__witharrows_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } [ ] }
   }
-\cs_new_protected:Npn \@@_Arrow_code_after_ii [ #1 ] #2 #3 #4 [ #5 ]
+\cs_new_protected:Npn \__witharrows_Arrow_code_after_ii [ #1 ] #2 #3 #4 [ #5 ]
   {
-    \int_set:Nn \l_@@_pos_arrow_int 1
-    \str_clear_new:N \l_@@_previous_key_str
+    \int_set:Nn \l__witharrows_pos_arrow_int 1
+    \str_clear_new:N \l__witharrows_previous_key_str
     \group_begin:
       \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
-      \int_case:nn \l_@@_pos_arrow_int
+        { #1, #5, tikz = { xshift = \l__witharrows_xoffset_dim } }
+      \bool_set_false:N \l__witharrows_initial_r_bool
+      \bool_set_false:N \l__witharrows_final_r_bool
+      \int_case:nn \l__witharrows_pos_arrow_int
         {
           0
             {
-              \bool_set_true:N \l_@@_initial_r_bool
-              \bool_set_true:N \l_@@_final_r_bool
+              \bool_set_true:N \l__witharrows_initial_r_bool
+              \bool_set_true:N \l__witharrows_final_r_bool
             }
-          2 { \bool_set_true:N \l_@@_initial_r_bool }
-          3 { \bool_set_true:N \l_@@_final_r_bool }
+          2 { \bool_set_true:N \l__witharrows_initial_r_bool }
+          3 { \bool_set_true:N \l__witharrows_final_r_bool }
         }
       \tl_if_eq:nnTF { #2 } { #3 }
-        { \@@_error:nn { Both~lines~are~equal } { #2 } }
+        { \__witharrows_error:nn { Both~lines~are~equal } { #2 } }
         {
-          \cs_if_free:cTF { pgf at sh@ns at wa - \l_@@_prefix_str - #2 - l }
-            { \@@_error:nx { Wrong~line~in~Arrow } { #2 } }
+          \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - #2 - l }
+            { \__witharrows_error:nx { Wrong~line~in~Arrow } { #2 } }
             {
-              \cs_if_free:cTF { pgf at sh@ns at wa - \l_@@_prefix_str - #3 - l }
-                { \@@_error:nx { Wrong~line~in~Arrow } { #3 }  }
+              \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - #3 - l }
+                { \__witharrows_error:nx { Wrong~line~in~Arrow } { #3 }  }
                 {
-                  \int_compare:nNnTF \l_@@_pos_arrow_int = 4
+                  \int_compare:nNnTF \l__witharrows_pos_arrow_int = 4
                     {
-                      \tikzpicture [ @@_standard ]
+                      \tikzpicture [ __witharrows_standard ]
                         \tikz at scan@one at point \pgfutil at firstofone (#2-l.south)
                         \dim_set_eq:NN \l_tmpa_dim \pgf at x
                         \dim_set_eq:NN \l_tmpb_dim \pgf at y
@@ -1323,42 +1312,42 @@
                       \endtikzpicture
                     }
                     {
-                      \tikzpicture [ @@_standard ]
+                      \tikzpicture [ __witharrows_standard ]
                         \tikz at scan@one at point \pgfutil at firstofone
-                           ( #2-\bool_if:NTF\l_@@_initial_r_bool rl .south )
+                           ( #2-\bool_if:NTF\l__witharrows_initial_r_bool rl .south )
                         \tl_gset:Nx \g_tmpa_tl
                            { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
                         \tikz at scan@one at point \pgfutil at firstofone
-                           ( #3-\bool_if:NTF\l_@@_final_r_bool rl .north )
+                           ( #3-\bool_if:NTF\l__witharrows_final_r_bool rl .north )
                         \tl_gset:Nx \g_tmpb_tl
                            { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
                       \endtikzpicture
                     }
-                  \@@_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 }
+                  \__witharrows_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 }
                 }
             }
         }
     \group_end:
   }
-\cs_new_protected:Npn \@@_MultiArrow:nn #1 #2
+\cs_new_protected:Npn \__witharrows_MultiArrow:nn #1 #2
   {
     \exp_args:Nnx
       \regex_match:nnTF
       { \A \d+ (\,\d+)* ( \, \.\.\. (\,\d+)+ )* \Z }
       { #1 }
-      { \@@_MultiArrow_i:nn { #1 } { #2 } }
-      { \@@_error:nx { Invalid~specification~for~MultiArrow } { #1 } }
+      { \__witharrows_MultiArrow_i:nn { #1 } { #2 } }
+      { \__witharrows_error:nx { Invalid~specification~for~MultiArrow } { #1 } }
   }
-\cs_new_protected:Npn \@@_MultiArrow_i:nn #1 #2
+\cs_new_protected:Npn \__witharrows_MultiArrow_i:nn #1 #2
   {
     \foreach \x in { #1 }
       {
-        \cs_if_free:cTF { pgf at sh@ns at wa - \l_@@_prefix_str - \x - l }
-          { \@@_error:nx { Wrong~line~specification~in~MultiArrow } \x }
+        \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - \x - l }
+          { \__witharrows_error:nx { Wrong~line~specification~in~MultiArrow } \x }
           { \clist_gput_right:Nx \g_tmpa_clist \x }
       }
     \int_compare:nTF { \clist_count:N \g_tmpa_clist < 2 }
-      { \@@_error:n { Too~small~specification~for~MultiArrow } }
+      { \__witharrows_error:n { Too~small~specification~for~MultiArrow } }
       {
         \clist_sort:Nn \g_tmpa_clist
           {
@@ -1369,52 +1358,52 @@
         \clist_pop:NN \g_tmpa_clist \l_tmpa_tl
         \clist_reverse:N \g_tmpa_clist
         \clist_pop:NN \g_tmpa_clist \l_tmpb_tl
-        \exp_args:NV \@@_MultiArrow_i:n \g_tmpa_clist
+        \exp_args:NV \__witharrows_MultiArrow_i:n \g_tmpa_clist
         \tikzpicture
           [
-            @@_standard ,
+            __witharrows_standard ,
             every~path / .style = { WithArrows / arrow }
           ]
-          \draw [<->] ([xshift = \l_@@_xoffset_dim]\l_tmpa_tl-r.south)
+          \draw [<->] ([xshift = \l__witharrows_xoffset_dim]\l_tmpa_tl-r.south)
                       -- ++(5mm,0)
-                      -- node (@@_label) {}
-                         ([xshift = \l_@@_xoffset_dim+5mm]\l_tmpb_tl-r.south)
-                      -- ([xshift = \l_@@_xoffset_dim]\l_tmpb_tl-r.south)  ;
-          \tikz at parse@node \pgfutil at firstofone (@@_label.west)
+                      -- node (__witharrows_label) {}
+                         ([xshift = \l__witharrows_xoffset_dim+5mm]\l_tmpb_tl-r.south)
+                      -- ([xshift = \l__witharrows_xoffset_dim]\l_tmpb_tl-r.south)  ;
+          \tikz at parse@node \pgfutil at firstofone (__witharrows_label.west)
           \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_DispWithArrows_bool }
+          \bool_if:nT { \l__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool }
             {
               \dim_set:Nn \l_tmpb_dim
-                { \g_@@_right_x_dim - \pgf at x - 0.3333 em }
+                { \g__witharrows_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)
+          \path (__witharrows_label.west)
            node [ anchor = west, text~width = \dim_use:N \l_tmpa_dim ] { #2 } ;
         \endtikzpicture
       }
   }
-\cs_new_protected:Npn \@@_MultiArrow_i:n #1
+\cs_new_protected:Npn \__witharrows_MultiArrow_i:n #1
   {
         \tikzpicture
       [
-        @@_standard ,
+        __witharrows_standard ,
         every~path / .style = { WithArrows / arrow }
       ]
       \foreach \k in { #1 }
         {
           \draw [ <- ]
-            ( [xshift = \l_@@_xoffset_dim]\k-r.south ) -- ++(5mm,0) ;
+            ( [xshift = \l__witharrows_xoffset_dim]\k-r.south ) -- ++(5mm,0) ;
         } ;
         \endtikzpicture
   }
-\str_const:Nn \c_@@_option_ignored_str
+\str_const:Nn \c__witharrows_option_ignored_str
   { If~you~go~on,~this~option~will~be~ignored. }
-\str_const:Nn \c_@@_command_ignored_str
+\str_const:Nn \c__witharrows_command_ignored_str
   { If~you~go~on,~this~command~will~be~ignored. }
-\@@_msg_new:nn { Bad~value~for~replace~brace~by }
+\__witharrows_msg_new:nn { Bad~value~for~replace~brace~by }
   {
     Bad~value~for~the~option~'\l_keys_key_tl'.~The~value~must~begin~
     with~an~extensible~left~delimiter.~The~possible~values~are:~.,
@@ -1424,227 +1413,227 @@
     \token_to_str:N \lfloor\ and~\token_to_str:N \lceil\
     (and~\token_to_str:N \lvert\ and~\token_to_str:N \lVert\
     if~amsmath~or~unicode-math~is~loaded~in~LaTeX).\\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { option~of~cr~negative }
+\__witharrows_msg_new:nn { option~of~cr~negative }
   {
     The~argument~of~the~command~\token_to_str:N\\~
-    should~be~positive~in~the~row~\int_use:N \g_@@_line_int\
-    of~your~environment~\{\l_@@_type_env_str\}.\\
-    \c_@@_option_ignored_str
+    should~be~positive~in~the~row~\int_use:N \g__witharrows_line_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}.\\
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { omit~probably~used }
+\__witharrows_msg_new:nn { omit~probably~used }
   {
     There~is~a~problem.~Maybe~you~have~used~a~command~
-    \token_to_str:N\omit\ in~the~line~\int_use:N \g_@@_line_int\
-    (or~another~line)~of~your~environment~\{\l_@@_type_env_str\}.\\
+    \token_to_str:N\omit\ in~the~line~\int_use:N \g__witharrows_line_int\
+    (or~another~line)~of~your~environment~\{\l__witharrows_type_env_str\}.\\
     You~can~go~on~but~you~may~have~others~errors.
   }
-\@@_msg_new:nn { Invalid~option~format }
+\__witharrows_msg_new:nn { Invalid~option~format }
   {
     The~key~'format'~should~contain~only~letters~r,~c~and~l~and~
     must~not~be~empty.\\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Value~for~a~key }
+\__witharrows_msg_new:nn { Value~for~a~key }
   {
     The~key~'\l_keys_key_tl'~should~be~used~without~value. \\
     However,~you~can~go~on~for~this~time.
   }
-\@@_msg_new:nnn { Unknown~option~in~Arrow }
+\__witharrows_msg_new:nnn { Unknown~option~in~Arrow }
   {
     The~key~'\l_keys_key_tl'~is~unknown~for~the~command~
-    \l_@@_string_Arrow_for_msg_str\ in~the~row~
-    \int_use:N \g_@@_line_int\ of~your~environment~
-    \{\l_@@_type_env_str\}. \l_tmpa_str \\
-    \c_@@_option_ignored_str \\
+    \l__witharrows_string_Arrow_for_msg_str\ in~the~row~
+    \int_use:N \g__witharrows_line_int\ of~your~environment~
+    \{\l__witharrows_type_env_str\}. \l_tmpa_str \\
+    \c__witharrows_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_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__witharrows_options_Arrow_seq {~and~} {,~} {~and~}.
   }
-\@@_msg_new:nnn { Unknown~option~WithArrows }
+\__witharrows_msg_new:nnn { Unknown~option~WithArrows }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\
-    \c_@@_option_ignored_str \\
+    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_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_WithArrows_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__witharrows_options_WithArrows_seq {~and~} {,~} {~and~}.
   }
-\@@_msg_new:nnn { Unknown~option~DispWithArrows }
+\__witharrows_msg_new:nnn { Unknown~option~DispWithArrows }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\
-    \c_@@_option_ignored_str \\
+    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_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_DispWithArrows_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__witharrows_options_DispWithArrows_seq {~and~} {,~} {~and~}.
   }
-\@@_msg_new:nnn { Unknown~option~WithArrowsOptions }
+\__witharrows_msg_new:nnn { Unknown~option~WithArrowsOptions }
   {
     The~key~'\l_keys_key_tl'~is~unknown~in~
     \token_to_str:N \WithArrowsOptions. \\
-    \c_@@_option_ignored_str \\
+    \c__witharrows_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_WithArrowsOptions_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__witharrows_options_WithArrowsOptions_seq {~and~} {,~} {~and~}.
   }
-\@@_msg_new:nnn { Unknown~option~Arrow~in~code-after }
+\__witharrows_msg_new:nnn { Unknown~option~Arrow~in~code-after }
   {
     The~key~'\l_keys_key_tl'~is~unknown~in~
     \token_to_str:N \Arrow\ in~code-after. \\
-    \c_@@_option_ignored_str \\
+    \c__witharrows_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_code_after_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__witharrows_options_Arrow_code_after_seq {~and~} {,~} {~and~}.
   }
-\@@_msg_new:nn { Too~much~columns~in~WithArrows }
+\__witharrows_msg_new:nn { Too~much~columns~in~WithArrows }
   {
-    Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N
-    \l_@@_nb_cols_int\ columns~and~you~try~to~use~one~more.~
+    Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N
+    \l__witharrows_nb_cols_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.
   }
-\@@_msg_new:nn { Too~much~columns~in~DispWithArrows }
+\__witharrows_msg_new:nn { Too~much~columns~in~DispWithArrows }
   {
-    Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N
-    \l_@@_nb_cols_int\ columns~and~you~try~to~use~one~more.~
+    Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N
+    \l__witharrows_nb_cols_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. \\
+    at~the~end~of~row~\int_use:N \g__witharrows_line_int. \\
     This~error~is~fatal.
   }
-\@@_msg_new:nn { Negative~jump }
+\__witharrows_msg_new:nn { Negative~jump }
   {
     You~can't~use~a~negative~value~for~the~option~'jump'~of~command~
-    \l_@@_string_Arrow_for_msg_str\
-    in~the~row~\int_use:N \g_@@_line_int\
-    of~your~environment~\{\l_@@_type_env_str\}.~
+    \l__witharrows_string_Arrow_for_msg_str\
+    in~the~row~\int_use:N \g__witharrows_line_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}.~
     You~can~create~an~arrow~going~backwards~with~the~option~'<-'~of~Tikz. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { new-group~without~groups }
+\__witharrows_msg_new:nn { new-group~without~groups }
   {
     You~can't~use~the~option~'new-group'~for~the~command~
-    \l_@@_string_Arrow_for_msg_str\
+    \l__witharrows_string_Arrow_for_msg_str\
     because~you~are~not~in~'groups'~mode.~Try~to~use~the~option~
-    'groups'~in~your~environment~\{\l_@@_type_env_str\}. \\
-    \c_@@_option_ignored_str
+    'groups'~in~your~environment~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn
+\__witharrows_msg_new:nn
   { Too~few~lines~for~an~arrow }
   {
-    Line~\l_@@_input_line_str\
-    :~an~arrow~specified~in~the~row~\int_use:N \l_@@_initial_int\
-    of~your~environment~\{\l_@@_type_env_str\}~can't~be~drawn~
+    Line~\l__witharrows_input_line_str\
+    :~an~arrow~specified~in~the~row~\int_use:N \l__witharrows_initial_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}~can't~be~drawn~
     because~it~arrives~after~the~last~row~of~the~environment. \\
     If~you~go~on,~this~arrow~will~be~ignored.
   }
-\@@_msg_new:nn { WithArrows~outside~math~mode }
+\__witharrows_msg_new:nn { WithArrows~outside~math~mode }
   {
-    The~environment~\{\l_@@_type_env_str\}~should~be~used~only~in~math~mode~
+    The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~in~math~mode~
     like~the~environment~\{aligned\}~of~amsmath. \\
     Nevertheless,~you~can~go~on.
   }
-\@@_msg_new:nn { DispWithArrows~in~math~mode }
+\__witharrows_msg_new:nn { DispWithArrows~in~math~mode }
   {
-    The~environment~\{\l_@@_type_env_str\}~should~be~used~only~outside~math~
+    The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~outside~math~
     mode~like~the~environment~\{align\}~of~amsmath. \\
     This~error~is~fatal.
   }
-\@@_msg_new:nn { Incompatible~options~in~Arrow }
+\__witharrows_msg_new:nn { Incompatible~options~in~Arrow }
   {
     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~
-    \l_@@_string_Arrow_for_msg_str. \\
-    \c_@@_option_ignored_str
+    '\l__witharrows_previous_key_str'~set~in~the~same~command~
+    \l__witharrows_string_Arrow_for_msg_str. \\
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Incompatible~options }
+\__witharrows_msg_new:nn { Incompatible~options }
   { 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_code_after_bool
+    '\l__witharrows_previous_key_str'~set~in~the~same~command~
+    \bool_if:NT \l__witharrows_in_code_after_bool
       {
-        \l_@@_string_Arrow_for_msg_str\
-        in~the~code-after~of~your~environment~\{\l_@@_type_env_str\}
+        \l__witharrows_string_Arrow_for_msg_str\
+        in~the~code-after~of~your~environment~\{\l__witharrows_type_env_str\}
       }. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Arrow~not~in~last~column }
+\__witharrows_msg_new:nn { Arrow~not~in~last~column }
   {
-    You~should~use~the~command~\l_@@_string_Arrow_for_msg_str\
-    only~in~the~last~column~(column~\int_use:N\l_@@_nb_cols_int)~
-    of~your~environment~\{\l_@@_type_env_str\}.\\
+    You~should~use~the~command~\l__witharrows_string_Arrow_for_msg_str\
+    only~in~the~last~column~(column~\int_use:N\l__witharrows_nb_cols_int)~
+    of~your~environment~\{\l__witharrows_type_env_str\}.\\
     However~you~can~go~on~for~this~time.
   }
-\@@_msg_new:nn { Wrong~line~in~Arrow }
+\__witharrows_msg_new:nn { Wrong~line~in~Arrow }
   {
     The~specification~of~line~'#1'~you~use~in~the~command~
-    \l_@@_string_Arrow_for_msg_str\
-    in~the~'code-after'~of~\{\l_@@_type_env_str\}~doesn't~exist. \\
-    \c_@@_option_ignored_str
+    \l__witharrows_string_Arrow_for_msg_str\
+    in~the~'code-after'~of~\{\l__witharrows_type_env_str\}~doesn't~exist. \\
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Both~lines~are~equal }
+\__witharrows_msg_new:nn { Both~lines~are~equal }
   {
-    In~the~'code-after'~of~\{\l_@@_type_env_str\}~you~try~to~
+    In~the~'code-after'~of~\{\l__witharrows_type_env_str\}~you~try~to~
     draw~an~arrow~going~to~itself~from~the~line~'#1'.~This~is~not~possible. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Wrong~line~specification~in~MultiArrow }
+\__witharrows_msg_new:nn { Wrong~line~specification~in~MultiArrow }
   {
     The~specification~of~line~'#1'~doesn't~exist. \\
     If~you~go~on,~it~will~be~ignored~for~\token_to_str:N \MultiArrow.
   }
-\@@_msg_new:nn { Too~small~specification~for~MultiArrow }
+\__witharrows_msg_new:nn { Too~small~specification~for~MultiArrow }
   {
     The~specification~of~lines~you~gave~to~\token_to_str:N \MultiArrow\
     is~too~small:~you~need~at~least~two~lines. \\
-    \c_@@_command_ignored_str
+    \c__witharrows_command_ignored_str
   }
-\@@_msg_new:nn { Not~allowed~in~DispWithArrows }
+\__witharrows_msg_new:nn { Not~allowed~in~DispWithArrows }
   {
     The~command~\token_to_str:N #1
     is~allowed~only~in~the~last~column~
-    (column~\int_use:N\l_@@_nb_cols_int)~of~\{\l_@@_type_env_str\}. \\
-    \c_@@_option_ignored_str
+    (column~\int_use:N\l__witharrows_nb_cols_int)~of~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Not~allowed~in~WithArrows }
+\__witharrows_msg_new:nn { Not~allowed~in~WithArrows }
   {
-    The~command~\token_to_str:N #1 is~not~allowed~in~\{\l_@@_type_env_str\}~
+    The~command~\token_to_str:N #1 is~not~allowed~in~\{\l__witharrows_type_env_str\}~
     (it's~allowed~in~the~last~column~of~\{DispWithArrows\}). \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Inexistent~v-node }
+\__witharrows_msg_new:nn { Inexistent~v-node }
   {
     There~is~a~problem.~Maybe~you~have~put~a~command~\token_to_str:N\cr\
     instead~of~a~command~\token_to_str:N\\~at~the~end~of~
     the~row~\l_tmpa_int\
-    of~your~environment~\{\l_@@_type_env_str\}. \\
+    of~your~environment~\{\l__witharrows_type_env_str\}. \\
     This~error~is~fatal.
   }
-\@@_msg_new:nn { Option~xoffset~forbidden }
+\__witharrows_msg_new:nn { Option~xoffset~forbidden }
   {
     You~can't~use~the~option~'xoffset'~in~the~command~
-    \l_@@_string_Arrow_for_msg_str\ in~the~row~\int_use:N \g_@@_line_int\
-    of~your~environment~\{\l_@@_type_env_str\}~
+    \l__witharrows_string_Arrow_for_msg_str\ in~the~row~\int_use:N \g__witharrows_line_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}~
     because~you~are~using~the~option~
-    ' \int_compare:nNnTF \l_@@_pos_arrow_int = 7
+    ' \int_compare:nNnTF \l__witharrows_pos_arrow_int = 7
         { group }
         { groups } '.~It's~possible~for~an~independent~arrow~or~if~there~is~
     only~one~arrow. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nnn { Duplicate~name }
+\__witharrows_msg_new:nnn { Duplicate~name }
   {
     The~name~'\l_keys_value_tl'~is~already~used~and~you~shouldn't~use~
     the~same~environment~name~twice.~You~can~go~on,~but,~
@@ -1655,12 +1644,18 @@
   }
   {
     The~names~already~defined~in~this~document~are:~
-    \seq_use:Nnnn \g_@@_names_seq { ,~ } { ,~ } { ~and~ }.
+    \seq_use:Nnnn \g__witharrows_names_seq { ,~ } { ,~ } { ~and~ }.
   }
+\__witharrows_msg_new:nn { Invalid~specification~for~MultiArrow }
+  {
+    The~specification~of~rows~for~\token_to_str:N\MultiArrow\
+    (i.e.~#1)~is~invalid. \\
+    \c__witharrows_command_ignored_str
+  }
 \cs_new_protected:Npn \WithArrowsNewStyle #1 #2
   {
     \keys_if_exist:nnTF { WithArrows / Global } { #1 }
-      { \@@_error:nn { Key~already~defined } { #1 } }
+      { \__witharrows_error:nn { Key~already~defined } { #1 } }
       {
         \keys_define:nn { WithArrows / Global }
           {
@@ -1667,10 +1662,10 @@
             #1 .code:n =
              { \keys_set_known:nn { WithArrows / WithArrowsOptions } { #2 } }
           }
-        \seq_put_right:Nx \l_@@_options_WithArrows_seq { \tl_to_str:n { #1 } }
-        \seq_put_right:Nx \l_@@_options_DispWithArrows_seq
+        \seq_put_right:Nx \l__witharrows_options_WithArrows_seq { \tl_to_str:n { #1 } }
+        \seq_put_right:Nx \l__witharrows_options_DispWithArrows_seq
           { \tl_to_str:n { #1 } }
-        \seq_put_right:Nx \l_@@_options_WithArrowsOptions_seq
+        \seq_put_right:Nx \l__witharrows_options_WithArrowsOptions_seq
           { \tl_to_str:N { #1 } }
         \group_begin:
           \msg_set:nnn { witharrows } { Unknown~option~WithArrowsOptions }
@@ -1683,37 +1678,108 @@
         \group_end:
       }
   }
-\@@_msg_new:nn { Key~already~defined }
+\__witharrows_msg_new:nn { Key~already~defined }
   {
     The~key~'#1'~is~already~defined. \\
     If~you~go~on,~your~instruction~\token_to_str:N\WithArrowsNewStyle\
     will~be~ignored.
   }
-\tl_const:Nn \c_@@_tikz_code_up_tl
+\keys_define:nn { WithArrows / up-and-down }
   {
-    \draw [ rounded~corners ]
-       let \p1 = (#1) ,
-           \p2 = (#2)
-       in (\p1) -- node {
-                            #3
-                        }
-          (\x2,\y1) -- (\p2) ;
+    radius .dim_set:N = \l__witharrows_up_and_down_radius_dim ,
+    radius .value_required:n = true ,
+    width .code:n =
+      \str_case:nnF { #1 }
+        {
+          { min } { \dim_zero:N \l__witharrows_arrow_width_dim }
+          { max } { \dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim }
+        }
+        { \dim_set:Nn \l__witharrows_arrow_width_dim { #1 } } ,
+    width .value_required:n = true ,
+    unknown .code:n = \__witharrows_error:n { Option~unknown~for~up-and-down }
   }
-\tl_const:Nn \c_@@_tikz_code_down_tl
+\__witharrows_msg_new:nn { Option~unknown~for~up-and-down }
   {
-    \draw [ rounded~corners ]
-      let \p1 = (#1) ,
-          \p2 = (#2)
-      in (\p1) -- (\x1,\y2) --
-               node {
-                        #3
-                    }
-               (\p2) ;
+    The~option~'\l_keys_key_tl'~is~unknown.~\c__witharrows_option_ignored_str
   }
+\tl_const:Nn \c__witharrows_tikz_code_up_tl
+  {
+    \dim_case:nnF \l__witharrows_arrow_width_dim
+      {
+        \c_max_dim
+          {
+            \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\p1) -- node { #3 } (\x2,\y1) -- (\p2) ;
+          }
+        \c_zero_dim
+          {
+            \path node
+              {
+                \hbox_gset:Nn \g_tmpa_box { #3 }
+                \dim_gset:Nn \g_tmpa_dim
+                  { \box_wd:N \g_tmpa_box + \l__witharrows_up_and_down_radius_dim }
+              } ;
+            \draw
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\x2-\g_tmpa_dim,\y1)
+                 -- node { \box_use:N \g_tmpa_box }
+                 (\x2-\l__witharrows_up_and_down_radius_dim,\y1)
+                 [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+                 -| (\p2) ;
+          }
+      }
+      {
+        \draw
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in (\x2 - \l__witharrows_arrow_width_dim - \l__witharrows_up_and_down_radius_dim,\y1)
+             -- node { #3 } (\x2-\l__witharrows_up_and_down_radius_dim,\y1)
+             [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+             -| (\p2) ;
+      }
+  }
+\tl_const:Nn \c__witharrows_tikz_code_down_tl
+  {
+    \dim_case:nnF \l__witharrows_arrow_width_dim
+      {
+        \c_max_dim
+          {
+            \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\p1) -- (\x1,\y2) -- node { #3 } (\p2) ;
+          }
+        \c_zero_dim
+          {
+            \path node
+              {
+                \hbox_gset:Nn \g_tmpa_box { #3 }
+                \dim_gset:Nn \g_tmpa_dim
+                  { \box_wd:N \g_tmpa_box + \l__witharrows_up_and_down_radius_dim }
+              } ;
+            \draw
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\p1)
+                 { [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] -- (\x1,\y2) }
+                 -- (\x1-\l__witharrows_up_and_down_radius_dim,\y2)
+                 -- node { \box_use:N \g_tmpa_box } (\x1-\g_tmpa_dim,\y2)
+                 -- ++ (-2mm,0) ;
+          }
+      }
+      {
+        \draw
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in (\p1)
+             { [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] -- (\x1,\y2) }
+             -- (\x1-\l__witharrows_up_and_down_radius_dim,\y2)
+             -- node { #3 }
+                (\x1 - \l__witharrows_arrow_width_dim - \l__witharrows_up_and_down_radius_dim,\y2)
+             -- ++ (-2mm,0) ;
+      }
+  }
 \keys_define:nn { WithArrows / Arrow / FirstPass }
   {
-    up   .code:n = \@@_set_independent: ,
-    down .code:n = \@@_set_independent: ,
+    up   .code:n = \__witharrows_set_independent_bis: ,
+    down .code:n = \__witharrows_set_independent_bis: ,
     up   .default:n = NoValue ,
     down .default:n = NoValue
   }
@@ -1720,53 +1786,47 @@
 \keys_define:nn { WithArrows / Arrow / SecondPass }
   {
     up .code:n =
-      \str_if_empty:NT \l_@@_previous_key_str
+      \str_if_empty:NT \l__witharrows_previous_key_str
         {
-          \str_set:Nn \l_@@_previous_key_str { up }
+          \str_set:Nn \l__witharrows_previous_key_str { up }
               \cs_if_exist:cTF { tikz at library@calc at loaded }
                 {
-                  \int_set:Nn \l_@@_pos_arrow_int \c_one_int
-                  \bool_set_false:N \l_@@_wrap_lines_bool
-                  \tl_set_eq:NN \l_@@_tikz_code_tl
-                    \c_@@_tikz_code_up_tl
+                  \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl
+                  \int_set:Nn \l__witharrows_pos_arrow_int \c_one_int
+                  \bool_set_false:N \l__witharrows_wrap_lines_bool
+                  \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_up_tl
                 }
-                { \@@_error:n { calc~not~loaded } }
+                { \__witharrows_error:n { calc~not~loaded } }
         } ,
     down .code:n =
-      \str_if_empty:NT \l_@@_previous_key_str
+      \str_if_empty:NT \l__witharrows_previous_key_str
         {
-          \str_set:Nn \l_@@_previous_key_str { down }
+          \str_set:Nn \l__witharrows_previous_key_str { down }
               \cs_if_exist:cTF { tikz at library@calc at loaded }
                 {
-                  \int_set:Nn \l_@@_pos_arrow_int \c_one_int
-                  \bool_set_false:N \l_@@_wrap_lines_bool
-                  \tl_set_eq:NN \l_@@_tikz_code_tl
-                    \c_@@_tikz_code_down_tl
+                  \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl
+                  \int_set:Nn \l__witharrows_pos_arrow_int \c_one_int
+                  \bool_set_false:N \l__witharrows_wrap_lines_bool
+                  \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_down_tl
                 }
-                { \@@_error:n { calc~not~loaded } }
+                { \__witharrows_error:n { calc~not~loaded } }
         }
   }
-\seq_put_right:Nn \l_@@_options_Arrow_seq { down }
-\seq_put_right:Nn \l_@@_options_Arrow_seq { up }
-\@@_msg_new:nn { varwidth~not~loaded }
+\seq_put_right:Nn \l__witharrows_options_Arrow_seq { down }
+\seq_put_right:Nn \l__witharrows_options_Arrow_seq { up }
+\__witharrows_msg_new:nn { varwidth~not~loaded }
   {
     You~can't~use~the~option~'\l_keys_key_tl'~because~
     you~don't~have~loaded~the~package~'varwidth'. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { calc~not~loaded }
+\__witharrows_msg_new:nn { calc~not~loaded }
   {
     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~the~preamble~of~your~document. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Invalid~specification~for~MultiArrow }
-  {
-    The~specification~of~rows~for~\token_to_str:N\MultiArrow\
-    (i.e.~#1)~is~invalid. \\
-    \c_@@_command_ignored_str
-  }
 \catcode `\@ = 12
 \ExplSyntaxOff
 \endinput

Modified: trunk/Master/texmf-dist/source/generic/witharrows/witharrows.dtx
===================================================================
--- trunk/Master/texmf-dist/source/generic/witharrows/witharrows.dtx	2019-12-28 22:24:30 UTC (rev 53245)
+++ trunk/Master/texmf-dist/source/generic/witharrows/witharrows.dtx	2019-12-28 22:24:44 UTC (rev 53246)
@@ -15,8 +15,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{2.2}
-\def\myfiledate{2019/12/10}
+\def\myfileversion{2.3}
+\def\myfiledate{2019/12/27}
 %
 %
 %<*batchfile>
@@ -451,8 +451,7 @@
 % 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 |command-name|\footnote{For historical
-% reasons, there is an alias for this option: |CommandName|.} for this purpose.
+% \pkg{witharrows}: there is an option |command-name| for this purpose.
 % The new name of the command must be given to the option \emph{without} the
 % leading backslash.
 % %
@@ -477,11 +476,10 @@
 %
 % \interitem 
 % The environment |{WithArrows}| provides 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).
+% |code-after| 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#code-before = \color{blue}@]
@@ -732,7 +730,7 @@
 %     {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
+% At the local level, there are also two options for individual arrows, called
 % ``|up|'' and ``|down|''. The following example illustrates these types of
 % arrows:
 % 
@@ -760,9 +758,70 @@
 %
 % \vspace{1cm}
 % 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.
+% library \pkg{calc}. It they are not previously loaded by the user, an error
+% will be raised. 
 %
+% \vspace{1cm}
+% In fact, the options |up| and |down| may be used with a value which is a list
+% of couples key-value. 
+% \begin{itemize}
+% \item The key |radius| is the radius of the rounded corner of the
+% arrow.\footnote{The initial value of this parameter is $4$~pt, which is the
+% default value of the ``|rounded corners|'' of Tikz.}
+% \item The key |width| is the width of the (horizontal part of) the arrow:
+% \begin{itemize}
+% \item with the value |max|, the width of the arrow is ajusted with respect of
+% the position of the nodes (that's the behaviour by default of the arrows |up|
+% and |down| as shown in the previous example);
+% \item with a numerical value, the width of the arrow is directly fixed to that
+% numerical value;
+% \item with the value |min|, the width of the arrow is adjusted with respect to
+% the contents of the label of the arrow.
+% \end{itemize}
+% \end{itemize}
+% 
+% \vspace{1cm}
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = B 
+% \Arrow[~emphase#up={radius=0pt,width=2cm}@]{we try} \\
+%   & = C + C + C + C + C + C + C + C 
+% \end{WithArrows}$
+% \end{Verbatim}
 %
+% \medskip
+% $\begin{WithArrows}
+% A & = B 
+% \Arrow[up={radius=0pt,width=2cm}]{we try} \\
+%   & = C + C + C + C + C + C + C + C 
+% \end{WithArrows}$
+%
+%
+% \vspace{1cm}
+% \begin{Verbatim}
+% $\begin{WithArrows}
+% A & = B 
+% \Arrow[~emphase#up={width=min}@]{we try} \\
+%   & = C + C + C + C + C + C + C + C 
+% \end{WithArrows}$
+% \end{Verbatim}
+%
+% \medskip
+% $\begin{WithArrows}
+% A & = B 
+% \Arrow[up={width=min}]{we try} \\
+%   & = C + C + C + C + C + C + C + C 
+% \end{WithArrows}$
+%
+% \vspace{1cm}
+% The options relative to the arrows |up| and |down| can be fixed at the global
+% or environment level with the key |up-and-down|. This key may also be used as
+% prefix as illustrated now.
+% %
+% \begin{Verbatim}
+% \WithArrowsOptions{up-and-down/width=min}
+% \end{Verbatim}
+% 
 % \interitem
 %
 % \section{Comparison with the environment \{aligned\}}
@@ -1273,13 +1332,12 @@
 % P & \vartriangleleft Q 
 % \end{WithArrows}
 % \right.
-% \end{WithArrows}\]
-%
+% \end{WithArrows}
 % \begin{tikzpicture}[remember picture,overlay]
 % \draw [WithArrows/arrow] 
 %       ([xshift=3mm]wa-\WithArrowsLastEnv-2-1-2-r.south)
 %    to ([xshift=3mm]wa-\WithArrowsLastEnv-3-2-r.north) ;
-% \end{tikzpicture}
+% \end{tikzpicture}\]
 %
 % \medskip
 % In this case, it would be easier to use a command |\Arrow| in |code-after| but
@@ -1756,9 +1814,7 @@
 %
 % \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
+% The option |tikz-code| 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 |tikz-code| will have no
 % effect for the arrows of this environment but only for the arrows in the
 % nested environments |{WithArrows}|.}
@@ -2423,7 +2479,7 @@
 % |expl3| code fails.\footnote{cf.
 %   |tex.stackexchange.com/questions/57424/using-of-usetikzlibrary-in-an-expl3-package-fails|}
 %
-% <@@=witharrows>
+%<@@=witharrows>
 % 
 %    \begin{macrocode}
 %<*LaTeX>
@@ -2806,7 +2862,8 @@
 % We also define a style for the tips of arrow. The final user of the extension
 % \pkg{witharrows} will use this style if he wants to draw an arrow directly
 % with a Tikz command in his document (probably using the Tikz nodes created by
-% |{WithArrows}| in the |\halign|).
+% |{WithArrows}| in the |\halign|). This style is documented in the
+% documentation of \pkg{witharrows}.
 %    \begin{macrocode}
 \tikzset
   { 
@@ -2817,7 +2874,8 @@
 %
 % \bigskip
 % The style |WithArrows/arrow| will be used to draw the arrows (more precisely,
-% it will be passed to |every~path|).
+% it will be passed to |every~path|). This style is documented in the
+% documentation of \pkg{witharrows}.
 %    \begin{macrocode}
 \tikzset 
  { 
@@ -3085,8 +3143,26 @@
 \bool_new:N \l_@@_subequations_bool
 %</LaTeX>
 %    \end{macrocode}
-% 
+%
 % \bigskip
+% The dimension |\l_@@_arrow_width_dim| is only for the arrows of type |up| and
+% |down|. A value of |\c_max_dim| means that the arrow has the maximal possible
+% width. A value of $0$~pt means that the the arrow has a width ajusted to the
+% content of the node.
+%    \begin{macrocode}
+\dim_new:N \l_@@_arrow_width_dim
+\dim_set_eq:NN \l_@@_arrow_width_dim \c_max_dim
+%    \end{macrocode}
+%
+% \bigskip
+% The parameter |\l_@@_up_and_down_radius_dim| corresponds to the option
+% |radius_for_up_and_down|.
+%    \begin{macrocode}
+\dim_new:N \l_@@_up_and_down_radius_dim
+\dim_set:Nn \l_@@_up_and_down_radius_dim { 4 pt }
+%    \end{macrocode}
+%
+% \bigskip
 % \subsection{The definition of the options}
 %
 % There are four levels where options can be set:
@@ -3140,28 +3216,23 @@
     max-length-of-arrow .value_required:n = true ,
     max-length-of-arrow .initial:n = 2 cm ,
     ygap .dim_set:N = \l_@@_ygap_dim ,
-    ygap .value_required:n = true ,
     ygap .initial:n = 0.4 ex ,
     ystart .dim_set:N = \l_@@_ystart_dim ,
-    ystart .value_required:n = true ,
+
     ystart .initial:n = 0.4 ex ,
     more-columns .code:n = 
       \@@_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } ,
-    more-columns .value_forbidden:n = true,
     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 } ,
-    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 =  
       \tikzset { @@_node_style / .append~style = { draw , red } } ,
-    show-nodes .value_forbidden:n = true,
     show-node-names .bool_set:N = \l_@@_show_node_names_bool ,
     show-node-names .default:n = true ,
     group .code:n = 
@@ -3172,7 +3243,6 @@
           \int_set:Nn \l_@@_pos_arrow_int 7 
         }
         { \@@_error:n { Incompatible~options } } ,
-    group .value_forbidden:n = true ,
     groups .code:n = 
       \str_if_empty:NTF \l_@@_previous_key_str
         { 
@@ -3183,35 +3253,23 @@
           \int_set:Nn \l_@@_pos_arrow_int 6
         }
         { \@@_error:n { Incompatible~options } } ,
-    groups .value_forbidden:n = true ,
     tikz   .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } , 
     tikz   .initial:n         = \c_empty_tl ,
-    tikz   .value_required:n  = true ,
-    rr     .value_forbidden:n = true ,
     rr     .code:n            = \@@_fix_pos_option:n 3 ,
-    ll     .value_forbidden:n = true ,
     ll     .code:n            = \@@_fix_pos_option:n 1 ,
-    rl     .value_forbidden:n = true ,
     rl     .code:n            = \@@_fix_pos_option:n 2 ,
-    lr     .value_forbidden:n = true ,
     lr     .code:n            = \@@_fix_pos_option:n 0 ,
-    i      .value_forbidden:n = true ,
     i      .code:n            = \@@_fix_pos_option:n 5 ,
     xoffset .dim_set:N  = \l_@@_xoffset_dim ,
-    xoffset .value_required:n  = true ,
     xoffset .initial:n = 3 mm ,
     jot .dim_set:N = \jot ,
-    jot .value_required:n = true ,
     interline .skip_set:N = \l_@@_interline_skip ,
-    interline .value_required:n = true ,
     start-adjust .dim_set:N = \l_@@_start_adjust_dim ,
-    start-adjust .value_required:n = true ,
     start-adjust .initial:n = 0.4 ex ,
     end-adjust .dim_set:N = \l_@@_end_adjust_dim ,
-    end-adjust .value_required:n = true ,
     end-adjust .initial:n = 0.4 ex ,
     adjust .meta:n  = { start-adjust = #1 , end-adjust = #1 } ,
-    adjust .value_required:n = true ,
+    up-and-down .code:n = \keys_set:nn { WithArrows / up-and-down } { #1 } , 
 %    \end{macrocode}
 %
 % \medskip
@@ -3223,7 +3281,37 @@
     no-arrows .code:n = 
       \cs_set_eq:NN \@@_draw_arrows:nn \use_none:nn
       \cs_set_eq:NN \@@_draw_arrow:nnn \use_none:nnn  ,
-    no-arrows .value_forbidden:n = true ,
+%    \end{macrocode}
+% The following lines are the properties |.value_required:n| and
+% |.value_forbidden:n| or the keys. These properties have no effect because they
+% are not transmitted by inheritance (unfortunately). We maintain these lines in
+% the \textsc{dtx} only for the case of a modification of |l3keys|.
+% 
+%    \begin{macrocode}
+%<*comment>
+    ygap .value_required:n = true ,
+    ystart .value_required:n = true ,
+    more-columns .value_forbidden:n = true,
+    command-name .value_required:n = true ,
+    tikz-code .value_required:n = true ,
+    group  .value_forbidden:n = true ,
+    groups .value_forbidden:n = true ,
+    tikz   .value_required:n  = true ,
+    show-nodes .value_forbidden:n = true,
+    ll     .value_forbidden:n = true ,
+    rr     .value_forbidden:n = true ,
+    rl     .value_forbidden:n = true ,
+    lr     .value_forbidden:n = true ,
+    i      .value_forbidden:n = true ,
+    xoffset .value_required:n  = true ,
+    jot .value_required:n = true ,
+    interline .value_required:n = true ,
+    start-adjust .value_required:n = true ,
+    end-adjust .value_required:n = true ,
+    adjust .value_required:n = true ,
+    up-and-down .value_required:n = true ,
+    no-arrows .value_forbidden:n = true 
+%</comment>
   }
 %    \end{macrocode}
 % 
@@ -3235,11 +3323,19 @@
 \keys_define:nn { WithArrows / WithArrowsSpecific }
   { 
     t   .code:n            = \int_set:Nn \l_@@_pos_env_int O ,
+    c   .code:n            = \int_set:Nn \l_@@_pos_env_int 1 ,
+    b   .code:n            = \int_set:Nn \l_@@_pos_env_int 2 ,
+%    \end{macrocode}
+% The following lines are the properties |.value_required:n| and
+% |.value_forbidden:n| or the keys. These properties have no effect because they
+% are not transmitted by inheritance (unfortunately). We maintain these lines in
+% the \textsc{dtx} only for the case of a modification of |l3keys|.
+%    \begin{macrocode}
+%<*comment>
     t   .value_forbidden:n = true ,
-    c   .code:n            = \int_set:Nn \l_@@_pos_env_int 1 ,
     c   .value_forbidden:n = true ,
-    b   .code:n            = \int_set:Nn \l_@@_pos_env_int 2 ,
     b   .value_forbidden:n = true
+%</comment>
   }
 %    \end{macrocode}
 %
@@ -3275,7 +3371,6 @@
     fleqn .bool_set:N = \l_@@_fleqn_bool ,
     fleqn .default:n = true ,
     mathindent .dim_set:N = \l_@@_mathindent_dim ,
-    mathindent .value_required:n = true ,
     mathindent .initial:n = 25 pt ,
 %<*LaTeX>
     notag .code:n = 
@@ -3299,11 +3394,9 @@
           \group_end:
         } ,
     subequations .default:n = true ,
-    subequations .value_forbidden:n = true ,
     nonumber .meta:n = notag ,
     allow-multiple-labels .code:n = 
       \@@_msg_redirect_name:nn { Multiple~labels } { none } ,
-    allow-multiple-labels .value_forbidden:n = true ,
     tagged-lines .code:n =   
       \clist_set:Nn \l_@@_tags_clist { #1 }
       \clist_if_in:NnT \l_@@_tags_clist { first }
@@ -3311,7 +3404,6 @@
           \clist_remove_all:Nn \l_@@_tags_clist { first }
           \clist_put_left:Nn \l_@@_tags_clist \c_one_int
         } ,
-    tagged-lines .value_required:n = true ,
 %</LaTeX>
     wrap-lines .bool_set:N = \l_@@_wrap_lines_bool ,
     wrap-lines .default:n = true ,
@@ -3333,10 +3425,22 @@
 % behaviour (which corresponds to the standard behaviour of |{align}| of
 % \pkg{amsmath}).
 %    \begin{macrocode}
-%<*LaTeX>>
+%<*LaTeX>
     standard-behaviour-with-items .bool_set:N = \l_@@_sbwi_bool ,
-    standard-behaviour-with-items .default:n = true 
+    standard-behaviour-with-items .default:n = true ,
 %</LaTeX>
+%    \end{macrocode}
+% The following lines are the properties |.value_required:n| and
+% |.value_forbidden:n| or the keys. These properties have no effect because they
+% are not transmitted by inheritance (unfortunately). We maintain these lines in
+% the \textsc{dtx} only for the case of a modification of |l3keys|.
+%    \begin{macrocode}
+%<*comment>
+    mathindent .value_required:n = true ,
+    subequations .value_forbidden:n = true ,
+    allow-multiple-labels .value_forbidden:n = true ,
+    tagged-lines .value_required:n = true 
+%</comment>
   }
 %    \end{macrocode}
 %
@@ -3358,13 +3462,10 @@
         { \@@_error:n { Duplicate~name } }
         { \seq_gput_left:NV \g_@@_names_seq \l_tmpa_str }
       \str_set_eq:NN \l_@@_name_str \l_tmpa_str ,
-    name .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 } ,
+    CodeAfter .meta:n = { code-after = #1 } ,
     format .code:n = 
       \tl_if_empty:nTF { #1 } 
         { \@@_error:n { Invalid~option~format } }
@@ -3373,6 +3474,15 @@
             { \tl_set:Nn \l_@@_format_str { #1 } }
             { \@@_error:n { Invalid~option~format } }
         } ,
+%    \end{macrocode}
+% The following lines are the properties |.value_required:n| and
+% |.value_forbidden:n| or the keys. These properties have no effect because they
+% are not transmitted by inheritance (unfortunately). Maybe we should delete
+% these lines.
+%    \begin{macrocode}
+    code-before .value_required:n = true,
+    code-after .value_required:n = true ,
+    name .value_required:n = true ,
     format .value_required:n = true ,
   }
 %    \end{macrocode}
@@ -3392,6 +3502,7 @@
         WithArrows / WithArrowsSpecific , 
         WithArrows / Env
       } , 
+    WithArrows / up-and-down .inherit:n = WithArrows / up-and-down ,
     DispWithArrows .inherit:n = 
       { 
         WithArrows / DispWithArrowsSpecific , 
@@ -3398,12 +3509,14 @@
         WithArrows / Global ,
         WithArrows / Env ,
       } ,
+    DispWithArrows / up-and-down .inherit:n = WithArrows / up-and-down ,
     WithArrowsOptions .inherit:n = 
       { 
         WithArrows / Global , 
         WithArrows / WithArrowsSpecific , 
-        WithArrows / DispWithArrowsSpecific 
-      } 
+        WithArrows / DispWithArrowsSpecific ,
+      } ,
+    WithArrowsOptions / up-and-down .inherit:n = WithArrows / up-and-down
   }
 %    \end{macrocode}
 % 
@@ -3420,7 +3533,7 @@
     format, group, groups, i,
     interline, jot, ll,
     lr, max-length-of-arrow, more-columns, name, 
-    no-arrows, rl, rr, 
+    no-arrows, rl, rr, up-and-down,
     show-node-names, show-nodes, start-adjust,
     t, tikz, tikz-code, 
     xoffset, ygap, ystart 
@@ -3434,7 +3547,7 @@
   { 
     unknown .code:n  = 
       \@@_sort_seq:N \l_@@_options_WithArrows_seq 
-      \@@_error:n { Unknown~option~WithArrows } 
+      \@@_error:n { Unknown~option~WithArrows }
   }
 %    \end{macrocode}
 %
@@ -3445,7 +3558,7 @@
     left-brace .tl_set:N = \l_@@_left_brace_tl ,
     unknown .code:n  = 
       \@@_sort_seq:N \l_@@_options_DispWithArrows_seq
-      \@@_error:n { Unknown~option~DispWithArrows } 
+      \@@_error:n { Unknown~option~DispWithArrows } , 
   }
 %    \end{macrocode}
 %
@@ -3459,9 +3572,9 @@
     code-after, code-before, command-name, tikz-code, adjust,
     displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot,
     left-brace, ll, lr, max-length-of-arrow, mathindent, name, no-arrows,
-    replace-left-brace-by, rl, rr, show-node-names, show-nodes, start-adjust,
-    tikz, wrap-lines, xoffset, ygap, ystart,
-%<*LaTeX>>  
+    up-and-down, replace-left-brace-by, rl, rr, show-node-names,
+    show-nodes, start-adjust, tikz, wrap-lines, xoffset, ygap, ystart,
+%<*LaTeX>  
     allow-multiple-labels, tagged-lines, nonumber, notag
 %</LaTeX>
   }
@@ -3490,9 +3603,10 @@
   { 
     allow-duplicate-names, b, c, command-name, more-columns, tikz-code, adjust,
     displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr,
-    mathindent, max-length-of-arrow, no-arrows, rl, rr, show-node-names,
-    show-nodes, start-adjust, t, tikz, wrap-lines, xoffset, ygap, ystart, 
-%<*LaTeX>>
+    mathindent, max-length-of-arrow, no-arrows, up-and-down, rl, rr,
+    show-node-names, show-nodes, start-adjust, t, tikz, wrap-lines, xoffset,
+    ygap, ystart,
+%<*LaTeX>
     allow-multiple-labels, nonumber, notag, standard-behaviour-with-items,
     tagged-lines
 %</LaTeX>
@@ -3503,22 +3617,33 @@
 % The command |\@@_set_independent:| is a command without argument that will be
 % 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''.
+% the field ``status'' of the arrow. Another possible value of the field
+% ``status'' is ``new-group''.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_set_independent:
   { 
+    \str_if_eq:VnF \l_keys_value_tl { NoValue }
+      { \@@_error:n { Value~for~a~key } }
+    \@@_set_independent_bis:
+  }
+%    \end{macrocode}
+%
+% \bigskip
+% The command |\@@_set_independent_bis:| is the same as |\@@_set_independant:|
+% except that the key may be used with a value.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_set_independent_bis:
+  { 
     \str_if_empty:NTF \l_@@_previous_key_str
       {
         \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
         \str_set:Nn \l_@@_status_arrow_str { independent } 
-        \str_if_eq:VnF \l_keys_value_tl { NoValue }
-          { \@@_error:n { Value~for~a~key } }
       }
       { \@@_error:n { Incompatible~options~in~Arrow } }
   }
 %    \end{macrocode}
 %
+%
 % \bigskip
 % The options of an individual arrow are parsed twice. The first pass is when
 % the command |\Arrow| is read. The second pass is when the arrows are drawn
@@ -6741,7 +6866,16 @@
 %    \end{macrocode}
 %
 % 
+%    \begin{macrocode}
+\@@_msg_new:nn { Invalid~specification~for~MultiArrow }
+  {
+    The~specification~of~rows~for~\token_to_str:N\MultiArrow\ 
+    (i.e.~#1)~is~invalid. \\  
+    \c_@@_command_ignored_str
+  }
+%    \end{macrocode}
 %
+%
 % \subsection{The command \textbackslash WithArrowsNewStyle}
 %
 % A new key defined with |\WithArrowsNewStyle| will not be available at the
@@ -6803,68 +6937,280 @@
 % 
 % This code is the only part of the code of \pkg{witharrows} which uses the
 % package \pkg{varwidth} and also the Tikz library |calc|. That's why we have
-% decided not to load this package and this library. If they are not loaded, the
-% user will have an error only when using the option |up| or the option |down|.
+% decided not to load by default this package and this library. If they are not
+% loaded, the user will have an error only when using the option |up| or the
+% option |down|. 
 % 
-% \medskip
+% \bigskip
+% The keys |up| and |down| can be used with a value. This value is a list of
+% pairs key-value specific to the options |up| and |down|. 
+% \begin{itemize}
+% \item The key |radius| is the radius of the rounded corner of the arrow.
+% \item The key |width| is the width of the horizontal part of the arrow. The
+% corresponding dimension is |\l_@@_arrow_width_dim|. By convention, a value of
+% $0$~pt for |\l_@@_arrow_width_dim| means that the option |width| has been used
+% with the special value |min| and a value of |\c_max_dim| means that it has
+% been used with the value |max|.
+% \end{itemize}
+% 
+%    \begin{macrocode}
+\keys_define:nn { WithArrows / up-and-down }
+  {
+    radius .dim_set:N = \l_@@_up_and_down_radius_dim ,
+    radius .value_required:n = true ,
+    width .code:n = 
+      \str_case:nnF { #1 }
+        {
+          { min } { \dim_zero:N \l_@@_arrow_width_dim }
+          { max } { \dim_set_eq:NN \l_@@_arrow_width_dim \c_max_dim }
+        }
+        { \dim_set:Nn \l_@@_arrow_width_dim { #1 } } ,  
+    width .value_required:n = true ,
+    unknown .code:n = \@@_error:n { Option~unknown~for~up-and-down } 
+  }
+%    \end{macrocode}
+% 
+%
+%    \begin{macrocode}
+\@@_msg_new:nn { Option~unknown~for~up-and-down } 
+  { 
+    The~option~'\l_keys_key_tl'~is~unknown.~\c_@@_option_ignored_str
+  }
+%    \end{macrocode}
+% 
+%
+%
+% \bigskip
 % The token list |\c_@@_tikz_code_up_tl| is the value of |tikz-code| which will
 % be used for an option |up|.
+%
+% \bigskip
 %    \begin{macrocode}
+%<*LaTeX>
 \tl_const:Nn \c_@@_tikz_code_up_tl
-  {
-    \draw [ rounded~corners ]
-       let \p1 = (#1) ,
-           \p2 = (#2)
-       in (\p1) -- node { 
-%<*LaTeX>
-                          \dim_set:Nn \l_tmpa_dim { \x2 - \x1 }
-                          \begin { varwidth } \l_tmpa_dim
+  { 
 %    \end{macrocode}
+% First the case when the key |up| is used with |width=max| (that's the default
+% behaviour). 
+%    \begin{macrocode}
+    \dim_compare:nNnTF \l_@@_arrow_width_dim = \c_max_dim
+      {
+        \draw [ rounded~corners = \l_@@_up_and_down_radius_dim ]
+           let \p1 = ( #1 ) , \p2 = ( #2 )
+           in (\p1) -- node 
+              { 
+                \dim_set:Nn \l_tmpa_dim { \x2 - \x1 }
+                \begin { varwidth } \l_tmpa_dim
+%    \end{macrocode}
 % |\narrowragged| is a command of the package \pkg{varwidth}.
 %    \begin{macrocode}
-                            \narrowragged
-                            #3
-                          \end { varwidth } 
+                  \narrowragged
+                  #3
+                \end { varwidth } 
+              }
+              (\x2,\y1) -- (\p2) ;
+      }
+%    \end{macrocode}
+% Now the case where the key |up| is used with |width=|\textsl{value} with
+% \textsl{value} equal to |min| or a numeric value. The instruction |\path|
+% doesn't draw anything: its aim is to compute the natural width of the label of
+% the arrow. We can't use |\pgfextra| here because of the |\hbox_gset:Nn|.
+%    \begin{macrocode}
+      {
+        \path
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in node
+              { 
+%    \end{macrocode}
+% The length |\l_tmpa_dim| will be the maximal width of the box composed by the
+% environment |{varwidth}|.
+%    \begin{macrocode}
+                \dim_set:Nn \l_tmpa_dim 
+                  { \x2 - \x1 - \l_@@_up_and_down_radius_dim } 
+                \dim_compare:nNnF \l_@@_arrow_width_dim = \c_zero_dim 
+                  {
+                    \dim_set:Nn \l_tmpa_dim
+                      { \dim_min:nn \l_tmpa_dim \l_@@_arrow_width_dim } 
+                  } 
+%    \end{macrocode}
+% Now, the length |\l_tmpa_dim| is computed. We can compose the label in the box
+% |\g_tmpa_box|. We have to do a global affectation to be able to exit the node.
+%    \begin{macrocode}
+                \hbox_gset:Nn \g_tmpa_box 
+                  {
+                    \begin { varwidth } \l_tmpa_dim
+                      \narrowragged
+                      #3
+                    \end { varwidth }
+                  }
+%    \end{macrocode}
+% The length |\g_tmpa_dim| will be the width of the arrow (+ the radius of the
+% corner). 
+%    \begin{macrocode}
+                \dim_compare:nNnTF \l_@@_arrow_width_dim > \c_zero_dim
+                  { \dim_gset_eq:NN  \g_tmpa_dim \l_@@_arrow_width_dim }
+                  { \dim_gset:Nn \g_tmpa_dim { \box_wd:N \g_tmpa_box } }
+                \dim_gadd:Nn \g_tmpa_dim \l_@@_up_and_down_radius_dim
+              } ;
+       \draw 
+         let \p1 = ( #1 ) , \p2 = ( #2 )
+         in (\x2-\g_tmpa_dim,\y1) 
+            -- node { \box_use:N \g_tmpa_box } 
+            (\x2-\l_@@_up_and_down_radius_dim,\y1) 
+            [ rounded~corners = \l_@@_up_and_down_radius_dim ]
+            -| (\p2) ;
+      }
+  }
 %</LaTeX>
 %<*plain-TeX>
-                            #3
+\tl_const:Nn \c_@@_tikz_code_up_tl
+  { 
+    \dim_case:nnF \l_@@_arrow_width_dim 
+      {
+        \c_max_dim
+          {
+            \draw [ rounded~corners = \l_@@_up_and_down_radius_dim ]
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\p1) -- node { #3 } (\x2,\y1) -- (\p2) ;
+          }    
+        \c_zero_dim
+          {
+            \path node
+              { 
+                \hbox_gset:Nn \g_tmpa_box { #3 }
+                \dim_gset:Nn \g_tmpa_dim 
+                  { \box_wd:N \g_tmpa_box + \l_@@_up_and_down_radius_dim }
+              } ;
+            \draw 
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\x2-\g_tmpa_dim,\y1) 
+                 -- node { \box_use:N \g_tmpa_box } 
+                 (\x2-\l_@@_up_and_down_radius_dim,\y1)  
+                 [ rounded~corners = \l_@@_up_and_down_radius_dim ]
+                 -| (\p2) ;
+          }    
+      }
+      {
+        \draw 
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in (\x2 - \l_@@_arrow_width_dim - \l_@@_up_and_down_radius_dim,\y1) 
+             -- node { #3 } (\x2-\l_@@_up_and_down_radius_dim,\y1) 
+             [ rounded~corners = \l_@@_up_and_down_radius_dim ]
+             -| (\p2) ;
+      }
+  }
 %</plain-TeX>
-                        } 
-          (\x2,\y1) -- (\p2) ;
-  }
 %    \end{macrocode}
-% 
 %
-% \medskip
-% Idem for the option |down|.
+%
+% \bigskip
+% The code for a arrow of type |down| is similar to the previous code (for an
+% arrow of type |up|).
 %    \begin{macrocode}
+%<*LaTeX>
 \tl_const:Nn \c_@@_tikz_code_down_tl
   {
-    \draw [ rounded~corners ]
-      let \p1 = (#1) ,
-          \p2 = (#2)
-      in (\p1) -- (\x1,\y2) --
-               node {
-%<*LaTeX>
-                      \dim_set:Nn \l_tmpa_dim { \x1 - \x2 }
-                      \begin { varwidth } \l_tmpa_dim
-                        \narrowragged
-                        #3
-                      \end { varwidth }
+    \dim_compare:nNnTF \l_@@_arrow_width_dim = \c_max_dim
+      {
+        \draw [ rounded~corners = \l_@@_up_and_down_radius_dim ]
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in (\p1) -- (\x1,\y2) -- node
+             { 
+               \dim_set:Nn \l_tmpa_dim { \x1 - \x2 }
+               \begin { varwidth } \l_tmpa_dim
+                 \narrowragged
+                 #3
+               \end { varwidth }
+             } 
+             (\p2) ;
+      }
+      {
+        \path 
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in node
+              { 
+                \hbox_gset:Nn \g_tmpa_box 
+                  { 
+                    \dim_set:Nn \l_tmpa_dim 
+%    \end{macrocode}
+% The $2$~mm are for the tip of the arrow. We don't want the label of the arrow
+% too close to the tip of arrow (we assume that to the tip of the arrow has its
+% standard position, that is at the end of the arrow.).
+%    \begin{macrocode}
+                      { \x1 - \x2 - \l_@@_up_and_down_radius_dim - 2 mm } 
+                    \begin { varwidth } \l_tmpa_dim
+                      \narrowragged
+                      #3
+                    \end { varwidth }
+                  }
+                \dim_compare:nNnTF \l_@@_arrow_width_dim > \c_zero_dim
+                  { \dim_gset_eq:NN  \g_tmpa_dim \l_@@_arrow_width_dim }
+                  { \dim_gset:Nn \g_tmpa_dim { \box_wd:N \g_tmpa_box } }
+                \dim_gadd:Nn \g_tmpa_dim \l_@@_up_and_down_radius_dim
+              } ;
+         
+        \draw  
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in (\p1) 
+             { [ rounded~corners = \l_@@_up_and_down_radius_dim ] -- (\x1,\y2) } 
+             -- (\x1-\l_@@_up_and_down_radius_dim,\y2)
+             -- node { \box_use:N \g_tmpa_box } (\x1-\g_tmpa_dim,\y2) 
+             -- ++ (-2mm,0) ;  
+      }
+  }
 %</LaTeX>
-%<*plain-TeX>           
-                        #3
+%
+%<*plain-TeX>
+\tl_const:Nn \c_@@_tikz_code_down_tl
+  {
+    \dim_case:nnF \l_@@_arrow_width_dim
+      {
+        \c_max_dim
+          {
+            \draw [ rounded~corners = \l_@@_up_and_down_radius_dim ]
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\p1) -- (\x1,\y2) -- node { #3 } (\p2) ;
+          } 
+        \c_zero_dim
+          {
+            \path node
+              { 
+                \hbox_gset:Nn \g_tmpa_box { #3 }
+                \dim_gset:Nn \g_tmpa_dim 
+                  { \box_wd:N \g_tmpa_box + \l_@@_up_and_down_radius_dim }
+              } ;
+            \draw 
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\p1) 
+                 { [ rounded~corners = \l_@@_up_and_down_radius_dim ] -- (\x1,\y2) }
+                 -- (\x1-\l_@@_up_and_down_radius_dim,\y2) 
+                 -- node { \box_use:N \g_tmpa_box } (\x1-\g_tmpa_dim,\y2) 
+                 -- ++ (-2mm,0) ; 
+          }
+      }
+      {
+        \draw 
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in (\p1) 
+             { [ rounded~corners = \l_@@_up_and_down_radius_dim ] -- (\x1,\y2) }
+             -- (\x1-\l_@@_up_and_down_radius_dim,\y2) 
+             -- node { #3 } 
+                (\x1 - \l_@@_arrow_width_dim - \l_@@_up_and_down_radius_dim,\y2)  
+             -- ++ (-2mm,0) ; 
+      }
+  }
 %</plain-TeX>
-                    } 
-               (\p2) ;
-  }
 %    \end{macrocode}
-% 
+%
+% \bigskip
+% We recall that the options of the individual arrows are scanned twice. First,
+% when are scanned when the command |\Arrow| occurs (we try to know whether the
+% arrow is ``individual'', etc.). That's the first pass.
 %    \begin{macrocode}
 \keys_define:nn { WithArrows / Arrow / FirstPass }
   {
-    up   .code:n = \@@_set_independent: ,
-    down .code:n = \@@_set_independent: ,
+    up   .code:n = \@@_set_independent_bis: ,
+    down .code:n = \@@_set_independent_bis: ,
     up   .default:n = NoValue ,
     down .default:n = NoValue 
   }
@@ -6871,6 +7217,8 @@
 %    \end{macrocode}
 % 
 % \bigskip
+% The options are scanned a second time when the arrow is actually drawn. That's
+% the secon pass.
 %    \begin{macrocode}
 \keys_define:nn { WithArrows / Arrow / SecondPass }
   { 
@@ -6884,6 +7232,7 @@
 %</LaTeX>
               \cs_if_exist:cTF { tikz at library@calc at loaded }
                 { 
+                  \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl
                   \int_set:Nn \l_@@_pos_arrow_int \c_one_int
 %    \end{macrocode}
 % We have to set |\l_@@_wrap_lines_bool| to |false| because, otherwise, if the
@@ -6891,8 +7240,10 @@
 % 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 
-                    \c_@@_tikz_code_up_tl
+%    \end{macrocode}
+% The main action occurs now. We change the value of the |tikz-code|.
+%    \begin{macrocode}
+                  \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_up_tl
                 }
                 { \@@_error:n { calc~not~loaded } }
 %<*LaTeX>
@@ -6910,10 +7261,10 @@
 %</LaTeX>
               \cs_if_exist:cTF { tikz at library@calc at loaded }
                 { 
+                  \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl
                   \int_set:Nn \l_@@_pos_arrow_int \c_one_int
                   \bool_set_false:N \l_@@_wrap_lines_bool
-                  \tl_set_eq:NN \l_@@_tikz_code_tl 
-                    \c_@@_tikz_code_down_tl
+                  \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_down_tl 
                 }
                 { \@@_error:n { calc~not~loaded } }
 %<*LaTeX>
@@ -6924,7 +7275,6 @@
   }
 %    \end{macrocode}
 %
-%    
 % 
 %    \begin{macrocode}
 \seq_put_right:Nn \l_@@_options_Arrow_seq { down }
@@ -6951,16 +7301,7 @@
   }
 %    \end{macrocode}
 %
-%    \begin{macrocode}
-\@@_msg_new:nn { Invalid~specification~for~MultiArrow }
-  {
-    The~specification~of~rows~for~\token_to_str:N\MultiArrow\ 
-    (i.e.~#1)~is~invalid. \\  
-    \c_@@_command_ignored_str
-  }
-%    \end{macrocode}
 %
-%
 %    \begin{macrocode}
 %<*plain-TeX>
 \catcode `\@ = 12
@@ -7158,6 +7499,11 @@
 %
 % The warning for an environment ending by |\\| has been transformed in |error|.
 %
+% \subsection*{Changes between 2.2 and 2.3}
+% 
+% Two options for the arrows of type |up| and |down|: |width| and |radius|.
+%
+%
 % \PrintIndex
 %
 % \tableofcontents

Modified: trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.sty	2019-12-28 22:24:30 UTC (rev 53245)
+++ trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.sty	2019-12-28 22:24:44 UTC (rev 53246)
@@ -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{2.2}
-\def\myfiledate{2019/12/10}
+\def\myfileversion{2.3}
+\def\myfiledate{2019/12/27}
 \RequirePackage{tikz}
 \RequirePackage{expl3}[2019/07/01]
 \usetikzlibrary{arrows.meta,bending}
@@ -30,25 +30,25 @@
   {\myfileversion}
   {Draws arrows for explanations on the right}
 \RequirePackage { xparse } [ 2019-01-01 ]
-\bool_new:N \g_@@_footnotehyper_bool
-\bool_new:N \g_@@_footnote_bool
-\cs_new_protected:Npn \@@_msg_new:nn { \msg_new:nnn { witharrows } }
-\cs_new_protected:Npn \@@_msg_new:nnn { \msg_new:nnnn { witharrows } }
-\cs_new_protected:Npn \@@_msg_redirect_name:nn
+\bool_new:N \g__witharrows_footnotehyper_bool
+\bool_new:N \g__witharrows_footnote_bool
+\cs_new_protected:Npn \__witharrows_msg_new:nn { \msg_new:nnn { witharrows } }
+\cs_new_protected:Npn \__witharrows_msg_new:nnn { \msg_new:nnnn { witharrows } }
+\cs_new_protected:Npn \__witharrows_msg_redirect_name:nn
   { \msg_redirect_name:nnn { witharrows } }
-\cs_new_protected:Npn \@@_error:n { \msg_error:nn { witharrows } }
-\cs_new_protected:Npn \@@_warning:n { \msg_warning:nn { witharrows } }
-\cs_new_protected:Npn \@@_fatal:n { \msg_fatal:nn { witharrows } }
-\cs_new_protected:Npn \@@_error:nn  { \msg_error:nnn { witharrows } }
-\cs_generate_variant:Nn \@@_error:nn { n x }
+\cs_new_protected:Npn \__witharrows_error:n { \msg_error:nn { witharrows } }
+\cs_new_protected:Npn \__witharrows_warning:n { \msg_warning:nn { witharrows } }
+\cs_new_protected:Npn \__witharrows_fatal:n { \msg_fatal:nn { witharrows } }
+\cs_new_protected:Npn \__witharrows_error:nn  { \msg_error:nnn { witharrows } }
+\cs_generate_variant:Nn \__witharrows_error:nn { n x }
 \keys_define:nn { WithArrows / package }
   {
-    footnote .bool_gset:N = \g_@@_footnote_bool ,
-    footnotehyper .bool_gset:N = \g_@@_footnotehyper_bool ,
+    footnote .bool_gset:N = \g__witharrows_footnote_bool ,
+    footnotehyper .bool_gset:N = \g__witharrows_footnotehyper_bool ,
     unknown .code:n =
-      \@@_fatal:n { Option~unknown~for~package }
+      \__witharrows_fatal:n { Option~unknown~for~package }
   }
-\@@_msg_new:nn { Option~unknown~for~package }
+\__witharrows_msg_new:nn { Option~unknown~for~package }
   {
     You~can't~use~the~option~'\l_keys_key_tl'~when~loading~the~
     package~witharrows.~Try~to~use~the~command~
@@ -55,12 +55,12 @@
     \token_to_str:N\WithArrowsOptions.
   }
 \ProcessKeysOptions { WithArrows / package }
-\@@_msg_new:nn { Option~incompatible~with~Beamer }
+\__witharrows_msg_new:nn { Option~incompatible~with~Beamer }
   {
     The~option~'\l_keys_key_tl'\ is~incompatible~
     with~Beamer~because~Beamer~has~its~own~system~to~extract~footnotes.
   }
-\@@_msg_new:nn { footnote~with~footnotehyper~package }
+\__witharrows_msg_new:nn { footnote~with~footnotehyper~package }
   {
     You~can't~use~the~option~'footnote'~because~the~package~
     footnotehyper~has~already~been~loaded.~
@@ -69,7 +69,7 @@
     of~the~package~footnotehyper.\\
     If~you~go~on,~the~package~footnote~won't~be~loaded.
   }
-\@@_msg_new:nn { footnotehyper~with~footnote~package }
+\__witharrows_msg_new:nn { footnotehyper~with~footnote~package }
   {
     You~can't~use~the~option~'footnotehyper'~because~the~package~
     footnote~has~already~been~loaded.~
@@ -78,29 +78,29 @@
     of~the~package~footnote.\\
     If~you~go~on,~the~package~footnotehyper~won't~be~loaded.
   }
-\bool_if:NT \g_@@_footnote_bool
+\bool_if:NT \g__witharrows_footnote_bool
   {
     \@ifclassloaded { beamer }
       { \msg_info:nn { witharrows } { Option~incompatible~with~Beamer } }
       {
         \@ifpackageloaded { footnotehyper }
-          { \@@_error:n { footnote~with~footnotehyper~package } }
+          { \__witharrows_error:n { footnote~with~footnotehyper~package } }
           { \usepackage { footnote } }
       }
   }
-\bool_if:NT \g_@@_footnotehyper_bool
+\bool_if:NT \g__witharrows_footnotehyper_bool
   {
     \@ifclassloaded { beamer }
-      { \@@_info:n  { Option~incompatible~with~Beamer } }
+      { \__witharrows_info:n  { Option~incompatible~with~Beamer } }
       {
         \@ifpackageloaded { footnote }
-          { \@@_error:n { footnotehyper~with~footnote~package } }
+          { \__witharrows_error:n { footnotehyper~with~footnote~package } }
           { \usepackage { footnotehyper } }
       }
-    \bool_gset_true:N \g_@@_footnote_bool
+    \bool_gset_true:N \g__witharrows_footnote_bool
   }
-\bool_new:N \c_@@_leqno_bool
-\DeclareOption { leqno } { \bool_set_true:N \c_@@_leqno_bool }
+\bool_new:N \c__witharrows_leqno_bool
+\DeclareOption { leqno } { \bool_set_true:N \c__witharrows_leqno_bool }
 \DeclareOption* { }
 \ProcessOptions*
 \cs_generate_variant:Nn \tl_put_right:Nn { N v }
@@ -113,28 +113,28 @@
         typedref, unicode-math, varwidth
       }
       {
-        \bool_new:c { c_@@_#1_loaded_bool }
+        \bool_new:c { c__witharrows_#1_loaded_bool }
         \@ifpackageloaded { #1 }
-          { \bool_set_true:c { c_@@_#1_loaded_bool } }
+          { \bool_set_true:c { c__witharrows_#1_loaded_bool } }
           { }
       }
   }
 \sys_if_engine_luatex:TF
   {
-    \cs_new_protected:Npn \@@_strcmp:nn  #1 #2
+    \cs_new_protected:Npn \__witharrows_strcmp:nn  #1 #2
       { \lua_now:e { l3kernel.strcmp('#1','#2') } }
   }
   {
-    \cs_new_protected:Npn \@@_strcmp:nn #1 #2
+    \cs_new_protected:Npn \__witharrows_strcmp:nn #1 #2
       { \tex_strcmp:D { #1 } { #2 } }
   }
-\cs_new_protected:Npn \@@_sort_seq:N #1
+\cs_new_protected:Npn \__witharrows_sort_seq:N #1
   {
     \seq_sort:Nn #1
       {
         \int_compare:nNnTF
           {
-            \@@_strcmp:nn
+            \__witharrows_strcmp:nn
               { \str_lower_case:n { ##1 } }
               { \str_lower_case:n { ##2 } }
           }
@@ -143,7 +143,7 @@
           \sort_return_same:
       }
   }
-\cs_new_protected:Npn \@@_convert_to_str_seq:N #1
+\cs_new_protected:Npn \__witharrows_convert_to_str_seq:N #1
   {
     \seq_clear:N \l_tmpa_seq
     \seq_map_inline:Nn #1
@@ -152,12 +152,12 @@
       }
     \seq_set_eq:NN #1 \l_tmpa_seq
   }
-\cs_new_protected:Npn \@@_set_seq_of_str_from_clist:Nn #1 #2
+\cs_new_protected:Npn \__witharrows_set_seq_of_str_from_clist:Nn #1 #2
   {
     \seq_set_from_clist:Nn #1 { #2 }
-    \@@_convert_to_str_seq:N #1
+    \__witharrows_convert_to_str_seq:N #1
   }
-\cs_new_protected:Npn \@@_save:N #1
+\cs_new_protected:Npn \__witharrows_save:N #1
   {
     \seq_set_split:Nxx \l_tmpa_seq
        { \char_generate:nn { `_ } { 12 } }
@@ -173,7 +173,7 @@
     \use:c { \l_tmpa_str _gset_eq:cN }
       { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ } #1
   }
-\cs_new_protected:Npn \@@_restore:N #1
+\cs_new_protected:Npn \__witharrows_restore:N #1
   {
     \seq_set_split:Nxx \l_tmpa_seq
       { \char_generate:nn { `_ } { 12 } }
@@ -185,21 +185,21 @@
   }
 \tikzset
   {
-    @@_node_style / .style =
+    __witharrows_node_style / .style =
       {
-        above = \l_@@_ystart_dim ,
+        above = \l__witharrows_ystart_dim ,
         inner~sep = \c_zero_dim ,
         minimum~width = \c_zero_dim ,
-        minimum~height = \l_@@_ygap_dim
+        minimum~height = \l__witharrows_ygap_dim
       }
   }
 \tikzset
   {
-    @@_standard / .style =
+    __witharrows_standard / .style =
       {
         remember~picture ,
         overlay ,
-        name~prefix = wa - \l_@@_prefix_str -
+        name~prefix = wa - \l__witharrows_prefix_str -
       }
   }
 \tikzset
@@ -221,10 +221,10 @@
  }
 \AtBeginDocument
   {
-    \bool_if:NTF \c_@@_amsmath_loaded_bool
+    \bool_if:NTF \c__witharrows_amsmath_loaded_bool
       {
-        \seq_put_right:Nn \l_@@_options_WithArrowsOptions_seq { subequations }
-        \seq_put_right:Nn \l_@@_options_DispWithArrows_seq { subequations }
+        \seq_put_right:Nn \l__witharrows_options_WithArrowsOptions_seq { subequations }
+        \seq_put_right:Nn \l__witharrows_options_DispWithArrows_seq { subequations }
       }
       {
         \cs_new_protected:Npn \spread at equation
@@ -234,155 +234,137 @@
           }
       }
   }
-\tl_new:N \l_@@_left_brace_tl
-\tl_set_eq:NN \l_@@_left_brace_tl \c_novalue_tl
-\bool_new:N \l_@@_in_WithArrows_bool
-\bool_new:N \l_@@_in_DispWithArrows_bool
-\bool_new:N \l_@@_in_code_after_bool
-\seq_new:N \g_@@_position_in_the_tree_seq
-\seq_gput_right:Nn \g_@@_position_in_the_tree_seq 1
-\int_new:N \g_@@_last_env_int
-\int_new:N \l_@@_pos_env_int
-\int_new:N \l_@@_pos_arrow_int
-\int_set:Nn \l_@@_pos_arrow_int 3
-\seq_new:N \g_@@_arrow_int_seq
-\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
-\seq_new:N \g_@@_static_col_int_seq
-\int_new:N \g_@@_static_col_int
-\clist_new:N \l_@@_tags_clist
-\clist_set:Nn \l_@@_tags_clist { all }
-\cs_new_protected:Npn \@@_test_if_to_tag:
+\tl_new:N \l__witharrows_left_brace_tl
+\tl_set_eq:NN \l__witharrows_left_brace_tl \c_novalue_tl
+\bool_new:N \l__witharrows_in_WithArrows_bool
+\bool_new:N \l__witharrows_in_DispWithArrows_bool
+\bool_new:N \l__witharrows_in_code_after_bool
+\seq_new:N \g__witharrows_position_in_the_tree_seq
+\seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1
+\int_new:N \g__witharrows_last_env_int
+\int_new:N \l__witharrows_pos_env_int
+\int_new:N \l__witharrows_pos_arrow_int
+\int_set:Nn \l__witharrows_pos_arrow_int 3
+\seq_new:N \g__witharrows_arrow_int_seq
+\int_new:N \g__witharrows_arrow_int
+\seq_new:N \g__witharrows_line_int_seq
+\int_new:N \g__witharrows_line_int
+\seq_new:N \g__witharrows_col_int_seq
+\int_new:N \g__witharrows_col_int
+\seq_new:N \g__witharrows_static_col_int_seq
+\int_new:N \g__witharrows_static_col_int
+\clist_new:N \l__witharrows_tags_clist
+\clist_set:Nn \l__witharrows_tags_clist { all }
+\cs_new_protected:Npn \__witharrows_test_if_to_tag:
   {
-    \clist_if_in:NVT \l_@@_tags_clist \g_@@_line_int
-      { \clist_set:Nn \l_@@_tags_clist { all } }
+    \clist_if_in:NVT \l__witharrows_tags_clist \g__witharrows_line_int
+      { \clist_set:Nn \l__witharrows_tags_clist { all } }
   }
-\str_new:N \l_@@_command_name_str
-\str_set:Nn \l_@@_command_name_str { Arrow }
-\str_new:N \l_@@_string_Arrow_for_msg_str
-\str_set:Nx \l_@@_string_Arrow_for_msg_str { \token_to_str:N \Arrow }
-\seq_new:N \g_@@_names_seq
-\bool_new:N \l_@@_sbwi_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_@@_in_first_columns_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_cols_int
-\str_new:N \l_@@_format_str
-\bool_new:N \l_@@_subequations_bool
-\cs_new_protected:Npn \@@_eval_if_allowed:n #1
+\str_new:N \l__witharrows_command_name_str
+\str_set:Nn \l__witharrows_command_name_str { Arrow }
+\str_new:N \l__witharrows_string_Arrow_for_msg_str
+\str_set:Nx \l__witharrows_string_Arrow_for_msg_str { \token_to_str:N \Arrow }
+\seq_new:N \g__witharrows_names_seq
+\bool_new:N \l__witharrows_sbwi_bool
+\bool_new:N \l__witharrows_tag_star_bool
+\bool_new:N \l__witharrows_tag_next_line_bool
+\bool_new:N \l__witharrows_qedhere_bool
+\bool_new:N \l__witharrows_in_first_columns_bool
+\bool_new:N \l__witharrows_new_group_bool
+\bool_new:N \l__witharrows_initial_r_bool
+\bool_new:N \l__witharrows_final_r_bool
+\tl_new:N \l__witharrows_initial_tl
+\tl_new:N \l__witharrows_final_tl
+\int_new:N \l__witharrows_nb_cols_int
+\str_new:N \l__witharrows_format_str
+\bool_new:N \l__witharrows_subequations_bool
+\dim_new:N \l__witharrows_arrow_width_dim
+\dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim
+\dim_new:N \l__witharrows_up_and_down_radius_dim
+\dim_set:Nn \l__witharrows_up_and_down_radius_dim { 4 pt }
+\cs_new_protected:Npn \__witharrows_eval_if_allowed:n #1
   {
-    \str_if_empty:NTF \l_@@_previous_key_str
+    \str_if_empty:NTF \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
         #1
       }
-      { \@@_error:n { Incompatible~options } }
+      { \__witharrows_error:n { Incompatible~options } }
   }
-\cs_new_protected:Npn \@@_fix_pos_option:n #1
-  { \@@_eval_if_allowed:n { \int_set:Nn \l_@@_pos_arrow_int { #1 } } }
+\cs_new_protected:Npn \__witharrows_fix_pos_option:n #1
+  { \__witharrows_eval_if_allowed:n { \int_set:Nn \l__witharrows_pos_arrow_int { #1 } } }
 \keys_define:nn { WithArrows / Global }
   {
-    max-length-of-arrow .dim_set:N = \l_@@_max_length_of_arrow_dim ,
+    max-length-of-arrow .dim_set:N = \l__witharrows_max_length_of_arrow_dim ,
     max-length-of-arrow .value_required:n = true ,
     max-length-of-arrow .initial:n = 2 cm ,
-    ygap .dim_set:N = \l_@@_ygap_dim ,
-    ygap .value_required:n = true ,
+    ygap .dim_set:N = \l__witharrows_ygap_dim ,
     ygap .initial:n = 0.4 ex ,
-    ystart .dim_set:N = \l_@@_ystart_dim ,
-    ystart .value_required:n = true ,
+    ystart .dim_set:N = \l__witharrows_ystart_dim ,
+
     ystart .initial:n = 0.4 ex ,
     more-columns .code:n =
-      \@@_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } ,
-    more-columns .value_forbidden:n = true,
+      \__witharrows_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } ,
     command-name .code:n =
-      \str_set:Nn \l_@@_command_name_str { #1 }
-      \str_set:Nx \l_@@_string_Arrow_for_msg_str
+      \str_set:Nn \l__witharrows_command_name_str { #1 }
+      \str_set:Nx \l__witharrows_string_Arrow_for_msg_str
         { \c_backslash_str Arrow~alias~\c_backslash_str #1 } ,
-    command-name .value_required:n = true ,
-    tikz-code .tl_set:N = \l_@@_tikz_code_tl,
+    tikz-code .tl_set:N = \l__witharrows_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 .bool_set:N = \l__witharrows_displaystyle_bool ,
     displaystyle .default:n = true ,
     show-nodes .code:n =
-      \tikzset { @@_node_style / .append~style = { draw , red } } ,
-    show-nodes .value_forbidden:n = true,
-    show-node-names .bool_set:N = \l_@@_show_node_names_bool ,
+      \tikzset { __witharrows_node_style / .append~style = { draw , red } } ,
+    show-node-names .bool_set:N = \l__witharrows_show_node_names_bool ,
     show-node-names .default:n = true ,
     group .code:n =
-      \str_if_empty:NTF \l_@@_previous_key_str
+      \str_if_empty:NTF \l__witharrows_previous_key_str
         {
-          \str_set:Nn \l_@@_previous_key_str { group }
-          \seq_remove_all:Nn \l_@@_options_Arrow_seq { xoffset }
-          \int_set:Nn \l_@@_pos_arrow_int 7
+          \str_set:Nn \l__witharrows_previous_key_str { group }
+          \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset }
+          \int_set:Nn \l__witharrows_pos_arrow_int 7
         }
-        { \@@_error:n { Incompatible~options } } ,
-    group .value_forbidden:n = true ,
+        { \__witharrows_error:n { Incompatible~options } } ,
     groups .code:n =
-      \str_if_empty:NTF \l_@@_previous_key_str
+      \str_if_empty:NTF \l__witharrows_previous_key_str
         {
-          \str_set:Nn \l_@@_previous_key_str { groups }
-          \seq_if_in:NnF \l_@@_options_Arrow_seq { new-group }
-            { \seq_put_right:Nn \l_@@_options_Arrow_seq { new-group } }
-          \seq_remove_all:Nn \l_@@_options_Arrow_seq { xoffset }
-          \int_set:Nn \l_@@_pos_arrow_int 6
+          \str_set:Nn \l__witharrows_previous_key_str { groups }
+          \seq_if_in:NnF \l__witharrows_options_Arrow_seq { new-group }
+            { \seq_put_right:Nn \l__witharrows_options_Arrow_seq { new-group } }
+          \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset }
+          \int_set:Nn \l__witharrows_pos_arrow_int 6
         }
-        { \@@_error:n { Incompatible~options } } ,
-    groups .value_forbidden:n = true ,
+        { \__witharrows_error:n { Incompatible~options } } ,
     tikz   .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
     tikz   .initial:n         = \c_empty_tl ,
-    tikz   .value_required:n  = true ,
-    rr     .value_forbidden:n = true ,
-    rr     .code:n            = \@@_fix_pos_option:n 3 ,
-    ll     .value_forbidden:n = true ,
-    ll     .code:n            = \@@_fix_pos_option:n 1 ,
-    rl     .value_forbidden:n = true ,
-    rl     .code:n            = \@@_fix_pos_option:n 2 ,
-    lr     .value_forbidden:n = true ,
-    lr     .code:n            = \@@_fix_pos_option:n 0 ,
-    i      .value_forbidden:n = true ,
-    i      .code:n            = \@@_fix_pos_option:n 5 ,
-    xoffset .dim_set:N  = \l_@@_xoffset_dim ,
-    xoffset .value_required:n  = true ,
+    rr     .code:n            = \__witharrows_fix_pos_option:n 3 ,
+    ll     .code:n            = \__witharrows_fix_pos_option:n 1 ,
+    rl     .code:n            = \__witharrows_fix_pos_option:n 2 ,
+    lr     .code:n            = \__witharrows_fix_pos_option:n 0 ,
+    i      .code:n            = \__witharrows_fix_pos_option:n 5 ,
+    xoffset .dim_set:N  = \l__witharrows_xoffset_dim ,
     xoffset .initial:n = 3 mm ,
     jot .dim_set:N = \jot ,
-    jot .value_required:n = true ,
-    interline .skip_set:N = \l_@@_interline_skip ,
-    interline .value_required:n = true ,
-    start-adjust .dim_set:N = \l_@@_start_adjust_dim ,
-    start-adjust .value_required:n = true ,
+    interline .skip_set:N = \l__witharrows_interline_skip ,
+    start-adjust .dim_set:N = \l__witharrows_start_adjust_dim ,
     start-adjust .initial:n = 0.4 ex ,
-    end-adjust .dim_set:N = \l_@@_end_adjust_dim ,
-    end-adjust .value_required:n = true ,
+    end-adjust .dim_set:N = \l__witharrows_end_adjust_dim ,
     end-adjust .initial:n = 0.4 ex ,
     adjust .meta:n  = { start-adjust = #1 , end-adjust = #1 } ,
-    adjust .value_required:n = true ,
+    up-and-down .code:n = \keys_set:nn { WithArrows / up-and-down } { #1 } ,
     no-arrows .code:n =
-      \cs_set_eq:NN \@@_draw_arrows:nn \use_none:nn
-      \cs_set_eq:NN \@@_draw_arrow:nnn \use_none:nnn  ,
-    no-arrows .value_forbidden:n = true ,
+      \cs_set_eq:NN \__witharrows_draw_arrows:nn \use_none:nn
+      \cs_set_eq:NN \__witharrows_draw_arrow:nnn \use_none:nnn  ,
   }
 \keys_define:nn { WithArrows / WithArrowsSpecific }
   {
-    t   .code:n            = \int_set:Nn \l_@@_pos_env_int O ,
-    t   .value_forbidden:n = true ,
-    c   .code:n            = \int_set:Nn \l_@@_pos_env_int 1 ,
-    c   .value_forbidden:n = true ,
-    b   .code:n            = \int_set:Nn \l_@@_pos_env_int 2 ,
-    b   .value_forbidden:n = true
+    t   .code:n            = \int_set:Nn \l__witharrows_pos_env_int O ,
+    c   .code:n            = \int_set:Nn \l__witharrows_pos_env_int 1 ,
+    b   .code:n            = \int_set:Nn \l__witharrows_pos_env_int 2 ,
   }
-\clist_new:N \c_@@_extensible_delimiters_clist
-\clist_set:Nn \c_@@_extensible_delimiters_clist
+\clist_new:N \c__witharrows_extensible_delimiters_clist
+\clist_set:Nn \c__witharrows_extensible_delimiters_clist
   {
     ., \{, (, [, \lbrace, \lbrack, \lgroup, \langle, \lmoustache, \lceil, \lfloor
   }
@@ -389,85 +371,81 @@
 \AtBeginDocument
   {
     \bool_if:nT
-      { \c_@@_amsmath_loaded_bool || \use:c { c_@@_unicode-math_loaded_bool } }
+      { \c__witharrows_amsmath_loaded_bool || \use:c { c__witharrows_unicode-math_loaded_bool } }
       {
-        \clist_put_right:Nn \c_@@_extensible_delimiters_clist { \lvert, \lVert }
+        \clist_put_right:Nn \c__witharrows_extensible_delimiters_clist { \lvert, \lVert }
       }
   }
 \keys_define:nn { WithArrows / DispWithArrowsSpecific }
   {
-    fleqn .bool_set:N = \l_@@_fleqn_bool ,
+    fleqn .bool_set:N = \l__witharrows_fleqn_bool ,
     fleqn .default:n = true ,
-    mathindent .dim_set:N = \l_@@_mathindent_dim ,
-    mathindent .value_required:n = true ,
+    mathindent .dim_set:N = \l__witharrows_mathindent_dim ,
     mathindent .initial:n = 25 pt ,
     notag .code:n =
       \str_if_eq:nnTF { #1 } { true }
-        { \clist_clear:N \l_@@_tags_clist }
-        { \clist_set:Nn \l_@@_tags_clist { all } } ,
+        { \clist_clear:N \l__witharrows_tags_clist }
+        { \clist_set:Nn \l__witharrows_tags_clist { all } } ,
     notag .default:n = true ,
     subequations .code:n =
-      \bool_if:NTF \c_@@_amsmath_loaded_bool
-        { \bool_set_true:N \l_@@_subequations_bool }
+      \bool_if:NTF \c__witharrows_amsmath_loaded_bool
+        { \bool_set_true:N \l__witharrows_subequations_bool }
         {
-          \@@_error:n { amsmath~not~loaded }
+          \__witharrows_error:n { amsmath~not~loaded }
           \group_begin:
           \globaldefs = 1
-          \@@_msg_redirect_name:nn { amsmath~not~loaded } { info }
+          \__witharrows_msg_redirect_name:nn { amsmath~not~loaded } { info }
           \group_end:
         } ,
     subequations .default:n = true ,
-    subequations .value_forbidden:n = true ,
     nonumber .meta:n = notag ,
     allow-multiple-labels .code:n =
-      \@@_msg_redirect_name:nn { Multiple~labels } { none } ,
-    allow-multiple-labels .value_forbidden:n = true ,
+      \__witharrows_msg_redirect_name:nn { Multiple~labels } { none } ,
     tagged-lines .code:n =
-      \clist_set:Nn \l_@@_tags_clist { #1 }
-      \clist_if_in:NnT \l_@@_tags_clist { first }
+      \clist_set:Nn \l__witharrows_tags_clist { #1 }
+      \clist_if_in:NnT \l__witharrows_tags_clist { first }
         {
-          \clist_remove_all:Nn \l_@@_tags_clist { first }
-          \clist_put_left:Nn \l_@@_tags_clist \c_one_int
+          \clist_remove_all:Nn \l__witharrows_tags_clist { first }
+          \clist_put_left:Nn \l__witharrows_tags_clist \c_one_int
         } ,
-    tagged-lines .value_required:n = true ,
-    wrap-lines .bool_set:N = \l_@@_wrap_lines_bool ,
+    wrap-lines .bool_set:N = \l__witharrows_wrap_lines_bool ,
     wrap-lines .default:n = true ,
     replace-left-brace-by .code:n =
       {
         \tl_set:Nx \l_tmpa_tl { \tl_head:n { #1 } }
         \clist_if_in:NVTF
-          \c_@@_extensible_delimiters_clist
+          \c__witharrows_extensible_delimiters_clist
           \l_tmpa_tl
-          { \tl_set:Nn \l_@@_replace_left_brace_by_tl { #1 } }
-          { \@@_error:n { Bad~value~for~replace~brace~by } }
+          { \tl_set:Nn \l__witharrows_replace_left_brace_by_tl { #1 } }
+          { \__witharrows_error:n { Bad~value~for~replace~brace~by } }
       } ,
     replace-left-brace-by .initial:n = \lbrace ,
-    standard-behaviour-with-items .bool_set:N = \l_@@_sbwi_bool ,
-    standard-behaviour-with-items .default:n = true
+    standard-behaviour-with-items .bool_set:N = \l__witharrows_sbwi_bool ,
+    standard-behaviour-with-items .default:n = true ,
   }
 \keys_define:nn { WithArrows / Env }
   {
     name .code:n =
       \str_set:Nn \l_tmpa_str { #1 }
-      \seq_if_in:NVTF \g_@@_names_seq \l_tmpa_str
-        { \@@_error:n { Duplicate~name } }
-        { \seq_gput_left:NV \g_@@_names_seq \l_tmpa_str }
-      \str_set_eq:NN \l_@@_name_str \l_tmpa_str ,
-    name .value_required:n = true ,
-    code-before .code:n = \tl_put_right:Nn \l_@@_code_before_tl { #1 } ,
-    code-before .value_required:n = true,
+      \seq_if_in:NVTF \g__witharrows_names_seq \l_tmpa_str
+        { \__witharrows_error:n { Duplicate~name } }
+        { \seq_gput_left:NV \g__witharrows_names_seq \l_tmpa_str }
+      \str_set_eq:NN \l__witharrows_name_str \l_tmpa_str ,
+    code-before .code:n = \tl_put_right:Nn \l__witharrows_code_before_tl { #1 } ,
     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 } ,
+    code-after .code:n = \tl_put_right:Nn \l__witharrows_code_after_tl { #1 } ,
+    CodeAfter .meta:n = { code-after = #1 } ,
     format .code:n =
       \tl_if_empty:nTF { #1 }
-        { \@@_error:n { Invalid~option~format } }
+        { \__witharrows_error:n { Invalid~option~format } }
         {
           \regex_match:nnTF { \A[rcl]*\Z } { #1 }
-            { \tl_set:Nn \l_@@_format_str { #1 } }
-            { \@@_error:n { Invalid~option~format } }
+            { \tl_set:Nn \l__witharrows_format_str { #1 } }
+            { \__witharrows_error:n { Invalid~option~format } }
         } ,
+    code-before .value_required:n = true,
+    code-after .value_required:n = true ,
+    name .value_required:n = true ,
     format .value_required:n = true ,
   }
 \keys_define:nn { WithArrows }
@@ -478,6 +456,7 @@
         WithArrows / WithArrowsSpecific ,
         WithArrows / Env
       } ,
+    WithArrows / up-and-down .inherit:n = WithArrows / up-and-down ,
     DispWithArrows .inherit:n =
       {
         WithArrows / DispWithArrowsSpecific ,
@@ -484,15 +463,17 @@
         WithArrows / Global ,
         WithArrows / Env ,
       } ,
+    DispWithArrows / up-and-down .inherit:n = WithArrows / up-and-down ,
     WithArrowsOptions .inherit:n =
       {
         WithArrows / Global ,
         WithArrows / WithArrowsSpecific ,
-        WithArrows / DispWithArrowsSpecific
-      }
+        WithArrows / DispWithArrowsSpecific ,
+      } ,
+    WithArrowsOptions / up-and-down .inherit:n = WithArrows / up-and-down
   }
-\seq_new:N \l_@@_options_WithArrows_seq
-\@@_set_seq_of_str_from_clist:Nn \l_@@_options_WithArrows_seq
+\seq_new:N \l__witharrows_options_WithArrows_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrows_seq
   {
     adjust, b, c, code-after, code-before, command-name,
     displaystyle, end-adjust,
@@ -499,77 +480,82 @@
     format, group, groups, i,
     interline, jot, ll,
     lr, max-length-of-arrow, more-columns, name,
-    no-arrows, rl, rr,
+    no-arrows, rl, rr, up-and-down,
     show-node-names, show-nodes, start-adjust,
     t, tikz, tikz-code,
     xoffset, ygap, ystart
   }
-\@@_convert_to_str_seq:N \l_@@_options_WithArrows_seq
+\__witharrows_convert_to_str_seq:N \l__witharrows_options_WithArrows_seq
 \keys_define:nn { WithArrows / WithArrows }
   {
     unknown .code:n  =
-      \@@_sort_seq:N \l_@@_options_WithArrows_seq
-      \@@_error:n { Unknown~option~WithArrows }
+      \__witharrows_sort_seq:N \l__witharrows_options_WithArrows_seq
+      \__witharrows_error:n { Unknown~option~WithArrows }
   }
 \keys_define:nn { WithArrows / DispWithArrows }
   {
-    left-brace .tl_set:N = \l_@@_left_brace_tl ,
+    left-brace .tl_set:N = \l__witharrows_left_brace_tl ,
     unknown .code:n  =
-      \@@_sort_seq:N \l_@@_options_DispWithArrows_seq
-      \@@_error:n { Unknown~option~DispWithArrows }
+      \__witharrows_sort_seq:N \l__witharrows_options_DispWithArrows_seq
+      \__witharrows_error:n { Unknown~option~DispWithArrows } ,
   }
-\seq_new:N \l_@@_options_DispWithArrows_seq
-\@@_set_seq_of_str_from_clist:Nn \l_@@_options_DispWithArrows_seq
+\seq_new:N \l__witharrows_options_DispWithArrows_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_DispWithArrows_seq
   {
     code-after, code-before, command-name, tikz-code, adjust,
     displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot,
     left-brace, ll, lr, max-length-of-arrow, mathindent, name, no-arrows,
-    replace-left-brace-by, rl, rr, show-node-names, show-nodes, start-adjust,
-    tikz, wrap-lines, xoffset, ygap, ystart,
+    up-and-down, replace-left-brace-by, rl, rr, show-node-names,
+    show-nodes, start-adjust, tikz, wrap-lines, xoffset, ygap, ystart,
     allow-multiple-labels, tagged-lines, nonumber, notag
   }
 \keys_define:nn { WithArrows / WithArrowsOptions }
   {
     allow-duplicate-names .code:n =
-      \@@_msg_redirect_name:nn { Duplicate~name } { none } ,
+      \__witharrows_msg_redirect_name:nn { Duplicate~name } { none } ,
     allow-duplicate-names .value_forbidden:n = true ,
     unknown .code:n  =
-      \@@_sort_seq:N \l_@@_options_WithArrowsOptions_seq
-      \@@_error:n { Unknown~option~WithArrowsOptions }
+      \__witharrows_sort_seq:N \l__witharrows_options_WithArrowsOptions_seq
+      \__witharrows_error:n { Unknown~option~WithArrowsOptions }
   }
-\seq_new:N \l_@@_options_WithArrowsOptions_seq
-\@@_set_seq_of_str_from_clist:Nn \l_@@_options_WithArrowsOptions_seq
+\seq_new:N \l__witharrows_options_WithArrowsOptions_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrowsOptions_seq
   {
     allow-duplicate-names, b, c, command-name, more-columns, tikz-code, adjust,
     displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr,
-    mathindent, max-length-of-arrow, no-arrows, rl, rr, show-node-names,
-    show-nodes, start-adjust, t, tikz, wrap-lines, xoffset, ygap, ystart,
+    mathindent, max-length-of-arrow, no-arrows, up-and-down, rl, rr,
+    show-node-names, show-nodes, start-adjust, t, tikz, wrap-lines, xoffset,
+    ygap, ystart,
     allow-multiple-labels, nonumber, notag, standard-behaviour-with-items,
     tagged-lines
   }
-\cs_new_protected:Npn \@@_set_independent:
+\cs_new_protected:Npn \__witharrows_set_independent:
   {
-    \str_if_empty:NTF \l_@@_previous_key_str
+    \str_if_eq:VnF \l_keys_value_tl { NoValue }
+      { \__witharrows_error:n { Value~for~a~key } }
+    \__witharrows_set_independent_bis:
+  }
+\cs_new_protected:Npn \__witharrows_set_independent_bis:
+  {
+    \str_if_empty:NTF \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
-        \str_set:Nn \l_@@_status_arrow_str { independent }
-        \str_if_eq:VnF \l_keys_value_tl { NoValue }
-          { \@@_error:n { Value~for~a~key } }
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
+        \str_set:Nn \l__witharrows_status_arrow_str { independent }
       }
-      { \@@_error:n { Incompatible~options~in~Arrow } }
+      { \__witharrows_error:n { Incompatible~options~in~Arrow } }
   }
 \keys_define:nn { WithArrows / Arrow / FirstPass }
   {
     jump .code:n =
       \int_compare:nTF { #1 > 0 }
-        { \int_set:Nn \l_@@_jump_int { #1 } }
-        { \@@_error:n { Negative~jump } } ,
+        { \int_set:Nn \l__witharrows_jump_int { #1 } }
+        { \__witharrows_error:n { Negative~jump } } ,
     jump .value_required:n  = true,
-    rr .code:n = \@@_set_independent: ,
-    ll .code:n = \@@_set_independent: ,
-    rl .code:n = \@@_set_independent: ,
-    lr .code:n = \@@_set_independent: ,
-    i  .code:n = \@@_set_independent: ,
+    rr .code:n = \__witharrows_set_independent: ,
+    ll .code:n = \__witharrows_set_independent: ,
+    rl .code:n = \__witharrows_set_independent: ,
+    lr .code:n = \__witharrows_set_independent: ,
+    i  .code:n = \__witharrows_set_independent: ,
     rr .default:n = NoValue ,
     ll .default:n = NoValue ,
     rl .default:n = NoValue ,
@@ -577,9 +563,9 @@
     i  .default:n = NoValue ,
     new-group .value_forbidden:n = true,
     new-group .code:n =
-      \int_compare:nTF { \l_@@_pos_arrow_int = 6 }
-        { \str_set:Nn \l_@@_status_arrow_str { new-group } }
-        { \@@_error:n { new-group~without~groups } } ,
+      \int_compare:nTF { \l__witharrows_pos_arrow_int = 6 }
+        { \str_set:Nn \l__witharrows_status_arrow_str { new-group } }
+        { \__witharrows_error:n { new-group~without~groups } } ,
     tikz-code .code:n = \prg_do_nothing: ,
     tikz-code .value_required:n = true ,
     tikz .code:n = \prg_do_nothing: ,
@@ -592,212 +578,212 @@
     adjust .value_required:n = true ,
     xoffset .code:n = ,
     unknown .code:n =
-      \@@_sort_seq:N \l_@@_options_Arrow_seq
-      \seq_if_in:NVTF \l_@@_options_WithArrows_seq \l_keys_key_tl
+      \__witharrows_sort_seq:N \l__witharrows_options_Arrow_seq
+      \seq_if_in:NVTF \l__witharrows_options_WithArrows_seq \l_keys_key_tl
         {
           \str_set:Nn \l_tmpa_str
            { ~However,~this~key~can~be~used~in~the~options~of~{WithArrows}. }
         }
         { \str_clear:N \l_tmpa_str }
-      \@@_error:n { Unknown~option~in~Arrow }
+      \__witharrows_error:n { Unknown~option~in~Arrow }
   }
-\seq_new:N \l_@@_options_Arrow_seq
-\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_seq
+\seq_new:N \l__witharrows_options_Arrow_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_seq
   {
     adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, tikz-code,
     xoffset
   }
-\cs_new_protected:Npn \@@_fix_pos_arrow:n #1
+\cs_new_protected:Npn \__witharrows_fix_pos_arrow:n #1
   {
-    \str_if_empty:NT \l_@@_previous_key_str
+    \str_if_empty:NT \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
-        \int_set:Nn \l_@@_pos_arrow_int { #1 }
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
+        \int_set:Nn \l__witharrows_pos_arrow_int { #1 }
       }
   }
 \keys_define:nn {WithArrows / Arrow / SecondPass }
   {
-    tikz-code .tl_set:N = \l_@@_tikz_code_tl ,
+    tikz-code .tl_set:N = \l__witharrows_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 ,
-    ll .code:n = \@@_fix_pos_arrow:n 1 ,
-    rl .code:n = \@@_fix_pos_arrow:n 2 ,
-    lr .code:n = \@@_fix_pos_arrow:n 0 ,
-    i  .code:n = \@@_fix_pos_arrow:n 5 ,
+    rr .code:n = \__witharrows_fix_pos_arrow:n 3 ,
+    ll .code:n = \__witharrows_fix_pos_arrow:n 1 ,
+    rl .code:n = \__witharrows_fix_pos_arrow:n 2 ,
+    lr .code:n = \__witharrows_fix_pos_arrow:n 0 ,
+    i  .code:n = \__witharrows_fix_pos_arrow:n 5 ,
     xoffset .code:n  =
       \bool_if:nTF
         {
-          \int_compare_p:nNn \g_@@_arrow_int > 1
+          \int_compare_p:nNn \g__witharrows_arrow_int > 1
           &&
-          \int_compare_p:nNn \l_@@_pos_arrow_int > 5
+          \int_compare_p:nNn \l__witharrows_pos_arrow_int > 5
           &&
-          ! \str_if_eq_p:Vn \l_@@_status_arrow_str { independent }
+          ! \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent }
         }
-        { \@@_error:n { Option~xoffset~forbidden } }
-        { \dim_set:Nn \l_@@_xoffset_dim { #1 } } ,
+        { \__witharrows_error:n { Option~xoffset~forbidden } }
+        { \dim_set:Nn \l__witharrows_xoffset_dim { #1 } } ,
     xoffset .value_required:n = true ,
-    start-adjust .dim_set:N = \l_@@_start_adjust_dim,
-    end-adjust .dim_set:N = \l_@@_end_adjust_dim,
+    start-adjust .dim_set:N = \l__witharrows_start_adjust_dim,
+    end-adjust .dim_set:N = \l__witharrows_end_adjust_dim,
     adjust .code:n  =
-      \dim_set:Nn \l_@@_start_adjust_dim { #1 }
-      \dim_set:Nn \l_@@_end_adjust_dim { #1 } ,
+      \dim_set:Nn \l__witharrows_start_adjust_dim { #1 }
+      \dim_set:Nn \l__witharrows_end_adjust_dim { #1 } ,
   }
 \NewDocumentCommand \WithArrowsOptions { m }
   {
-    \str_clear_new:N \l_@@_previous_key_str
+    \str_clear_new:N \l__witharrows_previous_key_str
     \keys_set:nn { WithArrows / WithArrowsOptions } { #1 }
   }
-\NewDocumentCommand \@@_Arrow { O { } m ! O { } }
+\NewDocumentCommand \__witharrows_Arrow { O { } m ! O { } }
   {
-    \int_gincr:N \g_@@_arrow_int
-    \str_clear_new:N \l_@@_previous_key_str
+    \int_gincr:N \g__witharrows_arrow_int
+    \str_clear_new:N \l__witharrows_previous_key_str
     \keys_set:nn { WithArrows / Arrow / FirstPass } { #1 , #3 }
-    \prop_put:NnV \l_tmpa_prop { initial } \g_@@_line_int
-    \int_set:Nn \l_tmpa_int { \g_@@_line_int + \l_@@_jump_int }
+    \prop_put:NnV \l_tmpa_prop { initial } \g__witharrows_line_int
+    \int_set:Nn \l_tmpa_int { \g__witharrows_line_int + \l__witharrows_jump_int }
     \prop_put:NnV \l_tmpa_prop { final } \l_tmpa_int
-    \prop_put:NnV \l_tmpa_prop { status } \l_@@_status_arrow_str
+    \prop_put:NnV \l_tmpa_prop { status } \l__witharrows_status_arrow_str
     \prop_put:Nnn \l_tmpa_prop { options } { #1 , #3 }
     \prop_put:Nnn \l_tmpa_prop { label } { #2 }
     \prop_put:Nnx \l_tmpa_prop { input-line } \msg_line_number:
     \prop_gclear_new:c
-      { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \g_@@_arrow_int _ prop }
+      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop }
     \prop_gset_eq:cN
-      { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \g_@@_arrow_int _ prop }
+      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop }
       \l_tmpa_prop
   }
-\cs_new_protected:Npn \@@_Arrow_first_columns:
-  { \@@_error:n { Arrow~not~in~last~column } \@@_Arrow }
-\cs_new_protected:Npn \@@_pre_halign:n #1
+\cs_new_protected:Npn \__witharrows_Arrow_first_columns:
+  { \__witharrows_error:n { Arrow~not~in~last~column } \__witharrows_Arrow }
+\cs_new_protected:Npn \__witharrows_pre_halign:n #1
   {
-    \str_clear_new:N \l_@@_type_env_str
-    \str_set:NV \l_@@_type_env_str \@currenvir
+    \str_clear_new:N \l__witharrows_type_env_str
+    \str_set:NV \l__witharrows_type_env_str \@currenvir
     \cs_if_exist:NT \tikz at library@external at loaded
       { \tikzset { external / export = false } }
-    \str_clear_new:N \l_@@_name_str
-    \str_clear_new:N \l_@@_status_arrow_str
-    \dim_zero_new:N \l_@@_x_dim
-    \str_clear_new:N \l_@@_input_line_str
-    \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
-    \seq_gput_right:NV \g_@@_static_col_int_seq \g_@@_static_col_int
-    \int_gzero:N \g_@@_static_col_int
-    \seq_gput_right:Nn \g_@@_position_in_the_tree_seq 1
-    \seq_set_eq:NN \l_tmpa_seq \g_@@_position_in_the_tree_seq
+    \str_clear_new:N \l__witharrows_name_str
+    \str_clear_new:N \l__witharrows_status_arrow_str
+    \dim_zero_new:N \l__witharrows_x_dim
+    \str_clear_new:N \l__witharrows_input_line_str
+    \seq_gput_right:NV \g__witharrows_arrow_int_seq \g__witharrows_arrow_int
+    \int_gzero:N \g__witharrows_arrow_int
+    \seq_gput_right:NV \g__witharrows_line_int_seq \g__witharrows_line_int
+    \int_gzero:N \g__witharrows_line_int
+    \seq_gput_right:NV \g__witharrows_col_int_seq \g__witharrows_col_int
+    \int_gzero:N \g__witharrows_col_int
+    \seq_gput_right:NV \g__witharrows_static_col_int_seq \g__witharrows_static_col_int
+    \int_gzero:N \g__witharrows_static_col_int
+    \seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1
+    \seq_set_eq:NN \l_tmpa_seq \g__witharrows_position_in_the_tree_seq
     \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
-    \str_clear_new:N \l_@@_prefix_str
-    \str_set:Nx \l_@@_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - }
-    \cs_set_eq:NN \\ \@@_cr:
+    \str_clear_new:N \l__witharrows_prefix_str
+    \str_set:Nx \l__witharrows_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - }
+    \cs_set_eq:NN \\ \__witharrows_cr:
     \dim_zero:N \mathsurround
-    \int_zero_new:N \l_@@_initial_int
-    \int_zero_new:N \l_@@_final_int
-    \int_zero_new:N \l_@@_arrow_int
-    \int_zero_new:N \l_@@_pos_of_arrow_int
-    \int_zero_new:N \l_@@_jump_int
-    \int_set:Nn \l_@@_jump_int \c_one_int
-    \str_set:Nn \l_@@_format_str { rl }
-    \seq_clear_new:N \l_@@_labels_seq
-    \bool_set_false:N \l_@@_tag_next_line_bool
-    \skip_zero:N \l_@@_interline_skip
-    \tl_clear_new:N \l_@@_code_before_tl
-    \tl_clear_new:N \l_@@_code_after_tl
-    \str_clear_new:N \l_@@_previous_key_str
-    \bool_if:NT \l_@@_in_WithArrows_bool
+    \int_zero_new:N \l__witharrows_initial_int
+    \int_zero_new:N \l__witharrows_final_int
+    \int_zero_new:N \l__witharrows_arrow_int
+    \int_zero_new:N \l__witharrows_pos_of_arrow_int
+    \int_zero_new:N \l__witharrows_jump_int
+    \int_set:Nn \l__witharrows_jump_int \c_one_int
+    \str_set:Nn \l__witharrows_format_str { rl }
+    \seq_clear_new:N \l__witharrows_labels_seq
+    \bool_set_false:N \l__witharrows_tag_next_line_bool
+    \skip_zero:N \l__witharrows_interline_skip
+    \tl_clear_new:N \l__witharrows_code_before_tl
+    \tl_clear_new:N \l__witharrows_code_after_tl
+    \str_clear_new:N \l__witharrows_previous_key_str
+    \bool_if:NT \l__witharrows_in_WithArrows_bool
       { \keys_set:nn { WithArrows / WithArrows } { #1 } }
-    \bool_if:NT \l_@@_in_DispWithArrows_bool
+    \bool_if:NT \l__witharrows_in_DispWithArrows_bool
       { \keys_set:nn { WithArrows / DispWithArrows } { #1 } }
-    \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_first_columns:
-    \int_set:Nn \l_@@_nb_cols_int { \str_count:N \l_@@_format_str }
-    \int_gset_eq:NN \g_@@_col_int \l_@@_nb_cols_int
-    \seq_clear_new:N \l_@@_format_seq
-    \seq_set_split:NnV \l_@@_format_seq { } \l_@@_format_str
-    \bool_if:NT \g_@@_footnote_bool { \begin { savenotes } }
-    \l_@@_code_before_tl
+    \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_first_columns:
+    \int_set:Nn \l__witharrows_nb_cols_int { \str_count:N \l__witharrows_format_str }
+    \int_gset_eq:NN \g__witharrows_col_int \l__witharrows_nb_cols_int
+    \seq_clear_new:N \l__witharrows_format_seq
+    \seq_set_split:NnV \l__witharrows_format_seq { } \l__witharrows_format_str
+    \bool_if:NT \g__witharrows_footnote_bool { \begin { savenotes } }
+    \l__witharrows_code_before_tl
     \spread at equation
-    \cs_set_eq:NN \notag \@@_notag:
-    \cs_set_eq:NN \nonumber \@@_nonumber:
-    \cs_set_eq:NN \tag \@@_tag
-    \cs_set_eq:NN \@@_old_label \label
-    \cs_set_eq:NN \label \@@_label:n
-    \cs_set_eq:NN \tagnextline \@@_tagnextline:
+    \cs_set_eq:NN \notag \__witharrows_notag:
+    \cs_set_eq:NN \nonumber \__witharrows_nonumber:
+    \cs_set_eq:NN \tag \__witharrows_tag
+    \cs_set_eq:NN \__witharrows_old_label \label
+    \cs_set_eq:NN \label \__witharrows_label:n
+    \cs_set_eq:NN \tagnextline \__witharrows_tagnextline:
   }
-\cs_new_protected:Npn \@@_construct_halign:
+\cs_new_protected:Npn \__witharrows_construct_halign:
   {
-    \seq_pop_right:NNTF \l_@@_format_seq \l_@@_type_col_str
+    \seq_pop_right:NNTF \l__witharrows_format_seq \l__witharrows_type_col_str
       {
         \use:x
           {
-            \int_gdecr:N \g_@@_col_int
-            \@@_construct_halign:
-            \int_compare:nNnT \g_@@_col_int = \l_@@_nb_cols_int
+            \int_gdecr:N \g__witharrows_col_int
+            \__witharrows_construct_halign:
+            \int_compare:nNnT \g__witharrows_col_int = \l__witharrows_nb_cols_int
               {
-                \cs_set_eq:cN { \l_@@_command_name_str } \@@_Arrow
-                \bool_if:NT \l_@@_in_DispWithArrows_bool
+                \cs_set_eq:cN { \l__witharrows_command_name_str } \__witharrows_Arrow
+                \bool_if:NT \l__witharrows_in_DispWithArrows_bool
                   {
-                    \@@_test_if_to_tag:
-                    \bool_if:NT \c_@@_amsthm_loaded_bool \@@_set_qedhere:
+                    \__witharrows_test_if_to_tag:
+                    \bool_if:NT \c__witharrows_amsthm_loaded_bool \__witharrows_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
-            \int_gset:Nn \g_@@_static_col_int { \int_use:N \g_@@_col_int }
+            \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil
+            \str_if_eq:VnT \l__witharrows_type_col_str { r } \hfill
+            \int_gincr:N \g__witharrows_col_int
+            \int_gset:Nn \g__witharrows_static_col_int { \int_use:N \g__witharrows_col_int }
             \c_math_toggle_token
               {
                 { }
-                \bool_if:NT \l_@@_displaystyle_bool \displaystyle
+                \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
                 ####
               }
             \c_math_toggle_token
-            \int_compare:nNnTF \g_@@_col_int = \l_@@_nb_cols_int
-              { \@@_construct_nodes: }
+            \int_compare:nNnTF \g__witharrows_col_int = \l__witharrows_nb_cols_int
+              { \__witharrows_construct_nodes: }
               {
-                \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 }
+                \str_if_eq:VnT \l__witharrows_type_col_str { l } \hfil
+                \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil
+                \bool_if:NT \l__witharrows_in_DispWithArrows_bool { \tabskip = \c_zero_skip }
                 &
               }
           }
       }
       {
-        \bool_if:NTF \l_@@_in_WithArrows_bool
+        \bool_if:NTF \l__witharrows_in_WithArrows_bool
           {
             \ialign
             \bgroup
           }
           {
-            \halign to \l_@@_linewidth_dim
+            \halign to \l__witharrows_linewidth_dim
             \bgroup
-            \bool_if:NT \l_@@_fleqn_bool
-              { \skip_horizontal:N \l_@@_mathindent_dim }
+            \bool_if:NT \l__witharrows_fleqn_bool
+              { \skip_horizontal:N \l__witharrows_mathindent_dim }
           }
-        \int_gincr:N \g_@@_line_int
-        \int_gzero:N \g_@@_col_int
-        \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl
+        \int_gincr:N \g__witharrows_line_int
+        \int_gzero:N \g__witharrows_col_int
+        \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl
           {
             \skip_horizontal:n
-              { \box_wd:N \l_@@_left_brace_box + \l_@@_delim_wd_dim }
+              { \box_wd:N \l__witharrows_left_brace_box + \l__witharrows_delim_wd_dim }
           }
         \strut
       }
   }
-\cs_new_protected:Npn \@@_construct_nodes:
+\cs_new_protected:Npn \__witharrows_construct_nodes:
   {
     \tikz [ remember~picture , overlay ]
       \node
         [
           node~contents = { } ,
-          @@_node_style ,
-          name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - l ,
+          __witharrows_node_style ,
+          name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - l ,
           alias =
             {
-              \str_if_empty:NF \l_@@_name_str
-                { \l_@@_name_str - \int_use:N \g_@@_line_int - l }
+              \str_if_empty:NF \l__witharrows_name_str
+                { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - l }
             }
         ]
         ;
@@ -806,36 +792,36 @@
       \node
         [
           node~contents = { } ,
-          @@_node_style ,
-          name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r ,
+          __witharrows_node_style ,
+          name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r ,
           alias =
             {
-              \str_if_empty:NF \l_@@_name_str
-                { \l_@@_name_str - \int_use:N \g_@@_line_int - r }
+              \str_if_empty:NF \l__witharrows_name_str
+                { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - r }
             }
         ]
         ;
-    \bool_if:NT \l_@@_show_node_names_bool
+    \bool_if:NT \l__witharrows_show_node_names_bool
       {
         \hbox_overlap_right:n
-          { \small wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r }
+          { \small wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r }
       }
   }
 \NewDocumentEnvironment { WithArrows } { ! O { } }
   {
-    \bool_set_true:N \l_@@_in_WithArrows_bool
-    \bool_set_false:N \l_@@_in_DispWithArrows_bool
-    \@@_pre_halign:n { #1 }
+    \bool_set_true:N \l__witharrows_in_WithArrows_bool
+    \bool_set_false:N \l__witharrows_in_DispWithArrows_bool
+    \__witharrows_pre_halign:n { #1 }
     \if_mode_math: \else:
-      \@@_error:n { WithArrows~outside~math~mode }
+      \__witharrows_error:n { WithArrows~outside~math~mode }
     \fi:
-    \int_case:nn \l_@@_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
+    \int_case:nn \l__witharrows_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
     \bgroup
-    \@@_construct_halign:
+    \__witharrows_construct_halign:
     &&
-    \@@_error:n { Too~much~columns~in~WithArrows }
+    \__witharrows_error:n { Too~much~columns~in~WithArrows }
     \c_math_toggle_token
-    \bool_if:NT \l_@@_displaystyle_bool \displaystyle
+    \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
     { ## }
     \c_math_toggle_token
     \cr
@@ -844,84 +830,84 @@
     \\
     \egroup
     \egroup
-    \@@_post_halign:
-    \bool_if:NT \g_@@_footnote_bool { \end { savenotes } }
+    \__witharrows_post_halign:
+    \bool_if:NT \g__witharrows_footnote_bool { \end { savenotes } }
   }
-\cs_new_protected:Npn \@@_post_halign:
+\cs_new_protected:Npn \__witharrows_post_halign:
   {
-    \cs_set:Npn \WithArrowsRightX { \g_@@_right_x_dim }
+    \cs_set:Npn \WithArrowsRightX { \g__witharrows_right_x_dim }
     \normalbaselines
-    \int_compare:nNnT \g_@@_arrow_int > 0
+    \int_compare:nNnT \g__witharrows_arrow_int > 0
       {
-        \int_compare:nNnT \g_@@_arrow_int = 1
+        \int_compare:nNnT \g__witharrows_arrow_int = 1
           {
-            \int_compare:nNnT \l_@@_pos_arrow_int > 5
-              { \int_set:Nn \l_@@_pos_arrow_int 5 }
+            \int_compare:nNnT \l__witharrows_pos_arrow_int > 5
+              { \int_set:Nn \l__witharrows_pos_arrow_int 5 }
           }
-        \@@_scan_arrows:
+        \__witharrows_scan_arrows:
       }
     \group_begin:
-      \tikzset { every~picture / .style = @@_standard }
-      \cs_set:Npn \WithArrowsNbLines { \int_use:N \g_@@_line_int }
-      \cs_set_eq:NN \MultiArrow \@@_MultiArrow:nn
-      \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_code_after
-      \bool_set_true:N \l_@@_in_code_after_bool
-      \l_@@_code_after_tl
+      \tikzset { every~picture / .style = __witharrows_standard }
+      \cs_set:Npn \WithArrowsNbLines { \int_use:N \g__witharrows_line_int }
+      \cs_set_eq:NN \MultiArrow \__witharrows_MultiArrow:nn
+      \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_code_after
+      \bool_set_true:N \l__witharrows_in_code_after_bool
+      \l__witharrows_code_after_tl
     \group_end:
-    \seq_gpop_right:NN \g_@@_position_in_the_tree_seq \l_tmpa_tl
-    \seq_gpop_right:NN \g_@@_position_in_the_tree_seq \l_tmpa_tl
-    \seq_gput_right:Nx \g_@@_position_in_the_tree_seq
+    \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl
+    \seq_gput_right:Nx \g__witharrows_position_in_the_tree_seq
       { \int_eval:n { \l_tmpa_tl + 1 } }
-    \int_compare:nNnT { \seq_count:N \g_@@_position_in_the_tree_seq } = 1
-      { \int_gincr:N \g_@@_last_env_int }
-    \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
-    \seq_gpop_right:NN \g_@@_static_col_int_seq \l_tmpa_tl
-    \int_gset:Nn \g_@@_static_col_int \l_tmpa_tl
+    \int_compare:nNnT { \seq_count:N \g__witharrows_position_in_the_tree_seq } = 1
+      { \int_gincr:N \g__witharrows_last_env_int }
+    \seq_gpop_right:NN \g__witharrows_arrow_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_arrow_int \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_line_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_line_int \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_col_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_col_int \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_static_col_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_static_col_int \l_tmpa_tl
   }
-\cs_new_protected:Npn \@@_cr:
+\cs_new_protected:Npn \__witharrows_cr:
   {
     \scan_stop:
-    \int_compare:nNnF \g_@@_col_int = \g_@@_static_col_int
-      { \@@_error:n { omit~probably~used } }
-    \prg_replicate:nn { \l_@@_nb_cols_int - \g_@@_static_col_int } { & { } }
+    \int_compare:nNnF \g__witharrows_col_int = \g__witharrows_static_col_int
+      { \__witharrows_error:n { omit~probably~used } }
+    \prg_replicate:nn { \l__witharrows_nb_cols_int - \g__witharrows_static_col_int } { & { } }
     \group_align_safe_begin:
-    \peek_meaning_remove:NTF * \@@_cr_i: \@@_cr_i:
+    \peek_meaning_remove:NTF * \__witharrows_cr_i: \__witharrows_cr_i:
   }
-\cs_new_protected:Npn \@@_cr_i:
-  { \peek_meaning:NTF [ \@@_cr_ii: { \@@_cr_ii: [ \c_zero_dim ] } }
-\cs_new_protected:Npn \@@_cr_ii: [ #1 ]
+\cs_new_protected:Npn \__witharrows_cr_i:
+  { \peek_meaning:NTF [ \__witharrows_cr_ii: { \__witharrows_cr_ii: [ \c_zero_dim ] } }
+\cs_new_protected:Npn \__witharrows_cr_ii: [ #1 ]
   {
     \peek_meaning_ignore_spaces:NTF \end
       {
-        \@@_cr_iii:n { #1 }
-        \@@_analyze_end:Nn
+        \__witharrows_cr_iii:n { #1 }
+        \__witharrows_analyze_end:Nn
       }
-      { \@@_cr_iii:n { #1 } }
+      { \__witharrows_cr_iii:n { #1 } }
   }
-\cs_new_protected:Npn \@@_cr_iii:n #1
+\cs_new_protected:Npn \__witharrows_cr_iii:n #1
   {
     \group_align_safe_end:
-    \bool_if:NT \l_@@_in_DispWithArrows_bool
+    \bool_if:NT \l__witharrows_in_DispWithArrows_bool
       {
-        \clist_if_in:NnTF \l_@@_tags_clist { all }
+        \clist_if_in:NnTF \l__witharrows_tags_clist { all }
           {
-            \tl_if_empty:NT \l_@@_tag_tl { \int_gincr:N \c at equation }
+            \tl_if_empty:NT \l__witharrows_tag_tl { \int_gincr:N \c at equation }
             \cs_gset:Npx \g_tmpa_tl
-              { \tl_if_empty:NTF \l_@@_tag_tl \theequation \l_@@_tag_tl }
-            \seq_if_empty:NF \l_@@_labels_seq
+              { \tl_if_empty:NTF \l__witharrows_tag_tl \theequation \l__witharrows_tag_tl }
+            \seq_if_empty:NF \l__witharrows_labels_seq
               {
                 \cs_set:Npx \@currentlabel { \p at equation \g_tmpa_tl }
-                \bool_if:NT \c_@@_hyperref_loaded_bool
+                \bool_if:NT \c__witharrows_hyperref_loaded_bool
                   {
                     \str_set:Nn \This at name { equation }
                     \hyper at refstepcounter { equation }
                   }
-                \bool_if:NT \c_@@_cleveref_loaded_bool
+                \bool_if:NT \c__witharrows_cleveref_loaded_bool
                   {
                     \cref at constructprefix { equation } \cref at result
                     \protected at edef \cref at currentlabel
@@ -935,78 +921,78 @@
                         \p at equation \g_tmpa_tl
                       }
                   }
-                \seq_map_function:NN \l_@@_labels_seq \@@_old_label
+                \seq_map_function:NN \l__witharrows_labels_seq \__witharrows_old_label
               }
-            \@@_save:N \l_@@_tag_star_bool
-            \@@_save:N \l_@@_qedhere_bool
-            \bool_if:NT \l_@@_tag_next_line_bool
+            \__witharrows_save:N \l__witharrows_tag_star_bool
+            \__witharrows_save:N \l__witharrows_qedhere_bool
+            \bool_if:NT \l__witharrows_tag_next_line_bool
               {
                 \openup -\jot
-                \bool_set_false:N \l_@@_tag_next_line_bool
+                \bool_set_false:N \l__witharrows_tag_next_line_bool
                 \notag \\ &
               }
             &
-            \@@_restore:N \l_@@_tag_star_bool
-            \@@_restore:N \l_@@_qedhere_bool
-            \bool_if:NT \l_@@_qedhere_bool
-               { \hbox_overlap_left:n \@@_qedhere_i: }
+            \__witharrows_restore:N \l__witharrows_tag_star_bool
+            \__witharrows_restore:N \l__witharrows_qedhere_bool
+            \bool_if:NT \l__witharrows_qedhere_bool
+               { \hbox_overlap_left:n \__witharrows_qedhere_i: }
             \cs_set_eq:NN \theequation \g_tmpa_tl
-            \bool_if:NT \l_@@_tag_star_bool
+            \bool_if:NT \l__witharrows_tag_star_bool
               { \cs_set_eq:NN \tagform@ \prg_do_nothing: }
             \hbox_overlap_left:n
               {
-                \bool_if:NF \c_@@_leqno_bool
+                \bool_if:NF \c__witharrows_leqno_bool
                   {
-                    \tikz [ @@_standard ]
-                      \coordinate ( \int_use:N \g_@@_line_int - v ) ;
+                    \tikz [ __witharrows_standard ]
+                      \coordinate ( \int_use:N \g__witharrows_line_int - v ) ;
                   }
                 \quad
                 \@eqnnum
               }
-            \bool_if:NT \c_@@_leqno_bool
+            \bool_if:NT \c__witharrows_leqno_bool
               {
-                \tikz [ @@_standard ]
-                  \coordinate ( \int_use:N \g_@@_line_int - v ) ;
+                \tikz [ __witharrows_standard ]
+                  \coordinate ( \int_use:N \g__witharrows_line_int - v ) ;
               }
           }
           {
-            \@@_save:N \l_@@_qedhere_bool
+            \__witharrows_save:N \l__witharrows_qedhere_bool
             &
-            \@@_restore:N \l_@@_qedhere_bool
-            \bool_if:NT \l_@@_qedhere_bool
-               { \hbox_overlap_left:n \@@_qedhere_i: }
-            \tikz [ @@_standard ]
-               \coordinate ( \int_use:N \g_@@_line_int - v ) ;
+            \__witharrows_restore:N \l__witharrows_qedhere_bool
+            \bool_if:NT \l__witharrows_qedhere_bool
+               { \hbox_overlap_left:n \__witharrows_qedhere_i: }
+            \tikz [ __witharrows_standard ]
+               \coordinate ( \int_use:N \g__witharrows_line_int - v ) ;
           }
       }
     \dim_compare:nNnT { #1 } < \c_zero_dim
-       { \@@_error:n { option~of~cr~negative } }
+       { \__witharrows_error:n { option~of~cr~negative } }
 
     \cr
     \noalign
       {
         \dim_set:Nn \l_tmpa_dim { \dim_max:nn { #1 } \c_zero_dim }
-        \skip_vertical:n { \l_tmpa_dim + \l_@@_interline_skip }
+        \skip_vertical:n { \l_tmpa_dim + \l__witharrows_interline_skip }
         \scan_stop:
       }
   }
-\cs_new_protected:Npn \@@_analyze_end:Nn #1 #2
+\cs_new_protected:Npn \__witharrows_analyze_end:Nn #1 #2
   {
-    \exp_args:NV \str_if_eq:nnT \l_@@_type_env_str { #2 }
+    \exp_args:NV \str_if_eq:nnT \l__witharrows_type_env_str { #2 }
       {
-        \@@_error:n { newline~at~the~end~of~env }
+        \__witharrows_error:n { newline~at~the~end~of~env }
         \group_begin:
         \globaldefs = 1
-        \@@_msg_redirect_name:nn { newline~at~the~end~of~env } { none }
+        \__witharrows_msg_redirect_name:nn { newline~at~the~end~of~env } { none }
         \group_end:
       }
     \end { #2 }
   }
-\bool_new:N \l_@@_in_label_or_minipage_bool
+\bool_new:N \l__witharrows_in_label_or_minipage_bool
 \NewDocumentEnvironment { DispWithArrows } { ! d < > ! O { } }
   {
-    \bool_set_true:N \l_@@_in_DispWithArrows_bool
-    \bool_if:nT \c_@@_mathtools_loaded_bool
+    \bool_set_true:N \l__witharrows_in_DispWithArrows_bool
+    \bool_if:nT \c__witharrows_mathtools_loaded_bool
       {
         \MH_if_boolean:nT { show_only_refs }
           {
@@ -1014,21 +1000,21 @@
             \MH_set_boolean_T:n { show_only_refs }
           }
       }
-    \bool_if:NT \c_@@_typedref_loaded_bool { \str_set:Nn \sr at name { equation } }
-    \bool_if:NT \c_@@_amsmath_loaded_bool \intertext@
-    \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l_@@_left_brace_tl { #1 } }
-    \@@_pre_halign:n { #2 }
-    \bool_if:NT \l_@@_subequations_bool { \begin { subequations } }
-    \bool_if:NF \l_@@_sbwi_bool
+    \bool_if:NT \c__witharrows_typedref_loaded_bool { \str_set:Nn \sr at name { equation } }
+    \bool_if:NT \c__witharrows_amsmath_loaded_bool \intertext@
+    \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l__witharrows_left_brace_tl { #1 } }
+    \__witharrows_pre_halign:n { #2 }
+    \bool_if:NT \l__witharrows_subequations_bool { \begin { subequations } }
+    \bool_if:NF \l__witharrows_sbwi_bool
       {
         \if at inlabel
-        \bool_set_true:N \l_@@_in_label_or_minipage_bool
+        \bool_set_true:N \l__witharrows_in_label_or_minipage_bool
         \fi
         \if at minipage
-        \bool_set_true:N \l_@@_in_label_or_minipage_bool
+        \bool_set_true:N \l__witharrows_in_label_or_minipage_bool
         \fi
       }
-    \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl
+    \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl
       {
         \hbox_set:Nn \l_tmpa_box
           {
@@ -1035,32 +1021,32 @@
             \group_begin:
             \dim_set_eq:NN \nulldelimiterspace \c_zero_dim
             \c_math_toggle_token
-            \left \l_@@_replace_left_brace_by_tl \vcenter to 1 cm { } \right.
+            \left \l__witharrows_replace_left_brace_by_tl \vcenter to 1 cm { } \right.
             \c_math_toggle_token
             \group_end:
           }
-        \dim_zero_new:N \l_@@_delim_wd_dim
-        \dim_set:Nn \l_@@_delim_wd_dim { \box_wd:N \l_tmpa_box }
-        \box_clear_new:N \l_@@_left_brace_box
-        \hbox_set:Nn \l_@@_left_brace_box
+        \dim_zero_new:N \l__witharrows_delim_wd_dim
+        \dim_set:Nn \l__witharrows_delim_wd_dim { \box_wd:N \l_tmpa_box }
+        \box_clear_new:N \l__witharrows_left_brace_box
+        \hbox_set:Nn \l__witharrows_left_brace_box
           {
             \group_begin:
-              \cs_set_eq:NN \label \@@_old_label
+              \cs_set_eq:NN \label \__witharrows_old_label
               \c_math_toggle_token
-              \bool_if:NT \l_@@_displaystyle_bool \displaystyle
-              \l_@@_left_brace_tl
+              \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
+              \l__witharrows_left_brace_tl
               { }
               \c_math_toggle_token
             \group_end:
           }
       }
-    \tl_clear_new:N \l_@@_tag_tl
-    \bool_set_false:N \l_@@_qedhere_bool
-    \bool_set_false:N \l_@@_tag_star_bool
+    \tl_clear_new:N \l__witharrows_tag_tl
+    \bool_set_false:N \l__witharrows_qedhere_bool
+    \bool_set_false:N \l__witharrows_tag_star_bool
     \if_mode_math:
-      \@@_fatal:n { DispWithArrows~in~math~mode }
+      \__witharrows_fatal:n { DispWithArrows~in~math~mode }
     \fi:
-    \bool_if:NTF \l_@@_in_label_or_minipage_bool
+    \bool_if:NTF \l__witharrows_in_label_or_minipage_bool
       { \c_math_toggle_token }
       {
         \if_mode_vertical:
@@ -1069,29 +1055,29 @@
         \fi:
         \c_math_toggle_token \c_math_toggle_token
       }
-    \dim_zero_new:N \l_@@_linewidth_dim
-    \bool_if:NTF \l_@@_in_label_or_minipage_bool
-       { \dim_set_eq:NN \l_@@_linewidth_dim \linewidth }
-       { \dim_set_eq:NN \l_@@_linewidth_dim \displaywidth }
-    \box_clear_new:N \l_@@_halign_box
-    \setbox \l_@@_halign_box \vtop \bgroup
+    \dim_zero_new:N \l__witharrows_linewidth_dim
+    \bool_if:NTF \l__witharrows_in_label_or_minipage_bool
+       { \dim_set_eq:NN \l__witharrows_linewidth_dim \linewidth }
+       { \dim_set_eq:NN \l__witharrows_linewidth_dim \displaywidth }
+    \box_clear_new:N \l__witharrows_halign_box
+    \setbox \l__witharrows_halign_box \vtop \bgroup
     \tabskip =
-      \bool_if:NTF \l_@@_fleqn_bool
+      \bool_if:NTF \l__witharrows_fleqn_bool
         \c_zero_skip
         { 0 pt plus 1000 pt minus 1000 pt }
-    \@@_construct_halign:
+    \__witharrows_construct_halign:
     \tabskip = 0 pt plus 1000 pt minus 1000 pt
     &
     $ ## $
     \tabskip = \c_zero_skip
     &&
-    \@@_fatal:n { Too~much~columns~in~DispWithArrows }
+    \__witharrows_fatal:n { Too~much~columns~in~DispWithArrows }
     \bool_if:nT \c_false_bool { ## }
     \cr
   }
   {
-    \clist_if_in:NnT \l_@@_tags_clist { last }
-      { \clist_set:Nn \l_@@_tags_clist { all } }
+    \clist_if_in:NnT \l__witharrows_tags_clist { last }
+      { \clist_set:Nn \l__witharrows_tags_clist { all } }
     \\
     \egroup
     \unskip \unpenalty \unskip \unpenalty
@@ -1098,34 +1084,34 @@
     \box_set_to_last:N \l_tmpa_box
     \nointerlineskip
     \box_use:N \l_tmpa_box
-    \dim_gzero_new:N \g_@@_alignment_dim
-    \dim_gset:Nn \g_@@_alignment_dim { \box_wd:N \l_tmpa_box }
-    \box_clear_new:N \l_@@_new_box
-    \hbox_set:Nn \l_@@_new_box { \hbox_unpack_clear:N \l_tmpa_box }
+    \dim_gzero_new:N \g__witharrows_alignment_dim
+    \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l_tmpa_box }
+    \box_clear_new:N \l__witharrows_new_box
+    \hbox_set:Nn \l__witharrows_new_box { \hbox_unpack_clear:N \l_tmpa_box }
     \dim_compare:nNnT
-      { \box_wd:N \l_@@_new_box } < \g_@@_alignment_dim
-      { \dim_gset:Nn \g_@@_alignment_dim { \box_wd:N \l_@@_new_box } }
+      { \box_wd:N \l__witharrows_new_box } < \g__witharrows_alignment_dim
+      { \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l__witharrows_new_box } }
     \egroup
-     \tl_if_eq:NNTF \l_@@_left_brace_tl \c_novalue_tl
-       { \box_use_drop:N \l_@@_halign_box }
+     \tl_if_eq:NNTF \l__witharrows_left_brace_tl \c_novalue_tl
+       { \box_use_drop:N \l__witharrows_halign_box }
        {
-         \hbox_to_wd:nn \l_@@_linewidth_dim
+         \hbox_to_wd:nn \l__witharrows_linewidth_dim
            {
-            \bool_if:NTF \l_@@_fleqn_bool
-              { \skip_horizontal:n \l_@@_mathindent_dim }
+            \bool_if:NTF \l__witharrows_fleqn_bool
+              { \skip_horizontal:n \l__witharrows_mathindent_dim }
               \hfil
-            \hbox_to_wd:nn \g_@@_alignment_dim
+            \hbox_to_wd:nn \g__witharrows_alignment_dim
               {
-                \box_use_drop:N \l_@@_left_brace_box
+                \box_use_drop:N \l__witharrows_left_brace_box
                 \dim_set:Nn \l_tmpa_dim
                   {
-                    \box_ht:N \l_@@_halign_box
-                    + \box_dp:N \l_@@_halign_box
+                    \box_ht:N \l__witharrows_halign_box
+                    + \box_dp:N \l__witharrows_halign_box
                   }
                 \group_begin:
                 \dim_set_eq:NN \nulldelimiterspace \c_zero_dim
                 \c_math_toggle_token
-                  \left \l_@@_replace_left_brace_by_tl
+                  \left \l__witharrows_replace_left_brace_by_tl
                     \vcenter to \l_tmpa_dim { \vfil }
                   \right.
                 \c_math_toggle_token
@@ -1134,36 +1120,36 @@
               }
             \hfil
            }
-         \skip_horizontal:n { - \l_@@_linewidth_dim }
-         \vcenter { \box_use_drop:N \l_@@_halign_box }
+         \skip_horizontal:n { - \l__witharrows_linewidth_dim }
+         \vcenter { \box_use_drop:N \l__witharrows_halign_box }
        }
-    \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__witharrows_right_x_dim
+    \dim_gset_eq:NN \g__witharrows_right_x_dim \c_max_dim
+    \begin { tikzpicture } [ __witharrows_standard ]
+      \int_step_variable:nNn \g__witharrows_line_int \l_tmpa_int
         {
           \cs_if_free:cTF
-            { pgf at sh@ns at wa - \l_@@_prefix_str - \l_tmpa_int - v }
-            { \@@_fatal:n { Inexistent~v-node } }
+            { pgf at sh@ns at wa - \l__witharrows_prefix_str - \l_tmpa_int - v }
+            { \__witharrows_fatal: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 }
+              \dim_compare:nNnT \l_tmpa_dim < \g__witharrows_right_x_dim
+                { \dim_gset:Nn \g__witharrows_right_x_dim \l_tmpa_dim }
             }
         }
     \end { tikzpicture }
-    \@@_post_halign:
-    \bool_if:nT \c_@@_mathtools_loaded_bool
+    \__witharrows_post_halign:
+    \bool_if:nT \c__witharrows_mathtools_loaded_bool
       { \MH_if_boolean:nT { show_only_refs } \MT_showonlyrefs_true: }
-    \bool_if:NTF \l_@@_in_label_or_minipage_bool
+    \bool_if:NTF \l__witharrows_in_label_or_minipage_bool
       {
         \c_math_toggle_token
         \skip_vertical:N \belowdisplayskip
       }
       { \c_math_toggle_token \c_math_toggle_token }
-    \bool_if:NT \l_@@_subequations_bool { \end { subequations } }
-    \bool_if:NT \g_@@_footnote_bool { \end { savenotes } }
+    \bool_if:NT \l__witharrows_subequations_bool { \end { subequations } }
+    \bool_if:NT \g__witharrows_footnote_bool { \end { savenotes } }
     \ignorespacesafterend
   }
 \NewDocumentEnvironment { DispWithArrows* } { }
@@ -1172,77 +1158,77 @@
     \DispWithArrows
   }
   \endDispWithArrows
-\cs_new_protected:Npn \@@_if_in_last_col_of_disp:Nn #1 #2
+\cs_new_protected:Npn \__witharrows_if_in_last_col_of_disp:Nn #1 #2
   {
-    \bool_if:NTF \l_@@_in_WithArrows_bool
-      { \@@_error:nn { Not~allowed~in~WithArrows } { #1 } }
+    \bool_if:NTF \l__witharrows_in_WithArrows_bool
+      { \__witharrows_error:nn { Not~allowed~in~WithArrows } { #1 } }
       {
-        \int_compare:nNnTF \g_@@_col_int < \l_@@_nb_cols_int
-          { \@@_error:nn { Not~allowed~in~DispWithArrows } { #1 } }
+        \int_compare:nNnTF \g__witharrows_col_int < \l__witharrows_nb_cols_int
+          { \__witharrows_error:nn { Not~allowed~in~DispWithArrows } { #1 } }
           { #2 }
       }
   }
-\cs_new_protected:Npn \@@_notag:
-  { \@@_if_in_last_col_of_disp:Nn \notag { \clist_clear:N \l_@@_tags_clist } }
-\cs_new_protected:Npn \@@_nonumber:
-  { \@@_if_in_last_col_of_disp:Nn \nonumber { \clist_clear:N \l_@@_tags_clist } }
-\NewDocumentCommand \@@_tag { s m }
+\cs_new_protected:Npn \__witharrows_notag:
+  { \__witharrows_if_in_last_col_of_disp:Nn \notag { \clist_clear:N \l__witharrows_tags_clist } }
+\cs_new_protected:Npn \__witharrows_nonumber:
+  { \__witharrows_if_in_last_col_of_disp:Nn \nonumber { \clist_clear:N \l__witharrows_tags_clist } }
+\NewDocumentCommand \__witharrows_tag { s m }
   {
-    \@@_if_in_last_col_of_disp:Nn \tag
+    \__witharrows_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
+        \tl_if_empty:NF \l__witharrows_tag_tl
+          { \__witharrows_error:nn  { Multiple~tags } { #2 } }
+        \clist_set:Nn \l__witharrows_tags_clist { all }
+        \bool_if:nT \c__witharrows_mathtools_loaded_bool
           {
             \MH_if_boolean:nT { show_only_refs }
               {
                 \MH_if_boolean:nF { show_manual_tags }
-                  { \clist_clear:N \l_@@_tags_clist }
+                  { \clist_clear:N \l__witharrows_tags_clist }
               }
           }
-        \tl_set:Nn \l_@@_tag_tl { #2 }
-        \bool_set:Nn \l_@@_tag_star_bool { #1 }
-        \bool_if:nT { #1 && ! \bool_if_p:N \c_@@_amsmath_loaded_bool }
-          { \@@_error:n { tag*~without~amsmath } }
+        \tl_set:Nn \l__witharrows_tag_tl { #2 }
+        \bool_set:Nn \l__witharrows_tag_star_bool { #1 }
+        \bool_if:nT { #1 && ! \bool_if_p:N \c__witharrows_amsmath_loaded_bool }
+          { \__witharrows_error:n { tag*~without~amsmath } }
       }
   }
-\cs_new_protected:Npn \@@_label:n #1
+\cs_new_protected:Npn \__witharrows_label:n #1
   {
-    \@@_if_in_last_col_of_disp:Nn \label
+    \__witharrows_if_in_last_col_of_disp:Nn \label
       {
-        \seq_if_empty:NF \l_@@_labels_seq
+        \seq_if_empty:NF \l__witharrows_labels_seq
           {
-            \bool_if:NTF \c_@@_cleveref_loaded_bool
-              { \@@_error:n { Multiple~labels~with~cleveref } }
-              { \@@_error:n { Multiple~labels } }
+            \bool_if:NTF \c__witharrows_cleveref_loaded_bool
+              { \__witharrows_error:n { Multiple~labels~with~cleveref } }
+              { \__witharrows_error:n { Multiple~labels } }
           }
-        \seq_put_right:Nn \l_@@_labels_seq { #1 }
-        \bool_if:nT \c_@@_mathtools_loaded_bool
+        \seq_put_right:Nn \l__witharrows_labels_seq { #1 }
+        \bool_if:nT \c__witharrows_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 }
+                  { \clist_set:Nn \l__witharrows_tags_clist { all } }
+                  { \clist_clear:N \l__witharrows_tags_clist }
               }
           }
-        \bool_if:nT \c_@@_autonum_loaded_bool
+        \bool_if:nT \c__witharrows_autonum_loaded_bool
           {
             \cs_if_exist:cTF { autonum@#1Referenced }
-              { \clist_set:Nn \l_@@_tags_clist { all } }
-              { \clist_clear:N \l_@@_tags_clist }
+              { \clist_set:Nn \l__witharrows_tags_clist { all } }
+              { \clist_clear:N \l__witharrows_tags_clist }
           }
       }
   }
-\cs_new_protected:Npn \@@_tagnextline:
+\cs_new_protected:Npn \__witharrows_tagnextline:
   {
-    \@@_if_in_last_col_of_disp:Nn \tagnextline
-      { \bool_set_true:N \l_@@_tag_next_line_bool }
+    \__witharrows_if_in_last_col_of_disp:Nn \tagnextline
+      { \bool_set_true:N \l__witharrows_tag_next_line_bool }
   }
-\cs_new_protected:Npn \@@_qedhere: { \bool_set_true:N \l_@@_qedhere_bool }
-\cs_new_protected:Npn \@@_set_qedhere: { \cs_set_eq:NN \qedhere \@@_qedhere: }
-\cs_new_protected:Npn \@@_qedhere_i:
+\cs_new_protected:Npn \__witharrows_qedhere: { \bool_set_true:N \l__witharrows_qedhere_bool }
+\cs_new_protected:Npn \__witharrows_set_qedhere: { \cs_set_eq:NN \qedhere \__witharrows_qedhere: }
+\cs_new_protected:Npn \__witharrows_qedhere_i:
   {
     \group_begin:
       \cs_set_eq:NN \qed \qedsymbol
@@ -1250,233 +1236,233 @@
       \QED at stack \relax \relax
     \group_end:
   }
-\cs_new_protected:Npn \@@_scan_arrows:
+\cs_new_protected:Npn \__witharrows_scan_arrows:
   {
     \group_begin:
-    \int_compare:nNnT \l_@@_pos_arrow_int = 7
+    \int_compare:nNnT \l__witharrows_pos_arrow_int = 7
       {
-        \@@_scan_arrows_i:
-        \int_set:Nn \l_@@_pos_arrow_int 8
+        \__witharrows_scan_arrows_i:
+        \int_set:Nn \l__witharrows_pos_arrow_int 8
       }
-    \@@_scan_arrows_i:
+    \__witharrows_scan_arrows_i:
     \group_end:
   }
-\cs_new_protected:Npn \@@_scan_arrows_i:
+\cs_new_protected:Npn \__witharrows_scan_arrows_i:
   {
-    \int_zero_new:N \l_@@_first_arrow_of_group_int
-    \int_zero_new:N \l_@@_first_line_of_group_int
-    \int_zero_new:N \l_@@_last_line_of_group_int
-    \seq_clear_new:N \l_@@_first_arrows_seq
-    \seq_clear_new:N \l_@@_last_arrows_seq
-    \bool_set_true:N \l_@@_new_group_bool
-    \int_set:Nn \l_@@_arrow_int \c_one_int
-    \int_until_do:nNnn \l_@@_arrow_int > \g_@@_arrow_int
+    \int_zero_new:N \l__witharrows_first_arrow_of_group_int
+    \int_zero_new:N \l__witharrows_first_line_of_group_int
+    \int_zero_new:N \l__witharrows_last_line_of_group_int
+    \seq_clear_new:N \l__witharrows_first_arrows_seq
+    \seq_clear_new:N \l__witharrows_last_arrows_seq
+    \bool_set_true:N \l__witharrows_new_group_bool
+    \int_set:Nn \l__witharrows_arrow_int \c_one_int
+    \int_until_do:nNnn \l__witharrows_arrow_int > \g__witharrows_arrow_int
       {
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
           { initial } \l_tmpa_tl
-        \int_set:Nn \l_@@_initial_int \l_tmpa_tl
+        \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
           { final } \l_tmpa_tl
-        \int_set:Nn \l_@@_final_int \l_tmpa_tl
+        \int_set:Nn \l__witharrows_final_int \l_tmpa_tl
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
-          { status } \l_@@_status_arrow_str
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { status } \l__witharrows_status_arrow_str
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
-          { input-line } \l_@@_input_line_str
-        \int_compare:nNnTF \l_@@_final_int > \g_@@_line_int
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { input-line } \l__witharrows_input_line_str
+        \int_compare:nNnTF \l__witharrows_final_int > \g__witharrows_line_int
           {
-            \int_compare:nNnF \l_@@_pos_arrow_int = 8
-              { \@@_error:n { Too~few~lines~for~an~arrow } }
+            \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
+              { \__witharrows_error:n { Too~few~lines~for~an~arrow } }
           }
-          \@@_code_for_possible_arrow:
-        \int_incr:N \l_@@_arrow_int
+          \__witharrows_code_for_possible_arrow:
+        \int_incr:N \l__witharrows_arrow_int
       }
     \bool_if:nT
       {
-        \int_compare_p:n { \l_@@_pos_arrow_int != 7 }
+        \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 }
           &&
-        \int_compare_p:nNn \l_@@_first_arrow_of_group_int > 0
+        \int_compare_p:nNn \l__witharrows_first_arrow_of_group_int > 0
       }
-      { \@@_draw_arrows:nn \l_@@_first_arrow_of_group_int \g_@@_arrow_int }
+      { \__witharrows_draw_arrows:nn \l__witharrows_first_arrow_of_group_int \g__witharrows_arrow_int }
   }
-\cs_new_protected:Npn \@@_code_for_possible_arrow:
+\cs_new_protected:Npn \__witharrows_code_for_possible_arrow:
   {
     \bool_if:nT
       {
-        \int_compare_p:nNn \l_@@_arrow_int > \c_one_int
+        \int_compare_p:nNn \l__witharrows_arrow_int > \c_one_int
         &&
-       ( \int_compare_p:n { \l_@@_initial_int > \l_@@_last_line_of_group_int }
+       ( \int_compare_p:n { \l__witharrows_initial_int > \l__witharrows_last_line_of_group_int }
            &&
-         \int_compare_p:n { \l_@@_pos_arrow_int != 7 }
+         \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 }
            ||
-         \str_if_eq_p:Vn \l_@@_status_arrow_str { new-group }
+         \str_if_eq_p:Vn \l__witharrows_status_arrow_str { new-group }
        )
       }
       {
-        \int_compare:nNnF \l_@@_first_arrow_of_group_int = \c_zero_int
+        \int_compare:nNnF \l__witharrows_first_arrow_of_group_int = \c_zero_int
           {
-            \@@_draw_arrows:nn
-              \l_@@_first_arrow_of_group_int
-              { \l_@@_arrow_int - 1 }
+            \__witharrows_draw_arrows:nn
+              \l__witharrows_first_arrow_of_group_int
+              { \l__witharrows_arrow_int - 1 }
           }
-        \bool_set_true:N \l_@@_new_group_bool
+        \bool_set_true:N \l__witharrows_new_group_bool
       }
-    \bool_if:nTF \l_@@_new_group_bool
+    \bool_if:nTF \l__witharrows_new_group_bool
       {
-        \bool_set_false:N \l_@@_new_group_bool
-        \int_set_eq:NN \l_@@_first_arrow_of_group_int \l_@@_arrow_int
-        \int_set_eq:NN \l_@@_first_line_of_group_int \l_@@_initial_int
-        \int_set_eq:NN \l_@@_last_line_of_group_int \l_@@_final_int
-        \seq_clear:N \l_@@_first_arrows_seq
-        \seq_put_left:NV \l_@@_first_arrows_seq \l_@@_arrow_int
-        \seq_clear:N \l_@@_last_arrows_seq
-        \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int
-        \int_compare:nT { \l_@@_pos_arrow_int != 8 }
-          { \dim_set:Nn \l_@@_x_dim { - \c_max_dim } }
+        \bool_set_false:N \l__witharrows_new_group_bool
+        \int_set_eq:NN \l__witharrows_first_arrow_of_group_int \l__witharrows_arrow_int
+        \int_set_eq:NN \l__witharrows_first_line_of_group_int \l__witharrows_initial_int
+        \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int
+        \seq_clear:N \l__witharrows_first_arrows_seq
+        \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int
+        \seq_clear:N \l__witharrows_last_arrows_seq
+        \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int
+        \int_compare:nT { \l__witharrows_pos_arrow_int != 8 }
+          { \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim } }
       }
       {
         \bool_if:nF
-          { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } }
+          { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } }
           {
             \int_compare:nT
-              { \l_@@_initial_int = \l_@@_first_line_of_group_int }
-              { \seq_put_left:NV \l_@@_first_arrows_seq \l_@@_arrow_int }
-            \int_compare:nNnTF \l_@@_final_int > \l_@@_last_line_of_group_int
+              { \l__witharrows_initial_int = \l__witharrows_first_line_of_group_int }
+              { \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int }
+            \int_compare:nNnTF \l__witharrows_final_int > \l__witharrows_last_line_of_group_int
               {
-                \int_set_eq:NN \l_@@_last_line_of_group_int \l_@@_final_int
-                \seq_clear:N \l_@@_last_arrows_seq
-                \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int
+                \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int
+                \seq_clear:N \l__witharrows_last_arrows_seq
+                \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int
               }
               {
-                \int_compare:nNnT \l_@@_final_int = \l_@@_last_line_of_group_int
-                  { \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int }
+                \int_compare:nNnT \l__witharrows_final_int = \l__witharrows_last_line_of_group_int
+                  { \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int }
               }
           }
       }
-    \bool_if:nF { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } }
+    \bool_if:nF { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } }
       {
-        \int_compare:nT { \l_@@_pos_arrow_int != 8 }
-          { \@@_update_x:nn \l_@@_initial_int \l_@@_final_int }
+        \int_compare:nT { \l__witharrows_pos_arrow_int != 8 }
+          { \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int }
       }
   }
 \cs_generate_variant:Nn \keys_set:nn { n o }
-\cs_new_protected:Npn \@@_keys_set:
+\cs_new_protected:Npn \__witharrows_keys_set:
   { \keys_set_known:no { WithArrows / Arrow / SecondPass } }
-\cs_new_protected:Npn \@@_draw_arrows:nn #1 #2
+\cs_new_protected:Npn \__witharrows_draw_arrows:nn #1 #2
   {
     \group_begin:
-    \int_zero_new:N \l_@@_first_arrow_int
-    \int_set:Nn \l_@@_first_arrow_int { #1 }
-    \int_zero_new:N \l_@@_last_arrow_int
-    \int_set:Nn \l_@@_last_arrow_int { #2 }
-    \int_set:Nn \l_@@_arrow_int \l_@@_first_arrow_int
-    \int_until_do:nNnn \l_@@_arrow_int > \l_@@_last_arrow_int
+    \int_zero_new:N \l__witharrows_first_arrow_int
+    \int_set:Nn \l__witharrows_first_arrow_int { #1 }
+    \int_zero_new:N \l__witharrows_last_arrow_int
+    \int_set:Nn \l__witharrows_last_arrow_int { #2 }
+    \int_set:Nn \l__witharrows_arrow_int \l__witharrows_first_arrow_int
+    \int_until_do:nNnn \l__witharrows_arrow_int > \l__witharrows_last_arrow_int
       {
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
           { initial } \l_tmpa_tl
-        \int_set:Nn \l_@@_initial_int \l_tmpa_tl
+        \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl
         \prop_get:cnN
-          { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
           { final } \l_tmpa_tl
-        \int_set:Nn \l_@@_final_int \l_tmpa_tl
-        \int_compare:nT { \l_@@_final_int <= \g_@@_line_int } \@@_draw_arrows_i:
-        \int_incr:N \l_@@_arrow_int
+        \int_set:Nn \l__witharrows_final_int \l_tmpa_tl
+        \int_compare:nT { \l__witharrows_final_int <= \g__witharrows_line_int } \__witharrows_draw_arrows_i:
+        \int_incr:N \l__witharrows_arrow_int
       }
     \group_end:
   }
-\cs_new_protected:Npn \@@_draw_arrows_i:
+\cs_new_protected:Npn \__witharrows_draw_arrows_i:
   {
     \group_begin:
     \prop_get:cnN
-      { g_@@_arrow _\l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+      { g__witharrows_arrow _\l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
       { options } \l_tmpa_tl
-    \str_clear_new:N \l_@@_previous_key_str
+    \str_clear_new:N \l__witharrows_previous_key_str
     \exp_args:NNo \exp_args:No
-    \@@_keys_set: { \l_tmpa_tl , tikz = { xshift = \l_@@_xoffset_dim } }
-    \bool_set_false:N \l_@@_initial_r_bool
-    \bool_set_false:N \l_@@_final_r_bool
-    \int_case:nn \l_@@_pos_arrow_int
+    \__witharrows_keys_set: { \l_tmpa_tl , tikz = { xshift = \l__witharrows_xoffset_dim } }
+    \bool_set_false:N \l__witharrows_initial_r_bool
+    \bool_set_false:N \l__witharrows_final_r_bool
+    \int_case:nn \l__witharrows_pos_arrow_int
       {
-        0 { \bool_set_true:N \l_@@_final_r_bool }
-        2 { \bool_set_true:N \l_@@_initial_r_bool }
+        0 { \bool_set_true:N \l__witharrows_final_r_bool }
+        2 { \bool_set_true:N \l__witharrows_initial_r_bool }
         3
           {
-            \bool_set_true:N \l_@@_initial_r_bool
-            \bool_set_true:N \l_@@_final_r_bool
+            \bool_set_true:N \l__witharrows_initial_r_bool
+            \bool_set_true:N \l__witharrows_final_r_bool
           }
       }
-    \int_compare:nNnT \l_@@_pos_arrow_int = 5
+    \int_compare:nNnT \l__witharrows_pos_arrow_int = 5
       {
-        \dim_set:Nn \l_@@_x_dim { - \c_max_dim }
-        \@@_update_x:nn \l_@@_initial_int \l_@@_final_int
+        \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim }
+        \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int
       }
-    \tl_set:Nx \l_@@_initial_tl
+    \tl_set:Nx \l__witharrows_initial_tl
       {
-        \int_use:N \l_@@_initial_int - \bool_if:NTF \l_@@_initial_r_bool rl
+        \int_use:N \l__witharrows_initial_int - \bool_if:NTF \l__witharrows_initial_r_bool rl
         .south
       }
-    \tl_set:Nx \l_@@_final_tl
-      { \int_use:N \l_@@_final_int - \bool_if:NTF \l_@@_final_r_bool rl .north }
+    \tl_set:Nx \l__witharrows_final_tl
+      { \int_use:N \l__witharrows_final_int - \bool_if:NTF \l__witharrows_final_r_bool rl .north }
     \prop_get:cnN
-      { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop }
+      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
       { label }
       \l_tmpa_tl
-    \seq_if_in:NxTF \l_@@_first_arrows_seq
-      { \int_use:N \l_@@_arrow_int }
+    \seq_if_in:NxTF \l__witharrows_first_arrows_seq
+      { \int_use:N \l__witharrows_arrow_int }
       { \bool_set_true:N \l_tmpa_bool }
       { \bool_set_false:N \l_tmpa_bool }
-    \seq_if_in:NxTF \l_@@_last_arrows_seq
-      { \int_use:N \l_@@_arrow_int }
+    \seq_if_in:NxTF \l__witharrows_last_arrows_seq
+      { \int_use:N \l__witharrows_arrow_int }
       { \bool_set_true:N \l_tmpb_bool }
       { \bool_set_false:N \l_tmpb_bool }
-    \int_compare:nNnT \l_@@_pos_arrow_int = 5
+    \int_compare:nNnT \l__witharrows_pos_arrow_int = 5
       {
         \bool_set_true:N \l_tmpa_bool
         \bool_set_true:N \l_tmpb_bool
       }
-    \dim_gzero_new:N \g_@@_x_initial_dim
-    \dim_gzero_new:N \g_@@_x_final_dim
-    \dim_gzero_new:N \g_@@_y_initial_dim
-    \dim_gzero_new:N \g_@@_y_final_dim
-    \begin { tikzpicture } [ @@_standard ]
-      \tikz at scan@one at point \pgfutil at firstofone ( \l_@@_initial_tl )
-      \dim_gset:Nn \g_@@_x_initial_dim \pgf at x
-      \dim_gset:Nn \g_@@_y_initial_dim \pgf at y
-      \tikz at scan@one at point \pgfutil at firstofone ( \l_@@_final_tl )
-      \dim_gset:Nn \g_@@_x_final_dim \pgf at x
-      \dim_gset:Nn \g_@@_y_final_dim \pgf at y
+    \dim_gzero_new:N \g__witharrows_x_initial_dim
+    \dim_gzero_new:N \g__witharrows_x_final_dim
+    \dim_gzero_new:N \g__witharrows_y_initial_dim
+    \dim_gzero_new:N \g__witharrows_y_final_dim
+    \begin { tikzpicture } [ __witharrows_standard ]
+      \tikz at scan@one at point \pgfutil at firstofone ( \l__witharrows_initial_tl )
+      \dim_gset:Nn \g__witharrows_x_initial_dim \pgf at x
+      \dim_gset:Nn \g__witharrows_y_initial_dim \pgf at y
+      \tikz at scan@one at point \pgfutil at firstofone ( \l__witharrows_final_tl )
+      \dim_gset:Nn \g__witharrows_x_final_dim \pgf at x
+      \dim_gset:Nn \g__witharrows_y_final_dim \pgf at y
     \end { tikzpicture }
     \bool_if:nTF
-      { \dim_compare_p:nNn { \g_@@_y_initial_dim - \g_@@_y_final_dim }
-                                > \l_@@_max_length_of_arrow_dim
+      { \dim_compare_p:nNn { \g__witharrows_y_initial_dim - \g__witharrows_y_final_dim }
+                                > \l__witharrows_max_length_of_arrow_dim
         &&
-        \int_compare_p:nNn { \l_@@_final_int - \l_@@_initial_int } = 1
+        \int_compare_p:nNn { \l__witharrows_final_int - \l__witharrows_initial_int } = 1
       }
       {
         \tl_gset:Nx \g_tmpa_tl
           {
-            \int_compare:nNnTF \l_@@_pos_arrow_int < 5
-              { \dim_use:N \g_@@_x_initial_dim }
-              { \dim_use:N \l_@@_x_dim } ,
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_initial_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
             \dim_eval:n
               {
-                ( \g_@@_y_initial_dim + \g_@@_y_final_dim ) / 2
-                + ( \l_@@_max_length_of_arrow_dim / 2 )
+                ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
+                + ( \l__witharrows_max_length_of_arrow_dim / 2 )
               }
           }
         \tl_gset:Nx \g_tmpb_tl
           {
-            \int_compare:nNnTF \l_@@_pos_arrow_int < 5
-              { \dim_use:N \g_@@_x_final_dim }
-              { \dim_use:N \l_@@_x_dim } ,
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_final_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
             \dim_eval:n
               {
-                ( \g_@@_y_initial_dim + \g_@@_y_final_dim ) / 2
-                - ( \l_@@_max_length_of_arrow_dim / 2 )
+                ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
+                - ( \l__witharrows_max_length_of_arrow_dim / 2 )
               }
           }
       }
@@ -1483,33 +1469,33 @@
       {
         \tl_gset:Nx \g_tmpa_tl
           {
-            \int_compare:nNnTF \l_@@_pos_arrow_int < 5
-              { \dim_use:N \g_@@_x_initial_dim }
-              { \dim_use:N \l_@@_x_dim } ,
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_initial_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
             \bool_if:NTF \l_tmpa_bool
-              { \dim_eval:n { \g_@@_y_initial_dim + \l_@@_start_adjust_dim } }
-              { \dim_use:N \g_@@_y_initial_dim }
+              { \dim_eval:n { \g__witharrows_y_initial_dim + \l__witharrows_start_adjust_dim } }
+              { \dim_use:N \g__witharrows_y_initial_dim }
           }
         \tl_gset:Nx \g_tmpb_tl
           {
-            \int_compare:nNnTF \l_@@_pos_arrow_int < 5
-              { \dim_use:N \g_@@_x_final_dim }
-              { \dim_use:N \l_@@_x_dim } ,
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_final_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
             \bool_if:NTF \l_tmpb_bool
-              { \dim_eval:n { \g_@@_y_final_dim - \l_@@_end_adjust_dim } }
-              { \dim_use:N \g_@@_y_final_dim }
+              { \dim_eval:n { \g__witharrows_y_final_dim - \l__witharrows_end_adjust_dim } }
+              { \dim_use:N \g__witharrows_y_final_dim }
           }
       }
-    \@@_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl
+    \__witharrows_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl
     \group_end:
   }
-\cs_new_protected:Npn \@@_def_function_tmpa:n #1
+\cs_new_protected:Npn \__witharrows_def_function_tmpa:n #1
   {
-    \cs_set:Npn \@@_tmpa:nnn ##1 ##2 ##3
+    \cs_set:Npn \__witharrows_tmpa:nnn ##1 ##2 ##3
       {
         \begin{tikzpicture}
           [
-            @@_standard ,
+            __witharrows_standard ,
             every~path / .style = WithArrows / arrow
           ]
           #1
@@ -1516,20 +1502,20 @@
         \end{tikzpicture}
       }
   }
-\cs_new_protected:Npn \@@_draw_arrow:nnn #1 #2 #3
+\cs_new_protected:Npn \__witharrows_draw_arrow:nnn #1 #2 #3
   {
-    \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 }
-    \exp_args:NV \@@_def_function_tmpa:n \l_@@_tikz_code_tl
-    \@@_tmpa:nnn { #1 } { #2 } { #3 }
+    \bool_if:nT { \l__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool }
+       { \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_wrap_lines_tl }
+    \exp_args:NV \__witharrows_def_function_tmpa:n \l__witharrows_tikz_code_tl
+    \__witharrows_tmpa:nnn { #1 } { #2 } { #3 }
   }
-\cs_generate_variant:Nn \@@_draw_arrow:nnn { n n o }
-\tl_const:Nn \c_@@_tikz_code_wrap_lines_tl
+\cs_generate_variant:Nn \__witharrows_draw_arrow:nnn { n n o }
+\tl_const:Nn \c__witharrows_tikz_code_wrap_lines_tl
   {
-    \draw ( #1 ) to node ( @@_label ) { } ( #2 ) ;
-    \tikz at parse@node \pgfutil at firstofone ( @@_label.west )
+    \draw ( #1 ) to node ( __witharrows_label ) { } ( #2 ) ;
+    \tikz at parse@node \pgfutil at firstofone ( __witharrows_label.west )
     \dim_set:Nn \l_tmpa_dim
-      { \g_@@_right_x_dim - \pgf at x - \pgfkeysvalueof { / pgf / inner~xsep } }
+      { \g__witharrows_right_x_dim - \pgf at x - \pgfkeysvalueof { / pgf / inner~xsep } }
     \path \pgfextra { \tl_gset:Nx \g_tmpa_tl \tikz at text@width } ;
     \tl_if_empty:NF \g_tmpa_tl
       {
@@ -1539,23 +1525,23 @@
       }
     \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim
       {
-        \path ( @@_label.west )
+        \path ( __witharrows_label.west )
            node [ anchor = west , text~width = \dim_use:N \l_tmpa_dim ]
                 { #3 } ;
       }
   }
-\cs_new_protected:Npn \@@_update_x:nn #1 #2
+\cs_new_protected:Npn \__witharrows_update_x:nn #1 #2
   {
     \int_step_inline:nnn { #1 } { #2 }
       {
-        \begin { tikzpicture } [ @@_standard ]
+        \begin { tikzpicture } [ __witharrows_standard ]
           \tikz at scan@one at point \pgfutil at firstofone ( ##1 - l )
-          \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \l_@@_x_dim \pgf at x }
+          \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \l__witharrows_x_dim \pgf at x }
         \end { tikzpicture }
-        \dim_set_eq:NN \l_@@_x_dim \g_tmpa_dim
+        \dim_set_eq:NN \l__witharrows_x_dim \g_tmpa_dim
       }
   }
-\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g_@@_last_env_int }
+\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g__witharrows_last_env_int }
 \keys_define:nn { WithArrows / Arrow / code-after }
   {
     tikz     .code:n =
@@ -1562,57 +1548,57 @@
       \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
     tikz     .value_required:n  = true ,
     rr       .value_forbidden:n = true ,
-    rr       .code:n            = \@@_fix_pos_option:n 0 ,
+    rr       .code:n            = \__witharrows_fix_pos_option:n 0 ,
     ll       .value_forbidden:n = true,
-    ll       .code:n            = \@@_fix_pos_option:n 1 ,
+    ll       .code:n            = \__witharrows_fix_pos_option:n 1 ,
     rl       .value_forbidden:n = true ,
-    rl       .code:n            = \@@_fix_pos_option:n 2 ,
+    rl       .code:n            = \__witharrows_fix_pos_option:n 2 ,
     lr       .value_forbidden:n = true ,
-    lr       .code:n            = \@@_fix_pos_option:n 3 ,
+    lr       .code:n            = \__witharrows_fix_pos_option:n 3 ,
     v        .value_forbidden:n = true ,
-    v        .code:n            = \@@_fix_pos_option:n 4 ,
-    tikz-code .tl_set:N          = \l_@@_tikz_code_tl ,
+    v        .code:n            = \__witharrows_fix_pos_option:n 4 ,
+    tikz-code .tl_set:N          = \l__witharrows_tikz_code_tl ,
     tikz-code .value_required:n  = true ,
-    xoffset  .dim_set:N         = \l_@@_xoffset_dim ,
+    xoffset  .dim_set:N         = \l__witharrows_xoffset_dim ,
     xoffset  .value_required:n  = true ,
     unknown .code:n  =
-      \@@_sort_seq:N \l_@@_options_Arrow_code_after_seq
-      \@@_error:n { Unknown~option~Arrow~in~code-after }
+      \__witharrows_sort_seq:N \l__witharrows_options_Arrow_code_after_seq
+      \__witharrows_error:n { Unknown~option~Arrow~in~code-after }
   }
-\seq_new:N \l_@@_options_Arrow_code_after_seq
-\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_code_after_seq
+\seq_new:N \l__witharrows_options_Arrow_code_after_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_code_after_seq
   { ll, lr, rl, rr, tikz, tikz-code, v, x, offset }
-\NewDocumentCommand \@@_Arrow_code_after { O { } m m m ! O { } }
+\NewDocumentCommand \__witharrows_Arrow_code_after { O { } m m m ! O { } }
   {
-    \int_set:Nn \l_@@_pos_arrow_int 1
-    \str_clear_new:N \l_@@_previous_key_str
+    \int_set:Nn \l__witharrows_pos_arrow_int 1
+    \str_clear_new:N \l__witharrows_previous_key_str
     \group_begin:
       \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
-      \int_case:nn \l_@@_pos_arrow_int
+        { #1, #5, tikz = { xshift = \l__witharrows_xoffset_dim } }
+      \bool_set_false:N \l__witharrows_initial_r_bool
+      \bool_set_false:N \l__witharrows_final_r_bool
+      \int_case:nn \l__witharrows_pos_arrow_int
         {
           0
             {
-              \bool_set_true:N \l_@@_initial_r_bool
-              \bool_set_true:N \l_@@_final_r_bool
+              \bool_set_true:N \l__witharrows_initial_r_bool
+              \bool_set_true:N \l__witharrows_final_r_bool
             }
-          2 { \bool_set_true:N \l_@@_initial_r_bool }
-          3 { \bool_set_true:N \l_@@_final_r_bool }
+          2 { \bool_set_true:N \l__witharrows_initial_r_bool }
+          3 { \bool_set_true:N \l__witharrows_final_r_bool }
         }
       \tl_if_eq:nnTF { #2 } { #3 }
-        { \@@_error:nn { Both~lines~are~equal } { #2 } }
+        { \__witharrows_error:nn { Both~lines~are~equal } { #2 } }
         {
-          \cs_if_free:cTF { pgf at sh@ns at wa - \l_@@_prefix_str - #2 - l }
-            { \@@_error:nx { Wrong~line~in~Arrow } { #2 } }
+          \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - #2 - l }
+            { \__witharrows_error:nx { Wrong~line~in~Arrow } { #2 } }
             {
-              \cs_if_free:cTF { pgf at sh@ns at wa - \l_@@_prefix_str - #3 - l }
-                { \@@_error:nx { Wrong~line~in~Arrow } { #3 }  }
+              \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - #3 - l }
+                { \__witharrows_error:nx { Wrong~line~in~Arrow } { #3 }  }
                 {
-                  \int_compare:nNnTF \l_@@_pos_arrow_int = 4
+                  \int_compare:nNnTF \l__witharrows_pos_arrow_int = 4
                     {
-                      \begin { tikzpicture } [ @@_standard ]
+                      \begin { tikzpicture } [ __witharrows_standard ]
                         \tikz at scan@one at point \pgfutil at firstofone (#2-l.south)
                         \dim_set_eq:NN \l_tmpa_dim \pgf at x
                         \dim_set_eq:NN \l_tmpb_dim \pgf at y
@@ -1626,42 +1612,42 @@
                       \end { tikzpicture }
                     }
                     {
-                      \begin { tikzpicture } [ @@_standard ]
+                      \begin { tikzpicture } [ __witharrows_standard ]
                         \tikz at scan@one at point \pgfutil at firstofone
-                           ( #2-\bool_if:NTF\l_@@_initial_r_bool rl .south )
+                           ( #2-\bool_if:NTF\l__witharrows_initial_r_bool rl .south )
                         \tl_gset:Nx \g_tmpa_tl
                            { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
                         \tikz at scan@one at point \pgfutil at firstofone
-                           ( #3-\bool_if:NTF\l_@@_final_r_bool rl .north )
+                           ( #3-\bool_if:NTF\l__witharrows_final_r_bool rl .north )
                         \tl_gset:Nx \g_tmpb_tl
                            { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
                       \end { tikzpicture }
                     }
-                  \@@_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 }
+                  \__witharrows_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 }
                 }
             }
         }
     \group_end:
   }
-\cs_new_protected:Npn \@@_MultiArrow:nn #1 #2
+\cs_new_protected:Npn \__witharrows_MultiArrow:nn #1 #2
   {
     \exp_args:Nnx
       \regex_match:nnTF
       { \A \d+ (\,\d+)* ( \, \.\.\. (\,\d+)+ )* \Z }
       { #1 }
-      { \@@_MultiArrow_i:nn { #1 } { #2 } }
-      { \@@_error:nx { Invalid~specification~for~MultiArrow } { #1 } }
+      { \__witharrows_MultiArrow_i:nn { #1 } { #2 } }
+      { \__witharrows_error:nx { Invalid~specification~for~MultiArrow } { #1 } }
   }
-\cs_new_protected:Npn \@@_MultiArrow_i:nn #1 #2
+\cs_new_protected:Npn \__witharrows_MultiArrow_i:nn #1 #2
   {
     \foreach \x in { #1 }
       {
-        \cs_if_free:cTF { pgf at sh@ns at wa - \l_@@_prefix_str - \x - l }
-          { \@@_error:nx { Wrong~line~specification~in~MultiArrow } \x }
+        \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - \x - l }
+          { \__witharrows_error:nx { Wrong~line~specification~in~MultiArrow } \x }
           { \clist_gput_right:Nx \g_tmpa_clist \x }
       }
     \int_compare:nTF { \clist_count:N \g_tmpa_clist < 2 }
-      { \@@_error:n { Too~small~specification~for~MultiArrow } }
+      { \__witharrows_error:n { Too~small~specification~for~MultiArrow } }
       {
         \clist_sort:Nn \g_tmpa_clist
           {
@@ -1672,52 +1658,52 @@
         \clist_pop:NN \g_tmpa_clist \l_tmpa_tl
         \clist_reverse:N \g_tmpa_clist
         \clist_pop:NN \g_tmpa_clist \l_tmpb_tl
-        \exp_args:NV \@@_MultiArrow_i:n \g_tmpa_clist
+        \exp_args:NV \__witharrows_MultiArrow_i:n \g_tmpa_clist
         \begin { tikzpicture }
           [
-            @@_standard ,
+            __witharrows_standard ,
             every~path / .style = { WithArrows / arrow }
           ]
-          \draw [<->] ([xshift = \l_@@_xoffset_dim]\l_tmpa_tl-r.south)
+          \draw [<->] ([xshift = \l__witharrows_xoffset_dim]\l_tmpa_tl-r.south)
                       -- ++(5mm,0)
-                      -- node (@@_label) {}
-                         ([xshift = \l_@@_xoffset_dim+5mm]\l_tmpb_tl-r.south)
-                      -- ([xshift = \l_@@_xoffset_dim]\l_tmpb_tl-r.south)  ;
-          \tikz at parse@node \pgfutil at firstofone (@@_label.west)
+                      -- node (__witharrows_label) {}
+                         ([xshift = \l__witharrows_xoffset_dim+5mm]\l_tmpb_tl-r.south)
+                      -- ([xshift = \l__witharrows_xoffset_dim]\l_tmpb_tl-r.south)  ;
+          \tikz at parse@node \pgfutil at firstofone (__witharrows_label.west)
           \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_DispWithArrows_bool }
+          \bool_if:nT { \l__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool }
             {
               \dim_set:Nn \l_tmpb_dim
-                { \g_@@_right_x_dim - \pgf at x - 0.3333 em }
+                { \g__witharrows_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)
+          \path (__witharrows_label.west)
            node [ anchor = west, text~width = \dim_use:N \l_tmpa_dim ] { #2 } ;
         \end{tikzpicture}
       }
   }
-\cs_new_protected:Npn \@@_MultiArrow_i:n #1
+\cs_new_protected:Npn \__witharrows_MultiArrow_i:n #1
   {
         \begin { tikzpicture }
       [
-        @@_standard ,
+        __witharrows_standard ,
         every~path / .style = { WithArrows / arrow }
       ]
       \foreach \k in { #1 }
         {
           \draw [ <- ]
-            ( [xshift = \l_@@_xoffset_dim]\k-r.south ) -- ++(5mm,0) ;
+            ( [xshift = \l__witharrows_xoffset_dim]\k-r.south ) -- ++(5mm,0) ;
         } ;
         \end{tikzpicture}
   }
-\str_const:Nn \c_@@_option_ignored_str
+\str_const:Nn \c__witharrows_option_ignored_str
   { If~you~go~on,~this~option~will~be~ignored. }
-\str_const:Nn \c_@@_command_ignored_str
+\str_const:Nn \c__witharrows_command_ignored_str
   { If~you~go~on,~this~command~will~be~ignored. }
-\@@_msg_new:nn { amsmath~not~loaded }
+\__witharrows_msg_new:nn { amsmath~not~loaded }
   {
     You~can't~use~the~option~'\l_keys_key_tl'~because~the~
     package~'amsmath'~has~not~been~loaded.\\
@@ -1724,7 +1710,7 @@
     If~you~go~on,~this~option~will~be~ignored~in~the~rest~
     of~the~document.
   }
-\@@_msg_new:nn { Bad~value~for~replace~brace~by }
+\__witharrows_msg_new:nn { Bad~value~for~replace~brace~by }
   {
     Bad~value~for~the~option~'\l_keys_key_tl'.~The~value~must~begin~
     with~an~extensible~left~delimiter.~The~possible~values~are:~.,
@@ -1734,23 +1720,23 @@
     \token_to_str:N \lfloor\ and~\token_to_str:N \lceil\
     (and~\token_to_str:N \lvert\ and~\token_to_str:N \lVert\
     if~amsmath~or~unicode-math~is~loaded~in~LaTeX).\\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { option~of~cr~negative }
+\__witharrows_msg_new:nn { option~of~cr~negative }
   {
     The~argument~of~the~command~\token_to_str:N\\~
-    should~be~positive~in~the~row~\int_use:N \g_@@_line_int\
-    of~your~environment~\{\l_@@_type_env_str\}.\\
-    \c_@@_option_ignored_str
+    should~be~positive~in~the~row~\int_use:N \g__witharrows_line_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}.\\
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { omit~probably~used }
+\__witharrows_msg_new:nn { omit~probably~used }
   {
     There~is~a~problem.~Maybe~you~have~used~a~command~
-    \token_to_str:N\omit\ in~the~line~\int_use:N \g_@@_line_int\
-    (or~another~line)~of~your~environment~\{\l_@@_type_env_str\}.\\
+    \token_to_str:N\omit\ in~the~line~\int_use:N \g__witharrows_line_int\
+    (or~another~line)~of~your~environment~\{\l__witharrows_type_env_str\}.\\
     You~can~go~on~but~you~may~have~others~errors.
   }
-\@@_msg_new:nn { newline~at~the~end~of~env }
+\__witharrows_msg_new:nn { newline~at~the~end~of~env }
   {
     The~environments~of~witharrows~(\{WithArrows\}~and~
     \{DispWithArrows\})~should~not~end~by~\token_to_str:N \\.\\
@@ -1757,191 +1743,191 @@
     However,~you~can~go~on~for~this~time.~No~similar~error~will~be~
     raised~in~this~document.
   }
-\@@_msg_new:nn { Invalid~option~format }
+\__witharrows_msg_new:nn { Invalid~option~format }
   {
     The~key~'format'~should~contain~only~letters~r,~c~and~l~and~
     must~not~be~empty.\\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Value~for~a~key }
+\__witharrows_msg_new:nn { Value~for~a~key }
   {
     The~key~'\l_keys_key_tl'~should~be~used~without~value. \\
     However,~you~can~go~on~for~this~time.
   }
-\@@_msg_new:nnn { Unknown~option~in~Arrow }
+\__witharrows_msg_new:nnn { Unknown~option~in~Arrow }
   {
     The~key~'\l_keys_key_tl'~is~unknown~for~the~command~
-    \l_@@_string_Arrow_for_msg_str\ in~the~row~
-    \int_use:N \g_@@_line_int\ of~your~environment~
-    \{\l_@@_type_env_str\}. \l_tmpa_str \\
-    \c_@@_option_ignored_str \\
+    \l__witharrows_string_Arrow_for_msg_str\ in~the~row~
+    \int_use:N \g__witharrows_line_int\ of~your~environment~
+    \{\l__witharrows_type_env_str\}. \l_tmpa_str \\
+    \c__witharrows_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_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__witharrows_options_Arrow_seq {~and~} {,~} {~and~}.
   }
-\@@_msg_new:nnn { Unknown~option~WithArrows }
+\__witharrows_msg_new:nnn { Unknown~option~WithArrows }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\
-    \c_@@_option_ignored_str \\
+    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_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_WithArrows_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__witharrows_options_WithArrows_seq {~and~} {,~} {~and~}.
   }
-\@@_msg_new:nnn { Unknown~option~DispWithArrows }
+\__witharrows_msg_new:nnn { Unknown~option~DispWithArrows }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\
-    \c_@@_option_ignored_str \\
+    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_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_DispWithArrows_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__witharrows_options_DispWithArrows_seq {~and~} {,~} {~and~}.
   }
-\@@_msg_new:nnn { Unknown~option~WithArrowsOptions }
+\__witharrows_msg_new:nnn { Unknown~option~WithArrowsOptions }
   {
     The~key~'\l_keys_key_tl'~is~unknown~in~
     \token_to_str:N \WithArrowsOptions. \\
-    \c_@@_option_ignored_str \\
+    \c__witharrows_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_WithArrowsOptions_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__witharrows_options_WithArrowsOptions_seq {~and~} {,~} {~and~}.
   }
-\@@_msg_new:nnn { Unknown~option~Arrow~in~code-after }
+\__witharrows_msg_new:nnn { Unknown~option~Arrow~in~code-after }
   {
     The~key~'\l_keys_key_tl'~is~unknown~in~
     \token_to_str:N \Arrow\ in~code-after. \\
-    \c_@@_option_ignored_str \\
+    \c__witharrows_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_code_after_seq {~and~} {,~} {~and~}.
+    \seq_use:Nnnn \l__witharrows_options_Arrow_code_after_seq {~and~} {,~} {~and~}.
   }
-\@@_msg_new:nn { Too~much~columns~in~WithArrows }
+\__witharrows_msg_new:nn { Too~much~columns~in~WithArrows }
   {
-    Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N
-    \l_@@_nb_cols_int\ columns~and~you~try~to~use~one~more.~
+    Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N
+    \l__witharrows_nb_cols_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.
   }
-\@@_msg_new:nn { Too~much~columns~in~DispWithArrows }
+\__witharrows_msg_new:nn { Too~much~columns~in~DispWithArrows }
   {
-    Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N
-    \l_@@_nb_cols_int\ columns~and~you~try~to~use~one~more.~
+    Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N
+    \l__witharrows_nb_cols_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. \\
+    at~the~end~of~row~\int_use:N \g__witharrows_line_int. \\
     This~error~is~fatal.
   }
-\@@_msg_new:nn { Negative~jump }
+\__witharrows_msg_new:nn { Negative~jump }
   {
     You~can't~use~a~negative~value~for~the~option~'jump'~of~command~
-    \l_@@_string_Arrow_for_msg_str\
-    in~the~row~\int_use:N \g_@@_line_int\
-    of~your~environment~\{\l_@@_type_env_str\}.~
+    \l__witharrows_string_Arrow_for_msg_str\
+    in~the~row~\int_use:N \g__witharrows_line_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}.~
     You~can~create~an~arrow~going~backwards~with~the~option~'<-'~of~Tikz. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { new-group~without~groups }
+\__witharrows_msg_new:nn { new-group~without~groups }
   {
     You~can't~use~the~option~'new-group'~for~the~command~
-    \l_@@_string_Arrow_for_msg_str\
+    \l__witharrows_string_Arrow_for_msg_str\
     because~you~are~not~in~'groups'~mode.~Try~to~use~the~option~
-    'groups'~in~your~environment~\{\l_@@_type_env_str\}. \\
-    \c_@@_option_ignored_str
+    'groups'~in~your~environment~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn
+\__witharrows_msg_new:nn
   { Too~few~lines~for~an~arrow }
   {
-    Line~\l_@@_input_line_str\
-    :~an~arrow~specified~in~the~row~\int_use:N \l_@@_initial_int\
-    of~your~environment~\{\l_@@_type_env_str\}~can't~be~drawn~
+    Line~\l__witharrows_input_line_str\
+    :~an~arrow~specified~in~the~row~\int_use:N \l__witharrows_initial_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}~can't~be~drawn~
     because~it~arrives~after~the~last~row~of~the~environment. \\
     If~you~go~on,~this~arrow~will~be~ignored.
   }
-\@@_msg_new:nn { WithArrows~outside~math~mode }
+\__witharrows_msg_new:nn { WithArrows~outside~math~mode }
   {
-    The~environment~\{\l_@@_type_env_str\}~should~be~used~only~in~math~mode~
+    The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~in~math~mode~
     like~the~environment~\{aligned\}~of~amsmath. \\
     Nevertheless,~you~can~go~on.
   }
-\@@_msg_new:nn { DispWithArrows~in~math~mode }
+\__witharrows_msg_new:nn { DispWithArrows~in~math~mode }
   {
-    The~environment~\{\l_@@_type_env_str\}~should~be~used~only~outside~math~
+    The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~outside~math~
     mode~like~the~environment~\{align\}~of~amsmath. \\
     This~error~is~fatal.
   }
-\@@_msg_new:nn { Incompatible~options~in~Arrow }
+\__witharrows_msg_new:nn { Incompatible~options~in~Arrow }
   {
     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~
-    \l_@@_string_Arrow_for_msg_str. \\
-    \c_@@_option_ignored_str
+    '\l__witharrows_previous_key_str'~set~in~the~same~command~
+    \l__witharrows_string_Arrow_for_msg_str. \\
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Incompatible~options }
+\__witharrows_msg_new:nn { Incompatible~options }
   { 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_code_after_bool
+    '\l__witharrows_previous_key_str'~set~in~the~same~command~
+    \bool_if:NT \l__witharrows_in_code_after_bool
       {
-        \l_@@_string_Arrow_for_msg_str\
-        in~the~code-after~of~your~environment~\{\l_@@_type_env_str\}
+        \l__witharrows_string_Arrow_for_msg_str\
+        in~the~code-after~of~your~environment~\{\l__witharrows_type_env_str\}
       }. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Arrow~not~in~last~column }
+\__witharrows_msg_new:nn { Arrow~not~in~last~column }
   {
-    You~should~use~the~command~\l_@@_string_Arrow_for_msg_str\
-    only~in~the~last~column~(column~\int_use:N\l_@@_nb_cols_int)~
-    of~your~environment~\{\l_@@_type_env_str\}.\\
+    You~should~use~the~command~\l__witharrows_string_Arrow_for_msg_str\
+    only~in~the~last~column~(column~\int_use:N\l__witharrows_nb_cols_int)~
+    of~your~environment~\{\l__witharrows_type_env_str\}.\\
     However~you~can~go~on~for~this~time.
   }
-\@@_msg_new:nn { Wrong~line~in~Arrow }
+\__witharrows_msg_new:nn { Wrong~line~in~Arrow }
   {
     The~specification~of~line~'#1'~you~use~in~the~command~
-    \l_@@_string_Arrow_for_msg_str\
-    in~the~'code-after'~of~\{\l_@@_type_env_str\}~doesn't~exist. \\
-    \c_@@_option_ignored_str
+    \l__witharrows_string_Arrow_for_msg_str\
+    in~the~'code-after'~of~\{\l__witharrows_type_env_str\}~doesn't~exist. \\
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Both~lines~are~equal }
+\__witharrows_msg_new:nn { Both~lines~are~equal }
   {
-    In~the~'code-after'~of~\{\l_@@_type_env_str\}~you~try~to~
+    In~the~'code-after'~of~\{\l__witharrows_type_env_str\}~you~try~to~
     draw~an~arrow~going~to~itself~from~the~line~'#1'.~This~is~not~possible. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Wrong~line~specification~in~MultiArrow }
+\__witharrows_msg_new:nn { Wrong~line~specification~in~MultiArrow }
   {
     The~specification~of~line~'#1'~doesn't~exist. \\
     If~you~go~on,~it~will~be~ignored~for~\token_to_str:N \MultiArrow.
   }
-\@@_msg_new:nn { Too~small~specification~for~MultiArrow }
+\__witharrows_msg_new:nn { Too~small~specification~for~MultiArrow }
   {
     The~specification~of~lines~you~gave~to~\token_to_str:N \MultiArrow\
     is~too~small:~you~need~at~least~two~lines. \\
-    \c_@@_command_ignored_str
+    \c__witharrows_command_ignored_str
   }
-\@@_msg_new:nn { Not~allowed~in~DispWithArrows }
+\__witharrows_msg_new:nn { Not~allowed~in~DispWithArrows }
   {
     The~command~\token_to_str:N #1
     is~allowed~only~in~the~last~column~
-    (column~\int_use:N\l_@@_nb_cols_int)~of~\{\l_@@_type_env_str\}. \\
-    \c_@@_option_ignored_str
+    (column~\int_use:N\l__witharrows_nb_cols_int)~of~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Not~allowed~in~WithArrows }
+\__witharrows_msg_new:nn { Not~allowed~in~WithArrows }
   {
-    The~command~\token_to_str:N #1 is~not~allowed~in~\{\l_@@_type_env_str\}~
+    The~command~\token_to_str:N #1 is~not~allowed~in~\{\l__witharrows_type_env_str\}~
     (it's~allowed~in~the~last~column~of~\{DispWithArrows\}). \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { tag*~without~amsmath }
+\__witharrows_msg_new:nn { tag*~without~amsmath }
   {
     We~can't~use~\token_to_str:N\tag*~because~you~haven't~loaded~amsmath~
     (or~mathtools). \\
@@ -1948,49 +1934,49 @@
     If~you~go~on,~the~command~\token_to_str:N\tag\
     will~be~used~instead.
   }
-\@@_msg_new:nn { Multiple~tags }
+\__witharrows_msg_new:nn { Multiple~tags }
   {
     You~can't~use~twice~the~command~\token_to_str:N\tag\
-    in~a~line~of~the~environment~\{\l_@@_type_env_str\}. \\
+    in~a~line~of~the~environment~\{\l__witharrows_type_env_str\}. \\
     If~you~go~on,~the~tag~'#1'~will~be~used.
   }
-\@@_msg_new:nn { Multiple~labels }
+\__witharrows_msg_new:nn { Multiple~labels }
   {
     Normally,~we~can't~use~the~command~\token_to_str:N\label\
-    twice~in~a~line~of~the~environment~\{\l_@@_type_env_str\}. \\
+    twice~in~a~line~of~the~environment~\{\l__witharrows_type_env_str\}. \\
     However,~you~can~go~on.~
-    \bool_if:NT \c_@@_showlabels_loaded_bool
+    \bool_if:NT \c__witharrows_showlabels_loaded_bool
       { However,~only~the~last~label~will~be~shown~by~showlabels.~ }
     If~you~don't~want~to~see~this~message~again,~you~can~use~the~option~
     'allow-multiple-labels'~at~the~global~or~environment~level.
   }
-\@@_msg_new:nn { Multiple~labels~with~cleveref }
+\__witharrows_msg_new:nn { Multiple~labels~with~cleveref }
   {
     Since~you~use~cleveref,~you~can't~use~the~command~\token_to_str:N\label\
-    twice~in~a~line~of~the~environment~\{\l_@@_type_env_str\}. \\
+    twice~in~a~line~of~the~environment~\{\l__witharrows_type_env_str\}. \\
     If~you~go~on,~you~may~have~undefined~references.
   }
-\@@_msg_new:nn { Inexistent~v-node }
+\__witharrows_msg_new:nn { Inexistent~v-node }
   {
     There~is~a~problem.~Maybe~you~have~put~a~command~\token_to_str:N\cr\
     instead~of~a~command~\token_to_str:N\\~at~the~end~of~
     the~row~\l_tmpa_int\
-    of~your~environment~\{\l_@@_type_env_str\}. \\
+    of~your~environment~\{\l__witharrows_type_env_str\}. \\
     This~error~is~fatal.
   }
-\@@_msg_new:nn { Option~xoffset~forbidden }
+\__witharrows_msg_new:nn { Option~xoffset~forbidden }
   {
     You~can't~use~the~option~'xoffset'~in~the~command~
-    \l_@@_string_Arrow_for_msg_str\ in~the~row~\int_use:N \g_@@_line_int\
-    of~your~environment~\{\l_@@_type_env_str\}~
+    \l__witharrows_string_Arrow_for_msg_str\ in~the~row~\int_use:N \g__witharrows_line_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}~
     because~you~are~using~the~option~
-    ' \int_compare:nNnTF \l_@@_pos_arrow_int = 7
+    ' \int_compare:nNnTF \l__witharrows_pos_arrow_int = 7
         { group }
         { groups } '.~It's~possible~for~an~independent~arrow~or~if~there~is~
     only~one~arrow. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nnn { Duplicate~name }
+\__witharrows_msg_new:nnn { Duplicate~name }
   {
     The~name~'\l_keys_value_tl'~is~already~used~and~you~shouldn't~use~
     the~same~environment~name~twice.~You~can~go~on,~but,~
@@ -2001,12 +1987,18 @@
   }
   {
     The~names~already~defined~in~this~document~are:~
-    \seq_use:Nnnn \g_@@_names_seq { ,~ } { ,~ } { ~and~ }.
+    \seq_use:Nnnn \g__witharrows_names_seq { ,~ } { ,~ } { ~and~ }.
   }
+\__witharrows_msg_new:nn { Invalid~specification~for~MultiArrow }
+  {
+    The~specification~of~rows~for~\token_to_str:N\MultiArrow\
+    (i.e.~#1)~is~invalid. \\
+    \c__witharrows_command_ignored_str
+  }
 \NewDocumentCommand \WithArrowsNewStyle { m m }
   {
     \keys_if_exist:nnTF { WithArrows / Global } { #1 }
-      { \@@_error:nn { Key~already~defined } { #1 } }
+      { \__witharrows_error:nn { Key~already~defined } { #1 } }
       {
         \keys_define:nn { WithArrows / Global }
           {
@@ -2013,10 +2005,10 @@
             #1 .code:n =
              { \keys_set_known:nn { WithArrows / WithArrowsOptions } { #2 } }
           }
-        \seq_put_right:Nx \l_@@_options_WithArrows_seq { \tl_to_str:n { #1 } }
-        \seq_put_right:Nx \l_@@_options_DispWithArrows_seq
+        \seq_put_right:Nx \l__witharrows_options_WithArrows_seq { \tl_to_str:n { #1 } }
+        \seq_put_right:Nx \l__witharrows_options_DispWithArrows_seq
           { \tl_to_str:n { #1 } }
-        \seq_put_right:Nx \l_@@_options_WithArrowsOptions_seq
+        \seq_put_right:Nx \l__witharrows_options_WithArrowsOptions_seq
           { \tl_to_str:N { #1 } }
         \group_begin:
           \msg_set:nnn { witharrows } { Unknown~option~WithArrowsOptions }
@@ -2029,45 +2021,128 @@
         \group_end:
       }
   }
-\@@_msg_new:nn { Key~already~defined }
+\__witharrows_msg_new:nn { Key~already~defined }
   {
     The~key~'#1'~is~already~defined. \\
     If~you~go~on,~your~instruction~\token_to_str:N\WithArrowsNewStyle\
     will~be~ignored.
   }
-\tl_const:Nn \c_@@_tikz_code_up_tl
+\keys_define:nn { WithArrows / up-and-down }
   {
-    \draw [ rounded~corners ]
-       let \p1 = (#1) ,
-           \p2 = (#2)
-       in (\p1) -- node {
-                          \dim_set:Nn \l_tmpa_dim { \x2 - \x1 }
-                          \begin { varwidth } \l_tmpa_dim
-                            \narrowragged
-                            #3
-                          \end { varwidth }
-                        }
-          (\x2,\y1) -- (\p2) ;
+    radius .dim_set:N = \l__witharrows_up_and_down_radius_dim ,
+    radius .value_required:n = true ,
+    width .code:n =
+      \str_case:nnF { #1 }
+        {
+          { min } { \dim_zero:N \l__witharrows_arrow_width_dim }
+          { max } { \dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim }
+        }
+        { \dim_set:Nn \l__witharrows_arrow_width_dim { #1 } } ,
+    width .value_required:n = true ,
+    unknown .code:n = \__witharrows_error:n { Option~unknown~for~up-and-down }
   }
-\tl_const:Nn \c_@@_tikz_code_down_tl
+\__witharrows_msg_new:nn { Option~unknown~for~up-and-down }
   {
-    \draw [ rounded~corners ]
-      let \p1 = (#1) ,
-          \p2 = (#2)
-      in (\p1) -- (\x1,\y2) --
-               node {
-                      \dim_set:Nn \l_tmpa_dim { \x1 - \x2 }
-                      \begin { varwidth } \l_tmpa_dim
-                        \narrowragged
-                        #3
-                      \end { varwidth }
-                    }
-               (\p2) ;
+    The~option~'\l_keys_key_tl'~is~unknown.~\c__witharrows_option_ignored_str
   }
+\tl_const:Nn \c__witharrows_tikz_code_up_tl
+  {
+    \dim_compare:nNnTF \l__witharrows_arrow_width_dim = \c_max_dim
+      {
+        \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+           let \p1 = ( #1 ) , \p2 = ( #2 )
+           in (\p1) -- node
+              {
+                \dim_set:Nn \l_tmpa_dim { \x2 - \x1 }
+                \begin { varwidth } \l_tmpa_dim
+                  \narrowragged
+                  #3
+                \end { varwidth }
+              }
+              (\x2,\y1) -- (\p2) ;
+      }
+      {
+        \path
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in node
+              {
+                \dim_set:Nn \l_tmpa_dim
+                  { \x2 - \x1 - \l__witharrows_up_and_down_radius_dim }
+                \dim_compare:nNnF \l__witharrows_arrow_width_dim = \c_zero_dim
+                  {
+                    \dim_set:Nn \l_tmpa_dim
+                      { \dim_min:nn \l_tmpa_dim \l__witharrows_arrow_width_dim }
+                  }
+                \hbox_gset:Nn \g_tmpa_box
+                  {
+                    \begin { varwidth } \l_tmpa_dim
+                      \narrowragged
+                      #3
+                    \end { varwidth }
+                  }
+                \dim_compare:nNnTF \l__witharrows_arrow_width_dim > \c_zero_dim
+                  { \dim_gset_eq:NN  \g_tmpa_dim \l__witharrows_arrow_width_dim }
+                  { \dim_gset:Nn \g_tmpa_dim { \box_wd:N \g_tmpa_box } }
+                \dim_gadd:Nn \g_tmpa_dim \l__witharrows_up_and_down_radius_dim
+              } ;
+       \draw
+         let \p1 = ( #1 ) , \p2 = ( #2 )
+         in (\x2-\g_tmpa_dim,\y1)
+            -- node { \box_use:N \g_tmpa_box }
+            (\x2-\l__witharrows_up_and_down_radius_dim,\y1)
+            [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+            -| (\p2) ;
+      }
+  }
+\tl_const:Nn \c__witharrows_tikz_code_down_tl
+  {
+    \dim_compare:nNnTF \l__witharrows_arrow_width_dim = \c_max_dim
+      {
+        \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in (\p1) -- (\x1,\y2) -- node
+             {
+               \dim_set:Nn \l_tmpa_dim { \x1 - \x2 }
+               \begin { varwidth } \l_tmpa_dim
+                 \narrowragged
+                 #3
+               \end { varwidth }
+             }
+             (\p2) ;
+      }
+      {
+        \path
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in node
+              {
+                \hbox_gset:Nn \g_tmpa_box
+                  {
+                    \dim_set:Nn \l_tmpa_dim
+                      { \x1 - \x2 - \l__witharrows_up_and_down_radius_dim - 2 mm }
+                    \begin { varwidth } \l_tmpa_dim
+                      \narrowragged
+                      #3
+                    \end { varwidth }
+                  }
+                \dim_compare:nNnTF \l__witharrows_arrow_width_dim > \c_zero_dim
+                  { \dim_gset_eq:NN  \g_tmpa_dim \l__witharrows_arrow_width_dim }
+                  { \dim_gset:Nn \g_tmpa_dim { \box_wd:N \g_tmpa_box } }
+                \dim_gadd:Nn \g_tmpa_dim \l__witharrows_up_and_down_radius_dim
+              } ;
+
+        \draw
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in (\p1)
+             { [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] -- (\x1,\y2) }
+             -- (\x1-\l__witharrows_up_and_down_radius_dim,\y2)
+             -- node { \box_use:N \g_tmpa_box } (\x1-\g_tmpa_dim,\y2)
+             -- ++ (-2mm,0) ;
+      }
+  }
 \keys_define:nn { WithArrows / Arrow / FirstPass }
   {
-    up   .code:n = \@@_set_independent: ,
-    down .code:n = \@@_set_independent: ,
+    up   .code:n = \__witharrows_set_independent_bis: ,
+    down .code:n = \__witharrows_set_independent_bis: ,
     up   .default:n = NoValue ,
     down .default:n = NoValue
   }
@@ -2074,61 +2149,55 @@
 \keys_define:nn { WithArrows / Arrow / SecondPass }
   {
     up .code:n =
-      \str_if_empty:NT \l_@@_previous_key_str
+      \str_if_empty:NT \l__witharrows_previous_key_str
         {
-          \str_set:Nn \l_@@_previous_key_str { up }
-          \bool_if:NTF \c_@@_varwidth_loaded_bool
+          \str_set:Nn \l__witharrows_previous_key_str { up }
+          \bool_if:NTF \c__witharrows_varwidth_loaded_bool
             {
               \cs_if_exist:cTF { tikz at library@calc at loaded }
                 {
-                  \int_set:Nn \l_@@_pos_arrow_int \c_one_int
-                  \bool_set_false:N \l_@@_wrap_lines_bool
-                  \tl_set_eq:NN \l_@@_tikz_code_tl
-                    \c_@@_tikz_code_up_tl
+                  \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl
+                  \int_set:Nn \l__witharrows_pos_arrow_int \c_one_int
+                  \bool_set_false:N \l__witharrows_wrap_lines_bool
+                  \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_up_tl
                 }
-                { \@@_error:n { calc~not~loaded } }
+                { \__witharrows_error:n { calc~not~loaded } }
             }
-            { \@@_error:n { varwidth~not~loaded } }
+            { \__witharrows_error:n { varwidth~not~loaded } }
         } ,
     down .code:n =
-      \str_if_empty:NT \l_@@_previous_key_str
+      \str_if_empty:NT \l__witharrows_previous_key_str
         {
-          \str_set:Nn \l_@@_previous_key_str { down }
-          \bool_if:NTF \c_@@_varwidth_loaded_bool
+          \str_set:Nn \l__witharrows_previous_key_str { down }
+          \bool_if:NTF \c__witharrows_varwidth_loaded_bool
             {
               \cs_if_exist:cTF { tikz at library@calc at loaded }
                 {
-                  \int_set:Nn \l_@@_pos_arrow_int \c_one_int
-                  \bool_set_false:N \l_@@_wrap_lines_bool
-                  \tl_set_eq:NN \l_@@_tikz_code_tl
-                    \c_@@_tikz_code_down_tl
+                  \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl
+                  \int_set:Nn \l__witharrows_pos_arrow_int \c_one_int
+                  \bool_set_false:N \l__witharrows_wrap_lines_bool
+                  \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_down_tl
                 }
-                { \@@_error:n { calc~not~loaded } }
+                { \__witharrows_error:n { calc~not~loaded } }
             }
-            { \@@_error:n { varwidth~not~loaded } }
+            { \__witharrows_error:n { varwidth~not~loaded } }
         }
   }
-\seq_put_right:Nn \l_@@_options_Arrow_seq { down }
-\seq_put_right:Nn \l_@@_options_Arrow_seq { up }
-\@@_msg_new:nn { varwidth~not~loaded }
+\seq_put_right:Nn \l__witharrows_options_Arrow_seq { down }
+\seq_put_right:Nn \l__witharrows_options_Arrow_seq { up }
+\__witharrows_msg_new:nn { varwidth~not~loaded }
   {
     You~can't~use~the~option~'\l_keys_key_tl'~because~
     you~don't~have~loaded~the~package~'varwidth'. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { calc~not~loaded }
+\__witharrows_msg_new:nn { calc~not~loaded }
   {
     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~the~preamble~of~your~document. \\
-    \c_@@_option_ignored_str
+    \c__witharrows_option_ignored_str
   }
-\@@_msg_new:nn { Invalid~specification~for~MultiArrow }
-  {
-    The~specification~of~rows~for~\token_to_str:N\MultiArrow\
-    (i.e.~#1)~is~invalid. \\
-    \c_@@_command_ignored_str
-  }
 \endinput
 %%
 %% End of file `witharrows.sty'.



More information about the tex-live-commits mailing list