texlive[54707] Master/texmf-dist: witharrows (31mar20)

commits+karl at tug.org commits+karl at tug.org
Mon Apr 13 00:28:00 CEST 2020


Revision: 54707
          http://tug.org/svn/texlive?view=revision&revision=54707
Author:   karl
Date:     2020-04-13 00:27:59 +0200 (Mon, 13 Apr 2020)
Log Message:
-----------
witharrows (31mar20)

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	2020-04-12 22:27:38 UTC (rev 54706)
+++ trunk/Master/texmf-dist/doc/generic/witharrows/witharrows-french.tex	2020-04-12 22:27:59 UTC (rev 54707)
@@ -768,7 +768,7 @@
 \end{WithArrows}$
 
 \vspace{1cm}
-Les options relatives aux flèches |up| and |down| peuvent être fixées au niveau global ou environnemental avec la
+Les options relatives aux flèches |up| et |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}
@@ -1174,7 +1174,7 @@
 Si on désire dessiner des flèches depuis l'extérieur des environnements |{WithArrows}|, il est possible de le
 faire en utilisant les nœuds Tikz créés par ces environnements.
 
-Le nom d'un nœud Tikz crée par \pkg{witharrows} est préfixé par |wa-|. Ensuite, on trouve une liste de nombres
+Le nom d'un nœud Tikz créé par \pkg{witharrows} est préfixé par |wa-|. Ensuite, on trouve une liste de nombres
 qui indique quelle est la position de l'environnement dans l'arbre d'imbrication des environnements. À la fin, on a
 le suffixe |l| pour un nœud de gauche et le suffixe |r| pour un nœud de droite.
 
@@ -1286,7 +1286,7 @@
 c'était seulement un exemple pour expliquer comment les nœuds Tikz créés par \pkg{witharrows} peuvent être utilisés.
 
 \bigskip
-Dans l'exemple suivant, on crée deux environnements |{WithArrows}| nommés «|premier|» et «|second|» et on dessine
+Dans l'exemple suivant, on crée des environnements |{WithArrows}| nommés «|premier|» et «|second|» et on dessine
 une flèche entre un nœud du premier et un nœud du second.
 
 \begin{Verbatim}
@@ -1428,7 +1428,9 @@
 \bigskip
 Avec l'option |fleqn|, l'environnement est composé calé à gauche (d'une manière similaire
 à l'option |fleqn| des classes standard de LaTeX). Dans ce cas, la marge gauche peut être réglée avec
-l'option |mathindent| (qui a un nom inspiré du paramètre |\mathindent| de LaTeX). La valeur initiale
+l'option |mathindent| (qui a un nom inspiré du paramètre |\mathindent| de LaTeX\footnote{En LaTeX, |mathindent| est
+une dimension (|dim|) mais devrait devenir un ressort (|skip|) dans une prochaine version de LaTeX. Pour le moment, le
+paramètre |mathindent| de \pkg{witharrows} est une dimension.}). La valeur initiale
 pour cette option est de 25~pt.
 
 \begin{Verbatim}
@@ -2027,6 +2029,18 @@
 
 
 \bigskip
+\subsection{Note pour les utilisateurs de AUCTeX}
+
+Dans un éditeur de texte paramétré par éditer du LaTeX, les environnements |{DispWithArrows}| et
+|{DispWithArrows*}| devraient être formatés comme l'environnement |{equation}| de LaTeX c'est-à-dire avec un
+formatage adapté au mode mathématique. 
+
+Dans l'éditeur Emacs avec AUCTeX, cela se fait en ajoutant les chaînes |"DispWithArrows"| et |"DispWithArrows*"| à
+la variable |font-latex-math-environments|. On peut le faire en utilisant l'interface de personnalisation de Emacs :
+
+|M-x customize| > |[Text]| > |[TeX]| > |[Font LaTeX]|
+
+\bigskip
 \subsection{Note pour les développeurs}
 
 Si vous définissez un environnement s'appuyant sur un environnement de 
@@ -2394,7 +2408,11 @@
 \end{scope}
 
 
+\section*{Autre documentation}
 
+Le document |witharrows.pdf| (fourni avec l'extension \pkg{witharrows}) contient une traduction anglaise de la
+documentation ici présente, ainsi que le code source commenté et un historique des versions.
 
 
+
 \end{document}

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	2020-04-12 22:27:38 UTC (rev 54706)
+++ trunk/Master/texmf-dist/doc/generic/witharrows/witharrows.tex	2020-04-12 22:27:59 UTC (rev 54707)
@@ -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.3}
-\def\myfiledate{2019/12/27}
+\def\myfileversion{2.4}
+\def\myfiledate{2020/03/31}
 \input tikz.tex
 \input expl3-generic.tex
 \usetikzlibrary{arrows.meta,bending}
@@ -192,7 +192,7 @@
   {
     \str_if_empty:NTF \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
         #1
       }
       { \__witharrows_error:n { Incompatible~options } }
@@ -206,18 +206,21 @@
     max-length-of-arrow .initial:n = 2 cm ,
     ygap .dim_set:N = \l__witharrows_ygap_dim ,
     ygap .initial:n = 0.4 ex ,
+    ygap .value_required:n = true ,
     ystart .dim_set:N = \l__witharrows_ystart_dim ,
-
+    ystart .value_required:n = true ,
     ystart .initial:n = 0.4 ex ,
     more-columns .code:n =
       \__witharrows_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } ,
+    more-columns .value_forbidden:n = true ,
     command-name .code:n =
       \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__witharrows_tikz_code_tl,
     tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
-    TikzCode .meta:n = { tikz-code = #1 } ,
+    tikz-code .value_required:n = true ,
     displaystyle .bool_set:N = \l__witharrows_displaystyle_bool ,
     displaystyle .default:n = true ,
     show-nodes .code:n =
@@ -232,6 +235,7 @@
           \int_set:Nn \l__witharrows_pos_arrow_int 7
         }
         { \__witharrows_error:n { Incompatible~options } } ,
+    group  .value_forbidden:n = true ,
     groups .code:n =
       \str_if_empty:NTF \l__witharrows_previous_key_str
         {
@@ -242,32 +246,49 @@
           \int_set:Nn \l__witharrows_pos_arrow_int 6
         }
         { \__witharrows_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     .code:n            = \__witharrows_fix_pos_option:n 3 ,
+    rr     .value_forbidden:n = true ,
     ll     .code:n            = \__witharrows_fix_pos_option:n 1 ,
+    ll     .value_forbidden:n = true ,
     rl     .code:n            = \__witharrows_fix_pos_option:n 2 ,
+    rl     .value_forbidden:n = true ,
     lr     .code:n            = \__witharrows_fix_pos_option:n 0 ,
+    lr     .value_forbidden:n = true ,
     i      .code:n            = \__witharrows_fix_pos_option:n 5 ,
+    i      .value_forbidden:n = true ,
     xoffset .dim_set:N  = \l__witharrows_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__witharrows_interline_skip ,
     start-adjust .dim_set:N = \l__witharrows_start_adjust_dim ,
     start-adjust .initial:n = 0.4 ex ,
+    start-adjust .value_required:n = true ,
     end-adjust .dim_set:N = \l__witharrows_end_adjust_dim ,
     end-adjust .initial:n = 0.4 ex ,
+    end-adjust .value_required:n = true ,
     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 } ,
+    up-and-down .value_required:n = true ,
     no-arrows .code:n =
       \cs_set_eq:NN \__witharrows_draw_arrows:nn \use_none:nn
       \cs_set_eq:NN \__witharrows_draw_arrow:nnn \use_none:nnn  ,
+    no-arrows .value_forbidden:n = true
   }
 \keys_define:nn { WithArrows / WithArrowsSpecific }
   {
     t   .code:n            = \int_set:Nn \l__witharrows_pos_env_int O ,
+    t   .value_forbidden:n = true ,
     c   .code:n            = \int_set:Nn \l__witharrows_pos_env_int 1 ,
+    c   .value_forbidden:n = true ,
     b   .code:n            = \int_set:Nn \l__witharrows_pos_env_int 2 ,
+    b   .value_forbidden:n = true
   }
 \clist_new:N \c__witharrows_extensible_delimiters_clist
 \clist_set:Nn \c__witharrows_extensible_delimiters_clist
@@ -280,6 +301,7 @@
     fleqn .default:n = true ,
     mathindent .dim_set:N = \l__witharrows_mathindent_dim ,
     mathindent .initial:n = 25 pt ,
+    mathindent .value_required:n = true ,
     wrap-lines .bool_set:N = \l__witharrows_wrap_lines_bool ,
     wrap-lines .default:n = true ,
     replace-left-brace-by .code:n =
