diff options
author | Karl Berry <karl@freefriends.org> | 2019-07-30 21:00:57 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-07-30 21:00:57 +0000 |
commit | 8d8689cf2a834a431395e4beb28926f111f8cbb5 (patch) | |
tree | 673a0d2062a94df4f8a5623242dc67360b1507d6 /Master/texmf-dist/tex | |
parent | 5e541c41c7d9b017d0dfebb337f79da3a69e5251 (diff) |
witharrows (30jul19)
git-svn-id: svn://tug.org/texlive/trunk@51778 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/generic/witharrows/witharrows.sty | 2047 |
1 files changed, 2047 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/generic/witharrows/witharrows.sty b/Master/texmf-dist/tex/generic/witharrows/witharrows.sty new file mode 100644 index 00000000000..382e185d1cc --- /dev/null +++ b/Master/texmf-dist/tex/generic/witharrows/witharrows.sty @@ -0,0 +1,2047 @@ +%% +%% This is file `witharrows.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% witharrows.dtx (with options: `LaTeX') +%% +%% 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{2.0} +\def\myfiledate{2019/07/30} +\RequirePackage{tikz} +\RequirePackage{expl3}[2019/02/15] +\usetikzlibrary{arrows.meta,bending} +\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 +\cs_new_protected:Npn \__wa_msg_new:nn { \msg_new:nnn { witharrows } } +\cs_new_protected:Npn \__wa_msg_new:nnn { \msg_new:nnnn { witharrows } } +\cs_new_protected:Npn \__wa_msg_redirect_name:nn + { \msg_redirect_name:nnn { witharrows } } +\cs_new_protected:Npn \__wa_error:n { \msg_error:nn { witharrows } } +\cs_new_protected:Npn \__wa_warning:n { \msg_error:nn { witharrows } } +\cs_new_protected:Npn \__wa_fatal:n { \msg_fatal:nn { witharrows } } +\cs_new_protected:Npn \__wa_error:nn { \msg_error:nnn { witharrows } } +\cs_generate_variant:Nn \__wa_error:nn { n x } +\keys_define:nn { WithArrows / package } + { + footnote .bool_gset:N = \g__wa_footnote_bool , + footnotehyper .bool_gset:N = \g__wa_footnotehyper_bool , + unknown .code:n = + \__wa_fatal:n { Option~unknown~for~package } + } +\__wa_msg_new:nn { Option~unknown~for~package } + { + You~can't~use~the~option~'\l_keys_key_tl'~when~loading~the~ + package~witharrows.~Try~to~use~the~command~ + \token_to_str:N\WithArrowsOptions. + } +\ProcessKeysOptions { WithArrows / package } +\__wa_msg_new:nn { Option~incompatible~with~Beamer } + { + The~option~'\l_keys_key_tl'\ is~incompatible~ + with~Beamer~because~Beamer~has~its~own~system~to~extract~footnotes. + } +\__wa_msg_new:nn { 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.\\ + If~you~go~on,~the~package~footnote~won't~be~loaded. + } +\__wa_msg_new:nn { 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.\\ + If~you~go~on,~the~package~footnotehyper~won't~be~loaded. + } +\bool_if:NT \g__wa_footnote_bool + { + \@ifclassloaded { beamer } + { \msg_info:nn { witharrows } { Option~incompatible~with~Beamer } } + { + \@ifpackageloaded { footnotehyper } + { \__wa_error:n { footnote~with~footnotehyper~package } } + { \usepackage { footnote } } + } + } +\bool_if:NT \g__wa_footnotehyper_bool + { + \@ifclassloaded { beamer } + { \__wa_info:n { Option~incompatible~with~Beamer } } + { + \@ifpackageloaded { footnote } + { \__wa_error:n { 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_generate_variant:Nn \tl_put_right:Nn { N v } +\cs_generate_variant:Nn \seq_set_split:Nnn { N x x } +\AtBeginDocument + { + \clist_map_inline:nn + { + amsmath, amsthm, autonum, cleveref, hyperref, mathtools, showlabels, + typedref, unicode-math, varwidth + } + { + \bool_new:c { c__wa_#1_loaded_bool } + \@ifpackageloaded { #1 } + { \bool_set_true:c { c__wa_#1_loaded_bool } } + { } + } + } +\sys_if_engine_luatex:TF + { + \cs_new_protected:Npn \__wa_strcmp:nn #1 #2 + { \lua_now:e { l3kernel.strcmp('#1','#2') } } + } + { + \cs_new_protected:Npn \__wa_strcmp:nn #1 #2 + { \pdftex_strcmp:D { #1 } { #2 } } + } +\cs_new_protected:Npn \__wa_sort_seq:N #1 + { + \seq_sort:Nn #1 + { + \int_compare:nNnTF + { + \__wa_strcmp:nn + { \str_lower_case:n { ##1 } } + { \str_lower_case:n { ##2 } } + } + > 0 + \sort_return_swapped: + \sort_return_same: + } + } +\cs_new_protected:Npn \__wa_convert_to_str_seq:N #1 + { + \seq_clear:N \l_tmpa_seq + \seq_map_inline:Nn #1 + { + \seq_put_left:Nx \l_tmpa_seq { \tl_to_str:n { ##1 } } + } + \seq_set_eq:NN #1 \l_tmpa_seq + } +\cs_new_protected:Npn \__wa_set_seq_of_str_from_clist:Nn #1 #2 + { + \seq_set_from_clist:Nn #1 { #2 } + \__wa_convert_to_str_seq:N #1 + } +\cs_new_protected:Npn \__wa_save:N #1 + { + \seq_set_split:Nxx \l_tmpa_seq + { \char_generate:nn { `_ } { 12 } } + { \cs_to_str:N #1 } + \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl + \str_set:Nx \l_tmpa_str { \seq_item:Nn \l_tmpa_seq { -1 } } + \use:c { \l_tmpa_str _if_exist:cF } + { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ } + { + \use:c { \l_tmpa_str _new:c } + { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ } + } + \use:c { \l_tmpa_str _gset_eq:cN } + { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ } #1 + } +\cs_new_protected:Npn \__wa_restore:N #1 + { + \seq_set_split:Nxx \l_tmpa_seq + { \char_generate:nn { `_ } { 12 } } + { \cs_to_str:N #1 } + \seq_pop_left:NN \l_tmpa_seq \l_tmpa_tl + \str_set:Nx \l_tmpa_str { \seq_item:Nn \l_tmpa_seq { -1 } } + \use:c { \l_tmpa_str _set_eq:Nc } + #1 { g_\seq_use:Nnnn \l_tmpa_seq _ _ _ } + } +\tikzset + { + __wa_node_style / .style = + { + above = \l__wa_ystart_dim , + inner~sep = \c_zero_dim , + minimum~width = \c_zero_dim , + 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:NTF \c__wa_amsmath_loaded_bool + { + \seq_put_right:Nn \l__wa_options_WithArrowsOptions_seq { subequations } + \seq_put_right:Nn \l__wa_options_DispWithArrows_seq { subequations } + } + { + \cs_new_protected:Npn \spread@equation + { + \openup \jot + \cs_set_eq:NN \spread@equation \prg_do_nothing: + } + } + } +\tl_new:N \l__wa_left_brace_tl +\tl_set_eq:NN \l__wa_left_brace_tl \c_novalue_tl +\bool_new:N \l__wa_in_WithArrows_bool +\bool_new:N \l__wa_in_DispWithArrows_bool +\bool_new:N \l__wa_in_code_after_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 +\int_new:N \l__wa_pos_env_int +\int_new:N \l__wa_pos_arrow_int +\int_set:Nn \l__wa_pos_arrow_int 3 +\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_col_int_seq +\int_new:N \g__wa_col_int +\clist_new:N \l__wa_tags_clist +\clist_set:Nn \l__wa_tags_clist { all } +\cs_new_protected:Npn \__wa_test_if_to_tag: + { + \clist_if_in:NVT \l__wa_tags_clist \g__wa_line_int + { \clist_set:Nn \l__wa_tags_clist { all } } + } +\str_new:N \l__wa_command_name_str +\str_set:Nn \l__wa_command_name_str { Arrow } +\str_new:N \l__wa_string_Arrow_for_msg_str +\str_set:Nx \l__wa_string_Arrow_for_msg_str { \token_to_str:N \Arrow } +\seq_new:N \g__wa_names_seq +\bool_new:N \l__wa_sbwi_bool +\bool_new:N \l__wa_tag_star_bool +\bool_new:N \l__wa_tag_next_line_bool +\bool_new:N \l__wa_qedhere_bool +\bool_new:N \l__wa_in_first_columns_bool +\bool_new:N \l__wa_new_group_bool +\bool_new:N \l__wa_initial_r_bool +\bool_new:N \l__wa_final_r_bool +\tl_new:N \l__wa_initial_tl +\tl_new:N \l__wa_final_tl +\int_new:N \l__wa_nb_cols_int +\str_new:N \l__wa_format_str +\bool_new:N \l__wa_subequations_bool +\cs_new_protected:Npn \__wa_eval_if_allowed:n #1 + { + \str_if_empty:NTF \l__wa_previous_key_str + { + \str_set_eq:NN \l__wa_previous_key_str \l_keys_key_tl + #1 + } + { \__wa_error:n { Incompatible~options } } + } +\cs_new_protected:Npn \__wa_fix_pos_option:n #1 + { \__wa_eval_if_allowed:n { \int_set:Nn \l__wa_pos_arrow_int { #1 } } } +\keys_define:nn { WithArrows / Global } + { + 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 , + more-columns .code:n = + \__wa_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } , + more-columns .value_forbidden:n = true, + command-name .code:n = + \str_set:Nn \l__wa_command_name_str { #1 } + \str_set:Nx \l__wa_string_Arrow_for_msg_str + { \c_backslash_str Arrow~alias~\c_backslash_str #1 } , + command-name .value_required:n = true , + tikz-code .tl_set:N = \l__wa_tikz_code_tl, + tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; , + tikz-code .value_required:n = true , + TikzCode .meta:n = { tikz-code = #1 } , + displaystyle .bool_set:N = \l__wa_displaystyle_bool , + displaystyle .default:n = true , + show-nodes .code:n = + \tikzset { __wa_node_style / .append~style = { draw , red } } , + show-nodes .value_forbidden:n = true, + show-node-names .bool_set:N = \l__wa_show_node_names_bool , + show-node-names .default:n = true , + group .code:n = + \str_if_empty:NTF \l__wa_previous_key_str + { + \str_set:Nn \l__wa_previous_key_str { group } + \seq_remove_all:Nn \l__wa_options_Arrow_seq { xoffset } + \int_set:Nn \l__wa_pos_arrow_int 7 + } + { \__wa_error:n { Incompatible~options } } , + group .value_forbidden:n = true , + groups .code:n = + \str_if_empty:NTF \l__wa_previous_key_str + { + \str_set:Nn \l__wa_previous_key_str { groups } + \seq_if_in:NnF \l__wa_options_Arrow_seq { new-group } + { \seq_put_right:Nn \l__wa_options_Arrow_seq { new-group } } + \seq_remove_all:Nn \l__wa_options_Arrow_seq { xoffset } + \int_set:Nn \l__wa_pos_arrow_int 6 + } + { \__wa_error:n { Incompatible~options } } , + groups .value_forbidden:n = true , + tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } , + tikz .initial:n = \c_empty_tl , + tikz .value_required:n = true , + rr .value_forbidden:n = true , + rr .code:n = \__wa_fix_pos_option:n 3 , + ll .value_forbidden:n = true , + ll .code:n = \__wa_fix_pos_option:n 1 , + rl .value_forbidden:n = true , + rl .code:n = \__wa_fix_pos_option:n 2 , + lr .value_forbidden:n = true , + lr .code:n = \__wa_fix_pos_option:n 0 , + i .value_forbidden:n = true , + i .code:n = \__wa_fix_pos_option:n 5 , + xoffset .dim_set:N = \l__wa_xoffset_dim , + xoffset .value_required:n = true , + xoffset .initial:n = 3 mm , + jot .dim_set:N = \jot , + jot .value_required:n = true , + interline .skip_set:N = \l__wa_interline_skip , + interline .value_required:n = true , + start-adjust .dim_set:N = \l__wa_start_adjust_dim , + start-adjust .value_required:n = true , + start-adjust .initial:n = 0.4 ex , + end-adjust .dim_set:N = \l__wa_end_adjust_dim , + end-adjust .value_required:n = true , + end-adjust .initial:n = 0.4 ex , + adjust .meta:n = { start-adjust = #1 , end-adjust = #1 } , + adjust .value_required:n = true , + no-arrows .code:n = + \cs_set_eq:NN \__wa_draw_arrows:nn \use_none:nn + \cs_set_eq:NN \__wa_draw_arrow:nnn \use_none:nnn , + no-arrows .value_forbidden:n = true , + } +\keys_define:nn { WithArrows / WithArrowsSpecific } + { + t .code:n = \int_set:Nn \l__wa_pos_env_int O , + t .value_forbidden:n = true , + c .code:n = \int_set:Nn \l__wa_pos_env_int 1 , + c .value_forbidden:n = true , + b .code:n = \int_set:Nn \l__wa_pos_env_int 2 , + b .value_forbidden:n = true + } +\clist_new:N \c__wa_extensible_delimiters_clist +\clist_set:Nn \c__wa_extensible_delimiters_clist + { + ., \{, (, [, \lbrace, \lbrack, \lgroup, \langle, \lmoustache, \lceil, \lfloor + } +\AtBeginDocument + { + \bool_if:nT + { \c__wa_amsmath_loaded_bool || \use:c { c__wa_unicode-math_loaded_bool } } + { + \clist_put_right:Nn \c__wa_extensible_delimiters_clist { \lvert, \lVert } + } + } +\keys_define:nn { WithArrows / DispWithArrowsSpecific } + { + fleqn .bool_set:N = \l__wa_fleqn_bool , + fleqn .default:n = true , + mathindent .dim_set:N = \l__wa_mathindent_dim , + mathindent .value_required:n = true , + mathindent .initial:n = 25 pt , + notag .code:n = + \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 , + subequations .code:n = + \bool_if:NTF \c__wa_amsmath_loaded_bool + { \bool_set_true:N \l__wa_subequations_bool } + { + \__wa_error:n { amsmath~not~loaded } + \group_begin: + \globaldefs = 1 + \__wa_msg_redirect_name:nn { amsmath~not~loaded } { info } + \group_end: + } , + subequations .default:n = true , + subequations .value_forbidden:n = true , + nonumber .meta:n = notag , + allow-multiple-labels .code:n = + \__wa_msg_redirect_name:nn { Multiple~labels } { none } , + allow-multiple-labels .value_forbidden:n = true , + tagged-lines .code:n = + \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 \c_one_int + } , + tagged-lines .value_required:n = true , + wrap-lines .bool_set:N = \l__wa_wrap_lines_bool , + wrap-lines .default:n = true , + replace-left-brace-by .code:n = + { + \tl_set:Nx \l_tmpa_tl { \tl_head:n { #1 } } + \clist_if_in:NVTF + \c__wa_extensible_delimiters_clist + \l_tmpa_tl + { \tl_set:Nn \l__wa_replace_left_brace_by_tl { #1 } } + { \__wa_error:n { Bad~value~for~replace~brace~by } } + } , + replace-left-brace-by .initial:n = \lbrace , + standard-behaviour-with-items .bool_set:N = \l__wa_sbwi_bool , + standard-behaviour-with-items .default:n = true + } +\keys_define:nn { WithArrows / Env } + { + name .code:n = + \str_set:Nn \l_tmpa_str { #1 } + \seq_if_in:NVTF \g__wa_names_seq \l_tmpa_str + { \__wa_error:n { Duplicate~name } } + { \seq_gput_left:NV \g__wa_names_seq \l_tmpa_str } + \str_set_eq:NN \l__wa_name_str \l_tmpa_str , + name .value_required:n = true , + code-before .code:n = \tl_put_right:Nn \l__wa_code_before_tl { #1 } , + code-before .value_required:n = true, + CodeBefore .meta:n = { code-before = #1 } , + code-after .code:n = \tl_put_right:Nn \l__wa_code_after_tl { #1 } , + code-after .value_required:n = true , + CodeAfter .meta:n = { code-after = #1 } , + format .code:n = + \tl_if_empty:nTF { #1 } + { \__wa_error:n { Invalid~option~format } } + { + \regex_match:nnTF { \A[rcl]*\Z } { #1 } + { \tl_set:Nn \l__wa_format_str { #1 } } + { \__wa_error:n { Invalid~option~format } } + } , + format .value_required:n = true , + } +\keys_define:nn { WithArrows } + { + WithArrows .inherit:n = + { + WithArrows / Global , + WithArrows / WithArrowsSpecific , + WithArrows / Env + } , + DispWithArrows .inherit:n = + { + WithArrows / DispWithArrowsSpecific , + WithArrows / Global , + WithArrows / Env , + } , + WithArrowsOptions .inherit:n = + { + WithArrows / Global , + WithArrows / WithArrowsSpecific , + WithArrows / DispWithArrowsSpecific + } + } +\seq_new:N \l__wa_options_WithArrows_seq +\__wa_set_seq_of_str_from_clist:Nn \l__wa_options_WithArrows_seq + { + adjust, b, c, code-after, code-before, command-name, + displaystyle, end-adjust, + format, group, groups, i, + interline, jot, ll, + lr, more-columns, name, + no-arrows, rl, rr, + show-node-names, show-nodes, start-adjust, + t, tikz, tikz-code, + xoffset, ygap, ystart + } +\__wa_convert_to_str_seq:N \l__wa_options_WithArrows_seq +\keys_define:nn { WithArrows / WithArrows } + { + unknown .code:n = + \__wa_sort_seq:N \l__wa_options_WithArrows_seq + \__wa_error:n { Unknown~option~WithArrows } + } +\keys_define:nn { WithArrows / DispWithArrows } + { + left-brace .tl_set:N = \l__wa_left_brace_tl , + unknown .code:n = + \__wa_sort_seq:N \l__wa_options_DispWithArrows_seq + \__wa_error:n { Unknown~option~DispWithArrows } + } +\seq_new:N \l__wa_options_DispWithArrows_seq +\__wa_set_seq_of_str_from_clist:Nn \l__wa_options_DispWithArrows_seq + { + code-after, code-before, command-name, tikz-code, adjust, + displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot, + left-brace, ll, lr, mathindent, name, no-arrows, replace-left-brace-by, rl, + rr, show-node-names, show-nodes, start-adjust, tikz, wrap-lines, xoffset, + ygap, ystart, + allow-multiple-labels, tagged-lines, nonumber, notag + } +\keys_define:nn { WithArrows / WithArrowsOptions } + { + allow-duplicate-names .code:n = + \__wa_msg_redirect_name:nn { Duplicate~name } { none } , + allow-duplicate-names .value_forbidden:n = true , + unknown .code:n = + \__wa_sort_seq:N \l__wa_options_WithArrowsOptions_seq + \__wa_error:n { Unknown~option~WithArrowsOptions } + } +\seq_new:N \l__wa_options_WithArrowsOptions_seq +\__wa_set_seq_of_str_from_clist:Nn \l__wa_options_WithArrowsOptions_seq + { + allow-duplicate-names, b, c, command-name, more-columns, tikz-code, adjust, + displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr, + mathindent, no-arrows, rl, rr, show-node-names, show-nodes, start-adjust, t, + tikz, wrap-lines, xoffset, ygap, ystart, + allow-multiple-labels, nonumber, notag, standard-behaviour-with-items, + tagged-lines + } +\cs_new_protected:Npn \__wa_set_independent: + { + \str_if_empty:NTF \l__wa_previous_key_str + { + \str_set_eq:NN \l__wa_previous_key_str \l_keys_key_tl + \str_set:Nn \l__wa_status_arrow_str { independent } + \str_if_eq:VnF \l_keys_value_tl { NoValue } + { \__wa_error:n { Value~for~a~key } } + } + { \__wa_error:n { Incompatible~options~in~Arrow } } + } +\keys_define:nn { WithArrows / Arrow / FirstPass } + { + jump .code:n = + \int_compare:nTF { #1 > 0 } + { \int_set:Nn \l__wa_jump_int { #1 } } + { \__wa_error:n { Negative~jump } } , + jump .value_required:n = true, + rr .code:n = \__wa_set_independent: , + ll .code:n = \__wa_set_independent: , + rl .code:n = \__wa_set_independent: , + lr .code:n = \__wa_set_independent: , + i .code:n = \__wa_set_independent: , + rr .default:n = NoValue , + ll .default:n = NoValue , + rl .default:n = NoValue , + lr .default:n = NoValue , + i .default:n = NoValue , + new-group .value_forbidden:n = true, + new-group .code:n = + \int_compare:nTF { \l__wa_pos_arrow_int = 6 } + { \str_set:Nn \l__wa_status_arrow_str { new-group } } + { \__wa_error:n { new-group~without~groups } } , + tikz-code .code:n = \prg_do_nothing: , + tikz-code .value_required:n = true , + tikz .code:n = \prg_do_nothing: , + tikz .value_required:n = true , + xoffset .code:n = + \int_compare:nNnT \l__wa_pos_arrow_int > 5 + { \__wa_error:n { Option~xoffset~forbidden } } , + xoffset .value_required:n = true , + start-adjust .code:n = \prg_do_nothing: , + start-adjust .value_required:n = true , + end-adjust .code:n = \prg_do_nothing: , + end-adjust .value_required:n = true , + adjust .code:n = \prg_do_nothing: , + adjust .value_required:n = true , + unknown .code:n = + \__wa_sort_seq:N \l__wa_options_Arrow_seq + \seq_if_in:NVTF \l__wa_options_WithArrows_seq \l_keys_key_tl + { + \str_set:Nn \l_tmpa_str + { ~However,~this~key~can~be~used~in~the~options~of~\{WithArrows\}. } + } + { \str_clear:N \l_tmpa_str } + \__wa_error:n { Unknown~option~in~Arrow } + } +\seq_new:N \l__wa_options_Arrow_seq +\__wa_set_seq_of_str_from_clist:Nn \l__wa_options_Arrow_seq + { + adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, tikz-code, + xoffset + } +\cs_new_protected:Npn \__wa_fix_pos_arrow:n #1 + { + \str_if_empty:NT \l__wa_previous_key_str + { + \str_set_eq:NN \l__wa_previous_key_str \l_keys_key_tl + \int_set:Nn \l__wa_pos_arrow_int { #1 } + } + } +\keys_define:nn {WithArrows / Arrow / SecondPass } + { + tikz-code .tl_set:N = \l__wa_tikz_code_tl , + tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; , + tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } , + tikz .initial:n = \c_empty_tl , + rr .code:n = \__wa_fix_pos_arrow:n 3 , + ll .code:n = \__wa_fix_pos_arrow:n 1 , + rl .code:n = \__wa_fix_pos_arrow:n 2 , + lr .code:n = \__wa_fix_pos_arrow:n 0 , + i .code:n = \__wa_fix_pos_arrow:n 5 , + xoffset .code:n = + \int_compare:nNnF \l__wa_pos_arrow_int > 5 + { \dim_set:Nn \l__wa_xoffset_dim { #1 } } , + start-adjust .dim_set:N = \l__wa_start_adjust_dim, + end-adjust .dim_set:N = \l__wa_end_adjust_dim, + adjust .code:n = + \dim_set:Nn \l__wa_start_adjust_dim { #1 } + \dim_set:Nn \l__wa_end_adjust_dim { #1 } , + } +\NewDocumentCommand \WithArrowsOptions { m } + { + \str_clear_new:N \l__wa_previous_key_str + \keys_set:nn { WithArrows / WithArrowsOptions } { #1 } + } +\NewDocumentCommand \__wa_Arrow { O { } m ! O { } } + { + \int_gincr:N \g__wa_arrow_int + \str_clear_new:N \l__wa_previous_key_str + \keys_set:nn { WithArrows / Arrow / FirstPass } { #1 , #3 } + \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 { status } \l__wa_status_arrow_str + \prop_put:Nnn \l_tmpa_prop { options } { #1 , #3 } + \prop_put:Nnn \l_tmpa_prop { label } { #2 } + \prop_put:Nnx \l_tmpa_prop { input-line } \msg_line_number: + \prop_gclear_new:c + { g__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:Npn \__wa_Arrow_first_columns: + { \__wa_error:n { Arrow~not~in~last~column } \__wa_Arrow } +\cs_new_protected:Npn \__wa_pre_halign:n #1 + { + \str_clear_new:N \l__wa_type_env_str + \str_set:NV \l__wa_type_env_str \@currenvir + \cs_if_exist:NT \tikz@library@external@loaded + { \tikzset { external / export = false } } + \str_clear_new:N \l__wa_name_str + \str_clear_new:N \l__wa_status_arrow_str + \dim_zero_new:N \l__wa_x_dim + \str_clear_new:N \l__wa_input_line_str + \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_col_int_seq \g__wa_col_int + \int_gzero:N \g__wa_col_int + \int_gzero_new:N \g__wa_static_col_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 \c_one_int + \str_set:Nn \l__wa_format_str { rl } + \seq_clear_new:N \l__wa_labels_seq + \bool_set_false: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 + \str_clear_new:N \l__wa_previous_key_str + \bool_if:NT \l__wa_in_WithArrows_bool + { \keys_set:nn { WithArrows / WithArrows } { #1 } } + \bool_if:NT \l__wa_in_DispWithArrows_bool + { \keys_set:nn { WithArrows / DispWithArrows } { #1 } } + \cs_set_eq:cN \l__wa_command_name_str \__wa_Arrow_first_columns: + \int_set:Nn \l__wa_nb_cols_int { \str_count:N \l__wa_format_str } + \int_gset_eq:NN \g__wa_col_int \l__wa_nb_cols_int + \seq_clear_new:N \l__wa_format_seq + \seq_set_split:NnV \l__wa_format_seq { } \l__wa_format_str + \bool_if:NT \g__wa_footnote_bool { \begin { savenotes } } + \l__wa_code_before_tl + \spread@equation + \cs_set_eq:NN \notag \__wa_notag: + \cs_set_eq:NN \nonumber \__wa_nonumber: + \cs_set_eq:NN \tag \__wa_tag + \cs_set_eq:NN \__wa_old_label \label + \cs_set_eq:NN \label \__wa_label:n + \cs_set_eq:NN \tagnextline \__wa_tagnextline: + } +\cs_new_protected:Npn \__wa_construct_halign: + { + \seq_pop_right:NNTF \l__wa_format_seq \l__wa_type_col_str + { + \use:x + { + \int_gdecr:N \g__wa_col_int + \__wa_construct_halign: + \int_compare:nNnT \g__wa_col_int = \l__wa_nb_cols_int + { + \cs_set_eq:cN { \l__wa_command_name_str } \__wa_Arrow + \bool_if:NT \l__wa_in_DispWithArrows_bool + { + \__wa_test_if_to_tag: + \bool_if:NT \c__wa_amsthm_loaded_bool \__wa_set_qedhere: + } + } + \str_if_eq:VnT \l__wa_type_col_str { c } \hfil + \str_if_eq:VnT \l__wa_type_col_str { r } \hfill + \int_gincr:N \g__wa_col_int + \int_gset:Nn \g__wa_static_col_int { \int_use:N \g__wa_col_int } + \c_math_toggle_token + { + { } + \bool_if:NT \l__wa_displaystyle_bool \displaystyle + #### + } + \c_math_toggle_token + \int_compare:nNnTF \g__wa_col_int = \l__wa_nb_cols_int + { \__wa_construct_nodes: } + { + \str_if_eq:VnT \l__wa_type_col_str { l } \hfil + \str_if_eq:VnT \l__wa_type_col_str { c } \hfil + \bool_if:NT \l__wa_in_DispWithArrows_bool { \tabskip = \c_zero_skip } + & + } + } + } + { + \bool_if:NTF \l__wa_in_WithArrows_bool + { + \ialign + \bgroup + } + { + \halign to \l__wa_linewidth_dim + \bgroup + \bool_if:NT \l__wa_fleqn_bool + { \skip_horizontal:N \l__wa_mathindent_dim } + } + \int_gincr:N \g__wa_line_int + \int_gzero:N \g__wa_col_int + \tl_if_eq:NNF \l__wa_left_brace_tl \c_novalue_tl + { + \skip_horizontal:n + { \box_wd:N \l__wa_left_brace_box + \l__wa_delim_wd_dim } + } + \strut + } + } +\cs_new_protected:Npn \__wa_construct_nodes: + { + \tikz [ remember~picture , overlay ] + \node + [ + node~contents = { } , + __wa_node_style , + name = wa - \l__wa_prefix_str - \int_use:N \g__wa_line_int - l , + alias = + { + \str_if_empty:NF \l__wa_name_str + { \l__wa_name_str - \int_use:N \g__wa_line_int - l } + } + ] + ; + \hfil + \tikz [ remember~picture , overlay ] + \node + [ + node~contents = { } , + __wa_node_style , + name = wa - \l__wa_prefix_str - \int_use:N \g__wa_line_int - r , + alias = + { + \str_if_empty:NF \l__wa_name_str + { \l__wa_name_str - \int_use:N \g__wa_line_int - r } + } + ] + ; + \bool_if:NT \l__wa_show_node_names_bool + { + \hbox_overlap_right:n + { \small wa - \l__wa_prefix_str - \int_use:N \g__wa_line_int - r } + } + } +\NewDocumentEnvironment { WithArrows } { ! O { } } + { + \bool_set_true:N \l__wa_in_WithArrows_bool + \bool_set_false:N \l__wa_in_DispWithArrows_bool + \__wa_pre_halign:n { #1 } + \if_mode_math: \else: + \__wa_error:n { WithArrows~outside~math~mode } + \fi: + \int_case:nn \l__wa_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox } + \bgroup + \__wa_construct_halign: + && + \__wa_error:n { Too~much~columns~in~WithArrows } + \c_math_toggle_token + \bool_if:NT \l__wa_displaystyle_bool \displaystyle + { ## } + \c_math_toggle_token + \cr + } + { + \\ + \egroup + \egroup + \__wa_post_halign: + \bool_if:NT \g__wa_footnote_bool { \end { savenotes } } + } +\cs_new_protected:Npn \__wa_post_halign: + { + \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_command_name_str \__wa_Arrow_code_after + \bool_set_true:N \l__wa_in_code_after_bool + \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 + \seq_gpop_right:NN \g__wa_col_int_seq \l_tmpa_tl + \int_gset:Nn \g__wa_col_int \l_tmpa_tl + } +\cs_new_protected:Npn \__wa_cr: + { + \scan_stop: + \int_compare:nNnF \g__wa_col_int = \g__wa_static_col_int + { \__wa_error:n { omit~probably~used } } + \prg_replicate:nn { \l__wa_nb_cols_int - \g__wa_static_col_int } { & { } } + \group_align_safe_begin: + \peek_meaning_remove:NTF * \__wa_cr_i: \__wa_cr_i: + } +\cs_new_protected:Npn \__wa_cr_i: + { \peek_meaning:NTF [ \__wa_cr_ii: { \__wa_cr_ii: [ \c_zero_dim ] } } +\cs_new_protected:Npn \__wa_cr_ii: [ #1 ] + { + \peek_meaning_ignore_spaces:NTF \end + { + \__wa_cr_iii:n { #1 } + \__wa_analyze_end:Nn + } + { \__wa_cr_iii:n { #1 } } + } +\cs_new_protected:Npn \__wa_cr_iii:n #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 + { + \str_set:Nn \This@name { equation } + \hyper@refstepcounter { equation } + } + \bool_if:NT \c__wa_cleveref_loaded_bool + { + \cref@constructprefix { equation } \cref@result + \protected@edef \cref@currentlabel + { + [ + \cs_if_exist:NTF \cref@equation@alias + \cref@equation@alias + { equation } + ] + [ \arabic { equation } ] [ \cref@result ] + \p@equation \g_tmpa_tl + } + } + \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_eq:NN \tagform@ \prg_do_nothing: } + \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 ) ; + } + } + \dim_compare:nNnT { #1 } < \c_zero_dim + { \__wa_error:n { option~of~cr~negative } } + + \cr + \noalign + { + \dim_set:Nn \l_tmpa_dim { \dim_max:nn { #1 } \c_zero_dim } + \skip_vertical:n { \l_tmpa_dim + \l__wa_interline_skip } + \scan_stop: + } + } +\cs_new_protected:Npn \__wa_analyze_end:Nn #1 #2 + { + \exp_args:NV \str_if_eq:nnT \l__wa_type_env_str { #2 } + { \__wa_warning:n { newline~at~the~end~of~env } } + \end { #2 } + } +\bool_new:N \l__wa_in_label_or_minipage_bool +\NewDocumentEnvironment { DispWithArrows } { ! d < > ! O { } } + { + \bool_set_true:N \l__wa_in_DispWithArrows_bool + \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_typedref_loaded_bool { \str_set:Nn \sr@name { equation } } + \bool_if:NT \c__wa_amsmath_loaded_bool \intertext@ + \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l__wa_left_brace_tl { #1 } } + \__wa_pre_halign:n { #2 } + \bool_if:NT \l__wa_subequations_bool { \begin { subequations } } + \bool_if:NF \l__wa_sbwi_bool + { + \if@inlabel + \bool_set_true:N \l__wa_in_label_or_minipage_bool + \fi + \if@minipage + \bool_set_true:N \l__wa_in_label_or_minipage_bool + \fi + } + \tl_if_eq:NNF \l__wa_left_brace_tl \c_novalue_tl + { + \hbox_set:Nn \l_tmpa_box + { + \group_begin: + \dim_set_eq:NN \nulldelimiterspace \c_zero_dim + \c_math_toggle_token + \left \l__wa_replace_left_brace_by_tl \vcenter to 1 cm { } \right. + \c_math_toggle_token + \group_end: + } + \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_brace_box + \hbox_set:Nn \l__wa_left_brace_box + { + \group_begin: + \cs_set_eq:NN \label \__wa_old_label + \c_math_toggle_token + \bool_if:NT \l__wa_displaystyle_bool \displaystyle + \l__wa_left_brace_tl + { } + \c_math_toggle_token + \group_end: + } + } + \tl_clear_new:N \l__wa_tag_tl + \bool_set_false:N \l__wa_qedhere_bool + \bool_set_false:N \l__wa_tag_star_bool + \if_mode_math: + \__wa_fatal:n { DispWithArrows~in~math~mode } + \fi: + \bool_if:NTF \l__wa_in_label_or_minipage_bool + { \c_math_toggle_token } + { + \if_mode_vertical: + \nointerlineskip + \hbox_to_wd:nn { .6 \linewidth } { } + \fi: + \c_math_toggle_token \c_math_toggle_token + } + \dim_zero_new:N \l__wa_linewidth_dim + \bool_if:NTF \l__wa_in_label_or_minipage_bool + { \dim_set_eq:NN \l__wa_linewidth_dim \linewidth } + { \dim_set_eq:NN \l__wa_linewidth_dim \displaywidth } + \box_clear_new:N \l__wa_halign_box + \setbox \l__wa_halign_box \vtop \bgroup + \tabskip = + \bool_if:NTF \l__wa_fleqn_bool + \c_zero_skip + { 0 pt plus 1000 pt minus 1000 pt } + \__wa_construct_halign: + \tabskip = 0 pt plus 1000 pt minus 1000 pt + & + $ ## $ + \tabskip = \c_zero_skip + && + \__wa_fatal:n { Too~much~columns~in~DispWithArrows } + \bool_if:nT \c_false_bool { ## } + \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 } } + \egroup + \tl_if_eq:NNTF \l__wa_left_brace_tl \c_novalue_tl + { \box_use_drop:N \l__wa_halign_box } + { + \hbox_to_wd:nn \l__wa_linewidth_dim + { + \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_brace_box + \dim_set:Nn \l_tmpa_dim + { + \box_ht:N \l__wa_halign_box + + \box_dp:N \l__wa_halign_box + } + \group_begin: + \dim_set_eq:NN \nulldelimiterspace \c_zero_dim + \c_math_toggle_token + \left \l__wa_replace_left_brace_by_tl + \vcenter to \l_tmpa_dim { \vfil } + \right. + \c_math_toggle_token + \group_end: + \hfil + } + \hfil + } + \skip_horizontal:n { - \l__wa_linewidth_dim } + \vcenter { \box_use_drop:N \l__wa_halign_box } + } + \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_fatal: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_halign: + \bool_if:nT \c__wa_mathtools_loaded_bool + { \MH_if_boolean:nT { show_only_refs } \MT_showonlyrefs_true: } + \bool_if:NTF \l__wa_in_label_or_minipage_bool + { + \c_math_toggle_token + \skip_vertical:N \belowdisplayskip + } + { \c_math_toggle_token \c_math_toggle_token } + \bool_if:NT \l__wa_subequations_bool { \end { subequations } } + \bool_if:NT \g__wa_footnote_bool { \end { savenotes } } + \ignorespacesafterend + } +\NewDocumentEnvironment { DispWithArrows* } { } + { + \WithArrowsOptions { notag } + \DispWithArrows + } + \endDispWithArrows +\cs_new_protected:Npn \__wa_if_in_last_col_of_disp:Nn #1 #2 + { + \bool_if:NTF \l__wa_in_WithArrows_bool + { \__wa_error:nn { Not~allowed~in~WithArrows } { #1 } } + { + \int_compare:nNnTF \g__wa_col_int < \l__wa_nb_cols_int + { \__wa_error:nn { Not~allowed~in~DispWithArrows } { #1 } } + { #2 } + } + } +\cs_new_protected:Npn \__wa_notag: + { \__wa_if_in_last_col_of_disp:Nn \notag { \clist_clear:N \l__wa_tags_clist } } +\cs_new_protected:Npn \__wa_nonumber: + { \__wa_if_in_last_col_of_disp:Nn \nonumber { \clist_clear:N \l__wa_tags_clist } } +\NewDocumentCommand \__wa_tag { s m } + { + \__wa_if_in_last_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:Npn \__wa_label:n #1 + { + \__wa_if_in_last_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:Npn \__wa_tagnextline: + { + \__wa_if_in_last_col_of_disp:Nn \tagnextline + { \bool_set_true:N \l__wa_tag_next_line_bool } + } +\cs_new_protected:Npn \__wa_qedhere: { \bool_set_true:N \l__wa_qedhere_bool } +\cs_new_protected:Npn \__wa_set_qedhere: { \cs_set_eq:NN \qedhere \__wa_qedhere: } +\cs_new_protected:Npn \__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: + } +\cs_new_protected:Npn \__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:Npn \__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_seq + \seq_clear_new:N \l__wa_last_arrows_seq + \bool_set_true:N \l__wa_new_group_bool + \int_set:Nn \l__wa_arrow_int \c_one_int + \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 } + { status } \l__wa_status_arrow_str + \prop_get:cnN + { g__wa_arrow _ \l__wa_prefix_str _ \int_use:N \l__wa_arrow_int _ prop } + { input-line } \l__wa_input_line_str + \int_compare:nNnTF \l__wa_final_int > \g__wa_line_int + { + \int_compare:nNnF \l__wa_pos_arrow_int = 8 + { \__wa_error:n { Too~few~lines~for~an~arrow } } + } + \__wa_code_for_possible_arrow: + \int_incr:N \l__wa_arrow_int + } + \bool_if:nT + { + \int_compare_p:n { \l__wa_pos_arrow_int != 7 } + && + \int_compare_p:nNn \l__wa_first_arrow_of_group_int > 0 + } + { \__wa_draw_arrows:nn \l__wa_first_arrow_of_group_int \g__wa_arrow_int } + } +\cs_new_protected:Npn \__wa_code_for_possible_arrow: + { + \bool_if:nT + { + \int_compare_p:nNn \l__wa_arrow_int > \c_one_int + && + ( \int_compare_p:n { \l__wa_initial_int > \l__wa_last_line_of_group_int } + && + \int_compare_p:n { \l__wa_pos_arrow_int != 7 } + || + \str_if_eq_p:Vn \l__wa_status_arrow_str { new-group } + ) + } + { + \int_compare:nNnF \l__wa_first_arrow_of_group_int = \c_zero_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_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_seq + \seq_put_left:NV \l__wa_first_arrows_seq \l__wa_arrow_int + \seq_clear:N \l__wa_last_arrows_seq + \seq_put_left:NV \l__wa_last_arrows_seq \l__wa_arrow_int + \int_compare:nT { \l__wa_pos_arrow_int != 8 } + { \dim_set:Nn \l__wa_x_dim { - \c_max_dim } } + } + { + \bool_if:nF + { \str_if_eq_p:Vn \l__wa_status_arrow_str { independent } } + { + \int_compare:nT + { \l__wa_initial_int = \l__wa_first_line_of_group_int } + { \seq_put_left:NV \l__wa_first_arrows_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_seq + \seq_put_left:NV \l__wa_last_arrows_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_seq \l__wa_arrow_int } + } + } + } + \bool_if:nF { \str_if_eq_p:Vn \l__wa_status_arrow_str { independent } } + { + \int_compare:nT { \l__wa_pos_arrow_int != 8 } + { \__wa_update_x:nn \l__wa_initial_int \l__wa_final_int } + } + } +\cs_generate_variant:Nn \keys_set:nn { n o } +\cs_new_protected:Npn \__wa_keys_set: + { \keys_set_known:no { WithArrows / Arrow / SecondPass } } +\cs_new_protected:Npn \__wa_draw_arrows:nn #1 #2 + { + \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:nT { \l__wa_final_int <= \g__wa_line_int } \__wa_draw_arrows_i: + \int_incr:N \l__wa_arrow_int + } + \group_end: + } +\cs_new_protected:Npn \__wa_draw_arrows_i: + { + \group_begin: + \prop_get:cnN + { g__wa_arrow _\l__wa_prefix_str _ \int_use:N \l__wa_arrow_int _ prop } + { options } \l_tmpa_tl + \str_clear_new:N \l__wa_previous_key_str + \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_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: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_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_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:Npn \__wa_def_function_tmpa:n #1 + { + \cs_set:Npn \__wa_tmpa:nnn ##1 ##2 ##3 + { + \begin{tikzpicture} + [ + __wa_standard , + every~path / .style = WithArrows / arrow + ] + #1 + \end{tikzpicture} + } + } +\cs_new_protected:Npn \__wa_draw_arrow:nnn #1 #2 #3 + { + \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:NV \__wa_def_function_tmpa:n \l__wa_tikz_code_tl + \__wa_tmpa:nnn { #1 } { #2 } { #3 } + } +\cs_generate_variant:Nn \__wa_draw_arrow:nnn { n n o } +\tl_const: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 - \pgfkeysvalueof { / pgf / inner~xsep } } + \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:Npn \__wa_update_x:nn #1 #2 + { + \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 / Arrow / code-after } + { + tikz .code:n = + \tikzset { WithArrows / arrow / .append~style = { #1 } } , + tikz .value_required:n = true , + rr .value_forbidden:n = true , + rr .code:n = \__wa_fix_pos_option:n 0 , + ll .value_forbidden:n = true, + ll .code:n = \__wa_fix_pos_option:n 1 , + rl .value_forbidden:n = true , + rl .code:n = \__wa_fix_pos_option:n 2 , + lr .value_forbidden:n = true , + lr .code:n = \__wa_fix_pos_option:n 3 , + v .value_forbidden:n = true , + v .code:n = \__wa_fix_pos_option:n 4 , + tikz-code .tl_set:N = \l__wa_tikz_code_tl , + tikz-code .value_required:n = true , + xoffset .dim_set:N = \l__wa_xoffset_dim , + xoffset .value_required:n = true , + unknown .code:n = + \__wa_sort_seq:N \l__wa_options_Arrow_code_after_seq + \__wa_error:n { Unknown~option~Arrow~in~code-after } + } +\seq_new:N \l__wa_options_Arrow_code_after_seq +\__wa_set_seq_of_str_from_clist:Nn \l__wa_options_Arrow_code_after_seq + { ll, lr, rl, rr, tikz, tikz-code, v, x, offset } +\NewDocumentCommand \__wa_Arrow_code_after { O { } m m m ! O { } } + { + \int_set:Nn \l__wa_pos_arrow_int 1 + \str_clear_new:N \l__wa_previous_key_str + \group_begin: + \keys_set:nn { WithArrows / Arrow / code-after } + { #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 } + } + \tl_if_eq:nnTF { #2 } { #3 } + { \__wa_error:nn { Both~lines~are~equal } { #2 } } + { + \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:Npn \__wa_MultiArrow:nn #1 #2 + { + \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:nTF { \clist_count:N \g_tmpa_clist < 2 } + { \__wa_error:n { Too~small~specification~for~MultiArrow } } + { + \clist_sort:Nn \g_tmpa_clist + { + \int_compare:nTF { ##1 > ##2 } + \sort_return_swapped: + \sort_return_same: + } + \clist_pop:NN \g_tmpa_clist \l_tmpa_tl + \clist_reverse:N \g_tmpa_clist + \clist_pop:NN \g_tmpa_clist \l_tmpb_tl + \exp_args:NV \__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:Npn \__wa_MultiArrow_i:n #1 + { + \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} + } +\str_const:Nn \c__wa_option_ignored_str + { If~you~go~on,~this~option~will~be~ignored. } +\str_const:Nn \c__wa_command_ignored_str + { If~you~go~on,~this~command~will~be~ignored. } +\__wa_msg_new:nn { amsmath~not~loaded } + { + You~can't~use~the~option~'\l_keys_key_tl'~because~the~ + package~'amsmath'~has~not~been~loaded.\\ + If~you~go~on,~this~option~will~be~ignored~in~the~rest~ + of~the~document. + } +\__wa_msg_new:nn { Bad~value~for~replace~brace~by } + { + Bad~value~for~the~option~'\l_keys_key_tl'.~The~value~must~begin~ + with~an~extensible~left~delimiter.~The~possible~values~are:~., + \token_to_str:N \{,~(,~[,~\token_to_str:N \lbrace,~ + \token_to_str:N \lbrack,~\token_to_str:N \lgroup,~ + \token_to_str:N \langle,~\token_to_str:N \lmoustache,~ + \token_to_str:N \lfloor\ and~\token_to_str:N \lceil\ + (and~\token_to_str:N \lvert\ and~\token_to_str:N \lVert\ + if~amsmath~or~unicode-math~is~loaded~in~LaTeX).\\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { option~of~cr~negative } + { + The~argument~of~the~command~\token_to_str:N\\~ + should~be~positive~in~the~row~\int_use:N \g__wa_line_int\ + of~your~environment~\{\l__wa_type_env_str\}.\\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { omit~probably~used } + { + There~is~a~problem.~Maybe~you~have~used~a~command~ + \token_to_str:N\omit\ in~the~line~\int_use:N \g__wa_line_int\ + (or~another~line)~of~your~environment~\{\l__wa_type_env_str\}.\\ + You~can~go~on~but~you~may~have~others~errors. + } +\__wa_msg_new:nn { newline~at~the~end~of~env } + { + Your~environment~\{\l__wa_type_env_str\}~should~not~end~with~ + a~\token_to_str:N \\.\\ + This~warning~might~become~an~error~in~a~future~version. + } +\__wa_msg_new:nn { Invalid~option~format } + { + The~key~'format'~should~contain~only~letters~r,~c~and~l~and~ + must~not~be~empty.\\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { Value~for~a~key } + { + The~key~'\l_keys_key_tl'~should~be~used~without~value. \\ + However,~you~can~go~on~for~this~time. + } +\__wa_msg_new:nnn { Unknown~option~in~Arrow } + { + The~key~'\l_keys_key_tl'~is~unknown~for~the~command~ + \l__wa_string_Arrow_for_msg_str\ in~the~row~ + \int_use:N \g__wa_line_int\ of~your~environment~ + \{\l__wa_type_env_str\}. \l_tmpa_str \\ + \c__wa_option_ignored_str \\ + For~a~list~of~the~available~keys,~type~H~<return>. + } + { + The~available~keys~are~(in~alphabetic~order):~ + \seq_use:Nnnn \l__wa_options_Arrow_seq {~and~} {,~} {~and~}. + } +\__wa_msg_new:nnn { Unknown~option~WithArrows } + { + The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__wa_type_env_str\}. \\ + \c__wa_option_ignored_str \\ + For~a~list~of~the~available~keys,~type~H~<return>. + } + { + The~available~keys~are~(in~alphabetic~order):~ + \seq_use:Nnnn \l__wa_options_WithArrows_seq {~and~} {,~} {~and~}. + } +\__wa_msg_new:nnn { Unknown~option~DispWithArrows } + { + The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__wa_type_env_str\}. \\ + \c__wa_option_ignored_str \\ + For~a~list~of~the~available~keys,~type~H~<return>. + } + { + The~available~keys~are~(in~alphabetic~order):~ + \seq_use:Nnnn \l__wa_options_DispWithArrows_seq {~and~} {,~} {~and~}. + } +\__wa_msg_new:nnn { Unknown~option~WithArrowsOptions } + { + The~key~'\l_keys_key_tl'~is~unknown~in~ + \token_to_str:N \WithArrowsOptions. \\ + \c__wa_option_ignored_str \\ + For~a~list~of~the~available~keys,~type~H~<return>. + } + { + The~available~keys~are~(in~alphabetic~order):~ + \seq_use:Nnnn \l__wa_options_WithArrowsOptions_seq {~and~} {,~} {~and~}. + } +\__wa_msg_new:nnn { Unknown~option~Arrow~in~code-after } + { + The~key~'\l_keys_key_tl'~is~unknown~in~ + \token_to_str:N \Arrow\ in~code-after. \\ + \c__wa_option_ignored_str \\ + For~a~list~of~the~available~keys,~type~H~<return>. + } + { + The~available~keys~are~(in~alphabetic~order):~ + \seq_use:Nnnn \l__wa_options_Arrow_code_after_seq {~and~} {,~} {~and~}. + } +\__wa_msg_new:nn { Too~much~columns~in~WithArrows } + { + Your~environment~\{\l__wa_type_env_str\}~has~\int_use:N + \l__wa_nb_cols_int\ columns~and~you~try~to~use~one~more.~ + Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str.~ + If~you~really~want~to~use~more~columns~(after~the~arrows)~you~should~use~ + the~option~'more-columns'~at~a~global~level~or~for~an~environment. \\ + However,~you~can~go~one~for~this~time. + } +\__wa_msg_new:nn { Too~much~columns~in~DispWithArrows } + { + Your~environment~\{\l__wa_type_env_str\}~has~\int_use:N + \l__wa_nb_cols_int\ columns~and~you~try~to~use~one~more.~ + Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str\ + at~the~end~of~row~\int_use:N \g__wa_line_int. \\ + This~error~is~fatal. + } +\__wa_msg_new:nn { Negative~jump } + { + You~can't~use~a~negative~value~for~the~option~'jump'~of~command~ + \l__wa_string_Arrow_for_msg_str\ + in~the~row~\int_use:N \g__wa_line_int\ + of~your~environment~\{\l__wa_type_env_str\}.~ + You~can~create~an~arrow~going~backwards~with~the~option~'<-'~of~Tikz. \\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { new-group~without~groups } + { + You~can't~use~the~option~'new-group'~for~the~command~ + \l__wa_string_Arrow_for_msg_str\ + because~you~are~not~in~'groups'~mode.~Try~to~use~the~option~ + 'groups'~in~your~environment~\{\l__wa_type_env_str\}. \\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn + { Too~few~lines~for~an~arrow } + { + Line~\l__wa_input_line_str\ + :~an~arrow~specified~in~the~row~\int_use:N \l__wa_initial_int\ + of~your~environment~\{\l__wa_type_env_str\}~can't~be~drawn~ + because~it~arrives~after~the~last~row~of~the~environment. \\ + If~you~go~on,~this~arrow~will~be~ignored. + } +\__wa_msg_new:nn { WithArrows~outside~math~mode } + { + The~environment~\{\l__wa_type_env_str\}~should~be~used~only~in~math~mode~ + like~the~environment~\{aligned\}~of~amsmath. \\ + Nevertheless,~you~can~go~on. + } +\__wa_msg_new:nn { DispWithArrows~in~math~mode } + { + The~environment~\{\l__wa_type_env_str\}~should~be~used~only~outside~math~ + mode~like~the~environment~\{align\}~of~amsmath. \\ + This~error~is~fatal. + } +\__wa_msg_new:nn { Incompatible~options~in~Arrow } + { + You~try~to~use~the~option~'\l_keys_key_tl'~but~ + this~option~is~incompatible~or~redundant~with~the~option~ + '\l__wa_previous_key_str'~set~in~the~same~command~ + \l__wa_string_Arrow_for_msg_str. \\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { Incompatible~options } + { You~try~to~use~the~option~'\l_keys_key_tl'~but~ + this~option~is~incompatible~or~redundant~with~the~option~ + '\l__wa_previous_key_str'~set~in~the~same~command~ + \bool_if:NT \l__wa_in_code_after_bool + { + \l__wa_string_Arrow_for_msg_str\ + in~the~code-after~of~your~environment~\{\l__wa_type_env_str\} + }. \\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { Arrow~not~in~last~column } + { + You~should~use~the~command~\l__wa_string_Arrow_for_msg_str\ + only~in~the~last~column~(column~\int_use:N\l__wa_nb_cols_int)~ + of~your~environment~\{\l__wa_type_env_str\}.\\ + However~you~can~go~on~for~this~time. + } +\__wa_msg_new:nn { Wrong~line~in~Arrow } + { + The~specification~of~line~'#1'~you~use~in~the~command~ + \l__wa_string_Arrow_for_msg_str\ + in~the~'code-after'~of~\{\l__wa_type_env_str\}~doesn't~exist. \\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { Both~lines~are~equal } + { + In~the~'code-after'~of~\{\l__wa_type_env_str\}~you~try~to~ + draw~an~arrow~going~to~itself~from~the~line~'#1'.~This~is~not~possible. \\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { Wrong~line~specification~in~MultiArrow } + { + The~specification~of~line~'#1'~doesn't~exist. \\ + If~you~go~on,~it~will~be~ignored~for~\token_to_str:N \MultiArrow. + } +\__wa_msg_new:nn { Too~small~specification~for~MultiArrow } + { + The~specification~of~lines~you~gave~to~\token_to_str:N \MultiArrow\ + is~too~small:~you~need~at~least~two~lines. \\ + \c__wa_command_ignored_str + } +\__wa_msg_new:nn { Not~allowed~in~DispWithArrows } + { + The~command~\token_to_str:N #1 + is~allowed~only~in~the~last~column~ + (column~\int_use:N\l__wa_nb_cols_int)~of~\{\l__wa_type_env_str\}. \\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { Not~allowed~in~WithArrows } + { + The~command~\token_to_str:N #1 is~not~allowed~in~\{\l__wa_type_env_str\}~ + (it's~allowed~in~the~last~column~of~\{DispWithArrows\}). \\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { 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. + } +\__wa_msg_new:nn { Multiple~tags } + { + You~can't~use~twice~the~command~\token_to_str:N\tag\ + in~a~line~of~the~environment~\{\l__wa_type_env_str\}. \\ + If~you~go~on,~the~tag~'#1'~will~be~used. + } +\__wa_msg_new:nn { Multiple~labels } + { + Normally,~we~can't~use~the~command~\token_to_str:N\label\ + twice~in~a~line~of~the~environment~\{\l__wa_type_env_str\}. \\ + 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~ + 'allow-multiple-labels'~at~the~global~or~environment~level. + } +\__wa_msg_new:nn { Multiple~labels~with~cleveref } + { + Since~you~use~cleveref,~you~can't~use~the~command~\token_to_str:N\label\ + twice~in~a~line~of~the~environment~\{\l__wa_type_env_str\}. \\ + If~you~go~on,~you~may~have~undefined~references. + } +\__wa_msg_new:nn { Inexistent~v-node } + { + There~is~a~problem.~Maybe~you~have~put~a~command~\token_to_str:N\cr\ + instead~of~a~command~\token_to_str:N\\~at~the~end~of~ + the~row~\l_tmpa_int\ + of~your~environment~\{\l__wa_type_env_str\}. \\ + This~error~is~fatal. + } +\__wa_msg_new:nn { Option~xoffset~forbidden } + { + You~can't~use~the~option~'xoffset'~in~the~command~ + \l__wa_string_Arrow_for_msg_str\ + while~you~are~using~the~option~ + ' \int_compare:nNnTF \l__wa_pos_arrow_int = 7 + { group } + { groups } '. \\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nnn { Duplicate~name } + { + The~name~'\l_keys_value_tl'~is~already~used~and~you~shouldn't~use~ + the~same~environment~name~twice.~You~can~go~on,~but,~ + maybe,~you~will~have~incorrect~results. \\ + For~a~list~of~the~names~already~used,~type~H~<return>. \\ + If~you~don't~want~to~see~this~message~again,~use~the~option~ + 'allow-duplicate-names'. + } + { + The~names~already~defined~in~this~document~are:~ + \seq_use:Nnnn \g__wa_names_seq { ,~ } { ,~ } { ~and~ }. + } +\NewDocumentCommand \WithArrowsNewStyle { m m } + { + \keys_if_exist:nnTF { WithArrows / Global } { #1 } + { \__wa_error:nn { Key~already~defined } { #1 } } + { + \keys_define:nn { WithArrows / Global } + { + #1 .code:n = + { \keys_set_known:nn { WithArrows / WithArrowsOptions } { #2 } } + } + \seq_put_right:Nx \l__wa_options_WithArrows_seq { \tl_to_str:n { #1 } } + \seq_put_right:Nx \l__wa_options_DispWithArrows_seq + { \tl_to_str:n { #1 } } + \seq_put_right:Nx \l__wa_options_WithArrowsOptions_seq + { \tl_to_str:N { #1 } } + \group_begin: + \msg_set:nnn { witharrows } { Unknown~option~WithArrowsOptions } + { + The~key~'\l_keys_key_tl'~can't~be~set~in~the~ + definition~of~a~style.~You~can~go~on~for~this~time~ + but~you~should~suppress~this~key. + } + \WithArrowsOptions { #2 } + \group_end: + } + } +\__wa_msg_new:nn { Key~already~defined } + { + The~key~'#1'~is~already~defined. \\ + If~you~go~on,~your~instruction~\token_to_str:N\WithArrowsNewStyle\ + will~be~ignored. + } +\tl_const:Nn \c__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 + \narrowragged + #3 + \end { varwidth } + } + (\x2,\y1) -- (\p2) ; + } +\tl_const: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 + \narrowragged + #3 + \end { varwidth } + } + (\p2) ; + } +\keys_define:nn { WithArrows / Arrow / FirstPass } + { + up .code:n = \__wa_set_independent: , + down .code:n = \__wa_set_independent: , + up .default:n = NoValue , + down .default:n = NoValue + } +\keys_define:nn { WithArrows / Arrow / SecondPass } + { + up .code:n = + \str_if_empty:NT \l__wa_previous_key_str + { + \str_set:Nn \l__wa_previous_key_str { up } + \bool_if:NTF \c__wa_varwidth_loaded_bool + { + \cs_if_exist:cTF { tikz@library@calc@loaded } + { + \int_set:Nn \l__wa_pos_arrow_int \c_one_int + \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 } } + } , + down .code:n = + \str_if_empty:NT \l__wa_previous_key_str + { + \str_set:Nn \l__wa_previous_key_str { down } + \bool_if:NTF \c__wa_varwidth_loaded_bool + { + \cs_if_exist:cTF { tikz@library@calc@loaded } + { + \int_set:Nn \l__wa_pos_arrow_int \c_one_int + \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 } } + } + } +\seq_put_right:Nn \l__wa_options_Arrow_seq { down } +\seq_put_right:Nn \l__wa_options_Arrow_seq { up } +\__wa_msg_new:nn { varwidth~not~loaded } + { + You~can't~use~the~option~'\l_keys_key_tl'~because~ + you~don't~have~loaded~the~package~'varwidth'. \\ + \c__wa_option_ignored_str + } +\__wa_msg_new:nn { calc~not~loaded } + { + You~can't~use~the~option~'\l_keys_key_tl'~because~you~don't~have~loaded~the~ + Tikz~library~'calc'.You~should~add~'\token_to_str:N\usetikzlibrary{calc}'~ + ~in~the~preamble~of~your~document. \\ + \c__wa_option_ignored_str + } +\endinput +%% +%% End of file `witharrows.sty'. |