summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/witharrows/witharrows.sty
blob: 81837e0a9af8c7c3eef0477a0330827f8faf11fe (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
%%
%% This is file `witharrows.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% witharrows.dtx  (with options: `package')
%% 
%% Copyright (C) 2017 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{1.7}
\def\myfiledate{2018/07/18}
\RequirePackage{tikz}
\usetikzlibrary{arrows.meta,bending}
\RequirePackage{l3keys2e}
\ProvidesExplPackage
  {witharrows}
  {\myfiledate}
  {\myfileversion}
  {Draws arrows for explanations on the right}
\RequirePackage{xparse}
\bool_new:N \g__wa_footnotehyper_bool
\bool_new:N \g__wa_footnote_bool
\int_new:N \l__wa_level_int
\keys_define:nn {WithArrows/package}
      {footnote      .bool_gset:N = \g__wa_footnote_bool,
       footnotehyper .bool_gset:N = \g__wa_footnotehyper_bool}
\ProcessKeysOptions {WithArrows/package}
\msg_new:nnn {witharrows}
             {Option~incompatible~with~Beamer}
             {The~option~"\tl_use:N \l_keys_key_tl"\ is~incompatible~
              with~Beamer~because~Beamer~has~its~own~system~to~extract~footnotes.}
\msg_new:nnn {witharrows}
             {footnote~with~footnotehyper~package}
             {You~can't~use~the~option~footnote~because~the~package~
              footnotehyper~has~already~been~loaded.~
              If~you~want,~you~can~use~the~option~"footnotehyper"~and~the~footnotes~
              within~the~environments~{WithArrows}~will~be~extracted~with~the~tools~
              of~the~package~footnotehyper.}
\msg_new:nnn {witharrows}
             {footnotehyper~with~footnote~package}
             {You~can't~use~the~option~"footnotehyper"~because~the~package~
              footnote~has~already~been~loaded.~
              If~you~want,~you~can~use~the~option~"footnote"~and~the~footnotes~
              within~the~environments~{WithArrows}~will~be~extracted~with~the~tools~
              of~the~package~footnote.}
\bool_if:NT \g__wa_footnote_bool
      {\@ifclassloaded {beamer}
                {\msg_fatal:nn {witharrows}
                               {Option~incompatible~with~Beamer}}
                {}
       \@ifpackageloaded{footnotehyper}
           {\msg_fatal:nn {witharrows}
                          {footnote~with~footnotehyper~package}}
           {}
       \usepackage{footnote}}
\bool_if:NT \g__wa_footnotehyper_bool
      {\@ifclassloaded {beamer}
                {\msg_fatal:nn {witharrows}
                               {Option~incompatible~with~Beamer}}
                {}
       \@ifpackageloaded{footnote}
           {\msg_fatal:nn {witharrows}
                          {footnotehyper~with~footnote~package}}
           {}
       \usepackage{footnotehyper}
       \bool_gset_true:N \g__wa_footnote_bool}
\tikzset{__wa_node_style/.style= {
               above = \l__wa_ystart_dim,
               inner~sep = 0 pt,
               minimum~width = 0pt,
               minimum~height = \l__wa_ygap_dim,
               red,
               \bool_if:NT \l__wa_shownodes_bool {draw} }}
\tikzset{__wa_standard/.style= { remember~picture,
                               overlay,
                               name~prefix = wa-\l__wa_prefix_str- }}
\tikzset{WithArrows/arrow/tips/.style = { > = {Straight~Barb[scale=1.2,bend]} }}
\tikzset{WithArrows/arrow/.style  = { align = left,
                                      auto = left,
                                      font = {\small\itshape},
                                      WithArrows/arrow/tips,
                                      bend~left = 45,
                                      -> }}
\cs_if_free:NT \spread@equation
    {\cs_set_protected:Npn \spread@equation
               {\openup\jot
                \cs_set_protected:Npn \spread@equation {}}}
\bool_new:N \l__wa_in_witharrows_bool
\seq_new:N \g__wa_position_in_the_tree_seq
\seq_gput_right:Nn \g__wa_position_in_the_tree_seq 1
\int_new:N \g__wa_last_env_int
\skip_new:N \l__wa_interline_skip
\int_new:N \l__wa_pos_env_int
\dim_new:N \l__wa_xoffset_dim
\dim_set:Nn \l__wa_xoffset_dim {3mm}
\int_new:N \l__wa_pos_arrows_int
\int_new:N \l__wa_previous_pos_arrows_int
\dim_new:N \g__wa_x_dim
\seq_new:N \g__wa_arrow_int_seq
\int_new:N \g__wa_arrow_int
\seq_new:N \g__wa_line_int_seq
\int_new:N \g__wa_line_int
\seq_new:N \g__wa_line_bis_int_seq
\int_new:N \g__wa_line_bis_int
\tl_new:N \l__wa_name_tl
\bool_new:N \l__wa_notag_bool
\tl_new:N \l__wa_tag_tl
\bool_new:N \l__wa_tag_star_bool
\tl_new:N \l__wa_label_tl
\cs_set:Nn \__wa_label:n {\tl_set:Nn \l__wa_label_tl {#1}}
\bool_new:N \l__wa_fleqn_bool
\dim_new:N \l__wa_mathindent_dim
\dim_set:Nn \l__wa_mathindent_dim {25pt}
\int_set:Nn \l__wa_level_int 1
\keys_define:nn {WithArrows/GlobalOrEnv}
   {  t   .code:n            = {\bool_if:NTF \l__wa_in_witharrows_bool
                                  {\int_set:Nn \l__wa_pos_env_int 0}
                                  {\msg_error:nn {witharrows} {Option~will~be~ignored}}},
      t   .value_forbidden:n = true,
      c   .code:n            = {\bool_if:NTF \l__wa_in_witharrows_bool
                                  {\int_set:Nn \l__wa_pos_env_int 1}
                                  {\msg_error:nn {witharrows} {Option~will~be~ignored}}},
      c   .value_forbidden:n = true,
      b   .code:n            = {\bool_if:NTF \l__wa_in_witharrows_bool
                                  {\int_set:Nn \l__wa_pos_env_int 2}
                                  {\msg_error:nn {witharrows} {Option~will~be~ignored}}},
      b   .value_forbidden:n = true,
      ygap .dim_set:N        = \l__wa_ygap_dim,
      ygap .value_required:n = true,
      ygap .initial:n        = 0.4 ex,
      ystart .dim_set:N        = \l__wa_ystart_dim,
      ystart .value_required:n = true,
      ystart .initial:n        = 0.4 ex,
      MoreColumns .code:n            = { \msg_redirect_name:nnn
                                         {witharrows}
                                         {Third~column~in~an~environment~{WithArrows}}
                                         {none} },
      MoreColumns .value_forbidden:n = true,
      AllowLineWithoutAmpersand .code:n = { \msg_redirect_name:nnn
                                            {witharrows}
                                            {All~lines~must~have~an~ampersand}
                                            {none} },
      AllowLineWithoutAmpersand .value_forbidden:n = true,
      CommandName .tl_set:N         = \l__wa_CommandName_tl,
      CommandName .initial:n        = Arrow ,
      CommandName .value_required:n = true,
      TikzCode .tl_set:N         = \l__wa_tikz_code_tl,
      TikzCode .initial:n        = \draw~(#1)~to~node{#3}~(#2)~; ,
      TikzCode .value_required:n = true,
      displaystyle .bool_set:N     = \l__wa_displaystyle_bool,
      displaystyle .initial:n      = false,
      shownodes .bool_set:N        = \l__wa_shownodes_bool,
      shownodes .initial:n         = false,
      shownodenames .bool_set:N    = \l__wa_shownodenames_bool,
      shownodenames .initial:n     = false,
      group    .code:n    = {\int_compare:nNnT \l__wa_previous_pos_arrows_int > {-1}
                                    {\msg_error:nn {witharrows}
                                                   {Two~options~are~incompatible}}
                             \int_set:Nn \l__wa_previous_pos_arrows_int 6
                             \int_set:Nn \l__wa_pos_arrows_int 6} ,
      group    .value_forbidden:n = true,
      groups   .code:n   = {\int_compare:nNnT \l__wa_previous_pos_arrows_int > {-1}
                                   {\msg_error:nn {witharrows}
                                                  {Two~options~are~incompatible}}
                            \int_set:Nn \l__wa_previous_pos_arrows_int 7
                            \int_set:Nn \l__wa_pos_arrows_int 7} ,
      groups   .value_forbidden:n = true,
      CodeBefore  .code:n = {\int_compare:nNnTF \l__wa_level_int = 1
                              {\msg_error:nn {witharrows} {Option~will~be~ignored}}
                              {\tl_put_right:Nn \l__wa_code_before_tl {#1}}} ,
      CodeBefore  .value_required:n = true,
      CodeAfter .code:n = {\int_compare:nNnTF \l__wa_level_int = 1
                              {\msg_error:nn {witharrows} {Option~will~be~ignored}}
                              {\tl_put_right:Nn \l__wa_code_after_tl {#1}}} ,
      CodeAfter .value_required:n = true,
      name .code:n = {\int_compare:nNnTF \l__wa_level_int = 1
                              {\msg_error:nn {witharrows} {Option~will~be~ignored}}
                              {\tl_set:Nn \l__wa_name_tl {#1}}} ,
      name .value_required:n = true,
      fleqn   .code:n = {\bool_if:NTF \l__wa_in_witharrows_bool
                             {\msg_error:nn {witharrows} {Option~will~be~ignored}}
                             {\tl_if_eq:nnTF {#1} {true}
                                 {\bool_set_true:N \l__wa_fleqn_bool}
                                 {\bool_set_false:N \l__wa_fleqn_bool}}},
      fleqn   .default:n = true,
      mathindent   .code:n = {\bool_if:NTF \l__wa_in_witharrows_bool
                               {\msg_error:nn {witharrows} {Option~will~be~ignored}}
                               {\dim_set:Nn \l__wa_mathindent_dim {#1}}},
      mathindent   .value_required:n = true,
      notag   .code:n = {\bool_if:NTF \l__wa_in_witharrows_bool
                             {\msg_error:nn {witharrows} {Option~will~be~ignored}}
                             {\tl_if_eq:nnTF {#1} {true}
                                 {\bool_set_true:N \l__wa_notag_bool}
                                 {\bool_set_false:N \l__wa_notag_bool}}},
      notag   .default:n = true,
      nonumber .meta:n   = notag,
      unknown .code:n  = \msg_error:nn {witharrows} {Option~unknown}
     }
\keys_define:nn {WithArrows/General}
     {tikz     .code:n            = \tikzset {WithArrows/arrow/.append~style = {#1}},
      tikz     .initial:n         = {},
      tikz     .value_required:n  = true,
      rr       .value_forbidden:n = true,
      rr       .code:n            = \__wa_analyze_option_position:n 0 ,
      ll       .value_forbidden:n = true,
      ll       .code:n            = \__wa_analyze_option_position:n 1 ,
      rl       .value_forbidden:n = true,
      rl       .code:n            = \__wa_analyze_option_position:n 2 ,
      lr       .value_forbidden:n = true,
      lr       .code:n            = \__wa_analyze_option_position:n 3 ,
      i        .value_forbidden:n = true,
      i        .code:n            = \__wa_analyze_option_position:n 5 ,
      xoffset  .code:n  = {\bool_if:nTF {\int_compare_p:nNn \l__wa_level_int = 3 &&
                                        \int_compare_p:nNn \l__wa_pos_arrows_int > 5}
                               {\msg_error:nn {witharrows}
                                              {Option~incompatible~with~"group(s)"}}
                               {\dim_set:Nn \l__wa_xoffset_dim {#1}}} ,
      xoffset  .value_required:n  = true,
      jot       .code:n     = {\int_compare:nNnTF \l__wa_level_int = 2
                                  {\dim_set:Nn \jot {#1}}
                                  {\msg_error:nn {witharrows}
                                                 {Option~will~be~ignored}}} ,
      jot       .value_required:n  = true,
      interline   .code:n       = {\int_compare:nNnTF \l__wa_level_int = 2
                                      {\skip_set:Nn \l__wa_interline_skip {#1}}
                                      {\msg_error:nn {witharrows}
                                                     {Option~will~be~ignored}}} ,
      interline   .value_required:n = true,
      jump    .code:n  = \msg_error:nn {witharrows} {Option~will~be~ignored} ,
      unknown .code:n  = \msg_error:nn {witharrows} {Option~unknown}
}
\keys_define:nn {WithArrows/jump}
     {jump  .code:n = {\int_set:Nn \l__wa_jump_int {#1}
                       \int_compare:nNnF \l__wa_jump_int > 0
                           {\msg_error:nn {witharrows}
                                          {The~option~"jump"~must~be~non~negative}}} ,
      jump  .value_required:n  = true}
\cs_new_protected:Nn \__wa_analyze_option_position:n
     {\int_compare:nNnT \l__wa_previous_pos_arrows_int > {-1}
        {\msg_error:nn {witharrows}
                       {Two~options~are~incompatible}}
      \int_set:Nn \l__wa_previous_pos_arrows_int {#1}
      \bool_if:nTF { \int_compare_p:nNn \l__wa_level_int = 3 &&
                     \int_compare_p:nNn \l__wa_pos_arrows_int > 5}
         {\msg_error:nn {witharrows}
                        {Option~incompatible~with~"group(s)"}}
         {\int_set:Nn \l__wa_pos_arrows_int {#1}}}
\NewDocumentCommand \WithArrowsOptions {m}
    {\int_set:Nn \l__wa_previous_pos_arrows_int {-1}
     \keys_set_known:nnN {WithArrows/General} {#1} \l_tmpa_tl
     \keys_set:nV {WithArrows/GlobalOrEnv} \l_tmpa_tl}
\NewDocumentCommand \__wa_Arrow {O{} m O{}}
         {
          \int_gincr:N \g__wa_arrow_int
          \int_zero_new:N \l__wa_jump_int
          \int_set:Nn \l__wa_jump_int 1
          \keys_set_known:nnN {WithArrows/jump} {#1,#3} \l_tmpa_tl
          \prop_put:NnV \l_tmpa_prop {initial} \g__wa_line_int
          \int_set:Nn \l_tmpa_int {\g__wa_line_int + \l__wa_jump_int}
          \prop_put:NnV \l_tmpa_prop {final} \l_tmpa_int
          \prop_put:NnV \l_tmpa_prop {options} \l_tmpa_tl
          \prop_put:Nnn \l_tmpa_prop {label} {#2}
          \prop_gclear_new:c
                {g__wa_arrow_\l__wa_prefix_str _\int_use:N\g__wa_arrow_int _prop}
          \prop_gset_eq:cN
                {g__wa_arrow_\l__wa_prefix_str _\int_use:N\g__wa_arrow_int _prop}
                \l_tmpa_prop
          }
\cs_new_protected:Nn \__wa_Arrow_first_column:
               {\tl_set:Nn \l_tmpa_tl {Arrow}
                \msg_error:nn {witharrows} {Arrow~in~first~column}
                \__wa_Arrow}
\cs_new_protected:Nn \__wa_pre_environment:n
         { \seq_gput_right:NV \g__wa_arrow_int_seq \g__wa_arrow_int
           \int_gzero:N \g__wa_arrow_int
           \seq_gput_right:NV \g__wa_line_int_seq \g__wa_line_int
           \int_gzero:N \g__wa_line_int
           \seq_gput_right:NV \g__wa_line_bis_int_seq \g__wa_line_bis_int
           \int_gzero:N \g__wa_line_bis_int
           \seq_gput_right:Nn \g__wa_position_in_the_tree_seq 1
           \seq_set_eq:NN \l_tmpa_seq \g__wa_position_in_the_tree_seq
           \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
           \str_clear_new:N \l__wa_prefix_str
           \str_set:Nx \l__wa_prefix_str {\seq_use:Nnnn \l_tmpa_seq {-} {-} {-}}
           \cs_set_eq:NN \\ \__wa_cr:
           \dim_zero:N \mathsurround
           \int_zero_new:N \l__wa_initial_int
           \int_zero_new:N \l__wa_final_int
           \int_zero_new:N \l__wa_arrow_int
           \skip_zero:N \l__wa_interline_skip
           \tl_clear_new:N \l__wa_code_before_tl
           \tl_clear_new:N \l__wa_code_after_tl
           \int_set:Nn \l__wa_previous_pos_arrows_int {-1}
           \int_set:Nn \l__wa_level_int 2
           \keys_set_known:nnN {WithArrows/General} {#1} \l_tmpa_tl
           \keys_set:nV {WithArrows/GlobalOrEnv} \l_tmpa_tl
           \bool_if:NT \g__wa_footnote_bool {\begin{savenotes}}
           \l__wa_code_before_tl
           \cs_set_eq:cN \l__wa_CommandName_tl \__wa_Arrow}
\NewDocumentEnvironment {WithArrows} {O{}}
         { \bool_set_true:N \l__wa_in_witharrows_bool
           \reverse_if:N \if_mode_math:
                             \msg_error:nn {witharrows}
                                           {{WithArrows}~used~outside~math~mode}
                         \fi:
           \cs_set:Npn \notag {\msg_error:nnn {witharrows}
                                              {Command~not~allowed~in~{WithArrows}}
                                              {\notag}}
           \cs_set:Npn \nonumber {\msg_error:nnn {witharrows}
                                                 {Command~not~allowed~in~{WithArrows}}
                                                 {\nonumber}}
           \cs_set:Npn \tag ##1 {\msg_error:nnn {witharrows}
                                                {Command~not~allowed~in~{WithArrows}}
                                                {\tag}}
           \cs_set:Npn \label ##1 {\msg_error:nnn {witharrows}
                                                  {Command~not~allowed~in~{WithArrows}}
                                                  {\label}}
           \__wa_pre_environment:n {#1}
           \int_case:nn \l__wa_pos_env_int
                   {0 {\vtop}
                    1 {\vcenter}
                    2 {\vbox}}
           \bgroup
           \spread@equation
           \ialign\bgroup
           \int_gincr:N \g__wa_line_int
           \cs_set_eq:cN \l__wa_CommandName_tl \__wa_Arrow_first_column:
           \strut\hfil
           $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {##}$
           &
           \int_gincr:N \g__wa_line_bis_int
           $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {{}##}$
           \tl_if_empty:NTF \l__wa_name_tl
              {\tikz [remember~picture,overlay]
                    \node [__wa_node_style,
                           name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-l] {} ;}
              {\tikz [remember~picture,overlay]
                    \node [__wa_node_style,
                           name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-l,
                           alias = \l__wa_name_tl-\int_use:N\g__wa_line_int-l] {} ;}
           \hfil
           \tl_if_empty:NTF \l__wa_name_tl
              {\tikz [remember~picture,overlay]
                    \node [__wa_node_style,
                           name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-r] {} ;}
              {\tikz [remember~picture,overlay]
                    \node [__wa_node_style,
                           name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-r,
                           alias = \l__wa_name_tl-\int_use:N\g__wa_line_int-r] {} ;}
           \bool_if:NT \l__wa_shownodenames_bool
                {\hbox_overlap_right:n {\small wa-\l__wa_prefix_str
                                                 -\int_use:N\g__wa_line_int}}
           && \msg_error:nn {witharrows} {Third~column~in~an~environment~{WithArrows}}
           $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {##}$
           \cr
          }
          {\crcr
           \egroup
           \egroup
           \__wa_post_environment:}
\cs_new_protected:Nn \__wa_post_environment:
          {\int_compare:nNnT \g__wa_line_bis_int < \g__wa_line_int
                  {\msg_error:nn {witharrows} {All~lines~must~have~an~ampersand}}
           \int_compare:nNnT \g__wa_arrow_int > 0
                  {\int_compare:nNnTF \l__wa_pos_arrows_int > 5
                    \__wa_draw_arrows:
                    {\__wa_draw_arrows:nn 1 \g__wa_arrow_int}}
           \group_begin:
           \tikzset{every~picture/.style = __wa_standard}
           \cs_set:Npn \NbLines {\int_use:N \g__wa_line_int}
           \cs_set_eq:NN \MultiArrow \__wa_MultiArrow:nn
           \cs_set_eq:cN \l__wa_CommandName_tl \__wa_Arrow_code_after
           \l__wa_code_after_tl
           \group_end:
           \bool_if:NT \g__wa_footnote_bool {\end{savenotes}}
           \seq_gpop_right:NN \g__wa_position_in_the_tree_seq \l_tmpa_tl
           \seq_gpop_right:NN \g__wa_position_in_the_tree_seq \l_tmpa_tl
           \seq_gput_right:Nx \g__wa_position_in_the_tree_seq {\int_eval:n {\l_tmpa_tl+1}}
           \int_compare:nNnT {\seq_count:N \g__wa_position_in_the_tree_seq} = 1
                      {\int_gincr:N \g__wa_last_env_int}
           \seq_gpop_right:NN \g__wa_arrow_int_seq {\l_tmpa_tl}
           \int_gset:Nn \g__wa_arrow_int {\l_tmpa_tl}
           \seq_gpop_right:NN \g__wa_line_int_seq \l_tmpa_tl
           \int_gset:Nn \g__wa_line_int {\l_tmpa_tl}
           \seq_gpop_right:NN \g__wa_line_bis_int_seq \l_tmpa_tl
           \int_gset:Nn \g__wa_line_bis_int {\l_tmpa_tl}
           }
\cs_new_protected:Nn \__wa_cr:
      {\scan_stop:
       \group_align_safe_begin:
       \peek_meaning_remove:NTF * \__wa_cr_i: \__wa_cr_i:}
\cs_new_protected:Nn \__wa_cr_i:
      {\peek_meaning:NTF [ {\__wa_cr_ii:} {\__wa_cr_ii:[\c_zero_dim]} }
\cs_new_protected:Npn \__wa_cr_ii:[#1]
      {\group_align_safe_end:
       \bool_if:NF \l__wa_in_witharrows_bool
           {\bool_if:NTF \l__wa_notag_bool
                {&}
                {
                 \tl_if_empty:NT \l__wa_tag_tl
                    {\int_gincr:N \c@equation}
                 \cs_gset:Npx \g_tmpa_tl
                      {\tl_if_empty:NTF \l__wa_tag_tl
                          \theequation
                          \l__wa_tag_tl}
                 \tl_if_empty:NF \l__wa_label_tl
                      {
                       \cs_set_eq:NN \@currentlabel \g_tmpa_tl
                       \cs_if_exist:NT \hyper@refstepcounter
                            {\cs_set:Npn \This@name {equation}
                             \hyper@refstepcounter{equation}}
                       \__wa_old_label {\l__wa_label_tl}}
                 \bool_gset_eq:NN \g_tmpa_bool \l__wa_tag_star_bool
                 & \cs_set_eq:NN \theequation \g_tmpa_tl
                   \bool_if:NT \g_tmpa_bool {\cs_set:Npn \tagform@ {}}
                   \hbox_overlap_left:n \@eqnnum
             }}
       \cr\noalign{\skip_vertical:n {#1 + \l__wa_interline_skip}
       \scan_stop:}}
\NewDocumentEnvironment {DispWithArrows} {O{}}
         {
           \cs_if_exist_use:N \intertext@
           \if_mode_math:
               \msg_error:nn {witharrows}
                             {{DispWithArrows}~used~in~math~mode}
           \fi:
           \bool_set_false:N \l__wa_in_witharrows_bool
           \__wa_pre_environment:n {#1}
           \begin{displaymath}
           \vcenter \bgroup
           \spread@equation
           \bool_if:NTF \l__wa_fleqn_bool
                  {\tabskip = \c_zero_skip}
                  {\tabskip = 0 pt plus 1000 pt minus 1000 pt}
           \cs_if_exist:NTF \ltx@label
              {\cs_set_eq:NN \__wa_old_label \ltx@label}
              {\cs_set_eq:NN \__wa_old_label \label}
           \cs_set:Npn \notag {\msg_error:nnn {witharrows}
                                              {Command~not~allowed~in~{DispWithArrows}}
                                              {\notag}}
           \cs_set:Npn \nonumber {\msg_error:nnn {witharrows}
                                                 {Command~not~allowed~in~{DispWithArrows}}
                                                 {\nonumber}}
           \cs_set:Npn \tag ##1 {\msg_error:nnn {witharrows}
                                                {Command~not~allowed~in~{DispWithArrows}}
                                                {\tag}}
           \cs_set:Npn \label ##1 {\msg_error:nnn {witharrows}
                                                  {Command~not~allowed~in~{DispWithArrows}}
                                                  {\label}}
           \halign to \displaywidth \bgroup
             \int_gincr:N \g__wa_line_int
             \cs_set_eq:cN \l__wa_CommandName_tl \__wa_Arrow_first_column:
             \strut
             \bool_if:NT \l__wa_fleqn_bool
                   {\hspace{\l__wa_mathindent_dim}}
             \hfil
             $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {##}$
             \tabskip = \c_zero_skip
            &
             \cs_set:Npn \notag {\bool_set_true:N \l__wa_notag_bool}
             \cs_set_eq:NN \nonumber \notag
             \cs_set_eq:NN \tag \__wa_tag
             \cs_set_eq:NN \label \__wa_label:n
             $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {{}##}$
             \tabskip = 0 pt plus 1000 pt minus 1000 pt
             \int_gincr:N \g__wa_line_bis_int
             \tl_if_empty:NTF \l__wa_name_tl
                {\tikz [remember~picture,overlay]
                      \node [__wa_node_style,
                             name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-l] {} ;}
                {\tikz [remember~picture,overlay]
                      \node [__wa_node_style,
                             name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-l,
                             alias = \l__wa_name_tl-\int_use:N\g__wa_line_int-l] {} ;}
             \hfil
             \tl_if_empty:NTF \l__wa_name_tl
                {\tikz [remember~picture,overlay]
                      \node [__wa_node_style,
                             name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-r] {} ;}
                {\tikz [remember~picture,overlay]
                      \node [__wa_node_style,
                             name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-r,
                             alias = \l__wa_name_tl-\int_use:N\g__wa_line_int-r] {} ;}
             \bool_if:NT \l__wa_shownodenames_bool
                  {\hbox_overlap_right:n {\small wa-\l__wa_prefix_str
                                                   -\int_use:N\g__wa_line_int}}
            & ##
             \tabskip = \c_zero_skip
            && \msg_error:nn {witharrows} {Third~column~in~an~environment~{DispWithArrows}}
               \iffalse ## \fi
             \cr}
          {\\
           \egroup
           \egroup
           \end{displaymath}
           \__wa_post_environment:
           \ignorespacesafterend
           }
\NewDocumentCommand \__wa_tag {sm}
    {\bool_set_false:N \l__wa_notag_bool
     \tl_set:Nn \l__wa_tag_tl {#2}
     \bool_set:Nn \l__wa_tag_star_bool {#1}
     \bool_if:nT {#1 && ! \cs_if_exist_p:N \tagform@}
          { \msg_error:nn {witharrows} {tag*~without~amsmath} }
    }
\NewDocumentEnvironment {DispWithArrows*} {}
     {\WithArrowsOptions{notag}
      \DispWithArrows}
     {\endDispWithArrows}
\cs_new_protected:Nn \__wa_draw_arrows:
  { \group_begin:
    \int_zero_new:N \l__wa_first_arrow_of_group_int
    \int_zero_new:N \l__wa_first_line_of_group_int
    \int_zero_new:N \l__wa_last_line_of_group_int
    \bool_set_true:N \l__wa_new_group_bool
    \int_set:Nn \l__wa_arrow_int 1
    \int_until_do:nNnn \l__wa_arrow_int > \g__wa_arrow_int
     {
       \prop_get:cnN {g__wa_arrow_\l__wa_prefix_str _\int_use:N\l__wa_arrow_int _prop}
                     {initial} \l_tmpa_tl
       \int_set:Nn \l__wa_initial_int {\l_tmpa_tl}
       \prop_get:cnN {g__wa_arrow_\l__wa_prefix_str _\int_use:N\l__wa_arrow_int _prop}
                     {final} \l_tmpa_tl
       \int_set:Nn \l__wa_final_int {\l_tmpa_tl}
       \bool_if:nT {     \int_compare_p:nNn \l__wa_pos_arrows_int = 7
                      && \int_compare_p:nNn \l__wa_arrow_int > 1
                      && \int_compare_p:nNn
                                 \l__wa_initial_int > \l__wa_last_line_of_group_int}
              {\__wa_draw_arrows:nn \l__wa_first_arrow_of_group_int {\l__wa_arrow_int - 1}
               \bool_set_true:N \l__wa_new_group_bool}
       \bool_if:nTF \l__wa_new_group_bool
              {\bool_set_false:N \l__wa_new_group_bool
               \int_set:Nn \l__wa_first_arrow_of_group_int \l__wa_arrow_int
               \int_set:Nn \l__wa_first_line_of_group_int \l__wa_initial_int
               \int_set:Nn \l__wa_last_line_of_group_int \l__wa_final_int
               \begin{tikzpicture} [__wa_standard]
               \tikz@parse@node\pgfutil@firstofone (\int_use:N\l__wa_initial_int-l)
               \dim_gset:Nn \g__wa_x_dim \pgf@x
               \end{tikzpicture}
               }
              {\int_set:Nn \l__wa_last_line_of_group_int
                     {\int_max:nn \l__wa_last_line_of_group_int \l__wa_final_int}}
       \__wa_update_x_value:nn \l__wa_initial_int \l__wa_final_int
       \int_incr:N \l__wa_arrow_int
     }
     \__wa_draw_arrows:nn \l__wa_first_arrow_of_group_int \g__wa_arrow_int
     \group_end:
  }
\cs_generate_variant:Nn \keys_set:nn {no}
\cs_new_protected:Nn \__wa_keys_set: {\keys_set:no {WithArrows/General}}
\cs_new_protected:Nn \__wa_draw_arrows:nn
  {\group_begin:
   \int_zero_new:N \l__wa_first_arrow_int
   \int_set:Nn \l__wa_first_arrow_int {#1}
   \int_zero_new:N \l__wa_last_arrow_int
   \int_set:Nn \l__wa_last_arrow_int {#2}
   \int_set:Nn \l__wa_arrow_int \l__wa_first_arrow_int
   \int_until_do:nNnn \l__wa_arrow_int > \l__wa_last_arrow_int
     {
      \prop_get:cnN {g__wa_arrow_\l__wa_prefix_str _\int_use:N\l__wa_arrow_int _prop}
                    {initial} \l_tmpa_tl
      \int_set:Nn \l__wa_initial_int {\l_tmpa_tl}
      \prop_get:cnN {g__wa_arrow_\l__wa_prefix_str _\int_use:N\l__wa_arrow_int _prop}
                    {final} \l_tmpa_tl
      \int_set:Nn \l__wa_final_int {\l_tmpa_tl}
      \int_compare:nNnTF \l__wa_final_int > \g__wa_line_int
         {\msg_error:nn {witharrows} {Too~few~lines~for~an~arrow}}
         {\cs_if_free:cTF {pgf@sh@ns@wa-\l__wa_prefix_str-\int_use:N\l__wa_initial_int-l}
             { \msg_error:nn {witharrows} {A~PGF~node~doesn't~exist} }
             {\cs_if_free:cTF {pgf@sh@ns@wa-\l__wa_prefix_str-\int_use:N\l__wa_final_int-l}
                 { \msg_error:nn {witharrows} {A~PGF~node~doesn't~exist} }
                 {\__wa_draw_arrows_i:}}}
      \int_incr:N \l__wa_arrow_int
     }
   \group_end:
   }
\cs_new:Nn \__wa_draw_arrows_i:
     {\group_begin:
      \int_set:Nn \l__wa_previous_pos_arrows_int {-1}
      \int_set:Nn \l__wa_level_int 3
      \prop_get:cnN {g__wa_arrow_\l__wa_prefix_str
                        _\int_use:N\l__wa_arrow_int _prop} {options} \l_tmpa_tl
      \exp_args:NNo \exp_args:No
          \__wa_keys_set: {\l_tmpa_tl,tikz={xshift = \l__wa_xoffset_dim}}
      \bool_set_false:N \l__wa_initial_r_bool
      \bool_set_false:N \l__wa_final_r_bool
      \int_case:nn \l__wa_pos_arrows_int
             {0 {\bool_set_true:N \l__wa_initial_r_bool
                 \bool_set_true:N \l__wa_final_r_bool}
              2 {\bool_set_true:N \l__wa_initial_r_bool}
              3 {\bool_set_true:N \l__wa_final_r_bool}}
      \int_compare:nNnT \l__wa_pos_arrows_int = 5
             {
              \begin{tikzpicture} [__wa_standard]
              \tikz@parse@node\pgfutil@firstofone (\int_use:N\l__wa_initial_int-l)
              \dim_gset:Nn \g__wa_x_dim \pgf@x
              \end{tikzpicture}
              \__wa_update_x_value:nn \l__wa_initial_int \l__wa_final_int
             }
      \tl_set:Nx \l__wa_initial_tl
              {\int_use:N\l__wa_initial_int-\bool_if:NTF\l__wa_initial_r_bool rl .south}
      \tl_set:Nx \l__wa_final_tl
              {\int_use:N\l__wa_final_int-\bool_if:NTF\l__wa_final_r_bool rl .north}
      \prop_get:cnN {g__wa_arrow_\l__wa_prefix_str _\int_use:N\l__wa_arrow_int _prop}
                    {label}
                    \l_tmpa_tl
      \int_compare:nNnTF \l__wa_pos_arrows_int < 5
         {\begin{tikzpicture} [__wa_standard]
              \tikz@scan@one@point\pgfutil@firstofone(\l__wa_initial_tl)
              \tl_gset:Nx \g_tmpa_tl {\dim_use:N\pgf@x,\dim_use:N\pgf@y}
              \tikz@scan@one@point\pgfutil@firstofone(\l__wa_final_tl)
              \tl_gset:Nx \g_tmpb_tl {\dim_use:N\pgf@x,\dim_use:N\pgf@y}
          \end{tikzpicture}
}
         {\begin{tikzpicture} [__wa_standard]
              \tikz@scan@one@point\pgfutil@firstofone (\l__wa_initial_tl)
              \tl_gset:Nx \g_tmpa_tl {\dim_use:N \g__wa_x_dim , \dim_use:N \pgf@y}
              \tikz@scan@one@point\pgfutil@firstofone (\l__wa_final_tl)
              \tl_gset:Nx \g_tmpb_tl {\dim_use:N \g__wa_x_dim , \dim_use:N \pgf@y}
          \end{tikzpicture}}
      \__wa_draw_arrow:nno {\g_tmpa_tl} {\g_tmpb_tl} {\l_tmpa_tl}
      \group_end: }
\cs_new_protected:Nn \__wa_def_function_tmpa:n
    {\cs_set:Nn \__wa_tmpa:nnn
          {\begin{tikzpicture}[__wa_standard,every~path/.style = {WithArrows/arrow}]
              #1
           \end{tikzpicture}}}
\cs_new_protected:Nn \__wa_draw_arrow:nnn
           {\exp_args:No \__wa_def_function_tmpa:n \l__wa_tikz_code_tl
            \__wa_tmpa:nnn {#1} {#2} {#3} }
\cs_generate_variant:Nn \__wa_draw_arrow:nnn {nno}
\cs_new_protected:Nn \__wa_update_x_value:nn
    {\int_step_inline:nnnn {#1} \c_one {#2}
       {\cs_if_exist:cT {pgf@sh@ns@wa-\l__wa_prefix_str-##1-l}
          {\begin{tikzpicture} [__wa_standard]
           \tikz@scan@one@point\pgfutil@firstofone (##1-l)
           \dim_gset:Nn \g__wa_x_dim {\dim_max:nn \g__wa_x_dim \pgf@x}
           \end{tikzpicture} } } }
\cs_new:Npn \WithArrowsLastEnv {\int_use:N \g__wa_last_env_int}
\keys_define:nn {WithArrows/CodeAfter}
     {tikz     .code:n            = \tikzset {WithArrows/arrow/.append~style = {#1}} ,
      tikz     .value_required:n  = true,
      rr       .value_forbidden:n = true,
      rr       .code:n            = \__wa_analyze_option_position:n 0 ,
      ll       .value_forbidden:n = true,
      ll       .code:n            = \__wa_analyze_option_position:n 1 ,
      rl       .value_forbidden:n = true,
      rl       .code:n            = \__wa_analyze_option_position:n 2 ,
      lr       .value_forbidden:n = true,
      lr       .code:n            = \__wa_analyze_option_position:n 3 ,
      v        .value_forbidden:n = true,
      v        .code:n            = \__wa_analyze_option_position:n 4 ,
      TikzCode .tl_set:N          = \l__wa_tikz_code_tl,
      TikzCode .value_required:n  = true,
      xoffset  .dim_set:N         = \l__wa_xoffset_dim,
      xoffset  .value_required:n  = true}
\NewDocumentCommand \__wa_Arrow_code_after {O{} mmm O{}}
     {\int_set:Nn \l__wa_pos_arrows_int 1
      \int_set:Nn \l__wa_previous_pos_arrows_int {-1}
      \group_begin:
           \int_set:Nn \l__wa_level_int 3
           \keys_set:nn {WithArrows/CodeAfter}
                        {#1,#5,tikz={xshift = \l__wa_xoffset_dim}}
           \bool_set_false:N \l__wa_initial_r_bool
           \bool_set_false:N \l__wa_final_r_bool
           \int_case:nn \l__wa_pos_arrows_int
                  {0 {\bool_set_true:N \l__wa_initial_r_bool
                      \bool_set_true:N \l__wa_final_r_bool}
                   2 {\bool_set_true:N \l__wa_initial_r_bool}
                   3 {\bool_set_true:N \l__wa_final_r_bool}}
           \cs_if_free:cTF {pgf@sh@ns@wa-\l__wa_prefix_str-#2-l}
             {\msg_error:nnx {witharrows} {Wrong~line~specification~in~Arrow} {#2}}
             {\cs_if_free:cTF {pgf@sh@ns@wa-\l__wa_prefix_str-#3-l}
                {\msg_error:nnx {witharrows} {Wrong~line~specification~in~Arrow} {#3}}
                {\int_compare:nNnTF \l__wa_pos_arrows_int = 4
                    {\begin{tikzpicture} [__wa_standard]
                        \tikz@scan@one@point\pgfutil@firstofone(#2-l.south)
                        \dim_set_eq:NN \l_tmpa_dim \pgf@x
                        \dim_set_eq:NN \l_tmpb_dim \pgf@y
                        \tikz@scan@one@point\pgfutil@firstofone(#3-l.north)
                        \dim_set:Nn \l_tmpa_dim {\dim_max:nn \l_tmpa_dim \pgf@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@y}
                     \end{tikzpicture} }
                    {\begin{tikzpicture} [__wa_standard]
                        \tikz@scan@one@point\pgfutil@firstofone
                                            (#2-\bool_if:NTF\l__wa_initial_r_bool rl .south)
                        \tl_gset:Nx \g_tmpa_tl {\dim_use:N \pgf@x , \dim_use:N \pgf@y}
                        \tikz@scan@one@point\pgfutil@firstofone
                                            (#3-\bool_if:NTF\l__wa_final_r_bool rl .north)
                        \tl_gset:Nx \g_tmpb_tl {\dim_use:N \pgf@x , \dim_use:N \pgf@y}
                     \end{tikzpicture}}
                 \__wa_draw_arrow:nnn {\g_tmpa_tl} {\g_tmpb_tl} {#4} }}
      \group_end:
      }
\cs_new_protected:Nn \__wa_MultiArrow:nn
    {
     \foreach \x in {#1} {\cs_if_free:cTF {pgf@sh@ns@wa-\l__wa_prefix_str-\x-l}
                            {\msg_error:nnx {witharrows}
                                            {Wrong~line~specification~in~MultiArrow}
                                            {\x}}
                            {\clist_gput_right:Nx \g_tmpa_clist {\x}}}
     \int_compare:nNnTF {\clist_count:N \g_tmpa_clist} < 2
       {\msg_error:nn {witharrows} {Too~small~specification~for~MultiArrow}}
       {\clist_sort:Nn \g_tmpa_clist
                       {\int_compare:nNnTF {##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:Nx \__wa_MultiArrow_i:n {\g_tmpa_clist}
        \begin{tikzpicture}[__wa_standard,every~path/.style={WithArrows/arrow}]
          \draw [<->] ($(\l_tmpa_tl-r.south)+(\l__wa_xoffset_dim,0)$)
                       -- ++(5mm,0)
                       -- node {#2} ($(\l_tmpb_tl-r.south)+(\l__wa_xoffset_dim+5mm,0)$)
                       -- ($(\l_tmpb_tl-r.south)+(\l__wa_xoffset_dim,0)$)  ;
        \end{tikzpicture} } }

\cs_new_protected:Nn \__wa_MultiArrow_i:n
     {\begin{tikzpicture}[__wa_standard,every~path/.style={WithArrows/arrow}]
        \foreach \k in {#1}
           {\draw[<-] ($(\k-r.south)+(\l__wa_xoffset_dim,0)$) -- ++(5mm,0) ;} ;
      \end{tikzpicture}}
\msg_new:nnn {witharrows}
             {Third~column~in~an~environment~{WithArrows}}
             {By~default,~an~environment~\{WithArrows\}~can~only~have~two~columns.~
              Maybe~you~have~forgotten~a~\str_use:N \c_backslash_str
              \str_use:N \c_backslash_str.~If~you~really~want~more~than~two~columns,~
              you~should~use~the~option~"MoreColumns"~at~a~global~level~or~for~
              an~environment.~However,~you~can~go~one~for~this~time.}
\msg_new:nnn {witharrows}
             {Third~column~in~an~environment~{DispWithArrows}}
             {An~environment~\{DispWithArrows\}~or~\{DispWithArrows*\}~can~only~have~two~columns.~
              If~you~go~on,~you~may~have~an~incorrect~output.}
\msg_new:nnn {witharrows}
             {The~option~"jump"~must~be~non~negative}
             {You~can't~use~a~strictly~negative~value~for~the~option~"jump"~of~command~
              \token_to_str:N\Arrow.~ You~can~create~an~arrow~going~backwards~with~
              the~option~"<-"~of~Tikz.}
\msg_new:nnn {witharrows}
             {Too~few~lines~for~an~arrow}
             {An~arrow~specified~in~line~\int_use:N \l__wa_initial_int\ can't~be~drawn~
              because~it~arrives~after~the~last~line~of~the~environment~(remind~that~
              the~command~\token_to_str:N\Arrow\ must~be~in~the~*start*~line~
              of~the~arrow).~If~you~go~on,~this~arrow~will~be~ignored.}
\msg_new:nnn {witharrows}
             {{WithArrows}~used~outside~math~mode}
             {The~environment~\{WithArrows\}~should~be~used~only~in~math~mode.~
              Nevertheless,~you~can~go~on.}
\msg_new:nnn {witharrows}
             {{DispWithArrows}~used~in~math~mode}
             {The~environment~\{DispWithArrows\}~should~be~used~only~outside~math~mode.~
              If~you~go~on,~you~will~have~other~errors.}
\msg_new:nnn {witharrows}
             {Two~options~are~incompatible}
             {You~try~to~use~the~option~"\tl_use:N\l_keys_key_tl"~but~
             this~option~is~incompatible~or~redundant~with~the~option~"
             \int_case:nn\l__wa_previous_pos_arrows_int
                 {0 {rr}
                  1 {ll}
                  2 {rl}
                  3 {lr}
                  4 {v}
                  5 {i}
                  6 {group}
                  7 {groups}}"~
             previously~set~in~the~same~
             \int_case:nn\l__wa_level_int
                  {1 {command~\token_to_str:N\WithArrowsOptions}
                   2 {declaration~of~options~of~the~environment~\{WithArrows\}}
                   3 {command~\token_to_str:N\Arrow}}.~
             If~you~go~on,~I~will~overwrite~the~first~option.}
\msg_new:nnnn {witharrows}
              {All~lines~must~have~an~ampersand}
              {All~lines~of~an~environment~\{WithArrows\}~should~have~an~second~column~
               (because~the~nodes~are~created~in~the~second~column).~However,~you~can~go~but~you~will~
               have~an~error~if~one~of~your~arrows~needs~an~PGF~node~absent~by~lack~of~ampersand.~
               If~you~don't~want~to~see~this~message~again,~you~can~use~the~option~
               AllowLineWithoutAmpersand.}
              {Moreover, the~ampersand~can~be~implicit~
               (e.g.~if~you~use~\token_to_str:N\MoveEqLeft\ of~mathtools).}
\msg_new:nnn {witharrows}
             {Option~incompatible~with~"group(s)"}
             {You~try~to~use~the~option~"\tl_use:N\l_keys_key_tl"~while~
              you~are~using~the~option~"
              \int_compare:nNnTF \l__wa_pos_arrows_int = 5
                   {group}
                   {groups}".~
              It's~incompatible.~You~can~go~on~ignoring~this~option~
              "\tl_use:N\l_keys_key_tl"~but~you~should~correct~your~code.}
\msg_new:nnn {witharrows}
             {Option~will~be~ignored}
             {The~option~"\tl_use:N\l_keys_key_tl"~can't~be~used~here.~
              If~you~go~on,~it~will~be~ignored.}
\msg_new:nnn {witharrows}
             {Option~unknown}
             {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown~or~
              meaningless~in~the~context.~If~you~go~on,~it~will~be~ignored.}
\msg_new:nnn {witharrows}
             {Arrow~in~first~column}
             {You~should~not~use~the~command~\token_to_str:N\Arrow\
              \tl_if_eq:NNF \l__wa_CommandName_tl \l_tmpa_tl
                    {(renamed~in~\str_use:N \c_backslash_str
                     \tl_use:N \l__wa_CommandName_tl)~}
              ~in~the~first~column~but~only~in~the~second~column.~
              This~is~a~restriction~of~the~version~1.3~of~the~
              package~witharrows~(in~the~aim~of~developping~further~
              ~a~new~functionality~with~\token_to_str:N\Arrow\ in~the~
              first~column).\\
              However~you~can~go~on~for~this~time.}
\msg_new:nnn {witharrows}
             {Wrong~line~specification~in~Arrow}
             {The~specification~of~line~"#1"~you~use~in~\token_to_str:N\Arrow\
              ~doesn't~exist.\\
              If~you~go~on,~the~arrow~will~be~ignored.}
\msg_new:nnn {witharrows}
             {Wrong~line~specification~in~MultiArrow}
             {The~specification~of~line~"#1"~doesn't~exist.\\
              If~you~go~on,~it~will~be~ignored~for~\token_to_str:N \MultiArrow.}
\msg_new:nnn {witharrows}
             {Too~small~specification~for~MultiArrow}
             {The~specification~of~lines~you~gave~to~\token_to_str:N \MultiArrow\
              is~too~small:~we~need~at~least~two~lines.~If~you~go~on,~the~
              command~\token_to_str:N\MultiArrow\ ~will~be~ignored.}
\msg_new:nnn {witharrows}
             {A~PGF~node~doesn't~exist}
             {A~PGF~node~necessary~to~draw~an~arrow~doesn't~exist~
              because~you~didn't~put~an~ampersand~in~the~corresponding~line.~
              If~you~go~on,~the~arrow~will~be~ignored.}
\msg_new:nnn {witharrows}
             {tag*~without~amsmath}
             {We~can't~use~\token_to_str:N\tag*~because~you~haven't~load~amsmath~
              (or~mathtools).~If~you~go~on,~the~command~\token_to_str:N\tag\
              will~be~used~instead.}
\msg_new:nnn {witharrows}
             {Command~not~allowed~in~{DispWithArrows}}
             {The~command~\token_to_str:N #1
              is~not~allowed~in~the~first~column~of~\{DispWithArrows\}~but~
              only~in~the~second~column~(and,~of~course,~in~the~
              environments~of~amsmath).~If~you~go~on,~this~command~will~be~ignored.}
\msg_new:nnn {witharrows}
             {Command~not~allowed~in~{WithArrows}}
             {The~command~\token_to_str:N #1
              is~not~allowed~in~\{WithArrows\}~but~is~allowed~in~the~second~
              column~of~\{DispWithArrows\}~(and,~of~course,~in~the~
              environments~of~amsmath).~If~you~go~on,~this~command~will~be~ignored.}
\endinput
%%
%% End of file `witharrows.sty'.