@@ -301,9 +323,12 @@
         { \__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 ,
+    name .value_required:n = true ,
     code-before .code:n = \tl_put_right:Nn \l__witharrows_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__witharrows_code_after_tl { #1 } ,
+    code-after .value_required:n = true ,
     CodeAfter .meta:n = { code-after = #1 } ,
     format .code:n =
       \tl_if_empty:nTF { #1 }
@@ -313,10 +338,7 @@
             { \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 ,
+    format .value_required:n = true
   }
 \keys_define:nn { WithArrows }
   {
@@ -406,7 +428,7 @@
   {
     \str_if_empty:NTF \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
         \str_set:Nn \l__witharrows_status_arrow_str { independent }
       }
       { \__witharrows_error:n { Incompatible~options~in~Arrow } }
@@ -446,7 +468,7 @@
     xoffset .code:n = ,
     unknown .code:n =
       \__witharrows_sort_seq:N \l__witharrows_options_Arrow_seq
-      \seq_if_in:NVTF \l__witharrows_options_WithArrows_seq \l_keys_key_tl
+      \seq_if_in:NVTF \l__witharrows_options_WithArrows_seq \l_keys_key_str
         {
           \str_set:Nn \l_tmpa_str
            { ~However,~this~key~can~be~used~in~the~options~of~{WithArrows}. }
@@ -464,7 +486,7 @@
   {
     \str_if_empty:NT \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
         \int_set:Nn \l__witharrows_pos_arrow_int { #1 }
       }
   }
@@ -562,7 +584,7 @@
     \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
+    \int_set:Nn \l__witharrows_jump_int 1
     \str_set:Nn \l__witharrows_format_str { rl }
     \skip_zero:N \l__witharrows_interline_skip
     \tl_clear_new:N \l__witharrows_code_before_tl
@@ -578,7 +600,6 @@
     \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 \__witharrows_construct_halign:
   {
@@ -689,6 +710,7 @@
     \fi:
     \int_case:nn \l__witharrows_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
     \bgroup
+    \spread at equation
     \__witharrows_construct_halign:
     &&
     \__witharrows_error:n { Too~much~columns~in~WithArrows }
@@ -759,8 +781,12 @@
     \bool_if:NT \l__witharrows_in_DispWithArrows_bool
       {
             &
-            \tikz [ __witharrows_standard ]
-               \coordinate ( \int_use:N \g__witharrows_line_int - v ) ;
+                \pgfpicture
+                \pgfrememberpicturepositiononpagetrue
+                \pgfcoordinate
+                  { wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - v }
+                  \pgfpointorigin
+                \endpgfpicture
       }
     \dim_compare:nNnT { #1 } < \c_zero_dim
        { \__witharrows_error:n { option~of~cr~negative } }
@@ -769,7 +795,8 @@
     \noalign
       {
         \dim_set:Nn \l_tmpa_dim { \dim_max:nn { #1 } \c_zero_dim }
-        \skip_vertical:n { \l_tmpa_dim + \l__witharrows_interline_skip }
+        \skip_vertical:N \l_tmpa_dim
+        \skip_vertical:N \l__witharrows_interline_skip
         \scan_stop:
       }
   }
@@ -837,6 +864,7 @@
       \bool_if:NTF \l__witharrows_fleqn_bool
         \c_zero_skip
         { 0 pt plus 1000 pt minus 1000 pt }
+    \spread at equation
     \__witharrows_construct_halign:
     \tabskip = 0 pt plus 1000 pt minus 1000 pt
     &
@@ -869,7 +897,7 @@
          \hbox_to_wd:nn \l__witharrows_linewidth_dim
            {
             \bool_if:NTF \l__witharrows_fleqn_bool
-              { \skip_horizontal:n \l__witharrows_mathindent_dim }
+              { \skip_horizontal:N \l__witharrows_mathindent_dim }
               \hfil
             \hbox_to_wd:nn \g__witharrows_alignment_dim
               {
@@ -891,25 +919,25 @@
               }
             \hfil
            }
-         \skip_horizontal:n { - \l__witharrows_linewidth_dim }
+         \skip_horizontal:N -\l__witharrows_linewidth_dim
          \vcenter { \box_use_drop:N \l__witharrows_halign_box }
        }
     \dim_gzero_new:N \g__witharrows_right_x_dim
     \dim_gset_eq:NN \g__witharrows_right_x_dim \c_max_dim
-    \tikzpicture [ __witharrows_standard ]
+    \pgfpicture
+      \pgfrememberpicturepositiononpagetrue
       \int_step_variable:nNn \g__witharrows_line_int \l_tmpa_int
         {
           \cs_if_free:cTF
-            { pgf at sh@ns at wa - \l__witharrows_prefix_str - \l_tmpa_int - v }
+            { pgf @ sh @ ns @ 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__witharrows_right_x_dim
-                { \dim_gset:Nn \g__witharrows_right_x_dim \l_tmpa_dim }
+              \pgfpointanchor { wa - \l__witharrows_prefix_str - \l_tmpa_int - v } { center }
+              \dim_compare:nNnT \pgf at x < \g__witharrows_right_x_dim
+                { \dim_gset_eq:NN \g__witharrows_right_x_dim \pgf at x }
             }
         }
-    \endtikzpicture
+    \endpgfpicture
     \__witharrows_post_halign:
       \c_math_toggle_token \c_math_toggle_token
     \group_end:
@@ -943,7 +971,7 @@
     \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_set:Nn \l__witharrows_arrow_int 1
     \int_until_do:nNnn \l__witharrows_arrow_int > \g__witharrows_arrow_int
       {
         \prop_get:cnN
@@ -968,26 +996,26 @@
           \__witharrows_code_for_possible_arrow:
         \int_incr:N \l__witharrows_arrow_int
       }
-    \bool_if:nT
-      {
-        \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 }
-          &&
-        \int_compare_p:nNn \l__witharrows_first_arrow_of_group_int > 0
-      }
+    \bool_lazy_and:nnT
+      { \bool_not_p:n { \int_compare_p:nNn \l__witharrows_pos_arrow_int = 7 } }
+      { \int_compare_p:nNn \l__witharrows_first_arrow_of_group_int > 0 }
       { \__witharrows_draw_arrows:nn \l__witharrows_first_arrow_of_group_int \g__witharrows_arrow_int }
   }
 \cs_new_protected:Npn \__witharrows_code_for_possible_arrow:
   {
-    \bool_if:nT
+    \bool_lazy_and:nnT
+      { \int_compare_p:nNn \l__witharrows_arrow_int > 1 }
       {
-        \int_compare_p:nNn \l__witharrows_arrow_int > \c_one_int
-        &&
-       ( \int_compare_p:n { \l__witharrows_initial_int > \l__witharrows_last_line_of_group_int }
-           &&
-         \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 }
-           ||
-         \str_if_eq_p:Vn \l__witharrows_status_arrow_str { new-group }
-       )
+        \bool_lazy_or_p:nn
+          {
+            \bool_lazy_and_p:nn
+              {
+                \int_compare_p:nNn
+                  \l__witharrows_initial_int > \l__witharrows_last_line_of_group_int
+              }
+              { \bool_not_p:n { \int_compare_p:nNn \l__witharrows_pos_arrow_int = 7 } }
+          }
+          { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { new-group } }
       }
       {
         \int_compare:nNnF \l__witharrows_first_arrow_of_group_int = \c_zero_int
@@ -1008,7 +1036,7 @@
         \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 }
+        \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
           { \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim } }
       }
       {
@@ -1032,7 +1060,7 @@
       }
     \bool_if:nF { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } }
       {
-        \int_compare:nT { \l__witharrows_pos_arrow_int != 8 }
+        \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
           { \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int }
       }
   }
@@ -1089,12 +1117,9 @@
         \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int
       }
     \tl_set:Nx \l__witharrows_initial_tl
-      {
-        \int_use:N \l__witharrows_initial_int - \bool_if:NTF \l__witharrows_initial_r_bool rl
-        .south
-      }
+      { \int_use:N \l__witharrows_initial_int - \bool_if:NTF \l__witharrows_initial_r_bool rl }
     \tl_set:Nx \l__witharrows_final_tl
-      { \int_use:N \l__witharrows_final_int - \bool_if:NTF \l__witharrows_final_r_bool rl .north }
+      { \int_use:N \l__witharrows_final_int - \bool_if:NTF \l__witharrows_final_r_bool rl }
     \prop_get:cnN
       { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
       { label }
@@ -1116,20 +1141,21 @@
     \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 )
+    \pgfpicture
+      \pgfrememberpicturepositiononpagetrue
+      \pgfpointanchor { wa - \l__witharrows_prefix_str - \l__witharrows_initial_tl } { south }
       \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 )
+      \pgfpointanchor { wa - \l__witharrows_prefix_str - \l__witharrows_final_tl } { north }
       \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__witharrows_y_initial_dim - \g__witharrows_y_final_dim }
+    \endpgfpicture
+    \bool_lazy_and:nnTF
+      {
+        \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__witharrows_final_int - \l__witharrows_initial_int } = 1
       }
+      { \int_compare_p:nNn { \l__witharrows_final_int - \l__witharrows_initial_int } = 1 }
       {
         \tl_gset:Nx \g_tmpa_tl
           {
@@ -1139,7 +1165,7 @@
             \dim_eval:n
               {
                 ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
-                + ( \l__witharrows_max_length_of_arrow_dim / 2 )
+                + 0.5 \l__witharrows_max_length_of_arrow_dim
               }
           }
         \tl_gset:Nx \g_tmpb_tl
@@ -1150,7 +1176,7 @@
             \dim_eval:n
               {
                 ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
-                - ( \l__witharrows_max_length_of_arrow_dim / 2 )
+                - 0.5 \l__witharrows_max_length_of_arrow_dim
               }
           }
       }
