%% %% This is file `witharrows.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% witharrows.dtx (with options: `package') %% %% Copyright (C) 2017-2019 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.14} \def\myfiledate{2019/02/01} \RequirePackage{tikz} \usetikzlibrary{arrows.meta,bending} \RequirePackage{expl3}[2019/01/28] \RequirePackage{l3keys2e} \ProvidesExplPackage {witharrows} {\myfiledate} {\myfileversion} {Draws arrows for explanations on the right} \RequirePackage{xparse}[2018-10-17] \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, unknown .code:n = \msg_fatal:nn {witharrows} {Option~unknown~for~package}} \msg_new:nnn {witharrows} {Option~unknown~for~package} {You~can't~use~the~option~"\tl_use:N\l_keys_key_tl"~when~loading~the~ package~witharrows.} \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~of~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~of~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} \bool_new:N \c__wa_leqno_bool \DeclareOption {leqno} {\bool_set_true:N \c__wa_leqno_bool} \DeclareOption* {} \ProcessOptions* \cs_new_protected:Nn \__wa_error:n {\msg_error:nn {witharrows} {#1}} \cs_new_protected:Nn \__wa_error:nn {\msg_error:nnn {witharrows} {#1} {#2}} \cs_generate_variant:Nn \__wa_error:nn {nx} \cs_new_protected:Nn \__wa_bool_new:N {\bool_if_exist:NTF #1 {\bool_set_false:N #1} {\bool_new:N #1}} \AtBeginDocument {\clist_map_inline:nn {amsmath,mathtools,autonum,cleveref,hyperref,typedref,showlabels, amsthm,varwidth} {\bool_new:c {c__wa_#1_loaded_bool} \@ifpackageloaded {#1} {\bool_set_true:c {c__wa_#1_loaded_bool}} {}}} \cs_generate_variant:Nn \seq_set_split:Nnn {Nxx} \cs_new_protected:Nn \__wa_save:N {\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:Nn \__wa_restore:N {\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{__wa_node_style/.style= { above = \l__wa_ystart_dim, inner~sep = 0 pt, minimum~width = 0pt, minimum~height = \l__wa_ygap_dim}} \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, -> }} \AtBeginDocument {\bool_if:NF \c__wa_amsmath_loaded_bool {\cs_set_protected:Npn \spread@equation {\openup\jot \cs_set_eq:NN \spread@equation \prg_do_nothing:}}} \bool_new:N \l__wa_in_WithArrows_bool \bool_new:N \l__wa_in_DispWithArrows_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_arrow_int \int_set:Nn \l__wa_pos_arrow_int 3 \int_new:N \l__wa_previous_pos_arrow_int \dim_new:N \l__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 \tl_new:N \l__wa_name_tl \bool_new:N \l__wa_fleqn_bool \dim_new:N \l__wa_mathindent_dim \dim_set:Nn \l__wa_mathindent_dim {25pt} \bool_new:N \l__wa_wrap_lines_bool \clist_new:N \l__wa_tags_clist \clist_set:Nn \l__wa_tags_clist {all} \tl_new:N \l__wa_tag_tl \bool_new:N \l__wa_tag_star_bool \bool_new:N \l__wa_in_first_column_bool \bool_new:N \l__wa_initial_r_bool \bool_new:N \l__wa_initial_l_bool \dim_new:N \l__wa_start_adjust_dim \dim_set:Nn \l__wa_start_adjust_dim {0.4ex} \dim_new:N \l__wa_end_adjust_dim \dim_set:Nn \l__wa_end_adjust_dim {0.4ex} \str_new:N \l__wa_CommandName_str \str_set:Nn \l__wa_CommandName_str {Arrow} \str_new:N \l__wa_string_Arrow_for_messages_str \str_set:Nx \l__wa_string_Arrow_for_messages_str {\token_to_str:N \Arrow} \int_set:Nn \l__wa_level_int 1 \keys_define:nn {WithArrows/GlobalOrEnv} { t .code:n = {\bool_if:NTF \l__wa_in_DispWithArrows_bool {\__wa_error:n {Option~will~be~ignored} {\int_set:Nn \l__wa_pos_env_int 0}}}, t .value_forbidden:n = true, c .code:n = {\bool_if:NTF \l__wa_in_DispWithArrows_bool {\__wa_error:n {Option~will~be~ignored}} {\int_set:Nn \l__wa_pos_env_int 1}}, c .value_forbidden:n = true, b .code:n = {\bool_if:NTF \l__wa_in_DispWithArrows_bool {\__wa_error:n {Option~will~be~ignored}} {\int_set:Nn \l__wa_pos_env_int 2}}, 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 = { \bool_if:NTF \l__wa_in_DispWithArrows_bool {\__wa_error:n {Option~will~be~ignored}} { \msg_redirect_name:nnn {witharrows} {Third~column~in~WithArrows} {none} }}, MoreColumns .value_forbidden:n = true, AllowLineWithoutAmpersand .code:n = { \__wa_error:n {AllowLineWithoutAmpersand}}, AllowLineWithoutAmpersand .value_forbidden:n = true, CommandName .code:n = {\str_set:Nn \l__wa_CommandName_str {#1} \str_set:Nx \l__wa_string_Arrow_for_messages_str {\c_backslash_str Arrow~(renamed~here~in~\c_backslash_str #1)}}, 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 .code:n = {\tikzset{__wa_node_style/.append~style = {draw,red}}}, shownodes .value_forbidden:n = true, shownodenames .bool_set:N = \l__wa_shownodenames_bool, shownodenames .initial:n = false, group .code:n = {\int_compare:nNnT \l__wa_previous_pos_arrow_int > {-1} {\__wa_error:n {Incompatible~options}} \int_set:Nn \l__wa_previous_pos_arrow_int 7 \int_set:Nn \l__wa_pos_arrow_int 7} , group .value_forbidden:n = true, groups .code:n = {\int_compare:nNnT \l__wa_previous_pos_arrow_int > {-1} {\__wa_error:n {Incompatible~options}} \int_set:Nn \l__wa_previous_pos_arrow_int 6 \int_set:Nn \l__wa_pos_arrow_int 6} , groups .value_forbidden:n = true, CodeBefore .code:n = {\int_compare:nNnTF \l__wa_level_int = 1 {\__wa_error:n {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 {\__wa_error:n {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 {\__wa_error:n {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 {\__wa_error:n {Option~will~be~ignored}} {\str_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 {\__wa_error:n {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 {\__wa_error:n {Option~will~be~ignored}} {\str_if_eq:nnTF {#1} {true} {\clist_clear:N \l__wa_tags_clist} {\clist_set:Nn \l__wa_tags_clist {all}}}}, notag .default:n = true, nonumber .meta:n = notag, AllowMultipleLabels .code:n = {\bool_if:NTF \l__wa_in_WithArrows_bool {\__wa_error:n {Option~will~be~ignored}} {\msg_redirect_name:nnn {witharrows} {Multiple~labels} {none}}}, AllowMultipleLabels .value_forbidden:n = true, wrap-lines .code:n = {\bool_if:NTF \l__wa_in_WithArrows_bool {\__wa_error:n {Option~will~be~ignored}} {\str_if_eq:nnTF {#1} {true} {\bool_set_true:N \l__wa_wrap_lines_bool} {\bool_set_false:N \l__wa_wrap_lines_bool}}}, wrap-lines .default:n = true, tagged-lines .code:n = {\bool_if:NTF \l__wa_in_WithArrows_bool {\__wa_error:n {Option~will~be~ignored}} {\clist_set:Nn \l__wa_tags_clist {#1} \clist_if_in:NnT \l__wa_tags_clist {first} {\clist_remove_all:Nn \l__wa_tags_clist {first} \clist_put_left:Nn \l__wa_tags_clist 1 }}}, tagged-lines .value_required:n = true, unknown .code:n = \__wa_error:n {Unknown~option} } \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 3 , 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 0 , 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_arrow_int > 5} {\__wa_error:n {Option~incompatible~with~group}} {\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}} {\__wa_error:n {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}} {\__wa_error:n {Option~will~be~ignored}}} , interline .value_required:n = true, start-adjust .dim_set:N = \l__wa_start_adjust_dim, start-adjust .value_required:n = true, end-adjust .dim_set:N = \l__wa_end_adjust_dim, end-adjust .value_required:n = true, adjust .code:n = {\dim_set:Nn \l__wa_start_adjust_dim {#1} \dim_set:Nn \l__wa_end_adjust_dim {#1} }, adjust .value_required:n = true, unknown .code:n = \__wa_error:n {Unknown~option} } \keys_define:nn {WithArrows/Arrow} {jump .code:n = {\int_set:Nn \l__wa_jump_int {#1} \int_compare:nNnF \l__wa_jump_int > 0 {\__wa_error:n {Negative~value~for~jump}}} , jump .value_required:n = true, rr .value_forbidden:n = true, rr .code:n = \__wa_analyze_option_position:n 3 , 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 0 , i .value_forbidden:n = true, i .code:n = \__wa_analyze_option_position:n 5 } \cs_new_protected:Nn \__wa_analyze_option_position:n {\int_compare:nNnT \l__wa_previous_pos_arrow_int > {-1} {\__wa_error:n {Incompatible~options}} \int_set:Nn \l__wa_previous_pos_arrow_int {#1} \int_set:Nn \l__wa_pos_arrow_int {#1}} \NewDocumentCommand \WithArrowsOptions {m} {\int_set:Nn \l__wa_previous_pos_arrow_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_set:Nn \l__wa_previous_pos_arrow_int {-1} \int_set:Nn \l__wa_pos_arrow_int {-1} \int_set:Nn \l__wa_level_int 3 \keys_set_known:nnN {WithArrows/Arrow} {#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 {position} \l__wa_pos_arrow_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: {\__wa_error:n {Arrow~in~first~column} \__wa_Arrow} \cs_new_protected:Nn \__wa_pre_environment:n { \tl_clear_new:N \l__wa_type_env_tl \tl_set:NV \l__wa_type_env_tl \@currenvir \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: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 \int_zero_new:N \l__wa_pos_of_arrow_int \int_zero_new:N \l__wa_jump_int \int_set:Nn \l__wa_jump_int 1 \seq_clear_new:N \l__wa_labels_seq \__wa_bool_new:N \l__wa_tag_next_line_bool \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_arrow_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 \savenotes \l__wa_code_before_tl \cs_set_eq:cN \l__wa_CommandName_str \__wa_Arrow} \NewDocumentEnvironment {WithArrows} {!O{}} { \bool_set_true:N \l__wa_in_WithArrows_bool \bool_set_false:N \l__wa_in_DispWithArrows_bool \__wa_pre_environment:n {#1} \reverse_if:N \if_mode_math: \__wa_error:n {WithArrows~outside~math~mode} \fi: \cs_set_eq:NN \notag \__wa_notag: \cs_set_eq:NN \nonumber \__wa_notag: \cs_set_eq:NN \tag \__wa_tag \cs_set_eq:NN \label \__wa_label:n \cs_set_eq:NN \tagnextline \__wa_tagnextline: \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_str \__wa_Arrow_first_column: \bool_set_true:N \l__wa_in_first_column_bool \strut\hfil $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {##}$ & $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {{}##}$ \tikz [remember~picture,overlay] \node [__wa_node_style, name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-l, alias = {\tl_if_empty:NF \l__wa_name_tl {\l__wa_name_tl-\int_use:N\g__wa_line_int-l}} ] {} ; \hfil \tikz [remember~picture,overlay] \node [__wa_node_style, name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-r, alias = {\tl_if_empty:NF \l__wa_name_tl {\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}} && \__wa_error:n {Third~column~in~WithArrows} $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {##}$ \cr } {\\ \egroup \egroup \__wa_post_environment: \bool_if:NT \g__wa_footnote_bool \endsavenotes } \cs_new_protected:Nn \__wa_post_environment: {\cs_set:Npn \WithArrowsRightX {\g__wa_right_x_dim} \int_compare:nNnT \g__wa_arrow_int > 0 \__wa_scan_arrows: \group_begin: \tikzset{every~picture/.style = __wa_standard} \cs_set:Npn \WithArrowsNbLines {\int_use:N \g__wa_line_int} \cs_set_eq:NN \MultiArrow \__wa_MultiArrow:nn \cs_set_eq:cN \l__wa_CommandName_str \__wa_Arrow_code_after \l__wa_code_after_tl \group_end: \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} } \cs_new_protected:Nn \__wa_cr: {\scan_stop: \bool_if:NT \l__wa_in_first_column_bool { & {} } \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:NT \l__wa_in_DispWithArrows_bool {\clist_if_in:NnTF \l__wa_tags_clist {all} { \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} \seq_if_empty:NF \l__wa_labels_seq { \cs_set:Npx \@currentlabel {\p@equation \g_tmpa_tl} \bool_if:NT \c__wa_hyperref_loaded_bool {\cs_set:Npn \This@name {equation} \hyper@refstepcounter{equation}} \bool_if:NT \c__wa_cleveref_loaded_bool {\cref@constructprefix{equation}{\cref@result} \@ifundefined{cref@equation@alias} {\def\@tempa{equation}} {\def\@tempa{\csname cref@equation@alias\endcsname}} \protected@edef\cref@currentlabel {[\@tempa][\arabic{equation}][\cref@result] \p@equation \g_tmpa_tl}} \bool_if:NT \c__wa_typedref_loaded_bool {\cs_set:Npn \sr@name {equation}} \seq_map_function:NN \l__wa_labels_seq \__wa_old_label} \__wa_save:N \l__wa_tag_star_bool \__wa_save:N \l__wa_qedhere_bool \bool_if:NT \l__wa_tag_next_line_bool { \openup -\jot \bool_set_false:N \l__wa_tag_next_line_bool \notag \\ & } & \__wa_restore:N \l__wa_tag_star_bool \__wa_restore:N \l__wa_qedhere_bool \bool_if:NT \l__wa_qedhere_bool {\hbox_overlap_left:n \__wa_qedhere_i:} \cs_set_eq:NN \theequation \g_tmpa_tl \bool_if:NT \l__wa_tag_star_bool {\cs_set:Npn \tagform@ {}} \hbox_overlap_left:n {\bool_if:NF \c__wa_leqno_bool {\tikz [__wa_standard] \coordinate (\int_use:N\g__wa_line_int-v) ;} \quad \@eqnnum } \bool_if:NT \c__wa_leqno_bool {\tikz [__wa_standard] \coordinate (\int_use:N \g__wa_line_int-v) ;}} {\__wa_save:N \l__wa_qedhere_bool & \__wa_restore:N \l__wa_qedhere_bool \bool_if:NT \l__wa_qedhere_bool {\hbox_overlap_left:n \__wa_qedhere_i:} \tikz [__wa_standard] \coordinate (\int_use:N\g__wa_line_int-v) ; } } \cr\noalign{\skip_vertical:n {#1 + \l__wa_interline_skip} \scan_stop:}} \cs_new_protected:Nn \__wa_if_in_second_col_of_disp:nn {\bool_if:NTF \l__wa_in_WithArrows_bool {\__wa_error:nn {Command~not~allowed~in~WithArrows} {#1}} {\bool_if:NTF \l__wa_in_first_column_bool {\__wa_error:nn {Command~not~allowed~in~DispWithArrows} {#1}} {#2}}} \cs_new_protected:Nn \__wa_notag: {\__wa_if_in_second_col_of_disp:nn {\notag} {\clist_clear:N \l__wa_tags_clist}} \NewDocumentCommand \__wa_tag {sm} {\__wa_if_in_second_col_of_disp:nn {\tag} {\tl_if_empty:NF \l__wa_tag_tl {\__wa_error:nn {Multiple~tags} {#2}} \clist_set:Nn \l__wa_tags_clist {all} \bool_if:nT \c__wa_mathtools_loaded_bool {\MH_if_boolean:nT {show_only_refs} {\MH_if_boolean:nF {show_manual_tags} {\clist_clear:N \l__wa_tags_clist}}} \tl_set:Nn \l__wa_tag_tl {#2} \bool_set:Nn \l__wa_tag_star_bool {#1} \bool_if:nT {#1 && ! \bool_if_p:N \c__wa_amsmath_loaded_bool} { \__wa_error:n {tag*~without~amsmath} }} } \cs_new_protected:Nn \__wa_label:n {\__wa_if_in_second_col_of_disp:nn {\label} {\seq_if_empty:NF \l__wa_labels_seq {\bool_if:NTF \c__wa_cleveref_loaded_bool {\__wa_error:n {Multiple~labels~with~cleveref}} {\__wa_error:n {Multiple~labels}}} \seq_put_right:Nn \l__wa_labels_seq {#1} \bool_if:nT \c__wa_mathtools_loaded_bool {\MH_if_boolean:nT {show_only_refs} {\cs_if_exist:cTF {MT_r_#1} {\clist_set:Nn \l__wa_tags_clist {all}} {\clist_clear:N \l__wa_tags_clist}}} \bool_if:nT \c__wa_autonum_loaded_bool {\cs_if_exist:cTF {autonum@#1Referenced} {\clist_set:Nn \l__wa_tags_clist {all}} {\clist_clear:N \l__wa_tags_clist}}}} \cs_new_protected:Nn \__wa_tagnextline: {\__wa_if_in_second_col_of_disp:nn {\tagnextline} {\bool_set_true:N \l__wa_tag_next_line_bool}} \bool_new:N \l__wa_qedhere_bool \cs_new_protected:Nn \__wa_qedhere: {\bool_set_true:N \l__wa_qedhere_bool} \cs_new_protected:Nn \__wa_qedhere_i: {\group_begin: \cs_set_eq:NN \qed \qedsymbol \cs_set_eq:NN \qed@elt \setQED@elt \QED@stack\relax\relax \group_end: } \NewDocumentEnvironment {DispWithArrows} {!O{}} { \bool_if:nT \c__wa_mathtools_loaded_bool {\MH_if_boolean:nT {show_only_refs} {\MT_showonlyrefs_false: \MH_set_boolean_T:n {show_only_refs}}} \bool_if:NT \c__wa_amsmath_loaded_bool \intertext@ \bool_set_true:N \l__wa_in_DispWithArrows_bool \__wa_pre_environment:n {#1} \if_mode_math: \__wa_error:n {DispWithArrows~in~math~mode} \fi: \if_mode_vertical: \nointerlineskip \makebox[.6\linewidth]{} \fi: $$ \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_set_eq:NN \__wa_old_label \label \cs_set_eq:NN \notag \__wa_notag: \cs_set_eq:NN \nonumber \__wa_notag: \cs_set_eq:NN \tag \__wa_tag \cs_set_eq:NN \label \__wa_label:n \cs_set_eq:NN \tagnextline \__wa_tagnextline: \halign to \displaywidth \bgroup \int_gincr:N \g__wa_line_int \cs_set_eq:cN \l__wa_CommandName_str \__wa_Arrow_first_column: \bool_set_true:N \l__wa_in_first_column_bool \strut \bool_if:NT \l__wa_fleqn_bool {\skip_horizontal:n \l__wa_mathindent_dim} \hfil $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {##}$ \tabskip = \c_zero_skip & \clist_if_in:NVT \l__wa_tags_clist \g__wa_line_int {\clist_set:Nn \l__wa_tags_clist {all}} \bool_if:NT \c__wa_amsthm_loaded_bool {\cs_set_eq:NN \qedhere \__wa_qedhere:} $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {{}##}$ \tabskip = 0 pt plus 1000 pt minus 1000 pt \tikz [remember~picture,overlay] \node [__wa_node_style, name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-l, alias = {\tl_if_empty:NF \l__wa_name_tl {\l__wa_name_tl-\int_use:N\g__wa_line_int-l}} ] {} ; \hfil \tikz [remember~picture,overlay] \node [__wa_node_style, name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-r, alias = {\tl_if_empty:NF \l__wa_name_tl {\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 && \__wa_error:n {Third~column~in~DispWithArrows} \iffalse ## \fi \cr} {\clist_if_in:NnT \l__wa_tags_clist {last} {\clist_set:Nn \l__wa_tags_clist {all}} \\ \egroup \egroup \bool_if:NT \l__wa_in_DispWithArrows_bool {\dim_gzero_new:N \g__wa_right_x_dim \dim_gset_eq:NN \g__wa_right_x_dim \c_max_dim \begin{tikzpicture} [__wa_standard] \int_step_variable:nNn \g__wa_line_int \l_tmpa_int {\cs_if_free:cTF {pgf@sh@ns@wa-\l__wa_prefix_str-\l_tmpa_int-v} {\__wa_error:n {Inexistent~v-node}} {\tikz@parse@node\pgfutil@firstofone (\l_tmpa_int-v) \dim_set:Nn \l_tmpa_dim \pgf@x \dim_compare:nNnT \l_tmpa_dim < \g__wa_right_x_dim {\dim_gset:Nn \g__wa_right_x_dim \l_tmpa_dim}} } \end{tikzpicture}} \__wa_post_environment: \bool_if:nT \c__wa_mathtools_loaded_bool {\MH_if_boolean:nT {show_only_refs} \MT_showonlyrefs_true:} $$ \bool_if:NT \g__wa_footnote_bool \endsavenotes \ignorespacesafterend } \NewDocumentEnvironment {DispWithArrows*} {} {\WithArrowsOptions{notag} \DispWithArrows} {\endDispWithArrows} \cs_new_protected:Nn \__wa_scan_arrows: { \group_begin: \int_compare:nNnT \l__wa_pos_arrow_int = 7 { \__wa_scan_arrows_i: \int_set:Nn \l__wa_pos_arrow_int 8 } \__wa_scan_arrows_i: \group_end:} \cs_new_protected:Nn \__wa_scan_arrows_i: { \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 \seq_clear_new:N \l__wa_first_arrows_of_group_seq \seq_clear_new:N \l__wa_last_arrows_of_group_seq \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 \prop_get:cnN {g__wa_arrow_\l__wa_prefix_str _\int_use:N\l__wa_arrow_int _prop} {position} \l_tmpa_tl \int_set:Nn \l__wa_pos_of_arrow_int \l_tmpa_tl \int_compare:nNnTF \l__wa_final_int > \g__wa_line_int {\__wa_error:n {Too~few~lines~for~an~arrow}} {\bool_if:nT {\int_compare_p:nNn \l__wa_arrow_int > 1 && \int_compare_p:nNn \l__wa_initial_int > \l__wa_last_line_of_group_int && \int_compare_p:n {\l__wa_pos_arrow_int != 7}} {\__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_eq:NN \l__wa_first_arrow_of_group_int \l__wa_arrow_int \int_set_eq:NN \l__wa_first_line_of_group_int \l__wa_initial_int \int_set_eq:NN \l__wa_last_line_of_group_int \l__wa_final_int \seq_clear:N \l__wa_first_arrows_of_group_seq \seq_put_left:NV \l__wa_first_arrows_of_group_seq \l__wa_arrow_int \seq_clear:N \l__wa_last_arrows_of_group_seq \seq_put_left:NV \l__wa_last_arrows_of_group_seq \l__wa_arrow_int \int_compare:nT {\l__wa_pos_arrow_int != 8} {\dim_set:Nn \l__wa_x_dim {-\c_max_dim}} } {\int_compare:nNnT \l__wa_pos_of_arrow_int = {-1} {\int_compare:nNnT \l__wa_initial_int = \l__wa_first_line_of_group_int {\seq_put_left:NV \l__wa_first_arrows_of_group_seq \l__wa_arrow_int} \int_compare:nNnTF \l__wa_final_int > \l__wa_last_line_of_group_int {\int_set_eq:NN \l__wa_last_line_of_group_int \l__wa_final_int \seq_clear:N \l__wa_last_arrows_of_group_seq \seq_put_left:NV \l__wa_last_arrows_of_group_seq \l__wa_arrow_int} {\int_compare:nNnT \l__wa_final_int = \l__wa_last_line_of_group_int {\seq_put_left:NV \l__wa_last_arrows_of_group_seq \l__wa_arrow_int}}}} \int_compare:nNnT \l__wa_pos_of_arrow_int = {-1} { \int_compare:nT {\l__wa_pos_arrow_int != 8} {\__wa_update_x_value:nn \l__wa_initial_int \l__wa_final_int}} } \int_incr:N \l__wa_arrow_int } \int_compare:nT {\l__wa_pos_arrow_int != 7} {\__wa_draw_arrows:nn \l__wa_first_arrow_of_group_int \g__wa_arrow_int} } \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:nNnT \l__wa_final_int < {\g__wa_line_int + 1} \__wa_draw_arrows_i: \int_incr:N \l__wa_arrow_int } \group_end: } \cs_new_protected:Nn \__wa_draw_arrows_i: {\group_begin: \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}} \prop_get:cnN {g__wa_arrow_\l__wa_prefix_str _\int_use:N\l__wa_arrow_int _prop} {position} \l_tmpa_tl \int_set:Nn \l_tmpa_int \l_tmpa_tl \int_compare:nNnF \l_tmpa_int = {-1} {\int_set_eq:NN \l__wa_pos_arrow_int \l_tmpa_int} \bool_set_false:N \l__wa_initial_r_bool \bool_set_false:N \l__wa_final_r_bool \int_case:nn \l__wa_pos_arrow_int {0 {\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_initial_r_bool \bool_set_true:N \l__wa_final_r_bool}} \int_compare:nNnT \l__wa_pos_arrow_int = 5 { \dim_set:Nn \l__wa_x_dim {-\c_max_dim} \__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 \seq_if_in:NxTF \l__wa_first_arrows_of_group_seq {\int_use:N \l__wa_arrow_int} {\bool_set_true:N \l_tmpa_bool} {\bool_set_false:N \l_tmpa_bool} \seq_if_in:NxTF \l__wa_last_arrows_of_group_seq {\int_use:N \l__wa_arrow_int} {\bool_set_true:N \l_tmpb_bool} {\bool_set_false:N \l_tmpb_bool} \int_compare:nNnT \l__wa_pos_arrow_int = 5 {\bool_set_true:N \l_tmpa_bool \bool_set_true:N \l_tmpb_bool} \begin{tikzpicture} [__wa_standard] \tikz@scan@one@point\pgfutil@firstofone (\l__wa_initial_tl) \tl_gset:Nx \g_tmpa_tl {\int_compare:nNnTF \l__wa_pos_arrow_int < 5 { \dim_use:N \pgf@x } { \dim_use:N \l__wa_x_dim } , \bool_if:NTF \l_tmpa_bool { \dim_eval:n {\pgf@y + \l__wa_start_adjust_dim }} { \dim_use:N \pgf@y } } \tikz@scan@one@point\pgfutil@firstofone (\l__wa_final_tl) \tl_gset:Nx \g_tmpb_tl {\int_compare:nNnTF \l__wa_pos_arrow_int < 5 { \dim_use:N \pgf@x } { \dim_use:N \l__wa_x_dim } , \bool_if:NTF \l_tmpb_bool { \dim_eval:n {\pgf@y - \l__wa_end_adjust_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 { \bool_if:nT {\l__wa_wrap_lines_bool && \l__wa_in_DispWithArrows_bool} { \tl_set_eq:NN \l__wa_tikz_code_tl \c__wa_tikz_code_wrap_lines_tl } \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} \tl_set:Nn \c__wa_tikz_code_wrap_lines_tl { \draw (#1) to node (__wa_label) {} (#2) ; \tikz@parse@node \pgfutil@firstofone (__wa_label.west) \dim_set:Nn \l_tmpa_dim {\g__wa_right_x_dim - \pgf@x - 0.3333 em} \path \pgfextra {\tl_gset:Nx \g_tmpa_tl \tikz@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 (__wa_label.west) node [anchor = west, text~width = \dim_use:N \l_tmpa_dim] {#3} ; } } \cs_new_protected:Nn \__wa_update_x_value:nn {\int_step_inline:nnn {#1} {#2} {\begin{tikzpicture} [__wa_standard] \tikz@scan@one@point\pgfutil@firstofone (##1-l) \dim_gset:Nn \g_tmpa_dim {\dim_max:nn \l__wa_x_dim \pgf@x } \end{tikzpicture} \dim_set_eq:NN \l__wa_x_dim \g_tmpa_dim } } \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_arrow_int 1 \int_set:Nn \l__wa_previous_pos_arrow_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_arrow_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} {\__wa_error:nx {Wrong~line~in~Arrow} {#2}} {\cs_if_free:cTF {pgf@sh@ns@wa-\l__wa_prefix_str-#3-l} {\__wa_error:nx {Wrong~line~in~Arrow} {#3}} {\int_compare:nNnTF \l__wa_pos_arrow_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} {\__wa_error:nx {Wrong~line~specification~in~MultiArrow} \x } {\clist_gput_right:Nx \g_tmpa_clist \x}} \int_compare:nNnTF {\clist_count:N \g_tmpa_clist} < 2 {\__wa_error:n {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 [<->] ([xshift = \l__wa_xoffset_dim]\l_tmpa_tl-r.south) -- ++(5mm,0) -- node (__wa_label) {} ([xshift = \l__wa_xoffset_dim+5mm]\l_tmpb_tl-r.south) -- ([xshift = \l__wa_xoffset_dim]\l_tmpb_tl-r.south) ; \tikz@parse@node \pgfutil@firstofone (__wa_label.west) \dim_set:Nn \l_tmpa_dim {20 cm} \path \pgfextra {\tl_gset:Nx \g_tmpa_tl \tikz@text@width} ; \tl_if_empty:NF \g_tmpa_tl {\dim_set:Nn \l_tmpa_dim \g_tmpa_tl} \bool_if:nT {\l__wa_wrap_lines_bool && \l__wa_in_DispWithArrows_bool} {\dim_set:Nn \l_tmpb_dim {\g__wa_right_x_dim - \pgf@x - 0.3333 em} \dim_compare:nNnT \l_tmpb_dim < \l_tmpa_dim {\dim_set_eq:NN \l_tmpa_dim \l_tmpb_dim}} \path (__wa_label.west) node [anchor = west, text~width = \dim_use:N \l_tmpa_dim] {#2} ; \end{tikzpicture} } } \cs_new_protected:Nn \__wa_MultiArrow_i:n {\begin{tikzpicture}[__wa_standard,every~path/.style={WithArrows/arrow}] \foreach \k in {#1} {\draw[<-] ([xshift = \l__wa_xoffset_dim]\k-r.south) -- ++(5mm,0) ;} ; \end{tikzpicture}} \msg_new:nnn {witharrows} {AllowLineWithoutAmpersand} {The~option~"AllowLineWithoutAmpersand"~is~deprecated~because~lines~ without~ampersands~are~now~always~allowed.~The~option~ "AllowLineWithoutAmpersand"~will~probably~be~deleted~in~a~future~version.~ However,~you~can~go~on~for~this~time.} \msg_new:nnn {witharrows} {Unknown~option} {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} {Third~column~in~WithArrows} {By~default,~an~environment~\{\l__wa_type_env_tl\}~can~only~have~ two~columns.~Maybe~you~have~forgotten~a~ \c_backslash_str\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~DispWithArrows} {An~environment~\{\l__wa_type_env_tl\}~can~only~have~two~columns.~ Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str\ at~the~end~ of~row~\int_use:N\g__wa_line_int.~If~you~go~on,~you~may~have~other~errors.} \msg_new:nnn {witharrows} {Negative~value~for~jump} {You~can't~use~a~strictly~negative~value~for~the~option~"jump"~of~command~ \l__wa_string_Arrow_for_messages_str.~ 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~\l__wa_string_Arrow_for_messages_str.~ must~be~in~the~*start*~line~of~the~arrow).~ If~you~go~on,~this~arrow~will~be~ignored.} \msg_new:nnn {witharrows} {WithArrows~outside~math~mode} {The~environment~\{\l__wa_type_env_tl\}~should~be~used~only~in~math~mode.~ Nevertheless,~you~can~go~on.} \msg_new:nnn {witharrows} {DispWithArrows~in~math~mode} {The~environment~\{\l__wa_type_env_tl\}~should~be~used~only~ outside~math~mode.~If~you~go~on,~you~will~have~other~errors.} \msg_new:nnn {witharrows} {Incompatible~options} {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_arrow_int {0 {lr} 1 {ll} 2 {rl} 3 {rr} 4 {v} 5 {i} 6 {groups} 7 {group}}"~ 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~ \{\l__wa_type_env_tl\}} 3 {command~\l__wa_string_Arrow_for_messages_str}}.~ If~you~go~on,~I~will~use~the~option~"\tl_use:N\l_keys_key_tl".} \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} {Arrow~in~first~column} {You~should~not~use~the~command~\l__wa_string_Arrow_for_messages_str\ in~the~first~column~but~only~in~the~second~column.\\ However~you~can~go~on~for~this~time.} \msg_new:nnn {witharrows} {Wrong~line~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} {tag*~without~amsmath} {We~can't~use~\token_to_str:N\tag*~because~you~haven't~loaded~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~\{\l__wa_type_env_tl\}~but~ only~in~the~second~column.~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~\{\l__wa_type_env_tl\}~ (it's~allowed~in~the~second~column~of~\{DispWithArrows\}).~If~you~go~on, ~this~command~will~be~ignored.} \msg_new:nnn {witharrows} {Multiple~tags} {You~can't~use~twice~the~command~\token_to_str:N\tag\ in~a~line~of~the~environment~\{\l__wa_type_env_tl\}.~If~you~go~on,~the~tag~ '#1'~will~be~used.} \msg_new:nnn {witharrows} {Multiple~labels} {Normally,~we~can't~use~the~command~\token_to_str:N\label\ twice~in~a~line~of~the~environment~\{\l__wa_type_env_tl\}.~ However,~you~can~go~on.~ \bool_if:NT \c__wa_showlabels_loaded_bool {However,~only~the~last~label~will~be~shown~by~showlabels.~} If~you~don't~want~to~see~this~message~again,~you~can~use~the~option~ "AllowMultipleLabels"~at~the~global~or~environment~level.} \msg_new:nnn {witharrows} {Multiple~labels~with~cleveref} {Since~you~use~cleveref,~you~can't~use~the~command~\token_to_str:N\label\ twice~in~a~line~of~the~environment~\{\l__wa_type_env_tl\}.~ If~you~go~on,~you~may~have~undefined~references.} \msg_new:nnn {witharrows} {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.~If~you~go~on,~you~may~have~an~incorrect~output.} \msg_new:nnn {witharrows} {Option~incompatible~with~group} {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_arrow_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.} \coffin_new:N \l__wa_halign_coffin \NewDocumentEnvironment {CasesWithArrows} {m !O{}} {\hbox_set:Nn \l_tmpa_box {$\left\{\vcenter to 1cm {} \right.$} \dim_zero_new:N \l__wa_delim_wd_dim \dim_set:Nn \l__wa_delim_wd_dim {\box_wd:N \l_tmpa_box} \box_clear_new:N \l__wa_left_part_box \hbox_set:Nn \l__wa_left_part_box {$\bool_if:NT \l__wa_displaystyle_bool \displaystyle #1 {}$} \bool_if:nT \c__wa_mathtools_loaded_bool {\MH_if_boolean:nT {show_only_refs} {\MT_showonlyrefs_false: \MH_set_boolean_T:n {show_only_refs} \clist_set:Nn \l__wa_tags_clist {all}}} \bool_if:NT \c__wa_amsmath_loaded_bool \intertext@ \if_mode_math: \__wa_error:n {DispWithArrows~in~math~mode} \fi: \bool_set_true:N \l__wa_in_DispWithArrows_bool % \__wa_pre_environment:n {#2} \nointerlineskip \hbox_to_wd:nn {0.6\linewidth} {} $$ \spread@equation \vcoffin_set:Nnw \l__wa_halign_coffin \displaywidth \bool_if:NTF \l__wa_fleqn_bool {\tabskip = \c_zero_skip} {\tabskip = 0 pt plus 1000 pt minus 1000 pt} \bool_if:NTF \c__wa_amsmath_loaded_bool {\cs_set_eq:NN \__wa_old_label \ltx@label} {\cs_set_eq:NN \__wa_old_label \label} \halign to \displaywidth \bgroup \int_gincr:N \g__wa_line_int \cs_set_eq:cN \l__wa_CommandName_str \__wa_Arrow_first_column: \bool_set_true:N \l__wa_in_first_column_bool \bool_if:NT \l__wa_fleqn_bool {\skip_horizontal:n \l__wa_mathindent_dim} \hfil \skip_horizontal:n {\box_wd:N \l__wa_left_part_box + \l__wa_delim_wd_dim} $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {##}$ \tabskip = \c_zero_skip & \clist_if_in:NVT \l__wa_tags_clist \g__wa_line_int {\clist_set:Nn \l__wa_tags_clist {all}} \cs_set:Npn \notag {\clist_clear:N \l__wa_tags_clist} $\bool_if:NT \l__wa_displaystyle_bool \displaystyle {{}##}$ \tabskip = 0 pt plus 1000 pt minus 1000 pt \tikz [remember~picture,overlay] \node [__wa_node_style, name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-l, alias = {\tl_if_empty:NF \l__wa_name_tl {\l__wa_name_tl-\int_use:N\g__wa_line_int-l}} ] {} ; \hfil \tikz [remember~picture,overlay] \node [__wa_node_style, name = wa-\l__wa_prefix_str-\int_use:N\g__wa_line_int-r, alias = {\tl_if_empty:NF \l__wa_name_tl {\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 && \__wa_error:n {Third~column~in~DispWithArrows} \if_false: ## \fi: \cr} {\clist_if_in:NnT \l__wa_tags_clist {last} {\clist_set:Nn \l__wa_tags_clist {all}} \\ \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__wa_alignment_dim \dim_gset:Nn \g__wa_alignment_dim {\box_wd:N \l_tmpa_box} \box_clear_new:N \l__wa_new_box \hbox_set:Nn \l__wa_new_box {\hbox_unpack_clear:N \l_tmpa_box} \dim_compare:nNnT {\box_wd:N \l__wa_new_box} < \g__wa_alignment_dim {\dim_gset:Nn \g__wa_alignment_dim {\box_wd:N \l__wa_new_box}} \vcoffin_set_end: \hbox_to_wd:nn \displaywidth { \bool_if:NTF \l__wa_fleqn_bool {\skip_horizontal:n \l__wa_mathindent_dim} {\hfil} \hbox_to_wd:nn \g__wa_alignment_dim { \box_use_drop:N \l__wa_left_part_box \dim_set:Nn \l_tmpa_dim { \box_ht:N \l__wa_halign_coffin + \box_dp:N \l__wa_halign_coffin} $\left\{ \vcenter to \l_tmpa_dim {\vfil} \right.$} \hfil} \coffin_typeset:Nnnnn \l__wa_halign_coffin {l} {vc} {-\displaywidth} \c_zero_dim $$ \__wa_post_environment: \bool_if:nT \c__wa_mathtools_loaded_bool {\MH_if_boolean:nT {show_only_refs} \MT_showonlyrefs_true:} \bool_if:NT \g__wa_footnote_bool \endsavenotes \ignorespacesafterend } \NewDocumentCommand \WithArrowsNewStyle {mm} { \keys_if_exist:nnTF {WithArrows/General} {#1} {\__wa_error:nn {Key~already~defined} {#1}} {\keys_define:nn {WithArrows/General} {#1 .code:n = {\int_compare:nNnTF \l__wa_level_int < 3 {\bool_set_eq:NN \l_tmpa_bool \l__wa_in_WithArrows_bool \bool_set_eq:NN \l_tmpb_bool \l__wa_in_DispWithArrows_bool \bool_set_false:N \l__wa_in_WithArrows_bool \bool_set_false:N \l__wa_in_DispWithArrows_bool \keys_set_known:nnN {WithArrows/General} {#2} \l_tmpa_tl \keys_set_known:nVN {WithArrows/GlobalOrEnv} \l_tmpa_tl \l_tmpb_tl \bool_set_eq:NN \l__wa_in_WithArrows_bool \l_tmpa_bool \bool_set_eq:NN \l__wa_in_DispWithArrows_bool \l_tmpb_bool} {\__wa_error:n {Unknown~option}}}} \group_begin: \msg_set:nnn {witharrows} {Option~will~be~ignored} {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown~or~can't~be~ used~in~\token_to_str:N\WithArrowsNewStyle.~If~you~go~on,~ this~option~will~be~ignored~in~the~definition~of~style~'#1'.} \msg_set:nnn {witharrows} {Unknown~option} {The~option~"\tl_use:N\l_keys_key_tl"~is~unknown.~If~you~go~on,~ this~option~will~be~ignored~in~the~definition~of~style~'#1'.} \WithArrowsOptions{#2} \group_end:} } \msg_new:nnn {witharrows} {Key~already~defined} {The~key~'#1'~is~already~defined.~If~you~go~on,~ your~instruction~\token_to_str:N\WithArrowsNewStyle\ will~be~ignored.} \tl_set:Nn \c__wa_tikz_code_up_tl {\draw[rounded~corners] let \p1 = (#1), \p2 = (#2) in (\p1) -- node {\dim_set:Nn \l_tmpa_dim {\x2-\x1} \begin{varwidth}\l_tmpa_dim \raggedright #3 \end{varwidth}} (\x2,\y1) -- (\p2) ;} \tl_set:Nn \c__wa_tikz_code_down_tl {\draw[rounded~corners] let \p1 = (#1), \p2 = (#2) in (\p1) -- (\x1,\y2) -- node {\dim_set:Nn \l_tmpa_dim {\x1-\x2} \begin{varwidth}\l_tmpa_dim \raggedright #3 \end{varwidth}} (\p2) ;} \keys_define:nn {WithArrows/General} {up .value_forbidden:n = true, up .code:n = {\int_compare:nNnTF \l__wa_level_int = 3 {\bool_if:NTF \c__wa_varwidth_loaded_bool {\cs_if_exist:cTF {tikz@library@calc@loaded} {\int_set:Nn \l__wa_pos_arrow_int 1 \bool_set_false:N \l__wa_wrap_lines_bool \tl_set_eq:NN \l__wa_tikz_code_tl \c__wa_tikz_code_up_tl} {\__wa_error:n {calc~not~loaded}}} {\__wa_error:n {varwidth~not~loaded}}} {\__wa_error:n {Unknown~option}}}, down .value_forbidden:n = true, down .code:n = {\int_compare:nNnTF \l__wa_level_int = 3 {\bool_if:NTF \c__wa_varwidth_loaded_bool {\cs_if_exist:cTF {tikz@library@calc@loaded} {\int_set:Nn \l__wa_pos_arrow_int 1 \bool_set_false:N \l__wa_wrap_lines_bool \tl_set_eq:NN \l__wa_tikz_code_tl \c__wa_tikz_code_down_tl} {\__wa_error:n {calc~not~loaded}}} {\__wa_error:n {varwidth~not~loaded}}} {\__wa_error:n {Unknown~option}}}} \msg_new:nnn {witharrows} {varwidth~not~loaded} {You~can't~use~the~option~"\l_keys_key_tl"~because~ you~don't~have~loaded~the~package~ varwidth.~If~you~go~on,~this~option~will~be~forgotten.} \msg_new:nnn {witharrows} {calc~not~loaded} {You~can't~use~the~option~"\l_keys_key_tl"~because~you~don't~have~loaded~the~ Tikz~library~calc.You~should~add~"\token_to_str:N\usetikzlibrary{calc}" ~in~your~preamble.~ ~If~you~go~on,~this~option~will~be~forgotten.} \endinput %% %% End of file `witharrows.sty'.