texlive[69995] Master: witharrows.tex in runtime, Pablo L report, 19

commits+karl at tug.org commits+karl at tug.org
Mon Feb 19 22:38:09 CET 2024


Revision: 69995
          https://tug.org/svn/texlive?view=revision&revision=69995
Author:   karl
Date:     2024-02-19 22:38:09 +0100 (Mon, 19 Feb 2024)
Log Message:
-----------
witharrows.tex in runtime, Pablo L report, 19 Feb 2024 13:03:16

Modified Paths:
--------------
    trunk/Master/tlpkg/libexec/ctan2tds

Added Paths:
-----------
    trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.tex

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/generic/witharrows/witharrows.tex

Deleted: trunk/Master/texmf-dist/doc/generic/witharrows/witharrows.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/witharrows/witharrows.tex	2024-02-19 21:35:59 UTC (rev 69994)
+++ trunk/Master/texmf-dist/doc/generic/witharrows/witharrows.tex	2024-02-19 21:38:09 UTC (rev 69995)
@@ -1,2156 +0,0 @@
-%%
-%% This is file `witharrows.tex',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% witharrows.dtx  (with options: `plain-TeX')
-%% 
-%% Copyright (C) 2017-2023 by F. Pantigny
-%% 
-%% This file may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either
-%% version 1.3 of this license or (at your option) any later
-%% version.  The latest version of this license is in:
-%% 
-%%      http://www.latex-project.org/lppl.txt
-%% 
-%% and version 1.3 or later is part of all distributions of
-%% LaTeX version 2005/12/01 or later.
-%% 
-\def\myfileversion{2.8b}
-\def\myfiledate{2023/08/24}
-\input tikz.tex
-\input expl3-generic.tex
-\usetikzlibrary{arrows.meta}
-\usepgfmodule{bending} % https://texnique.fr/osqa/questions/12199
-\ExplSyntaxOn
-\catcode `\@ = 11
-\cs_new_protected:Npn \__witharrows_msg_new:nn { \msg_new:nnn { witharrows } }
-\cs_new_protected:Npn \__witharrows_msg_new:nnn #1 #2 #3
-  {
-    \bool_if:NTF \c__witharrows_messages_for_Overleaf_bool
-      { \msg_new:nnn { witharrows } { #1 } { #2 \\ #3 } }
-      { \msg_new:nnnn { witharrows } { #1 } { #2 } { #3 } }
-  }
-\cs_new_protected:Npn \__witharrows_msg_redirect_name:nn
-  { \msg_redirect_name:nnn { witharrows } }
-\cs_new_protected:Npn \__witharrows_error:n { \msg_error:nn { witharrows } }
-\cs_new_protected:Npn \__witharrows_warning:n { \msg_warning:nn { witharrows } }
-\cs_new_protected:Npn \__witharrows_fatal:n { \msg_fatal:nn { witharrows } }
-\cs_new_protected:Npn \__witharrows_error:nn  { \msg_error:nnn { witharrows } }
-\cs_generate_variant:Nn \__witharrows_error:nn { n x }
-\cs_new_protected:Npn \__witharrows_error_or_warning:n
-  { \bool_if:NTF \c__witharrows_messages_for_Overleaf_bool \__witharrows_warning:n \__witharrows_error:n }
-\bool_set:Nn \c__witharrows_messages_for_Overleaf_bool
-  {
-       \str_if_eq_p:Vn \c_sys_jobname_str { _region_ }  % for Emacs
-    || \str_if_eq_p:Vn \c_sys_jobname_str { output }   % for Overleaf
-  }
-\cs_generate_variant:Nn \seq_set_split:Nnn { N x x }
-\cs_new_protected:Npn \__witharrows_sort_seq:N #1
-  {
-    \seq_sort:Nn #1
-      {
-        \str_compare:eNeTF
-          { \str_lowercase:n { ##1 } } < { \str_lowercase:n { ##2 } }
-          \sort_return_same:
-          \sort_return_swapped:
-      }
-  }
-\cs_new_protected:Npn \__witharrows_set_seq_of_str_from_clist:Nn #1 #2
-  {
-    \seq_set_from_clist:Nn #1 { #2 }
-    \seq_set_map_x:NNn #1 #1 { \tl_to_str:n { ##1 } }
-  }
-\cs_new_protected:Npn \__witharrows_save:N #1
-  {
-    \seq_set_split:Nxx \l_tmpa_seq
-       { \char_generate:nn { `_ } { 12 } }
-       { \cs_to_str:N #1 }
-    \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
-    \str_set:Nx \l_tmpa_str { \seq_item:Nn \l_tmpa_seq { -1 } }
-    \use:c { \l_tmpa_str _if_exist:cF }
-      { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ }
-      {
-        \use:c { \l_tmpa_str _new:c }
-          { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ }
-      }
-    \use:c { \l_tmpa_str _gset_eq:cN }
-      { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ } #1
-  }
-\cs_new_protected:Npn \__witharrows_restore:N #1
-  {
-    \seq_set_split:Nxx \l_tmpa_seq
-      { \char_generate:nn { `_ } { 12 } }
-      { \cs_to_str:N #1 }
-    \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
-    \str_set:Nx \l_tmpa_str { \seq_item:Nn \l_tmpa_seq { -1 } }
-    \use:c { \l_tmpa_str _set_eq:Nc }
-      #1 { g_\seq_use:Nnnn \l_tmpa_seq _ _ _ }
-  }
-\tikzset
-  {
-    __witharrows_node_style / .style =
-      {
-        above = \l__witharrows_ystart_dim ,
-        inner~sep = \c_zero_dim ,
-        minimum~width = \c_zero_dim ,
-        minimum~height = \l__witharrows_ygap_dim
-      }
-  }
-\tikzset
-  {
-    __witharrows_standard / .style =
-      {
-        remember~picture ,
-        overlay ,
-        name~prefix = wa - \l__witharrows_prefix_str -
-      } ,
-    __witharrows_standard_arrow / .style =
-      {
-        __witharrows_standard ,
-        every~path / .style = WithArrows / arrow
-      }
-  }
-\sys_if_engine_xetex:T
-  {
-    \tikzset
-      {
-        __witharrows_standard_arrow / .append~style =
-          { every~node / .append~style = { text = . } }
-      }
-  }
-\tikzset
-  {
-    WithArrows / arrow / tips / .style =
-      { > = { Straight~Barb [ scale = 1.2 , bend ] } }
-  }
-\tikzset
- {
-   WithArrows / arrow / .style  =
-     {
-       align = flush~left ,
-       auto = left ,
-       WithArrows / arrow / tips ,
-       bend~left = 45 ,
-       ->
-     }
- }
-        \cs_new_protected:Npn \spread at equation
-          {
-            \openup \jot
-            \cs_set_eq:NN \spread at equation \prg_do_nothing:
-          }
-\tl_new:N \l__witharrows_left_brace_tl
-\tl_set_eq:NN \l__witharrows_left_brace_tl \c_novalue_tl
-\bool_new:N \l__witharrows_in_WithArrows_bool
-\bool_new:N \l__witharrows_in_DispWithArrows_bool
-\bool_new:N \l__witharrows_in_code_after_bool
-\seq_new:N \g__witharrows_position_in_the_tree_seq
-\seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1
-\int_new:N \g__witharrows_last_env_int
-\int_new:N \l__witharrows_pos_env_int
-\int_new:N \l__witharrows_pos_arrow_int
-\int_set:Nn \l__witharrows_pos_arrow_int 3
-\seq_new:N \g__witharrows_arrow_int_seq
-\int_new:N \g__witharrows_arrow_int
-\seq_new:N \g__witharrows_line_int_seq
-\int_new:N \g__witharrows_line_int
-\seq_new:N \g__witharrows_col_int_seq
-\int_new:N \g__witharrows_col_int
-\seq_new:N \g__witharrows_static_col_int_seq
-\int_new:N \g__witharrows_static_col_int
-\str_new:N \l__witharrows_command_name_str
-\str_set:Nn \l__witharrows_command_name_str { Arrow }
-\str_new:N \l__witharrows_string_Arrow_for_msg_str
-\str_set:Nx \l__witharrows_string_Arrow_for_msg_str { \token_to_str:N \Arrow }
-\seq_new:N \g__witharrows_names_seq
-\bool_new:N \l__witharrows_in_first_columns_bool
-\bool_new:N \l__witharrows_new_group_bool
-\bool_new:N \l__witharrows_initial_r_bool
-\bool_new:N \l__witharrows_final_r_bool
-\tl_new:N \l__witharrows_initial_tl
-\tl_new:N \l__witharrows_final_tl
-\int_new:N \l__witharrows_nb_cols_int
-\str_new:N \l__witharrows_format_str
-\dim_new:N \l__witharrows_arrow_width_dim
-\dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim
-\dim_new:N \l__witharrows_up_and_down_radius_dim
-\dim_set:Nn \l__witharrows_up_and_down_radius_dim { 4 pt }
-\seq_new:N \l__witharrows_o_arrows_seq
-\dim_new:N \l__witharrows_xoffset_for_o_arrows_dim
-\dim_set:Nn \l__witharrows_xoffset_for_o_arrows_dim { 2 mm }
-\bool_new:N \l__witharrows_right_overlap_bool
-\bool_set_true:N \l__witharrows_right_overlap_bool
-\cs_new_protected:Npn \__witharrows_eval_if_allowed:n #1
-  {
-    \str_if_empty:NTF \l__witharrows_previous_key_str
-      {
-        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
-        #1
-      }
-      { \__witharrows_error:n { Incompatible~options } }
-  }
-\cs_new_protected:Npn \__witharrows_fix_pos_option:n #1
-  { \__witharrows_eval_if_allowed:n { \int_set:Nn \l__witharrows_pos_arrow_int { #1 } } }
-\keys_define:nn { WithArrows / Global }
-  {
-    max-length-of-arrow .dim_set:N = \l__witharrows_max_length_of_arrow_dim ,
-    max-length-of-arrow .value_required:n = true ,
-    max-length-of-arrow .initial:n = 2 cm ,
-    ygap .dim_set:N = \l__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)~; ,
-    tikz-code .value_required:n = true ,
-    displaystyle .bool_set:N = \l__witharrows_displaystyle_bool ,
-    displaystyle .default:n = true ,
-    show-nodes .code:n =
-      \tikzset { __witharrows_node_style / .append~style = { draw , red } } ,
-    show-node-names .bool_set:N = \l__witharrows_show_node_names_bool ,
-    show-node-names .default:n = true ,
-    group .code:n =
-      \str_if_empty:NTF \l__witharrows_previous_key_str
-        {
-          \str_set:Nn \l__witharrows_previous_key_str { group }
-          \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset }
-          \int_set:Nn \l__witharrows_pos_arrow_int 7
-        }
-        { \__witharrows_error:n { Incompatible~options } } ,
-    group  .value_forbidden:n = true ,
-    groups .code:n =
-      \str_if_empty:NTF \l__witharrows_previous_key_str
-        {
-          \str_set:Nn \l__witharrows_previous_key_str { groups }
-          \seq_if_in:NnF \l__witharrows_options_Arrow_seq { new-group }
-            { \seq_put_right:Nn \l__witharrows_options_Arrow_seq { new-group } }
-          \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset }
-          \int_set:Nn \l__witharrows_pos_arrow_int 6
-        }
-        { \__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 ,
-    right-overlap .bool_set:N       = \l__witharrows_right_overlap_bool ,
-    right-overlap .value_required:n = true
-  }
-\clist_new:N \c__witharrows_ext_delimiters_clist
-\clist_set:Nn \c__witharrows_ext_delimiters_clist
-  {
-    ., \{, (, [, \lbrace, \lbrack, \lgroup, \langle, \lmoustache, \lceil, \lfloor
-  }
-\keys_define:nn { WithArrows / DispWithArrowsSpecific }
-  {
-    fleqn .bool_set:N = \l__witharrows_fleqn_bool ,
-    fleqn .default:n = true ,
-    mathindent .skip_set:N = \l__witharrows_mathindent_skip ,
-    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 =
-      {
-        \tl_set:Nx \l_tmpa_tl { \tl_head:n { #1 } }
-        \clist_if_in:NVTF
-          \c__witharrows_ext_delimiters_clist
-          \l_tmpa_tl
-          { \tl_set:Nn \l__witharrows_replace_left_brace_by_tl { #1 } }
-          { \__witharrows_error:n { Bad~value~for~replace~brace~by } }
-      } ,
-    replace-left-brace-by .initial:n = \lbrace ,
-  }
-\keys_define:nn { WithArrows / Env }
-  {
-    name .code:n =
-      \str_set:Nn \l_tmpa_str { #1 }
-      \seq_if_in:NVTF \g__witharrows_names_seq \l_tmpa_str
-        { \__witharrows_error:n { Duplicate~name } }
-        { \seq_gput_left:NV \g__witharrows_names_seq \l_tmpa_str }
-      \str_set_eq:NN \l__witharrows_name_str \l_tmpa_str ,
-    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 }
-        { \__witharrows_error:n { Invalid~option~format } }
-        {
-          \regex_match:nnTF { \A[rclRCL]*\Z } { #1 }
-            { \tl_set:Nn \l__witharrows_format_str { #1 } }
-            { \__witharrows_error:n { Invalid~option~format } }
-        } ,
-    format .value_required:n = true
-  }
-\keys_define:nn { WithArrows }
-  {
-    WithArrows .inherit:n =
-      {
-        WithArrows / Global ,
-        WithArrows / WithArrowsSpecific ,
-        WithArrows / Env
-      } ,
-    WithArrows / up-and-down .inherit:n = WithArrows / up-and-down ,
-    DispWithArrows .inherit:n =
-      {
-        WithArrows / DispWithArrowsSpecific ,
-        WithArrows / Global ,
-        WithArrows / Env ,
-      } ,
-    DispWithArrows / up-and-down .inherit:n = WithArrows / up-and-down ,
-    WithArrowsOptions .inherit:n =
-      {
-        WithArrows / Global ,
-        WithArrows / WithArrowsSpecific ,
-        WithArrows / DispWithArrowsSpecific ,
-      } ,
-    WithArrowsOptions / up-and-down .inherit:n = WithArrows / up-and-down
-  }
-\seq_new:N \l__witharrows_options_WithArrows_seq
-\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrows_seq
-  {
-    adjust, b, c, code-after, code-before, command-name,
-    right-overlap, displaystyle, end-adjust,
-    format, group, groups, i,
-    interline, jot, ll,
-    lr, max-length-of-arrow, more-columns, name,
-    no-arrows, rl, rr, up-and-down,
-    show-node-names, show-nodes, start-adjust,
-    t, tikz, tikz-code,
-    xoffset, ygap, ystart
-  }
-\keys_define:nn { WithArrows / WithArrows }
-  {
-    unknown .code:n  =
-      \__witharrows_sort_seq:N \l__witharrows_options_WithArrows_seq
-      \__witharrows_error:n { Unknown~option~WithArrows }
-  }
-\keys_define:nn { WithArrows / DispWithArrows }
-  {
-    left-brace .tl_set:N = \l__witharrows_left_brace_tl ,
-    unknown .code:n  =
-      \__witharrows_sort_seq:N \l__witharrows_options_DispWithArrows_seq
-      \__witharrows_error:n { Unknown~option~DispWithArrows } ,
-  }
-\seq_new:N \l__witharrows_options_DispWithArrows_seq
-\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_DispWithArrows_seq
-  {
-    code-after, code-before, command-name, tikz-code, adjust,
-    displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot,
-    left-brace, ll, lr, max-length-of-arrow, mathindent, name, no-arrows,
-    up-and-down, replace-left-brace-by, rl, rr, show-node-names,
-    show-nodes, start-adjust, tikz, wrap-lines, xoffset, ygap, ystart,
-  }
-\keys_define:nn { WithArrows / WithArrowsOptions }
-  {
-    allow-duplicate-names .code:n =
-      \__witharrows_msg_redirect_name:nn { Duplicate~name } { none } ,
-    allow-duplicate-names .value_forbidden:n = true ,
-    xoffset-for-o-arrows .dim_set:N = \l__witharrows_xoffset_for_o_arrows_dim ,
-    xoffset-for-o-arrows .value_required:n = true ,
-    unknown .code:n  =
-      \__witharrows_sort_seq:N \l__witharrows_options_WithArrowsOptions_seq
-      \__witharrows_error:n { Unknown~option~WithArrowsOptions }
-  }
-\seq_new:N \l__witharrows_options_WithArrowsOptions_seq
-\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrowsOptions_seq
-  {
-    allow-duplicate-names, b, c, command-name, right_overlap,
-    more-columns, tikz-code, adjust,
-    displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr,
-    mathindent, max-length-of-arrow, no-arrows, up-and-down, rl, rr,
-    show-node-names, show-nodes, start-adjust, t, tikz, wrap-lines, xoffset,
-    xoffset-for-o-arrows, ygap, ystart,
-  }
-\cs_new_protected:Npn \__witharrows_set_independent:
-  {
-    \str_if_eq:VnF \l_keys_value_tl { NoValue }
-      { \__witharrows_error:n { Value~for~a~key } }
-    \__witharrows_set_independent_bis:
-  }
-\cs_new_protected:Npn \__witharrows_set_independent_bis:
-  {
-    \str_if_empty:NTF \l__witharrows_previous_key_str
-      {
-        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
-        \str_set:Nn \l__witharrows_status_arrow_str { independent }
-      }
-      { \__witharrows_error:n { Incompatible~options~in~Arrow } }
-  }
-\keys_define:nn { WithArrows / Arrow / FirstPass }
-  {
-    jump .code:n =
-      \int_compare:nTF { #1 > 0 }
-        { \int_set:Nn \l__witharrows_jump_int { #1 } }
-        { \__witharrows_error:n { Negative~jump } } ,
-    jump .value_required:n  = true,
-    rr .code:n = \__witharrows_set_independent: ,
-    ll .code:n = \__witharrows_set_independent: ,
-    rl .code:n = \__witharrows_set_independent: ,
-    lr .code:n = \__witharrows_set_independent: ,
-    i  .code:n = \__witharrows_set_independent: ,
-    rr .default:n = NoValue ,
-    ll .default:n = NoValue ,
-    rl .default:n = NoValue ,
-    lr .default:n = NoValue ,
-    i  .default:n = NoValue ,
-    new-group .value_forbidden:n = true ,
-    new-group .code:n =
-      \int_compare:nTF { \l__witharrows_pos_arrow_int = 6 }
-        { \str_set:Nn \l__witharrows_status_arrow_str { new-group } }
-        { \__witharrows_error:n { new-group~without~groups } } ,
-    o .code:n =
-      \str_if_empty:NTF \l__witharrows_previous_key_str
-        {
-          \int_compare:nNnTF \l__witharrows_pos_arrow_int < 6
-            { \__witharrows_error:n { invalid~key~o } }
-            {
-              \str_set:Nn \l__witharrows_status_arrow_str { over }
-              \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
-            }
-        }
-        { \__witharrows_error:n { Incompatible~options~in~Arrow } } ,
-    tikz-code .code:n = \prg_do_nothing: ,
-    tikz-code .value_required:n = true ,
-    tikz .code:n = \prg_do_nothing: ,
-    tikz .value_required:n = true ,
-    start-adjust .code:n = \prg_do_nothing: ,
-    start-adjust .value_required:n = true ,
-    end-adjust .code:n = \prg_do_nothing: ,
-    end-adjust .value_required:n = true ,
-    adjust .code:n  = \prg_do_nothing: ,
-    adjust .value_required:n = true ,
-    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_str
-        {
-          \str_set:Nn \l_tmpa_str
-           { ~However,~this~key~can~be~used~in~the~options~of~{WithArrows}. }
-        }
-        { \str_clear:N \l_tmpa_str }
-      \__witharrows_error:n { Unknown~option~in~Arrow }
-  }
-\seq_new:N \l__witharrows_options_Arrow_seq
-\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_seq
-  {
-    adjust, end-adjust, i, jump, ll, lr, o , rl, rr, start-adjust, tikz,
-    tikz-code, xoffset
-  }
-\cs_new_protected:Npn \__witharrows_fix_pos_arrow:n #1
-  {
-    \str_if_empty:NT \l__witharrows_previous_key_str
-      {
-        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
-        \int_set:Nn \l__witharrows_pos_arrow_int { #1 }
-      }
-  }
-\keys_define:nn {WithArrows / Arrow / SecondPass }
-  {
-    tikz-code .tl_set:N = \l__witharrows_tikz_code_tl ,
-    tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
-    tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
-    tikz .initial:n = \c_empty_tl ,
-    rr .code:n = \__witharrows_fix_pos_arrow:n 3 ,
-    ll .code:n = \__witharrows_fix_pos_arrow:n 1 ,
-    rl .code:n = \__witharrows_fix_pos_arrow:n 2 ,
-    lr .code:n = \__witharrows_fix_pos_arrow:n 0 ,
-    i  .code:n = \__witharrows_fix_pos_arrow:n 5 ,
-    o  .code:n = \str_set:Nn \l__witharrows_previous_key_str { o } ,
-    xoffset .code:n  =
-      \bool_if:nTF
-        {
-          \int_compare_p:nNn \g__witharrows_arrow_int > 1
-          &&
-          \int_compare_p:nNn \l__witharrows_pos_arrow_int > 5
-          &&
-          ! \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent }
-        }
-        { \__witharrows_error:n { Option~xoffset~forbidden } }
-        { \dim_set:Nn \l__witharrows_xoffset_dim { #1 } } ,
-    xoffset .value_required:n = true ,
-    start-adjust .dim_set:N = \l__witharrows_start_adjust_dim,
-    end-adjust .dim_set:N = \l__witharrows_end_adjust_dim,
-    adjust .code:n  =
-      \dim_set:Nn \l__witharrows_start_adjust_dim { #1 }
-      \dim_set:Nn \l__witharrows_end_adjust_dim { #1 } ,
-  }
-\cs_set_protected:Npn \WithArrowsOptions #1
-  {
-    \str_clear_new:N \l__witharrows_previous_key_str
-    \keys_set:nn { WithArrows / WithArrowsOptions } { #1 }
-  }
-\cs_new_protected:Npn \__witharrows_Arrow
-  {
-    \peek_meaning:NTF [
-      { \__witharrows_Arrow_i }
-      { \__witharrows_Arrow_i [ ] }
-  }
-\cs_new_protected:Npn \__witharrows_Arrow_i [ #1 ] #2
-  {
-    \peek_meaning:NTF [
-      { \__witharrows_Arrow_ii [ #1 ] { #2 } }
-      { \__witharrows_Arrow_ii [ #1 ] { #2 } [ ] }
-  }
-\cs_new_protected:Npn \__witharrows_Arrow_ii [ #1 ] #2 [ #3 ]
-  {
-    \int_gincr:N \g__witharrows_arrow_int
-    \str_clear_new:N \l__witharrows_previous_key_str
-    \keys_set:nn { WithArrows / Arrow / FirstPass } { #1 , #3 }
-    \prop_put:NnV \l_tmpa_prop { initial } \g__witharrows_line_int
-    \int_set:Nn \l_tmpa_int { \g__witharrows_line_int + \l__witharrows_jump_int }
-    \prop_put:NnV \l_tmpa_prop { final } \l_tmpa_int
-    \prop_put:NnV \l_tmpa_prop { status } \l__witharrows_status_arrow_str
-    \prop_put:Nnn \l_tmpa_prop { options } { #1 , #3 }
-    \prop_put:Nnn \l_tmpa_prop { label } { #2 }
-    \prop_put:Nnx \l_tmpa_prop { input-line } \msg_line_number:
-    \prop_put:Nnn \l_tmpa_prop { width } { 0 pt }
-    \prop_gclear_new:c
-      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop }
-    \prop_gset_eq:cN
-      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop }
-      \l_tmpa_prop
-  }
-\cs_new_protected:Npn \__witharrows_Arrow_first_columns:
-  { \__witharrows_error:n { Arrow~not~in~last~column } \__witharrows_Arrow }
-\cs_new_protected:Npn \__witharrows_pre_halign:n #1
-  {
-    \cs_if_exist:NT \tikz at library@external at loaded
-      { \tikzset { external / export = false } }
-    \tikzset { arrows = [ flex ] }  % https://texnique.fr/osqa/questions/12199
-    \str_clear_new:N \l__witharrows_name_str
-    \str_clear_new:N \l__witharrows_status_arrow_str
-    \dim_zero_new:N \l__witharrows_x_dim
-    \str_clear_new:N \l__witharrows_input_line_str
-    \seq_gput_right:NV \g__witharrows_arrow_int_seq \g__witharrows_arrow_int
-    \int_gzero:N \g__witharrows_arrow_int
-    \seq_gput_right:NV \g__witharrows_line_int_seq \g__witharrows_line_int
-    \int_gzero:N \g__witharrows_line_int
-    \seq_gput_right:NV \g__witharrows_col_int_seq \g__witharrows_col_int
-    \int_gzero:N \g__witharrows_col_int
-    \seq_gput_right:NV \g__witharrows_static_col_int_seq \g__witharrows_static_col_int
-    \int_gzero:N \g__witharrows_static_col_int
-    \seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1
-    \seq_set_eq:NN \l_tmpa_seq \g__witharrows_position_in_the_tree_seq
-    \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
-    \str_clear_new:N \l__witharrows_prefix_str
-    \str_set:Nx \l__witharrows_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - }
-    \cs_set_eq:NN \\ \__witharrows_cr:
-    \dim_zero:N \mathsurround
-    \int_zero_new:N \l__witharrows_initial_int
-    \int_zero_new:N \l__witharrows_final_int
-    \int_zero_new:N \l__witharrows_arrow_int
-    \int_zero_new:N \l__witharrows_pos_of_arrow_int
-    \int_zero_new:N \l__witharrows_jump_int
-    \int_set:Nn \l__witharrows_jump_int 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
-    \tl_clear_new:N \l__witharrows_code_after_tl
-    \str_clear_new:N \l__witharrows_previous_key_str
-    \bool_if:NT \l__witharrows_in_WithArrows_bool
-      { \keys_set:nn { WithArrows / WithArrows } { #1 } }
-    \bool_if:NT \l__witharrows_in_DispWithArrows_bool
-      { \keys_set:nn { WithArrows / DispWithArrows } { #1 } }
-    \bool_if:NF \l__witharrows_right_overlap_bool
-      {
-        \bool_if:NT \l__witharrows_in_WithArrows_bool
-          {
-            \dim_gzero_new:N \g__witharrows_overlap_x_dim
-            \dim_zero_new:N \l__witharrows_delta_x_dim
-          }
-      }
-    \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_first_columns:
-    \int_set:Nn \l__witharrows_nb_cols_int { \str_count:N \l__witharrows_format_str }
-    \int_gset_eq:NN \g__witharrows_col_int \l__witharrows_nb_cols_int
-    \seq_clear_new:N \l__witharrows_format_seq
-    \seq_set_split:NnV \l__witharrows_format_seq { } \l__witharrows_format_str
-    \l__witharrows_code_before_tl
-  }
-\cs_new_protected:Npn \__witharrows_construct_halign:
-  {
-    \seq_pop_right:NNTF \l__witharrows_format_seq \l__witharrows_type_col_str
-      {
-        \use:e
-          {
-            \int_gdecr:N \g__witharrows_col_int
-            \__witharrows_construct_halign:
-            \int_compare:nNnT \g__witharrows_col_int = \l__witharrows_nb_cols_int
-              {
-                \cs_set_eq:cN { \l__witharrows_command_name_str } \__witharrows_Arrow
-              }
-            \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil
-            \str_if_eq:VnT \l__witharrows_type_col_str { C } \hfil
-            \str_if_eq:VnT \l__witharrows_type_col_str { r } \hfill
-            \str_if_eq:VnT \l__witharrows_type_col_str { R } \hfill
-            \int_gincr:N \g__witharrows_col_int
-            \int_gset:Nn \g__witharrows_static_col_int { \int_use:N \g__witharrows_col_int }
-            \c_math_toggle_token
-            \str_if_eq:VnT \l__witharrows_type_col_str { C } { { } }
-            \str_if_eq:VnT \l__witharrows_type_col_str { L } { { } }
-            \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
-            ##
-            \str_if_eq:VnT \l__witharrows_type_col_str { C } { { } }
-            \str_if_eq:VnT \l__witharrows_type_col_str { R } { { } }
-            \c_math_toggle_token
-            \int_compare:nNnTF \g__witharrows_col_int = \l__witharrows_nb_cols_int
-              \__witharrows_construct_nodes:
-              {
-                \str_if_eq:VnT \l__witharrows_type_col_str { l } \hfil
-                \str_if_eq:VnT \l__witharrows_type_col_str { L } \hfil
-                \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil
-                \str_if_eq:VnT \l__witharrows_type_col_str { C } \hfil
-                \bool_if:NT \l__witharrows_in_DispWithArrows_bool { \tabskip = \c_zero_skip }
-                &
-              }
-          }
-      }
-      {
-        \bool_if:NTF \l__witharrows_in_WithArrows_bool
-          {
-            \ialign
-            \bgroup
-          }
-          {
-            \halign to \l__witharrows_linewidth_dim
-            \bgroup
-            \bool_if:NT \l__witharrows_fleqn_bool
-              { \skip_horizontal:N \l__witharrows_mathindent_skip }
-          }
-        \int_gincr:N \g__witharrows_line_int
-        \int_gzero:N \g__witharrows_col_int
-        \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl
-          {
-            \skip_horizontal:n
-              { \box_wd:N \l__witharrows_left_brace_box + \l__witharrows_delim_wd_dim }
-          }
-        \strut
-      }
-  }
-\cs_new_protected:Npn \__witharrows_construct_nodes:
-  {
-    \tikz [ remember~picture , overlay ]
-      \node
-        [
-          node~contents = { } ,
-          __witharrows_node_style ,
-          name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - l ,
-        ]
-        ;
-    \hfil
-    \tikz [ remember~picture , overlay ]
-      \node
-        [
-          node~contents = { } ,
-          __witharrows_node_style ,
-          name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r ,
-        ]
-        ;
-    \str_if_empty:NF \l__witharrows_name_str
-      {
-        \pgfpicture
-        \pgfnodealias
-          { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - l }
-          { wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - l }
-        \pgfnodealias
-          { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - r }
-          { wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r }
-        \endpgfpicture
-      }
-    \bool_if:NT \l__witharrows_show_node_names_bool
-      {
-        \hbox_overlap_right:n
-          { \small wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r }
-      }
-  }
-\cs_new_protected:Npn \WithArrows
-  {
-    \group_begin:
-    \peek_meaning:NTF [
-     { \WithArrows_i }
-     { \WithArrows_i [  ] }
-  }
-\cs_new_protected:Npn \WithArrows_i [ #1 ]
-  {
-    \bool_set_true:N \l__witharrows_in_WithArrows_bool
-    \bool_set_false:N \l__witharrows_in_DispWithArrows_bool
-    \str_clear_new:N \l__witharrows_type_env_str
-    \str_set:Nn \l__witharrows_type_env_str { WithArrows }
-    \__witharrows_pre_halign:n { #1 }
-    \if_mode_math: \else:
-      \__witharrows_error:n { WithArrows~outside~math~mode }
-    \fi:
-    \box_clear_new:N \l__witharrows_env_box
-    \hbox_set:Nw \l__witharrows_env_box
-    \int_compare:nNnT \l__witharrows_pos_env_int = 1 \c_math_toggle_token
-    \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 }
-    \c_math_toggle_token
-    \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
-    { ## }
-    \c_math_toggle_token
-    \cr
-  }
-\cs_new_protected:Npn \endWithArrows
-  {
-    \\
-    \egroup
-    \egroup
-    \int_compare:nNnT \l__witharrows_pos_env_int = 1 \c_math_toggle_token
-    \hbox_set_end:
-    \__witharrows_post_halign:
-    \bool_if:NF \l__witharrows_right_overlap_bool
-      {
-        \box_set_wd:Nn \l__witharrows_env_box
-          { \g__witharrows_overlap_x_dim + \box_wd:N \l__witharrows_env_box }
-      }
-    \box_use_drop:N \l__witharrows_env_box
-    \group_end:
-  }
-\cs_new_protected:Npn \__witharrows_post_halign:
-  {
-    \cs_set:Npn \WithArrowsRightX { \g__witharrows_right_x_dim }
-    \normalbaselines
-    \int_compare:nNnT \g__witharrows_arrow_int > 0
-      {
-        \int_compare:nNnT \g__witharrows_arrow_int = 1
-          {
-            \int_compare:nNnT \l__witharrows_pos_arrow_int > 5
-              { \int_set:Nn \l__witharrows_pos_arrow_int 5 }
-          }
-        \__witharrows_scan_arrows:
-      }
-    \group_begin:
-      \tikzset { every~picture / .style = __witharrows_standard }
-      \cs_set:Npn \WithArrowsNbLines { \int_use:N \g__witharrows_line_int }
-      \cs_set_eq:NN \MultiArrow \__witharrows_MultiArrow:nn
-      \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_code_after
-      \bool_set_true:N \l__witharrows_in_code_after_bool
-      \l__witharrows_code_after_tl
-    \group_end:
-    \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl
-    \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl
-    \seq_gput_right:Nx \g__witharrows_position_in_the_tree_seq
-      { \int_eval:n { \l_tmpa_tl + 1 } }
-    \int_compare:nNnT { \seq_count:N \g__witharrows_position_in_the_tree_seq } = 1
-      { \int_gincr:N \g__witharrows_last_env_int }
-    \seq_gpop_right:NN \g__witharrows_arrow_int_seq \l_tmpa_tl
-    \int_gset:Nn \g__witharrows_arrow_int \l_tmpa_tl
-    \seq_gpop_right:NN \g__witharrows_line_int_seq \l_tmpa_tl
-    \int_gset:Nn \g__witharrows_line_int \l_tmpa_tl
-    \seq_gpop_right:NN \g__witharrows_col_int_seq \l_tmpa_tl
-    \int_gset:Nn \g__witharrows_col_int \l_tmpa_tl
-    \seq_gpop_right:NN \g__witharrows_static_col_int_seq \l_tmpa_tl
-    \int_gset:Nn \g__witharrows_static_col_int \l_tmpa_tl
-  }
-\cs_new_protected:Npn \__witharrows_cr:
-  {
-    \scan_stop:
-    \int_compare:nNnF \g__witharrows_col_int = \g__witharrows_static_col_int
-      { \__witharrows_error:n { omit~probably~used } }
-    \prg_replicate:nn { \l__witharrows_nb_cols_int - \g__witharrows_static_col_int } { & { } }
-    \group_align_safe_begin:
-    \peek_meaning_remove:NTF * \__witharrows_cr_i: \__witharrows_cr_i:
-  }
-\cs_new_protected:Npn \__witharrows_cr_i:
-  { \peek_meaning:NTF [ \__witharrows_cr_ii: { \__witharrows_cr_ii: [ \c_zero_dim ] } }
-\cs_new_protected:Npn \__witharrows_cr_ii: [ #1 ]
-  {
-    \group_align_safe_end:
-    \bool_if:NT \l__witharrows_in_DispWithArrows_bool
-      {
-            &
-            \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 } }
-
-    \cr
-    \noalign
-      {
-        \dim_set:Nn \l_tmpa_dim { \dim_max:nn { #1 } \c_zero_dim }
-        \skip_vertical:N \l_tmpa_dim
-        \skip_vertical:N \l__witharrows_interline_skip
-        \scan_stop:
-      }
-  }
-\cs_new_protected:Npn \DispWithArrows
-  {
-    \group_begin:
-    \peek_meaning:NTF <
-      { \DispWithArrows_i }
-      { \DispWithArrows_i < \c_novalue_tl > }
-  }
-\cs_new_protected:Npn \DispWithArrows_i < #1 >
-  {
-    \peek_meaning:NTF [
-      { \DispWithArrows_ii < #1 > }
-      { \DispWithArrows_ii < #1 > [ ] }
-  }
-\cs_new_protected:Npn \DispWithArrows_ii < #1 > [ #2 ]
-  {
-    \bool_set_true:N \l__witharrows_in_DispWithArrows_bool
-    \str_clear_new:N \l__witharrows_type_env_str
-    \str_set:Nn \l__witharrows_type_env_str { DispWithArrows }
-    \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l__witharrows_left_brace_tl { #1 } }
-    \__witharrows_pre_halign:n { #2 }
-    \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl
-      {
-        \hbox_set:Nn \l_tmpa_box
-          {
-            \group_begin:
-            \dim_zero:N \nulldelimiterspace
-            \c_math_toggle_token
-            \left \l__witharrows_replace_left_brace_by_tl \vcenter to 1 cm { } \right.
-            \c_math_toggle_token
-            \group_end:
-          }
-        \dim_zero_new:N \l__witharrows_delim_wd_dim
-        \dim_set:Nn \l__witharrows_delim_wd_dim { \box_wd:N \l_tmpa_box }
-        \box_clear_new:N \l__witharrows_left_brace_box
-        \hbox_set:Nn \l__witharrows_left_brace_box
-          {
-            \group_begin:
-              \cs_set_eq:NN \label \__witharrows_old_label
-              \c_math_toggle_token
-              \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
-              \l__witharrows_left_brace_tl
-              { }
-              \c_math_toggle_token
-            \group_end:
-          }
-      }
-    \if_mode_math:
-      \__witharrows_fatal:n { DispWithArrows~in~math~mode }
-    \fi:
-     \dim_zero_new:N \linewidth
-     \dim_set_eq:NN \linewidth \displaywidth
-        \if_mode_vertical:
-        \nointerlineskip
-        \hbox_to_wd:nn { .6 \linewidth } { }
-        \fi:
-        \c_math_toggle_token \c_math_toggle_token
-    \dim_zero_new:N \l__witharrows_linewidth_dim
-    \dim_set_eq:NN \l__witharrows_linewidth_dim \displaywidth
-    \box_clear_new:N \l__witharrows_halign_box
-    \setbox \l__witharrows_halign_box \vtop \bgroup
-    \tabskip =
-      \bool_if:NTF \l__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
-    &
-    $ ## $
-    \tabskip = \c_zero_skip
-    &&
-    \__witharrows_fatal:n { Too~much~columns~in~DispWithArrows }
-    \bool_if:nT \c_false_bool { ## }
-    \cr
-  }
-\cs_new_protected:Npn \endDispWithArrows
-  {
-    \\
-    \egroup
-    \unskip \unpenalty \unskip \unpenalty
-    \box_set_to_last:N \l_tmpa_box
-    \nointerlineskip
-    \box_use:N \l_tmpa_box
-    \dim_gzero_new:N \g__witharrows_alignment_dim
-    \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l_tmpa_box }
-    \box_clear_new:N \l__witharrows_new_box
-    \hbox_set:Nn \l__witharrows_new_box { \hbox_unpack_drop:N \l_tmpa_box }
-    \dim_compare:nNnT
-      { \box_wd:N \l__witharrows_new_box } < \g__witharrows_alignment_dim
-      { \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l__witharrows_new_box } }
-    \egroup
-     \tl_if_eq:NNTF \l__witharrows_left_brace_tl \c_novalue_tl
-       { \box_use_drop:N \l__witharrows_halign_box }
-       {
-         \hbox_to_wd:nn \l__witharrows_linewidth_dim
-           {
-            \bool_if:NTF \l__witharrows_fleqn_bool
-              { \skip_horizontal:N \l__witharrows_mathindent_skip }
-              \hfil
-            \hbox_to_wd:nn \g__witharrows_alignment_dim
-              {
-                \box_use_drop:N \l__witharrows_left_brace_box
-                \dim_set:Nn \l_tmpa_dim
-                  {
-                    \box_ht:N \l__witharrows_halign_box
-                    + \box_dp:N \l__witharrows_halign_box
-                  }
-                \group_begin:
-                \dim_zero:N \nulldelimiterspace
-                \c_math_toggle_token
-                  \left \l__witharrows_replace_left_brace_by_tl
-                    \vcenter to \l_tmpa_dim { \vfil }
-                  \right.
-                \c_math_toggle_token
-                \group_end:
-                \hfil
-              }
-            \hfil
-           }
-         \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
-    \pgfpicture
-      \pgfrememberpicturepositiononpagetrue
-      \int_step_variable:nNn \g__witharrows_line_int \l_tmpa_int
-        {
-          \cs_if_free:cTF
-            { pgf @ sh @ ns @ wa - \l__witharrows_prefix_str - \l_tmpa_int - v }
-            { \__witharrows_fatal:n { Inexistent~v-node } }
-            {
-              \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 }
-            }
-        }
-    \endpgfpicture
-    \__witharrows_post_halign:
-      \c_math_toggle_token \c_math_toggle_token
-    \group_end:
-  }
-\cs_new_protected:Npn \__witharrows_if_in_last_col_of_disp:Nn #1 #2
-  {
-    \bool_if:NTF \l__witharrows_in_WithArrows_bool
-      { \__witharrows_error:nn { Not~allowed~in~WithArrows } { #1 } }
-      {
-        \int_compare:nNnTF \g__witharrows_col_int < \l__witharrows_nb_cols_int
-          { \__witharrows_error:nn { Not~allowed~in~DispWithArrows } { #1 } }
-          { #2 }
-      }
-  }
-\cs_new_protected:Npn \__witharrows_scan_arrows:
-  {
-    \group_begin:
-    \int_compare:nNnT \l__witharrows_pos_arrow_int = 7
-      {
-        \__witharrows_scan_arrows_i:
-        \int_set:Nn \l__witharrows_pos_arrow_int 8
-      }
-    \__witharrows_scan_arrows_i:
-    \group_end:
-  }
-\cs_new_protected:Npn \__witharrows_scan_arrows_i:
-  {
-    \int_zero_new:N \l__witharrows_first_arrow_of_group_int
-    \int_zero_new:N \l__witharrows_first_line_of_group_int
-    \int_zero_new:N \l__witharrows_last_line_of_group_int
-    \seq_clear_new:N \l__witharrows_first_arrows_seq
-    \seq_clear_new:N \l__witharrows_last_arrows_seq
-    \bool_set_true:N \l__witharrows_new_group_bool
-    \int_set:Nn \l__witharrows_arrow_int 1
-    \int_until_do:nNnn \l__witharrows_arrow_int > \g__witharrows_arrow_int
-      {
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
-          { initial } \l_tmpa_tl
-        \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
-          { final } \l_tmpa_tl
-        \int_set:Nn \l__witharrows_final_int \l_tmpa_tl
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
-          { status } \l__witharrows_status_arrow_str
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
-          { input-line } \l__witharrows_input_line_str
-        \int_compare:nNnTF \l__witharrows_final_int > \g__witharrows_line_int
-          {
-            \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
-              { \__witharrows_error:n { Too~few~lines~for~an~arrow } }
-          }
-          \__witharrows_treat_an_arrow_in_scan:
-        \int_incr:N \l__witharrows_arrow_int
-      }
-    \bool_if:nT
-      {
-        ! \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_treat_an_arrow_in_scan:
-  {
-    \bool_lazy_and:nnT
-      { \int_compare_p:nNn \l__witharrows_arrow_int > 1 }
-      {
-        \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
-          {
-            \__witharrows_draw_arrows:nn
-              \l__witharrows_first_arrow_of_group_int
-              { \l__witharrows_arrow_int - 1 }
-          }
-        \bool_set_true:N \l__witharrows_new_group_bool
-      }
-    \bool_if:nTF \l__witharrows_new_group_bool
-      {
-        \bool_set_false:N \l__witharrows_new_group_bool
-        \int_set_eq:NN \l__witharrows_first_arrow_of_group_int \l__witharrows_arrow_int
-        \int_set_eq:NN \l__witharrows_first_line_of_group_int \l__witharrows_initial_int
-        \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int
-        \seq_clear:N \l__witharrows_first_arrows_seq
-        \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int
-        \seq_clear:N \l__witharrows_last_arrows_seq
-        \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int
-        \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
-          { \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim } }
-      }
-      {
-        \str_if_eq:VnF \l__witharrows_status_arrow_str { independent }
-          {
-            \int_compare:nT
-              { \l__witharrows_initial_int = \l__witharrows_first_line_of_group_int }
-              { \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int }
-            \int_compare:nNnTF \l__witharrows_final_int > \l__witharrows_last_line_of_group_int
-              {
-                \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int
-                \seq_clear:N \l__witharrows_last_arrows_seq
-                \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int
-              }
-              {
-                \int_compare:nNnT \l__witharrows_final_int = \l__witharrows_last_line_of_group_int
-                  { \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int }
-              }
-          }
-      }
-    \str_if_eq:VnF \l__witharrows_status_arrow_str { independent }
-      {
-        \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
-          { \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int }
-      }
-  }
-\cs_generate_variant:Nn \keys_set:nn { n o }
-\cs_new_protected:Npn \__witharrows_keys_set:
-  { \keys_set_known:no { WithArrows / Arrow / SecondPass } }
-\cs_new_protected:Npn \__witharrows_draw_arrows:nn #1 #2
-  {
-    \group_begin:
-    \int_zero_new:N \l__witharrows_first_arrow_int
-    \int_set:Nn \l__witharrows_first_arrow_int { #1 }
-    \int_zero_new:N \l__witharrows_last_arrow_int
-    \int_set:Nn \l__witharrows_last_arrow_int { #2 }
-    \int_set:Nn \l__witharrows_arrow_int \l__witharrows_first_arrow_int
-    \int_until_do:nNnn \l__witharrows_arrow_int > \l__witharrows_last_arrow_int
-      {
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
-          { initial } \l_tmpa_tl
-        \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
-          { final } \l_tmpa_tl
-        \int_set:Nn \l__witharrows_final_int \l_tmpa_tl
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
-          { status } \l__witharrows_status_arrow_str
-        \int_compare:nNnF \l__witharrows_final_int > \g__witharrows_line_int
-          {
-            \str_if_eq:VnTF \l__witharrows_status_arrow_str { over }
-              { \seq_put_right:NV \l__witharrows_o_arrows_seq \l__witharrows_arrow_int }
-              \__witharrows_draw_arrow:
-          }
-        \int_incr:N \l__witharrows_arrow_int
-      }
-    \__witharrows_draw_o_arrows_of_the_group:
-    \group_end:
-  }
-\cs_new_protected:Npn \__witharrows_draw_arrow:
-  {
-    \group_begin:
-    \prop_get:cnN
-      { g__witharrows_arrow _\l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
-      { options } \l_tmpa_tl
-    \str_clear_new:N \l__witharrows_previous_key_str
-    \exp_args:NNo \exp_args:No
-    \__witharrows_keys_set: { \l_tmpa_tl , tikz = { xshift = \l__witharrows_xoffset_dim } }
-    \bool_set_false:N \l__witharrows_initial_r_bool
-    \bool_set_false:N \l__witharrows_final_r_bool
-    \int_case:nn \l__witharrows_pos_arrow_int
-      {
-        0 { \bool_set_true:N \l__witharrows_final_r_bool }
-        2 { \bool_set_true:N \l__witharrows_initial_r_bool }
-        3
-          {
-            \bool_set_true:N \l__witharrows_initial_r_bool
-            \bool_set_true:N \l__witharrows_final_r_bool
-          }
-      }
-    \int_compare:nNnT \l__witharrows_pos_arrow_int = 5
-      {
-        \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim }
-        \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int
-      }
-    \tl_set:Nx \l__witharrows_initial_tl
-      { \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 }
-    \prop_get:cnN
-      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
-      { label }
-      \l_tmpa_tl
-    \seq_if_in:NxTF \l__witharrows_first_arrows_seq
-      { \int_use:N \l__witharrows_arrow_int }
-      { \bool_set_true:N \l_tmpa_bool }
-      { \bool_set_false:N \l_tmpa_bool }
-    \seq_if_in:NxTF \l__witharrows_last_arrows_seq
-      { \int_use:N \l__witharrows_arrow_int }
-      { \bool_set_true:N \l_tmpb_bool }
-      { \bool_set_false:N \l_tmpb_bool }
-    \int_compare:nNnT \l__witharrows_pos_arrow_int = 5
-      {
-        \bool_set_true:N \l_tmpa_bool
-        \bool_set_true:N \l_tmpb_bool
-      }
-    \dim_gzero_new:N \g__witharrows_x_initial_dim
-    \dim_gzero_new:N \g__witharrows_x_final_dim
-    \dim_gzero_new:N \g__witharrows_y_initial_dim
-    \dim_gzero_new:N \g__witharrows_y_final_dim
-    \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
-      \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
-    \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 }
-      {
-        \tl_gset:Nx \g_tmpa_tl
-          {
-            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
-              { \dim_use:N \g__witharrows_x_initial_dim }
-              { \dim_use:N \l__witharrows_x_dim } ,
-            \dim_eval:n
-              {
-                ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
-                + 0.5 \l__witharrows_max_length_of_arrow_dim
-              }
-          }
-        \tl_gset:Nx \g_tmpb_tl
-          {
-            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
-              { \dim_use:N \g__witharrows_x_final_dim }
-              { \dim_use:N \l__witharrows_x_dim } ,
-            \dim_eval:n
-              {
-                ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
-                - 0.5 \l__witharrows_max_length_of_arrow_dim
-              }
-          }
-      }
-      {
-        \tl_gset:Nx \g_tmpa_tl
-          {
-            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
-              { \dim_use:N \g__witharrows_x_initial_dim }
-              { \dim_use:N \l__witharrows_x_dim } ,
-            \bool_if:NTF \l_tmpa_bool
-              { \dim_eval:n { \g__witharrows_y_initial_dim + \l__witharrows_start_adjust_dim } }
-              { \dim_use:N \g__witharrows_y_initial_dim }
-          }
-        \tl_gset:Nx \g_tmpb_tl
-          {
-            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
-              { \dim_use:N \g__witharrows_x_final_dim }
-              { \dim_use:N \l__witharrows_x_dim } ,
-            \bool_if:NTF \l_tmpb_bool
-              { \dim_eval:n { \g__witharrows_y_final_dim - \l__witharrows_end_adjust_dim } }
-              { \dim_use:N \g__witharrows_y_final_dim }
-          }
-      }
-    \bool_if:NF \l__witharrows_right_overlap_bool
-      {
-        \bool_if:NT \l__witharrows_in_WithArrows_bool
-          {
-            \pgfpicture
-            \pgfrememberpicturepositiononpagetrue
-            \pgfpointanchor { wa - \l__witharrows_prefix_str - 1 - r } { south }
-            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
-              {
-                \dim_set:Nn \l__witharrows_delta_x_dim
-                  {
-                    \pgf at x -
-                    ( \dim_min:nn \g__witharrows_x_initial_dim \g__witharrows_x_final_dim )
-                  }
-              }
-              { \dim_set:Nn \l__witharrows_delta_x_dim { \pgf at x - \l__witharrows_x_dim } }
-            \endpgfpicture
-          }
-      }
-    \__witharrows_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl
-    \group_end:
-  }
-\cs_new_protected:Npn \__witharrows_def_function_tmpa:n #1
-  {
-    \cs_set:Npn \__witharrows_tmpa:nnn ##1 ##2 ##3
-      {
-        \tikzpicture
-        [ __witharrows_standard_arrow ]
-        \pgf at relevantforpicturesizetrue
-          #1
-        \dim_compare:nNnTF \pgf at picminx = { 16000 pt }
-          { \dim_zero:N \l_tmpa_dim }
-          { \dim_set:Nn \l_tmpa_dim { \pgf at picmaxx - \pgf at picminx } }
-        \dim_add:Nn \l_tmpa_dim \l__witharrows_xoffset_dim
-        \prop_gput:cnV
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
-          { width }
-          \l_tmpa_dim
-        \bool_if:NF \l__witharrows_right_overlap_bool
-          {
-            \bool_if:NT \l__witharrows_in_WithArrows_bool
-              {
-                \dim_gset:Nn \g__witharrows_overlap_x_dim
-                  {
-                    \dim_max:nn
-                      \g__witharrows_overlap_x_dim
-                      { \l_tmpa_dim - \l__witharrows_delta_x_dim }
-                  }
-              }
-          }
-        \pgfresetboundingbox
-        \endtikzpicture
-      }
-  }
-\cs_new_protected:Npn \__witharrows_draw_arrow:nnn #1 #2 #3
-  {
-    \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 }
-  }
-\cs_generate_variant:Nn \__witharrows_draw_arrow:nnn { n n o }
-\tl_const:Nn \c__witharrows_tikz_code_wrap_lines_tl
-  {
-     \pgfset { inner~sep = 0pt}
-    \draw ( #1 ) to node ( __witharrows_label ) { } ( #2 ) ;
-    \pgfpointanchor { wa - \l__witharrows_prefix_str - __witharrows_label } { west }
-    \dim_set:Nn \l_tmpa_dim { \g__witharrows_right_x_dim - \pgf at x - 0.3333 ex  }
-    \path \pgfextra { \tl_gset:Nx \g_tmpa_tl \tikz at text@width } ;
-    \tl_if_empty:NF \g_tmpa_tl
-      {
-        \dim_set:Nn \l_tmpb_dim \g_tmpa_tl
-        \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim
-          { \dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim }
-      }
-    \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim
-      {
-        \path ( __witharrows_label.west )
-           node [ anchor = west , text~width = \dim_use:N \l_tmpa_dim ]
-            { #3 } ;
-      }
-  }
-\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 }
-      {
-        \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_protected:Npn \__witharrows_draw_o_arrows_of_the_group:
-  {
-    \seq_sort:Nn \l__witharrows_o_arrows_seq
-      {
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##1 _ prop }
-          { final } \l_tmpa_tl
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##2 _ prop }
-          { final } \l_tmpb_tl
-        \int_compare:nNnTF \l_tmpa_tl < \l_tmpb_tl
-          \sort_return_same:
-          {
-            \int_compare:nNnTF \l_tmpa_tl > \l_tmpb_tl
-              \sort_return_swapped:
-              {
-                \prop_get:cnN
-                  { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##1 _ prop }
-                  { initial } \l_tmpa_tl
-                \prop_get:cnN
-                  { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##2 _ prop }
-                  { initial } \l_tmpb_tl
-                \int_compare:nNnTF \l_tmpa_tl < \l_tmpb_tl
-                  \sort_return_swapped:
-                  \sort_return_same:
-              }
-          }
-      }
-    \seq_map_inline:Nn \l__witharrows_o_arrows_seq
-      {
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##1 _ prop }
-          { initial } \l_tmpa_tl
-        \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##1 _ prop }
-          { final } \l_tmpa_tl
-        \int_set:Nn \l__witharrows_final_int \l_tmpa_tl
-        \prop_get:cnN
-          { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##1 _ prop }
-          { input-line } \l__witharrows_input_line_str
-        \dim_gzero:N \g_tmpa_dim
-        \bool_set_false:N \g_tmpa_bool
-        \pgfpicture
-        \pgfrememberpicturepositiononpagetrue
-        \int_step_inline:nnn \l__witharrows_first_arrow_int \l__witharrows_last_arrow_int
-          {
-            \prop_get:cnN
-              { g__witharrows_arrow _ \l__witharrows_prefix_str _ ####1 _ prop }
-              { initial } \l_tmpa_tl
-            \prop_get:cnN
-              { g__witharrows_arrow _ \l__witharrows_prefix_str _ ####1 _ prop }
-              { final } \l_tmpb_tl
-            \prop_get:cnN
-              { g__witharrows_arrow _ \l__witharrows_prefix_str _ ####1 _ prop }
-              { status } \l__witharrows_status_arrow_str
-            \bool_if:nT
-              {
-                ! \int_compare_p:n { ##1 = ####1 }
-                && \int_compare_p:n { \l__witharrows_initial_int <= \l_tmpa_tl }
-                && \int_compare_p:n { \l_tmpb_tl <= \l__witharrows_final_int }
-                && ! \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent }
-              }
-              {
-                \bool_gset_true:N \g_tmpa_bool
-                \prop_get:cnN
-                  { g__witharrows _ arrow _ \l__witharrows_prefix_str _ ####1 _ prop }
-                  { width }
-                  \l_tmpa_tl
-                \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \g_tmpa_dim \l_tmpa_tl }
-              }
-          }
-        \endpgfpicture
-        \bool_if:NTF \g_tmpa_bool
-          {
-            \int_set:Nn \l__witharrows_arrow_int { ##1 }
-            \dim_set_eq:NN \l__witharrows_xoffset_dim \g_tmpa_dim
-            \dim_add:Nn \l__witharrows_xoffset_dim \l__witharrows_xoffset_for_o_arrows_dim
-            \__witharrows_draw_arrow:
-          }
-          { \__witharrows_error:n { o~arrow~with~no~arrow~under } }
-      }
-  }
-\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g__witharrows_last_env_int }
-\keys_define:nn { WithArrows / Arrow / code-after }
-  {
-    tikz     .code:n =
-      \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
-    tikz     .value_required:n  = true ,
-    rr       .value_forbidden:n = true ,
-    rr       .code:n            = \__witharrows_fix_pos_option:n 0 ,
-    ll       .value_forbidden:n = true,
-    ll       .code:n            = \__witharrows_fix_pos_option:n 1 ,
-    rl       .value_forbidden:n = true ,
-    rl       .code:n            = \__witharrows_fix_pos_option:n 2 ,
-    lr       .value_forbidden:n = true ,
-    lr       .code:n            = \__witharrows_fix_pos_option:n 3 ,
-    v        .value_forbidden:n = true ,
-    v        .code:n            = \__witharrows_fix_pos_option:n 4 ,
-    tikz-code .tl_set:N          = \l__witharrows_tikz_code_tl ,
-    tikz-code .value_required:n  = true ,
-    xoffset  .dim_set:N         = \l__witharrows_xoffset_dim ,
-    xoffset  .value_required:n  = true ,
-    unknown .code:n  =
-      \__witharrows_sort_seq:N \l__witharrows_options_Arrow_code_after_seq
-      \__witharrows_error:n { Unknown~option~Arrow~in~code-after }
-  }
-\seq_new:N \l__witharrows_options_Arrow_code_after_seq
-\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_code_after_seq
-  { ll, lr, rl, rr, tikz, tikz-code, v, x, offset }
-\cs_new_protected:Npn \__witharrows_Arrow_code_after
-  {
-    \peek_meaning:NTF [
-      { \__witharrows_Arrow_code_after_i }
-      { \__witharrows_Arrow_code_after_i [ ] }
-  }
-\cs_new_protected:Npn \__witharrows_Arrow_code_after_i [ #1 ] #2 #3 #4
-  {
-    \peek_meaning:NTF [
-      { \__witharrows_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } }
-      { \__witharrows_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } [ ] }
-  }
-\cs_new_protected:Npn \__witharrows_Arrow_code_after_ii [ #1 ] #2 #3 #4 [ #5 ]
-  {
-    \int_set:Nn \l__witharrows_pos_arrow_int 1
-    \str_clear_new:N \l__witharrows_previous_key_str
-    \group_begin:
-      \keys_set:nn { WithArrows / Arrow / code-after }
-        { #1, #5, tikz = { xshift = \l__witharrows_xoffset_dim } }
-      \bool_set_false:N \l__witharrows_initial_r_bool
-      \bool_set_false:N \l__witharrows_final_r_bool
-      \int_case:nn \l__witharrows_pos_arrow_int
-        {
-          0
-            {
-              \bool_set_true:N \l__witharrows_initial_r_bool
-              \bool_set_true:N \l__witharrows_final_r_bool
-            }
-          2 { \bool_set_true:N \l__witharrows_initial_r_bool }
-          3 { \bool_set_true:N \l__witharrows_final_r_bool }
-        }
-      \tl_if_eq:nnTF { #2 } { #3 }
-        { \__witharrows_error:nn { Both~lines~are~equal } { #2 } }
-        {
-          \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - #2 - l }
-            { \__witharrows_error:nx { Wrong~line~in~Arrow } { #2 } }
-            {
-              \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - #3 - l }
-                { \__witharrows_error:nx { Wrong~line~in~Arrow } { #3 }  }
-                {
-                  \int_compare:nNnTF \l__witharrows_pos_arrow_int = 4
-                    {
-                      \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
-                        \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
-                          { \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 }
-                      \endpgfpicture
-                    }
-                    {
-                      \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 }
-                        \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 }
-                      \endpgfpicture
-                    }
-                  \__witharrows_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 }
-                }
-            }
-        }
-    \group_end:
-  }
-\cs_new_protected:Npn \__witharrows_MultiArrow:nn #1 #2
-  {
-    \exp_args:Nnx
-      \regex_match:nnTF
-      { \A \d+ (\,\d+)* ( \, \.\.\. (\,\d+)+ )* \Z }
-      { #1 }
-      { \__witharrows_MultiArrow_i:nn { #1 } { #2 } }
-      { \__witharrows_error:nx { Invalid~specification~for~MultiArrow } { #1 } }
-  }
-\cs_new_protected:Npn \__witharrows_MultiArrow_i:nn #1 #2
-  {
-    \foreach \x in { #1 }
-      {
-        \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - \x - l }
-          { \__witharrows_error:nx { Wrong~line~specification~in~MultiArrow } \x }
-          { \clist_gput_right:Nx \g_tmpa_clist \x }
-      }
-    \int_compare:nTF { \clist_count:N \g_tmpa_clist < 2 }
-      { \__witharrows_error:n { Too~small~specification~for~MultiArrow } }
-      {
-        \clist_sort:Nn \g_tmpa_clist
-          {
-            \int_compare:nTF { ##1 > ##2 }
-              \sort_return_swapped:
-              \sort_return_same:
-          }
-        \clist_pop:NN \g_tmpa_clist \l_tmpa_tl
-        \clist_reverse:N \g_tmpa_clist
-        \clist_pop:NN \g_tmpa_clist \l_tmpb_tl
-        \exp_args:NV \__witharrows_MultiArrow_i:n \g_tmpa_clist
-        \tikzpicture
-          [
-            __witharrows_standard ,
-            every~path / .style = { WithArrows / arrow }
-          ]
-          \draw [<->] ([xshift = \l__witharrows_xoffset_dim]\l_tmpa_tl-r.south)
-                      -- ++(5mm,0)
-                      -- node (__witharrows_label) {}
-                         ([xshift = \l__witharrows_xoffset_dim+5mm]\l_tmpb_tl-r.south)
-                      -- ([xshift = \l__witharrows_xoffset_dim]\l_tmpb_tl-r.south)  ;
-          \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_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 }
-              \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim
-                { \dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim }
-            }
-          \path (__witharrows_label.west)
-           node [ anchor = west, text~width = \dim_use:N \l_tmpa_dim ] { #2 } ;
-        \endtikzpicture
-      }
-  }
-\cs_new_protected:Npn \__witharrows_MultiArrow_i:n #1
-  {
-        \tikzpicture
-      [
-        __witharrows_standard ,
-        every~path / .style = { WithArrows / arrow }
-      ]
-      \foreach \k in { #1 }
-        {
-          \draw [ <- ]
-            ( [xshift = \l__witharrows_xoffset_dim]\k-r.south ) -- ++(5mm,0) ;
-        } % ;
-        \endtikzpicture
-  }
-\bool_if:NTF \c__witharrows_messages_for_Overleaf_bool
-  { \str_const:Nn \c__witharrows_available_keys_str { } }
-  {
-    \str_const:Nn \c__witharrows_available_keys_str
-      { For~a~list~of~the~available~keys,~type~H~<return>. }
-  }
-\str_new:N \l_witharrows_body_str
-\cs_new:Npn \__witharrows_potential_body_i:
-  {
-    \str_if_empty:NF \l_witharrows_body_str
-      { \\ If~you~want~to~see~the~body~of~the~environment,~type~H~<return>. }
-  }
-\cs_new:Npn \__witharrows_potential_body_ii:
-  {
-    \str_if_empty:NTF \l_witharrows_body_str
-      { No~further~help~available }
-      {
-        The~body~of~your~environment~was:\\
-        \l_witharrows_body_str
-      }
-  }
-\str_const:Nn \c__witharrows_option_ignored_str
-  { If~you~go~on,~this~option~will~be~ignored. }
-\str_const:Nn \c__witharrows_command_ignored_str
-  { If~you~go~on,~this~command~will~be~ignored. }
-\__witharrows_msg_new:nn { Bad~value~for~replace~brace~by }
-  {
-    Incorrect~value.\\
-    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,~
-    \token_to_str:N \langle,~\token_to_str:N \lmoustache,~
-    \token_to_str:N \lfloor\ and~\token_to_str:N \lceil\
-    (and~\token_to_str:N \lvert\ and~\token_to_str:N \lVert\
-    if~amsmath~or~unicode-math~is~loaded~in~LaTeX).\\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nn { option~of~cr~negative }
-  {
-    Bad~value.\\
-    The~argument~of~the~command~\token_to_str:N\\~
-    should~be~positive~in~the~row~\int_use:N \g__witharrows_line_int\
-    of~your~environment~\{\l__witharrows_type_env_str\}.\\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nn { omit~probably~used }
-  {
-    Strange~problem.\\
-    Maybe~you~have~used~a~command~
-    \token_to_str:N\omit\ in~the~line~\int_use:N \g__witharrows_line_int\
-    (or~another~line)~of~your~environment~\{\l__witharrows_type_env_str\}.\\
-    You~can~go~on~but~you~may~have~others~errors.
-  }
-\__witharrows_msg_new:nnn { Invalid~option~format }
-  {
-    Invalide~value.\\
-    The~key~'format'~should~contain~only~letters~r,~c~and~l~and~
-    must~not~be~empty.\\
-    \c__witharrows_option_ignored_str
-    \__witharrows_potential_body_i:
-  }
-  { \__witharrows_potential_body_ii: }
-\__witharrows_msg_new:nnn { invalid~key~o }
-  {
-    Invalid~use~of~a~key.\\
-    The~key~'o'~for~individual~arrows~can~be~used~only~in~mode~
-    'group'~or~in~mode~'groups'.\\
-    \c__witharrows_option_ignored_str
-    \__witharrows_potential_body_i:
-  }
-  { \__witharrows_potential_body_ii: }
-\__witharrows_msg_new:nnn { Value~for~a~key }
-  {
-    Misuse~of~a~key.\\
-    The~key~'\l_keys_key_str'~should~be~used~without~value. \\
-    However,~you~can~go~on~for~this~time.
-    \__witharrows_potential_body_i:
-  }
-  { \__witharrows_potential_body_ii: }
-\__witharrows_msg_new:nnn { Unknown~option~in~Arrow }
-  {
-    Unknown~option.\\
-    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 \\
-    \c__witharrows_option_ignored_str \\
-    \c__witharrows_available_keys_str
-  }
-  {
-    The~available~keys~are~(in~alphabetic~order):~
-    \seq_use:Nnnn \l__witharrows_options_Arrow_seq {~and~} {,~} {~and~}.
-  }
-\__witharrows_msg_new:nnn { Unknown~option~WithArrows }
-  {
-    Unknown~option.\\
-    The~key~'\l_keys_key_str'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
-    \c__witharrows_option_ignored_str \\
-    \c__witharrows_available_keys_str
-  }
-  {
-    The~available~keys~are~(in~alphabetic~order):~
-    \seq_use:Nnnn \l__witharrows_options_WithArrows_seq {~and~} {,~} {~and~}.
-  }
-\__witharrows_msg_new:nnn { Unknown~option~DispWithArrows }
-  {
-    Unknown~option.\\
-    The~key~'\l_keys_key_str'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
-    \c__witharrows_option_ignored_str \\
-    \c__witharrows_available_keys_str
-  }
-  {
-    The~available~keys~are~(in~alphabetic~order):~
-    \seq_use:Nnnn \l__witharrows_options_DispWithArrows_seq {~and~} {,~} {~and~}.
-  }
-\__witharrows_msg_new:nnn { Unknown~option~WithArrowsOptions }
-  {
-    Unknown~option.\\
-    The~key~'\l_keys_key_str'~is~unknown~in~
-    \token_to_str:N \WithArrowsOptions. \\
-    \c__witharrows_option_ignored_str \\
-    \c__witharrows_available_keys_str
-  }
-  {
-    The~available~keys~are~(in~alphabetic~order):~
-    \seq_use:Nnnn \l__witharrows_options_WithArrowsOptions_seq {~and~} {,~} {~and~}.
-  }
-\__witharrows_msg_new:nnn { Unknown~option~Arrow~in~code-after }
-  {
-    Unknown~option.\\
-    The~key~'\l_keys_key_str'~is~unknown~in~
-    \token_to_str:N \Arrow\ in~code-after. \\
-    \c__witharrows_option_ignored_str \\
-    \c__witharrows_available_keys_str
-  }
-  {
-    The~available~keys~are~(in~alphabetic~order):~
-    \seq_use:Nnnn \l__witharrows_options_Arrow_code_after_seq {~and~} {,~} {~and~}.
-  }
-\__witharrows_msg_new:nnn { Too~much~columns~in~WithArrows }
-  {
-    Too~much~columns.\\
-    Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N
-    \l__witharrows_nb_cols_int\ columns~and~you~try~to~use~one~more.~
-    Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str.~
-    If~you~really~want~to~use~more~columns~(after~the~arrows)~you~should~use~
-    the~option~'more-columns'~at~a~global~level~or~for~an~environment. \\
-    However,~you~can~go~one~for~this~time.
-    \__witharrows_potential_body_i:
-  }
-  { \__witharrows_potential_body_ii: }
-\__witharrows_msg_new:nnn { Too~much~columns~in~DispWithArrows }
-  {
-    Too~much~columns.\\
-    Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N
-    \l__witharrows_nb_cols_int\ columns~and~you~try~to~use~one~more.~
-    Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str\
-    at~the~end~of~row~\int_use:N \g__witharrows_line_int. \\
-    This~error~is~fatal.
-    \__witharrows_potential_body_i:
-  }
-  { \__witharrows_potential_body_ii: }
-\__witharrows_msg_new:nn { Negative~jump }
-  {
-    Incorrect~value.\\
-    You~can't~use~a~negative~value~for~the~option~'jump'~of~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\}.~
-    You~can~create~an~arrow~going~backwards~with~the~option~'<-'~of~Tikz. \\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nn { new-group~without~groups }
-  {
-    Misuse~of~a~key.\\
-    You~can't~use~the~option~'new-group'~for~the~command~
-    \l__witharrows_string_Arrow_for_msg_str\
-    because~you~are~not~in~'groups'~mode.~Try~to~use~the~option~
-    'groups'~in~your~environment~\{\l__witharrows_type_env_str\}. \\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nnn
-  { Too~few~lines~for~an~arrow }
-  {
-    Impossible~arrow.\\
-    Line~\l__witharrows_input_line_str\
-    :~an~arrow~specified~in~the~row~\int_use:N \l__witharrows_initial_int\
-    of~your~environment~\{\l__witharrows_type_env_str\}~can't~be~drawn~
-    because~it~arrives~after~the~last~row~of~the~environment. \\
-    If~you~go~on,~this~arrow~will~be~ignored.
-    \__witharrows_potential_body_i:
-  }
-  { \__witharrows_potential_body_ii: }
-\__witharrows_msg_new:nn { o~arrow~with~no~arrow~under }
-  {
-    Problem~with~the~key~'o'.\\
-    Line~\l__witharrows_input_line_str\
-    :~there~is~no~arrow~'under'~your~arrow~of~type~'o'.\\
-    If~you~go~on,~this~arrow~won't~be~drawn.
-  }
-\__witharrows_msg_new:nnn { WithArrows~outside~math~mode }
-  {
-    You~are~outside~math~mode.\\
-    The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~in~math~mode~
-    like~the~environment~\{aligned\}~of~amsmath. \\
-    Nevertheless,~you~can~go~on.
-    \__witharrows_potential_body_i:
-  }
-  { \__witharrows_potential_body_ii: }
-\__witharrows_msg_new:nnn { DispWithArrows~in~math~mode }
-  {
-    You~are~in~math~mode.\\
-    The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~outside~math~
-    mode~like~the~environments~\{align\}~and~\{align*\}~of~amsmath. \\
-    This~error~is~fatal.
-    \__witharrows_potential_body_i:
-  }
-  { \__witharrows_potential_body_ii: }
-\__witharrows_msg_new:nn { Incompatible~options~in~Arrow }
-  {
-    Incompatible~options.\\
-    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. \\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nn { Incompatible~options a}
-  {
-    Incompatible~options.\\
-    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
-      {
-        \l__witharrows_string_Arrow_for_msg_str\
-        in~the~code-after~of~your~environment~\{\l__witharrows_type_env_str\}
-      }. \\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nnn { Arrow~not~in~last~column }
-  {
-    Bad~use~of~\l__witharrows_string_Arrow_for_msg_str.\\
-    You~should~use~the~command~\l__witharrows_string_Arrow_for_msg_str\
-    only~in~the~last~column~(column~\int_use:N\l__witharrows_nb_cols_int)~
-    in~the~row~\int_use:N \g__witharrows_line_int\
-    of~your~environment~\{\l__witharrows_type_env_str\}.\\
-    However~you~can~go~on~for~this~time.
-    \__witharrows_potential_body_i:
-  }
-  { \__witharrows_potential_body_ii: }
-\__witharrows_msg_new:nn { Wrong~line~in~Arrow }
-  {
-    Wrong~line.\\
-    The~specification~of~line~'#1'~you~use~in~the~command~
-    \l__witharrows_string_Arrow_for_msg_str\
-    in~the~'code-after'~of~\{\l__witharrows_type_env_str\}~doesn't~exist. \\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nn { Both~lines~are~equal }
-  {
-    Both~lines~are~equal.\\
-    In~the~'code-after'~of~\{\l__witharrows_type_env_str\}~you~try~to~
-    draw~an~arrow~going~to~itself~from~the~line~'#1'.~This~is~not~possible. \\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nn { Wrong~line~specification~in~MultiArrow }
-  {
-    Wrong~line~specification.\\
-    The~specification~of~line~'#1'~doesn't~exist. \\
-    If~you~go~on,~it~will~be~ignored~for~\token_to_str:N \MultiArrow.
-  }
-\__witharrows_msg_new:nn { Too~small~specification~for~MultiArrow }
-  {
-    Too~small~specification.\\
-    The~specification~of~lines~you~gave~to~\token_to_str:N \MultiArrow\
-    is~too~small:~you~need~at~least~two~lines. \\
-    \c__witharrows_command_ignored_str
-  }
-\__witharrows_msg_new:nn { Not~allowed~in~DispWithArrows }
-  {
-    Forbidden~command.\\
-    The~command~\token_to_str:N #1
-    is~allowed~only~in~the~last~column~
-    (column~\int_use:N\l__witharrows_nb_cols_int)~of~\{\l__witharrows_type_env_str\}. \\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nn { Not~allowed~in~WithArrows }
-  {
-    Forbidden~command.\\
-    The~command~\token_to_str:N #1 is~not~allowed~in~\{\l__witharrows_type_env_str\}~
-    (it's~allowed~in~the~last~column~of~\{DispWithArrows\}). \\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nn { Inexistent~v-node }
-  {
-    There~is~a~problem.\\
-    Maybe~you~have~put~a~command~\token_to_str:N\cr\
-    instead~of~a~command~\token_to_str:N\\~at~the~end~of~
-    the~row~\l_tmpa_int\
-    of~your~environment~\{\l__witharrows_type_env_str\}. \\
-    This~error~is~fatal.
-  }
-\__witharrows_msg_new:nn { Option~xoffset~forbidden }
-  {
-    Incorrect~key.\\
-    You~can't~use~the~option~'xoffset'~in~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\}~
-    because~you~are~using~the~option~
-    ' \int_compare:nNnTF \l__witharrows_pos_arrow_int = 7
-        { group }
-        { groups } '.~It's~possible~for~an~independent~arrow~or~if~there~is~
-    only~one~arrow. \\
-    \c__witharrows_option_ignored_str
-  }
-\__witharrows_msg_new:nnn { Duplicate~name }
-  {
-    Duplicate~name.\\
-    The~name~'\l_keys_value_tl'~is~already~used~and~you~shouldn't~use~
-    the~same~environment~name~twice.~You~can~go~on,~but,~
-    maybe,~you~will~have~incorrect~results. \\
-    For~a~list~of~the~names~already~used,~type~H~<return>. \\
-    If~you~don't~want~to~see~this~message~again,~use~the~option~
-    'allow-duplicate-names'.
-  }
-  {
-    The~names~already~defined~in~this~document~are:~
-    \seq_use:Nnnn \g__witharrows_names_seq { ,~ } { ,~ } { ~and~ }.
-  }
-\__witharrows_msg_new:nn { Invalid~specification~for~MultiArrow }
-  {
-    Invalid~specification.\\
-    The~specification~of~rows~for~\token_to_str:N\MultiArrow\
-    (i.e.~#1)~is~invalid. \\
-    \c__witharrows_command_ignored_str
-  }
-\cs_new_protected:Npn \WithArrowsNewStyle #1 #2
-  {
-    \keys_if_exist:nnTF { WithArrows / Global } { #1 }
-      { \__witharrows_error:nn { Key~already~defined } { #1 } }
-      {
-        \seq_clear:N \l_tmpa_seq
-        \keyval_parse:NNn \__witharrows_valid_key:n \__witharrows_valid_key:nn { #2 }
-        \seq_if_empty:NTF \l_tmpa_seq
-          {
-            \seq_put_right:Nx \l__witharrows_options_WithArrows_seq
-              { \tl_to_str:n { #1 } }
-            \seq_put_right:Nx \l__witharrows_options_DispWithArrows_seq
-              { \tl_to_str:n { #1 } }
-            \seq_put_right:Nx \l__witharrows_options_WithArrowsOptions_seq
-              { \tl_to_str:N { #1 } }
-            \cs_if_exist:NTF \keys_precompile:nnN
-              {
-                \keys_precompile:nnN
-                  { WithArrows / WithArrowsOptions }
-                  { #2 }
-                  \l_tmpa_tl
-                \__witharrows_key_define:nV { #1 } \l_tmpa_tl
-              }
-              {
-                \keys_define:nn { WithArrows / Global }
-                  {
-                    #1 .code:n =
-                     { \keys_set:nn { WithArrows / WithArrowsOptions } { #2 } }
-                  }
-              }
-          }
-          { \__witharrows_error:nn { Impossible~style } { #1 } }
-      }
-  }
-\__witharrows_msg_new:nn { Impossible~style }
-  {
-    Impossible~style.\\
-    It's~impossible~to~define~the~style~'#1'~
-    because~it~contains~unknown~keys:~'
-    \seq_use:Nnnn \l_tmpa_seq { '~and~' } { ',~'} { ',~and~}'.
-  }
-\cs_new_protected:Npn \__witharrows_valid_key:n #1
-  {
-    \keys_if_exist:nnF { WithArrows / Global } { #1 }
-      { \seq_put_right:Nn \l_tmpa_seq { #1 } }
-  }
-\cs_new_protected:Npn \__witharrows_valid_key:nn #1 #2
-  {
-    \keys_if_exist:nnF { WithArrows / Global } { #1 }
-      { \seq_put_right:Nn \l_tmpa_seq { #1 } }
-  }
-\cs_new_protected:Npn \__witharrows_key_define:nn #1 #2
-  { \keys_define:nn { WithArrows / Global } { #1 .code:n = #2 } }
-\cs_generate_variant:Nn \__witharrows_key_define:nn { n V }
-\__witharrows_msg_new:nn { Key~already~defined }
-  {
-    Key~already~define.\\
-    The~key~'#1'~is~already~defined. \\
-    If~you~go~on,~your~instruction~\token_to_str:N\WithArrowsNewStyle\
-    will~be~ignored.
-  }
-\keys_define:nn { WithArrows / up-and-down }
-  {
-    radius .dim_set:N = \l__witharrows_up_and_down_radius_dim ,
-    radius .value_required:n = true ,
-    width .code:n =
-      \str_case:nnF { #1 }
-        {
-          { min } { \dim_zero:N \l__witharrows_arrow_width_dim }
-          { max } { \dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim }
-        }
-        { \dim_set:Nn \l__witharrows_arrow_width_dim { #1 } } ,
-    width .value_required:n = true ,
-    unknown .code:n = \__witharrows_error:n { Option~unknown~for~up-and-down }
-  }
-\__witharrows_msg_new:nn { Option~unknown~for~up-and-down }
-  {
-    Unknown~option.\\
-    The~option~'\l_keys_key_str'~is~unknown.~\c__witharrows_option_ignored_str
-  }
-\tl_const:Nn \c__witharrows_tikz_code_up_tl
-  {
-    \dim_case:nnF \l__witharrows_arrow_width_dim
-      {
-        \c_max_dim
-          {
-            \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
-              let \p1 = ( #1 ) , \p2 = ( #2 )
-              in (\p1) -- node { #3 } (\x2,\y1) -- (\p2) ;
-          }
-        \c_zero_dim
-          {
-            \path node
-              {
-                \hbox_gset:Nn \g_tmpa_box { #3 }
-                \dim_gset:Nn \g_tmpa_dim
-                  { \box_wd:N \g_tmpa_box + \l__witharrows_up_and_down_radius_dim }
-              } ;
-            \draw
-              let \p1 = ( #1 ) , \p2 = ( #2 )
-              in (\x2-\g_tmpa_dim,\y1)
-                 -- node { \box_use:N \g_tmpa_box }
-                 (\x2-\l__witharrows_up_and_down_radius_dim,\y1)
-                 [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
-                 -| (\p2) ;
-          }
-      }
-      {
-        \draw
-          let \p1 = ( #1 ) , \p2 = ( #2 )
-          in (\x2 - \l__witharrows_arrow_width_dim - \l__witharrows_up_and_down_radius_dim,\y1)
-             -- node { #3 } (\x2-\l__witharrows_up_and_down_radius_dim,\y1)
-             [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
-             -| (\p2) ;
-      }
-  }
-\tl_const:Nn \c__witharrows_tikz_code_down_tl
-  {
-    \dim_case:nnF \l__witharrows_arrow_width_dim
-      {
-        \c_max_dim
-          {
-            \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
-              let \p1 = ( #1 ) , \p2 = ( #2 )
-              in (\p1) -- (\x1,\y2) -- node { #3 } (\p2) ;
-          }
-        \c_zero_dim
-          {
-            \path node
-              {
-                \hbox_gset:Nn \g_tmpa_box { #3 }
-                \dim_gset:Nn \g_tmpa_dim
-                  { \box_wd:N \g_tmpa_box + \l__witharrows_up_and_down_radius_dim }
-              } ;
-            \draw
-              let \p1 = ( #1 ) , \p2 = ( #2 )
-              in (\p1)
-                 { [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] -- (\x1,\y2) }
-                 -- (\x1-\l__witharrows_up_and_down_radius_dim,\y2)
-                 -- node { \box_use:N \g_tmpa_box } (\x1-\g_tmpa_dim,\y2)
-                 -- ++ (-2mm,0) ;
-          }
-      }
-      {
-        \draw
-          let \p1 = ( #1 ) , \p2 = ( #2 )
-          in (\p1)
-             { [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] -- (\x1,\y2) }
-             -- (\x1-\l__witharrows_up_and_down_radius_dim,\y2)
-             -- node { #3 }
-                (\x1 - \l__witharrows_arrow_width_dim - \l__witharrows_up_and_down_radius_dim,\y2)
-             -- ++ (-2mm,0) ;
-      }
-  }
-\keys_define:nn { WithArrows / Arrow / FirstPass }
-  {
-    up   .code:n = \__witharrows_set_independent_bis: ,
-    down .code:n = \__witharrows_set_independent_bis: ,
-    up   .default:n = NoValue ,
-    down .default:n = NoValue
-  }
-\keys_define:nn { WithArrows / Arrow / SecondPass }
-  {
-    up .code:n =
-      \str_if_empty:NT \l__witharrows_previous_key_str
-        {
-          \str_set:Nn \l__witharrows_previous_key_str { up }
-          \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 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
-            }
-            { \__witharrows_error:n { calc~not~loaded } }
-        } ,
-    down .code:n =
-      \str_if_empty:NT \l__witharrows_previous_key_str
-        {
-          \str_set:Nn \l__witharrows_previous_key_str { down }
-          \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 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
-            }
-            { \__witharrows_error:n { calc~not~loaded } }
-        }
-  }
-\seq_put_right:Nn \l__witharrows_options_Arrow_seq { down }
-\seq_put_right:Nn \l__witharrows_options_Arrow_seq { up }
-\__witharrows_msg_new:nn { calc~not~loaded }
-  {
-    calc~not~loaded.\\
-    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
-  }
-\catcode `\@ = 12
-\ExplSyntaxOff
-\endinput
-%%
-%% End of file `witharrows.tex'.

Added: trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.tex	2024-02-19 21:38:09 UTC (rev 69995)
@@ -0,0 +1,2156 @@
+%%
+%% This is file `witharrows.tex',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% witharrows.dtx  (with options: `plain-TeX')
+%% 
+%% Copyright (C) 2017-2023 by F. Pantigny
+%% 
+%% This file may be distributed and/or modified under the
+%% conditions of the LaTeX Project Public License, either
+%% version 1.3 of this license or (at your option) any later
+%% version.  The latest version of this license is in:
+%% 
+%%      http://www.latex-project.org/lppl.txt
+%% 
+%% and version 1.3 or later is part of all distributions of
+%% LaTeX version 2005/12/01 or later.
+%% 
+\def\myfileversion{2.8b}
+\def\myfiledate{2023/08/24}
+\input tikz.tex
+\input expl3-generic.tex
+\usetikzlibrary{arrows.meta}
+\usepgfmodule{bending} % https://texnique.fr/osqa/questions/12199
+\ExplSyntaxOn
+\catcode `\@ = 11
+\cs_new_protected:Npn \__witharrows_msg_new:nn { \msg_new:nnn { witharrows } }
+\cs_new_protected:Npn \__witharrows_msg_new:nnn #1 #2 #3
+  {
+    \bool_if:NTF \c__witharrows_messages_for_Overleaf_bool
+      { \msg_new:nnn { witharrows } { #1 } { #2 \\ #3 } }
+      { \msg_new:nnnn { witharrows } { #1 } { #2 } { #3 } }
+  }
+\cs_new_protected:Npn \__witharrows_msg_redirect_name:nn
+  { \msg_redirect_name:nnn { witharrows } }
+\cs_new_protected:Npn \__witharrows_error:n { \msg_error:nn { witharrows } }
+\cs_new_protected:Npn \__witharrows_warning:n { \msg_warning:nn { witharrows } }
+\cs_new_protected:Npn \__witharrows_fatal:n { \msg_fatal:nn { witharrows } }
+\cs_new_protected:Npn \__witharrows_error:nn  { \msg_error:nnn { witharrows } }
+\cs_generate_variant:Nn \__witharrows_error:nn { n x }
+\cs_new_protected:Npn \__witharrows_error_or_warning:n
+  { \bool_if:NTF \c__witharrows_messages_for_Overleaf_bool \__witharrows_warning:n \__witharrows_error:n }
+\bool_set:Nn \c__witharrows_messages_for_Overleaf_bool
+  {
+       \str_if_eq_p:Vn \c_sys_jobname_str { _region_ }  % for Emacs
+    || \str_if_eq_p:Vn \c_sys_jobname_str { output }   % for Overleaf
+  }
+\cs_generate_variant:Nn \seq_set_split:Nnn { N x x }
+\cs_new_protected:Npn \__witharrows_sort_seq:N #1
+  {
+    \seq_sort:Nn #1
+      {
+        \str_compare:eNeTF
+          { \str_lowercase:n { ##1 } } < { \str_lowercase:n { ##2 } }
+          \sort_return_same:
+          \sort_return_swapped:
+      }
+  }
+\cs_new_protected:Npn \__witharrows_set_seq_of_str_from_clist:Nn #1 #2
+  {
+    \seq_set_from_clist:Nn #1 { #2 }
+    \seq_set_map_x:NNn #1 #1 { \tl_to_str:n { ##1 } }
+  }
+\cs_new_protected:Npn \__witharrows_save:N #1
+  {
+    \seq_set_split:Nxx \l_tmpa_seq
+       { \char_generate:nn { `_ } { 12 } }
+       { \cs_to_str:N #1 }
+    \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+    \str_set:Nx \l_tmpa_str { \seq_item:Nn \l_tmpa_seq { -1 } }
+    \use:c { \l_tmpa_str _if_exist:cF }
+      { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ }
+      {
+        \use:c { \l_tmpa_str _new:c }
+          { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ }
+      }
+    \use:c { \l_tmpa_str _gset_eq:cN }
+      { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ } #1
+  }
+\cs_new_protected:Npn \__witharrows_restore:N #1
+  {
+    \seq_set_split:Nxx \l_tmpa_seq
+      { \char_generate:nn { `_ } { 12 } }
+      { \cs_to_str:N #1 }
+    \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl
+    \str_set:Nx \l_tmpa_str { \seq_item:Nn \l_tmpa_seq { -1 } }
+    \use:c { \l_tmpa_str _set_eq:Nc }
+      #1 { g_\seq_use:Nnnn \l_tmpa_seq _ _ _ }
+  }
+\tikzset
+  {
+    __witharrows_node_style / .style =
+      {
+        above = \l__witharrows_ystart_dim ,
+        inner~sep = \c_zero_dim ,
+        minimum~width = \c_zero_dim ,
+        minimum~height = \l__witharrows_ygap_dim
+      }
+  }
+\tikzset
+  {
+    __witharrows_standard / .style =
+      {
+        remember~picture ,
+        overlay ,
+        name~prefix = wa - \l__witharrows_prefix_str -
+      } ,
+    __witharrows_standard_arrow / .style =
+      {
+        __witharrows_standard ,
+        every~path / .style = WithArrows / arrow
+      }
+  }
+\sys_if_engine_xetex:T
+  {
+    \tikzset
+      {
+        __witharrows_standard_arrow / .append~style =
+          { every~node / .append~style = { text = . } }
+      }
+  }
+\tikzset
+  {
+    WithArrows / arrow / tips / .style =
+      { > = { Straight~Barb [ scale = 1.2 , bend ] } }
+  }
+\tikzset
+ {
+   WithArrows / arrow / .style  =
+     {
+       align = flush~left ,
+       auto = left ,
+       WithArrows / arrow / tips ,
+       bend~left = 45 ,
+       ->
+     }
+ }
+        \cs_new_protected:Npn \spread at equation
+          {
+            \openup \jot
+            \cs_set_eq:NN \spread at equation \prg_do_nothing:
+          }
+\tl_new:N \l__witharrows_left_brace_tl
+\tl_set_eq:NN \l__witharrows_left_brace_tl \c_novalue_tl
+\bool_new:N \l__witharrows_in_WithArrows_bool
+\bool_new:N \l__witharrows_in_DispWithArrows_bool
+\bool_new:N \l__witharrows_in_code_after_bool
+\seq_new:N \g__witharrows_position_in_the_tree_seq
+\seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1
+\int_new:N \g__witharrows_last_env_int
+\int_new:N \l__witharrows_pos_env_int
+\int_new:N \l__witharrows_pos_arrow_int
+\int_set:Nn \l__witharrows_pos_arrow_int 3
+\seq_new:N \g__witharrows_arrow_int_seq
+\int_new:N \g__witharrows_arrow_int
+\seq_new:N \g__witharrows_line_int_seq
+\int_new:N \g__witharrows_line_int
+\seq_new:N \g__witharrows_col_int_seq
+\int_new:N \g__witharrows_col_int
+\seq_new:N \g__witharrows_static_col_int_seq
+\int_new:N \g__witharrows_static_col_int
+\str_new:N \l__witharrows_command_name_str
+\str_set:Nn \l__witharrows_command_name_str { Arrow }
+\str_new:N \l__witharrows_string_Arrow_for_msg_str
+\str_set:Nx \l__witharrows_string_Arrow_for_msg_str { \token_to_str:N \Arrow }
+\seq_new:N \g__witharrows_names_seq
+\bool_new:N \l__witharrows_in_first_columns_bool
+\bool_new:N \l__witharrows_new_group_bool
+\bool_new:N \l__witharrows_initial_r_bool
+\bool_new:N \l__witharrows_final_r_bool
+\tl_new:N \l__witharrows_initial_tl
+\tl_new:N \l__witharrows_final_tl
+\int_new:N \l__witharrows_nb_cols_int
+\str_new:N \l__witharrows_format_str
+\dim_new:N \l__witharrows_arrow_width_dim
+\dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim
+\dim_new:N \l__witharrows_up_and_down_radius_dim
+\dim_set:Nn \l__witharrows_up_and_down_radius_dim { 4 pt }
+\seq_new:N \l__witharrows_o_arrows_seq
+\dim_new:N \l__witharrows_xoffset_for_o_arrows_dim
+\dim_set:Nn \l__witharrows_xoffset_for_o_arrows_dim { 2 mm }
+\bool_new:N \l__witharrows_right_overlap_bool
+\bool_set_true:N \l__witharrows_right_overlap_bool
+\cs_new_protected:Npn \__witharrows_eval_if_allowed:n #1
+  {
+    \str_if_empty:NTF \l__witharrows_previous_key_str
+      {
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
+        #1
+      }
+      { \__witharrows_error:n { Incompatible~options } }
+  }
+\cs_new_protected:Npn \__witharrows_fix_pos_option:n #1
+  { \__witharrows_eval_if_allowed:n { \int_set:Nn \l__witharrows_pos_arrow_int { #1 } } }
+\keys_define:nn { WithArrows / Global }
+  {
+    max-length-of-arrow .dim_set:N = \l__witharrows_max_length_of_arrow_dim ,
+    max-length-of-arrow .value_required:n = true ,
+    max-length-of-arrow .initial:n = 2 cm ,
+    ygap .dim_set:N = \l__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)~; ,
+    tikz-code .value_required:n = true ,
+    displaystyle .bool_set:N = \l__witharrows_displaystyle_bool ,
+    displaystyle .default:n = true ,
+    show-nodes .code:n =
+      \tikzset { __witharrows_node_style / .append~style = { draw , red } } ,
+    show-node-names .bool_set:N = \l__witharrows_show_node_names_bool ,
+    show-node-names .default:n = true ,
+    group .code:n =
+      \str_if_empty:NTF \l__witharrows_previous_key_str
+        {
+          \str_set:Nn \l__witharrows_previous_key_str { group }
+          \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset }
+          \int_set:Nn \l__witharrows_pos_arrow_int 7
+        }
+        { \__witharrows_error:n { Incompatible~options } } ,
+    group  .value_forbidden:n = true ,
+    groups .code:n =
+      \str_if_empty:NTF \l__witharrows_previous_key_str
+        {
+          \str_set:Nn \l__witharrows_previous_key_str { groups }
+          \seq_if_in:NnF \l__witharrows_options_Arrow_seq { new-group }
+            { \seq_put_right:Nn \l__witharrows_options_Arrow_seq { new-group } }
+          \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset }
+          \int_set:Nn \l__witharrows_pos_arrow_int 6
+        }
+        { \__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 ,
+    right-overlap .bool_set:N       = \l__witharrows_right_overlap_bool ,
+    right-overlap .value_required:n = true
+  }
+\clist_new:N \c__witharrows_ext_delimiters_clist
+\clist_set:Nn \c__witharrows_ext_delimiters_clist
+  {
+    ., \{, (, [, \lbrace, \lbrack, \lgroup, \langle, \lmoustache, \lceil, \lfloor
+  }
+\keys_define:nn { WithArrows / DispWithArrowsSpecific }
+  {
+    fleqn .bool_set:N = \l__witharrows_fleqn_bool ,
+    fleqn .default:n = true ,
+    mathindent .skip_set:N = \l__witharrows_mathindent_skip ,
+    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 =
+      {
+        \tl_set:Nx \l_tmpa_tl { \tl_head:n { #1 } }
+        \clist_if_in:NVTF
+          \c__witharrows_ext_delimiters_clist
+          \l_tmpa_tl
+          { \tl_set:Nn \l__witharrows_replace_left_brace_by_tl { #1 } }
+          { \__witharrows_error:n { Bad~value~for~replace~brace~by } }
+      } ,
+    replace-left-brace-by .initial:n = \lbrace ,
+  }
+\keys_define:nn { WithArrows / Env }
+  {
+    name .code:n =
+      \str_set:Nn \l_tmpa_str { #1 }
+      \seq_if_in:NVTF \g__witharrows_names_seq \l_tmpa_str
+        { \__witharrows_error:n { Duplicate~name } }
+        { \seq_gput_left:NV \g__witharrows_names_seq \l_tmpa_str }
+      \str_set_eq:NN \l__witharrows_name_str \l_tmpa_str ,
+    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 }
+        { \__witharrows_error:n { Invalid~option~format } }
+        {
+          \regex_match:nnTF { \A[rclRCL]*\Z } { #1 }
+            { \tl_set:Nn \l__witharrows_format_str { #1 } }
+            { \__witharrows_error:n { Invalid~option~format } }
+        } ,
+    format .value_required:n = true
+  }
+\keys_define:nn { WithArrows }
+  {
+    WithArrows .inherit:n =
+      {
+        WithArrows / Global ,
+        WithArrows / WithArrowsSpecific ,
+        WithArrows / Env
+      } ,
+    WithArrows / up-and-down .inherit:n = WithArrows / up-and-down ,
+    DispWithArrows .inherit:n =
+      {
+        WithArrows / DispWithArrowsSpecific ,
+        WithArrows / Global ,
+        WithArrows / Env ,
+      } ,
+    DispWithArrows / up-and-down .inherit:n = WithArrows / up-and-down ,
+    WithArrowsOptions .inherit:n =
+      {
+        WithArrows / Global ,
+        WithArrows / WithArrowsSpecific ,
+        WithArrows / DispWithArrowsSpecific ,
+      } ,
+    WithArrowsOptions / up-and-down .inherit:n = WithArrows / up-and-down
+  }
+\seq_new:N \l__witharrows_options_WithArrows_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrows_seq
+  {
+    adjust, b, c, code-after, code-before, command-name,
+    right-overlap, displaystyle, end-adjust,
+    format, group, groups, i,
+    interline, jot, ll,
+    lr, max-length-of-arrow, more-columns, name,
+    no-arrows, rl, rr, up-and-down,
+    show-node-names, show-nodes, start-adjust,
+    t, tikz, tikz-code,
+    xoffset, ygap, ystart
+  }
+\keys_define:nn { WithArrows / WithArrows }
+  {
+    unknown .code:n  =
+      \__witharrows_sort_seq:N \l__witharrows_options_WithArrows_seq
+      \__witharrows_error:n { Unknown~option~WithArrows }
+  }
+\keys_define:nn { WithArrows / DispWithArrows }
+  {
+    left-brace .tl_set:N = \l__witharrows_left_brace_tl ,
+    unknown .code:n  =
+      \__witharrows_sort_seq:N \l__witharrows_options_DispWithArrows_seq
+      \__witharrows_error:n { Unknown~option~DispWithArrows } ,
+  }
+\seq_new:N \l__witharrows_options_DispWithArrows_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_DispWithArrows_seq
+  {
+    code-after, code-before, command-name, tikz-code, adjust,
+    displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot,
+    left-brace, ll, lr, max-length-of-arrow, mathindent, name, no-arrows,
+    up-and-down, replace-left-brace-by, rl, rr, show-node-names,
+    show-nodes, start-adjust, tikz, wrap-lines, xoffset, ygap, ystart,
+  }
+\keys_define:nn { WithArrows / WithArrowsOptions }
+  {
+    allow-duplicate-names .code:n =
+      \__witharrows_msg_redirect_name:nn { Duplicate~name } { none } ,
+    allow-duplicate-names .value_forbidden:n = true ,
+    xoffset-for-o-arrows .dim_set:N = \l__witharrows_xoffset_for_o_arrows_dim ,
+    xoffset-for-o-arrows .value_required:n = true ,
+    unknown .code:n  =
+      \__witharrows_sort_seq:N \l__witharrows_options_WithArrowsOptions_seq
+      \__witharrows_error:n { Unknown~option~WithArrowsOptions }
+  }
+\seq_new:N \l__witharrows_options_WithArrowsOptions_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrowsOptions_seq
+  {
+    allow-duplicate-names, b, c, command-name, right_overlap,
+    more-columns, tikz-code, adjust,
+    displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr,
+    mathindent, max-length-of-arrow, no-arrows, up-and-down, rl, rr,
+    show-node-names, show-nodes, start-adjust, t, tikz, wrap-lines, xoffset,
+    xoffset-for-o-arrows, ygap, ystart,
+  }
+\cs_new_protected:Npn \__witharrows_set_independent:
+  {
+    \str_if_eq:VnF \l_keys_value_tl { NoValue }
+      { \__witharrows_error:n { Value~for~a~key } }
+    \__witharrows_set_independent_bis:
+  }
+\cs_new_protected:Npn \__witharrows_set_independent_bis:
+  {
+    \str_if_empty:NTF \l__witharrows_previous_key_str
+      {
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
+        \str_set:Nn \l__witharrows_status_arrow_str { independent }
+      }
+      { \__witharrows_error:n { Incompatible~options~in~Arrow } }
+  }
+\keys_define:nn { WithArrows / Arrow / FirstPass }
+  {
+    jump .code:n =
+      \int_compare:nTF { #1 > 0 }
+        { \int_set:Nn \l__witharrows_jump_int { #1 } }
+        { \__witharrows_error:n { Negative~jump } } ,
+    jump .value_required:n  = true,
+    rr .code:n = \__witharrows_set_independent: ,
+    ll .code:n = \__witharrows_set_independent: ,
+    rl .code:n = \__witharrows_set_independent: ,
+    lr .code:n = \__witharrows_set_independent: ,
+    i  .code:n = \__witharrows_set_independent: ,
+    rr .default:n = NoValue ,
+    ll .default:n = NoValue ,
+    rl .default:n = NoValue ,
+    lr .default:n = NoValue ,
+    i  .default:n = NoValue ,
+    new-group .value_forbidden:n = true ,
+    new-group .code:n =
+      \int_compare:nTF { \l__witharrows_pos_arrow_int = 6 }
+        { \str_set:Nn \l__witharrows_status_arrow_str { new-group } }
+        { \__witharrows_error:n { new-group~without~groups } } ,
+    o .code:n =
+      \str_if_empty:NTF \l__witharrows_previous_key_str
+        {
+          \int_compare:nNnTF \l__witharrows_pos_arrow_int < 6
+            { \__witharrows_error:n { invalid~key~o } }
+            {
+              \str_set:Nn \l__witharrows_status_arrow_str { over }
+              \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
+            }
+        }
+        { \__witharrows_error:n { Incompatible~options~in~Arrow } } ,
+    tikz-code .code:n = \prg_do_nothing: ,
+    tikz-code .value_required:n = true ,
+    tikz .code:n = \prg_do_nothing: ,
+    tikz .value_required:n = true ,
+    start-adjust .code:n = \prg_do_nothing: ,
+    start-adjust .value_required:n = true ,
+    end-adjust .code:n = \prg_do_nothing: ,
+    end-adjust .value_required:n = true ,
+    adjust .code:n  = \prg_do_nothing: ,
+    adjust .value_required:n = true ,
+    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_str
+        {
+          \str_set:Nn \l_tmpa_str
+           { ~However,~this~key~can~be~used~in~the~options~of~{WithArrows}. }
+        }
+        { \str_clear:N \l_tmpa_str }
+      \__witharrows_error:n { Unknown~option~in~Arrow }
+  }
+\seq_new:N \l__witharrows_options_Arrow_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_seq
+  {
+    adjust, end-adjust, i, jump, ll, lr, o , rl, rr, start-adjust, tikz,
+    tikz-code, xoffset
+  }
+\cs_new_protected:Npn \__witharrows_fix_pos_arrow:n #1
+  {
+    \str_if_empty:NT \l__witharrows_previous_key_str
+      {
+        \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_str
+        \int_set:Nn \l__witharrows_pos_arrow_int { #1 }
+      }
+  }
+\keys_define:nn {WithArrows / Arrow / SecondPass }
+  {
+    tikz-code .tl_set:N = \l__witharrows_tikz_code_tl ,
+    tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; ,
+    tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
+    tikz .initial:n = \c_empty_tl ,
+    rr .code:n = \__witharrows_fix_pos_arrow:n 3 ,
+    ll .code:n = \__witharrows_fix_pos_arrow:n 1 ,
+    rl .code:n = \__witharrows_fix_pos_arrow:n 2 ,
+    lr .code:n = \__witharrows_fix_pos_arrow:n 0 ,
+    i  .code:n = \__witharrows_fix_pos_arrow:n 5 ,
+    o  .code:n = \str_set:Nn \l__witharrows_previous_key_str { o } ,
+    xoffset .code:n  =
+      \bool_if:nTF
+        {
+          \int_compare_p:nNn \g__witharrows_arrow_int > 1
+          &&
+          \int_compare_p:nNn \l__witharrows_pos_arrow_int > 5
+          &&
+          ! \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent }
+        }
+        { \__witharrows_error:n { Option~xoffset~forbidden } }
+        { \dim_set:Nn \l__witharrows_xoffset_dim { #1 } } ,
+    xoffset .value_required:n = true ,
+    start-adjust .dim_set:N = \l__witharrows_start_adjust_dim,
+    end-adjust .dim_set:N = \l__witharrows_end_adjust_dim,
+    adjust .code:n  =
+      \dim_set:Nn \l__witharrows_start_adjust_dim { #1 }
+      \dim_set:Nn \l__witharrows_end_adjust_dim { #1 } ,
+  }
+\cs_set_protected:Npn \WithArrowsOptions #1
+  {
+    \str_clear_new:N \l__witharrows_previous_key_str
+    \keys_set:nn { WithArrows / WithArrowsOptions } { #1 }
+  }
+\cs_new_protected:Npn \__witharrows_Arrow
+  {
+    \peek_meaning:NTF [
+      { \__witharrows_Arrow_i }
+      { \__witharrows_Arrow_i [ ] }
+  }
+\cs_new_protected:Npn \__witharrows_Arrow_i [ #1 ] #2
+  {
+    \peek_meaning:NTF [
+      { \__witharrows_Arrow_ii [ #1 ] { #2 } }
+      { \__witharrows_Arrow_ii [ #1 ] { #2 } [ ] }
+  }
+\cs_new_protected:Npn \__witharrows_Arrow_ii [ #1 ] #2 [ #3 ]
+  {
+    \int_gincr:N \g__witharrows_arrow_int
+    \str_clear_new:N \l__witharrows_previous_key_str
+    \keys_set:nn { WithArrows / Arrow / FirstPass } { #1 , #3 }
+    \prop_put:NnV \l_tmpa_prop { initial } \g__witharrows_line_int
+    \int_set:Nn \l_tmpa_int { \g__witharrows_line_int + \l__witharrows_jump_int }
+    \prop_put:NnV \l_tmpa_prop { final } \l_tmpa_int
+    \prop_put:NnV \l_tmpa_prop { status } \l__witharrows_status_arrow_str
+    \prop_put:Nnn \l_tmpa_prop { options } { #1 , #3 }
+    \prop_put:Nnn \l_tmpa_prop { label } { #2 }
+    \prop_put:Nnx \l_tmpa_prop { input-line } \msg_line_number:
+    \prop_put:Nnn \l_tmpa_prop { width } { 0 pt }
+    \prop_gclear_new:c
+      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop }
+    \prop_gset_eq:cN
+      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop }
+      \l_tmpa_prop
+  }
+\cs_new_protected:Npn \__witharrows_Arrow_first_columns:
+  { \__witharrows_error:n { Arrow~not~in~last~column } \__witharrows_Arrow }
+\cs_new_protected:Npn \__witharrows_pre_halign:n #1
+  {
+    \cs_if_exist:NT \tikz at library@external at loaded
+      { \tikzset { external / export = false } }
+    \tikzset { arrows = [ flex ] }  % https://texnique.fr/osqa/questions/12199
+    \str_clear_new:N \l__witharrows_name_str
+    \str_clear_new:N \l__witharrows_status_arrow_str
+    \dim_zero_new:N \l__witharrows_x_dim
+    \str_clear_new:N \l__witharrows_input_line_str
+    \seq_gput_right:NV \g__witharrows_arrow_int_seq \g__witharrows_arrow_int
+    \int_gzero:N \g__witharrows_arrow_int
+    \seq_gput_right:NV \g__witharrows_line_int_seq \g__witharrows_line_int
+    \int_gzero:N \g__witharrows_line_int
+    \seq_gput_right:NV \g__witharrows_col_int_seq \g__witharrows_col_int
+    \int_gzero:N \g__witharrows_col_int
+    \seq_gput_right:NV \g__witharrows_static_col_int_seq \g__witharrows_static_col_int
+    \int_gzero:N \g__witharrows_static_col_int
+    \seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1
+    \seq_set_eq:NN \l_tmpa_seq \g__witharrows_position_in_the_tree_seq
+    \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
+    \str_clear_new:N \l__witharrows_prefix_str
+    \str_set:Nx \l__witharrows_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - }
+    \cs_set_eq:NN \\ \__witharrows_cr:
+    \dim_zero:N \mathsurround
+    \int_zero_new:N \l__witharrows_initial_int
+    \int_zero_new:N \l__witharrows_final_int
+    \int_zero_new:N \l__witharrows_arrow_int
+    \int_zero_new:N \l__witharrows_pos_of_arrow_int
+    \int_zero_new:N \l__witharrows_jump_int
+    \int_set:Nn \l__witharrows_jump_int 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
+    \tl_clear_new:N \l__witharrows_code_after_tl
+    \str_clear_new:N \l__witharrows_previous_key_str
+    \bool_if:NT \l__witharrows_in_WithArrows_bool
+      { \keys_set:nn { WithArrows / WithArrows } { #1 } }
+    \bool_if:NT \l__witharrows_in_DispWithArrows_bool
+      { \keys_set:nn { WithArrows / DispWithArrows } { #1 } }
+    \bool_if:NF \l__witharrows_right_overlap_bool
+      {
+        \bool_if:NT \l__witharrows_in_WithArrows_bool
+          {
+            \dim_gzero_new:N \g__witharrows_overlap_x_dim
+            \dim_zero_new:N \l__witharrows_delta_x_dim
+          }
+      }
+    \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_first_columns:
+    \int_set:Nn \l__witharrows_nb_cols_int { \str_count:N \l__witharrows_format_str }
+    \int_gset_eq:NN \g__witharrows_col_int \l__witharrows_nb_cols_int
+    \seq_clear_new:N \l__witharrows_format_seq
+    \seq_set_split:NnV \l__witharrows_format_seq { } \l__witharrows_format_str
+    \l__witharrows_code_before_tl
+  }
+\cs_new_protected:Npn \__witharrows_construct_halign:
+  {
+    \seq_pop_right:NNTF \l__witharrows_format_seq \l__witharrows_type_col_str
+      {
+        \use:e
+          {
+            \int_gdecr:N \g__witharrows_col_int
+            \__witharrows_construct_halign:
+            \int_compare:nNnT \g__witharrows_col_int = \l__witharrows_nb_cols_int
+              {
+                \cs_set_eq:cN { \l__witharrows_command_name_str } \__witharrows_Arrow
+              }
+            \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil
+            \str_if_eq:VnT \l__witharrows_type_col_str { C } \hfil
+            \str_if_eq:VnT \l__witharrows_type_col_str { r } \hfill
+            \str_if_eq:VnT \l__witharrows_type_col_str { R } \hfill
+            \int_gincr:N \g__witharrows_col_int
+            \int_gset:Nn \g__witharrows_static_col_int { \int_use:N \g__witharrows_col_int }
+            \c_math_toggle_token
+            \str_if_eq:VnT \l__witharrows_type_col_str { C } { { } }
+            \str_if_eq:VnT \l__witharrows_type_col_str { L } { { } }
+            \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
+            ##
+            \str_if_eq:VnT \l__witharrows_type_col_str { C } { { } }
+            \str_if_eq:VnT \l__witharrows_type_col_str { R } { { } }
+            \c_math_toggle_token
+            \int_compare:nNnTF \g__witharrows_col_int = \l__witharrows_nb_cols_int
+              \__witharrows_construct_nodes:
+              {
+                \str_if_eq:VnT \l__witharrows_type_col_str { l } \hfil
+                \str_if_eq:VnT \l__witharrows_type_col_str { L } \hfil
+                \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil
+                \str_if_eq:VnT \l__witharrows_type_col_str { C } \hfil
+                \bool_if:NT \l__witharrows_in_DispWithArrows_bool { \tabskip = \c_zero_skip }
+                &
+              }
+          }
+      }
+      {
+        \bool_if:NTF \l__witharrows_in_WithArrows_bool
+          {
+            \ialign
+            \bgroup
+          }
+          {
+            \halign to \l__witharrows_linewidth_dim
+            \bgroup
+            \bool_if:NT \l__witharrows_fleqn_bool
+              { \skip_horizontal:N \l__witharrows_mathindent_skip }
+          }
+        \int_gincr:N \g__witharrows_line_int
+        \int_gzero:N \g__witharrows_col_int
+        \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl
+          {
+            \skip_horizontal:n
+              { \box_wd:N \l__witharrows_left_brace_box + \l__witharrows_delim_wd_dim }
+          }
+        \strut
+      }
+  }
+\cs_new_protected:Npn \__witharrows_construct_nodes:
+  {
+    \tikz [ remember~picture , overlay ]
+      \node
+        [
+          node~contents = { } ,
+          __witharrows_node_style ,
+          name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - l ,
+        ]
+        ;
+    \hfil
+    \tikz [ remember~picture , overlay ]
+      \node
+        [
+          node~contents = { } ,
+          __witharrows_node_style ,
+          name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r ,
+        ]
+        ;
+    \str_if_empty:NF \l__witharrows_name_str
+      {
+        \pgfpicture
+        \pgfnodealias
+          { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - l }
+          { wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - l }
+        \pgfnodealias
+          { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - r }
+          { wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r }
+        \endpgfpicture
+      }
+    \bool_if:NT \l__witharrows_show_node_names_bool
+      {
+        \hbox_overlap_right:n
+          { \small wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r }
+      }
+  }
+\cs_new_protected:Npn \WithArrows
+  {
+    \group_begin:
+    \peek_meaning:NTF [
+     { \WithArrows_i }
+     { \WithArrows_i [  ] }
+  }
+\cs_new_protected:Npn \WithArrows_i [ #1 ]
+  {
+    \bool_set_true:N \l__witharrows_in_WithArrows_bool
+    \bool_set_false:N \l__witharrows_in_DispWithArrows_bool
+    \str_clear_new:N \l__witharrows_type_env_str
+    \str_set:Nn \l__witharrows_type_env_str { WithArrows }
+    \__witharrows_pre_halign:n { #1 }
+    \if_mode_math: \else:
+      \__witharrows_error:n { WithArrows~outside~math~mode }
+    \fi:
+    \box_clear_new:N \l__witharrows_env_box
+    \hbox_set:Nw \l__witharrows_env_box
+    \int_compare:nNnT \l__witharrows_pos_env_int = 1 \c_math_toggle_token
+    \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 }
+    \c_math_toggle_token
+    \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
+    { ## }
+    \c_math_toggle_token
+    \cr
+  }
+\cs_new_protected:Npn \endWithArrows
+  {
+    \\
+    \egroup
+    \egroup
+    \int_compare:nNnT \l__witharrows_pos_env_int = 1 \c_math_toggle_token
+    \hbox_set_end:
+    \__witharrows_post_halign:
+    \bool_if:NF \l__witharrows_right_overlap_bool
+      {
+        \box_set_wd:Nn \l__witharrows_env_box
+          { \g__witharrows_overlap_x_dim + \box_wd:N \l__witharrows_env_box }
+      }
+    \box_use_drop:N \l__witharrows_env_box
+    \group_end:
+  }
+\cs_new_protected:Npn \__witharrows_post_halign:
+  {
+    \cs_set:Npn \WithArrowsRightX { \g__witharrows_right_x_dim }
+    \normalbaselines
+    \int_compare:nNnT \g__witharrows_arrow_int > 0
+      {
+        \int_compare:nNnT \g__witharrows_arrow_int = 1
+          {
+            \int_compare:nNnT \l__witharrows_pos_arrow_int > 5
+              { \int_set:Nn \l__witharrows_pos_arrow_int 5 }
+          }
+        \__witharrows_scan_arrows:
+      }
+    \group_begin:
+      \tikzset { every~picture / .style = __witharrows_standard }
+      \cs_set:Npn \WithArrowsNbLines { \int_use:N \g__witharrows_line_int }
+      \cs_set_eq:NN \MultiArrow \__witharrows_MultiArrow:nn
+      \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_code_after
+      \bool_set_true:N \l__witharrows_in_code_after_bool
+      \l__witharrows_code_after_tl
+    \group_end:
+    \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl
+    \seq_gput_right:Nx \g__witharrows_position_in_the_tree_seq
+      { \int_eval:n { \l_tmpa_tl + 1 } }
+    \int_compare:nNnT { \seq_count:N \g__witharrows_position_in_the_tree_seq } = 1
+      { \int_gincr:N \g__witharrows_last_env_int }
+    \seq_gpop_right:NN \g__witharrows_arrow_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_arrow_int \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_line_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_line_int \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_col_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_col_int \l_tmpa_tl
+    \seq_gpop_right:NN \g__witharrows_static_col_int_seq \l_tmpa_tl
+    \int_gset:Nn \g__witharrows_static_col_int \l_tmpa_tl
+  }
+\cs_new_protected:Npn \__witharrows_cr:
+  {
+    \scan_stop:
+    \int_compare:nNnF \g__witharrows_col_int = \g__witharrows_static_col_int
+      { \__witharrows_error:n { omit~probably~used } }
+    \prg_replicate:nn { \l__witharrows_nb_cols_int - \g__witharrows_static_col_int } { & { } }
+    \group_align_safe_begin:
+    \peek_meaning_remove:NTF * \__witharrows_cr_i: \__witharrows_cr_i:
+  }
+\cs_new_protected:Npn \__witharrows_cr_i:
+  { \peek_meaning:NTF [ \__witharrows_cr_ii: { \__witharrows_cr_ii: [ \c_zero_dim ] } }
+\cs_new_protected:Npn \__witharrows_cr_ii: [ #1 ]
+  {
+    \group_align_safe_end:
+    \bool_if:NT \l__witharrows_in_DispWithArrows_bool
+      {
+            &
+            \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 } }
+
+    \cr
+    \noalign
+      {
+        \dim_set:Nn \l_tmpa_dim { \dim_max:nn { #1 } \c_zero_dim }
+        \skip_vertical:N \l_tmpa_dim
+        \skip_vertical:N \l__witharrows_interline_skip
+        \scan_stop:
+      }
+  }
+\cs_new_protected:Npn \DispWithArrows
+  {
+    \group_begin:
+    \peek_meaning:NTF <
+      { \DispWithArrows_i }
+      { \DispWithArrows_i < \c_novalue_tl > }
+  }
+\cs_new_protected:Npn \DispWithArrows_i < #1 >
+  {
+    \peek_meaning:NTF [
+      { \DispWithArrows_ii < #1 > }
+      { \DispWithArrows_ii < #1 > [ ] }
+  }
+\cs_new_protected:Npn \DispWithArrows_ii < #1 > [ #2 ]
+  {
+    \bool_set_true:N \l__witharrows_in_DispWithArrows_bool
+    \str_clear_new:N \l__witharrows_type_env_str
+    \str_set:Nn \l__witharrows_type_env_str { DispWithArrows }
+    \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l__witharrows_left_brace_tl { #1 } }
+    \__witharrows_pre_halign:n { #2 }
+    \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl
+      {
+        \hbox_set:Nn \l_tmpa_box
+          {
+            \group_begin:
+            \dim_zero:N \nulldelimiterspace
+            \c_math_toggle_token
+            \left \l__witharrows_replace_left_brace_by_tl \vcenter to 1 cm { } \right.
+            \c_math_toggle_token
+            \group_end:
+          }
+        \dim_zero_new:N \l__witharrows_delim_wd_dim
+        \dim_set:Nn \l__witharrows_delim_wd_dim { \box_wd:N \l_tmpa_box }
+        \box_clear_new:N \l__witharrows_left_brace_box
+        \hbox_set:Nn \l__witharrows_left_brace_box
+          {
+            \group_begin:
+              \cs_set_eq:NN \label \__witharrows_old_label
+              \c_math_toggle_token
+              \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle
+              \l__witharrows_left_brace_tl
+              { }
+              \c_math_toggle_token
+            \group_end:
+          }
+      }
+    \if_mode_math:
+      \__witharrows_fatal:n { DispWithArrows~in~math~mode }
+    \fi:
+     \dim_zero_new:N \linewidth
+     \dim_set_eq:NN \linewidth \displaywidth
+        \if_mode_vertical:
+        \nointerlineskip
+        \hbox_to_wd:nn { .6 \linewidth } { }
+        \fi:
+        \c_math_toggle_token \c_math_toggle_token
+    \dim_zero_new:N \l__witharrows_linewidth_dim
+    \dim_set_eq:NN \l__witharrows_linewidth_dim \displaywidth
+    \box_clear_new:N \l__witharrows_halign_box
+    \setbox \l__witharrows_halign_box \vtop \bgroup
+    \tabskip =
+      \bool_if:NTF \l__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
+    &
+    $ ## $
+    \tabskip = \c_zero_skip
+    &&
+    \__witharrows_fatal:n { Too~much~columns~in~DispWithArrows }
+    \bool_if:nT \c_false_bool { ## }
+    \cr
+  }
+\cs_new_protected:Npn \endDispWithArrows
+  {
+    \\
+    \egroup
+    \unskip \unpenalty \unskip \unpenalty
+    \box_set_to_last:N \l_tmpa_box
+    \nointerlineskip
+    \box_use:N \l_tmpa_box
+    \dim_gzero_new:N \g__witharrows_alignment_dim
+    \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l_tmpa_box }
+    \box_clear_new:N \l__witharrows_new_box
+    \hbox_set:Nn \l__witharrows_new_box { \hbox_unpack_drop:N \l_tmpa_box }
+    \dim_compare:nNnT
+      { \box_wd:N \l__witharrows_new_box } < \g__witharrows_alignment_dim
+      { \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l__witharrows_new_box } }
+    \egroup
+     \tl_if_eq:NNTF \l__witharrows_left_brace_tl \c_novalue_tl
+       { \box_use_drop:N \l__witharrows_halign_box }
+       {
+         \hbox_to_wd:nn \l__witharrows_linewidth_dim
+           {
+            \bool_if:NTF \l__witharrows_fleqn_bool
+              { \skip_horizontal:N \l__witharrows_mathindent_skip }
+              \hfil
+            \hbox_to_wd:nn \g__witharrows_alignment_dim
+              {
+                \box_use_drop:N \l__witharrows_left_brace_box
+                \dim_set:Nn \l_tmpa_dim
+                  {
+                    \box_ht:N \l__witharrows_halign_box
+                    + \box_dp:N \l__witharrows_halign_box
+                  }
+                \group_begin:
+                \dim_zero:N \nulldelimiterspace
+                \c_math_toggle_token
+                  \left \l__witharrows_replace_left_brace_by_tl
+                    \vcenter to \l_tmpa_dim { \vfil }
+                  \right.
+                \c_math_toggle_token
+                \group_end:
+                \hfil
+              }
+            \hfil
+           }
+         \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
+    \pgfpicture
+      \pgfrememberpicturepositiononpagetrue
+      \int_step_variable:nNn \g__witharrows_line_int \l_tmpa_int
+        {
+          \cs_if_free:cTF
+            { pgf @ sh @ ns @ wa - \l__witharrows_prefix_str - \l_tmpa_int - v }
+            { \__witharrows_fatal:n { Inexistent~v-node } }
+            {
+              \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 }
+            }
+        }
+    \endpgfpicture
+    \__witharrows_post_halign:
+      \c_math_toggle_token \c_math_toggle_token
+    \group_end:
+  }
+\cs_new_protected:Npn \__witharrows_if_in_last_col_of_disp:Nn #1 #2
+  {
+    \bool_if:NTF \l__witharrows_in_WithArrows_bool
+      { \__witharrows_error:nn { Not~allowed~in~WithArrows } { #1 } }
+      {
+        \int_compare:nNnTF \g__witharrows_col_int < \l__witharrows_nb_cols_int
+          { \__witharrows_error:nn { Not~allowed~in~DispWithArrows } { #1 } }
+          { #2 }
+      }
+  }
+\cs_new_protected:Npn \__witharrows_scan_arrows:
+  {
+    \group_begin:
+    \int_compare:nNnT \l__witharrows_pos_arrow_int = 7
+      {
+        \__witharrows_scan_arrows_i:
+        \int_set:Nn \l__witharrows_pos_arrow_int 8
+      }
+    \__witharrows_scan_arrows_i:
+    \group_end:
+  }
+\cs_new_protected:Npn \__witharrows_scan_arrows_i:
+  {
+    \int_zero_new:N \l__witharrows_first_arrow_of_group_int
+    \int_zero_new:N \l__witharrows_first_line_of_group_int
+    \int_zero_new:N \l__witharrows_last_line_of_group_int
+    \seq_clear_new:N \l__witharrows_first_arrows_seq
+    \seq_clear_new:N \l__witharrows_last_arrows_seq
+    \bool_set_true:N \l__witharrows_new_group_bool
+    \int_set:Nn \l__witharrows_arrow_int 1
+    \int_until_do:nNnn \l__witharrows_arrow_int > \g__witharrows_arrow_int
+      {
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { initial } \l_tmpa_tl
+        \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { final } \l_tmpa_tl
+        \int_set:Nn \l__witharrows_final_int \l_tmpa_tl
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { status } \l__witharrows_status_arrow_str
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { input-line } \l__witharrows_input_line_str
+        \int_compare:nNnTF \l__witharrows_final_int > \g__witharrows_line_int
+          {
+            \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
+              { \__witharrows_error:n { Too~few~lines~for~an~arrow } }
+          }
+          \__witharrows_treat_an_arrow_in_scan:
+        \int_incr:N \l__witharrows_arrow_int
+      }
+    \bool_if:nT
+      {
+        ! \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_treat_an_arrow_in_scan:
+  {
+    \bool_lazy_and:nnT
+      { \int_compare_p:nNn \l__witharrows_arrow_int > 1 }
+      {
+        \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
+          {
+            \__witharrows_draw_arrows:nn
+              \l__witharrows_first_arrow_of_group_int
+              { \l__witharrows_arrow_int - 1 }
+          }
+        \bool_set_true:N \l__witharrows_new_group_bool
+      }
+    \bool_if:nTF \l__witharrows_new_group_bool
+      {
+        \bool_set_false:N \l__witharrows_new_group_bool
+        \int_set_eq:NN \l__witharrows_first_arrow_of_group_int \l__witharrows_arrow_int
+        \int_set_eq:NN \l__witharrows_first_line_of_group_int \l__witharrows_initial_int
+        \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int
+        \seq_clear:N \l__witharrows_first_arrows_seq
+        \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int
+        \seq_clear:N \l__witharrows_last_arrows_seq
+        \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int
+        \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
+          { \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim } }
+      }
+      {
+        \str_if_eq:VnF \l__witharrows_status_arrow_str { independent }
+          {
+            \int_compare:nT
+              { \l__witharrows_initial_int = \l__witharrows_first_line_of_group_int }
+              { \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int }
+            \int_compare:nNnTF \l__witharrows_final_int > \l__witharrows_last_line_of_group_int
+              {
+                \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int
+                \seq_clear:N \l__witharrows_last_arrows_seq
+                \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int
+              }
+              {
+                \int_compare:nNnT \l__witharrows_final_int = \l__witharrows_last_line_of_group_int
+                  { \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int }
+              }
+          }
+      }
+    \str_if_eq:VnF \l__witharrows_status_arrow_str { independent }
+      {
+        \int_compare:nNnF \l__witharrows_pos_arrow_int = 8
+          { \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int }
+      }
+  }
+\cs_generate_variant:Nn \keys_set:nn { n o }
+\cs_new_protected:Npn \__witharrows_keys_set:
+  { \keys_set_known:no { WithArrows / Arrow / SecondPass } }
+\cs_new_protected:Npn \__witharrows_draw_arrows:nn #1 #2
+  {
+    \group_begin:
+    \int_zero_new:N \l__witharrows_first_arrow_int
+    \int_set:Nn \l__witharrows_first_arrow_int { #1 }
+    \int_zero_new:N \l__witharrows_last_arrow_int
+    \int_set:Nn \l__witharrows_last_arrow_int { #2 }
+    \int_set:Nn \l__witharrows_arrow_int \l__witharrows_first_arrow_int
+    \int_until_do:nNnn \l__witharrows_arrow_int > \l__witharrows_last_arrow_int
+      {
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { initial } \l_tmpa_tl
+        \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { final } \l_tmpa_tl
+        \int_set:Nn \l__witharrows_final_int \l_tmpa_tl
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { status } \l__witharrows_status_arrow_str
+        \int_compare:nNnF \l__witharrows_final_int > \g__witharrows_line_int
+          {
+            \str_if_eq:VnTF \l__witharrows_status_arrow_str { over }
+              { \seq_put_right:NV \l__witharrows_o_arrows_seq \l__witharrows_arrow_int }
+              \__witharrows_draw_arrow:
+          }
+        \int_incr:N \l__witharrows_arrow_int
+      }
+    \__witharrows_draw_o_arrows_of_the_group:
+    \group_end:
+  }
+\cs_new_protected:Npn \__witharrows_draw_arrow:
+  {
+    \group_begin:
+    \prop_get:cnN
+      { g__witharrows_arrow _\l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+      { options } \l_tmpa_tl
+    \str_clear_new:N \l__witharrows_previous_key_str
+    \exp_args:NNo \exp_args:No
+    \__witharrows_keys_set: { \l_tmpa_tl , tikz = { xshift = \l__witharrows_xoffset_dim } }
+    \bool_set_false:N \l__witharrows_initial_r_bool
+    \bool_set_false:N \l__witharrows_final_r_bool
+    \int_case:nn \l__witharrows_pos_arrow_int
+      {
+        0 { \bool_set_true:N \l__witharrows_final_r_bool }
+        2 { \bool_set_true:N \l__witharrows_initial_r_bool }
+        3
+          {
+            \bool_set_true:N \l__witharrows_initial_r_bool
+            \bool_set_true:N \l__witharrows_final_r_bool
+          }
+      }
+    \int_compare:nNnT \l__witharrows_pos_arrow_int = 5
+      {
+        \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim }
+        \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int
+      }
+    \tl_set:Nx \l__witharrows_initial_tl
+      { \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 }
+    \prop_get:cnN
+      { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+      { label }
+      \l_tmpa_tl
+    \seq_if_in:NxTF \l__witharrows_first_arrows_seq
+      { \int_use:N \l__witharrows_arrow_int }
+      { \bool_set_true:N \l_tmpa_bool }
+      { \bool_set_false:N \l_tmpa_bool }
+    \seq_if_in:NxTF \l__witharrows_last_arrows_seq
+      { \int_use:N \l__witharrows_arrow_int }
+      { \bool_set_true:N \l_tmpb_bool }
+      { \bool_set_false:N \l_tmpb_bool }
+    \int_compare:nNnT \l__witharrows_pos_arrow_int = 5
+      {
+        \bool_set_true:N \l_tmpa_bool
+        \bool_set_true:N \l_tmpb_bool
+      }
+    \dim_gzero_new:N \g__witharrows_x_initial_dim
+    \dim_gzero_new:N \g__witharrows_x_final_dim
+    \dim_gzero_new:N \g__witharrows_y_initial_dim
+    \dim_gzero_new:N \g__witharrows_y_final_dim
+    \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
+      \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
+    \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 }
+      {
+        \tl_gset:Nx \g_tmpa_tl
+          {
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_initial_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
+            \dim_eval:n
+              {
+                ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
+                + 0.5 \l__witharrows_max_length_of_arrow_dim
+              }
+          }
+        \tl_gset:Nx \g_tmpb_tl
+          {
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_final_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
+            \dim_eval:n
+              {
+                ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2
+                - 0.5 \l__witharrows_max_length_of_arrow_dim
+              }
+          }
+      }
+      {
+        \tl_gset:Nx \g_tmpa_tl
+          {
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_initial_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
+            \bool_if:NTF \l_tmpa_bool
+              { \dim_eval:n { \g__witharrows_y_initial_dim + \l__witharrows_start_adjust_dim } }
+              { \dim_use:N \g__witharrows_y_initial_dim }
+          }
+        \tl_gset:Nx \g_tmpb_tl
+          {
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              { \dim_use:N \g__witharrows_x_final_dim }
+              { \dim_use:N \l__witharrows_x_dim } ,
+            \bool_if:NTF \l_tmpb_bool
+              { \dim_eval:n { \g__witharrows_y_final_dim - \l__witharrows_end_adjust_dim } }
+              { \dim_use:N \g__witharrows_y_final_dim }
+          }
+      }
+    \bool_if:NF \l__witharrows_right_overlap_bool
+      {
+        \bool_if:NT \l__witharrows_in_WithArrows_bool
+          {
+            \pgfpicture
+            \pgfrememberpicturepositiononpagetrue
+            \pgfpointanchor { wa - \l__witharrows_prefix_str - 1 - r } { south }
+            \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5
+              {
+                \dim_set:Nn \l__witharrows_delta_x_dim
+                  {
+                    \pgf at x -
+                    ( \dim_min:nn \g__witharrows_x_initial_dim \g__witharrows_x_final_dim )
+                  }
+              }
+              { \dim_set:Nn \l__witharrows_delta_x_dim { \pgf at x - \l__witharrows_x_dim } }
+            \endpgfpicture
+          }
+      }
+    \__witharrows_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl
+    \group_end:
+  }
+\cs_new_protected:Npn \__witharrows_def_function_tmpa:n #1
+  {
+    \cs_set:Npn \__witharrows_tmpa:nnn ##1 ##2 ##3
+      {
+        \tikzpicture
+        [ __witharrows_standard_arrow ]
+        \pgf at relevantforpicturesizetrue
+          #1
+        \dim_compare:nNnTF \pgf at picminx = { 16000 pt }
+          { \dim_zero:N \l_tmpa_dim }
+          { \dim_set:Nn \l_tmpa_dim { \pgf at picmaxx - \pgf at picminx } }
+        \dim_add:Nn \l_tmpa_dim \l__witharrows_xoffset_dim
+        \prop_gput:cnV
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop }
+          { width }
+          \l_tmpa_dim
+        \bool_if:NF \l__witharrows_right_overlap_bool
+          {
+            \bool_if:NT \l__witharrows_in_WithArrows_bool
+              {
+                \dim_gset:Nn \g__witharrows_overlap_x_dim
+                  {
+                    \dim_max:nn
+                      \g__witharrows_overlap_x_dim
+                      { \l_tmpa_dim - \l__witharrows_delta_x_dim }
+                  }
+              }
+          }
+        \pgfresetboundingbox
+        \endtikzpicture
+      }
+  }
+\cs_new_protected:Npn \__witharrows_draw_arrow:nnn #1 #2 #3
+  {
+    \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 }
+  }
+\cs_generate_variant:Nn \__witharrows_draw_arrow:nnn { n n o }
+\tl_const:Nn \c__witharrows_tikz_code_wrap_lines_tl
+  {
+     \pgfset { inner~sep = 0pt}
+    \draw ( #1 ) to node ( __witharrows_label ) { } ( #2 ) ;
+    \pgfpointanchor { wa - \l__witharrows_prefix_str - __witharrows_label } { west }
+    \dim_set:Nn \l_tmpa_dim { \g__witharrows_right_x_dim - \pgf at x - 0.3333 ex  }
+    \path \pgfextra { \tl_gset:Nx \g_tmpa_tl \tikz at text@width } ;
+    \tl_if_empty:NF \g_tmpa_tl
+      {
+        \dim_set:Nn \l_tmpb_dim \g_tmpa_tl
+        \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim
+          { \dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim }
+      }
+    \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim
+      {
+        \path ( __witharrows_label.west )
+           node [ anchor = west , text~width = \dim_use:N \l_tmpa_dim ]
+            { #3 } ;
+      }
+  }
+\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 }
+      {
+        \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_protected:Npn \__witharrows_draw_o_arrows_of_the_group:
+  {
+    \seq_sort:Nn \l__witharrows_o_arrows_seq
+      {
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##1 _ prop }
+          { final } \l_tmpa_tl
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##2 _ prop }
+          { final } \l_tmpb_tl
+        \int_compare:nNnTF \l_tmpa_tl < \l_tmpb_tl
+          \sort_return_same:
+          {
+            \int_compare:nNnTF \l_tmpa_tl > \l_tmpb_tl
+              \sort_return_swapped:
+              {
+                \prop_get:cnN
+                  { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##1 _ prop }
+                  { initial } \l_tmpa_tl
+                \prop_get:cnN
+                  { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##2 _ prop }
+                  { initial } \l_tmpb_tl
+                \int_compare:nNnTF \l_tmpa_tl < \l_tmpb_tl
+                  \sort_return_swapped:
+                  \sort_return_same:
+              }
+          }
+      }
+    \seq_map_inline:Nn \l__witharrows_o_arrows_seq
+      {
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##1 _ prop }
+          { initial } \l_tmpa_tl
+        \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##1 _ prop }
+          { final } \l_tmpa_tl
+        \int_set:Nn \l__witharrows_final_int \l_tmpa_tl
+        \prop_get:cnN
+          { g__witharrows_arrow _ \l__witharrows_prefix_str _ ##1 _ prop }
+          { input-line } \l__witharrows_input_line_str
+        \dim_gzero:N \g_tmpa_dim
+        \bool_set_false:N \g_tmpa_bool
+        \pgfpicture
+        \pgfrememberpicturepositiononpagetrue
+        \int_step_inline:nnn \l__witharrows_first_arrow_int \l__witharrows_last_arrow_int
+          {
+            \prop_get:cnN
+              { g__witharrows_arrow _ \l__witharrows_prefix_str _ ####1 _ prop }
+              { initial } \l_tmpa_tl
+            \prop_get:cnN
+              { g__witharrows_arrow _ \l__witharrows_prefix_str _ ####1 _ prop }
+              { final } \l_tmpb_tl
+            \prop_get:cnN
+              { g__witharrows_arrow _ \l__witharrows_prefix_str _ ####1 _ prop }
+              { status } \l__witharrows_status_arrow_str
+            \bool_if:nT
+              {
+                ! \int_compare_p:n { ##1 = ####1 }
+                && \int_compare_p:n { \l__witharrows_initial_int <= \l_tmpa_tl }
+                && \int_compare_p:n { \l_tmpb_tl <= \l__witharrows_final_int }
+                && ! \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent }
+              }
+              {
+                \bool_gset_true:N \g_tmpa_bool
+                \prop_get:cnN
+                  { g__witharrows _ arrow _ \l__witharrows_prefix_str _ ####1 _ prop }
+                  { width }
+                  \l_tmpa_tl
+                \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \g_tmpa_dim \l_tmpa_tl }
+              }
+          }
+        \endpgfpicture
+        \bool_if:NTF \g_tmpa_bool
+          {
+            \int_set:Nn \l__witharrows_arrow_int { ##1 }
+            \dim_set_eq:NN \l__witharrows_xoffset_dim \g_tmpa_dim
+            \dim_add:Nn \l__witharrows_xoffset_dim \l__witharrows_xoffset_for_o_arrows_dim
+            \__witharrows_draw_arrow:
+          }
+          { \__witharrows_error:n { o~arrow~with~no~arrow~under } }
+      }
+  }
+\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g__witharrows_last_env_int }
+\keys_define:nn { WithArrows / Arrow / code-after }
+  {
+    tikz     .code:n =
+      \tikzset { WithArrows / arrow / .append~style = { #1 } } ,
+    tikz     .value_required:n  = true ,
+    rr       .value_forbidden:n = true ,
+    rr       .code:n            = \__witharrows_fix_pos_option:n 0 ,
+    ll       .value_forbidden:n = true,
+    ll       .code:n            = \__witharrows_fix_pos_option:n 1 ,
+    rl       .value_forbidden:n = true ,
+    rl       .code:n            = \__witharrows_fix_pos_option:n 2 ,
+    lr       .value_forbidden:n = true ,
+    lr       .code:n            = \__witharrows_fix_pos_option:n 3 ,
+    v        .value_forbidden:n = true ,
+    v        .code:n            = \__witharrows_fix_pos_option:n 4 ,
+    tikz-code .tl_set:N          = \l__witharrows_tikz_code_tl ,
+    tikz-code .value_required:n  = true ,
+    xoffset  .dim_set:N         = \l__witharrows_xoffset_dim ,
+    xoffset  .value_required:n  = true ,
+    unknown .code:n  =
+      \__witharrows_sort_seq:N \l__witharrows_options_Arrow_code_after_seq
+      \__witharrows_error:n { Unknown~option~Arrow~in~code-after }
+  }
+\seq_new:N \l__witharrows_options_Arrow_code_after_seq
+\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_code_after_seq
+  { ll, lr, rl, rr, tikz, tikz-code, v, x, offset }
+\cs_new_protected:Npn \__witharrows_Arrow_code_after
+  {
+    \peek_meaning:NTF [
+      { \__witharrows_Arrow_code_after_i }
+      { \__witharrows_Arrow_code_after_i [ ] }
+  }
+\cs_new_protected:Npn \__witharrows_Arrow_code_after_i [ #1 ] #2 #3 #4
+  {
+    \peek_meaning:NTF [
+      { \__witharrows_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } }
+      { \__witharrows_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } [ ] }
+  }
+\cs_new_protected:Npn \__witharrows_Arrow_code_after_ii [ #1 ] #2 #3 #4 [ #5 ]
+  {
+    \int_set:Nn \l__witharrows_pos_arrow_int 1
+    \str_clear_new:N \l__witharrows_previous_key_str
+    \group_begin:
+      \keys_set:nn { WithArrows / Arrow / code-after }
+        { #1, #5, tikz = { xshift = \l__witharrows_xoffset_dim } }
+      \bool_set_false:N \l__witharrows_initial_r_bool
+      \bool_set_false:N \l__witharrows_final_r_bool
+      \int_case:nn \l__witharrows_pos_arrow_int
+        {
+          0
+            {
+              \bool_set_true:N \l__witharrows_initial_r_bool
+              \bool_set_true:N \l__witharrows_final_r_bool
+            }
+          2 { \bool_set_true:N \l__witharrows_initial_r_bool }
+          3 { \bool_set_true:N \l__witharrows_final_r_bool }
+        }
+      \tl_if_eq:nnTF { #2 } { #3 }
+        { \__witharrows_error:nn { Both~lines~are~equal } { #2 } }
+        {
+          \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - #2 - l }
+            { \__witharrows_error:nx { Wrong~line~in~Arrow } { #2 } }
+            {
+              \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - #3 - l }
+                { \__witharrows_error:nx { Wrong~line~in~Arrow } { #3 }  }
+                {
+                  \int_compare:nNnTF \l__witharrows_pos_arrow_int = 4
+                    {
+                      \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
+                        \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
+                          { \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 }
+                      \endpgfpicture
+                    }
+                    {
+                      \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 }
+                        \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 }
+                      \endpgfpicture
+                    }
+                  \__witharrows_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 }
+                }
+            }
+        }
+    \group_end:
+  }
+\cs_new_protected:Npn \__witharrows_MultiArrow:nn #1 #2
+  {
+    \exp_args:Nnx
+      \regex_match:nnTF
+      { \A \d+ (\,\d+)* ( \, \.\.\. (\,\d+)+ )* \Z }
+      { #1 }
+      { \__witharrows_MultiArrow_i:nn { #1 } { #2 } }
+      { \__witharrows_error:nx { Invalid~specification~for~MultiArrow } { #1 } }
+  }
+\cs_new_protected:Npn \__witharrows_MultiArrow_i:nn #1 #2
+  {
+    \foreach \x in { #1 }
+      {
+        \cs_if_free:cTF { pgf at sh@ns at wa - \l__witharrows_prefix_str - \x - l }
+          { \__witharrows_error:nx { Wrong~line~specification~in~MultiArrow } \x }
+          { \clist_gput_right:Nx \g_tmpa_clist \x }
+      }
+    \int_compare:nTF { \clist_count:N \g_tmpa_clist < 2 }
+      { \__witharrows_error:n { Too~small~specification~for~MultiArrow } }
+      {
+        \clist_sort:Nn \g_tmpa_clist
+          {
+            \int_compare:nTF { ##1 > ##2 }
+              \sort_return_swapped:
+              \sort_return_same:
+          }
+        \clist_pop:NN \g_tmpa_clist \l_tmpa_tl
+        \clist_reverse:N \g_tmpa_clist
+        \clist_pop:NN \g_tmpa_clist \l_tmpb_tl
+        \exp_args:NV \__witharrows_MultiArrow_i:n \g_tmpa_clist
+        \tikzpicture
+          [
+            __witharrows_standard ,
+            every~path / .style = { WithArrows / arrow }
+          ]
+          \draw [<->] ([xshift = \l__witharrows_xoffset_dim]\l_tmpa_tl-r.south)
+                      -- ++(5mm,0)
+                      -- node (__witharrows_label) {}
+                         ([xshift = \l__witharrows_xoffset_dim+5mm]\l_tmpb_tl-r.south)
+                      -- ([xshift = \l__witharrows_xoffset_dim]\l_tmpb_tl-r.south)  ;
+          \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_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 }
+              \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim
+                { \dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim }
+            }
+          \path (__witharrows_label.west)
+           node [ anchor = west, text~width = \dim_use:N \l_tmpa_dim ] { #2 } ;
+        \endtikzpicture
+      }
+  }
+\cs_new_protected:Npn \__witharrows_MultiArrow_i:n #1
+  {
+        \tikzpicture
+      [
+        __witharrows_standard ,
+        every~path / .style = { WithArrows / arrow }
+      ]
+      \foreach \k in { #1 }
+        {
+          \draw [ <- ]
+            ( [xshift = \l__witharrows_xoffset_dim]\k-r.south ) -- ++(5mm,0) ;
+        } % ;
+        \endtikzpicture
+  }
+\bool_if:NTF \c__witharrows_messages_for_Overleaf_bool
+  { \str_const:Nn \c__witharrows_available_keys_str { } }
+  {
+    \str_const:Nn \c__witharrows_available_keys_str
+      { For~a~list~of~the~available~keys,~type~H~<return>. }
+  }
+\str_new:N \l_witharrows_body_str
+\cs_new:Npn \__witharrows_potential_body_i:
+  {
+    \str_if_empty:NF \l_witharrows_body_str
+      { \\ If~you~want~to~see~the~body~of~the~environment,~type~H~<return>. }
+  }
+\cs_new:Npn \__witharrows_potential_body_ii:
+  {
+    \str_if_empty:NTF \l_witharrows_body_str
+      { No~further~help~available }
+      {
+        The~body~of~your~environment~was:\\
+        \l_witharrows_body_str
+      }
+  }
+\str_const:Nn \c__witharrows_option_ignored_str
+  { If~you~go~on,~this~option~will~be~ignored. }
+\str_const:Nn \c__witharrows_command_ignored_str
+  { If~you~go~on,~this~command~will~be~ignored. }
+\__witharrows_msg_new:nn { Bad~value~for~replace~brace~by }
+  {
+    Incorrect~value.\\
+    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,~
+    \token_to_str:N \langle,~\token_to_str:N \lmoustache,~
+    \token_to_str:N \lfloor\ and~\token_to_str:N \lceil\
+    (and~\token_to_str:N \lvert\ and~\token_to_str:N \lVert\
+    if~amsmath~or~unicode-math~is~loaded~in~LaTeX).\\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nn { option~of~cr~negative }
+  {
+    Bad~value.\\
+    The~argument~of~the~command~\token_to_str:N\\~
+    should~be~positive~in~the~row~\int_use:N \g__witharrows_line_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}.\\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nn { omit~probably~used }
+  {
+    Strange~problem.\\
+    Maybe~you~have~used~a~command~
+    \token_to_str:N\omit\ in~the~line~\int_use:N \g__witharrows_line_int\
+    (or~another~line)~of~your~environment~\{\l__witharrows_type_env_str\}.\\
+    You~can~go~on~but~you~may~have~others~errors.
+  }
+\__witharrows_msg_new:nnn { Invalid~option~format }
+  {
+    Invalide~value.\\
+    The~key~'format'~should~contain~only~letters~r,~c~and~l~and~
+    must~not~be~empty.\\
+    \c__witharrows_option_ignored_str
+    \__witharrows_potential_body_i:
+  }
+  { \__witharrows_potential_body_ii: }
+\__witharrows_msg_new:nnn { invalid~key~o }
+  {
+    Invalid~use~of~a~key.\\
+    The~key~'o'~for~individual~arrows~can~be~used~only~in~mode~
+    'group'~or~in~mode~'groups'.\\
+    \c__witharrows_option_ignored_str
+    \__witharrows_potential_body_i:
+  }
+  { \__witharrows_potential_body_ii: }
+\__witharrows_msg_new:nnn { Value~for~a~key }
+  {
+    Misuse~of~a~key.\\
+    The~key~'\l_keys_key_str'~should~be~used~without~value. \\
+    However,~you~can~go~on~for~this~time.
+    \__witharrows_potential_body_i:
+  }
+  { \__witharrows_potential_body_ii: }
+\__witharrows_msg_new:nnn { Unknown~option~in~Arrow }
+  {
+    Unknown~option.\\
+    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 \\
+    \c__witharrows_option_ignored_str \\
+    \c__witharrows_available_keys_str
+  }
+  {
+    The~available~keys~are~(in~alphabetic~order):~
+    \seq_use:Nnnn \l__witharrows_options_Arrow_seq {~and~} {,~} {~and~}.
+  }
+\__witharrows_msg_new:nnn { Unknown~option~WithArrows }
+  {
+    Unknown~option.\\
+    The~key~'\l_keys_key_str'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_option_ignored_str \\
+    \c__witharrows_available_keys_str
+  }
+  {
+    The~available~keys~are~(in~alphabetic~order):~
+    \seq_use:Nnnn \l__witharrows_options_WithArrows_seq {~and~} {,~} {~and~}.
+  }
+\__witharrows_msg_new:nnn { Unknown~option~DispWithArrows }
+  {
+    Unknown~option.\\
+    The~key~'\l_keys_key_str'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_option_ignored_str \\
+    \c__witharrows_available_keys_str
+  }
+  {
+    The~available~keys~are~(in~alphabetic~order):~
+    \seq_use:Nnnn \l__witharrows_options_DispWithArrows_seq {~and~} {,~} {~and~}.
+  }
+\__witharrows_msg_new:nnn { Unknown~option~WithArrowsOptions }
+  {
+    Unknown~option.\\
+    The~key~'\l_keys_key_str'~is~unknown~in~
+    \token_to_str:N \WithArrowsOptions. \\
+    \c__witharrows_option_ignored_str \\
+    \c__witharrows_available_keys_str
+  }
+  {
+    The~available~keys~are~(in~alphabetic~order):~
+    \seq_use:Nnnn \l__witharrows_options_WithArrowsOptions_seq {~and~} {,~} {~and~}.
+  }
+\__witharrows_msg_new:nnn { Unknown~option~Arrow~in~code-after }
+  {
+    Unknown~option.\\
+    The~key~'\l_keys_key_str'~is~unknown~in~
+    \token_to_str:N \Arrow\ in~code-after. \\
+    \c__witharrows_option_ignored_str \\
+    \c__witharrows_available_keys_str
+  }
+  {
+    The~available~keys~are~(in~alphabetic~order):~
+    \seq_use:Nnnn \l__witharrows_options_Arrow_code_after_seq {~and~} {,~} {~and~}.
+  }
+\__witharrows_msg_new:nnn { Too~much~columns~in~WithArrows }
+  {
+    Too~much~columns.\\
+    Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N
+    \l__witharrows_nb_cols_int\ columns~and~you~try~to~use~one~more.~
+    Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str.~
+    If~you~really~want~to~use~more~columns~(after~the~arrows)~you~should~use~
+    the~option~'more-columns'~at~a~global~level~or~for~an~environment. \\
+    However,~you~can~go~one~for~this~time.
+    \__witharrows_potential_body_i:
+  }
+  { \__witharrows_potential_body_ii: }
+\__witharrows_msg_new:nnn { Too~much~columns~in~DispWithArrows }
+  {
+    Too~much~columns.\\
+    Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N
+    \l__witharrows_nb_cols_int\ columns~and~you~try~to~use~one~more.~
+    Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str\
+    at~the~end~of~row~\int_use:N \g__witharrows_line_int. \\
+    This~error~is~fatal.
+    \__witharrows_potential_body_i:
+  }
+  { \__witharrows_potential_body_ii: }
+\__witharrows_msg_new:nn { Negative~jump }
+  {
+    Incorrect~value.\\
+    You~can't~use~a~negative~value~for~the~option~'jump'~of~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\}.~
+    You~can~create~an~arrow~going~backwards~with~the~option~'<-'~of~Tikz. \\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nn { new-group~without~groups }
+  {
+    Misuse~of~a~key.\\
+    You~can't~use~the~option~'new-group'~for~the~command~
+    \l__witharrows_string_Arrow_for_msg_str\
+    because~you~are~not~in~'groups'~mode.~Try~to~use~the~option~
+    'groups'~in~your~environment~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nnn
+  { Too~few~lines~for~an~arrow }
+  {
+    Impossible~arrow.\\
+    Line~\l__witharrows_input_line_str\
+    :~an~arrow~specified~in~the~row~\int_use:N \l__witharrows_initial_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}~can't~be~drawn~
+    because~it~arrives~after~the~last~row~of~the~environment. \\
+    If~you~go~on,~this~arrow~will~be~ignored.
+    \__witharrows_potential_body_i:
+  }
+  { \__witharrows_potential_body_ii: }
+\__witharrows_msg_new:nn { o~arrow~with~no~arrow~under }
+  {
+    Problem~with~the~key~'o'.\\
+    Line~\l__witharrows_input_line_str\
+    :~there~is~no~arrow~'under'~your~arrow~of~type~'o'.\\
+    If~you~go~on,~this~arrow~won't~be~drawn.
+  }
+\__witharrows_msg_new:nnn { WithArrows~outside~math~mode }
+  {
+    You~are~outside~math~mode.\\
+    The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~in~math~mode~
+    like~the~environment~\{aligned\}~of~amsmath. \\
+    Nevertheless,~you~can~go~on.
+    \__witharrows_potential_body_i:
+  }
+  { \__witharrows_potential_body_ii: }
+\__witharrows_msg_new:nnn { DispWithArrows~in~math~mode }
+  {
+    You~are~in~math~mode.\\
+    The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~outside~math~
+    mode~like~the~environments~\{align\}~and~\{align*\}~of~amsmath. \\
+    This~error~is~fatal.
+    \__witharrows_potential_body_i:
+  }
+  { \__witharrows_potential_body_ii: }
+\__witharrows_msg_new:nn { Incompatible~options~in~Arrow }
+  {
+    Incompatible~options.\\
+    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. \\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nn { Incompatible~options a}
+  {
+    Incompatible~options.\\
+    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
+      {
+        \l__witharrows_string_Arrow_for_msg_str\
+        in~the~code-after~of~your~environment~\{\l__witharrows_type_env_str\}
+      }. \\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nnn { Arrow~not~in~last~column }
+  {
+    Bad~use~of~\l__witharrows_string_Arrow_for_msg_str.\\
+    You~should~use~the~command~\l__witharrows_string_Arrow_for_msg_str\
+    only~in~the~last~column~(column~\int_use:N\l__witharrows_nb_cols_int)~
+    in~the~row~\int_use:N \g__witharrows_line_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}.\\
+    However~you~can~go~on~for~this~time.
+    \__witharrows_potential_body_i:
+  }
+  { \__witharrows_potential_body_ii: }
+\__witharrows_msg_new:nn { Wrong~line~in~Arrow }
+  {
+    Wrong~line.\\
+    The~specification~of~line~'#1'~you~use~in~the~command~
+    \l__witharrows_string_Arrow_for_msg_str\
+    in~the~'code-after'~of~\{\l__witharrows_type_env_str\}~doesn't~exist. \\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nn { Both~lines~are~equal }
+  {
+    Both~lines~are~equal.\\
+    In~the~'code-after'~of~\{\l__witharrows_type_env_str\}~you~try~to~
+    draw~an~arrow~going~to~itself~from~the~line~'#1'.~This~is~not~possible. \\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nn { Wrong~line~specification~in~MultiArrow }
+  {
+    Wrong~line~specification.\\
+    The~specification~of~line~'#1'~doesn't~exist. \\
+    If~you~go~on,~it~will~be~ignored~for~\token_to_str:N \MultiArrow.
+  }
+\__witharrows_msg_new:nn { Too~small~specification~for~MultiArrow }
+  {
+    Too~small~specification.\\
+    The~specification~of~lines~you~gave~to~\token_to_str:N \MultiArrow\
+    is~too~small:~you~need~at~least~two~lines. \\
+    \c__witharrows_command_ignored_str
+  }
+\__witharrows_msg_new:nn { Not~allowed~in~DispWithArrows }
+  {
+    Forbidden~command.\\
+    The~command~\token_to_str:N #1
+    is~allowed~only~in~the~last~column~
+    (column~\int_use:N\l__witharrows_nb_cols_int)~of~\{\l__witharrows_type_env_str\}. \\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nn { Not~allowed~in~WithArrows }
+  {
+    Forbidden~command.\\
+    The~command~\token_to_str:N #1 is~not~allowed~in~\{\l__witharrows_type_env_str\}~
+    (it's~allowed~in~the~last~column~of~\{DispWithArrows\}). \\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nn { Inexistent~v-node }
+  {
+    There~is~a~problem.\\
+    Maybe~you~have~put~a~command~\token_to_str:N\cr\
+    instead~of~a~command~\token_to_str:N\\~at~the~end~of~
+    the~row~\l_tmpa_int\
+    of~your~environment~\{\l__witharrows_type_env_str\}. \\
+    This~error~is~fatal.
+  }
+\__witharrows_msg_new:nn { Option~xoffset~forbidden }
+  {
+    Incorrect~key.\\
+    You~can't~use~the~option~'xoffset'~in~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\}~
+    because~you~are~using~the~option~
+    ' \int_compare:nNnTF \l__witharrows_pos_arrow_int = 7
+        { group }
+        { groups } '.~It's~possible~for~an~independent~arrow~or~if~there~is~
+    only~one~arrow. \\
+    \c__witharrows_option_ignored_str
+  }
+\__witharrows_msg_new:nnn { Duplicate~name }
+  {
+    Duplicate~name.\\
+    The~name~'\l_keys_value_tl'~is~already~used~and~you~shouldn't~use~
+    the~same~environment~name~twice.~You~can~go~on,~but,~
+    maybe,~you~will~have~incorrect~results. \\
+    For~a~list~of~the~names~already~used,~type~H~<return>. \\
+    If~you~don't~want~to~see~this~message~again,~use~the~option~
+    'allow-duplicate-names'.
+  }
+  {
+    The~names~already~defined~in~this~document~are:~
+    \seq_use:Nnnn \g__witharrows_names_seq { ,~ } { ,~ } { ~and~ }.
+  }
+\__witharrows_msg_new:nn { Invalid~specification~for~MultiArrow }
+  {
+    Invalid~specification.\\
+    The~specification~of~rows~for~\token_to_str:N\MultiArrow\
+    (i.e.~#1)~is~invalid. \\
+    \c__witharrows_command_ignored_str
+  }
+\cs_new_protected:Npn \WithArrowsNewStyle #1 #2
+  {
+    \keys_if_exist:nnTF { WithArrows / Global } { #1 }
+      { \__witharrows_error:nn { Key~already~defined } { #1 } }
+      {
+        \seq_clear:N \l_tmpa_seq
+        \keyval_parse:NNn \__witharrows_valid_key:n \__witharrows_valid_key:nn { #2 }
+        \seq_if_empty:NTF \l_tmpa_seq
+          {
+            \seq_put_right:Nx \l__witharrows_options_WithArrows_seq
+              { \tl_to_str:n { #1 } }
+            \seq_put_right:Nx \l__witharrows_options_DispWithArrows_seq
+              { \tl_to_str:n { #1 } }
+            \seq_put_right:Nx \l__witharrows_options_WithArrowsOptions_seq
+              { \tl_to_str:N { #1 } }
+            \cs_if_exist:NTF \keys_precompile:nnN
+              {
+                \keys_precompile:nnN
+                  { WithArrows / WithArrowsOptions }
+                  { #2 }
+                  \l_tmpa_tl
+                \__witharrows_key_define:nV { #1 } \l_tmpa_tl
+              }
+              {
+                \keys_define:nn { WithArrows / Global }
+                  {
+                    #1 .code:n =
+                     { \keys_set:nn { WithArrows / WithArrowsOptions } { #2 } }
+                  }
+              }
+          }
+          { \__witharrows_error:nn { Impossible~style } { #1 } }
+      }
+  }
+\__witharrows_msg_new:nn { Impossible~style }
+  {
+    Impossible~style.\\
+    It's~impossible~to~define~the~style~'#1'~
+    because~it~contains~unknown~keys:~'
+    \seq_use:Nnnn \l_tmpa_seq { '~and~' } { ',~'} { ',~and~}'.
+  }
+\cs_new_protected:Npn \__witharrows_valid_key:n #1
+  {
+    \keys_if_exist:nnF { WithArrows / Global } { #1 }
+      { \seq_put_right:Nn \l_tmpa_seq { #1 } }
+  }
+\cs_new_protected:Npn \__witharrows_valid_key:nn #1 #2
+  {
+    \keys_if_exist:nnF { WithArrows / Global } { #1 }
+      { \seq_put_right:Nn \l_tmpa_seq { #1 } }
+  }
+\cs_new_protected:Npn \__witharrows_key_define:nn #1 #2
+  { \keys_define:nn { WithArrows / Global } { #1 .code:n = #2 } }
+\cs_generate_variant:Nn \__witharrows_key_define:nn { n V }
+\__witharrows_msg_new:nn { Key~already~defined }
+  {
+    Key~already~define.\\
+    The~key~'#1'~is~already~defined. \\
+    If~you~go~on,~your~instruction~\token_to_str:N\WithArrowsNewStyle\
+    will~be~ignored.
+  }
+\keys_define:nn { WithArrows / up-and-down }
+  {
+    radius .dim_set:N = \l__witharrows_up_and_down_radius_dim ,
+    radius .value_required:n = true ,
+    width .code:n =
+      \str_case:nnF { #1 }
+        {
+          { min } { \dim_zero:N \l__witharrows_arrow_width_dim }
+          { max } { \dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim }
+        }
+        { \dim_set:Nn \l__witharrows_arrow_width_dim { #1 } } ,
+    width .value_required:n = true ,
+    unknown .code:n = \__witharrows_error:n { Option~unknown~for~up-and-down }
+  }
+\__witharrows_msg_new:nn { Option~unknown~for~up-and-down }
+  {
+    Unknown~option.\\
+    The~option~'\l_keys_key_str'~is~unknown.~\c__witharrows_option_ignored_str
+  }
+\tl_const:Nn \c__witharrows_tikz_code_up_tl
+  {
+    \dim_case:nnF \l__witharrows_arrow_width_dim
+      {
+        \c_max_dim
+          {
+            \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\p1) -- node { #3 } (\x2,\y1) -- (\p2) ;
+          }
+        \c_zero_dim
+          {
+            \path node
+              {
+                \hbox_gset:Nn \g_tmpa_box { #3 }
+                \dim_gset:Nn \g_tmpa_dim
+                  { \box_wd:N \g_tmpa_box + \l__witharrows_up_and_down_radius_dim }
+              } ;
+            \draw
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\x2-\g_tmpa_dim,\y1)
+                 -- node { \box_use:N \g_tmpa_box }
+                 (\x2-\l__witharrows_up_and_down_radius_dim,\y1)
+                 [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+                 -| (\p2) ;
+          }
+      }
+      {
+        \draw
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in (\x2 - \l__witharrows_arrow_width_dim - \l__witharrows_up_and_down_radius_dim,\y1)
+             -- node { #3 } (\x2-\l__witharrows_up_and_down_radius_dim,\y1)
+             [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+             -| (\p2) ;
+      }
+  }
+\tl_const:Nn \c__witharrows_tikz_code_down_tl
+  {
+    \dim_case:nnF \l__witharrows_arrow_width_dim
+      {
+        \c_max_dim
+          {
+            \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ]
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\p1) -- (\x1,\y2) -- node { #3 } (\p2) ;
+          }
+        \c_zero_dim
+          {
+            \path node
+              {
+                \hbox_gset:Nn \g_tmpa_box { #3 }
+                \dim_gset:Nn \g_tmpa_dim
+                  { \box_wd:N \g_tmpa_box + \l__witharrows_up_and_down_radius_dim }
+              } ;
+            \draw
+              let \p1 = ( #1 ) , \p2 = ( #2 )
+              in (\p1)
+                 { [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] -- (\x1,\y2) }
+                 -- (\x1-\l__witharrows_up_and_down_radius_dim,\y2)
+                 -- node { \box_use:N \g_tmpa_box } (\x1-\g_tmpa_dim,\y2)
+                 -- ++ (-2mm,0) ;
+          }
+      }
+      {
+        \draw
+          let \p1 = ( #1 ) , \p2 = ( #2 )
+          in (\p1)
+             { [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] -- (\x1,\y2) }
+             -- (\x1-\l__witharrows_up_and_down_radius_dim,\y2)
+             -- node { #3 }
+                (\x1 - \l__witharrows_arrow_width_dim - \l__witharrows_up_and_down_radius_dim,\y2)
+             -- ++ (-2mm,0) ;
+      }
+  }
+\keys_define:nn { WithArrows / Arrow / FirstPass }
+  {
+    up   .code:n = \__witharrows_set_independent_bis: ,
+    down .code:n = \__witharrows_set_independent_bis: ,
+    up   .default:n = NoValue ,
+    down .default:n = NoValue
+  }
+\keys_define:nn { WithArrows / Arrow / SecondPass }
+  {
+    up .code:n =
+      \str_if_empty:NT \l__witharrows_previous_key_str
+        {
+          \str_set:Nn \l__witharrows_previous_key_str { up }
+          \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 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
+            }
+            { \__witharrows_error:n { calc~not~loaded } }
+        } ,
+    down .code:n =
+      \str_if_empty:NT \l__witharrows_previous_key_str
+        {
+          \str_set:Nn \l__witharrows_previous_key_str { down }
+          \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 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
+            }
+            { \__witharrows_error:n { calc~not~loaded } }
+        }
+  }
+\seq_put_right:Nn \l__witharrows_options_Arrow_seq { down }
+\seq_put_right:Nn \l__witharrows_options_Arrow_seq { up }
+\__witharrows_msg_new:nn { calc~not~loaded }
+  {
+    calc~not~loaded.\\
+    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
+  }
+\catcode `\@ = 12
+\ExplSyntaxOff
+\endinput
+%%
+%% End of file `witharrows.tex'.


Property changes on: trunk/Master/texmf-dist/tex/generic/witharrows/witharrows.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2024-02-19 21:35:59 UTC (rev 69994)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2024-02-19 21:38:09 UTC (rev 69995)
@@ -2590,6 +2590,7 @@
  'vruler',      '^..[^s].*\.sty', # not miscdoc.sty
  'wallcalendar','i18n|\.lua$|' . $standardtex,
  'wasy',        'wasyfont\.tex',
+ 'witharrows',  'witharrows\.tex|' . $standardtex,
  'wordcount',   '\.tex',
  'worldflags',	'worldflag_.*tex$|' . $standardtex,
  'xcharter',	'(-subs\.tex|\.fd|\.def|\.fontspec|\.sty)$', # not .py



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