@@ -1192,7 +1218,7 @@
   }
 \cs_new_protected:Npn \__witharrows_draw_arrow:nnn #1 #2 #3
   {
-    \bool_if:nT { \l__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool }
+    \bool_lazy_and:nnT \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 }
@@ -1201,7 +1227,7 @@
 \tl_const:Nn \c__witharrows_tikz_code_wrap_lines_tl
   {
     \draw ( #1 ) to node ( __witharrows_label ) { } ( #2 ) ;
-    \tikz at parse@node \pgfutil at firstofone ( __witharrows_label.west )
+    \pgfpointanchor { wa - \l__witharrows_prefix_str - __witharrows_label } { west }
     \dim_set:Nn \l_tmpa_dim
       { \g__witharrows_right_x_dim - \pgf at x - \pgfkeysvalueof { / pgf / inner~xsep } }
     \path \pgfextra { \tl_gset:Nx \g_tmpa_tl \tikz at text@width } ;
@@ -1220,16 +1246,18 @@
   }
 \cs_new_protected:Npn \__witharrows_update_x:nn #1 #2
   {
+    \dim_gset_eq:NN \g_tmpa_dim \l__witharrows_x_dim
+    \pgfpicture
+    \pgfrememberpicturepositiononpagetrue
     \int_step_inline:nnn { #1 } { #2 }
       {
-        \tikzpicture [ __witharrows_standard ]
-          \tikz at scan@one at point \pgfutil at firstofone ( ##1 - l )
-          \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \l__witharrows_x_dim \pgf at x }
-        \endtikzpicture
-        \dim_set_eq:NN \l__witharrows_x_dim \g_tmpa_dim
+        \pgfpointanchor { wa - \l__witharrows_prefix_str - ##1 - l } { center }
+        \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \g_tmpa_dim \pgf at x }
       }
+    \endpgfpicture
+    \dim_set_eq:NN \l__witharrows_x_dim \g_tmpa_dim
   }
-\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g__witharrows_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 =
@@ -1298,11 +1326,14 @@
                 {
                   \int_compare:nNnTF \l__witharrows_pos_arrow_int = 4
                     {
-                      \tikzpicture [ __witharrows_standard ]
-                        \tikz at scan@one at point \pgfutil at firstofone (#2-l.south)
+                      \pgfpicture
+                        \pgfrememberpicturepositiononpagetrue
+                        \pgfpointanchor { wa - \l__witharrows_prefix_str - #2 - l }
+                          { south }
                         \dim_set_eq:NN \l_tmpa_dim \pgf at x
                         \dim_set_eq:NN \l_tmpb_dim \pgf at y
-                        \tikz at scan@one at point \pgfutil at firstofone (#3-l.north)
+                        \pgfpointanchor { wa - \l__witharrows_prefix_str - #3 - l }
+                          { north }
                         \dim_set:Nn \l_tmpa_dim
                           { \dim_max:nn \l_tmpa_dim \pgf at x }
                         \tl_gset:Nx \g_tmpa_tl
@@ -1309,19 +1340,28 @@
                           { \dim_use:N \l_tmpa_dim , \dim_use:N \l_tmpb_dim }
                         \tl_gset:Nx \g_tmpb_tl
                           { \dim_use:N \l_tmpa_dim , \dim_use:N \pgf at y }
-                      \endtikzpicture
+                      \endpgfpicture
                     }
                     {
-                      \tikzpicture [ __witharrows_standard ]
-                        \tikz at scan@one at point \pgfutil at firstofone
-                           ( #2-\bool_if:NTF\l__witharrows_initial_r_bool rl .south )
+                      \pgfpicture
+                        \pgfrememberpicturepositiononpagetrue
+                        \pgfpointanchor
+                          {
+                            wa - \l__witharrows_prefix_str -
+                            #2 - \bool_if:NTF \l__witharrows_initial_r_bool r l
+                          }
+                          { 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__witharrows_final_r_bool rl .north )
+                          { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
+                        \pgfpointanchor
+                          {
+                            wa - \l__witharrows_prefix_str -
+                            #3 - \bool_if:NTF \l__witharrows_final_r_bool r l
+                          }
+                          { north }
                         \tl_gset:Nx \g_tmpb_tl
-                           { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
-                      \endtikzpicture
+                          { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
+                      \endpgfpicture
                     }
                   \__witharrows_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 }
                 }
@@ -1369,11 +1409,12 @@
                       -- 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)
+
+          \pgfpointanchor { wa - \l__witharrows_prefix_str - __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__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool }
+          \bool_lazy_and:nnT \l__witharrows_wrap_lines_bool \l__witharrows_in_DispWithArrows_bool
             {
               \dim_set:Nn \l_tmpb_dim
                 { \g__witharrows_right_x_dim - \pgf at x - 0.3333 em }
@@ -1405,7 +1446,7 @@
   { If~you~go~on,~this~command~will~be~ignored. }
 \__witharrows_msg_new:nn { Bad~value~for~replace~brace~by }
   {
-    Bad~value~for~the~option~'\l_keys_key_tl'.~The~value~must~begin~
+    Bad~value~for~the~option~'\l_keys_key_str'.~The~value~must~begin~
     with~an~extensible~left~delimiter.~The~possible~values~are:~.,
     \token_to_str:N \{,~(,~[,~\token_to_str:N \lbrace,~
     \token_to_str:N \lbrack,~\token_to_str:N \lgroup,~
@@ -1437,12 +1478,12 @@
   }
 \__witharrows_msg_new:nn { Value~for~a~key }
   {
-    The~key~'\l_keys_key_tl'~should~be~used~without~value. \\
+    The~key~'\l_keys_key_str'~should~be~used~without~value. \\
     However,~you~can~go~on~for~this~time.
   }
 \__witharrows_msg_new:nnn { Unknown~option~in~Arrow }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~for~the~command~
+    The~key~'\l_keys_key_str'~is~unknown~for~the~command~
     \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 \\
@@ -1455,7 +1496,7 @@
   }
 \__witharrows_msg_new:nnn { Unknown~option~WithArrows }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
+    The~key~'\l_keys_key_str'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
     \c__witharrows_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
   }
@@ -1465,7 +1506,7 @@
   }
 \__witharrows_msg_new:nnn { Unknown~option~DispWithArrows }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
+    The~key~'\l_keys_key_str'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
     \c__witharrows_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
   }
@@ -1475,7 +1516,7 @@
   }
 \__witharrows_msg_new:nnn { Unknown~option~WithArrowsOptions }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~
+    The~key~'\l_keys_key_str'~is~unknown~in~
     \token_to_str:N \WithArrowsOptions. \\
     \c__witharrows_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
@@ -1486,7 +1527,7 @@
   }
 \__witharrows_msg_new:nnn { Unknown~option~Arrow~in~code-after }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~
+    The~key~'\l_keys_key_str'~is~unknown~in~
     \token_to_str:N \Arrow\ in~code-after. \\
     \c__witharrows_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
@@ -1552,7 +1593,7 @@
   }
 \__witharrows_msg_new:nn { Incompatible~options~in~Arrow }
   {
-    You~try~to~use~the~option~'\l_keys_key_tl'~but~
+    You~try~to~use~the~option~'\l_keys_key_str'~but~
     this~option~is~incompatible~or~redundant~with~the~option~
     '\l__witharrows_previous_key_str'~set~in~the~same~command~
     \l__witharrows_string_Arrow_for_msg_str. \\
@@ -1559,7 +1600,7 @@
     \c__witharrows_option_ignored_str
   }
 \__witharrows_msg_new:nn { Incompatible~options }
-  { You~try~to~use~the~option~'\l_keys_key_tl'~but~
+  { You~try~to~use~the~option~'\l_keys_key_str'~but~
     this~option~is~incompatible~or~redundant~with~the~option~
     '\l__witharrows_previous_key_str'~set~in~the~same~command~
     \bool_if:NT \l__witharrows_in_code_after_bool
@@ -1670,7 +1711,7 @@
         \group_begin:
           \msg_set:nnn { witharrows } { Unknown~option~WithArrowsOptions }
             {
-              The~key~'\l_keys_key_tl'~can't~be~set~in~the~
+              The~key~'\l_keys_key_str'~can't~be~set~in~the~
               definition~of~a~style.~You~can~go~on~for~this~time~
               but~you~should~suppress~this~key.
             }
@@ -1700,7 +1741,7 @@
   }
 \__witharrows_msg_new:nn { Option~unknown~for~up-and-down }
   {
-    The~option~'\l_keys_key_tl'~is~unknown.~\c__witharrows_option_ignored_str
+    The~option~'\l_keys_key_str'~is~unknown.~\c__witharrows_option_ignored_str
   }
 \tl_const:Nn \c__witharrows_tikz_code_up_tl
   {
@@ -1792,7 +1833,7 @@
               \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__witharrows_pos_arrow_int \c_one_int
+                  \int_set:Nn \l__witharrows_pos_arrow_int 1
                   \bool_set_false:N \l__witharrows_wrap_lines_bool
                   \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_up_tl
                 }
@@ -1805,7 +1846,7 @@
               \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__witharrows_pos_arrow_int \c_one_int
+                  \int_set:Nn \l__witharrows_pos_arrow_int 1
                   \bool_set_false:N \l__witharrows_wrap_lines_bool
                   \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_down_tl
                 }
@@ -1816,13 +1857,13 @@
 \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~can't~use~the~option~'\l_keys_key_str'~because~
     you~don't~have~loaded~the~package~'varwidth'. \\
     \c__witharrows_option_ignored_str
   }
 \__witharrows_msg_new:nn { calc~not~loaded }
   {
-    You~can't~use~the~option~'\l_keys_key_tl'~because~you~don't~have~loaded~the~
+    You~can't~use~the~option~'\l_keys_key_str'~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__witharrows_option_ignored_str

Modified: trunk/Master/texmf-dist/source/generic/witharrows/witharrows.dtx
===================================================================
--- trunk/Master/texmf-dist/source/generic/witharrows/witharrows.dtx	2020-04-12 22:27:38 UTC (rev 54706)
+++ trunk/Master/texmf-dist/source/generic/witharrows/witharrows.dtx	2020-04-12 22:27:59 UTC (rev 54707)
@@ -1,6 +1,6 @@
 %\iffalse meta-comment
 %
-% Copyright (C) 2017-2019 by F. Pantigny
+% Copyright (C) 2017-2020 by F. Pantigny
 % -----------------------------------
 %
 % This file may be distributed and/or modified under the
@@ -15,8 +15,8 @@
 %
 % \fi
 % \iffalse
-\def\myfileversion{2.3}
-\def\myfiledate{2019/12/27}
+\def\myfileversion{2.4}
+\def\myfiledate{2020/03/31}
 %
 %
 %<*batchfile>
@@ -26,7 +26,7 @@
 \usedir{tex/latex/witharrows}
 \preamble
 
-Copyright (C) 2017-2019 by F. Pantigny
+Copyright (C) 2017-2020 by F. Pantigny
 -----------------------------------
 
 This file may be distributed and/or modified under the
@@ -1492,7 +1492,10 @@
 % With the option |fleqn|, the environment is composed flush left (in a way
 % similar to the option |fleqn| of the standard classes of LaTeX). In this case,
 % the left margin can be controlled with the option |mathindent| (with a name
-% inspired by the parameter |\mathindent| of standard LaTeX). The initial value
+% inspired by the parameter |\mathindent| of standard LaTeX\footnote{In LaTeX,
+% |mathindent| is a dimension (|dim|) and not a glue (|skip|) but should become
+% a skip in a future version of LaTeX. As for now, the parameter |mathindent| of
+% \pkg{witharrows} is a dimension.}). The initial value
 % of this parameter is 25~pt.
 %
 % \begin{Verbatim}
@@ -1806,7 +1809,7 @@
 %
 % \medskip
 % The version of \pkg{witharrows} for plain-TeX doesn't provide all the
-% functionnalities of the LaTeX version. In particular, the functionnalities which
+% functionalities of the LaTeX version. In particular, the functionalities which
 % deal with the number of the equations are not available (since they rely upon
 % the system of tags of LaTeX).
 %
@@ -2095,6 +2098,20 @@
 % errors can be raised, for example if an arrow would arrive after the last row
 % of the environment.
 %
+% \bigskip
+% \subsection{Note for the users of AUCTeX}
+% 
+% In a editor of text with a LaTeX-oriented mode, the environments
+% |{DispWithArrows}| and |{DispWithArrows*}| should be formated like the
+% environment |equation| of LaTeX, that is to say with a formating adapted to
+% the math mode of TeX.
+% 
+% In Emacs with the AUCTeX mode, it's possible to achieve such a customization
+% by adding the strings |"DispWithArrows"| and |"DispWithArrows*"| to the
+% variable |font-latex-math-environments|. It's possible to do that with the
+% ``easy customization'' interface of Emacs:
+% 
+% |M-x customize| > |[Text]| > |[TeX]| > |[Font LaTeX]|
 %
 % \bigskip
 % \subsection{Note for developpers}
@@ -2259,7 +2276,7 @@
 % & = \frac1n\sum_{k=0}^{n-1} \Re\left(e^{i\frac{k\pi}{2n}}\right)
 % \Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
 % & = \frac1n \Re\left(\sum_{k=0}^{n-1} e^{i\frac{k\pi}{2n}}\right)
-% \Arrow{$\exp$ is a morphism for $\times$ et $+$} \\
+% \Arrow{$\exp$ is a morphism for $\times$ and $+$} \\
 % & = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
 % \Arrow{sum of terms of a geometric progression of ratio $e^{i\frac{2\pi}n}$}\\
 % & = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}}\right)\\
@@ -2322,7 +2339,7 @@
 % & = \frac1n\sum_{k=0}^{n-1} \Re\left(e^{i\frac{k\pi}{2n}}\right)
 % \Arrow{$\Re(z+z')=\Re(z)+\Re(z')$}\\
 % & = \frac1n \Re\left(\sum_{k=0}^{n-1} e^{i\frac{k\pi}{2n}}\right)
-% \Arrow{$\exp$ is a morphism for $\times$ et $+$} \\
+% \Arrow{$\exp$ is a morphism for $\times$ and $+$} \\
 % & = \frac1n \Re \left(\sum_{k=0}^{n-1}\bigl(e^{i\frac{\pi}{2n}}\bigr)^k\right)
 % \Arrow{sum of terms of a geometric progression of ratio $e^{i\frac{2\pi}n}$}\\
 % & = \frac1n \Re \left( \frac{1-\bigl(e^{i\frac{\pi}{2n}}\bigr)^n}{1-e^{i\frac{\pi}{2n}}}\right)\\
@@ -2473,18 +2490,23 @@
 %
 % \subsection{Declaration of the package and extensions loaded}
 %
+% The prefix |witharrows| has been registred for this extension.
 %
+% See: |http://mirrors.ctan.org/macros/latex/contrib/l3kernel/l3prefixes.pdf|
+% 
+%<@@=witharrows>
+% 
+% \bigskip
 % First, \pkg{tikz} and some Tikz libraries are loaded before the
 % |\ProvidesExplPackage|. They are loaded this way because |\usetikzlibrary| in
 % |expl3| code fails.\footnote{cf.
 %   |tex.stackexchange.com/questions/57424/using-of-usetikzlibrary-in-an-expl3-package-fails|}
 %
-%<@@=witharrows>
 % 
 %    \begin{macrocode}
 %<*LaTeX>
 \RequirePackage{tikz}
-\RequirePackage{expl3}[2019/07/01]
+\RequirePackage{expl3}[2020/02/08]
 %</LaTeX>
 %<*plain-TeX>
 \input tikz.tex
@@ -2506,6 +2528,23 @@
   {Draws arrows for explanations on the right}
 %    \end{macrocode}
 %
+% 
+% \medskip
+% The version of 2020/02/08 of \pkg{expl3} has replaced |\l_keys_key_tl| by
+% |\l_keys_key_str|. We have immediatly changed in this file. Now, you test the
+% existence of |\l_keys_key_str| in order to detect if the version of LaTeX used
+% by the final user is up to date.
+%    \begin{macrocode}
+\msg_new:nnn { witharrows } { expl3~too~old }
+  {
+    Your~version~of~LaTeX~(especially~expl3)~is~too~old.~
+    You~can~go~on~but~you~will~probably~have~other~errors~
+    if~you~use~the~functionalities~of~witharrows.
+  }
+\cs_if_exist:NF \l_keys_key_str
+  { \msg_error:nn { witharrows } { expl3~too~old } }
+%    \end{macrocode}
+% 
 % \bigskip
 % The package \pkg{xparse} will be used to define the environments
 % |{WithArrows}|, |{DispWithArrows}|, |{DispWithArrows*}| and the commands
@@ -2578,7 +2617,7 @@
 %    \begin{macrocode}          
 \@@_msg_new:nn { Option~unknown~for~package }
   { 
-    You~can't~use~the~option~'\l_keys_key_tl'~when~loading~the~
+    You~can't~use~the~option~'\l_keys_key_str'~when~loading~the~
     package~witharrows.~Try~to~use~the~command~
     \token_to_str:N\WithArrowsOptions. 
   }
@@ -2596,7 +2635,7 @@
 %    \begin{macrocode}
 \@@_msg_new:nn { Option~incompatible~with~Beamer }
   { 
-    The~option~'\l_keys_key_tl'\ is~incompatible~
+    The~option~'\l_keys_key_str'\ is~incompatible~
     with~Beamer~because~Beamer~has~its~own~system~to~extract~footnotes.
   }
 %    \end{macrocode}
@@ -2986,7 +3025,7 @@
 % \bigskip
 % The integer |\l_@@_pos_arrow_int| indicates the position of the arrow with the
 % following code (the option |v| is accessible only for the arrows in
-% |code-after| where the options |i|, |group| et |groups| are not available).
+% |code-after| where the options |i|, |group| and |groups| are not available).
 %
 % \begin{center}
 % \begin{tabular}{l}
@@ -3193,7 +3232,7 @@
   { 
     \str_if_empty:NTF \l_@@_previous_key_str
       { 
-        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_str
         #1
       }
       { \@@_error:n { Incompatible~options } }
@@ -3217,18 +3256,21 @@
     max-length-of-arrow .initial:n = 2 cm ,
     ygap .dim_set:N = \l_@@_ygap_dim ,
     ygap .initial:n = 0.4 ex ,
+    ygap .value_required:n = true ,
     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)~; ,
-    TikzCode .meta:n = { tikz-code = #1 } ,
+    tikz-code .value_required:n = true ,
     displaystyle .bool_set:N = \l_@@_displaystyle_bool ,
     displaystyle .default:n = true ,
     show-nodes .code:n =  
@@ -3243,6 +3285,7 @@
           \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
         { 
@@ -3253,23 +3296,36 @@
           \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     .code:n            = \@@_fix_pos_option:n 3 ,
+    rr     .value_forbidden:n = true ,
     ll     .code:n            = \@@_fix_pos_option:n 1 ,
+    ll     .value_forbidden:n = true ,
     rl     .code:n            = \@@_fix_pos_option:n 2 ,
+    rl     .value_forbidden:n = true ,
     lr     .code:n            = \@@_fix_pos_option:n 0 ,
+    lr     .value_forbidden:n = true ,
     i      .code:n            = \@@_fix_pos_option:n 5 ,
+    i      .value_forbidden:n = true ,
     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 ,
     start-adjust .dim_set:N = \l_@@_start_adjust_dim ,
     start-adjust .initial:n = 0.4 ex ,
+    start-adjust .value_required:n = true ,
     end-adjust .dim_set:N = \l_@@_end_adjust_dim ,
     end-adjust .initial:n = 0.4 ex ,
+    end-adjust .value_required:n = true ,
     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 } , 
+    up-and-down .value_required:n = true ,
 %    \end{macrocode}
 %
 % \medskip
@@ -3281,37 +3337,7 @@
     no-arrows .code:n = 
       \cs_set_eq:NN \@@_draw_arrows:nn \use_none:nn
       \cs_set_eq:NN \@@_draw_arrow:nnn \use_none:nnn  ,
-%    \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}
 % 
@@ -3323,19 +3349,11 @@
 \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 ,
-%    \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   .value_forbidden:n = true ,
     b   .value_forbidden:n = true
-%</comment>
   }
 %    \end{macrocode}
 %
@@ -3351,8 +3369,9 @@
 %<*LaTeX>
 \AtBeginDocument
   { 
-    \bool_if:nT 
-      { \c_@@_amsmath_loaded_bool || \use:c { c_@@_unicode-math_loaded_bool } } 
+    \bool_lazy_or:nnT 
+      \c_@@_amsmath_loaded_bool 
+      { \use:c { c_@@_unicode-math_loaded_bool } }
       { 
         \clist_put_right:Nn \c_@@_extensible_delimiters_clist { \lvert, \lVert }
       }  
@@ -3372,6 +3391,7 @@
     fleqn .default:n = true ,
     mathindent .dim_set:N = \l_@@_mathindent_dim ,
     mathindent .initial:n = 25 pt ,
+    mathindent .value_required:n = true ,
 %<*LaTeX>
     notag .code:n = 
       \str_if_eq:nnTF { #1 } { true }
@@ -3394,16 +3414,19 @@
           \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 }
         {
           \clist_remove_all:Nn \l_@@_tags_clist { first }
-          \clist_put_left:Nn \l_@@_tags_clist \c_one_int
+          \clist_put_left:Nn \l_@@_tags_clist 1
         } ,
+    tagged-lines .value_required:n = true ,
 %</LaTeX>
     wrap-lines .bool_set:N = \l_@@_wrap_lines_bool ,
     wrap-lines .default:n = true ,
@@ -3427,24 +3450,11 @@
 %    \begin{macrocode}
 %<*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}
 %
-%
 % \bigskip
 % Now a set of keys which will be used in all the environments (but not in
 % |\WithArrowsOptions}|). 
@@ -3462,9 +3472,12 @@
         { \@@_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 } ,
     format .code:n = 
       \tl_if_empty:nTF { #1 } 
@@ -3474,16 +3487,7 @@
             { \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 ,
+    format .value_required:n = true 
   }
 %    \end{macrocode}
 %
@@ -3629,7 +3633,7 @@
 %    \end{macrocode}
 %
 % \bigskip
-% The command |\@@_set_independent_bis:| is the same as |\@@_set_independant:|
+% The command |\@@_set_independent_bis:| is the same as |\@@_set_independent:|
 % except that the key may be used with a value.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_set_independent_bis:
@@ -3636,7 +3640,7 @@
   { 
     \str_if_empty:NTF \l_@@_previous_key_str
       {
-        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_str
         \str_set:Nn \l_@@_status_arrow_str { independent } 
       }
       { \@@_error:n { Incompatible~options~in~Arrow } }
@@ -3696,7 +3700,7 @@
     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
+      \seq_if_in:NVTF \l_@@_options_WithArrows_seq \l_keys_key_str
         { 
           \str_set:Nn \l_tmpa_str
            { ~However,~this~key~can~be~used~in~the~options~of~{WithArrows}. }  
@@ -3725,7 +3729,7 @@
   { 
     \str_if_empty:NT \l_@@_previous_key_str
       { 
-        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_str
         \int_set:Nn \l_@@_pos_arrow_int { #1 } 
       }
   }
@@ -4058,7 +4062,7 @@
 % The counter |\l_@@_jump_int| corresponds to the option |jump|. Now, we set the
 % initial value for this option.
 %    \begin{macrocode}
-    \int_set:Nn \l_@@_jump_int \c_one_int
+    \int_set:Nn \l_@@_jump_int 1
 %    \end{macrocode}
 %
 % \medskip
@@ -4178,14 +4182,6 @@
     \l_@@_code_before_tl
 %    \end{macrocode}
 %
-% \bigskip
-% The command |\spread at equation| is the command used by \pkg{amsmath} in the
-% beginning of an alignment to fix the interline. When used, it becomes no-op.
-% However, it's possible to use \pkg{witharrows} without \pkg{amsmath} since we
-% have redefined |\spread at equation| (if it is not defined yet).
-%    \begin{macrocode}
-    \spread at equation
-%    \end{macrocode}
 %
 %
 %    \begin{macrocode}
@@ -4435,7 +4431,17 @@
     \bgroup
 %    \end{macrocode}
 %
+%
 % \bigskip
+% The command |\spread at equation| is the command used by \pkg{amsmath} in the
+% beginning of an alignment to fix the interline. When used, it becomes no-op.
+% However, it's possible to use \pkg{witharrows} without \pkg{amsmath} since we
+% have redefined |\spread at equation| (if it is not defined yet).
+%    \begin{macrocode}
+    \spread at equation
+%    \end{macrocode}
+% 
+% \bigskip
 % We begin the |\halign| and the preamble. During the construction of the
 % preamble, |\l_tmpa_int| will be incremented during each column constructed.
 %    \begin{macrocode}
@@ -4787,8 +4793,12 @@
               { 
                 \bool_if:NF \c_@@_leqno_bool
                   { 
-                    \tikz [ @@_standard ] 
-                      \coordinate ( \int_use:N \g_@@_line_int - v ) ; 
+                    \pgfpicture
+                    \pgfrememberpicturepositiononpagetrue
+                    \pgfcoordinate 
+                      { wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - v } 
+                      \pgfpointorigin
+                    \endpgfpicture
                   }
                 \quad
                 \@eqnnum 
@@ -4795,8 +4805,12 @@
               }
             \bool_if:NT \c_@@_leqno_bool
               { 
-                \tikz [ @@_standard ] 
-                  \coordinate ( \int_use:N \g_@@_line_int - v ) ; 
+                \pgfpicture
+                \pgfrememberpicturepositiononpagetrue
+                \pgfcoordinate 
+                  { wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - v } 
+                  \pgfpointorigin
+                \endpgfpicture
               } 
           }
           { 
@@ -4808,8 +4822,12 @@
             \bool_if:NT \l_@@_qedhere_bool 
                { \hbox_overlap_left:n \@@_qedhere_i: }
 %</LaTeX>
-            \tikz [ @@_standard ] 
-               \coordinate ( \int_use:N \g_@@_line_int - v ) ; 
+                \pgfpicture
+                \pgfrememberpicturepositiononpagetrue
+                \pgfcoordinate 
+                  { wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - v } 
+                  \pgfpointorigin
+                \endpgfpicture
 %<*LaTeX>
           }
 %</LaTeX>
@@ -4821,7 +4839,8 @@
     \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 
+        \skip_vertical:N \l_@@_interline_skip 
         \scan_stop: 
       }  
   }
@@ -4909,6 +4928,32 @@
     \str_set:Nn \l_@@_type_env_str { DispWithArrows }
 %</plain-TeX>
 %    \end{macrocode}
+% 
+% \medskip
+% Since the version 1.16 of \pkg{witharrows}, no space is added between an
+% |\item| of a LaTeX list and an environment |{DispWithArrows}| except with the
+% option |standard-behaviour-with-items| stored in the boolean
+% |\l_@@_sbwi_bool|. We have to know if we are just after an |\item| and this
+% information will be stored in |\l_@@_in_label_or_minipage_bool|. We have to do
+% this test quicky after the beginning of the environment (in particular,
+% because it must be done before the execution of the
+% |code-before|\footnote{The |code-before| is not meant to contains typesetting
+% material. However, it may contain, for example, a |{tikzpicture}| with options
+% |overlay| and |remember picture| in order to draw nodes \emph{under} some
+% elements of the environment |{DispWithArrows}|.}).
+%    \begin{macrocode}
+%<*LaTeX>
+    \bool_if:NF \l_@@_sbwi_bool
+      {  
+        \legacy_if:nT { @inlabel }
+          { \bool_set_true:N \l_@@_in_label_or_minipage_bool }
+        \legacy_if:nT { @minipage }
+          { \bool_set_true:N \l_@@_in_label_or_minipage_bool }
+      }
+%</LaTeX>
+%    \end{macrocode}
+%
+% \medskip
 % If \pkg{mathtools} has been loaded with the option |showonlyrefs|, we disable
 % the code of \pkg{mathtools} for the option |showonlyrefs| with the command
 % |\MT_showonlyrefs_false:| (it will be reactivated at the end of the
@@ -4953,26 +4998,7 @@
     \bool_if:NT \l_@@_subequations_bool { \begin { subequations } }
 %</LaTeX>
 %    \end{macrocode}
-% Since the version 1.16 of \pkg{witharrows}, no space is added between an
-% |\item| of a LaTeX list and an environment |{DispWithArrows}| except with the
-% option |standard-behaviour-with-items| stored in the boolean
-% |\l_@@_sbwi_bool|. We have to know if we are just after an |\item| and this
-% information will be stored in |\l_@@_in_label_or_minipage_bool|.
-%    \begin{macrocode}
-%<*LaTeX>
-    \bool_if:NF \l_@@_sbwi_bool
-      {  
-        \if at inlabel
-        \bool_set_true:N \l_@@_in_label_or_minipage_bool
-        \fi
-        \if at minipage
-        \bool_set_true:N \l_@@_in_label_or_minipage_bool
-        \fi
-      }
-%</LaTeX>
-%    \end{macrocode}
 %
-%
 %    \begin{macrocode}
     \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl
       {
@@ -5086,7 +5112,13 @@
 %    \end{macrocode}
 %
 %
+% \bigskip
+% The command |\spread at equation| is the command used by \pkg{amsmath} in the
+% beginning of an alignment to fix the interline. When used, it becomes no-op.
+% However, it's possible to use \pkg{witharrows} without \pkg{amsmath} since we
+% have redefined |\spread at equation| (if it is not defined yet).
 %    \begin{macrocode}
+    \spread at equation
     \@@_construct_halign:
     \tabskip = 0 pt plus 1000 pt minus 1000 pt
     & 
@@ -5148,7 +5180,7 @@
          \hbox_to_wd:nn \l_@@_linewidth_dim
            {
             \bool_if:NTF \l_@@_fleqn_bool
-              { \skip_horizontal:n \l_@@_mathindent_dim }
+              { \skip_horizontal:N \l_@@_mathindent_dim }
               \hfil
             \hbox_to_wd:nn \g_@@_alignment_dim 
               { 
@@ -5170,7 +5202,7 @@
               }
             \hfil
            } 
-         \skip_horizontal:n { - \l_@@_linewidth_dim } 
+         \skip_horizontal:N -\l_@@_linewidth_dim 
          \vcenter { \box_use_drop:N \l_@@_halign_box }
        }
 %    \end{macrocode}
@@ -5184,30 +5216,20 @@
 %    \begin{macrocode}
     \dim_gzero_new:N \g_@@_right_x_dim 
     \dim_gset_eq:NN \g_@@_right_x_dim \c_max_dim
-%<*LaTeX>
-    \begin { tikzpicture } [ @@_standard ]
-%</LaTeX>
-%<*plain-TeX>
-    \tikzpicture [ @@_standard ]
-%</plain-TeX>
+    \pgfpicture
+      \pgfrememberpicturepositiononpagetrue
       \int_step_variable:nNn \g_@@_line_int \l_tmpa_int
         { 
           \cs_if_free:cTF 
-            { pgf at sh@ns at wa - \l_@@_prefix_str - \l_tmpa_int - v }
+            { pgf @ sh @ ns @ wa - \l_@@_prefix_str - \l_tmpa_int - v }
             { \@@_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 } 
+              \pgfpointanchor { wa - \l_@@_prefix_str - \l_tmpa_int - v } { center }
+              \dim_compare:nNnT \pgf at x < \g_@@_right_x_dim
+                { \dim_gset_eq:NN \g_@@_right_x_dim \pgf at x } 
             } 
         }
-%<*LaTeX>
-    \end { tikzpicture } 
-%</LaTeX>
-%<*plain-TeX>
-    \endtikzpicture
-%</plain-TeX>
+    \endpgfpicture
 %    \end{macrocode}
 % 
 %
@@ -5515,7 +5537,7 @@
 % We begin a loop over all the arrows of the environment. Inside this loop, if a
 % group is finished, we will draw the arrows of that group.
 %    \begin{macrocode}
-    \int_set:Nn \l_@@_arrow_int \c_one_int
+    \int_set:Nn \l_@@_arrow_int 1
     \int_until_do:nNnn \l_@@_arrow_int > \g_@@_arrow_int
       { 
 %    \end{macrocode}
@@ -5572,12 +5594,9 @@
 % situation occurs when all the arrows of the potential group arrive after the
 % last line of the environment).
 %    \begin{macrocode}
-    \bool_if:nT
-      { 
-        \int_compare_p:n { \l_@@_pos_arrow_int != 7 } 
-          &&
-        \int_compare_p:nNn \l_@@_first_arrow_of_group_int > 0 
-      }
+    \bool_lazy_and:nnT
+      { \bool_not_p:n { \int_compare_p:nNn \l_@@_pos_arrow_int = 7 } }
+      { \int_compare_p:nNn \l_@@_first_arrow_of_group_int > 0 }
       { \@@_draw_arrows:nn \l_@@_first_arrow_of_group_int \g_@@_arrow_int }
   }
 %    \end{macrocode}
@@ -5592,16 +5611,19 @@
 % the option |group| and in the first step of treatment (|\l_@@_pos_arrow_int| =
 % 7). 
 %    \begin{macrocode}
-    \bool_if:nT 
+    \bool_lazy_and:nnT 
+      { \int_compare_p:nNn \l_@@_arrow_int > 1 }
       { 
-        \int_compare_p:nNn \l_@@_arrow_int > \c_one_int
-        && 
-       ( \int_compare_p:n { \l_@@_initial_int > \l_@@_last_line_of_group_int }
-           &&
-         \int_compare_p:n { \l_@@_pos_arrow_int != 7 }
-           ||
-         \str_if_eq_p:Vn \l_@@_status_arrow_str { new-group }
-       ) 
+        \bool_lazy_or_p:nn
+          {
+            \bool_lazy_and_p:nn
+              { 
+                \int_compare_p:nNn 
+                  \l_@@_initial_int > \l_@@_last_line_of_group_int
+              } 
+              { \bool_not_p:n { \int_compare_p:nNn \l_@@_pos_arrow_int = 7 } }
+          }
+          { \str_if_eq_p:Vn \l_@@_status_arrow_str { new-group } }
       }
       { 
         \int_compare:nNnF \l_@@_first_arrow_of_group_int = \c_zero_int
@@ -5643,7 +5665,7 @@
 % to use the same value of |\l_@@_x_dim| (computed during the first step) for
 % all the groups.
 %    \begin{macrocode}
-        \int_compare:nT { \l_@@_pos_arrow_int != 8 }
+        \int_compare:nNnF \l_@@_pos_arrow_int = 8 
           { \dim_set:Nn \l_@@_x_dim { - \c_max_dim } }
       }
 %    \end{macrocode}
@@ -5690,7 +5712,7 @@
 %    \begin{macrocode}
     \bool_if:nF { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } }
       { 
-        \int_compare:nT { \l_@@_pos_arrow_int != 8 }
+        \int_compare:nNnF \l_@@_pos_arrow_int = 8 
           { \@@_update_x:nn \l_@@_initial_int \l_@@_final_int }
       } 
   }
@@ -5837,12 +5859,9 @@
 % $x$-value --- but always the same $y$-value). Idem for |\l_@@_final_tl|.
 %    \begin{macrocode}
     \tl_set:Nx \l_@@_initial_tl 
-      { 
-        \int_use:N \l_@@_initial_int - \bool_if:NTF \l_@@_initial_r_bool rl 
-        .south 
-      } 
+      { \int_use:N \l_@@_initial_int - \bool_if:NTF \l_@@_initial_r_bool rl } 
     \tl_set:Nx \l_@@_final_tl 
-      { \int_use:N \l_@@_final_int - \bool_if:NTF \l_@@_final_r_bool rl .north }
+      { \int_use:N \l_@@_final_int - \bool_if:NTF \l_@@_final_r_bool rl }
 %    \end{macrocode}
 % We use ``|.south|'' and ``|.north|'' because we want a small gap between two
 % consecutive arrows (and the Tikz nodes created have the shape of small
@@ -5864,7 +5883,7 @@
 % first line of the group and in |\l_@@_last_arrows_seq| the list of
 % all the arrows ending at the last line of the group. We compute these values
 % in the booleans |\l_tmpa_bool| and |\l_tmpb_bool|. These computations can't be
-% done in the following |{tikzpicture}| because the command |\seq_if_in:NnTF|
+% done in the following |{tikzpicture}| because of the command |\seq_if_in:NnTF|
 % which is \emph{not} expandable.
 %    \begin{macrocode}
     \seq_if_in:NxTF \l_@@_first_arrows_seq 
@@ -5900,30 +5919,21 @@
     \dim_gzero_new:N \g_@@_x_final_dim
     \dim_gzero_new:N \g_@@_y_initial_dim
     \dim_gzero_new:N \g_@@_y_final_dim
-%<*LaTeX>
-    \begin { tikzpicture } [ @@_standard ]
-%</LaTeX>
-%<*plain-TeX>
-    \tikzpicture [ @@_standard ]
-%</plain-TeX>
-      \tikz at scan@one at point \pgfutil at firstofone ( \l_@@_initial_tl )
+    \pgfpicture
+      \pgfrememberpicturepositiononpagetrue
+      \pgfpointanchor { wa - \l_@@_prefix_str - \l_@@_initial_tl } { south }
       \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 )
+      \pgfpointanchor { wa - \l_@@_prefix_str - \l_@@_final_tl } { north }
       \dim_gset:Nn \g_@@_x_final_dim \pgf at x
       \dim_gset:Nn \g_@@_y_final_dim \pgf at y
-%<*LaTeX>
-    \end { tikzpicture } 
-%</LaTeX>
-%<*plain-TeX>
-    \endtikzpicture
-%</plain-TeX>
-    \bool_if:nTF
-      { \dim_compare_p:nNn { \g_@@_y_initial_dim - \g_@@_y_final_dim }  
+    \endpgfpicture
+    \bool_lazy_and:nnTF
+      { 
+        \dim_compare_p:nNn { \g_@@_y_initial_dim - \g_@@_y_final_dim }  
                                 > \l_@@_max_length_of_arrow_dim 
-        && 
-        \int_compare_p:nNn { \l_@@_final_int - \l_@@_initial_int } = 1 
       }
+      { \int_compare_p:nNn { \l_@@_final_int - \l_@@_initial_int } = 1 }
       {
         \tl_gset:Nx \g_tmpa_tl 
           {
@@ -5933,7 +5943,7 @@
             \dim_eval:n 
               { 
                 ( \g_@@_y_initial_dim + \g_@@_y_final_dim ) / 2
-                + ( \l_@@_max_length_of_arrow_dim / 2 )
+                + 0.5 \l_@@_max_length_of_arrow_dim 
               }
           }
         \tl_gset:Nx \g_tmpb_tl 
@@ -5944,7 +5954,7 @@
             \dim_eval:n 
               { 
                 ( \g_@@_y_initial_dim + \g_@@_y_final_dim ) / 2
-                - ( \l_@@_max_length_of_arrow_dim / 2 )
+                - 0.5 \l_@@_max_length_of_arrow_dim 
               }
           } 
       }
@@ -6041,7 +6051,7 @@
 % If the option |wrap-lines| is used, we have to use a special version of
 % |\l_@@_tikz_code_tl| (which corresponds to the option |tikz-code|).
 %    \begin{macrocode}
-    \bool_if:nT { \l_@@_wrap_lines_bool && \l_@@_in_DispWithArrows_bool }
+    \bool_lazy_and:nnT \l_@@_wrap_lines_bool \l_@@_in_DispWithArrows_bool 
        { \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_wrap_lines_tl }
 %    \end{macrocode}
 % 
@@ -6068,7 +6078,7 @@
 % We retrieve in |\pgf at x| the abscissa of the left-side of the label we will
 % put.
 %    \begin{macrocode}
-    \tikz at parse@node \pgfutil at firstofone ( @@_label.west )
+    \pgfpointanchor { wa - \l_@@_prefix_str - @@_label } { west }
 %    \end{macrocode}
 % We compute in |\l_tmpa_dim| the maximal width possible for the label. 
 % Here is the use of |\g_@@_right_x_dim| which has been computed previously with
@@ -6117,24 +6127,16 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_update_x:nn #1 #2
   { 
+    \dim_gset_eq:NN \g_tmpa_dim \l_@@_x_dim
+    \pgfpicture
+    \pgfrememberpicturepositiononpagetrue
     \int_step_inline:nnn { #1 } { #2 } 
       { 
-%<*LaTeX>
-        \begin { tikzpicture } [ @@_standard ]
-%</LaTeX>
-%<*plain-TeX>
-        \tikzpicture [ @@_standard ]
-%</plain-TeX>
-          \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 }
-%<*LaTeX>
-        \end { tikzpicture }
-%</LaTeX>
-%<*plain-TeX>
-        \endtikzpicture
-%</plain-TeX>
-        \dim_set_eq:NN \l_@@_x_dim \g_tmpa_dim 
+        \pgfpointanchor { wa - \l_@@_prefix_str - ##1 - l } { center }
+        \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \g_tmpa_dim \pgf at x }
       } 
+    \endpgfpicture
+    \dim_set_eq:NN \l_@@_x_dim \g_tmpa_dim 
   } 
 %    \end{macrocode}
 %
@@ -6146,7 +6148,13 @@
 % level~$0$ (to the sense of the nested environments). This macro is fully
 % expandable and, thus, can be used directly in the name of a Tikz node.
 %    \begin{macrocode}
-\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g_@@_last_env_int }
+%<*LaTeX>
+\NewExpandableDocumentCommand \WithArrowsLastEnv { } 
+  { \int_use:N \g_@@_last_env_int }
+%</LaTeX>
+%<*plain-TeX>
+\cs_new:Npn \WithArrowsLastEnv   { \int_use:N \g_@@_last_env_int }
+%</plain-TeX>
 %    \end{macrocode}
 %
 % \bigskip
@@ -6249,16 +6257,14 @@
                 { 
                   \int_compare:nNnTF \l_@@_pos_arrow_int = 4
                     {
-%<*LaTeX>
-                      \begin { tikzpicture } [ @@_standard ]
-%</LaTeX>
-%<*plain-TeX>
-                      \tikzpicture [ @@_standard ]
-%</plain-TeX>
-                        \tikz at scan@one at point \pgfutil at firstofone (#2-l.south)
+                      \pgfpicture
+                        \pgfrememberpicturepositiononpagetrue
+                        \pgfpointanchor { wa - \l_@@_prefix_str - #2 - l } 
+                          { south }
                         \dim_set_eq:NN \l_tmpa_dim \pgf at x
                         \dim_set_eq:NN \l_tmpb_dim \pgf at y
-                        \tikz at scan@one at point \pgfutil at firstofone (#3-l.north)
+                        \pgfpointanchor { wa - \l_@@_prefix_str - #3 - l }
+                          { north }
                         \dim_set:Nn \l_tmpa_dim 
                           { \dim_max:nn \l_tmpa_dim \pgf at x }
                         \tl_gset:Nx \g_tmpa_tl 
@@ -6265,34 +6271,28 @@
                           { \dim_use:N \l_tmpa_dim , \dim_use:N \l_tmpb_dim } 
                         \tl_gset:Nx \g_tmpb_tl 
                           { \dim_use:N \l_tmpa_dim , \dim_use:N \pgf at y } 
-%<*LaTeX>
-                      \end { tikzpicture } 
-%</LaTeX>
-%<*plain-TeX>
-                      \endtikzpicture
-%</plain-TeX>
+                      \endpgfpicture
                     }
                     { 
-%<*LaTeX>
-                      \begin { tikzpicture } [ @@_standard ]
-%</LaTeX>
-%<*plain-TeX>
-                      \tikzpicture [ @@_standard ]
-%</plain-TeX>
-                        \tikz at scan@one at point \pgfutil at firstofone
-                           ( #2-\bool_if:NTF\l_@@_initial_r_bool rl .south )
+                      \pgfpicture
+                        \pgfrememberpicturepositiononpagetrue
+                        \pgfpointanchor
+                          { 
+                            wa - \l_@@_prefix_str -
+                            #2 - \bool_if:NTF \l_@@_initial_r_bool r l  
+                          }
+                          { 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 )
+                          { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
+                        \pgfpointanchor
+                          {
+                            wa - \l_@@_prefix_str - 
+                            #3 - \bool_if:NTF \l_@@_final_r_bool r l 
+                          }
+                          { north }
                         \tl_gset:Nx \g_tmpb_tl 
-                           { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
-%<*LaTeX>
-                      \end { tikzpicture } 
-%</LaTeX>
-%<*plain-TeX>
-                      \endtikzpicture
-%</plain-TeX>
+                          { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
+                      \endpgfpicture
                     }
                   \@@_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 } 
                 } 
@@ -6394,11 +6394,12 @@
                       -- 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)
+
+          \pgfpointanchor { wa - \l_@@_prefix_str - @@_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_lazy_and:nnT \l_@@_wrap_lines_bool \l_@@_in_DispWithArrows_bool 
             { 
               \dim_set:Nn \l_tmpb_dim 
                 { \g_@@_right_x_dim - \pgf at x - 0.3333 em }
@@ -6408,7 +6409,7 @@
           \path (@@_label.west) 
            node [ anchor = west, text~width = \dim_use:N \l_tmpa_dim ] { #2 } ;
 %<*LaTeX>
-        \end{tikzpicture} 
+        \end { tikzpicture } 
 %</LaTeX>
 %<*plain-TeX>
         \endtikzpicture
@@ -6459,7 +6460,7 @@
 %<*LaTeX>
 \@@_msg_new:nn { amsmath~not~loaded }
   {
-    You~can't~use~the~option~'\l_keys_key_tl'~because~the~
+    You~can't~use~the~option~'\l_keys_key_str'~because~the~
     package~'amsmath'~has~not~been~loaded.\\
     If~you~go~on,~this~option~will~be~ignored~in~the~rest~
     of~the~document.
@@ -6470,7 +6471,7 @@
 %    \begin{macrocode}
 \@@_msg_new:nn { Bad~value~for~replace~brace~by }
   {
-    Bad~value~for~the~option~'\l_keys_key_tl'.~The~value~must~begin~ 
+    Bad~value~for~the~option~'\l_keys_key_str'.~The~value~must~begin~ 
     with~an~extensible~left~delimiter.~The~possible~values~are:~.,
     \token_to_str:N \{,~(,~[,~\token_to_str:N \lbrace,~
     \token_to_str:N \lbrack,~\token_to_str:N \lgroup,~
@@ -6526,7 +6527,7 @@
 %    \begin{macrocode}
 \@@_msg_new:nn { Value~for~a~key }
   {
-    The~key~'\l_keys_key_tl'~should~be~used~without~value. \\
+    The~key~'\l_keys_key_str'~should~be~used~without~value. \\
     However,~you~can~go~on~for~this~time.
   }
 %    \end{macrocode}
@@ -6534,7 +6535,7 @@
 %    \begin{macrocode}          
 \@@_msg_new:nnn { Unknown~option~in~Arrow }
   { 
-    The~key~'\l_keys_key_tl'~is~unknown~for~the~command~
+    The~key~'\l_keys_key_str'~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 \\
@@ -6551,7 +6552,7 @@
 %    \begin{macrocode}          
 \@@_msg_new:nnn { Unknown~option~WithArrows }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\
+    The~key~'\l_keys_key_str'~is~unknown~in~\{\l_@@_type_env_str\}. \\
     \c_@@_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
   }
@@ -6564,7 +6565,7 @@
 %    \begin{macrocode}          
 \@@_msg_new:nnn { Unknown~option~DispWithArrows }
   { 
-    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\
+    The~key~'\l_keys_key_str'~is~unknown~in~\{\l_@@_type_env_str\}. \\
     \c_@@_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
   }
@@ -6577,7 +6578,7 @@
 %    \begin{macrocode}          
 \@@_msg_new:nnn { Unknown~option~WithArrowsOptions }
   { 
-    The~key~'\l_keys_key_tl'~is~unknown~in~
+    The~key~'\l_keys_key_str'~is~unknown~in~
     \token_to_str:N \WithArrowsOptions. \\
     \c_@@_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>. 
@@ -6591,7 +6592,7 @@
 %    \begin{macrocode}
 \@@_msg_new:nnn { Unknown~option~Arrow~in~code-after }
   { 
-    The~key~'\l_keys_key_tl'~is~unknown~in~
+    The~key~'\l_keys_key_str'~is~unknown~in~
     \token_to_str:N \Arrow\ in~code-after. \\
     \c_@@_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
@@ -6683,7 +6684,7 @@
 %    \begin{macrocode}
 \@@_msg_new:nn { Incompatible~options~in~Arrow }
   { 
-    You~try~to~use~the~option~'\l_keys_key_tl'~but~
+    You~try~to~use~the~option~'\l_keys_key_str'~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. \\
@@ -6694,7 +6695,7 @@
 %
 %    \begin{macrocode}          
 \@@_msg_new:nn { Incompatible~options }
-  { You~try~to~use~the~option~'\l_keys_key_tl'~but~
+  { You~try~to~use~the~option~'\l_keys_key_str'~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
@@ -6909,7 +6910,7 @@
         \group_begin:
           \msg_set:nnn { witharrows } { Unknown~option~WithArrowsOptions }
             {
-              The~key~'\l_keys_key_tl'~can't~be~set~in~the~
+              The~key~'\l_keys_key_str'~can't~be~set~in~the~
               definition~of~a~style.~You~can~go~on~for~this~time~
               but~you~should~suppress~this~key. 
             }
@@ -6974,7 +6975,7 @@
 %    \begin{macrocode}
 \@@_msg_new:nn { Option~unknown~for~up-and-down } 
   { 
-    The~option~'\l_keys_key_tl'~is~unknown.~\c_@@_option_ignored_str
+    The~option~'\l_keys_key_str'~is~unknown.~\c_@@_option_ignored_str
   }
 %    \end{macrocode}
 % 
@@ -7233,7 +7234,7 @@
               \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
+                  \int_set:Nn \l_@@_pos_arrow_int 1
 %    \end{macrocode}
 % We have to set |\l_@@_wrap_lines_bool| to |false| because, otherwise, if the
 % option |wrap_lines| is used at a higher level (global or environment), we will
@@ -7262,7 +7263,7 @@
               \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
+                  \int_set:Nn \l_@@_pos_arrow_int 1
                   \bool_set_false:N \l_@@_wrap_lines_bool
                   \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_down_tl 
                 }
@@ -7285,7 +7286,7 @@
 %    \begin{macrocode}
 \@@_msg_new:nn { varwidth~not~loaded } 
   {
-    You~can't~use~the~option~'\l_keys_key_tl'~because~
+    You~can't~use~the~option~'\l_keys_key_str'~because~
     you~don't~have~loaded~the~package~'varwidth'. \\
     \c_@@_option_ignored_str
   }
@@ -7294,7 +7295,7 @@
 %    \begin{macrocode}
 \@@_msg_new:nn { calc~not~loaded }
   { 
-    You~can't~use~the~option~'\l_keys_key_tl'~because~you~don't~have~loaded~the~
+    You~can't~use~the~option~'\l_keys_key_str'~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
@@ -7503,7 +7504,12 @@
 % 
 % Two options for the arrows of type |up| and |down|: |width| and |radius|.
 %
+% \subsection*{Changes between 2.3 and 2.4}
+% 
+% Correction of a bug with |{DispWithArrows}| : cf. question 535989 on |TeX StackExchange|.
 %
+%
+%
 % \PrintIndex
 %
 % \tableofcontents
@@ -7513,5 +7519,5 @@
 % TeX-fold-mode: t
 % TeX-fold-preserve-comments: nil
 % fill-column: 80
-% ispell-local-dictionary: english
+% flyspell-mode: nil
 % End:

Modified: trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.sty	2020-04-12 22:27:38 UTC (rev 54706)
+++ trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.sty	2020-04-12 22:27:59 UTC (rev 54707)
@@ -18,10 +18,10 @@
 %% and version 1.3 or later is part of all distributions of
 %% LaTeX version 2005/12/01 or later.
 %% 
-\def\myfileversion{2.3}
-\def\myfiledate{2019/12/27}
+\def\myfileversion{2.4}
+\def\myfiledate{2020/03/31}
 \RequirePackage{tikz}
-\RequirePackage{expl3}[2019/07/01]
+\RequirePackage{expl3}[2020/02/08]
 \usetikzlibrary{arrows.meta,bending}
 \RequirePackage{l3keys2e}
 \ProvidesExplPackage
@@ -29,6 +29,14 @@
   {\myfiledate}
   {\myfileversion}
   {Draws arrows for explanations on the right}
+\msg_new:nnn { witharrows } { expl3~too~old }
+  {
+    Your~version~of~LaTeX~(especially~expl3)~is~too~old.~
+    You~can~go~on~but~you~will~probably~have~other~errors~
+    if~you~use~the~functionalities~of~witharrows.
+  }
+\cs_if_exist:NF \l_keys_key_str
+  { \msg_error:nn { witharrows } { expl3~too~old } }
 \RequirePackage { xparse } [ 2019-01-01 ]
 \bool_new:N \g__witharrows_footnotehyper_bool
 \bool_new:N \g__witharrows_footnote_bool
@@ -50,7 +58,7 @@
   }
 \__witharrows_msg_new:nn { Option~unknown~for~package }
   {
-    You~can't~use~the~option~'\l_keys_key_tl'~when~loading~the~
+    You~can't~use~the~option~'\l_keys_key_str'~when~loading~the~
     package~witharrows.~Try~to~use~the~command~
     \token_to_str:N\WithArrowsOptions.
   }
@@ -57,7 +65,7 @@
 \ProcessKeysOptions { WithArrows / package }
 \__witharrows_msg_new:nn { Option~incompatible~with~Beamer }
   {
-    The~option~'\l_keys_key_tl'\ is~incompatible~
+    The~option~'\l_keys_key_str'\ is~incompatible~
     with~Beamer~because~Beamer~has~its~own~system~to~extract~footnotes.
   }
 \__witharrows_msg_new:nn { footnote~with~footnotehyper~package }
@@ -286,7 +294,7 @@
   {
     \str_if_empty:NTF \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
         #1
       }
       { \__witharrows_error:n { Incompatible~options } }
@@ -300,18 +308,21 @@
     max-length-of-arrow .initial:n = 2 cm ,
     ygap .dim_set:N = \l__witharrows_ygap_dim ,
     ygap .initial:n = 0.4 ex ,
+    ygap .value_required:n = true ,
     ystart .dim_set:N = \l__witharrows_ystart_dim ,
-
+    ystart .value_required:n = true ,
     ystart .initial:n = 0.4 ex ,
     more-columns .code:n =
       \__witharrows_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } ,
+    more-columns .value_forbidden:n = true ,
     command-name .code:n =
       \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__witharrows_tikz_code_tl,
     tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
-    TikzCode .meta:n = { tikz-code = #1 } ,
+    tikz-code .value_required:n = true ,
     displaystyle .bool_set:N = \l__witharrows_displaystyle_bool ,
     displaystyle .default:n = true ,
     show-nodes .code:n =
@@ -326,6 +337,7 @@
           \int_set:Nn \l__witharrows_pos_arrow_int 7
         }
         { \__witharrows_error:n { Incompatible~options } } ,
+    group  .value_forbidden:n = true ,
     groups .code:n =
       \str_if_empty:NTF \l__witharrows_previous_key_str
         {
@@ -336,32 +348,49 @@
           \int_set:Nn \l__witharrows_pos_arrow_int 6
         }
         { \__witharrows_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     .code:n            = \__witharrows_fix_pos_option:n 3 ,
+    rr     .value_forbidden:n = true ,
     ll     .code:n            = \__witharrows_fix_pos_option:n 1 ,
+    ll     .value_forbidden:n = true ,
     rl     .code:n            = \__witharrows_fix_pos_option:n 2 ,
+    rl     .value_forbidden:n = true ,
     lr     .code:n            = \__witharrows_fix_pos_option:n 0 ,
+    lr     .value_forbidden:n = true ,
     i      .code:n            = \__witharrows_fix_pos_option:n 5 ,
+    i      .value_forbidden:n = true ,
     xoffset .dim_set:N  = \l__witharrows_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__witharrows_interline_skip ,
     start-adjust .dim_set:N = \l__witharrows_start_adjust_dim ,
     start-adjust .initial:n = 0.4 ex ,
+    start-adjust .value_required:n = true ,
     end-adjust .dim_set:N = \l__witharrows_end_adjust_dim ,
     end-adjust .initial:n = 0.4 ex ,
+    end-adjust .value_required:n = true ,
     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 } ,
+    up-and-down .value_required:n = true ,
     no-arrows .code:n =
       \cs_set_eq:NN \__witharrows_draw_arrows:nn \use_none:nn
       \cs_set_eq:NN \__witharrows_draw_arrow:nnn \use_none:nnn  ,
+    no-arrows .value_forbidden:n = true
   }
 \keys_define:nn { WithArrows / WithArrowsSpecific }
   {
     t   .code:n            = \int_set:Nn \l__witharrows_pos_env_int O ,
+    t   .value_forbidden:n = true ,
     c   .code:n            = \int_set:Nn \l__witharrows_pos_env_int 1 ,
+    c   .value_forbidden:n = true ,
     b   .code:n            = \int_set:Nn \l__witharrows_pos_env_int 2 ,
+    b   .value_forbidden:n = true
   }
 \clist_new:N \c__witharrows_extensible_delimiters_clist
 \clist_set:Nn \c__witharrows_extensible_delimiters_clist
@@ -370,8 +399,9 @@
   }
 \AtBeginDocument
   {
-    \bool_if:nT
-      { \c__witharrows_amsmath_loaded_bool || \use:c { c__witharrows_unicode-math_loaded_bool } }
+    \bool_lazy_or:nnT
+      \c__witharrows_amsmath_loaded_bool
+      { \use:c { c__witharrows_unicode-math_loaded_bool } }
       {
         \clist_put_right:Nn \c__witharrows_extensible_delimiters_clist { \lvert, \lVert }
       }
@@ -382,6 +412,7 @@
     fleqn .default:n = true ,
     mathindent .dim_set:N = \l__witharrows_mathindent_dim ,
     mathindent .initial:n = 25 pt ,
+    mathindent .value_required:n = true ,
     notag .code:n =
       \str_if_eq:nnTF { #1 } { true }
         { \clist_clear:N \l__witharrows_tags_clist }
@@ -398,16 +429,19 @@
           \group_end:
         } ,
     subequations .default:n = true ,
+    subequations .value_forbidden:n = true ,
     nonumber .meta:n = notag ,
     allow-multiple-labels .code:n =
       \__witharrows_msg_redirect_name:nn { Multiple~labels } { none } ,
+    allow-multiple-labels .value_forbidden:n = true ,
     tagged-lines .code:n =
       \clist_set:Nn \l__witharrows_tags_clist { #1 }
       \clist_if_in:NnT \l__witharrows_tags_clist { first }
         {
           \clist_remove_all:Nn \l__witharrows_tags_clist { first }
-          \clist_put_left:Nn \l__witharrows_tags_clist \c_one_int
+          \clist_put_left:Nn \l__witharrows_tags_clist 1
         } ,
+    tagged-lines .value_required:n = true ,
     wrap-lines .bool_set:N = \l__witharrows_wrap_lines_bool ,
     wrap-lines .default:n = true ,
     replace-left-brace-by .code:n =
@@ -421,7 +455,7 @@
       } ,
     replace-left-brace-by .initial:n = \lbrace ,
     standard-behaviour-with-items .bool_set:N = \l__witharrows_sbwi_bool ,
-    standard-behaviour-with-items .default:n = true ,
+    standard-behaviour-with-items .default:n = true
   }
 \keys_define:nn { WithArrows / Env }
   {
@@ -431,9 +465,12 @@
         { \__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 ,
+    name .value_required:n = true ,
     code-before .code:n = \tl_put_right:Nn \l__witharrows_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__witharrows_code_after_tl { #1 } ,
+    code-after .value_required:n = true ,
     CodeAfter .meta:n = { code-after = #1 } ,
     format .code:n =
       \tl_if_empty:nTF { #1 }
@@ -443,10 +480,7 @@
             { \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 ,
+    format .value_required:n = true
   }
 \keys_define:nn { WithArrows }
   {
@@ -539,7 +573,7 @@
   {
     \str_if_empty:NTF \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
         \str_set:Nn \l__witharrows_status_arrow_str { independent }
       }
       { \__witharrows_error:n { Incompatible~options~in~Arrow } }
@@ -579,7 +613,7 @@
     xoffset .code:n = ,
     unknown .code:n =
       \__witharrows_sort_seq:N \l__witharrows_options_Arrow_seq
-      \seq_if_in:NVTF \l__witharrows_options_WithArrows_seq \l_keys_key_tl
+      \seq_if_in:NVTF \l__witharrows_options_WithArrows_seq \l_keys_key_str
         {
           \str_set:Nn \l_tmpa_str
            { ~However,~this~key~can~be~used~in~the~options~of~{WithArrows}. }
@@ -597,7 +631,7 @@
   {
     \str_if_empty:NT \l__witharrows_previous_key_str
       {
-        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
         \int_set:Nn \l__witharrows_pos_arrow_int { #1 }
       }
   }
@@ -685,7 +719,7 @@
     \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
+    \int_set:Nn \l__witharrows_jump_int 1
     \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
@@ -704,7 +738,6 @@
     \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 \__witharrows_notag:
     \cs_set_eq:NN \nonumber \__witharrows_nonumber:
     \cs_set_eq:NN \tag \__witharrows_tag
@@ -817,6 +850,7 @@
     \fi:
     \int_case:nn \l__witharrows_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox }
     \bgroup
+    \spread at equation
     \__witharrows_construct_halign:
     &&
     \__witharrows_error:n { Too~much~columns~in~WithArrows }
@@ -943,8 +977,12 @@
               {
                 \bool_if:NF \c__witharrows_leqno_bool
                   {
-                    \tikz [ __witharrows_standard ]
-                      \coordinate ( \int_use:N \g__witharrows_line_int - v ) ;
+                    \pgfpicture
+                    \pgfrememberpicturepositiononpagetrue
+                    \pgfcoordinate
+                      { wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - v }
+                      \pgfpointorigin
+                    \endpgfpicture
                   }
                 \quad
                 \@eqnnum
@@ -951,8 +989,12 @@
               }
             \bool_if:NT \c__witharrows_leqno_bool
               {
-                \tikz [ __witharrows_standard ]
-                  \coordinate ( \int_use:N \g__witharrows_line_int - v ) ;
+                \pgfpicture
+                \pgfrememberpicturepositiononpagetrue
+                \pgfcoordinate
+                  { wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - v }
+                  \pgfpointorigin
+                \endpgfpicture
               }
           }
           {
@@ -961,8 +1003,12 @@
             \__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 ) ;
+                \pgfpicture
+                \pgfrememberpicturepositiononpagetrue
+                \pgfcoordinate
+                  { wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - v }
+                  \pgfpointorigin
+                \endpgfpicture
           }
       }
     \dim_compare:nNnT { #1 } < \c_zero_dim
@@ -972,7 +1018,8 @@
     \noalign
       {
         \dim_set:Nn \l_tmpa_dim { \dim_max:nn { #1 } \c_zero_dim }
-        \skip_vertical:n { \l_tmpa_dim + \l__witharrows_interline_skip }
+        \skip_vertical:N \l_tmpa_dim
+        \skip_vertical:N \l__witharrows_interline_skip
         \scan_stop:
       }
   }
@@ -992,6 +1039,13 @@
 \NewDocumentEnvironment { DispWithArrows } { ! d < > ! O { } }
   {
     \bool_set_true:N \l__witharrows_in_DispWithArrows_bool
+    \bool_if:NF \l__witharrows_sbwi_bool
+      {
+        \legacy_if:nT { @inlabel }
+          { \bool_set_true:N \l__witharrows_in_label_or_minipage_bool }
+        \legacy_if:nT { @minipage }
+          { \bool_set_true:N \l__witharrows_in_label_or_minipage_bool }
+      }
     \bool_if:nT \c__witharrows_mathtools_loaded_bool
       {
         \MH_if_boolean:nT { show_only_refs }
@@ -1005,15 +1059,6 @@
     \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__witharrows_in_label_or_minipage_bool
-        \fi
-        \if at minipage
-        \bool_set_true:N \l__witharrows_in_label_or_minipage_bool
-        \fi
-      }
     \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl
       {
         \hbox_set:Nn \l_tmpa_box
@@ -1065,6 +1110,7 @@
       \bool_if:NTF \l__witharrows_fleqn_bool
         \c_zero_skip
         { 0 pt plus 1000 pt minus 1000 pt }
+    \spread at equation
     \__witharrows_construct_halign:
     \tabskip = 0 pt plus 1000 pt minus 1000 pt
     &
@@ -1098,7 +1144,7 @@
          \hbox_to_wd:nn \l__witharrows_linewidth_dim
            {
             \bool_if:NTF \l__witharrows_fleqn_bool
-              { \skip_horizontal:n \l__witharrows_mathindent_dim }
+              { \skip_horizontal:N \l__witharrows_mathindent_dim }
               \hfil
             \hbox_to_wd:nn \g__witharrows_alignment_dim
               {
@@ -1120,25 +1166,25 @@
               }
             \hfil
            }
-         \skip_horizontal:n { - \l__witharrows_linewidth_dim }
+         \skip_horizontal:N -\l__witharrows_linewidth_dim
          \vcenter { \box_use_drop:N \l__witharrows_halign_box }
        }
     \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 ]
+    \pgfpicture
+      \pgfrememberpicturepositiononpagetrue
       \int_step_variable:nNn \g__witharrows_line_int \l_tmpa_int
         {
           \cs_if_free:cTF
-            { pgf at sh@ns at wa - \l__witharrows_prefix_str - \l_tmpa_int - v }
+            { pgf @ sh @ ns @ 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__witharrows_right_x_dim
-                { \dim_gset:Nn \g__witharrows_right_x_dim \l_tmpa_dim }
+              \pgfpointanchor { wa - \l__witharrows_prefix_str - \l_tmpa_int - v } { center }
+              \dim_compare:nNnT \pgf at x < \g__witharrows_right_x_dim
+                { \dim_gset_eq:NN \g__witharrows_right_x_dim \pgf at x }
             }
         }
-    \end { tikzpicture }
+    \endpgfpicture
     \__witharrows_post_halign:
     \bool_if:nT \c__witharrows_mathtools_loaded_bool
       { \MH_if_boolean:nT { show_only_refs } \MT_showonlyrefs_true: }
@@ -1255,7 +1301,7 @@
     \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_set:Nn \l__witharrows_arrow_int 1
     \int_until_do:nNnn \l__witharrows_arrow_int > \g__witharrows_arrow_int
       {
         \prop_get:cnN
@@ -1280,26 +1326,26 @@
           \__witharrows_code_for_possible_arrow:
         \int_incr:N \l__witharrows_arrow_int
       }
-    \bool_if:nT
-      {
-        \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 }
-          &&
-        \int_compare_p:nNn \l__witharrows_first_arrow_of_group_int > 0
-      }
+    \bool_lazy_and:nnT
+      { \bool_not_p:n { \int_compare_p:nNn \l__witharrows_pos_arrow_int = 7 } }
+      { \int_compare_p:nNn \l__witharrows_first_arrow_of_group_int > 0 }
       { \__witharrows_draw_arrows:nn \l__witharrows_first_arrow_of_group_int \g__witharrows_arrow_int }
   }
 \cs_new_protected:Npn \__witharrows_code_for_possible_arrow:
   {
-    \bool_if:nT
+    \bool_lazy_and:nnT
+      { \int_compare_p:nNn \l__witharrows_arrow_int > 1 }
       {
-        \int_compare_p:nNn \l__witharrows_arrow_int > \c_one_int
-        &&
-       ( \int_compare_p:n { \l__witharrows_initial_int > \l__witharrows_last_line_of_group_int }
-           &&
-         \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 }
-           ||
-         \str_if_eq_p:Vn \l__witharrows_status_arrow_str { new-group }
-       )
+        \bool_lazy_or_p:nn
+          {
+            \bool_lazy_and_p:nn
+              {
+                \int_compare_p:nNn
+                  \l__witharrows_initial_int > \l__witharrows_last_line_of_group_int
+              }
+              { \bool_not_p:n { \int_compare_p:nNn \l__witharrows_pos_arrow_int = 7 } }
+          }
+          { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { new-group } }
       }
       {
         \int_compare:nNnF \l__witharrows_first_arrow_of_group_int = \c_zero_int
@@ -1320,7 +1366,7 @@
         \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 }
+        \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
           { \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim } }
       }
       {
@@ -1344,7 +1390,7 @@
       }
     \bool_if:nF { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } }
       {
-        \int_compare:nT { \l__witharrows_pos_arrow_int != 8 }
+        \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
           { \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int }
       }
   }
@@ -1401,12 +1447,9 @@
         \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int
       }
     \tl_set:Nx \l__witharrows_initial_tl
-      {
-        \int_use:N \l__witharrows_initial_int - \bool_if:NTF \l__witharrows_initial_r_bool rl
-        .south
-      }
+      { \int_use:N \l__witharrows_initial_int - \bool_if:NTF \l__witharrows_initial_r_bool rl }
     \tl_set:Nx \l__witharrows_final_tl
-      { \int_use:N \l__witharrows_final_int - \bool_if:NTF \l__witharrows_final_r_bool rl .north }
+      { \int_use:N \l__witharrows_final_int - \bool_if:NTF \l__witharrows_final_r_bool rl }
     \prop_get:cnN
       { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
       { label }
@@ -1428,20 +1471,21 @@
     \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 )
+    \pgfpicture
+      \pgfrememberpicturepositiononpagetrue
+      \pgfpointanchor { wa - \l__witharrows_prefix_str - \l__witharrows_initial_tl } { south }
       \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 )
+      \pgfpointanchor { wa - \l__witharrows_prefix_str - \l__witharrows_final_tl } { north }
       \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__witharrows_y_initial_dim - \g__witharrows_y_final_dim }
+    \endpgfpicture
+    \bool_lazy_and:nnTF
+      {
+        \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__witharrows_final_int - \l__witharrows_initial_int } = 1
       }
+      { \int_compare_p:nNn { \l__witharrows_final_int - \l__witharrows_initial_int } = 1 }
       {
         \tl_gset:Nx \g_tmpa_tl
           {
@@ -1451,7 +1495,7 @@
             \dim_eval:n
               {
                 ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
-                + ( \l__witharrows_max_length_of_arrow_dim / 2 )
+                + 0.5 \l__witharrows_max_length_of_arrow_dim
               }
           }
         \tl_gset:Nx \g_tmpb_tl
@@ -1462,7 +1506,7 @@
             \dim_eval:n
               {
                 ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
-                - ( \l__witharrows_max_length_of_arrow_dim / 2 )
+                - 0.5 \l__witharrows_max_length_of_arrow_dim
               }
           }
       }
@@ -1504,7 +1548,7 @@
   }
 \cs_new_protected:Npn \__witharrows_draw_arrow:nnn #1 #2 #3
   {
-    \bool_if:nT { \l__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool }
+    \bool_lazy_and:nnT \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 }
@@ -1513,7 +1557,7 @@
 \tl_const:Nn \c__witharrows_tikz_code_wrap_lines_tl
   {
     \draw ( #1 ) to node ( __witharrows_label ) { } ( #2 ) ;
-    \tikz at parse@node \pgfutil at firstofone ( __witharrows_label.west )
+    \pgfpointanchor { wa - \l__witharrows_prefix_str - __witharrows_label } { west }
     \dim_set:Nn \l_tmpa_dim
       { \g__witharrows_right_x_dim - \pgf at x - \pgfkeysvalueof { / pgf / inner~xsep } }
     \path \pgfextra { \tl_gset:Nx \g_tmpa_tl \tikz at text@width } ;
@@ -1532,16 +1576,19 @@
   }
 \cs_new_protected:Npn \__witharrows_update_x:nn #1 #2
   {
+    \dim_gset_eq:NN \g_tmpa_dim \l__witharrows_x_dim
+    \pgfpicture
+    \pgfrememberpicturepositiononpagetrue
     \int_step_inline:nnn { #1 } { #2 }
       {
-        \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__witharrows_x_dim \pgf at x }
-        \end { tikzpicture }
-        \dim_set_eq:NN \l__witharrows_x_dim \g_tmpa_dim
+        \pgfpointanchor { wa - \l__witharrows_prefix_str - ##1 - l } { center }
+        \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \g_tmpa_dim \pgf at x }
       }
+    \endpgfpicture
+    \dim_set_eq:NN \l__witharrows_x_dim \g_tmpa_dim
   }
-\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g__witharrows_last_env_int }
+\NewExpandableDocumentCommand \WithArrowsLastEnv { }
+  { \int_use:N \g__witharrows_last_env_int }
 \keys_define:nn { WithArrows / Arrow / code-after }
   {
     tikz     .code:n =
@@ -1598,11 +1645,14 @@
                 {
                   \int_compare:nNnTF \l__witharrows_pos_arrow_int = 4
                     {
-                      \begin { tikzpicture } [ __witharrows_standard ]
-                        \tikz at scan@one at point \pgfutil at firstofone (#2-l.south)
+                      \pgfpicture
+                        \pgfrememberpicturepositiononpagetrue
+                        \pgfpointanchor { wa - \l__witharrows_prefix_str - #2 - l }
+                          { south }
                         \dim_set_eq:NN \l_tmpa_dim \pgf at x
                         \dim_set_eq:NN \l_tmpb_dim \pgf at y
-                        \tikz at scan@one at point \pgfutil at firstofone (#3-l.north)
+                        \pgfpointanchor { wa - \l__witharrows_prefix_str - #3 - l }
+                          { north }
                         \dim_set:Nn \l_tmpa_dim
                           { \dim_max:nn \l_tmpa_dim \pgf at x }
                         \tl_gset:Nx \g_tmpa_tl
@@ -1609,19 +1659,28 @@
                           { \dim_use:N \l_tmpa_dim , \dim_use:N \l_tmpb_dim }
                         \tl_gset:Nx \g_tmpb_tl
                           { \dim_use:N \l_tmpa_dim , \dim_use:N \pgf at y }
-                      \end { tikzpicture }
+                      \endpgfpicture
                     }
                     {
-                      \begin { tikzpicture } [ __witharrows_standard ]
-                        \tikz at scan@one at point \pgfutil at firstofone
-                           ( #2-\bool_if:NTF\l__witharrows_initial_r_bool rl .south )
+                      \pgfpicture
+                        \pgfrememberpicturepositiononpagetrue
+                        \pgfpointanchor
+                          {
+                            wa - \l__witharrows_prefix_str -
+                            #2 - \bool_if:NTF \l__witharrows_initial_r_bool r l
+                          }
+                          { 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__witharrows_final_r_bool rl .north )
+                          { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
+                        \pgfpointanchor
+                          {
+                            wa - \l__witharrows_prefix_str -
+                            #3 - \bool_if:NTF \l__witharrows_final_r_bool r l
+                          }
+                          { north }
                         \tl_gset:Nx \g_tmpb_tl
-                           { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
-                      \end { tikzpicture }
+                          { \dim_use:N \pgf at x , \dim_use:N \pgf at y }
+                      \endpgfpicture
                     }
                   \__witharrows_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 }
                 }
@@ -1669,11 +1728,12 @@
                       -- 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)
+
+          \pgfpointanchor { wa - \l__witharrows_prefix_str - __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__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool }
+          \bool_lazy_and:nnT \l__witharrows_wrap_lines_bool \l__witharrows_in_DispWithArrows_bool
             {
               \dim_set:Nn \l_tmpb_dim
                 { \g__witharrows_right_x_dim - \pgf at x - 0.3333 em }
@@ -1682,7 +1742,7 @@
             }
           \path (__witharrows_label.west)
            node [ anchor = west, text~width = \dim_use:N \l_tmpa_dim ] { #2 } ;
-        \end{tikzpicture}
+        \end { tikzpicture }
       }
   }
 \cs_new_protected:Npn \__witharrows_MultiArrow_i:n #1
@@ -1705,7 +1765,7 @@
   { If~you~go~on,~this~command~will~be~ignored. }
 \__witharrows_msg_new:nn { amsmath~not~loaded }
   {
-    You~can't~use~the~option~'\l_keys_key_tl'~because~the~
+    You~can't~use~the~option~'\l_keys_key_str'~because~the~
     package~'amsmath'~has~not~been~loaded.\\
     If~you~go~on,~this~option~will~be~ignored~in~the~rest~
     of~the~document.
@@ -1712,7 +1772,7 @@
   }
 \__witharrows_msg_new:nn { Bad~value~for~replace~brace~by }
   {
-    Bad~value~for~the~option~'\l_keys_key_tl'.~The~value~must~begin~
+    Bad~value~for~the~option~'\l_keys_key_str'.~The~value~must~begin~
     with~an~extensible~left~delimiter.~The~possible~values~are:~.,
     \token_to_str:N \{,~(,~[,~\token_to_str:N \lbrace,~
     \token_to_str:N \lbrack,~\token_to_str:N \lgroup,~
@@ -1751,12 +1811,12 @@
   }
 \__witharrows_msg_new:nn { Value~for~a~key }
   {
-    The~key~'\l_keys_key_tl'~should~be~used~without~value. \\
+    The~key~'\l_keys_key_str'~should~be~used~without~value. \\
     However,~you~can~go~on~for~this~time.
   }
 \__witharrows_msg_new:nnn { Unknown~option~in~Arrow }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~for~the~command~
+    The~key~'\l_keys_key_str'~is~unknown~for~the~command~
     \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 \\
@@ -1769,7 +1829,7 @@
   }
 \__witharrows_msg_new:nnn { Unknown~option~WithArrows }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
+    The~key~'\l_keys_key_str'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
     \c__witharrows_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
   }
@@ -1779,7 +1839,7 @@
   }
 \__witharrows_msg_new:nnn { Unknown~option~DispWithArrows }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
+    The~key~'\l_keys_key_str'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
     \c__witharrows_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
   }
@@ -1789,7 +1849,7 @@
   }
 \__witharrows_msg_new:nnn { Unknown~option~WithArrowsOptions }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~
+    The~key~'\l_keys_key_str'~is~unknown~in~
     \token_to_str:N \WithArrowsOptions. \\
     \c__witharrows_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
@@ -1800,7 +1860,7 @@
   }
 \__witharrows_msg_new:nnn { Unknown~option~Arrow~in~code-after }
   {
-    The~key~'\l_keys_key_tl'~is~unknown~in~
+    The~key~'\l_keys_key_str'~is~unknown~in~
     \token_to_str:N \Arrow\ in~code-after. \\
     \c__witharrows_option_ignored_str \\
     For~a~list~of~the~available~keys,~type~H~<return>.
@@ -1866,7 +1926,7 @@
   }
 \__witharrows_msg_new:nn { Incompatible~options~in~Arrow }
   {
-    You~try~to~use~the~option~'\l_keys_key_tl'~but~
+    You~try~to~use~the~option~'\l_keys_key_str'~but~
     this~option~is~incompatible~or~redundant~with~the~option~
     '\l__witharrows_previous_key_str'~set~in~the~same~command~
     \l__witharrows_string_Arrow_for_msg_str. \\
@@ -1873,7 +1933,7 @@
     \c__witharrows_option_ignored_str
   }
 \__witharrows_msg_new:nn { Incompatible~options }
-  { You~try~to~use~the~option~'\l_keys_key_tl'~but~
+  { You~try~to~use~the~option~'\l_keys_key_str'~but~
     this~option~is~incompatible~or~redundant~with~the~option~
     '\l__witharrows_previous_key_str'~set~in~the~same~command~
     \bool_if:NT \l__witharrows_in_code_after_bool
@@ -2013,7 +2073,7 @@
         \group_begin:
           \msg_set:nnn { witharrows } { Unknown~option~WithArrowsOptions }
             {
-              The~key~'\l_keys_key_tl'~can't~be~set~in~the~
+              The~key~'\l_keys_key_str'~can't~be~set~in~the~
               definition~of~a~style.~You~can~go~on~for~this~time~
               but~you~should~suppress~this~key.
             }
@@ -2043,7 +2103,7 @@
   }
 \__witharrows_msg_new:nn { Option~unknown~for~up-and-down }
   {
-    The~option~'\l_keys_key_tl'~is~unknown.~\c__witharrows_option_ignored_str
+    The~option~'\l_keys_key_str'~is~unknown.~\c__witharrows_option_ignored_str
   }
 \tl_const:Nn \c__witharrows_tikz_code_up_tl
   {
@@ -2157,7 +2217,7 @@
               \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__witharrows_pos_arrow_int \c_one_int
+                  \int_set:Nn \l__witharrows_pos_arrow_int 1
                   \bool_set_false:N \l__witharrows_wrap_lines_bool
                   \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_up_tl
                 }
@@ -2174,7 +2234,7 @@
               \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__witharrows_pos_arrow_int \c_one_int
+                  \int_set:Nn \l__witharrows_pos_arrow_int 1
                   \bool_set_false:N \l__witharrows_wrap_lines_bool
                   \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_down_tl
                 }
@@ -2187,13 +2247,13 @@
 \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~can't~use~the~option~'\l_keys_key_str'~because~
     you~don't~have~loaded~the~package~'varwidth'. \\
     \c__witharrows_option_ignored_str
   }
 \__witharrows_msg_new:nn { calc~not~loaded }
   {
-    You~can't~use~the~option~'\l_keys_key_tl'~because~you~don't~have~loaded~the~
+    You~can't~use~the~option~'\l_keys_key_str'~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__witharrows_option_ignored_str



More information about the tex-live-commits mailing list.