diff options
author | Karl Berry <karl@freefriends.org> | 2019-12-28 22:24:44 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-12-28 22:24:44 +0000 |
commit | 719f1f03aa06f5c7411f8e7cd35fedee88583f22 (patch) | |
tree | fad7eee20e6aefc982222af3ccf58bb1b4064c96 | |
parent | 0f7905779b3f0f0316dfb24726aa088b5769735f (diff) |
witharrows (28dec19)
git-svn-id: svn://tug.org/texlive/trunk@53246 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/doc/generic/witharrows/witharrows-french.pdf | bin | 257996 -> 259546 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/witharrows/witharrows-french.tex | 80 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/witharrows/witharrows.pdf | bin | 589390 -> 615389 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/witharrows/witharrows.tex | 1590 | ||||
-rw-r--r-- | Master/texmf-dist/source/generic/witharrows/witharrows.dtx | 592 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/witharrows/witharrows.sty | 1923 |
6 files changed, 2356 insertions, 1829 deletions
diff --git a/Master/texmf-dist/doc/generic/witharrows/witharrows-french.pdf b/Master/texmf-dist/doc/generic/witharrows/witharrows-french.pdf Binary files differindex 0a045846a70..9711cf5756d 100644 --- a/Master/texmf-dist/doc/generic/witharrows/witharrows-french.pdf +++ b/Master/texmf-dist/doc/generic/witharrows/witharrows-french.pdf diff --git a/Master/texmf-dist/doc/generic/witharrows/witharrows-french.tex b/Master/texmf-dist/doc/generic/witharrows/witharrows-french.tex index f57d0a28d2a..9eac72c3c76 100644 --- a/Master/texmf-dist/doc/generic/witharrows/witharrows-french.tex +++ b/Master/texmf-dist/doc/generic/witharrows/witharrows-french.tex @@ -417,9 +417,8 @@ de \pkg{witharrows}. Néanmoins, une commande |\Arrow| définie précédemment pourrait encore être utile dans un environnement |{WithArrows}|. Si vous voulez l'utiliser dans un tel environnement, il est possible de changer le nom de la -commande |\Arrow| de l'extension \pkg{witharrows} grâce à une option |command-name|\footnote{Pour des raisons - historiques, il y a un alias pour cette option : |CommandeName|.} dédiée. Le nouveau nom de la commande doit être -fourni à l'option \emph{sans} la contre-oblique. +commande |\Arrow| de l'extension \pkg{witharrows} grâce à une option |command-name| dédiée. Le nouveau nom de la +commande doit être fourni à l'option \emph{sans} la contre-oblique. % \begin{Verbatim} \NewDocumentCommand {\Arrow} {} {\longmapsto} @@ -441,8 +440,7 @@ f & = \bigl(x \Arrow (x+1)^2\bigr) \interitem -L'environnement |{WithArrows}| fournit aussi deux options |code-before| et |code-after|\footnote{Pour des raisons - historiques, il y a aussi des alias pour ces options : |CodeBefore| et |CodeAfter|.} pour du code LaTeX qui sera +L'environnement |{WithArrows}| fournit aussi deux options |code-before| et |code-after| pour du code LaTeX qui sera exécuté au début et à la fin de l'environnement. Ces options ne sont pas conçues pour être utilisées comme des \emph{hooks} (elles sont disponibles uniquement au niveau de l'environnement et ne s'appliquent pas aux environnements imbriqués). @@ -689,10 +687,10 @@ $\begin{WithArrows}[interline=1mm,groups] \interitem -\section{Les options «up» et «down» pour des flèches individuelles} +\section{Les options « up » et « down » pour des flèches individuelles} \label{up-and-down} -Au niveau local, il y a deux options pour les flèches individuelles, nommée «|up|» et «|down|». L'exemple +Au niveau local, il y a deux options pour les flèches individuelles, nommées «|up|» et «|down|». L'exemple suivant illustre ces types de flèches: @@ -707,7 +705,7 @@ A & = B \end{WithArrows}\) \end{Verbatim} -\vspace{1cm} +\bigskip $\begin{WithArrows} A & = B \Arrow[up]{une flèche de type \texttt{up}} \\ @@ -719,9 +717,63 @@ A & = B \vspace{1cm} -Les options |up| et |down| nécessitent l'extension \pkg{varwidth} et l'extension Tikz \pkg{calc}. Si elles ne sont -pas chargées, une erreur sera levée. +Les options |up| et |down| nécessitent l'extension \pkg{varwidth} et l'extension Tikz \pkg{calc}. Si elles n'ont +pas été chargées au préalable par l'utilisateur, une erreur sera levée. +\vspace{1cm} +Les options |up| et |down| peuvent en fait prendre comme valeur une liste de couples clé-valeur. +\begin{itemize} +\item La clé |radius| est le rayon de l'angle arrondi de la flèche\footnote{La valeur initiale de ce paramètre est égale à +$4$~pt, qui est la valeur par défaut du ``|rounded corners|'' de Tikz.}. +\item La clé |width| contrôle la largeur (de la partie horizontale) de la flèche : +\begin{itemize} +\item avec la valeur |max|, la largeur de la flèche est ajustée par rapport à la position des nœuds (c'est le +comportement par défaut des flèches |up| et |down| comme illustré dans l'exemple précédent) ; +\item avec une valeur numérique, la largeur de la flèche est directement fixée par cette valeur numérique ; +\item avec la valeur |min|, la largeur de la flèche est ajustée au contenu de son étiquette. +\end{itemize} +\end{itemize} + +\vspace{1cm} +\begin{Verbatim} +$\begin{WithArrows} +A & = B +\Arrow[~emphase#up={width=2cm,radius=0pt}@]{essai} \\ + & = C + C + C + C + C + C + C + C +\end{WithArrows}$ +\end{Verbatim} + +\medskip +$\begin{WithArrows} +A & = B +\Arrow[up={width=2cm,radius=0pt}]{essai} \\ + & = C + C + C + C + C + C + C + C +\end{WithArrows}$ + + +\vspace{1cm} +\begin{Verbatim} +$\begin{WithArrows} +A & = B +\Arrow[~emphase#up={width=min}@]{essai} \\ + & = C + C + C + C + C + C + C + C +\end{WithArrows}$ +\end{Verbatim} + +\medskip +$\begin{WithArrows} +A & = B +\Arrow[up={width=min}]{essai} \\ + & = C + C + C + C + C + C + C + C +\end{WithArrows}$ + +\vspace{1cm} +Les options relatives aux flèches |up| and |down| peuvent être fixées au niveau global ou environnemental avec la +clé |up-and-down|. Cette clé peut aussi être utilisée comme préfixe comme illustré maintenant. +% +\begin{Verbatim} +\WithArrowsOptions{up-and-down/width=min} +\end{Verbatim} \interitem @@ -1220,13 +1272,14 @@ N & \vartriangleleft O \\ P & \vartriangleleft Q \end{WithArrows} \right. -\end{WithArrows}\] - +\end{WithArrows} +% \begin{tikzpicture}[remember picture,overlay] \draw [WithArrows/arrow] ([xshift=3mm]wa-\WithArrowsLastEnv-2-1-2-r.south) to ([xshift=3mm]wa-\WithArrowsLastEnv-3-2-r.north) ; \end{tikzpicture} +\] \medskip Dans le cas présent, il aurait été plus facile d'utiliser une commande |\Arrow| dans le |code-after| mais @@ -1691,8 +1744,7 @@ reposent sur le système de numérotation de LaTeX). \label{tikz-code} -L'option |tikz-code|\footnote{Pour des raisons historiques, l'option |tikz-code| a un alias : - |TikzCode|.} permet à l'utilisateur de changer la forme des flèches.\footnote{Si l'option |wrap-lines| +L'option |tikz-code| permet à l'utilisateur de changer la forme des flèches.\footnote{Si l'option |wrap-lines| est utilisée dans un environnement |{DispWithArrows}| ou |{DispWithArrows*}|, l'option |tikz-code| n'aura pas d'effet sur les flèches de cet environnement mais uniquement sur les flèches des environnements |{WithArrows}| imbriqués.} diff --git a/Master/texmf-dist/doc/generic/witharrows/witharrows.pdf b/Master/texmf-dist/doc/generic/witharrows/witharrows.pdf Binary files differindex eb25c91d026..b64ebed03c8 100644 --- a/Master/texmf-dist/doc/generic/witharrows/witharrows.pdf +++ b/Master/texmf-dist/doc/generic/witharrows/witharrows.pdf diff --git a/Master/texmf-dist/doc/generic/witharrows/witharrows.tex b/Master/texmf-dist/doc/generic/witharrows/witharrows.tex index fcb844c1600..f76f7f98dc8 100644 --- a/Master/texmf-dist/doc/generic/witharrows/witharrows.tex +++ b/Master/texmf-dist/doc/generic/witharrows/witharrows.tex @@ -18,22 +18,22 @@ %% and version 1.3 or later is part of all distributions of %% LaTeX version 2005/12/01 or later. %% -\def\myfileversion{2.2} -\def\myfiledate{2019/12/10} +\def\myfileversion{2.3} +\def\myfiledate{2019/12/27} \input tikz.tex \input expl3-generic.tex \usetikzlibrary{arrows.meta,bending} \ExplSyntaxOn \catcode `\@ = 11 -\cs_new_protected:Npn \@@_msg_new:nn { \msg_new:nnn { witharrows } } -\cs_new_protected:Npn \@@_msg_new:nnn { \msg_new:nnnn { witharrows } } -\cs_new_protected:Npn \@@_msg_redirect_name:nn +\cs_new_protected:Npn \__witharrows_msg_new:nn { \msg_new:nnn { witharrows } } +\cs_new_protected:Npn \__witharrows_msg_new:nnn { \msg_new:nnnn { witharrows } } +\cs_new_protected:Npn \__witharrows_msg_redirect_name:nn { \msg_redirect_name:nnn { witharrows } } -\cs_new_protected:Npn \@@_error:n { \msg_error:nn { witharrows } } -\cs_new_protected:Npn \@@_warning:n { \msg_warning:nn { witharrows } } -\cs_new_protected:Npn \@@_fatal:n { \msg_fatal:nn { witharrows } } -\cs_new_protected:Npn \@@_error:nn { \msg_error:nnn { witharrows } } -\cs_generate_variant:Nn \@@_error:nn { n x } +\cs_new_protected:Npn \__witharrows_error:n { \msg_error:nn { witharrows } } +\cs_new_protected:Npn \__witharrows_warning:n { \msg_warning:nn { witharrows } } +\cs_new_protected:Npn \__witharrows_fatal:n { \msg_fatal:nn { witharrows } } +\cs_new_protected:Npn \__witharrows_error:nn { \msg_error:nnn { witharrows } } +\cs_generate_variant:Nn \__witharrows_error:nn { n x } \cs_generate_variant:Nn \tl_put_right:Nn { N v } \cs_generate_variant:Nn \seq_set_split:Nnn { N x x } \AtBeginDocument @@ -44,26 +44,26 @@ typedref, unicode-math, varwidth } { - \bool_new:c { c_@@_#1_loaded_bool } - \bool_set_false:c { c_@@_#1_loaded_bool } + \bool_new:c { c__witharrows_#1_loaded_bool } + \bool_set_false:c { c__witharrows_#1_loaded_bool } } } \sys_if_engine_luatex:TF { - \cs_new_protected:Npn \@@_strcmp:nn #1 #2 + \cs_new_protected:Npn \__witharrows_strcmp:nn #1 #2 { \lua_now:e { l3kernel.strcmp('#1','#2') } } } { - \cs_new_protected:Npn \@@_strcmp:nn #1 #2 + \cs_new_protected:Npn \__witharrows_strcmp:nn #1 #2 { \tex_strcmp:D { #1 } { #2 } } } -\cs_new_protected:Npn \@@_sort_seq:N #1 +\cs_new_protected:Npn \__witharrows_sort_seq:N #1 { \seq_sort:Nn #1 { \int_compare:nNnTF { - \@@_strcmp:nn + \__witharrows_strcmp:nn { \str_lower_case:n { ##1 } } { \str_lower_case:n { ##2 } } } @@ -72,7 +72,7 @@ \sort_return_same: } } -\cs_new_protected:Npn \@@_convert_to_str_seq:N #1 +\cs_new_protected:Npn \__witharrows_convert_to_str_seq:N #1 { \seq_clear:N \l_tmpa_seq \seq_map_inline:Nn #1 @@ -81,12 +81,12 @@ } \seq_set_eq:NN #1 \l_tmpa_seq } -\cs_new_protected:Npn \@@_set_seq_of_str_from_clist:Nn #1 #2 +\cs_new_protected:Npn \__witharrows_set_seq_of_str_from_clist:Nn #1 #2 { \seq_set_from_clist:Nn #1 { #2 } - \@@_convert_to_str_seq:N #1 + \__witharrows_convert_to_str_seq:N #1 } -\cs_new_protected:Npn \@@_save:N #1 +\cs_new_protected:Npn \__witharrows_save:N #1 { \seq_set_split:Nxx \l_tmpa_seq { \char_generate:nn { `_ } { 12 } } @@ -102,7 +102,7 @@ \use:c { \l_tmpa_str _gset_eq:cN } { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ } #1 } -\cs_new_protected:Npn \@@_restore:N #1 +\cs_new_protected:Npn \__witharrows_restore:N #1 { \seq_set_split:Nxx \l_tmpa_seq { \char_generate:nn { `_ } { 12 } } @@ -114,21 +114,21 @@ } \tikzset { - @@_node_style / .style = + __witharrows_node_style / .style = { - above = \l_@@_ystart_dim , + above = \l__witharrows_ystart_dim , inner~sep = \c_zero_dim , minimum~width = \c_zero_dim , - minimum~height = \l_@@_ygap_dim + minimum~height = \l__witharrows_ygap_dim } } \tikzset { - @@_standard / .style = + __witharrows_standard / .style = { remember~picture , overlay , - name~prefix = wa - \l_@@_prefix_str - + name~prefix = wa - \l__witharrows_prefix_str - } } \tikzset @@ -152,163 +152,144 @@ \openup \jot \cs_set_eq:NN \spread@equation \prg_do_nothing: } -\tl_new:N \l_@@_left_brace_tl -\tl_set_eq:NN \l_@@_left_brace_tl \c_novalue_tl -\bool_new:N \l_@@_in_WithArrows_bool -\bool_new:N \l_@@_in_DispWithArrows_bool -\bool_new:N \l_@@_in_code_after_bool -\seq_new:N \g_@@_position_in_the_tree_seq -\seq_gput_right:Nn \g_@@_position_in_the_tree_seq 1 -\int_new:N \g_@@_last_env_int -\int_new:N \l_@@_pos_env_int -\int_new:N \l_@@_pos_arrow_int -\int_set:Nn \l_@@_pos_arrow_int 3 -\seq_new:N \g_@@_arrow_int_seq -\int_new:N \g_@@_arrow_int -\seq_new:N \g_@@_line_int_seq -\int_new:N \g_@@_line_int -\seq_new:N \g_@@_col_int_seq -\int_new:N \g_@@_col_int -\seq_new:N \g_@@_static_col_int_seq -\int_new:N \g_@@_static_col_int -\str_new:N \l_@@_command_name_str -\str_set:Nn \l_@@_command_name_str { Arrow } -\str_new:N \l_@@_string_Arrow_for_msg_str -\str_set:Nx \l_@@_string_Arrow_for_msg_str { \token_to_str:N \Arrow } -\seq_new:N \g_@@_names_seq -\bool_new:N \l_@@_in_first_columns_bool -\bool_new:N \l_@@_new_group_bool -\bool_new:N \l_@@_initial_r_bool -\bool_new:N \l_@@_final_r_bool -\tl_new:N \l_@@_initial_tl -\tl_new:N \l_@@_final_tl -\int_new:N \l_@@_nb_cols_int -\str_new:N \l_@@_format_str -\cs_new_protected:Npn \@@_eval_if_allowed:n #1 - { - \str_if_empty:NTF \l_@@_previous_key_str +\tl_new:N \l__witharrows_left_brace_tl +\tl_set_eq:NN \l__witharrows_left_brace_tl \c_novalue_tl +\bool_new:N \l__witharrows_in_WithArrows_bool +\bool_new:N \l__witharrows_in_DispWithArrows_bool +\bool_new:N \l__witharrows_in_code_after_bool +\seq_new:N \g__witharrows_position_in_the_tree_seq +\seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1 +\int_new:N \g__witharrows_last_env_int +\int_new:N \l__witharrows_pos_env_int +\int_new:N \l__witharrows_pos_arrow_int +\int_set:Nn \l__witharrows_pos_arrow_int 3 +\seq_new:N \g__witharrows_arrow_int_seq +\int_new:N \g__witharrows_arrow_int +\seq_new:N \g__witharrows_line_int_seq +\int_new:N \g__witharrows_line_int +\seq_new:N \g__witharrows_col_int_seq +\int_new:N \g__witharrows_col_int +\seq_new:N \g__witharrows_static_col_int_seq +\int_new:N \g__witharrows_static_col_int +\str_new:N \l__witharrows_command_name_str +\str_set:Nn \l__witharrows_command_name_str { Arrow } +\str_new:N \l__witharrows_string_Arrow_for_msg_str +\str_set:Nx \l__witharrows_string_Arrow_for_msg_str { \token_to_str:N \Arrow } +\seq_new:N \g__witharrows_names_seq +\bool_new:N \l__witharrows_in_first_columns_bool +\bool_new:N \l__witharrows_new_group_bool +\bool_new:N \l__witharrows_initial_r_bool +\bool_new:N \l__witharrows_final_r_bool +\tl_new:N \l__witharrows_initial_tl +\tl_new:N \l__witharrows_final_tl +\int_new:N \l__witharrows_nb_cols_int +\str_new:N \l__witharrows_format_str +\dim_new:N \l__witharrows_arrow_width_dim +\dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim +\dim_new:N \l__witharrows_up_and_down_radius_dim +\dim_set:Nn \l__witharrows_up_and_down_radius_dim { 4 pt } +\cs_new_protected:Npn \__witharrows_eval_if_allowed:n #1 + { + \str_if_empty:NTF \l__witharrows_previous_key_str { - \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl + \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl #1 } - { \@@_error:n { Incompatible~options } } + { \__witharrows_error:n { Incompatible~options } } } -\cs_new_protected:Npn \@@_fix_pos_option:n #1 - { \@@_eval_if_allowed:n { \int_set:Nn \l_@@_pos_arrow_int { #1 } } } +\cs_new_protected:Npn \__witharrows_fix_pos_option:n #1 + { \__witharrows_eval_if_allowed:n { \int_set:Nn \l__witharrows_pos_arrow_int { #1 } } } \keys_define:nn { WithArrows / Global } { - max-length-of-arrow .dim_set:N = \l_@@_max_length_of_arrow_dim , + max-length-of-arrow .dim_set:N = \l__witharrows_max_length_of_arrow_dim , max-length-of-arrow .value_required:n = true , max-length-of-arrow .initial:n = 2 cm , - ygap .dim_set:N = \l_@@_ygap_dim , - ygap .value_required:n = true , + ygap .dim_set:N = \l__witharrows_ygap_dim , ygap .initial:n = 0.4 ex , - ystart .dim_set:N = \l_@@_ystart_dim , - ystart .value_required:n = true , + ystart .dim_set:N = \l__witharrows_ystart_dim , + ystart .initial:n = 0.4 ex , more-columns .code:n = - \@@_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } , - more-columns .value_forbidden:n = true, + \__witharrows_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } , command-name .code:n = - \str_set:Nn \l_@@_command_name_str { #1 } - \str_set:Nx \l_@@_string_Arrow_for_msg_str + \str_set:Nn \l__witharrows_command_name_str { #1 } + \str_set:Nx \l__witharrows_string_Arrow_for_msg_str { \c_backslash_str Arrow~alias~\c_backslash_str #1 } , - command-name .value_required:n = true , - tikz-code .tl_set:N = \l_@@_tikz_code_tl, + tikz-code .tl_set:N = \l__witharrows_tikz_code_tl, tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; , - tikz-code .value_required:n = true , TikzCode .meta:n = { tikz-code = #1 } , - displaystyle .bool_set:N = \l_@@_displaystyle_bool , + displaystyle .bool_set:N = \l__witharrows_displaystyle_bool , displaystyle .default:n = true , show-nodes .code:n = - \tikzset { @@_node_style / .append~style = { draw , red } } , - show-nodes .value_forbidden:n = true, - show-node-names .bool_set:N = \l_@@_show_node_names_bool , + \tikzset { __witharrows_node_style / .append~style = { draw , red } } , + show-node-names .bool_set:N = \l__witharrows_show_node_names_bool , show-node-names .default:n = true , group .code:n = - \str_if_empty:NTF \l_@@_previous_key_str + \str_if_empty:NTF \l__witharrows_previous_key_str { - \str_set:Nn \l_@@_previous_key_str { group } - \seq_remove_all:Nn \l_@@_options_Arrow_seq { xoffset } - \int_set:Nn \l_@@_pos_arrow_int 7 + \str_set:Nn \l__witharrows_previous_key_str { group } + \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset } + \int_set:Nn \l__witharrows_pos_arrow_int 7 } - { \@@_error:n { Incompatible~options } } , - group .value_forbidden:n = true , + { \__witharrows_error:n { Incompatible~options } } , groups .code:n = - \str_if_empty:NTF \l_@@_previous_key_str + \str_if_empty:NTF \l__witharrows_previous_key_str { - \str_set:Nn \l_@@_previous_key_str { groups } - \seq_if_in:NnF \l_@@_options_Arrow_seq { new-group } - { \seq_put_right:Nn \l_@@_options_Arrow_seq { new-group } } - \seq_remove_all:Nn \l_@@_options_Arrow_seq { xoffset } - \int_set:Nn \l_@@_pos_arrow_int 6 + \str_set:Nn \l__witharrows_previous_key_str { groups } + \seq_if_in:NnF \l__witharrows_options_Arrow_seq { new-group } + { \seq_put_right:Nn \l__witharrows_options_Arrow_seq { new-group } } + \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset } + \int_set:Nn \l__witharrows_pos_arrow_int 6 } - { \@@_error:n { Incompatible~options } } , - groups .value_forbidden:n = true , + { \__witharrows_error:n { Incompatible~options } } , 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 = \@@_fix_pos_option:n 3 , - ll .value_forbidden:n = true , - ll .code:n = \@@_fix_pos_option:n 1 , - rl .value_forbidden:n = true , - rl .code:n = \@@_fix_pos_option:n 2 , - lr .value_forbidden:n = true , - lr .code:n = \@@_fix_pos_option:n 0 , - i .value_forbidden:n = true , - i .code:n = \@@_fix_pos_option:n 5 , - xoffset .dim_set:N = \l_@@_xoffset_dim , - xoffset .value_required:n = true , + rr .code:n = \__witharrows_fix_pos_option:n 3 , + ll .code:n = \__witharrows_fix_pos_option:n 1 , + rl .code:n = \__witharrows_fix_pos_option:n 2 , + lr .code:n = \__witharrows_fix_pos_option:n 0 , + i .code:n = \__witharrows_fix_pos_option:n 5 , + xoffset .dim_set:N = \l__witharrows_xoffset_dim , xoffset .initial:n = 3 mm , jot .dim_set:N = \jot , - jot .value_required:n = true , - interline .skip_set:N = \l_@@_interline_skip , - interline .value_required:n = true , - start-adjust .dim_set:N = \l_@@_start_adjust_dim , - start-adjust .value_required:n = true , + interline .skip_set:N = \l__witharrows_interline_skip , + start-adjust .dim_set:N = \l__witharrows_start_adjust_dim , start-adjust .initial:n = 0.4 ex , - end-adjust .dim_set:N = \l_@@_end_adjust_dim , - end-adjust .value_required:n = true , + end-adjust .dim_set:N = \l__witharrows_end_adjust_dim , end-adjust .initial:n = 0.4 ex , adjust .meta:n = { start-adjust = #1 , end-adjust = #1 } , - adjust .value_required:n = true , + up-and-down .code:n = \keys_set:nn { WithArrows / up-and-down } { #1 } , no-arrows .code:n = - \cs_set_eq:NN \@@_draw_arrows:nn \use_none:nn - \cs_set_eq:NN \@@_draw_arrow:nnn \use_none:nnn , - no-arrows .value_forbidden:n = true , + \cs_set_eq:NN \__witharrows_draw_arrows:nn \use_none:nn + \cs_set_eq:NN \__witharrows_draw_arrow:nnn \use_none:nnn , } \keys_define:nn { WithArrows / WithArrowsSpecific } { - t .code:n = \int_set:Nn \l_@@_pos_env_int O , - t .value_forbidden:n = true , - c .code:n = \int_set:Nn \l_@@_pos_env_int 1 , - c .value_forbidden:n = true , - b .code:n = \int_set:Nn \l_@@_pos_env_int 2 , - b .value_forbidden:n = true + t .code:n = \int_set:Nn \l__witharrows_pos_env_int O , + c .code:n = \int_set:Nn \l__witharrows_pos_env_int 1 , + b .code:n = \int_set:Nn \l__witharrows_pos_env_int 2 , } -\clist_new:N \c_@@_extensible_delimiters_clist -\clist_set:Nn \c_@@_extensible_delimiters_clist +\clist_new:N \c__witharrows_extensible_delimiters_clist +\clist_set:Nn \c__witharrows_extensible_delimiters_clist { ., \{, (, [, \lbrace, \lbrack, \lgroup, \langle, \lmoustache, \lceil, \lfloor } \keys_define:nn { WithArrows / DispWithArrowsSpecific } { - fleqn .bool_set:N = \l_@@_fleqn_bool , + fleqn .bool_set:N = \l__witharrows_fleqn_bool , fleqn .default:n = true , - mathindent .dim_set:N = \l_@@_mathindent_dim , - mathindent .value_required:n = true , + mathindent .dim_set:N = \l__witharrows_mathindent_dim , mathindent .initial:n = 25 pt , - wrap-lines .bool_set:N = \l_@@_wrap_lines_bool , + wrap-lines .bool_set:N = \l__witharrows_wrap_lines_bool , wrap-lines .default:n = true , replace-left-brace-by .code:n = { \tl_set:Nx \l_tmpa_tl { \tl_head:n { #1 } } \clist_if_in:NVTF - \c_@@_extensible_delimiters_clist + \c__witharrows_extensible_delimiters_clist \l_tmpa_tl - { \tl_set:Nn \l_@@_replace_left_brace_by_tl { #1 } } - { \@@_error:n { Bad~value~for~replace~brace~by } } + { \tl_set:Nn \l__witharrows_replace_left_brace_by_tl { #1 } } + { \__witharrows_error:n { Bad~value~for~replace~brace~by } } } , replace-left-brace-by .initial:n = \lbrace , } @@ -316,25 +297,25 @@ { name .code:n = \str_set:Nn \l_tmpa_str { #1 } - \seq_if_in:NVTF \g_@@_names_seq \l_tmpa_str - { \@@_error:n { Duplicate~name } } - { \seq_gput_left:NV \g_@@_names_seq \l_tmpa_str } - \str_set_eq:NN \l_@@_name_str \l_tmpa_str , - name .value_required:n = true , - code-before .code:n = \tl_put_right:Nn \l_@@_code_before_tl { #1 } , - code-before .value_required:n = true, + \seq_if_in:NVTF \g__witharrows_names_seq \l_tmpa_str + { \__witharrows_error:n { Duplicate~name } } + { \seq_gput_left:NV \g__witharrows_names_seq \l_tmpa_str } + \str_set_eq:NN \l__witharrows_name_str \l_tmpa_str , + code-before .code:n = \tl_put_right:Nn \l__witharrows_code_before_tl { #1 } , CodeBefore .meta:n = { code-before = #1 } , - code-after .code:n = \tl_put_right:Nn \l_@@_code_after_tl { #1 } , - code-after .value_required:n = true , - CodeAfter .meta:n = { code-after = #1 } , + code-after .code:n = \tl_put_right:Nn \l__witharrows_code_after_tl { #1 } , + CodeAfter .meta:n = { code-after = #1 } , format .code:n = \tl_if_empty:nTF { #1 } - { \@@_error:n { Invalid~option~format } } + { \__witharrows_error:n { Invalid~option~format } } { \regex_match:nnTF { \A[rcl]*\Z } { #1 } - { \tl_set:Nn \l_@@_format_str { #1 } } - { \@@_error:n { Invalid~option~format } } + { \tl_set:Nn \l__witharrows_format_str { #1 } } + { \__witharrows_error:n { Invalid~option~format } } } , + code-before .value_required:n = true, + code-after .value_required:n = true , + name .value_required:n = true , format .value_required:n = true , } \keys_define:nn { WithArrows } @@ -345,95 +326,103 @@ WithArrows / WithArrowsSpecific , WithArrows / Env } , + WithArrows / up-and-down .inherit:n = WithArrows / up-and-down , DispWithArrows .inherit:n = { WithArrows / DispWithArrowsSpecific , WithArrows / Global , WithArrows / Env , } , + DispWithArrows / up-and-down .inherit:n = WithArrows / up-and-down , WithArrowsOptions .inherit:n = { WithArrows / Global , WithArrows / WithArrowsSpecific , - WithArrows / DispWithArrowsSpecific - } + WithArrows / DispWithArrowsSpecific , + } , + WithArrowsOptions / up-and-down .inherit:n = WithArrows / up-and-down } -\seq_new:N \l_@@_options_WithArrows_seq -\@@_set_seq_of_str_from_clist:Nn \l_@@_options_WithArrows_seq +\seq_new:N \l__witharrows_options_WithArrows_seq +\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrows_seq { adjust, b, c, code-after, code-before, command-name, displaystyle, end-adjust, format, group, groups, i, interline, jot, ll, lr, max-length-of-arrow, more-columns, name, - no-arrows, rl, rr, + no-arrows, rl, rr, up-and-down, show-node-names, show-nodes, start-adjust, t, tikz, tikz-code, xoffset, ygap, ystart } -\@@_convert_to_str_seq:N \l_@@_options_WithArrows_seq +\__witharrows_convert_to_str_seq:N \l__witharrows_options_WithArrows_seq \keys_define:nn { WithArrows / WithArrows } { unknown .code:n = - \@@_sort_seq:N \l_@@_options_WithArrows_seq - \@@_error:n { Unknown~option~WithArrows } + \__witharrows_sort_seq:N \l__witharrows_options_WithArrows_seq + \__witharrows_error:n { Unknown~option~WithArrows } } \keys_define:nn { WithArrows / DispWithArrows } { - left-brace .tl_set:N = \l_@@_left_brace_tl , + left-brace .tl_set:N = \l__witharrows_left_brace_tl , unknown .code:n = - \@@_sort_seq:N \l_@@_options_DispWithArrows_seq - \@@_error:n { Unknown~option~DispWithArrows } + \__witharrows_sort_seq:N \l__witharrows_options_DispWithArrows_seq + \__witharrows_error:n { Unknown~option~DispWithArrows } , } -\seq_new:N \l_@@_options_DispWithArrows_seq -\@@_set_seq_of_str_from_clist:Nn \l_@@_options_DispWithArrows_seq +\seq_new:N \l__witharrows_options_DispWithArrows_seq +\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_DispWithArrows_seq { code-after, code-before, command-name, tikz-code, adjust, displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot, left-brace, ll, lr, max-length-of-arrow, mathindent, name, no-arrows, - replace-left-brace-by, rl, rr, show-node-names, show-nodes, start-adjust, - tikz, wrap-lines, xoffset, ygap, ystart, + up-and-down, replace-left-brace-by, rl, rr, show-node-names, + show-nodes, start-adjust, tikz, wrap-lines, xoffset, ygap, ystart, } \keys_define:nn { WithArrows / WithArrowsOptions } { allow-duplicate-names .code:n = - \@@_msg_redirect_name:nn { Duplicate~name } { none } , + \__witharrows_msg_redirect_name:nn { Duplicate~name } { none } , allow-duplicate-names .value_forbidden:n = true , unknown .code:n = - \@@_sort_seq:N \l_@@_options_WithArrowsOptions_seq - \@@_error:n { Unknown~option~WithArrowsOptions } + \__witharrows_sort_seq:N \l__witharrows_options_WithArrowsOptions_seq + \__witharrows_error:n { Unknown~option~WithArrowsOptions } } -\seq_new:N \l_@@_options_WithArrowsOptions_seq -\@@_set_seq_of_str_from_clist:Nn \l_@@_options_WithArrowsOptions_seq +\seq_new:N \l__witharrows_options_WithArrowsOptions_seq +\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrowsOptions_seq { allow-duplicate-names, b, c, command-name, more-columns, tikz-code, adjust, displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr, - mathindent, max-length-of-arrow, no-arrows, rl, rr, show-node-names, - show-nodes, start-adjust, t, tikz, wrap-lines, xoffset, ygap, ystart, + mathindent, max-length-of-arrow, no-arrows, up-and-down, rl, rr, + show-node-names, show-nodes, start-adjust, t, tikz, wrap-lines, xoffset, + ygap, ystart, + } +\cs_new_protected:Npn \__witharrows_set_independent: + { + \str_if_eq:VnF \l_keys_value_tl { NoValue } + { \__witharrows_error:n { Value~for~a~key } } + \__witharrows_set_independent_bis: } -\cs_new_protected:Npn \@@_set_independent: +\cs_new_protected:Npn \__witharrows_set_independent_bis: { - \str_if_empty:NTF \l_@@_previous_key_str + \str_if_empty:NTF \l__witharrows_previous_key_str { - \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl - \str_set:Nn \l_@@_status_arrow_str { independent } - \str_if_eq:VnF \l_keys_value_tl { NoValue } - { \@@_error:n { Value~for~a~key } } + \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl + \str_set:Nn \l__witharrows_status_arrow_str { independent } } - { \@@_error:n { Incompatible~options~in~Arrow } } + { \__witharrows_error:n { Incompatible~options~in~Arrow } } } \keys_define:nn { WithArrows / Arrow / FirstPass } { jump .code:n = \int_compare:nTF { #1 > 0 } - { \int_set:Nn \l_@@_jump_int { #1 } } - { \@@_error:n { Negative~jump } } , + { \int_set:Nn \l__witharrows_jump_int { #1 } } + { \__witharrows_error:n { Negative~jump } } , jump .value_required:n = true, - rr .code:n = \@@_set_independent: , - ll .code:n = \@@_set_independent: , - rl .code:n = \@@_set_independent: , - lr .code:n = \@@_set_independent: , - i .code:n = \@@_set_independent: , + rr .code:n = \__witharrows_set_independent: , + ll .code:n = \__witharrows_set_independent: , + rl .code:n = \__witharrows_set_independent: , + lr .code:n = \__witharrows_set_independent: , + i .code:n = \__witharrows_set_independent: , rr .default:n = NoValue , ll .default:n = NoValue , rl .default:n = NoValue , @@ -441,9 +430,9 @@ i .default:n = NoValue , new-group .value_forbidden:n = true, new-group .code:n = - \int_compare:nTF { \l_@@_pos_arrow_int = 6 } - { \str_set:Nn \l_@@_status_arrow_str { new-group } } - { \@@_error:n { new-group~without~groups } } , + \int_compare:nTF { \l__witharrows_pos_arrow_int = 6 } + { \str_set:Nn \l__witharrows_status_arrow_str { new-group } } + { \__witharrows_error:n { new-group~without~groups } } , tikz-code .code:n = \prg_do_nothing: , tikz-code .value_required:n = true , tikz .code:n = \prg_do_nothing: , @@ -456,208 +445,208 @@ adjust .value_required:n = true , xoffset .code:n = , unknown .code:n = - \@@_sort_seq:N \l_@@_options_Arrow_seq - \seq_if_in:NVTF \l_@@_options_WithArrows_seq \l_keys_key_tl + \__witharrows_sort_seq:N \l__witharrows_options_Arrow_seq + \seq_if_in:NVTF \l__witharrows_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 } - \@@_error:n { Unknown~option~in~Arrow } + \__witharrows_error:n { Unknown~option~in~Arrow } } -\seq_new:N \l_@@_options_Arrow_seq -\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_seq +\seq_new:N \l__witharrows_options_Arrow_seq +\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_seq { adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, tikz-code, xoffset } -\cs_new_protected:Npn \@@_fix_pos_arrow:n #1 +\cs_new_protected:Npn \__witharrows_fix_pos_arrow:n #1 { - \str_if_empty:NT \l_@@_previous_key_str + \str_if_empty:NT \l__witharrows_previous_key_str { - \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl - \int_set:Nn \l_@@_pos_arrow_int { #1 } + \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl + \int_set:Nn \l__witharrows_pos_arrow_int { #1 } } } \keys_define:nn {WithArrows / Arrow / SecondPass } { - tikz-code .tl_set:N = \l_@@_tikz_code_tl , + tikz-code .tl_set:N = \l__witharrows_tikz_code_tl , tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; , tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } , tikz .initial:n = \c_empty_tl , - rr .code:n = \@@_fix_pos_arrow:n 3 , - ll .code:n = \@@_fix_pos_arrow:n 1 , - rl .code:n = \@@_fix_pos_arrow:n 2 , - lr .code:n = \@@_fix_pos_arrow:n 0 , - i .code:n = \@@_fix_pos_arrow:n 5 , + rr .code:n = \__witharrows_fix_pos_arrow:n 3 , + ll .code:n = \__witharrows_fix_pos_arrow:n 1 , + rl .code:n = \__witharrows_fix_pos_arrow:n 2 , + lr .code:n = \__witharrows_fix_pos_arrow:n 0 , + i .code:n = \__witharrows_fix_pos_arrow:n 5 , xoffset .code:n = \bool_if:nTF { - \int_compare_p:nNn \g_@@_arrow_int > 1 + \int_compare_p:nNn \g__witharrows_arrow_int > 1 && - \int_compare_p:nNn \l_@@_pos_arrow_int > 5 + \int_compare_p:nNn \l__witharrows_pos_arrow_int > 5 && - ! \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } + ! \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } } - { \@@_error:n { Option~xoffset~forbidden } } - { \dim_set:Nn \l_@@_xoffset_dim { #1 } } , + { \__witharrows_error:n { Option~xoffset~forbidden } } + { \dim_set:Nn \l__witharrows_xoffset_dim { #1 } } , xoffset .value_required:n = true , - start-adjust .dim_set:N = \l_@@_start_adjust_dim, - end-adjust .dim_set:N = \l_@@_end_adjust_dim, + start-adjust .dim_set:N = \l__witharrows_start_adjust_dim, + end-adjust .dim_set:N = \l__witharrows_end_adjust_dim, adjust .code:n = - \dim_set:Nn \l_@@_start_adjust_dim { #1 } - \dim_set:Nn \l_@@_end_adjust_dim { #1 } , + \dim_set:Nn \l__witharrows_start_adjust_dim { #1 } + \dim_set:Nn \l__witharrows_end_adjust_dim { #1 } , } \cs_set_protected:Npn \WithArrowsOptions #1 { - \str_clear_new:N \l_@@_previous_key_str + \str_clear_new:N \l__witharrows_previous_key_str \keys_set:nn { WithArrows / WithArrowsOptions } { #1 } } -\cs_new_protected:Npn \@@_Arrow +\cs_new_protected:Npn \__witharrows_Arrow { \peek_meaning:NTF [ - { \@@_Arrow_i } - { \@@_Arrow_i [ ] } + { \__witharrows_Arrow_i } + { \__witharrows_Arrow_i [ ] } } -\cs_new_protected:Npn \@@_Arrow_i [ #1 ] #2 +\cs_new_protected:Npn \__witharrows_Arrow_i [ #1 ] #2 { \peek_meaning:NTF [ - { \@@_Arrow_ii [ #1 ] { #2 } } - { \@@_Arrow_ii [ #1 ] { #2 } [ ] } + { \__witharrows_Arrow_ii [ #1 ] { #2 } } + { \__witharrows_Arrow_ii [ #1 ] { #2 } [ ] } } -\cs_new_protected:Npn \@@_Arrow_ii [ #1 ] #2 [ #3 ] +\cs_new_protected:Npn \__witharrows_Arrow_ii [ #1 ] #2 [ #3 ] { - \int_gincr:N \g_@@_arrow_int - \str_clear_new:N \l_@@_previous_key_str + \int_gincr:N \g__witharrows_arrow_int + \str_clear_new:N \l__witharrows_previous_key_str \keys_set:nn { WithArrows / Arrow / FirstPass } { #1 , #3 } - \prop_put:NnV \l_tmpa_prop { initial } \g_@@_line_int - \int_set:Nn \l_tmpa_int { \g_@@_line_int + \l_@@_jump_int } + \prop_put:NnV \l_tmpa_prop { initial } \g__witharrows_line_int + \int_set:Nn \l_tmpa_int { \g__witharrows_line_int + \l__witharrows_jump_int } \prop_put:NnV \l_tmpa_prop { final } \l_tmpa_int - \prop_put:NnV \l_tmpa_prop { status } \l_@@_status_arrow_str + \prop_put:NnV \l_tmpa_prop { status } \l__witharrows_status_arrow_str \prop_put:Nnn \l_tmpa_prop { options } { #1 , #3 } \prop_put:Nnn \l_tmpa_prop { label } { #2 } \prop_put:Nnx \l_tmpa_prop { input-line } \msg_line_number: \prop_gclear_new:c - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \g_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop } \prop_gset_eq:cN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \g_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop } \l_tmpa_prop } -\cs_new_protected:Npn \@@_Arrow_first_columns: - { \@@_error:n { Arrow~not~in~last~column } \@@_Arrow } -\cs_new_protected:Npn \@@_pre_halign:n #1 +\cs_new_protected:Npn \__witharrows_Arrow_first_columns: + { \__witharrows_error:n { Arrow~not~in~last~column } \__witharrows_Arrow } +\cs_new_protected:Npn \__witharrows_pre_halign:n #1 { \cs_if_exist:NT \tikz@library@external@loaded { \tikzset { external / export = false } } - \str_clear_new:N \l_@@_name_str - \str_clear_new:N \l_@@_status_arrow_str - \dim_zero_new:N \l_@@_x_dim - \str_clear_new:N \l_@@_input_line_str - \seq_gput_right:NV \g_@@_arrow_int_seq \g_@@_arrow_int - \int_gzero:N \g_@@_arrow_int - \seq_gput_right:NV \g_@@_line_int_seq \g_@@_line_int - \int_gzero:N \g_@@_line_int - \seq_gput_right:NV \g_@@_col_int_seq \g_@@_col_int - \int_gzero:N \g_@@_col_int - \seq_gput_right:NV \g_@@_static_col_int_seq \g_@@_static_col_int - \int_gzero:N \g_@@_static_col_int - \seq_gput_right:Nn \g_@@_position_in_the_tree_seq 1 - \seq_set_eq:NN \l_tmpa_seq \g_@@_position_in_the_tree_seq + \str_clear_new:N \l__witharrows_name_str + \str_clear_new:N \l__witharrows_status_arrow_str + \dim_zero_new:N \l__witharrows_x_dim + \str_clear_new:N \l__witharrows_input_line_str + \seq_gput_right:NV \g__witharrows_arrow_int_seq \g__witharrows_arrow_int + \int_gzero:N \g__witharrows_arrow_int + \seq_gput_right:NV \g__witharrows_line_int_seq \g__witharrows_line_int + \int_gzero:N \g__witharrows_line_int + \seq_gput_right:NV \g__witharrows_col_int_seq \g__witharrows_col_int + \int_gzero:N \g__witharrows_col_int + \seq_gput_right:NV \g__witharrows_static_col_int_seq \g__witharrows_static_col_int + \int_gzero:N \g__witharrows_static_col_int + \seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1 + \seq_set_eq:NN \l_tmpa_seq \g__witharrows_position_in_the_tree_seq \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl - \str_clear_new:N \l_@@_prefix_str - \str_set:Nx \l_@@_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - } - \cs_set_eq:NN \\ \@@_cr: + \str_clear_new:N \l__witharrows_prefix_str + \str_set:Nx \l__witharrows_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - } + \cs_set_eq:NN \\ \__witharrows_cr: \dim_zero:N \mathsurround - \int_zero_new:N \l_@@_initial_int - \int_zero_new:N \l_@@_final_int - \int_zero_new:N \l_@@_arrow_int - \int_zero_new:N \l_@@_pos_of_arrow_int - \int_zero_new:N \l_@@_jump_int - \int_set:Nn \l_@@_jump_int \c_one_int - \str_set:Nn \l_@@_format_str { rl } - \skip_zero:N \l_@@_interline_skip - \tl_clear_new:N \l_@@_code_before_tl - \tl_clear_new:N \l_@@_code_after_tl - \str_clear_new:N \l_@@_previous_key_str - \bool_if:NT \l_@@_in_WithArrows_bool + \int_zero_new:N \l__witharrows_initial_int + \int_zero_new:N \l__witharrows_final_int + \int_zero_new:N \l__witharrows_arrow_int + \int_zero_new:N \l__witharrows_pos_of_arrow_int + \int_zero_new:N \l__witharrows_jump_int + \int_set:Nn \l__witharrows_jump_int \c_one_int + \str_set:Nn \l__witharrows_format_str { rl } + \skip_zero:N \l__witharrows_interline_skip + \tl_clear_new:N \l__witharrows_code_before_tl + \tl_clear_new:N \l__witharrows_code_after_tl + \str_clear_new:N \l__witharrows_previous_key_str + \bool_if:NT \l__witharrows_in_WithArrows_bool { \keys_set:nn { WithArrows / WithArrows } { #1 } } - \bool_if:NT \l_@@_in_DispWithArrows_bool + \bool_if:NT \l__witharrows_in_DispWithArrows_bool { \keys_set:nn { WithArrows / DispWithArrows } { #1 } } - \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_first_columns: - \int_set:Nn \l_@@_nb_cols_int { \str_count:N \l_@@_format_str } - \int_gset_eq:NN \g_@@_col_int \l_@@_nb_cols_int - \seq_clear_new:N \l_@@_format_seq - \seq_set_split:NnV \l_@@_format_seq { } \l_@@_format_str - \l_@@_code_before_tl + \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_first_columns: + \int_set:Nn \l__witharrows_nb_cols_int { \str_count:N \l__witharrows_format_str } + \int_gset_eq:NN \g__witharrows_col_int \l__witharrows_nb_cols_int + \seq_clear_new:N \l__witharrows_format_seq + \seq_set_split:NnV \l__witharrows_format_seq { } \l__witharrows_format_str + \l__witharrows_code_before_tl \spread@equation } -\cs_new_protected:Npn \@@_construct_halign: +\cs_new_protected:Npn \__witharrows_construct_halign: { - \seq_pop_right:NNTF \l_@@_format_seq \l_@@_type_col_str + \seq_pop_right:NNTF \l__witharrows_format_seq \l__witharrows_type_col_str { \use:x { - \int_gdecr:N \g_@@_col_int - \@@_construct_halign: - \int_compare:nNnT \g_@@_col_int = \l_@@_nb_cols_int + \int_gdecr:N \g__witharrows_col_int + \__witharrows_construct_halign: + \int_compare:nNnT \g__witharrows_col_int = \l__witharrows_nb_cols_int { - \cs_set_eq:cN { \l_@@_command_name_str } \@@_Arrow + \cs_set_eq:cN { \l__witharrows_command_name_str } \__witharrows_Arrow } - \str_if_eq:VnT \l_@@_type_col_str { c } \hfil - \str_if_eq:VnT \l_@@_type_col_str { r } \hfill - \int_gincr:N \g_@@_col_int - \int_gset:Nn \g_@@_static_col_int { \int_use:N \g_@@_col_int } + \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil + \str_if_eq:VnT \l__witharrows_type_col_str { r } \hfill + \int_gincr:N \g__witharrows_col_int + \int_gset:Nn \g__witharrows_static_col_int { \int_use:N \g__witharrows_col_int } \c_math_toggle_token { { } - \bool_if:NT \l_@@_displaystyle_bool \displaystyle + \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle #### } \c_math_toggle_token - \int_compare:nNnTF \g_@@_col_int = \l_@@_nb_cols_int - { \@@_construct_nodes: } + \int_compare:nNnTF \g__witharrows_col_int = \l__witharrows_nb_cols_int + { \__witharrows_construct_nodes: } { - \str_if_eq:VnT \l_@@_type_col_str { l } \hfil - \str_if_eq:VnT \l_@@_type_col_str { c } \hfil - \bool_if:NT \l_@@_in_DispWithArrows_bool { \tabskip = \c_zero_skip } + \str_if_eq:VnT \l__witharrows_type_col_str { l } \hfil + \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil + \bool_if:NT \l__witharrows_in_DispWithArrows_bool { \tabskip = \c_zero_skip } & } } } { - \bool_if:NTF \l_@@_in_WithArrows_bool + \bool_if:NTF \l__witharrows_in_WithArrows_bool { \ialign \bgroup } { - \halign to \l_@@_linewidth_dim + \halign to \l__witharrows_linewidth_dim \bgroup - \bool_if:NT \l_@@_fleqn_bool - { \skip_horizontal:N \l_@@_mathindent_dim } + \bool_if:NT \l__witharrows_fleqn_bool + { \skip_horizontal:N \l__witharrows_mathindent_dim } } - \int_gincr:N \g_@@_line_int - \int_gzero:N \g_@@_col_int - \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl + \int_gincr:N \g__witharrows_line_int + \int_gzero:N \g__witharrows_col_int + \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl { \skip_horizontal:n - { \box_wd:N \l_@@_left_brace_box + \l_@@_delim_wd_dim } + { \box_wd:N \l__witharrows_left_brace_box + \l__witharrows_delim_wd_dim } } \strut } } -\cs_new_protected:Npn \@@_construct_nodes: +\cs_new_protected:Npn \__witharrows_construct_nodes: { \tikz [ remember~picture , overlay ] \node [ node~contents = { } , - @@_node_style , - name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - l , + __witharrows_node_style , + name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - l , alias = { - \str_if_empty:NF \l_@@_name_str - { \l_@@_name_str - \int_use:N \g_@@_line_int - l } + \str_if_empty:NF \l__witharrows_name_str + { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - l } } ] ; @@ -666,19 +655,19 @@ \node [ node~contents = { } , - @@_node_style , - name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r , + __witharrows_node_style , + name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r , alias = { - \str_if_empty:NF \l_@@_name_str - { \l_@@_name_str - \int_use:N \g_@@_line_int - r } + \str_if_empty:NF \l__witharrows_name_str + { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - r } } ] ; - \bool_if:NT \l_@@_show_node_names_bool + \bool_if:NT \l__witharrows_show_node_names_bool { \hbox_overlap_right:n - { \small wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r } + { \small wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r } } } \cs_new_protected:Npn \WithArrows @@ -690,21 +679,21 @@ } \cs_new_protected:Npn \WithArrows_i [ #1 ] { - \bool_set_true:N \l_@@_in_WithArrows_bool - \bool_set_false:N \l_@@_in_DispWithArrows_bool - \str_clear_new:N \l_@@_type_env_str - \str_set:Nn \l_@@_type_env_str { WithArrows } - \@@_pre_halign:n { #1 } + \bool_set_true:N \l__witharrows_in_WithArrows_bool + \bool_set_false:N \l__witharrows_in_DispWithArrows_bool + \str_clear_new:N \l__witharrows_type_env_str + \str_set:Nn \l__witharrows_type_env_str { WithArrows } + \__witharrows_pre_halign:n { #1 } \if_mode_math: \else: - \@@_error:n { WithArrows~outside~math~mode } + \__witharrows_error:n { WithArrows~outside~math~mode } \fi: - \int_case:nn \l_@@_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox } + \int_case:nn \l__witharrows_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox } \bgroup - \@@_construct_halign: + \__witharrows_construct_halign: && - \@@_error:n { Too~much~columns~in~WithArrows } + \__witharrows_error:n { Too~much~columns~in~WithArrows } \c_math_toggle_token - \bool_if:NT \l_@@_displaystyle_bool \displaystyle + \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle { ## } \c_math_toggle_token \cr @@ -714,73 +703,73 @@ \\ \egroup \egroup - \@@_post_halign: + \__witharrows_post_halign: \group_end: } -\cs_new_protected:Npn \@@_post_halign: +\cs_new_protected:Npn \__witharrows_post_halign: { - \cs_set:Npn \WithArrowsRightX { \g_@@_right_x_dim } + \cs_set:Npn \WithArrowsRightX { \g__witharrows_right_x_dim } \normalbaselines - \int_compare:nNnT \g_@@_arrow_int > 0 + \int_compare:nNnT \g__witharrows_arrow_int > 0 { - \int_compare:nNnT \g_@@_arrow_int = 1 + \int_compare:nNnT \g__witharrows_arrow_int = 1 { - \int_compare:nNnT \l_@@_pos_arrow_int > 5 - { \int_set:Nn \l_@@_pos_arrow_int 5 } + \int_compare:nNnT \l__witharrows_pos_arrow_int > 5 + { \int_set:Nn \l__witharrows_pos_arrow_int 5 } } - \@@_scan_arrows: + \__witharrows_scan_arrows: } \group_begin: - \tikzset { every~picture / .style = @@_standard } - \cs_set:Npn \WithArrowsNbLines { \int_use:N \g_@@_line_int } - \cs_set_eq:NN \MultiArrow \@@_MultiArrow:nn - \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_code_after - \bool_set_true:N \l_@@_in_code_after_bool - \l_@@_code_after_tl + \tikzset { every~picture / .style = __witharrows_standard } + \cs_set:Npn \WithArrowsNbLines { \int_use:N \g__witharrows_line_int } + \cs_set_eq:NN \MultiArrow \__witharrows_MultiArrow:nn + \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_code_after + \bool_set_true:N \l__witharrows_in_code_after_bool + \l__witharrows_code_after_tl \group_end: - \seq_gpop_right:NN \g_@@_position_in_the_tree_seq \l_tmpa_tl - \seq_gpop_right:NN \g_@@_position_in_the_tree_seq \l_tmpa_tl - \seq_gput_right:Nx \g_@@_position_in_the_tree_seq + \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl + \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl + \seq_gput_right:Nx \g__witharrows_position_in_the_tree_seq { \int_eval:n { \l_tmpa_tl + 1 } } - \int_compare:nNnT { \seq_count:N \g_@@_position_in_the_tree_seq } = 1 - { \int_gincr:N \g_@@_last_env_int } - \seq_gpop_right:NN \g_@@_arrow_int_seq \l_tmpa_tl - \int_gset:Nn \g_@@_arrow_int \l_tmpa_tl - \seq_gpop_right:NN \g_@@_line_int_seq \l_tmpa_tl - \int_gset:Nn \g_@@_line_int \l_tmpa_tl - \seq_gpop_right:NN \g_@@_col_int_seq \l_tmpa_tl - \int_gset:Nn \g_@@_col_int \l_tmpa_tl - \seq_gpop_right:NN \g_@@_static_col_int_seq \l_tmpa_tl - \int_gset:Nn \g_@@_static_col_int \l_tmpa_tl - } -\cs_new_protected:Npn \@@_cr: + \int_compare:nNnT { \seq_count:N \g__witharrows_position_in_the_tree_seq } = 1 + { \int_gincr:N \g__witharrows_last_env_int } + \seq_gpop_right:NN \g__witharrows_arrow_int_seq \l_tmpa_tl + \int_gset:Nn \g__witharrows_arrow_int \l_tmpa_tl + \seq_gpop_right:NN \g__witharrows_line_int_seq \l_tmpa_tl + \int_gset:Nn \g__witharrows_line_int \l_tmpa_tl + \seq_gpop_right:NN \g__witharrows_col_int_seq \l_tmpa_tl + \int_gset:Nn \g__witharrows_col_int \l_tmpa_tl + \seq_gpop_right:NN \g__witharrows_static_col_int_seq \l_tmpa_tl + \int_gset:Nn \g__witharrows_static_col_int \l_tmpa_tl + } +\cs_new_protected:Npn \__witharrows_cr: { \scan_stop: - \int_compare:nNnF \g_@@_col_int = \g_@@_static_col_int - { \@@_error:n { omit~probably~used } } - \prg_replicate:nn { \l_@@_nb_cols_int - \g_@@_static_col_int } { & { } } + \int_compare:nNnF \g__witharrows_col_int = \g__witharrows_static_col_int + { \__witharrows_error:n { omit~probably~used } } + \prg_replicate:nn { \l__witharrows_nb_cols_int - \g__witharrows_static_col_int } { & { } } \group_align_safe_begin: - \peek_meaning_remove:NTF * \@@_cr_i: \@@_cr_i: + \peek_meaning_remove:NTF * \__witharrows_cr_i: \__witharrows_cr_i: } -\cs_new_protected:Npn \@@_cr_i: - { \peek_meaning:NTF [ \@@_cr_ii: { \@@_cr_ii: [ \c_zero_dim ] } } -\cs_new_protected:Npn \@@_cr_ii: [ #1 ] +\cs_new_protected:Npn \__witharrows_cr_i: + { \peek_meaning:NTF [ \__witharrows_cr_ii: { \__witharrows_cr_ii: [ \c_zero_dim ] } } +\cs_new_protected:Npn \__witharrows_cr_ii: [ #1 ] { \group_align_safe_end: - \bool_if:NT \l_@@_in_DispWithArrows_bool + \bool_if:NT \l__witharrows_in_DispWithArrows_bool { & - \tikz [ @@_standard ] - \coordinate ( \int_use:N \g_@@_line_int - v ) ; + \tikz [ __witharrows_standard ] + \coordinate ( \int_use:N \g__witharrows_line_int - v ) ; } \dim_compare:nNnT { #1 } < \c_zero_dim - { \@@_error:n { option~of~cr~negative } } + { \__witharrows_error:n { option~of~cr~negative } } \cr \noalign { \dim_set:Nn \l_tmpa_dim { \dim_max:nn { #1 } \c_zero_dim } - \skip_vertical:n { \l_tmpa_dim + \l_@@_interline_skip } + \skip_vertical:n { \l_tmpa_dim + \l__witharrows_interline_skip } \scan_stop: } } @@ -799,39 +788,39 @@ } \cs_new_protected:Npn \DispWithArrows_ii < #1 > [ #2 ] { - \bool_set_true:N \l_@@_in_DispWithArrows_bool - \str_clear_new:N \l_@@_type_env_str - \str_set:Nn \l_@@_type_env_str { DispWithArrows } - \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l_@@_left_brace_tl { #1 } } - \@@_pre_halign:n { #2 } - \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl + \bool_set_true:N \l__witharrows_in_DispWithArrows_bool + \str_clear_new:N \l__witharrows_type_env_str + \str_set:Nn \l__witharrows_type_env_str { DispWithArrows } + \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l__witharrows_left_brace_tl { #1 } } + \__witharrows_pre_halign:n { #2 } + \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl { \hbox_set:Nn \l_tmpa_box { \group_begin: \dim_set_eq:NN \nulldelimiterspace \c_zero_dim \c_math_toggle_token - \left \l_@@_replace_left_brace_by_tl \vcenter to 1 cm { } \right. + \left \l__witharrows_replace_left_brace_by_tl \vcenter to 1 cm { } \right. \c_math_toggle_token \group_end: } - \dim_zero_new:N \l_@@_delim_wd_dim - \dim_set:Nn \l_@@_delim_wd_dim { \box_wd:N \l_tmpa_box } - \box_clear_new:N \l_@@_left_brace_box - \hbox_set:Nn \l_@@_left_brace_box + \dim_zero_new:N \l__witharrows_delim_wd_dim + \dim_set:Nn \l__witharrows_delim_wd_dim { \box_wd:N \l_tmpa_box } + \box_clear_new:N \l__witharrows_left_brace_box + \hbox_set:Nn \l__witharrows_left_brace_box { \group_begin: - \cs_set_eq:NN \label \@@_old_label + \cs_set_eq:NN \label \__witharrows_old_label \c_math_toggle_token - \bool_if:NT \l_@@_displaystyle_bool \displaystyle - \l_@@_left_brace_tl + \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle + \l__witharrows_left_brace_tl { } \c_math_toggle_token \group_end: } } \if_mode_math: - \@@_fatal:n { DispWithArrows~in~math~mode } + \__witharrows_fatal:n { DispWithArrows~in~math~mode } \fi: \dim_zero_new:N \linewidth \dim_set_eq:NN \linewidth \displaywidth @@ -840,21 +829,21 @@ \hbox_to_wd:nn { .6 \linewidth } { } \fi: \c_math_toggle_token \c_math_toggle_token - \dim_zero_new:N \l_@@_linewidth_dim - \dim_set_eq:NN \l_@@_linewidth_dim \displaywidth - \box_clear_new:N \l_@@_halign_box - \setbox \l_@@_halign_box \vtop \bgroup + \dim_zero_new:N \l__witharrows_linewidth_dim + \dim_set_eq:NN \l__witharrows_linewidth_dim \displaywidth + \box_clear_new:N \l__witharrows_halign_box + \setbox \l__witharrows_halign_box \vtop \bgroup \tabskip = - \bool_if:NTF \l_@@_fleqn_bool + \bool_if:NTF \l__witharrows_fleqn_bool \c_zero_skip { 0 pt plus 1000 pt minus 1000 pt } - \@@_construct_halign: + \__witharrows_construct_halign: \tabskip = 0 pt plus 1000 pt minus 1000 pt & $ ## $ \tabskip = \c_zero_skip && - \@@_fatal:n { Too~much~columns~in~DispWithArrows } + \__witharrows_fatal:n { Too~much~columns~in~DispWithArrows } \bool_if:nT \c_false_bool { ## } \cr } @@ -866,34 +855,34 @@ \box_set_to_last:N \l_tmpa_box \nointerlineskip \box_use:N \l_tmpa_box - \dim_gzero_new:N \g_@@_alignment_dim - \dim_gset:Nn \g_@@_alignment_dim { \box_wd:N \l_tmpa_box } - \box_clear_new:N \l_@@_new_box - \hbox_set:Nn \l_@@_new_box { \hbox_unpack_clear:N \l_tmpa_box } + \dim_gzero_new:N \g__witharrows_alignment_dim + \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l_tmpa_box } + \box_clear_new:N \l__witharrows_new_box + \hbox_set:Nn \l__witharrows_new_box { \hbox_unpack_clear:N \l_tmpa_box } \dim_compare:nNnT - { \box_wd:N \l_@@_new_box } < \g_@@_alignment_dim - { \dim_gset:Nn \g_@@_alignment_dim { \box_wd:N \l_@@_new_box } } + { \box_wd:N \l__witharrows_new_box } < \g__witharrows_alignment_dim + { \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l__witharrows_new_box } } \egroup - \tl_if_eq:NNTF \l_@@_left_brace_tl \c_novalue_tl - { \box_use_drop:N \l_@@_halign_box } + \tl_if_eq:NNTF \l__witharrows_left_brace_tl \c_novalue_tl + { \box_use_drop:N \l__witharrows_halign_box } { - \hbox_to_wd:nn \l_@@_linewidth_dim + \hbox_to_wd:nn \l__witharrows_linewidth_dim { - \bool_if:NTF \l_@@_fleqn_bool - { \skip_horizontal:n \l_@@_mathindent_dim } + \bool_if:NTF \l__witharrows_fleqn_bool + { \skip_horizontal:n \l__witharrows_mathindent_dim } \hfil - \hbox_to_wd:nn \g_@@_alignment_dim + \hbox_to_wd:nn \g__witharrows_alignment_dim { - \box_use_drop:N \l_@@_left_brace_box + \box_use_drop:N \l__witharrows_left_brace_box \dim_set:Nn \l_tmpa_dim { - \box_ht:N \l_@@_halign_box - + \box_dp:N \l_@@_halign_box + \box_ht:N \l__witharrows_halign_box + + \box_dp:N \l__witharrows_halign_box } \group_begin: \dim_set_eq:NN \nulldelimiterspace \c_zero_dim \c_math_toggle_token - \left \l_@@_replace_left_brace_by_tl + \left \l__witharrows_replace_left_brace_by_tl \vcenter to \l_tmpa_dim { \vfil } \right. \c_math_toggle_token @@ -902,319 +891,319 @@ } \hfil } - \skip_horizontal:n { - \l_@@_linewidth_dim } - \vcenter { \box_use_drop:N \l_@@_halign_box } + \skip_horizontal:n { - \l__witharrows_linewidth_dim } + \vcenter { \box_use_drop:N \l__witharrows_halign_box } } - \dim_gzero_new:N \g_@@_right_x_dim - \dim_gset_eq:NN \g_@@_right_x_dim \c_max_dim - \tikzpicture [ @@_standard ] - \int_step_variable:nNn \g_@@_line_int \l_tmpa_int + \dim_gzero_new:N \g__witharrows_right_x_dim + \dim_gset_eq:NN \g__witharrows_right_x_dim \c_max_dim + \tikzpicture [ __witharrows_standard ] + \int_step_variable:nNn \g__witharrows_line_int \l_tmpa_int { \cs_if_free:cTF - { pgf@sh@ns@wa - \l_@@_prefix_str - \l_tmpa_int - v } - { \@@_fatal:n { Inexistent~v-node } } + { pgf@sh@ns@wa - \l__witharrows_prefix_str - \l_tmpa_int - v } + { \__witharrows_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_@@_right_x_dim - { \dim_gset:Nn \g_@@_right_x_dim \l_tmpa_dim } + \dim_compare:nNnT \l_tmpa_dim < \g__witharrows_right_x_dim + { \dim_gset:Nn \g__witharrows_right_x_dim \l_tmpa_dim } } } \endtikzpicture - \@@_post_halign: + \__witharrows_post_halign: \c_math_toggle_token \c_math_toggle_token \group_end: } -\cs_new_protected:Npn \@@_if_in_last_col_of_disp:Nn #1 #2 +\cs_new_protected:Npn \__witharrows_if_in_last_col_of_disp:Nn #1 #2 { - \bool_if:NTF \l_@@_in_WithArrows_bool - { \@@_error:nn { Not~allowed~in~WithArrows } { #1 } } + \bool_if:NTF \l__witharrows_in_WithArrows_bool + { \__witharrows_error:nn { Not~allowed~in~WithArrows } { #1 } } { - \int_compare:nNnTF \g_@@_col_int < \l_@@_nb_cols_int - { \@@_error:nn { Not~allowed~in~DispWithArrows } { #1 } } + \int_compare:nNnTF \g__witharrows_col_int < \l__witharrows_nb_cols_int + { \__witharrows_error:nn { Not~allowed~in~DispWithArrows } { #1 } } { #2 } } } -\cs_new_protected:Npn \@@_scan_arrows: +\cs_new_protected:Npn \__witharrows_scan_arrows: { \group_begin: - \int_compare:nNnT \l_@@_pos_arrow_int = 7 + \int_compare:nNnT \l__witharrows_pos_arrow_int = 7 { - \@@_scan_arrows_i: - \int_set:Nn \l_@@_pos_arrow_int 8 + \__witharrows_scan_arrows_i: + \int_set:Nn \l__witharrows_pos_arrow_int 8 } - \@@_scan_arrows_i: + \__witharrows_scan_arrows_i: \group_end: } -\cs_new_protected:Npn \@@_scan_arrows_i: +\cs_new_protected:Npn \__witharrows_scan_arrows_i: { - \int_zero_new:N \l_@@_first_arrow_of_group_int - \int_zero_new:N \l_@@_first_line_of_group_int - \int_zero_new:N \l_@@_last_line_of_group_int - \seq_clear_new:N \l_@@_first_arrows_seq - \seq_clear_new:N \l_@@_last_arrows_seq - \bool_set_true:N \l_@@_new_group_bool - \int_set:Nn \l_@@_arrow_int \c_one_int - \int_until_do:nNnn \l_@@_arrow_int > \g_@@_arrow_int + \int_zero_new:N \l__witharrows_first_arrow_of_group_int + \int_zero_new:N \l__witharrows_first_line_of_group_int + \int_zero_new:N \l__witharrows_last_line_of_group_int + \seq_clear_new:N \l__witharrows_first_arrows_seq + \seq_clear_new:N \l__witharrows_last_arrows_seq + \bool_set_true:N \l__witharrows_new_group_bool + \int_set:Nn \l__witharrows_arrow_int \c_one_int + \int_until_do:nNnn \l__witharrows_arrow_int > \g__witharrows_arrow_int { \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { initial } \l_tmpa_tl - \int_set:Nn \l_@@_initial_int \l_tmpa_tl + \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { final } \l_tmpa_tl - \int_set:Nn \l_@@_final_int \l_tmpa_tl + \int_set:Nn \l__witharrows_final_int \l_tmpa_tl \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } - { status } \l_@@_status_arrow_str + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } + { status } \l__witharrows_status_arrow_str \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } - { input-line } \l_@@_input_line_str - \int_compare:nNnTF \l_@@_final_int > \g_@@_line_int + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } + { input-line } \l__witharrows_input_line_str + \int_compare:nNnTF \l__witharrows_final_int > \g__witharrows_line_int { - \int_compare:nNnF \l_@@_pos_arrow_int = 8 - { \@@_error:n { Too~few~lines~for~an~arrow } } + \int_compare:nNnF \l__witharrows_pos_arrow_int = 8 + { \__witharrows_error:n { Too~few~lines~for~an~arrow } } } - \@@_code_for_possible_arrow: - \int_incr:N \l_@@_arrow_int + \__witharrows_code_for_possible_arrow: + \int_incr:N \l__witharrows_arrow_int } \bool_if:nT { - \int_compare_p:n { \l_@@_pos_arrow_int != 7 } + \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 } && - \int_compare_p:nNn \l_@@_first_arrow_of_group_int > 0 + \int_compare_p:nNn \l__witharrows_first_arrow_of_group_int > 0 } - { \@@_draw_arrows:nn \l_@@_first_arrow_of_group_int \g_@@_arrow_int } + { \__witharrows_draw_arrows:nn \l__witharrows_first_arrow_of_group_int \g__witharrows_arrow_int } } -\cs_new_protected:Npn \@@_code_for_possible_arrow: +\cs_new_protected:Npn \__witharrows_code_for_possible_arrow: { \bool_if:nT { - \int_compare_p:nNn \l_@@_arrow_int > \c_one_int + \int_compare_p:nNn \l__witharrows_arrow_int > \c_one_int && - ( \int_compare_p:n { \l_@@_initial_int > \l_@@_last_line_of_group_int } + ( \int_compare_p:n { \l__witharrows_initial_int > \l__witharrows_last_line_of_group_int } && - \int_compare_p:n { \l_@@_pos_arrow_int != 7 } + \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 } || - \str_if_eq_p:Vn \l_@@_status_arrow_str { new-group } + \str_if_eq_p:Vn \l__witharrows_status_arrow_str { new-group } ) } { - \int_compare:nNnF \l_@@_first_arrow_of_group_int = \c_zero_int + \int_compare:nNnF \l__witharrows_first_arrow_of_group_int = \c_zero_int { - \@@_draw_arrows:nn - \l_@@_first_arrow_of_group_int - { \l_@@_arrow_int - 1 } + \__witharrows_draw_arrows:nn + \l__witharrows_first_arrow_of_group_int + { \l__witharrows_arrow_int - 1 } } - \bool_set_true:N \l_@@_new_group_bool + \bool_set_true:N \l__witharrows_new_group_bool } - \bool_if:nTF \l_@@_new_group_bool + \bool_if:nTF \l__witharrows_new_group_bool { - \bool_set_false:N \l_@@_new_group_bool - \int_set_eq:NN \l_@@_first_arrow_of_group_int \l_@@_arrow_int - \int_set_eq:NN \l_@@_first_line_of_group_int \l_@@_initial_int - \int_set_eq:NN \l_@@_last_line_of_group_int \l_@@_final_int - \seq_clear:N \l_@@_first_arrows_seq - \seq_put_left:NV \l_@@_first_arrows_seq \l_@@_arrow_int - \seq_clear:N \l_@@_last_arrows_seq - \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int - \int_compare:nT { \l_@@_pos_arrow_int != 8 } - { \dim_set:Nn \l_@@_x_dim { - \c_max_dim } } + \bool_set_false:N \l__witharrows_new_group_bool + \int_set_eq:NN \l__witharrows_first_arrow_of_group_int \l__witharrows_arrow_int + \int_set_eq:NN \l__witharrows_first_line_of_group_int \l__witharrows_initial_int + \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int + \seq_clear:N \l__witharrows_first_arrows_seq + \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int + \seq_clear:N \l__witharrows_last_arrows_seq + \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int + \int_compare:nT { \l__witharrows_pos_arrow_int != 8 } + { \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim } } } { \bool_if:nF - { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } } + { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } } { \int_compare:nT - { \l_@@_initial_int = \l_@@_first_line_of_group_int } - { \seq_put_left:NV \l_@@_first_arrows_seq \l_@@_arrow_int } - \int_compare:nNnTF \l_@@_final_int > \l_@@_last_line_of_group_int + { \l__witharrows_initial_int = \l__witharrows_first_line_of_group_int } + { \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int } + \int_compare:nNnTF \l__witharrows_final_int > \l__witharrows_last_line_of_group_int { - \int_set_eq:NN \l_@@_last_line_of_group_int \l_@@_final_int - \seq_clear:N \l_@@_last_arrows_seq - \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int + \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int + \seq_clear:N \l__witharrows_last_arrows_seq + \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int } { - \int_compare:nNnT \l_@@_final_int = \l_@@_last_line_of_group_int - { \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int } + \int_compare:nNnT \l__witharrows_final_int = \l__witharrows_last_line_of_group_int + { \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int } } } } - \bool_if:nF { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } } + \bool_if:nF { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } } { - \int_compare:nT { \l_@@_pos_arrow_int != 8 } - { \@@_update_x:nn \l_@@_initial_int \l_@@_final_int } + \int_compare:nT { \l__witharrows_pos_arrow_int != 8 } + { \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int } } } \cs_generate_variant:Nn \keys_set:nn { n o } -\cs_new_protected:Npn \@@_keys_set: +\cs_new_protected:Npn \__witharrows_keys_set: { \keys_set_known:no { WithArrows / Arrow / SecondPass } } -\cs_new_protected:Npn \@@_draw_arrows:nn #1 #2 +\cs_new_protected:Npn \__witharrows_draw_arrows:nn #1 #2 { \group_begin: - \int_zero_new:N \l_@@_first_arrow_int - \int_set:Nn \l_@@_first_arrow_int { #1 } - \int_zero_new:N \l_@@_last_arrow_int - \int_set:Nn \l_@@_last_arrow_int { #2 } - \int_set:Nn \l_@@_arrow_int \l_@@_first_arrow_int - \int_until_do:nNnn \l_@@_arrow_int > \l_@@_last_arrow_int + \int_zero_new:N \l__witharrows_first_arrow_int + \int_set:Nn \l__witharrows_first_arrow_int { #1 } + \int_zero_new:N \l__witharrows_last_arrow_int + \int_set:Nn \l__witharrows_last_arrow_int { #2 } + \int_set:Nn \l__witharrows_arrow_int \l__witharrows_first_arrow_int + \int_until_do:nNnn \l__witharrows_arrow_int > \l__witharrows_last_arrow_int { \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { initial } \l_tmpa_tl - \int_set:Nn \l_@@_initial_int \l_tmpa_tl + \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { final } \l_tmpa_tl - \int_set:Nn \l_@@_final_int \l_tmpa_tl - \int_compare:nT { \l_@@_final_int <= \g_@@_line_int } \@@_draw_arrows_i: - \int_incr:N \l_@@_arrow_int + \int_set:Nn \l__witharrows_final_int \l_tmpa_tl + \int_compare:nT { \l__witharrows_final_int <= \g__witharrows_line_int } \__witharrows_draw_arrows_i: + \int_incr:N \l__witharrows_arrow_int } \group_end: } -\cs_new_protected:Npn \@@_draw_arrows_i: +\cs_new_protected:Npn \__witharrows_draw_arrows_i: { \group_begin: \prop_get:cnN - { g_@@_arrow _\l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _\l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { options } \l_tmpa_tl - \str_clear_new:N \l_@@_previous_key_str + \str_clear_new:N \l__witharrows_previous_key_str \exp_args:NNo \exp_args:No - \@@_keys_set: { \l_tmpa_tl , tikz = { xshift = \l_@@_xoffset_dim } } - \bool_set_false:N \l_@@_initial_r_bool - \bool_set_false:N \l_@@_final_r_bool - \int_case:nn \l_@@_pos_arrow_int + \__witharrows_keys_set: { \l_tmpa_tl , tikz = { xshift = \l__witharrows_xoffset_dim } } + \bool_set_false:N \l__witharrows_initial_r_bool + \bool_set_false:N \l__witharrows_final_r_bool + \int_case:nn \l__witharrows_pos_arrow_int { - 0 { \bool_set_true:N \l_@@_final_r_bool } - 2 { \bool_set_true:N \l_@@_initial_r_bool } + 0 { \bool_set_true:N \l__witharrows_final_r_bool } + 2 { \bool_set_true:N \l__witharrows_initial_r_bool } 3 { - \bool_set_true:N \l_@@_initial_r_bool - \bool_set_true:N \l_@@_final_r_bool + \bool_set_true:N \l__witharrows_initial_r_bool + \bool_set_true:N \l__witharrows_final_r_bool } } - \int_compare:nNnT \l_@@_pos_arrow_int = 5 + \int_compare:nNnT \l__witharrows_pos_arrow_int = 5 { - \dim_set:Nn \l_@@_x_dim { - \c_max_dim } - \@@_update_x:nn \l_@@_initial_int \l_@@_final_int + \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim } + \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int } - \tl_set:Nx \l_@@_initial_tl + \tl_set:Nx \l__witharrows_initial_tl { - \int_use:N \l_@@_initial_int - \bool_if:NTF \l_@@_initial_r_bool rl + \int_use:N \l__witharrows_initial_int - \bool_if:NTF \l__witharrows_initial_r_bool rl .south } - \tl_set:Nx \l_@@_final_tl - { \int_use:N \l_@@_final_int - \bool_if:NTF \l_@@_final_r_bool rl .north } + \tl_set:Nx \l__witharrows_final_tl + { \int_use:N \l__witharrows_final_int - \bool_if:NTF \l__witharrows_final_r_bool rl .north } \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { label } \l_tmpa_tl - \seq_if_in:NxTF \l_@@_first_arrows_seq - { \int_use:N \l_@@_arrow_int } + \seq_if_in:NxTF \l__witharrows_first_arrows_seq + { \int_use:N \l__witharrows_arrow_int } { \bool_set_true:N \l_tmpa_bool } { \bool_set_false:N \l_tmpa_bool } - \seq_if_in:NxTF \l_@@_last_arrows_seq - { \int_use:N \l_@@_arrow_int } + \seq_if_in:NxTF \l__witharrows_last_arrows_seq + { \int_use:N \l__witharrows_arrow_int } { \bool_set_true:N \l_tmpb_bool } { \bool_set_false:N \l_tmpb_bool } - \int_compare:nNnT \l_@@_pos_arrow_int = 5 + \int_compare:nNnT \l__witharrows_pos_arrow_int = 5 { \bool_set_true:N \l_tmpa_bool \bool_set_true:N \l_tmpb_bool } - \dim_gzero_new:N \g_@@_x_initial_dim - \dim_gzero_new:N \g_@@_x_final_dim - \dim_gzero_new:N \g_@@_y_initial_dim - \dim_gzero_new:N \g_@@_y_final_dim - \tikzpicture [ @@_standard ] - \tikz@scan@one@point \pgfutil@firstofone ( \l_@@_initial_tl ) - \dim_gset:Nn \g_@@_x_initial_dim \pgf@x - \dim_gset:Nn \g_@@_y_initial_dim \pgf@y - \tikz@scan@one@point \pgfutil@firstofone ( \l_@@_final_tl ) - \dim_gset:Nn \g_@@_x_final_dim \pgf@x - \dim_gset:Nn \g_@@_y_final_dim \pgf@y + \dim_gzero_new:N \g__witharrows_x_initial_dim + \dim_gzero_new:N \g__witharrows_x_final_dim + \dim_gzero_new:N \g__witharrows_y_initial_dim + \dim_gzero_new:N \g__witharrows_y_final_dim + \tikzpicture [ __witharrows_standard ] + \tikz@scan@one@point \pgfutil@firstofone ( \l__witharrows_initial_tl ) + \dim_gset:Nn \g__witharrows_x_initial_dim \pgf@x + \dim_gset:Nn \g__witharrows_y_initial_dim \pgf@y + \tikz@scan@one@point \pgfutil@firstofone ( \l__witharrows_final_tl ) + \dim_gset:Nn \g__witharrows_x_final_dim \pgf@x + \dim_gset:Nn \g__witharrows_y_final_dim \pgf@y \endtikzpicture \bool_if:nTF - { \dim_compare_p:nNn { \g_@@_y_initial_dim - \g_@@_y_final_dim } - > \l_@@_max_length_of_arrow_dim + { \dim_compare_p:nNn { \g__witharrows_y_initial_dim - \g__witharrows_y_final_dim } + > \l__witharrows_max_length_of_arrow_dim && - \int_compare_p:nNn { \l_@@_final_int - \l_@@_initial_int } = 1 + \int_compare_p:nNn { \l__witharrows_final_int - \l__witharrows_initial_int } = 1 } { \tl_gset:Nx \g_tmpa_tl { - \int_compare:nNnTF \l_@@_pos_arrow_int < 5 - { \dim_use:N \g_@@_x_initial_dim } - { \dim_use:N \l_@@_x_dim } , + \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5 + { \dim_use:N \g__witharrows_x_initial_dim } + { \dim_use:N \l__witharrows_x_dim } , \dim_eval:n { - ( \g_@@_y_initial_dim + \g_@@_y_final_dim ) / 2 - + ( \l_@@_max_length_of_arrow_dim / 2 ) + ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2 + + ( \l__witharrows_max_length_of_arrow_dim / 2 ) } } \tl_gset:Nx \g_tmpb_tl { - \int_compare:nNnTF \l_@@_pos_arrow_int < 5 - { \dim_use:N \g_@@_x_final_dim } - { \dim_use:N \l_@@_x_dim } , + \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5 + { \dim_use:N \g__witharrows_x_final_dim } + { \dim_use:N \l__witharrows_x_dim } , \dim_eval:n { - ( \g_@@_y_initial_dim + \g_@@_y_final_dim ) / 2 - - ( \l_@@_max_length_of_arrow_dim / 2 ) + ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2 + - ( \l__witharrows_max_length_of_arrow_dim / 2 ) } } } { \tl_gset:Nx \g_tmpa_tl { - \int_compare:nNnTF \l_@@_pos_arrow_int < 5 - { \dim_use:N \g_@@_x_initial_dim } - { \dim_use:N \l_@@_x_dim } , + \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5 + { \dim_use:N \g__witharrows_x_initial_dim } + { \dim_use:N \l__witharrows_x_dim } , \bool_if:NTF \l_tmpa_bool - { \dim_eval:n { \g_@@_y_initial_dim + \l_@@_start_adjust_dim } } - { \dim_use:N \g_@@_y_initial_dim } + { \dim_eval:n { \g__witharrows_y_initial_dim + \l__witharrows_start_adjust_dim } } + { \dim_use:N \g__witharrows_y_initial_dim } } \tl_gset:Nx \g_tmpb_tl { - \int_compare:nNnTF \l_@@_pos_arrow_int < 5 - { \dim_use:N \g_@@_x_final_dim } - { \dim_use:N \l_@@_x_dim } , + \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5 + { \dim_use:N \g__witharrows_x_final_dim } + { \dim_use:N \l__witharrows_x_dim } , \bool_if:NTF \l_tmpb_bool - { \dim_eval:n { \g_@@_y_final_dim - \l_@@_end_adjust_dim } } - { \dim_use:N \g_@@_y_final_dim } + { \dim_eval:n { \g__witharrows_y_final_dim - \l__witharrows_end_adjust_dim } } + { \dim_use:N \g__witharrows_y_final_dim } } } - \@@_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl + \__witharrows_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl \group_end: } -\cs_new_protected:Npn \@@_def_function_tmpa:n #1 +\cs_new_protected:Npn \__witharrows_def_function_tmpa:n #1 { - \cs_set:Npn \@@_tmpa:nnn ##1 ##2 ##3 + \cs_set:Npn \__witharrows_tmpa:nnn ##1 ##2 ##3 { \tikzpicture [ - @@_standard , + __witharrows_standard , every~path / .style = WithArrows / arrow ] #1 \endtikzpicture } } -\cs_new_protected:Npn \@@_draw_arrow:nnn #1 #2 #3 +\cs_new_protected:Npn \__witharrows_draw_arrow:nnn #1 #2 #3 { - \bool_if:nT { \l_@@_wrap_lines_bool && \l_@@_in_DispWithArrows_bool } - { \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_wrap_lines_tl } - \exp_args:NV \@@_def_function_tmpa:n \l_@@_tikz_code_tl - \@@_tmpa:nnn { #1 } { #2 } { #3 } + \bool_if:nT { \l__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool } + { \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_wrap_lines_tl } + \exp_args:NV \__witharrows_def_function_tmpa:n \l__witharrows_tikz_code_tl + \__witharrows_tmpa:nnn { #1 } { #2 } { #3 } } -\cs_generate_variant:Nn \@@_draw_arrow:nnn { n n o } -\tl_const:Nn \c_@@_tikz_code_wrap_lines_tl +\cs_generate_variant:Nn \__witharrows_draw_arrow:nnn { n n o } +\tl_const:Nn \c__witharrows_tikz_code_wrap_lines_tl { - \draw ( #1 ) to node ( @@_label ) { } ( #2 ) ; - \tikz@parse@node \pgfutil@firstofone ( @@_label.west ) + \draw ( #1 ) to node ( __witharrows_label ) { } ( #2 ) ; + \tikz@parse@node \pgfutil@firstofone ( __witharrows_label.west ) \dim_set:Nn \l_tmpa_dim - { \g_@@_right_x_dim - \pgf@x - \pgfkeysvalueof { / pgf / inner~xsep } } + { \g__witharrows_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 { @@ -1224,92 +1213,92 @@ } \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim { - \path ( @@_label.west ) + \path ( __witharrows_label.west ) node [ anchor = west , text~width = \dim_use:N \l_tmpa_dim ] { #3 } ; } } -\cs_new_protected:Npn \@@_update_x:nn #1 #2 +\cs_new_protected:Npn \__witharrows_update_x:nn #1 #2 { \int_step_inline:nnn { #1 } { #2 } { - \tikzpicture [ @@_standard ] + \tikzpicture [ __witharrows_standard ] \tikz@scan@one@point \pgfutil@firstofone ( ##1 - l ) - \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \l_@@_x_dim \pgf@x } + \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \l__witharrows_x_dim \pgf@x } \endtikzpicture - \dim_set_eq:NN \l_@@_x_dim \g_tmpa_dim + \dim_set_eq:NN \l__witharrows_x_dim \g_tmpa_dim } } -\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g_@@_last_env_int } +\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g__witharrows_last_env_int } \keys_define:nn { WithArrows / Arrow / code-after } { tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } , tikz .value_required:n = true , rr .value_forbidden:n = true , - rr .code:n = \@@_fix_pos_option:n 0 , + rr .code:n = \__witharrows_fix_pos_option:n 0 , ll .value_forbidden:n = true, - ll .code:n = \@@_fix_pos_option:n 1 , + ll .code:n = \__witharrows_fix_pos_option:n 1 , rl .value_forbidden:n = true , - rl .code:n = \@@_fix_pos_option:n 2 , + rl .code:n = \__witharrows_fix_pos_option:n 2 , lr .value_forbidden:n = true , - lr .code:n = \@@_fix_pos_option:n 3 , + lr .code:n = \__witharrows_fix_pos_option:n 3 , v .value_forbidden:n = true , - v .code:n = \@@_fix_pos_option:n 4 , - tikz-code .tl_set:N = \l_@@_tikz_code_tl , + v .code:n = \__witharrows_fix_pos_option:n 4 , + tikz-code .tl_set:N = \l__witharrows_tikz_code_tl , tikz-code .value_required:n = true , - xoffset .dim_set:N = \l_@@_xoffset_dim , + xoffset .dim_set:N = \l__witharrows_xoffset_dim , xoffset .value_required:n = true , unknown .code:n = - \@@_sort_seq:N \l_@@_options_Arrow_code_after_seq - \@@_error:n { Unknown~option~Arrow~in~code-after } + \__witharrows_sort_seq:N \l__witharrows_options_Arrow_code_after_seq + \__witharrows_error:n { Unknown~option~Arrow~in~code-after } } -\seq_new:N \l_@@_options_Arrow_code_after_seq -\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_code_after_seq +\seq_new:N \l__witharrows_options_Arrow_code_after_seq +\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_code_after_seq { ll, lr, rl, rr, tikz, tikz-code, v, x, offset } -\cs_new_protected:Npn \@@_Arrow_code_after +\cs_new_protected:Npn \__witharrows_Arrow_code_after { \peek_meaning:NTF [ - { \@@_Arrow_code_after_i } - { \@@_Arrow_code_after_i [ ] } + { \__witharrows_Arrow_code_after_i } + { \__witharrows_Arrow_code_after_i [ ] } } -\cs_new_protected:Npn \@@_Arrow_code_after_i [ #1 ] #2 #3 #4 +\cs_new_protected:Npn \__witharrows_Arrow_code_after_i [ #1 ] #2 #3 #4 { \peek_meaning:NTF [ - { \@@_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } } - { \@@_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } [ ] } + { \__witharrows_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } } + { \__witharrows_Arrow_code_after_ii [ #1 ] { #2 } { #3 } { #4 } [ ] } } -\cs_new_protected:Npn \@@_Arrow_code_after_ii [ #1 ] #2 #3 #4 [ #5 ] +\cs_new_protected:Npn \__witharrows_Arrow_code_after_ii [ #1 ] #2 #3 #4 [ #5 ] { - \int_set:Nn \l_@@_pos_arrow_int 1 - \str_clear_new:N \l_@@_previous_key_str + \int_set:Nn \l__witharrows_pos_arrow_int 1 + \str_clear_new:N \l__witharrows_previous_key_str \group_begin: \keys_set:nn { WithArrows / Arrow / code-after } - { #1, #5, tikz = { xshift = \l_@@_xoffset_dim } } - \bool_set_false:N \l_@@_initial_r_bool - \bool_set_false:N \l_@@_final_r_bool - \int_case:nn \l_@@_pos_arrow_int + { #1, #5, tikz = { xshift = \l__witharrows_xoffset_dim } } + \bool_set_false:N \l__witharrows_initial_r_bool + \bool_set_false:N \l__witharrows_final_r_bool + \int_case:nn \l__witharrows_pos_arrow_int { 0 { - \bool_set_true:N \l_@@_initial_r_bool - \bool_set_true:N \l_@@_final_r_bool + \bool_set_true:N \l__witharrows_initial_r_bool + \bool_set_true:N \l__witharrows_final_r_bool } - 2 { \bool_set_true:N \l_@@_initial_r_bool } - 3 { \bool_set_true:N \l_@@_final_r_bool } + 2 { \bool_set_true:N \l__witharrows_initial_r_bool } + 3 { \bool_set_true:N \l__witharrows_final_r_bool } } \tl_if_eq:nnTF { #2 } { #3 } - { \@@_error:nn { Both~lines~are~equal } { #2 } } + { \__witharrows_error:nn { Both~lines~are~equal } { #2 } } { - \cs_if_free:cTF { pgf@sh@ns@wa - \l_@@_prefix_str - #2 - l } - { \@@_error:nx { Wrong~line~in~Arrow } { #2 } } + \cs_if_free:cTF { pgf@sh@ns@wa - \l__witharrows_prefix_str - #2 - l } + { \__witharrows_error:nx { Wrong~line~in~Arrow } { #2 } } { - \cs_if_free:cTF { pgf@sh@ns@wa - \l_@@_prefix_str - #3 - l } - { \@@_error:nx { Wrong~line~in~Arrow } { #3 } } + \cs_if_free:cTF { pgf@sh@ns@wa - \l__witharrows_prefix_str - #3 - l } + { \__witharrows_error:nx { Wrong~line~in~Arrow } { #3 } } { - \int_compare:nNnTF \l_@@_pos_arrow_int = 4 + \int_compare:nNnTF \l__witharrows_pos_arrow_int = 4 { - \tikzpicture [ @@_standard ] + \tikzpicture [ __witharrows_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 @@ -1323,42 +1312,42 @@ \endtikzpicture } { - \tikzpicture [ @@_standard ] + \tikzpicture [ __witharrows_standard ] \tikz@scan@one@point \pgfutil@firstofone - ( #2-\bool_if:NTF\l_@@_initial_r_bool rl .south ) + ( #2-\bool_if:NTF\l__witharrows_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_@@_final_r_bool rl .north ) + ( #3-\bool_if:NTF\l__witharrows_final_r_bool rl .north ) \tl_gset:Nx \g_tmpb_tl { \dim_use:N \pgf@x , \dim_use:N \pgf@y } \endtikzpicture } - \@@_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 } + \__witharrows_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 } } } } \group_end: } -\cs_new_protected:Npn \@@_MultiArrow:nn #1 #2 +\cs_new_protected:Npn \__witharrows_MultiArrow:nn #1 #2 { \exp_args:Nnx \regex_match:nnTF { \A \d+ (\,\d+)* ( \, \.\.\. (\,\d+)+ )* \Z } { #1 } - { \@@_MultiArrow_i:nn { #1 } { #2 } } - { \@@_error:nx { Invalid~specification~for~MultiArrow } { #1 } } + { \__witharrows_MultiArrow_i:nn { #1 } { #2 } } + { \__witharrows_error:nx { Invalid~specification~for~MultiArrow } { #1 } } } -\cs_new_protected:Npn \@@_MultiArrow_i:nn #1 #2 +\cs_new_protected:Npn \__witharrows_MultiArrow_i:nn #1 #2 { \foreach \x in { #1 } { - \cs_if_free:cTF { pgf@sh@ns@wa - \l_@@_prefix_str - \x - l } - { \@@_error:nx { Wrong~line~specification~in~MultiArrow } \x } + \cs_if_free:cTF { pgf@sh@ns@wa - \l__witharrows_prefix_str - \x - l } + { \__witharrows_error:nx { Wrong~line~specification~in~MultiArrow } \x } { \clist_gput_right:Nx \g_tmpa_clist \x } } \int_compare:nTF { \clist_count:N \g_tmpa_clist < 2 } - { \@@_error:n { Too~small~specification~for~MultiArrow } } + { \__witharrows_error:n { Too~small~specification~for~MultiArrow } } { \clist_sort:Nn \g_tmpa_clist { @@ -1369,52 +1358,52 @@ \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 \@@_MultiArrow_i:n \g_tmpa_clist + \exp_args:NV \__witharrows_MultiArrow_i:n \g_tmpa_clist \tikzpicture [ - @@_standard , + __witharrows_standard , every~path / .style = { WithArrows / arrow } ] - \draw [<->] ([xshift = \l_@@_xoffset_dim]\l_tmpa_tl-r.south) + \draw [<->] ([xshift = \l__witharrows_xoffset_dim]\l_tmpa_tl-r.south) -- ++(5mm,0) - -- node (@@_label) {} - ([xshift = \l_@@_xoffset_dim+5mm]\l_tmpb_tl-r.south) - -- ([xshift = \l_@@_xoffset_dim]\l_tmpb_tl-r.south) ; - \tikz@parse@node \pgfutil@firstofone (@@_label.west) + -- node (__witharrows_label) {} + ([xshift = \l__witharrows_xoffset_dim+5mm]\l_tmpb_tl-r.south) + -- ([xshift = \l__witharrows_xoffset_dim]\l_tmpb_tl-r.south) ; + \tikz@parse@node \pgfutil@firstofone (__witharrows_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_@@_wrap_lines_bool && \l_@@_in_DispWithArrows_bool } + \bool_if:nT { \l__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool } { \dim_set:Nn \l_tmpb_dim - { \g_@@_right_x_dim - \pgf@x - 0.3333 em } + { \g__witharrows_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 (@@_label.west) + \path (__witharrows_label.west) node [ anchor = west, text~width = \dim_use:N \l_tmpa_dim ] { #2 } ; \endtikzpicture } } -\cs_new_protected:Npn \@@_MultiArrow_i:n #1 +\cs_new_protected:Npn \__witharrows_MultiArrow_i:n #1 { \tikzpicture [ - @@_standard , + __witharrows_standard , every~path / .style = { WithArrows / arrow } ] \foreach \k in { #1 } { \draw [ <- ] - ( [xshift = \l_@@_xoffset_dim]\k-r.south ) -- ++(5mm,0) ; + ( [xshift = \l__witharrows_xoffset_dim]\k-r.south ) -- ++(5mm,0) ; } ; \endtikzpicture } -\str_const:Nn \c_@@_option_ignored_str +\str_const:Nn \c__witharrows_option_ignored_str { If~you~go~on,~this~option~will~be~ignored. } -\str_const:Nn \c_@@_command_ignored_str +\str_const:Nn \c__witharrows_command_ignored_str { If~you~go~on,~this~command~will~be~ignored. } -\@@_msg_new:nn { Bad~value~for~replace~brace~by } +\__witharrows_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:~., @@ -1424,227 +1413,227 @@ \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_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { option~of~cr~negative } +\__witharrows_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_@@_line_int\ - of~your~environment~\{\l_@@_type_env_str\}.\\ - \c_@@_option_ignored_str + should~be~positive~in~the~row~\int_use:N \g__witharrows_line_int\ + of~your~environment~\{\l__witharrows_type_env_str\}.\\ + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { omit~probably~used } +\__witharrows_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_@@_line_int\ - (or~another~line)~of~your~environment~\{\l_@@_type_env_str\}.\\ + \token_to_str:N\omit\ in~the~line~\int_use:N \g__witharrows_line_int\ + (or~another~line)~of~your~environment~\{\l__witharrows_type_env_str\}.\\ You~can~go~on~but~you~may~have~others~errors. } -\@@_msg_new:nn { Invalid~option~format } +\__witharrows_msg_new:nn { Invalid~option~format } { The~key~'format'~should~contain~only~letters~r,~c~and~l~and~ must~not~be~empty.\\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Value~for~a~key } +\__witharrows_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. } -\@@_msg_new:nnn { Unknown~option~in~Arrow } +\__witharrows_msg_new:nnn { Unknown~option~in~Arrow } { The~key~'\l_keys_key_tl'~is~unknown~for~the~command~ - \l_@@_string_Arrow_for_msg_str\ in~the~row~ - \int_use:N \g_@@_line_int\ of~your~environment~ - \{\l_@@_type_env_str\}. \l_tmpa_str \\ - \c_@@_option_ignored_str \\ + \l__witharrows_string_Arrow_for_msg_str\ in~the~row~ + \int_use:N \g__witharrows_line_int\ of~your~environment~ + \{\l__witharrows_type_env_str\}. \l_tmpa_str \\ + \c__witharrows_option_ignored_str \\ For~a~list~of~the~available~keys,~type~H~<return>. } { The~available~keys~are~(in~alphabetic~order):~ - \seq_use:Nnnn \l_@@_options_Arrow_seq {~and~} {,~} {~and~}. + \seq_use:Nnnn \l__witharrows_options_Arrow_seq {~and~} {,~} {~and~}. } -\@@_msg_new:nnn { Unknown~option~WithArrows } +\__witharrows_msg_new:nnn { Unknown~option~WithArrows } { - The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\ - \c_@@_option_ignored_str \\ + The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\ + \c__witharrows_option_ignored_str \\ For~a~list~of~the~available~keys,~type~H~<return>. } { The~available~keys~are~(in~alphabetic~order):~ - \seq_use:Nnnn \l_@@_options_WithArrows_seq {~and~} {,~} {~and~}. + \seq_use:Nnnn \l__witharrows_options_WithArrows_seq {~and~} {,~} {~and~}. } -\@@_msg_new:nnn { Unknown~option~DispWithArrows } +\__witharrows_msg_new:nnn { Unknown~option~DispWithArrows } { - The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\ - \c_@@_option_ignored_str \\ + The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\ + \c__witharrows_option_ignored_str \\ For~a~list~of~the~available~keys,~type~H~<return>. } { The~available~keys~are~(in~alphabetic~order):~ - \seq_use:Nnnn \l_@@_options_DispWithArrows_seq {~and~} {,~} {~and~}. + \seq_use:Nnnn \l__witharrows_options_DispWithArrows_seq {~and~} {,~} {~and~}. } -\@@_msg_new:nnn { Unknown~option~WithArrowsOptions } +\__witharrows_msg_new:nnn { Unknown~option~WithArrowsOptions } { The~key~'\l_keys_key_tl'~is~unknown~in~ \token_to_str:N \WithArrowsOptions. \\ - \c_@@_option_ignored_str \\ + \c__witharrows_option_ignored_str \\ For~a~list~of~the~available~keys,~type~H~<return>. } { The~available~keys~are~(in~alphabetic~order):~ - \seq_use:Nnnn \l_@@_options_WithArrowsOptions_seq {~and~} {,~} {~and~}. + \seq_use:Nnnn \l__witharrows_options_WithArrowsOptions_seq {~and~} {,~} {~and~}. } -\@@_msg_new:nnn { Unknown~option~Arrow~in~code-after } +\__witharrows_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_@@_option_ignored_str \\ + \c__witharrows_option_ignored_str \\ For~a~list~of~the~available~keys,~type~H~<return>. } { The~available~keys~are~(in~alphabetic~order):~ - \seq_use:Nnnn \l_@@_options_Arrow_code_after_seq {~and~} {,~} {~and~}. + \seq_use:Nnnn \l__witharrows_options_Arrow_code_after_seq {~and~} {,~} {~and~}. } -\@@_msg_new:nn { Too~much~columns~in~WithArrows } +\__witharrows_msg_new:nn { Too~much~columns~in~WithArrows } { - Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N - \l_@@_nb_cols_int\ columns~and~you~try~to~use~one~more.~ + Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N + \l__witharrows_nb_cols_int\ columns~and~you~try~to~use~one~more.~ Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str.~ If~you~really~want~to~use~more~columns~(after~the~arrows)~you~should~use~ the~option~'more-columns'~at~a~global~level~or~for~an~environment. \\ However,~you~can~go~one~for~this~time. } -\@@_msg_new:nn { Too~much~columns~in~DispWithArrows } +\__witharrows_msg_new:nn { Too~much~columns~in~DispWithArrows } { - Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N - \l_@@_nb_cols_int\ columns~and~you~try~to~use~one~more.~ + Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N + \l__witharrows_nb_cols_int\ columns~and~you~try~to~use~one~more.~ Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str\ - at~the~end~of~row~\int_use:N \g_@@_line_int. \\ + at~the~end~of~row~\int_use:N \g__witharrows_line_int. \\ This~error~is~fatal. } -\@@_msg_new:nn { Negative~jump } +\__witharrows_msg_new:nn { Negative~jump } { You~can't~use~a~negative~value~for~the~option~'jump'~of~command~ - \l_@@_string_Arrow_for_msg_str\ - in~the~row~\int_use:N \g_@@_line_int\ - of~your~environment~\{\l_@@_type_env_str\}.~ + \l__witharrows_string_Arrow_for_msg_str\ + in~the~row~\int_use:N \g__witharrows_line_int\ + of~your~environment~\{\l__witharrows_type_env_str\}.~ You~can~create~an~arrow~going~backwards~with~the~option~'<-'~of~Tikz. \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { new-group~without~groups } +\__witharrows_msg_new:nn { new-group~without~groups } { You~can't~use~the~option~'new-group'~for~the~command~ - \l_@@_string_Arrow_for_msg_str\ + \l__witharrows_string_Arrow_for_msg_str\ because~you~are~not~in~'groups'~mode.~Try~to~use~the~option~ - 'groups'~in~your~environment~\{\l_@@_type_env_str\}. \\ - \c_@@_option_ignored_str + 'groups'~in~your~environment~\{\l__witharrows_type_env_str\}. \\ + \c__witharrows_option_ignored_str } -\@@_msg_new:nn +\__witharrows_msg_new:nn { Too~few~lines~for~an~arrow } { - Line~\l_@@_input_line_str\ - :~an~arrow~specified~in~the~row~\int_use:N \l_@@_initial_int\ - of~your~environment~\{\l_@@_type_env_str\}~can't~be~drawn~ + Line~\l__witharrows_input_line_str\ + :~an~arrow~specified~in~the~row~\int_use:N \l__witharrows_initial_int\ + of~your~environment~\{\l__witharrows_type_env_str\}~can't~be~drawn~ because~it~arrives~after~the~last~row~of~the~environment. \\ If~you~go~on,~this~arrow~will~be~ignored. } -\@@_msg_new:nn { WithArrows~outside~math~mode } +\__witharrows_msg_new:nn { WithArrows~outside~math~mode } { - The~environment~\{\l_@@_type_env_str\}~should~be~used~only~in~math~mode~ + The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~in~math~mode~ like~the~environment~\{aligned\}~of~amsmath. \\ Nevertheless,~you~can~go~on. } -\@@_msg_new:nn { DispWithArrows~in~math~mode } +\__witharrows_msg_new:nn { DispWithArrows~in~math~mode } { - The~environment~\{\l_@@_type_env_str\}~should~be~used~only~outside~math~ + The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~outside~math~ mode~like~the~environment~\{align\}~of~amsmath. \\ This~error~is~fatal. } -\@@_msg_new:nn { Incompatible~options~in~Arrow } +\__witharrows_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_@@_previous_key_str'~set~in~the~same~command~ - \l_@@_string_Arrow_for_msg_str. \\ - \c_@@_option_ignored_str + '\l__witharrows_previous_key_str'~set~in~the~same~command~ + \l__witharrows_string_Arrow_for_msg_str. \\ + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Incompatible~options } +\__witharrows_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_@@_previous_key_str'~set~in~the~same~command~ - \bool_if:NT \l_@@_in_code_after_bool + '\l__witharrows_previous_key_str'~set~in~the~same~command~ + \bool_if:NT \l__witharrows_in_code_after_bool { - \l_@@_string_Arrow_for_msg_str\ - in~the~code-after~of~your~environment~\{\l_@@_type_env_str\} + \l__witharrows_string_Arrow_for_msg_str\ + in~the~code-after~of~your~environment~\{\l__witharrows_type_env_str\} }. \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Arrow~not~in~last~column } +\__witharrows_msg_new:nn { Arrow~not~in~last~column } { - You~should~use~the~command~\l_@@_string_Arrow_for_msg_str\ - only~in~the~last~column~(column~\int_use:N\l_@@_nb_cols_int)~ - of~your~environment~\{\l_@@_type_env_str\}.\\ + You~should~use~the~command~\l__witharrows_string_Arrow_for_msg_str\ + only~in~the~last~column~(column~\int_use:N\l__witharrows_nb_cols_int)~ + of~your~environment~\{\l__witharrows_type_env_str\}.\\ However~you~can~go~on~for~this~time. } -\@@_msg_new:nn { Wrong~line~in~Arrow } +\__witharrows_msg_new:nn { Wrong~line~in~Arrow } { The~specification~of~line~'#1'~you~use~in~the~command~ - \l_@@_string_Arrow_for_msg_str\ - in~the~'code-after'~of~\{\l_@@_type_env_str\}~doesn't~exist. \\ - \c_@@_option_ignored_str + \l__witharrows_string_Arrow_for_msg_str\ + in~the~'code-after'~of~\{\l__witharrows_type_env_str\}~doesn't~exist. \\ + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Both~lines~are~equal } +\__witharrows_msg_new:nn { Both~lines~are~equal } { - In~the~'code-after'~of~\{\l_@@_type_env_str\}~you~try~to~ + In~the~'code-after'~of~\{\l__witharrows_type_env_str\}~you~try~to~ draw~an~arrow~going~to~itself~from~the~line~'#1'.~This~is~not~possible. \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Wrong~line~specification~in~MultiArrow } +\__witharrows_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. } -\@@_msg_new:nn { Too~small~specification~for~MultiArrow } +\__witharrows_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_@@_command_ignored_str + \c__witharrows_command_ignored_str } -\@@_msg_new:nn { Not~allowed~in~DispWithArrows } +\__witharrows_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_@@_nb_cols_int)~of~\{\l_@@_type_env_str\}. \\ - \c_@@_option_ignored_str + (column~\int_use:N\l__witharrows_nb_cols_int)~of~\{\l__witharrows_type_env_str\}. \\ + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Not~allowed~in~WithArrows } +\__witharrows_msg_new:nn { Not~allowed~in~WithArrows } { - The~command~\token_to_str:N #1 is~not~allowed~in~\{\l_@@_type_env_str\}~ + The~command~\token_to_str:N #1 is~not~allowed~in~\{\l__witharrows_type_env_str\}~ (it's~allowed~in~the~last~column~of~\{DispWithArrows\}). \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Inexistent~v-node } +\__witharrows_msg_new:nn { Inexistent~v-node } { There~is~a~problem.~Maybe~you~have~put~a~command~\token_to_str:N\cr\ instead~of~a~command~\token_to_str:N\\~at~the~end~of~ the~row~\l_tmpa_int\ - of~your~environment~\{\l_@@_type_env_str\}. \\ + of~your~environment~\{\l__witharrows_type_env_str\}. \\ This~error~is~fatal. } -\@@_msg_new:nn { Option~xoffset~forbidden } +\__witharrows_msg_new:nn { Option~xoffset~forbidden } { You~can't~use~the~option~'xoffset'~in~the~command~ - \l_@@_string_Arrow_for_msg_str\ in~the~row~\int_use:N \g_@@_line_int\ - of~your~environment~\{\l_@@_type_env_str\}~ + \l__witharrows_string_Arrow_for_msg_str\ in~the~row~\int_use:N \g__witharrows_line_int\ + of~your~environment~\{\l__witharrows_type_env_str\}~ because~you~are~using~the~option~ - ' \int_compare:nNnTF \l_@@_pos_arrow_int = 7 + ' \int_compare:nNnTF \l__witharrows_pos_arrow_int = 7 { group } { groups } '.~It's~possible~for~an~independent~arrow~or~if~there~is~ only~one~arrow. \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nnn { Duplicate~name } +\__witharrows_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,~ @@ -1655,22 +1644,28 @@ } { The~names~already~defined~in~this~document~are:~ - \seq_use:Nnnn \g_@@_names_seq { ,~ } { ,~ } { ~and~ }. + \seq_use:Nnnn \g__witharrows_names_seq { ,~ } { ,~ } { ~and~ }. + } +\__witharrows_msg_new:nn { Invalid~specification~for~MultiArrow } + { + The~specification~of~rows~for~\token_to_str:N\MultiArrow\ + (i.e.~#1)~is~invalid. \\ + \c__witharrows_command_ignored_str } \cs_new_protected:Npn \WithArrowsNewStyle #1 #2 { \keys_if_exist:nnTF { WithArrows / Global } { #1 } - { \@@_error:nn { Key~already~defined } { #1 } } + { \__witharrows_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_@@_options_WithArrows_seq { \tl_to_str:n { #1 } } - \seq_put_right:Nx \l_@@_options_DispWithArrows_seq + \seq_put_right:Nx \l__witharrows_options_WithArrows_seq { \tl_to_str:n { #1 } } + \seq_put_right:Nx \l__witharrows_options_DispWithArrows_seq { \tl_to_str:n { #1 } } - \seq_put_right:Nx \l_@@_options_WithArrowsOptions_seq + \seq_put_right:Nx \l__witharrows_options_WithArrowsOptions_seq { \tl_to_str:N { #1 } } \group_begin: \msg_set:nnn { witharrows } { Unknown~option~WithArrowsOptions } @@ -1683,89 +1678,154 @@ \group_end: } } -\@@_msg_new:nn { Key~already~defined } +\__witharrows_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_@@_tikz_code_up_tl +\keys_define:nn { WithArrows / up-and-down } { - \draw [ rounded~corners ] - let \p1 = (#1) , - \p2 = (#2) - in (\p1) -- node { - #3 - } - (\x2,\y1) -- (\p2) ; + radius .dim_set:N = \l__witharrows_up_and_down_radius_dim , + radius .value_required:n = true , + width .code:n = + \str_case:nnF { #1 } + { + { min } { \dim_zero:N \l__witharrows_arrow_width_dim } + { max } { \dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim } + } + { \dim_set:Nn \l__witharrows_arrow_width_dim { #1 } } , + width .value_required:n = true , + unknown .code:n = \__witharrows_error:n { Option~unknown~for~up-and-down } } -\tl_const:Nn \c_@@_tikz_code_down_tl +\__witharrows_msg_new:nn { Option~unknown~for~up-and-down } { - \draw [ rounded~corners ] - let \p1 = (#1) , - \p2 = (#2) - in (\p1) -- (\x1,\y2) -- - node { - #3 - } - (\p2) ; + The~option~'\l_keys_key_tl'~is~unknown.~\c__witharrows_option_ignored_str + } +\tl_const:Nn \c__witharrows_tikz_code_up_tl + { + \dim_case:nnF \l__witharrows_arrow_width_dim + { + \c_max_dim + { + \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) -- node { #3 } (\x2,\y1) -- (\p2) ; + } + \c_zero_dim + { + \path node + { + \hbox_gset:Nn \g_tmpa_box { #3 } + \dim_gset:Nn \g_tmpa_dim + { \box_wd:N \g_tmpa_box + \l__witharrows_up_and_down_radius_dim } + } ; + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\x2-\g_tmpa_dim,\y1) + -- node { \box_use:N \g_tmpa_box } + (\x2-\l__witharrows_up_and_down_radius_dim,\y1) + [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] + -| (\p2) ; + } + } + { + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\x2 - \l__witharrows_arrow_width_dim - \l__witharrows_up_and_down_radius_dim,\y1) + -- node { #3 } (\x2-\l__witharrows_up_and_down_radius_dim,\y1) + [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] + -| (\p2) ; + } + } +\tl_const:Nn \c__witharrows_tikz_code_down_tl + { + \dim_case:nnF \l__witharrows_arrow_width_dim + { + \c_max_dim + { + \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) -- (\x1,\y2) -- node { #3 } (\p2) ; + } + \c_zero_dim + { + \path node + { + \hbox_gset:Nn \g_tmpa_box { #3 } + \dim_gset:Nn \g_tmpa_dim + { \box_wd:N \g_tmpa_box + \l__witharrows_up_and_down_radius_dim } + } ; + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) + { [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] -- (\x1,\y2) } + -- (\x1-\l__witharrows_up_and_down_radius_dim,\y2) + -- node { \box_use:N \g_tmpa_box } (\x1-\g_tmpa_dim,\y2) + -- ++ (-2mm,0) ; + } + } + { + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) + { [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] -- (\x1,\y2) } + -- (\x1-\l__witharrows_up_and_down_radius_dim,\y2) + -- node { #3 } + (\x1 - \l__witharrows_arrow_width_dim - \l__witharrows_up_and_down_radius_dim,\y2) + -- ++ (-2mm,0) ; + } } \keys_define:nn { WithArrows / Arrow / FirstPass } { - up .code:n = \@@_set_independent: , - down .code:n = \@@_set_independent: , + up .code:n = \__witharrows_set_independent_bis: , + down .code:n = \__witharrows_set_independent_bis: , up .default:n = NoValue , down .default:n = NoValue } \keys_define:nn { WithArrows / Arrow / SecondPass } { up .code:n = - \str_if_empty:NT \l_@@_previous_key_str + \str_if_empty:NT \l__witharrows_previous_key_str { - \str_set:Nn \l_@@_previous_key_str { up } + \str_set:Nn \l__witharrows_previous_key_str { up } \cs_if_exist:cTF { tikz@library@calc@loaded } { - \int_set:Nn \l_@@_pos_arrow_int \c_one_int - \bool_set_false:N \l_@@_wrap_lines_bool - \tl_set_eq:NN \l_@@_tikz_code_tl - \c_@@_tikz_code_up_tl + \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl + \int_set:Nn \l__witharrows_pos_arrow_int \c_one_int + \bool_set_false:N \l__witharrows_wrap_lines_bool + \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_up_tl } - { \@@_error:n { calc~not~loaded } } + { \__witharrows_error:n { calc~not~loaded } } } , down .code:n = - \str_if_empty:NT \l_@@_previous_key_str + \str_if_empty:NT \l__witharrows_previous_key_str { - \str_set:Nn \l_@@_previous_key_str { down } + \str_set:Nn \l__witharrows_previous_key_str { down } \cs_if_exist:cTF { tikz@library@calc@loaded } { - \int_set:Nn \l_@@_pos_arrow_int \c_one_int - \bool_set_false:N \l_@@_wrap_lines_bool - \tl_set_eq:NN \l_@@_tikz_code_tl - \c_@@_tikz_code_down_tl + \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl + \int_set:Nn \l__witharrows_pos_arrow_int \c_one_int + \bool_set_false:N \l__witharrows_wrap_lines_bool + \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_down_tl } - { \@@_error:n { calc~not~loaded } } + { \__witharrows_error:n { calc~not~loaded } } } } -\seq_put_right:Nn \l_@@_options_Arrow_seq { down } -\seq_put_right:Nn \l_@@_options_Arrow_seq { up } -\@@_msg_new:nn { varwidth~not~loaded } +\seq_put_right:Nn \l__witharrows_options_Arrow_seq { down } +\seq_put_right:Nn \l__witharrows_options_Arrow_seq { up } +\__witharrows_msg_new:nn { varwidth~not~loaded } { You~can't~use~the~option~'\l_keys_key_tl'~because~ you~don't~have~loaded~the~package~'varwidth'. \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { calc~not~loaded } +\__witharrows_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_@@_option_ignored_str - } -\@@_msg_new:nn { Invalid~specification~for~MultiArrow } - { - The~specification~of~rows~for~\token_to_str:N\MultiArrow\ - (i.e.~#1)~is~invalid. \\ - \c_@@_command_ignored_str + \c__witharrows_option_ignored_str } \catcode `\@ = 12 \ExplSyntaxOff diff --git a/Master/texmf-dist/source/generic/witharrows/witharrows.dtx b/Master/texmf-dist/source/generic/witharrows/witharrows.dtx index 8aef1584bb9..9b3e9c58691 100644 --- a/Master/texmf-dist/source/generic/witharrows/witharrows.dtx +++ b/Master/texmf-dist/source/generic/witharrows/witharrows.dtx @@ -15,8 +15,8 @@ % % \fi % \iffalse -\def\myfileversion{2.2} -\def\myfiledate{2019/12/10} +\def\myfileversion{2.3} +\def\myfiledate{2019/12/27} % % %<*batchfile> @@ -451,8 +451,7 @@ version 2005/12/01 or later. % However, a previouly defined command |\Arrow| may still be useful in an % environment |{WithArrows}|. If we want to use it in such an environment, it's % possible to change the name of the command |\Arrow| of the package -% \pkg{witharrows}: there is an option |command-name|\footnote{For historical -% reasons, there is an alias for this option: |CommandName|.} for this purpose. +% \pkg{witharrows}: there is an option |command-name| for this purpose. % The new name of the command must be given to the option \emph{without} the % leading backslash. % % @@ -477,11 +476,10 @@ version 2005/12/01 or later. % % \interitem % The environment |{WithArrows}| provides also two options |code-before| and -% |code-after|\footnote{For historical reasons, there are aliases for these -% options: |CodeBefore| and |CodeAfter|.} for LaTeX code that will be executed -% at the beginning and at the end of the environment. These options are not -% designed to be hooks (they are available only at the environment level and -% they do not apply to the nested environments). +% |code-after| for LaTeX code that will be executed at the beginning and at the +% end of the environment. These options are not designed to be hooks (they are +% available only at the environment level and they do not apply to the nested +% environments). % % % \begin{Verbatim} % $\begin{WithArrows}[~emphase#code-before = \color{blue}@] @@ -732,7 +730,7 @@ version 2005/12/01 or later. % {The options ``up'' and ``down'' for individual arrows} % % \label{up-and-down} -% At the local level, there are also two options for individuals arrows, called +% At the local level, there are also two options for individual arrows, called % ``|up|'' and ``|down|''. The following example illustrates these types of % arrows: % @@ -760,9 +758,70 @@ version 2005/12/01 or later. % % \vspace{1cm} % The options |up| and |down| require the package \pkg{varwidth} and the Tikz -% library \pkg{calc}. It they are not loaded, an error will be raised. +% library \pkg{calc}. It they are not previously loaded by the user, an error +% will be raised. % +% \vspace{1cm} +% In fact, the options |up| and |down| may be used with a value which is a list +% of couples key-value. +% \begin{itemize} +% \item The key |radius| is the radius of the rounded corner of the +% arrow.\footnote{The initial value of this parameter is $4$~pt, which is the +% default value of the ``|rounded corners|'' of Tikz.} +% \item The key |width| is the width of the (horizontal part of) the arrow: +% \begin{itemize} +% \item with the value |max|, the width of the arrow is ajusted with respect of +% the position of the nodes (that's the behaviour by default of the arrows |up| +% and |down| as shown in the previous example); +% \item with a numerical value, the width of the arrow is directly fixed to that +% numerical value; +% \item with the value |min|, the width of the arrow is adjusted with respect to +% the contents of the label of the arrow. +% \end{itemize} +% \end{itemize} +% +% \vspace{1cm} +% \begin{Verbatim} +% $\begin{WithArrows} +% A & = B +% \Arrow[~emphase#up={radius=0pt,width=2cm}@]{we try} \\ +% & = C + C + C + C + C + C + C + C +% \end{WithArrows}$ +% \end{Verbatim} +% +% \medskip +% $\begin{WithArrows} +% A & = B +% \Arrow[up={radius=0pt,width=2cm}]{we try} \\ +% & = C + C + C + C + C + C + C + C +% \end{WithArrows}$ % +% +% \vspace{1cm} +% \begin{Verbatim} +% $\begin{WithArrows} +% A & = B +% \Arrow[~emphase#up={width=min}@]{we try} \\ +% & = C + C + C + C + C + C + C + C +% \end{WithArrows}$ +% \end{Verbatim} +% +% \medskip +% $\begin{WithArrows} +% A & = B +% \Arrow[up={width=min}]{we try} \\ +% & = C + C + C + C + C + C + C + C +% \end{WithArrows}$ +% +% \vspace{1cm} +% The options relative to the arrows |up| and |down| can be fixed at the global +% or environment level with the key |up-and-down|. This key may also be used as +% prefix as illustrated now. +% % +% \begin{Verbatim} +% \WithArrowsOptions{up-and-down/width=min} +% \end{Verbatim} +% % \interitem % % \section{Comparison with the environment \{aligned\}} @@ -1273,13 +1332,12 @@ version 2005/12/01 or later. % P & \vartriangleleft Q % \end{WithArrows} % \right. -% \end{WithArrows}\] -% +% \end{WithArrows} % \begin{tikzpicture}[remember picture,overlay] % \draw [WithArrows/arrow] % ([xshift=3mm]wa-\WithArrowsLastEnv-2-1-2-r.south) % to ([xshift=3mm]wa-\WithArrowsLastEnv-3-2-r.north) ; -% \end{tikzpicture} +% \end{tikzpicture}\] % % \medskip % In this case, it would be easier to use a command |\Arrow| in |code-after| but @@ -1756,9 +1814,7 @@ version 2005/12/01 or later. % % \label{tikz-code} % -% The option |tikz-code|\footnote{For historical reasons, the option |tikz-code| -% has an alias: |TikzCode|.} allows the user to change the shape of the -% arrows.\footnote{If the option |wrap-lines| is used in an environment +% The option |tikz-code| allows the user to change the shape of the arrows.\footnote{If the option |wrap-lines| is used in an environment % |{DispWithArrows}| or |{DispWithArrows*}|, the option |tikz-code| will have no % effect for the arrows of this environment but only for the arrows in the % nested environments |{WithArrows}|.} @@ -2423,7 +2479,7 @@ version 2005/12/01 or later. % |expl3| code fails.\footnote{cf. % |tex.stackexchange.com/questions/57424/using-of-usetikzlibrary-in-an-expl3-package-fails|} % -% <@@=witharrows> +%<@@=witharrows> % % \begin{macrocode} %<*LaTeX> @@ -2806,7 +2862,8 @@ version 2005/12/01 or later. % We also define a style for the tips of arrow. The final user of the extension % \pkg{witharrows} will use this style if he wants to draw an arrow directly % with a Tikz command in his document (probably using the Tikz nodes created by -% |{WithArrows}| in the |\halign|). +% |{WithArrows}| in the |\halign|). This style is documented in the +% documentation of \pkg{witharrows}. % \begin{macrocode} \tikzset { @@ -2817,7 +2874,8 @@ version 2005/12/01 or later. % % \bigskip % The style |WithArrows/arrow| will be used to draw the arrows (more precisely, -% it will be passed to |every~path|). +% it will be passed to |every~path|). This style is documented in the +% documentation of \pkg{witharrows}. % \begin{macrocode} \tikzset { @@ -3085,7 +3143,25 @@ version 2005/12/01 or later. \bool_new:N \l_@@_subequations_bool %</LaTeX> % \end{macrocode} -% +% +% \bigskip +% The dimension |\l_@@_arrow_width_dim| is only for the arrows of type |up| and +% |down|. A value of |\c_max_dim| means that the arrow has the maximal possible +% width. A value of $0$~pt means that the the arrow has a width ajusted to the +% content of the node. +% \begin{macrocode} +\dim_new:N \l_@@_arrow_width_dim +\dim_set_eq:NN \l_@@_arrow_width_dim \c_max_dim +% \end{macrocode} +% +% \bigskip +% The parameter |\l_@@_up_and_down_radius_dim| corresponds to the option +% |radius_for_up_and_down|. +% \begin{macrocode} +\dim_new:N \l_@@_up_and_down_radius_dim +\dim_set:Nn \l_@@_up_and_down_radius_dim { 4 pt } +% \end{macrocode} +% % \bigskip % \subsection{The definition of the options} % @@ -3140,28 +3216,23 @@ version 2005/12/01 or later. max-length-of-arrow .value_required:n = true , max-length-of-arrow .initial:n = 2 cm , ygap .dim_set:N = \l_@@_ygap_dim , - ygap .value_required:n = true , ygap .initial:n = 0.4 ex , ystart .dim_set:N = \l_@@_ystart_dim , - ystart .value_required:n = true , + ystart .initial:n = 0.4 ex , more-columns .code:n = \@@_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } , - more-columns .value_forbidden:n = true, command-name .code:n = \str_set:Nn \l_@@_command_name_str { #1 } \str_set:Nx \l_@@_string_Arrow_for_msg_str { \c_backslash_str Arrow~alias~\c_backslash_str #1 } , - command-name .value_required:n = true , tikz-code .tl_set:N = \l_@@_tikz_code_tl, tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; , - tikz-code .value_required:n = true , TikzCode .meta:n = { tikz-code = #1 } , displaystyle .bool_set:N = \l_@@_displaystyle_bool , displaystyle .default:n = true , show-nodes .code:n = \tikzset { @@_node_style / .append~style = { draw , red } } , - show-nodes .value_forbidden:n = true, show-node-names .bool_set:N = \l_@@_show_node_names_bool , show-node-names .default:n = true , group .code:n = @@ -3172,7 +3243,6 @@ version 2005/12/01 or later. \int_set:Nn \l_@@_pos_arrow_int 7 } { \@@_error:n { Incompatible~options } } , - group .value_forbidden:n = true , groups .code:n = \str_if_empty:NTF \l_@@_previous_key_str { @@ -3183,35 +3253,23 @@ version 2005/12/01 or later. \int_set:Nn \l_@@_pos_arrow_int 6 } { \@@_error:n { Incompatible~options } } , - groups .value_forbidden:n = true , tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } , tikz .initial:n = \c_empty_tl , - tikz .value_required:n = true , - rr .value_forbidden:n = true , rr .code:n = \@@_fix_pos_option:n 3 , - ll .value_forbidden:n = true , ll .code:n = \@@_fix_pos_option:n 1 , - rl .value_forbidden:n = true , rl .code:n = \@@_fix_pos_option:n 2 , - lr .value_forbidden:n = true , lr .code:n = \@@_fix_pos_option:n 0 , - i .value_forbidden:n = true , i .code:n = \@@_fix_pos_option:n 5 , xoffset .dim_set:N = \l_@@_xoffset_dim , - xoffset .value_required:n = true , xoffset .initial:n = 3 mm , jot .dim_set:N = \jot , - jot .value_required:n = true , interline .skip_set:N = \l_@@_interline_skip , - interline .value_required:n = true , start-adjust .dim_set:N = \l_@@_start_adjust_dim , - start-adjust .value_required:n = true , start-adjust .initial:n = 0.4 ex , end-adjust .dim_set:N = \l_@@_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 , + up-and-down .code:n = \keys_set:nn { WithArrows / up-and-down } { #1 } , % \end{macrocode} % % \medskip @@ -3223,7 +3281,37 @@ version 2005/12/01 or later. no-arrows .code:n = \cs_set_eq:NN \@@_draw_arrows:nn \use_none:nn \cs_set_eq:NN \@@_draw_arrow:nnn \use_none:nnn , - no-arrows .value_forbidden:n = true , +% \end{macrocode} +% The following lines are the properties |.value_required:n| and +% |.value_forbidden:n| or the keys. These properties have no effect because they +% are not transmitted by inheritance (unfortunately). We maintain these lines in +% the \textsc{dtx} only for the case of a modification of |l3keys|. +% +% \begin{macrocode} +%<*comment> + ygap .value_required:n = true , + ystart .value_required:n = true , + more-columns .value_forbidden:n = true, + command-name .value_required:n = true , + tikz-code .value_required:n = true , + group .value_forbidden:n = true , + groups .value_forbidden:n = true , + tikz .value_required:n = true , + show-nodes .value_forbidden:n = true, + ll .value_forbidden:n = true , + rr .value_forbidden:n = true , + rl .value_forbidden:n = true , + lr .value_forbidden:n = true , + i .value_forbidden:n = true , + xoffset .value_required:n = true , + jot .value_required:n = true , + interline .value_required:n = true , + start-adjust .value_required:n = true , + end-adjust .value_required:n = true , + adjust .value_required:n = true , + up-and-down .value_required:n = true , + no-arrows .value_forbidden:n = true +%</comment> } % \end{macrocode} % @@ -3235,11 +3323,19 @@ version 2005/12/01 or later. \keys_define:nn { WithArrows / WithArrowsSpecific } { t .code:n = \int_set:Nn \l_@@_pos_env_int O , - t .value_forbidden:n = true , c .code:n = \int_set:Nn \l_@@_pos_env_int 1 , - c .value_forbidden:n = true , b .code:n = \int_set:Nn \l_@@_pos_env_int 2 , +% \end{macrocode} +% The following lines are the properties |.value_required:n| and +% |.value_forbidden:n| or the keys. These properties have no effect because they +% are not transmitted by inheritance (unfortunately). We maintain these lines in +% the \textsc{dtx} only for the case of a modification of |l3keys|. +% \begin{macrocode} +%<*comment> + t .value_forbidden:n = true , + c .value_forbidden:n = true , b .value_forbidden:n = true +%</comment> } % \end{macrocode} % @@ -3275,7 +3371,6 @@ version 2005/12/01 or later. fleqn .bool_set:N = \l_@@_fleqn_bool , fleqn .default:n = true , mathindent .dim_set:N = \l_@@_mathindent_dim , - mathindent .value_required:n = true , mathindent .initial:n = 25 pt , %<*LaTeX> notag .code:n = @@ -3299,11 +3394,9 @@ version 2005/12/01 or later. \group_end: } , subequations .default:n = true , - subequations .value_forbidden:n = true , nonumber .meta:n = notag , allow-multiple-labels .code:n = \@@_msg_redirect_name:nn { Multiple~labels } { none } , - allow-multiple-labels .value_forbidden:n = true , tagged-lines .code:n = \clist_set:Nn \l_@@_tags_clist { #1 } \clist_if_in:NnT \l_@@_tags_clist { first } @@ -3311,7 +3404,6 @@ version 2005/12/01 or later. \clist_remove_all:Nn \l_@@_tags_clist { first } \clist_put_left:Nn \l_@@_tags_clist \c_one_int } , - tagged-lines .value_required:n = true , %</LaTeX> wrap-lines .bool_set:N = \l_@@_wrap_lines_bool , wrap-lines .default:n = true , @@ -3333,10 +3425,22 @@ version 2005/12/01 or later. % behaviour (which corresponds to the standard behaviour of |{align}| of % \pkg{amsmath}). % \begin{macrocode} -%<*LaTeX>> +%<*LaTeX> standard-behaviour-with-items .bool_set:N = \l_@@_sbwi_bool , - standard-behaviour-with-items .default:n = true + standard-behaviour-with-items .default:n = true , %</LaTeX> +% \end{macrocode} +% The following lines are the properties |.value_required:n| and +% |.value_forbidden:n| or the keys. These properties have no effect because they +% are not transmitted by inheritance (unfortunately). We maintain these lines in +% the \textsc{dtx} only for the case of a modification of |l3keys|. +% \begin{macrocode} +%<*comment> + mathindent .value_required:n = true , + subequations .value_forbidden:n = true , + allow-multiple-labels .value_forbidden:n = true , + tagged-lines .value_required:n = true +%</comment> } % \end{macrocode} % @@ -3358,13 +3462,10 @@ version 2005/12/01 or later. { \@@_error:n { Duplicate~name } } { \seq_gput_left:NV \g_@@_names_seq \l_tmpa_str } \str_set_eq:NN \l_@@_name_str \l_tmpa_str , - name .value_required:n = true , code-before .code:n = \tl_put_right:Nn \l_@@_code_before_tl { #1 } , - code-before .value_required:n = true, CodeBefore .meta:n = { code-before = #1 } , code-after .code:n = \tl_put_right:Nn \l_@@_code_after_tl { #1 } , - code-after .value_required:n = true , - CodeAfter .meta:n = { code-after = #1 } , + CodeAfter .meta:n = { code-after = #1 } , format .code:n = \tl_if_empty:nTF { #1 } { \@@_error:n { Invalid~option~format } } @@ -3373,6 +3474,15 @@ version 2005/12/01 or later. { \tl_set:Nn \l_@@_format_str { #1 } } { \@@_error:n { Invalid~option~format } } } , +% \end{macrocode} +% The following lines are the properties |.value_required:n| and +% |.value_forbidden:n| or the keys. These properties have no effect because they +% are not transmitted by inheritance (unfortunately). Maybe we should delete +% these lines. +% \begin{macrocode} + code-before .value_required:n = true, + code-after .value_required:n = true , + name .value_required:n = true , format .value_required:n = true , } % \end{macrocode} @@ -3392,18 +3502,21 @@ version 2005/12/01 or later. WithArrows / WithArrowsSpecific , WithArrows / Env } , + WithArrows / up-and-down .inherit:n = WithArrows / up-and-down , DispWithArrows .inherit:n = { WithArrows / DispWithArrowsSpecific , WithArrows / Global , WithArrows / Env , } , + DispWithArrows / up-and-down .inherit:n = WithArrows / up-and-down , WithArrowsOptions .inherit:n = { WithArrows / Global , WithArrows / WithArrowsSpecific , - WithArrows / DispWithArrowsSpecific - } + WithArrows / DispWithArrowsSpecific , + } , + WithArrowsOptions / up-and-down .inherit:n = WithArrows / up-and-down } % \end{macrocode} % @@ -3420,7 +3533,7 @@ version 2005/12/01 or later. format, group, groups, i, interline, jot, ll, lr, max-length-of-arrow, more-columns, name, - no-arrows, rl, rr, + no-arrows, rl, rr, up-and-down, show-node-names, show-nodes, start-adjust, t, tikz, tikz-code, xoffset, ygap, ystart @@ -3434,7 +3547,7 @@ version 2005/12/01 or later. { unknown .code:n = \@@_sort_seq:N \l_@@_options_WithArrows_seq - \@@_error:n { Unknown~option~WithArrows } + \@@_error:n { Unknown~option~WithArrows } } % \end{macrocode} % @@ -3445,7 +3558,7 @@ version 2005/12/01 or later. left-brace .tl_set:N = \l_@@_left_brace_tl , unknown .code:n = \@@_sort_seq:N \l_@@_options_DispWithArrows_seq - \@@_error:n { Unknown~option~DispWithArrows } + \@@_error:n { Unknown~option~DispWithArrows } , } % \end{macrocode} % @@ -3459,9 +3572,9 @@ version 2005/12/01 or later. code-after, code-before, command-name, tikz-code, adjust, displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot, left-brace, ll, lr, max-length-of-arrow, mathindent, name, no-arrows, - replace-left-brace-by, rl, rr, show-node-names, show-nodes, start-adjust, - tikz, wrap-lines, xoffset, ygap, ystart, -%<*LaTeX>> + up-and-down, replace-left-brace-by, rl, rr, show-node-names, + show-nodes, start-adjust, tikz, wrap-lines, xoffset, ygap, ystart, +%<*LaTeX> allow-multiple-labels, tagged-lines, nonumber, notag %</LaTeX> } @@ -3490,9 +3603,10 @@ version 2005/12/01 or later. { allow-duplicate-names, b, c, command-name, more-columns, tikz-code, adjust, displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr, - mathindent, max-length-of-arrow, no-arrows, rl, rr, show-node-names, - show-nodes, start-adjust, t, tikz, wrap-lines, xoffset, ygap, ystart, -%<*LaTeX>> + mathindent, max-length-of-arrow, no-arrows, up-and-down, rl, rr, + show-node-names, show-nodes, start-adjust, t, tikz, wrap-lines, xoffset, + ygap, ystart, +%<*LaTeX> allow-multiple-labels, nonumber, notag, standard-behaviour-with-items, tagged-lines %</LaTeX> @@ -3503,22 +3617,33 @@ version 2005/12/01 or later. % The command |\@@_set_independent:| is a command without argument that will be % used to specify that the arrow will be ``independent'' (of the potential % groups of the option |group| or |groups|). This information will be stored in -% the field ``status'' of the arrow. Another value of the field ``status'' is -% ``new-group''. +% the field ``status'' of the arrow. Another possible value of the field +% ``status'' is ``new-group''. % \begin{macrocode} \cs_new_protected:Npn \@@_set_independent: { + \str_if_eq:VnF \l_keys_value_tl { NoValue } + { \@@_error:n { Value~for~a~key } } + \@@_set_independent_bis: + } +% \end{macrocode} +% +% \bigskip +% The command |\@@_set_independent_bis:| is the same as |\@@_set_independant:| +% except that the key may be used with a value. +% \begin{macrocode} +\cs_new_protected:Npn \@@_set_independent_bis: + { \str_if_empty:NTF \l_@@_previous_key_str { \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl \str_set:Nn \l_@@_status_arrow_str { independent } - \str_if_eq:VnF \l_keys_value_tl { NoValue } - { \@@_error:n { Value~for~a~key } } } { \@@_error:n { Incompatible~options~in~Arrow } } } % \end{macrocode} % +% % \bigskip % The options of an individual arrow are parsed twice. The first pass is when % the command |\Arrow| is read. The second pass is when the arrows are drawn @@ -6741,6 +6866,15 @@ version 2005/12/01 or later. % \end{macrocode} % % +% \begin{macrocode} +\@@_msg_new:nn { Invalid~specification~for~MultiArrow } + { + The~specification~of~rows~for~\token_to_str:N\MultiArrow\ + (i.e.~#1)~is~invalid. \\ + \c_@@_command_ignored_str + } +% \end{macrocode} +% % % \subsection{The command \textbackslash WithArrowsNewStyle} % @@ -6803,74 +6937,288 @@ version 2005/12/01 or later. % % This code is the only part of the code of \pkg{witharrows} which uses the % package \pkg{varwidth} and also the Tikz library |calc|. That's why we have -% decided not to load this package and this library. If they are not loaded, the -% user will have an error only when using the option |up| or the option |down|. +% decided not to load by default this package and this library. If they are not +% loaded, the user will have an error only when using the option |up| or the +% option |down|. +% +% \bigskip +% The keys |up| and |down| can be used with a value. This value is a list of +% pairs key-value specific to the options |up| and |down|. +% \begin{itemize} +% \item The key |radius| is the radius of the rounded corner of the arrow. +% \item The key |width| is the width of the horizontal part of the arrow. The +% corresponding dimension is |\l_@@_arrow_width_dim|. By convention, a value of +% $0$~pt for |\l_@@_arrow_width_dim| means that the option |width| has been used +% with the special value |min| and a value of |\c_max_dim| means that it has +% been used with the value |max|. +% \end{itemize} % -% \medskip +% \begin{macrocode} +\keys_define:nn { WithArrows / up-and-down } + { + radius .dim_set:N = \l_@@_up_and_down_radius_dim , + radius .value_required:n = true , + width .code:n = + \str_case:nnF { #1 } + { + { min } { \dim_zero:N \l_@@_arrow_width_dim } + { max } { \dim_set_eq:NN \l_@@_arrow_width_dim \c_max_dim } + } + { \dim_set:Nn \l_@@_arrow_width_dim { #1 } } , + width .value_required:n = true , + unknown .code:n = \@@_error:n { Option~unknown~for~up-and-down } + } +% \end{macrocode} +% +% +% \begin{macrocode} +\@@_msg_new:nn { Option~unknown~for~up-and-down } + { + The~option~'\l_keys_key_tl'~is~unknown.~\c_@@_option_ignored_str + } +% \end{macrocode} +% +% +% +% \bigskip % The token list |\c_@@_tikz_code_up_tl| is the value of |tikz-code| which will % be used for an option |up|. +% +% \bigskip % \begin{macrocode} -\tl_const:Nn \c_@@_tikz_code_up_tl - { - \draw [ rounded~corners ] - let \p1 = (#1) , - \p2 = (#2) - in (\p1) -- node { %<*LaTeX> - \dim_set:Nn \l_tmpa_dim { \x2 - \x1 } - \begin { varwidth } \l_tmpa_dim +\tl_const:Nn \c_@@_tikz_code_up_tl + { +% \end{macrocode} +% First the case when the key |up| is used with |width=max| (that's the default +% behaviour). +% \begin{macrocode} + \dim_compare:nNnTF \l_@@_arrow_width_dim = \c_max_dim + { + \draw [ rounded~corners = \l_@@_up_and_down_radius_dim ] + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) -- node + { + \dim_set:Nn \l_tmpa_dim { \x2 - \x1 } + \begin { varwidth } \l_tmpa_dim % \end{macrocode} % |\narrowragged| is a command of the package \pkg{varwidth}. % \begin{macrocode} - \narrowragged - #3 - \end { varwidth } + \narrowragged + #3 + \end { varwidth } + } + (\x2,\y1) -- (\p2) ; + } +% \end{macrocode} +% Now the case where the key |up| is used with |width=|\textsl{value} with +% \textsl{value} equal to |min| or a numeric value. The instruction |\path| +% doesn't draw anything: its aim is to compute the natural width of the label of +% the arrow. We can't use |\pgfextra| here because of the |\hbox_gset:Nn|. +% \begin{macrocode} + { + \path + let \p1 = ( #1 ) , \p2 = ( #2 ) + in node + { +% \end{macrocode} +% The length |\l_tmpa_dim| will be the maximal width of the box composed by the +% environment |{varwidth}|. +% \begin{macrocode} + \dim_set:Nn \l_tmpa_dim + { \x2 - \x1 - \l_@@_up_and_down_radius_dim } + \dim_compare:nNnF \l_@@_arrow_width_dim = \c_zero_dim + { + \dim_set:Nn \l_tmpa_dim + { \dim_min:nn \l_tmpa_dim \l_@@_arrow_width_dim } + } +% \end{macrocode} +% Now, the length |\l_tmpa_dim| is computed. We can compose the label in the box +% |\g_tmpa_box|. We have to do a global affectation to be able to exit the node. +% \begin{macrocode} + \hbox_gset:Nn \g_tmpa_box + { + \begin { varwidth } \l_tmpa_dim + \narrowragged + #3 + \end { varwidth } + } +% \end{macrocode} +% The length |\g_tmpa_dim| will be the width of the arrow (+ the radius of the +% corner). +% \begin{macrocode} + \dim_compare:nNnTF \l_@@_arrow_width_dim > \c_zero_dim + { \dim_gset_eq:NN \g_tmpa_dim \l_@@_arrow_width_dim } + { \dim_gset:Nn \g_tmpa_dim { \box_wd:N \g_tmpa_box } } + \dim_gadd:Nn \g_tmpa_dim \l_@@_up_and_down_radius_dim + } ; + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\x2-\g_tmpa_dim,\y1) + -- node { \box_use:N \g_tmpa_box } + (\x2-\l_@@_up_and_down_radius_dim,\y1) + [ rounded~corners = \l_@@_up_and_down_radius_dim ] + -| (\p2) ; + } + } %</LaTeX> %<*plain-TeX> - #3 -%</plain-TeX> - } - (\x2,\y1) -- (\p2) ; +\tl_const:Nn \c_@@_tikz_code_up_tl + { + \dim_case:nnF \l_@@_arrow_width_dim + { + \c_max_dim + { + \draw [ rounded~corners = \l_@@_up_and_down_radius_dim ] + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) -- node { #3 } (\x2,\y1) -- (\p2) ; + } + \c_zero_dim + { + \path node + { + \hbox_gset:Nn \g_tmpa_box { #3 } + \dim_gset:Nn \g_tmpa_dim + { \box_wd:N \g_tmpa_box + \l_@@_up_and_down_radius_dim } + } ; + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\x2-\g_tmpa_dim,\y1) + -- node { \box_use:N \g_tmpa_box } + (\x2-\l_@@_up_and_down_radius_dim,\y1) + [ rounded~corners = \l_@@_up_and_down_radius_dim ] + -| (\p2) ; + } + } + { + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\x2 - \l_@@_arrow_width_dim - \l_@@_up_and_down_radius_dim,\y1) + -- node { #3 } (\x2-\l_@@_up_and_down_radius_dim,\y1) + [ rounded~corners = \l_@@_up_and_down_radius_dim ] + -| (\p2) ; + } } +%</plain-TeX> % \end{macrocode} -% % -% \medskip -% Idem for the option |down|. +% +% \bigskip +% The code for a arrow of type |down| is similar to the previous code (for an +% arrow of type |up|). % \begin{macrocode} +%<*LaTeX> \tl_const:Nn \c_@@_tikz_code_down_tl { - \draw [ rounded~corners ] - let \p1 = (#1) , - \p2 = (#2) - in (\p1) -- (\x1,\y2) -- - node { -%<*LaTeX> - \dim_set:Nn \l_tmpa_dim { \x1 - \x2 } - \begin { varwidth } \l_tmpa_dim - \narrowragged - #3 - \end { varwidth } + \dim_compare:nNnTF \l_@@_arrow_width_dim = \c_max_dim + { + \draw [ rounded~corners = \l_@@_up_and_down_radius_dim ] + 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) ; + } + { + \path + let \p1 = ( #1 ) , \p2 = ( #2 ) + in node + { + \hbox_gset:Nn \g_tmpa_box + { + \dim_set:Nn \l_tmpa_dim +% \end{macrocode} +% The $2$~mm are for the tip of the arrow. We don't want the label of the arrow +% too close to the tip of arrow (we assume that to the tip of the arrow has its +% standard position, that is at the end of the arrow.). +% \begin{macrocode} + { \x1 - \x2 - \l_@@_up_and_down_radius_dim - 2 mm } + \begin { varwidth } \l_tmpa_dim + \narrowragged + #3 + \end { varwidth } + } + \dim_compare:nNnTF \l_@@_arrow_width_dim > \c_zero_dim + { \dim_gset_eq:NN \g_tmpa_dim \l_@@_arrow_width_dim } + { \dim_gset:Nn \g_tmpa_dim { \box_wd:N \g_tmpa_box } } + \dim_gadd:Nn \g_tmpa_dim \l_@@_up_and_down_radius_dim + } ; + + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) + { [ rounded~corners = \l_@@_up_and_down_radius_dim ] -- (\x1,\y2) } + -- (\x1-\l_@@_up_and_down_radius_dim,\y2) + -- node { \box_use:N \g_tmpa_box } (\x1-\g_tmpa_dim,\y2) + -- ++ (-2mm,0) ; + } + } %</LaTeX> -%<*plain-TeX> - #3 -%</plain-TeX> - } - (\p2) ; +% +%<*plain-TeX> +\tl_const:Nn \c_@@_tikz_code_down_tl + { + \dim_case:nnF \l_@@_arrow_width_dim + { + \c_max_dim + { + \draw [ rounded~corners = \l_@@_up_and_down_radius_dim ] + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) -- (\x1,\y2) -- node { #3 } (\p2) ; + } + \c_zero_dim + { + \path node + { + \hbox_gset:Nn \g_tmpa_box { #3 } + \dim_gset:Nn \g_tmpa_dim + { \box_wd:N \g_tmpa_box + \l_@@_up_and_down_radius_dim } + } ; + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) + { [ rounded~corners = \l_@@_up_and_down_radius_dim ] -- (\x1,\y2) } + -- (\x1-\l_@@_up_and_down_radius_dim,\y2) + -- node { \box_use:N \g_tmpa_box } (\x1-\g_tmpa_dim,\y2) + -- ++ (-2mm,0) ; + } + } + { + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) + { [ rounded~corners = \l_@@_up_and_down_radius_dim ] -- (\x1,\y2) } + -- (\x1-\l_@@_up_and_down_radius_dim,\y2) + -- node { #3 } + (\x1 - \l_@@_arrow_width_dim - \l_@@_up_and_down_radius_dim,\y2) + -- ++ (-2mm,0) ; + } } +%</plain-TeX> % \end{macrocode} -% +% +% \bigskip +% We recall that the options of the individual arrows are scanned twice. First, +% when are scanned when the command |\Arrow| occurs (we try to know whether the +% arrow is ``individual'', etc.). That's the first pass. % \begin{macrocode} \keys_define:nn { WithArrows / Arrow / FirstPass } { - up .code:n = \@@_set_independent: , - down .code:n = \@@_set_independent: , + up .code:n = \@@_set_independent_bis: , + down .code:n = \@@_set_independent_bis: , up .default:n = NoValue , down .default:n = NoValue } % \end{macrocode} % % \bigskip +% The options are scanned a second time when the arrow is actually drawn. That's +% the secon pass. % \begin{macrocode} \keys_define:nn { WithArrows / Arrow / SecondPass } { @@ -6884,6 +7232,7 @@ version 2005/12/01 or later. %</LaTeX> \cs_if_exist:cTF { tikz@library@calc@loaded } { + \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl \int_set:Nn \l_@@_pos_arrow_int \c_one_int % \end{macrocode} % We have to set |\l_@@_wrap_lines_bool| to |false| because, otherwise, if the @@ -6891,8 +7240,10 @@ version 2005/12/01 or later. % have a special affectation to |tikz-code| that will overwrite our affectation. % \begin{macrocode} \bool_set_false:N \l_@@_wrap_lines_bool - \tl_set_eq:NN \l_@@_tikz_code_tl - \c_@@_tikz_code_up_tl +% \end{macrocode} +% The main action occurs now. We change the value of the |tikz-code|. +% \begin{macrocode} + \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_up_tl } { \@@_error:n { calc~not~loaded } } %<*LaTeX> @@ -6910,10 +7261,10 @@ version 2005/12/01 or later. %</LaTeX> \cs_if_exist:cTF { tikz@library@calc@loaded } { + \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl \int_set:Nn \l_@@_pos_arrow_int \c_one_int \bool_set_false:N \l_@@_wrap_lines_bool - \tl_set_eq:NN \l_@@_tikz_code_tl - \c_@@_tikz_code_down_tl + \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_down_tl } { \@@_error:n { calc~not~loaded } } %<*LaTeX> @@ -6924,7 +7275,6 @@ version 2005/12/01 or later. } % \end{macrocode} % -% % % \begin{macrocode} \seq_put_right:Nn \l_@@_options_Arrow_seq { down } @@ -6951,15 +7301,6 @@ version 2005/12/01 or later. } % \end{macrocode} % -% \begin{macrocode} -\@@_msg_new:nn { Invalid~specification~for~MultiArrow } - { - The~specification~of~rows~for~\token_to_str:N\MultiArrow\ - (i.e.~#1)~is~invalid. \\ - \c_@@_command_ignored_str - } -% \end{macrocode} -% % % \begin{macrocode} %<*plain-TeX> @@ -7158,6 +7499,11 @@ version 2005/12/01 or later. % % The warning for an environment ending by |\\| has been transformed in |error|. % +% \subsection*{Changes between 2.2 and 2.3} +% +% Two options for the arrows of type |up| and |down|: |width| and |radius|. +% +% % \PrintIndex % % \tableofcontents diff --git a/Master/texmf-dist/tex/generic/witharrows/witharrows.sty b/Master/texmf-dist/tex/generic/witharrows/witharrows.sty index 9b6ea29e8bc..80edc3d2ab6 100644 --- a/Master/texmf-dist/tex/generic/witharrows/witharrows.sty +++ b/Master/texmf-dist/tex/generic/witharrows/witharrows.sty @@ -18,8 +18,8 @@ %% and version 1.3 or later is part of all distributions of %% LaTeX version 2005/12/01 or later. %% -\def\myfileversion{2.2} -\def\myfiledate{2019/12/10} +\def\myfileversion{2.3} +\def\myfiledate{2019/12/27} \RequirePackage{tikz} \RequirePackage{expl3}[2019/07/01] \usetikzlibrary{arrows.meta,bending} @@ -30,37 +30,37 @@ {\myfileversion} {Draws arrows for explanations on the right} \RequirePackage { xparse } [ 2019-01-01 ] -\bool_new:N \g_@@_footnotehyper_bool -\bool_new:N \g_@@_footnote_bool -\cs_new_protected:Npn \@@_msg_new:nn { \msg_new:nnn { witharrows } } -\cs_new_protected:Npn \@@_msg_new:nnn { \msg_new:nnnn { witharrows } } -\cs_new_protected:Npn \@@_msg_redirect_name:nn +\bool_new:N \g__witharrows_footnotehyper_bool +\bool_new:N \g__witharrows_footnote_bool +\cs_new_protected:Npn \__witharrows_msg_new:nn { \msg_new:nnn { witharrows } } +\cs_new_protected:Npn \__witharrows_msg_new:nnn { \msg_new:nnnn { witharrows } } +\cs_new_protected:Npn \__witharrows_msg_redirect_name:nn { \msg_redirect_name:nnn { witharrows } } -\cs_new_protected:Npn \@@_error:n { \msg_error:nn { witharrows } } -\cs_new_protected:Npn \@@_warning:n { \msg_warning:nn { witharrows } } -\cs_new_protected:Npn \@@_fatal:n { \msg_fatal:nn { witharrows } } -\cs_new_protected:Npn \@@_error:nn { \msg_error:nnn { witharrows } } -\cs_generate_variant:Nn \@@_error:nn { n x } +\cs_new_protected:Npn \__witharrows_error:n { \msg_error:nn { witharrows } } +\cs_new_protected:Npn \__witharrows_warning:n { \msg_warning:nn { witharrows } } +\cs_new_protected:Npn \__witharrows_fatal:n { \msg_fatal:nn { witharrows } } +\cs_new_protected:Npn \__witharrows_error:nn { \msg_error:nnn { witharrows } } +\cs_generate_variant:Nn \__witharrows_error:nn { n x } \keys_define:nn { WithArrows / package } { - footnote .bool_gset:N = \g_@@_footnote_bool , - footnotehyper .bool_gset:N = \g_@@_footnotehyper_bool , + footnote .bool_gset:N = \g__witharrows_footnote_bool , + footnotehyper .bool_gset:N = \g__witharrows_footnotehyper_bool , unknown .code:n = - \@@_fatal:n { Option~unknown~for~package } + \__witharrows_fatal:n { Option~unknown~for~package } } -\@@_msg_new:nn { Option~unknown~for~package } +\__witharrows_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 } -\@@_msg_new:nn { Option~incompatible~with~Beamer } +\__witharrows_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. } -\@@_msg_new:nn { footnote~with~footnotehyper~package } +\__witharrows_msg_new:nn { footnote~with~footnotehyper~package } { You~can't~use~the~option~'footnote'~because~the~package~ footnotehyper~has~already~been~loaded.~ @@ -69,7 +69,7 @@ of~the~package~footnotehyper.\\ If~you~go~on,~the~package~footnote~won't~be~loaded. } -\@@_msg_new:nn { footnotehyper~with~footnote~package } +\__witharrows_msg_new:nn { footnotehyper~with~footnote~package } { You~can't~use~the~option~'footnotehyper'~because~the~package~ footnote~has~already~been~loaded.~ @@ -78,29 +78,29 @@ of~the~package~footnote.\\ If~you~go~on,~the~package~footnotehyper~won't~be~loaded. } -\bool_if:NT \g_@@_footnote_bool +\bool_if:NT \g__witharrows_footnote_bool { \@ifclassloaded { beamer } { \msg_info:nn { witharrows } { Option~incompatible~with~Beamer } } { \@ifpackageloaded { footnotehyper } - { \@@_error:n { footnote~with~footnotehyper~package } } + { \__witharrows_error:n { footnote~with~footnotehyper~package } } { \usepackage { footnote } } } } -\bool_if:NT \g_@@_footnotehyper_bool +\bool_if:NT \g__witharrows_footnotehyper_bool { \@ifclassloaded { beamer } - { \@@_info:n { Option~incompatible~with~Beamer } } + { \__witharrows_info:n { Option~incompatible~with~Beamer } } { \@ifpackageloaded { footnote } - { \@@_error:n { footnotehyper~with~footnote~package } } + { \__witharrows_error:n { footnotehyper~with~footnote~package } } { \usepackage { footnotehyper } } } - \bool_gset_true:N \g_@@_footnote_bool + \bool_gset_true:N \g__witharrows_footnote_bool } -\bool_new:N \c_@@_leqno_bool -\DeclareOption { leqno } { \bool_set_true:N \c_@@_leqno_bool } +\bool_new:N \c__witharrows_leqno_bool +\DeclareOption { leqno } { \bool_set_true:N \c__witharrows_leqno_bool } \DeclareOption* { } \ProcessOptions* \cs_generate_variant:Nn \tl_put_right:Nn { N v } @@ -113,28 +113,28 @@ typedref, unicode-math, varwidth } { - \bool_new:c { c_@@_#1_loaded_bool } + \bool_new:c { c__witharrows_#1_loaded_bool } \@ifpackageloaded { #1 } - { \bool_set_true:c { c_@@_#1_loaded_bool } } + { \bool_set_true:c { c__witharrows_#1_loaded_bool } } { } } } \sys_if_engine_luatex:TF { - \cs_new_protected:Npn \@@_strcmp:nn #1 #2 + \cs_new_protected:Npn \__witharrows_strcmp:nn #1 #2 { \lua_now:e { l3kernel.strcmp('#1','#2') } } } { - \cs_new_protected:Npn \@@_strcmp:nn #1 #2 + \cs_new_protected:Npn \__witharrows_strcmp:nn #1 #2 { \tex_strcmp:D { #1 } { #2 } } } -\cs_new_protected:Npn \@@_sort_seq:N #1 +\cs_new_protected:Npn \__witharrows_sort_seq:N #1 { \seq_sort:Nn #1 { \int_compare:nNnTF { - \@@_strcmp:nn + \__witharrows_strcmp:nn { \str_lower_case:n { ##1 } } { \str_lower_case:n { ##2 } } } @@ -143,7 +143,7 @@ \sort_return_same: } } -\cs_new_protected:Npn \@@_convert_to_str_seq:N #1 +\cs_new_protected:Npn \__witharrows_convert_to_str_seq:N #1 { \seq_clear:N \l_tmpa_seq \seq_map_inline:Nn #1 @@ -152,12 +152,12 @@ } \seq_set_eq:NN #1 \l_tmpa_seq } -\cs_new_protected:Npn \@@_set_seq_of_str_from_clist:Nn #1 #2 +\cs_new_protected:Npn \__witharrows_set_seq_of_str_from_clist:Nn #1 #2 { \seq_set_from_clist:Nn #1 { #2 } - \@@_convert_to_str_seq:N #1 + \__witharrows_convert_to_str_seq:N #1 } -\cs_new_protected:Npn \@@_save:N #1 +\cs_new_protected:Npn \__witharrows_save:N #1 { \seq_set_split:Nxx \l_tmpa_seq { \char_generate:nn { `_ } { 12 } } @@ -173,7 +173,7 @@ \use:c { \l_tmpa_str _gset_eq:cN } { g _\seq_use:Nnnn \l_tmpa_seq _ _ _ } #1 } -\cs_new_protected:Npn \@@_restore:N #1 +\cs_new_protected:Npn \__witharrows_restore:N #1 { \seq_set_split:Nxx \l_tmpa_seq { \char_generate:nn { `_ } { 12 } } @@ -185,21 +185,21 @@ } \tikzset { - @@_node_style / .style = + __witharrows_node_style / .style = { - above = \l_@@_ystart_dim , + above = \l__witharrows_ystart_dim , inner~sep = \c_zero_dim , minimum~width = \c_zero_dim , - minimum~height = \l_@@_ygap_dim + minimum~height = \l__witharrows_ygap_dim } } \tikzset { - @@_standard / .style = + __witharrows_standard / .style = { remember~picture , overlay , - name~prefix = wa - \l_@@_prefix_str - + name~prefix = wa - \l__witharrows_prefix_str - } } \tikzset @@ -221,10 +221,10 @@ } \AtBeginDocument { - \bool_if:NTF \c_@@_amsmath_loaded_bool + \bool_if:NTF \c__witharrows_amsmath_loaded_bool { - \seq_put_right:Nn \l_@@_options_WithArrowsOptions_seq { subequations } - \seq_put_right:Nn \l_@@_options_DispWithArrows_seq { subequations } + \seq_put_right:Nn \l__witharrows_options_WithArrowsOptions_seq { subequations } + \seq_put_right:Nn \l__witharrows_options_DispWithArrows_seq { subequations } } { \cs_new_protected:Npn \spread@equation @@ -234,240 +234,218 @@ } } } -\tl_new:N \l_@@_left_brace_tl -\tl_set_eq:NN \l_@@_left_brace_tl \c_novalue_tl -\bool_new:N \l_@@_in_WithArrows_bool -\bool_new:N \l_@@_in_DispWithArrows_bool -\bool_new:N \l_@@_in_code_after_bool -\seq_new:N \g_@@_position_in_the_tree_seq -\seq_gput_right:Nn \g_@@_position_in_the_tree_seq 1 -\int_new:N \g_@@_last_env_int -\int_new:N \l_@@_pos_env_int -\int_new:N \l_@@_pos_arrow_int -\int_set:Nn \l_@@_pos_arrow_int 3 -\seq_new:N \g_@@_arrow_int_seq -\int_new:N \g_@@_arrow_int -\seq_new:N \g_@@_line_int_seq -\int_new:N \g_@@_line_int -\seq_new:N \g_@@_col_int_seq -\int_new:N \g_@@_col_int -\seq_new:N \g_@@_static_col_int_seq -\int_new:N \g_@@_static_col_int -\clist_new:N \l_@@_tags_clist -\clist_set:Nn \l_@@_tags_clist { all } -\cs_new_protected:Npn \@@_test_if_to_tag: - { - \clist_if_in:NVT \l_@@_tags_clist \g_@@_line_int - { \clist_set:Nn \l_@@_tags_clist { all } } - } -\str_new:N \l_@@_command_name_str -\str_set:Nn \l_@@_command_name_str { Arrow } -\str_new:N \l_@@_string_Arrow_for_msg_str -\str_set:Nx \l_@@_string_Arrow_for_msg_str { \token_to_str:N \Arrow } -\seq_new:N \g_@@_names_seq -\bool_new:N \l_@@_sbwi_bool -\bool_new:N \l_@@_tag_star_bool -\bool_new:N \l_@@_tag_next_line_bool -\bool_new:N \l_@@_qedhere_bool -\bool_new:N \l_@@_in_first_columns_bool -\bool_new:N \l_@@_new_group_bool -\bool_new:N \l_@@_initial_r_bool -\bool_new:N \l_@@_final_r_bool -\tl_new:N \l_@@_initial_tl -\tl_new:N \l_@@_final_tl -\int_new:N \l_@@_nb_cols_int -\str_new:N \l_@@_format_str -\bool_new:N \l_@@_subequations_bool -\cs_new_protected:Npn \@@_eval_if_allowed:n #1 - { - \str_if_empty:NTF \l_@@_previous_key_str +\tl_new:N \l__witharrows_left_brace_tl +\tl_set_eq:NN \l__witharrows_left_brace_tl \c_novalue_tl +\bool_new:N \l__witharrows_in_WithArrows_bool +\bool_new:N \l__witharrows_in_DispWithArrows_bool +\bool_new:N \l__witharrows_in_code_after_bool +\seq_new:N \g__witharrows_position_in_the_tree_seq +\seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1 +\int_new:N \g__witharrows_last_env_int +\int_new:N \l__witharrows_pos_env_int +\int_new:N \l__witharrows_pos_arrow_int +\int_set:Nn \l__witharrows_pos_arrow_int 3 +\seq_new:N \g__witharrows_arrow_int_seq +\int_new:N \g__witharrows_arrow_int +\seq_new:N \g__witharrows_line_int_seq +\int_new:N \g__witharrows_line_int +\seq_new:N \g__witharrows_col_int_seq +\int_new:N \g__witharrows_col_int +\seq_new:N \g__witharrows_static_col_int_seq +\int_new:N \g__witharrows_static_col_int +\clist_new:N \l__witharrows_tags_clist +\clist_set:Nn \l__witharrows_tags_clist { all } +\cs_new_protected:Npn \__witharrows_test_if_to_tag: + { + \clist_if_in:NVT \l__witharrows_tags_clist \g__witharrows_line_int + { \clist_set:Nn \l__witharrows_tags_clist { all } } + } +\str_new:N \l__witharrows_command_name_str +\str_set:Nn \l__witharrows_command_name_str { Arrow } +\str_new:N \l__witharrows_string_Arrow_for_msg_str +\str_set:Nx \l__witharrows_string_Arrow_for_msg_str { \token_to_str:N \Arrow } +\seq_new:N \g__witharrows_names_seq +\bool_new:N \l__witharrows_sbwi_bool +\bool_new:N \l__witharrows_tag_star_bool +\bool_new:N \l__witharrows_tag_next_line_bool +\bool_new:N \l__witharrows_qedhere_bool +\bool_new:N \l__witharrows_in_first_columns_bool +\bool_new:N \l__witharrows_new_group_bool +\bool_new:N \l__witharrows_initial_r_bool +\bool_new:N \l__witharrows_final_r_bool +\tl_new:N \l__witharrows_initial_tl +\tl_new:N \l__witharrows_final_tl +\int_new:N \l__witharrows_nb_cols_int +\str_new:N \l__witharrows_format_str +\bool_new:N \l__witharrows_subequations_bool +\dim_new:N \l__witharrows_arrow_width_dim +\dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim +\dim_new:N \l__witharrows_up_and_down_radius_dim +\dim_set:Nn \l__witharrows_up_and_down_radius_dim { 4 pt } +\cs_new_protected:Npn \__witharrows_eval_if_allowed:n #1 + { + \str_if_empty:NTF \l__witharrows_previous_key_str { - \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl + \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl #1 } - { \@@_error:n { Incompatible~options } } + { \__witharrows_error:n { Incompatible~options } } } -\cs_new_protected:Npn \@@_fix_pos_option:n #1 - { \@@_eval_if_allowed:n { \int_set:Nn \l_@@_pos_arrow_int { #1 } } } +\cs_new_protected:Npn \__witharrows_fix_pos_option:n #1 + { \__witharrows_eval_if_allowed:n { \int_set:Nn \l__witharrows_pos_arrow_int { #1 } } } \keys_define:nn { WithArrows / Global } { - max-length-of-arrow .dim_set:N = \l_@@_max_length_of_arrow_dim , + max-length-of-arrow .dim_set:N = \l__witharrows_max_length_of_arrow_dim , max-length-of-arrow .value_required:n = true , max-length-of-arrow .initial:n = 2 cm , - ygap .dim_set:N = \l_@@_ygap_dim , - ygap .value_required:n = true , + ygap .dim_set:N = \l__witharrows_ygap_dim , ygap .initial:n = 0.4 ex , - ystart .dim_set:N = \l_@@_ystart_dim , - ystart .value_required:n = true , + ystart .dim_set:N = \l__witharrows_ystart_dim , + ystart .initial:n = 0.4 ex , more-columns .code:n = - \@@_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } , - more-columns .value_forbidden:n = true, + \__witharrows_msg_redirect_name:nn { Too~much~columns~in~WithArrows } { none } , command-name .code:n = - \str_set:Nn \l_@@_command_name_str { #1 } - \str_set:Nx \l_@@_string_Arrow_for_msg_str + \str_set:Nn \l__witharrows_command_name_str { #1 } + \str_set:Nx \l__witharrows_string_Arrow_for_msg_str { \c_backslash_str Arrow~alias~\c_backslash_str #1 } , - command-name .value_required:n = true , - tikz-code .tl_set:N = \l_@@_tikz_code_tl, + tikz-code .tl_set:N = \l__witharrows_tikz_code_tl, tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; , - tikz-code .value_required:n = true , TikzCode .meta:n = { tikz-code = #1 } , - displaystyle .bool_set:N = \l_@@_displaystyle_bool , + displaystyle .bool_set:N = \l__witharrows_displaystyle_bool , displaystyle .default:n = true , show-nodes .code:n = - \tikzset { @@_node_style / .append~style = { draw , red } } , - show-nodes .value_forbidden:n = true, - show-node-names .bool_set:N = \l_@@_show_node_names_bool , + \tikzset { __witharrows_node_style / .append~style = { draw , red } } , + show-node-names .bool_set:N = \l__witharrows_show_node_names_bool , show-node-names .default:n = true , group .code:n = - \str_if_empty:NTF \l_@@_previous_key_str + \str_if_empty:NTF \l__witharrows_previous_key_str { - \str_set:Nn \l_@@_previous_key_str { group } - \seq_remove_all:Nn \l_@@_options_Arrow_seq { xoffset } - \int_set:Nn \l_@@_pos_arrow_int 7 + \str_set:Nn \l__witharrows_previous_key_str { group } + \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset } + \int_set:Nn \l__witharrows_pos_arrow_int 7 } - { \@@_error:n { Incompatible~options } } , - group .value_forbidden:n = true , + { \__witharrows_error:n { Incompatible~options } } , groups .code:n = - \str_if_empty:NTF \l_@@_previous_key_str + \str_if_empty:NTF \l__witharrows_previous_key_str { - \str_set:Nn \l_@@_previous_key_str { groups } - \seq_if_in:NnF \l_@@_options_Arrow_seq { new-group } - { \seq_put_right:Nn \l_@@_options_Arrow_seq { new-group } } - \seq_remove_all:Nn \l_@@_options_Arrow_seq { xoffset } - \int_set:Nn \l_@@_pos_arrow_int 6 + \str_set:Nn \l__witharrows_previous_key_str { groups } + \seq_if_in:NnF \l__witharrows_options_Arrow_seq { new-group } + { \seq_put_right:Nn \l__witharrows_options_Arrow_seq { new-group } } + \seq_remove_all:Nn \l__witharrows_options_Arrow_seq { xoffset } + \int_set:Nn \l__witharrows_pos_arrow_int 6 } - { \@@_error:n { Incompatible~options } } , - groups .value_forbidden:n = true , + { \__witharrows_error:n { Incompatible~options } } , 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 = \@@_fix_pos_option:n 3 , - ll .value_forbidden:n = true , - ll .code:n = \@@_fix_pos_option:n 1 , - rl .value_forbidden:n = true , - rl .code:n = \@@_fix_pos_option:n 2 , - lr .value_forbidden:n = true , - lr .code:n = \@@_fix_pos_option:n 0 , - i .value_forbidden:n = true , - i .code:n = \@@_fix_pos_option:n 5 , - xoffset .dim_set:N = \l_@@_xoffset_dim , - xoffset .value_required:n = true , + rr .code:n = \__witharrows_fix_pos_option:n 3 , + ll .code:n = \__witharrows_fix_pos_option:n 1 , + rl .code:n = \__witharrows_fix_pos_option:n 2 , + lr .code:n = \__witharrows_fix_pos_option:n 0 , + i .code:n = \__witharrows_fix_pos_option:n 5 , + xoffset .dim_set:N = \l__witharrows_xoffset_dim , xoffset .initial:n = 3 mm , jot .dim_set:N = \jot , - jot .value_required:n = true , - interline .skip_set:N = \l_@@_interline_skip , - interline .value_required:n = true , - start-adjust .dim_set:N = \l_@@_start_adjust_dim , - start-adjust .value_required:n = true , + interline .skip_set:N = \l__witharrows_interline_skip , + start-adjust .dim_set:N = \l__witharrows_start_adjust_dim , start-adjust .initial:n = 0.4 ex , - end-adjust .dim_set:N = \l_@@_end_adjust_dim , - end-adjust .value_required:n = true , + end-adjust .dim_set:N = \l__witharrows_end_adjust_dim , end-adjust .initial:n = 0.4 ex , adjust .meta:n = { start-adjust = #1 , end-adjust = #1 } , - adjust .value_required:n = true , + up-and-down .code:n = \keys_set:nn { WithArrows / up-and-down } { #1 } , no-arrows .code:n = - \cs_set_eq:NN \@@_draw_arrows:nn \use_none:nn - \cs_set_eq:NN \@@_draw_arrow:nnn \use_none:nnn , - no-arrows .value_forbidden:n = true , + \cs_set_eq:NN \__witharrows_draw_arrows:nn \use_none:nn + \cs_set_eq:NN \__witharrows_draw_arrow:nnn \use_none:nnn , } \keys_define:nn { WithArrows / WithArrowsSpecific } { - t .code:n = \int_set:Nn \l_@@_pos_env_int O , - t .value_forbidden:n = true , - c .code:n = \int_set:Nn \l_@@_pos_env_int 1 , - c .value_forbidden:n = true , - b .code:n = \int_set:Nn \l_@@_pos_env_int 2 , - b .value_forbidden:n = true + t .code:n = \int_set:Nn \l__witharrows_pos_env_int O , + c .code:n = \int_set:Nn \l__witharrows_pos_env_int 1 , + b .code:n = \int_set:Nn \l__witharrows_pos_env_int 2 , } -\clist_new:N \c_@@_extensible_delimiters_clist -\clist_set:Nn \c_@@_extensible_delimiters_clist +\clist_new:N \c__witharrows_extensible_delimiters_clist +\clist_set:Nn \c__witharrows_extensible_delimiters_clist { ., \{, (, [, \lbrace, \lbrack, \lgroup, \langle, \lmoustache, \lceil, \lfloor } \AtBeginDocument { \bool_if:nT - { \c_@@_amsmath_loaded_bool || \use:c { c_@@_unicode-math_loaded_bool } } + { \c__witharrows_amsmath_loaded_bool || \use:c { c__witharrows_unicode-math_loaded_bool } } { - \clist_put_right:Nn \c_@@_extensible_delimiters_clist { \lvert, \lVert } + \clist_put_right:Nn \c__witharrows_extensible_delimiters_clist { \lvert, \lVert } } } \keys_define:nn { WithArrows / DispWithArrowsSpecific } { - fleqn .bool_set:N = \l_@@_fleqn_bool , + fleqn .bool_set:N = \l__witharrows_fleqn_bool , fleqn .default:n = true , - mathindent .dim_set:N = \l_@@_mathindent_dim , - mathindent .value_required:n = true , + mathindent .dim_set:N = \l__witharrows_mathindent_dim , mathindent .initial:n = 25 pt , notag .code:n = \str_if_eq:nnTF { #1 } { true } - { \clist_clear:N \l_@@_tags_clist } - { \clist_set:Nn \l_@@_tags_clist { all } } , + { \clist_clear:N \l__witharrows_tags_clist } + { \clist_set:Nn \l__witharrows_tags_clist { all } } , notag .default:n = true , subequations .code:n = - \bool_if:NTF \c_@@_amsmath_loaded_bool - { \bool_set_true:N \l_@@_subequations_bool } + \bool_if:NTF \c__witharrows_amsmath_loaded_bool + { \bool_set_true:N \l__witharrows_subequations_bool } { - \@@_error:n { amsmath~not~loaded } + \__witharrows_error:n { amsmath~not~loaded } \group_begin: \globaldefs = 1 - \@@_msg_redirect_name:nn { amsmath~not~loaded } { info } + \__witharrows_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 = - \@@_msg_redirect_name:nn { Multiple~labels } { none } , - allow-multiple-labels .value_forbidden:n = true , + \__witharrows_msg_redirect_name:nn { Multiple~labels } { none } , tagged-lines .code:n = - \clist_set:Nn \l_@@_tags_clist { #1 } - \clist_if_in:NnT \l_@@_tags_clist { first } + \clist_set:Nn \l__witharrows_tags_clist { #1 } + \clist_if_in:NnT \l__witharrows_tags_clist { first } { - \clist_remove_all:Nn \l_@@_tags_clist { first } - \clist_put_left:Nn \l_@@_tags_clist \c_one_int + \clist_remove_all:Nn \l__witharrows_tags_clist { first } + \clist_put_left:Nn \l__witharrows_tags_clist \c_one_int } , - tagged-lines .value_required:n = true , - wrap-lines .bool_set:N = \l_@@_wrap_lines_bool , + wrap-lines .bool_set:N = \l__witharrows_wrap_lines_bool , wrap-lines .default:n = true , replace-left-brace-by .code:n = { \tl_set:Nx \l_tmpa_tl { \tl_head:n { #1 } } \clist_if_in:NVTF - \c_@@_extensible_delimiters_clist + \c__witharrows_extensible_delimiters_clist \l_tmpa_tl - { \tl_set:Nn \l_@@_replace_left_brace_by_tl { #1 } } - { \@@_error:n { Bad~value~for~replace~brace~by } } + { \tl_set:Nn \l__witharrows_replace_left_brace_by_tl { #1 } } + { \__witharrows_error:n { Bad~value~for~replace~brace~by } } } , replace-left-brace-by .initial:n = \lbrace , - standard-behaviour-with-items .bool_set:N = \l_@@_sbwi_bool , - standard-behaviour-with-items .default:n = true + standard-behaviour-with-items .bool_set:N = \l__witharrows_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_@@_names_seq \l_tmpa_str - { \@@_error:n { Duplicate~name } } - { \seq_gput_left:NV \g_@@_names_seq \l_tmpa_str } - \str_set_eq:NN \l_@@_name_str \l_tmpa_str , - name .value_required:n = true , - code-before .code:n = \tl_put_right:Nn \l_@@_code_before_tl { #1 } , - code-before .value_required:n = true, + \seq_if_in:NVTF \g__witharrows_names_seq \l_tmpa_str + { \__witharrows_error:n { Duplicate~name } } + { \seq_gput_left:NV \g__witharrows_names_seq \l_tmpa_str } + \str_set_eq:NN \l__witharrows_name_str \l_tmpa_str , + code-before .code:n = \tl_put_right:Nn \l__witharrows_code_before_tl { #1 } , CodeBefore .meta:n = { code-before = #1 } , - code-after .code:n = \tl_put_right:Nn \l_@@_code_after_tl { #1 } , - code-after .value_required:n = true , - CodeAfter .meta:n = { code-after = #1 } , + code-after .code:n = \tl_put_right:Nn \l__witharrows_code_after_tl { #1 } , + CodeAfter .meta:n = { code-after = #1 } , format .code:n = \tl_if_empty:nTF { #1 } - { \@@_error:n { Invalid~option~format } } + { \__witharrows_error:n { Invalid~option~format } } { \regex_match:nnTF { \A[rcl]*\Z } { #1 } - { \tl_set:Nn \l_@@_format_str { #1 } } - { \@@_error:n { Invalid~option~format } } + { \tl_set:Nn \l__witharrows_format_str { #1 } } + { \__witharrows_error:n { Invalid~option~format } } } , + code-before .value_required:n = true, + code-after .value_required:n = true , + name .value_required:n = true , format .value_required:n = true , } \keys_define:nn { WithArrows } @@ -478,98 +456,106 @@ WithArrows / WithArrowsSpecific , WithArrows / Env } , + WithArrows / up-and-down .inherit:n = WithArrows / up-and-down , DispWithArrows .inherit:n = { WithArrows / DispWithArrowsSpecific , WithArrows / Global , WithArrows / Env , } , + DispWithArrows / up-and-down .inherit:n = WithArrows / up-and-down , WithArrowsOptions .inherit:n = { WithArrows / Global , WithArrows / WithArrowsSpecific , - WithArrows / DispWithArrowsSpecific - } + WithArrows / DispWithArrowsSpecific , + } , + WithArrowsOptions / up-and-down .inherit:n = WithArrows / up-and-down } -\seq_new:N \l_@@_options_WithArrows_seq -\@@_set_seq_of_str_from_clist:Nn \l_@@_options_WithArrows_seq +\seq_new:N \l__witharrows_options_WithArrows_seq +\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrows_seq { adjust, b, c, code-after, code-before, command-name, displaystyle, end-adjust, format, group, groups, i, interline, jot, ll, lr, max-length-of-arrow, more-columns, name, - no-arrows, rl, rr, + no-arrows, rl, rr, up-and-down, show-node-names, show-nodes, start-adjust, t, tikz, tikz-code, xoffset, ygap, ystart } -\@@_convert_to_str_seq:N \l_@@_options_WithArrows_seq +\__witharrows_convert_to_str_seq:N \l__witharrows_options_WithArrows_seq \keys_define:nn { WithArrows / WithArrows } { unknown .code:n = - \@@_sort_seq:N \l_@@_options_WithArrows_seq - \@@_error:n { Unknown~option~WithArrows } + \__witharrows_sort_seq:N \l__witharrows_options_WithArrows_seq + \__witharrows_error:n { Unknown~option~WithArrows } } \keys_define:nn { WithArrows / DispWithArrows } { - left-brace .tl_set:N = \l_@@_left_brace_tl , + left-brace .tl_set:N = \l__witharrows_left_brace_tl , unknown .code:n = - \@@_sort_seq:N \l_@@_options_DispWithArrows_seq - \@@_error:n { Unknown~option~DispWithArrows } + \__witharrows_sort_seq:N \l__witharrows_options_DispWithArrows_seq + \__witharrows_error:n { Unknown~option~DispWithArrows } , } -\seq_new:N \l_@@_options_DispWithArrows_seq -\@@_set_seq_of_str_from_clist:Nn \l_@@_options_DispWithArrows_seq +\seq_new:N \l__witharrows_options_DispWithArrows_seq +\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_DispWithArrows_seq { code-after, code-before, command-name, tikz-code, adjust, displaystyle, end-adjust, fleqn, group, format, groups, i, interline, jot, left-brace, ll, lr, max-length-of-arrow, mathindent, name, no-arrows, - replace-left-brace-by, rl, rr, show-node-names, show-nodes, start-adjust, - tikz, wrap-lines, xoffset, ygap, ystart, + up-and-down, 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 = - \@@_msg_redirect_name:nn { Duplicate~name } { none } , + \__witharrows_msg_redirect_name:nn { Duplicate~name } { none } , allow-duplicate-names .value_forbidden:n = true , unknown .code:n = - \@@_sort_seq:N \l_@@_options_WithArrowsOptions_seq - \@@_error:n { Unknown~option~WithArrowsOptions } + \__witharrows_sort_seq:N \l__witharrows_options_WithArrowsOptions_seq + \__witharrows_error:n { Unknown~option~WithArrowsOptions } } -\seq_new:N \l_@@_options_WithArrowsOptions_seq -\@@_set_seq_of_str_from_clist:Nn \l_@@_options_WithArrowsOptions_seq +\seq_new:N \l__witharrows_options_WithArrowsOptions_seq +\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_WithArrowsOptions_seq { allow-duplicate-names, b, c, command-name, more-columns, tikz-code, adjust, displaystyle, end-adjust, fleqn, group, groups, i, interline, jot, ll, lr, - mathindent, max-length-of-arrow, no-arrows, rl, rr, show-node-names, - show-nodes, start-adjust, t, tikz, wrap-lines, xoffset, ygap, ystart, + mathindent, max-length-of-arrow, no-arrows, up-and-down, 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 \@@_set_independent: +\cs_new_protected:Npn \__witharrows_set_independent: { - \str_if_empty:NTF \l_@@_previous_key_str + \str_if_eq:VnF \l_keys_value_tl { NoValue } + { \__witharrows_error:n { Value~for~a~key } } + \__witharrows_set_independent_bis: + } +\cs_new_protected:Npn \__witharrows_set_independent_bis: + { + \str_if_empty:NTF \l__witharrows_previous_key_str { - \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl - \str_set:Nn \l_@@_status_arrow_str { independent } - \str_if_eq:VnF \l_keys_value_tl { NoValue } - { \@@_error:n { Value~for~a~key } } + \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl + \str_set:Nn \l__witharrows_status_arrow_str { independent } } - { \@@_error:n { Incompatible~options~in~Arrow } } + { \__witharrows_error:n { Incompatible~options~in~Arrow } } } \keys_define:nn { WithArrows / Arrow / FirstPass } { jump .code:n = \int_compare:nTF { #1 > 0 } - { \int_set:Nn \l_@@_jump_int { #1 } } - { \@@_error:n { Negative~jump } } , + { \int_set:Nn \l__witharrows_jump_int { #1 } } + { \__witharrows_error:n { Negative~jump } } , jump .value_required:n = true, - rr .code:n = \@@_set_independent: , - ll .code:n = \@@_set_independent: , - rl .code:n = \@@_set_independent: , - lr .code:n = \@@_set_independent: , - i .code:n = \@@_set_independent: , + rr .code:n = \__witharrows_set_independent: , + ll .code:n = \__witharrows_set_independent: , + rl .code:n = \__witharrows_set_independent: , + lr .code:n = \__witharrows_set_independent: , + i .code:n = \__witharrows_set_independent: , rr .default:n = NoValue , ll .default:n = NoValue , rl .default:n = NoValue , @@ -577,9 +563,9 @@ i .default:n = NoValue , new-group .value_forbidden:n = true, new-group .code:n = - \int_compare:nTF { \l_@@_pos_arrow_int = 6 } - { \str_set:Nn \l_@@_status_arrow_str { new-group } } - { \@@_error:n { new-group~without~groups } } , + \int_compare:nTF { \l__witharrows_pos_arrow_int = 6 } + { \str_set:Nn \l__witharrows_status_arrow_str { new-group } } + { \__witharrows_error:n { new-group~without~groups } } , tikz-code .code:n = \prg_do_nothing: , tikz-code .value_required:n = true , tikz .code:n = \prg_do_nothing: , @@ -592,212 +578,212 @@ adjust .value_required:n = true , xoffset .code:n = , unknown .code:n = - \@@_sort_seq:N \l_@@_options_Arrow_seq - \seq_if_in:NVTF \l_@@_options_WithArrows_seq \l_keys_key_tl + \__witharrows_sort_seq:N \l__witharrows_options_Arrow_seq + \seq_if_in:NVTF \l__witharrows_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 } - \@@_error:n { Unknown~option~in~Arrow } + \__witharrows_error:n { Unknown~option~in~Arrow } } -\seq_new:N \l_@@_options_Arrow_seq -\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_seq +\seq_new:N \l__witharrows_options_Arrow_seq +\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_seq { adjust, end-adjust, i, jump, ll, lr, rl, rr, start-adjust, tikz, tikz-code, xoffset } -\cs_new_protected:Npn \@@_fix_pos_arrow:n #1 +\cs_new_protected:Npn \__witharrows_fix_pos_arrow:n #1 { - \str_if_empty:NT \l_@@_previous_key_str + \str_if_empty:NT \l__witharrows_previous_key_str { - \str_set_eq:NN \l_@@_previous_key_str \l_keys_key_tl - \int_set:Nn \l_@@_pos_arrow_int { #1 } + \str_set_eq:NN \l__witharrows_previous_key_str \l_keys_key_tl + \int_set:Nn \l__witharrows_pos_arrow_int { #1 } } } \keys_define:nn {WithArrows / Arrow / SecondPass } { - tikz-code .tl_set:N = \l_@@_tikz_code_tl , + tikz-code .tl_set:N = \l__witharrows_tikz_code_tl , tikz-code .initial:n = \draw~(#1)~to~node{#3}~(#2)~; , tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } , tikz .initial:n = \c_empty_tl , - rr .code:n = \@@_fix_pos_arrow:n 3 , - ll .code:n = \@@_fix_pos_arrow:n 1 , - rl .code:n = \@@_fix_pos_arrow:n 2 , - lr .code:n = \@@_fix_pos_arrow:n 0 , - i .code:n = \@@_fix_pos_arrow:n 5 , + rr .code:n = \__witharrows_fix_pos_arrow:n 3 , + ll .code:n = \__witharrows_fix_pos_arrow:n 1 , + rl .code:n = \__witharrows_fix_pos_arrow:n 2 , + lr .code:n = \__witharrows_fix_pos_arrow:n 0 , + i .code:n = \__witharrows_fix_pos_arrow:n 5 , xoffset .code:n = \bool_if:nTF { - \int_compare_p:nNn \g_@@_arrow_int > 1 + \int_compare_p:nNn \g__witharrows_arrow_int > 1 && - \int_compare_p:nNn \l_@@_pos_arrow_int > 5 + \int_compare_p:nNn \l__witharrows_pos_arrow_int > 5 && - ! \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } + ! \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } } - { \@@_error:n { Option~xoffset~forbidden } } - { \dim_set:Nn \l_@@_xoffset_dim { #1 } } , + { \__witharrows_error:n { Option~xoffset~forbidden } } + { \dim_set:Nn \l__witharrows_xoffset_dim { #1 } } , xoffset .value_required:n = true , - start-adjust .dim_set:N = \l_@@_start_adjust_dim, - end-adjust .dim_set:N = \l_@@_end_adjust_dim, + start-adjust .dim_set:N = \l__witharrows_start_adjust_dim, + end-adjust .dim_set:N = \l__witharrows_end_adjust_dim, adjust .code:n = - \dim_set:Nn \l_@@_start_adjust_dim { #1 } - \dim_set:Nn \l_@@_end_adjust_dim { #1 } , + \dim_set:Nn \l__witharrows_start_adjust_dim { #1 } + \dim_set:Nn \l__witharrows_end_adjust_dim { #1 } , } \NewDocumentCommand \WithArrowsOptions { m } { - \str_clear_new:N \l_@@_previous_key_str + \str_clear_new:N \l__witharrows_previous_key_str \keys_set:nn { WithArrows / WithArrowsOptions } { #1 } } -\NewDocumentCommand \@@_Arrow { O { } m ! O { } } +\NewDocumentCommand \__witharrows_Arrow { O { } m ! O { } } { - \int_gincr:N \g_@@_arrow_int - \str_clear_new:N \l_@@_previous_key_str + \int_gincr:N \g__witharrows_arrow_int + \str_clear_new:N \l__witharrows_previous_key_str \keys_set:nn { WithArrows / Arrow / FirstPass } { #1 , #3 } - \prop_put:NnV \l_tmpa_prop { initial } \g_@@_line_int - \int_set:Nn \l_tmpa_int { \g_@@_line_int + \l_@@_jump_int } + \prop_put:NnV \l_tmpa_prop { initial } \g__witharrows_line_int + \int_set:Nn \l_tmpa_int { \g__witharrows_line_int + \l__witharrows_jump_int } \prop_put:NnV \l_tmpa_prop { final } \l_tmpa_int - \prop_put:NnV \l_tmpa_prop { status } \l_@@_status_arrow_str + \prop_put:NnV \l_tmpa_prop { status } \l__witharrows_status_arrow_str \prop_put:Nnn \l_tmpa_prop { options } { #1 , #3 } \prop_put:Nnn \l_tmpa_prop { label } { #2 } \prop_put:Nnx \l_tmpa_prop { input-line } \msg_line_number: \prop_gclear_new:c - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \g_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop } \prop_gset_eq:cN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \g_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \g__witharrows_arrow_int _ prop } \l_tmpa_prop } -\cs_new_protected:Npn \@@_Arrow_first_columns: - { \@@_error:n { Arrow~not~in~last~column } \@@_Arrow } -\cs_new_protected:Npn \@@_pre_halign:n #1 +\cs_new_protected:Npn \__witharrows_Arrow_first_columns: + { \__witharrows_error:n { Arrow~not~in~last~column } \__witharrows_Arrow } +\cs_new_protected:Npn \__witharrows_pre_halign:n #1 { - \str_clear_new:N \l_@@_type_env_str - \str_set:NV \l_@@_type_env_str \@currenvir + \str_clear_new:N \l__witharrows_type_env_str + \str_set:NV \l__witharrows_type_env_str \@currenvir \cs_if_exist:NT \tikz@library@external@loaded { \tikzset { external / export = false } } - \str_clear_new:N \l_@@_name_str - \str_clear_new:N \l_@@_status_arrow_str - \dim_zero_new:N \l_@@_x_dim - \str_clear_new:N \l_@@_input_line_str - \seq_gput_right:NV \g_@@_arrow_int_seq \g_@@_arrow_int - \int_gzero:N \g_@@_arrow_int - \seq_gput_right:NV \g_@@_line_int_seq \g_@@_line_int - \int_gzero:N \g_@@_line_int - \seq_gput_right:NV \g_@@_col_int_seq \g_@@_col_int - \int_gzero:N \g_@@_col_int - \seq_gput_right:NV \g_@@_static_col_int_seq \g_@@_static_col_int - \int_gzero:N \g_@@_static_col_int - \seq_gput_right:Nn \g_@@_position_in_the_tree_seq 1 - \seq_set_eq:NN \l_tmpa_seq \g_@@_position_in_the_tree_seq + \str_clear_new:N \l__witharrows_name_str + \str_clear_new:N \l__witharrows_status_arrow_str + \dim_zero_new:N \l__witharrows_x_dim + \str_clear_new:N \l__witharrows_input_line_str + \seq_gput_right:NV \g__witharrows_arrow_int_seq \g__witharrows_arrow_int + \int_gzero:N \g__witharrows_arrow_int + \seq_gput_right:NV \g__witharrows_line_int_seq \g__witharrows_line_int + \int_gzero:N \g__witharrows_line_int + \seq_gput_right:NV \g__witharrows_col_int_seq \g__witharrows_col_int + \int_gzero:N \g__witharrows_col_int + \seq_gput_right:NV \g__witharrows_static_col_int_seq \g__witharrows_static_col_int + \int_gzero:N \g__witharrows_static_col_int + \seq_gput_right:Nn \g__witharrows_position_in_the_tree_seq 1 + \seq_set_eq:NN \l_tmpa_seq \g__witharrows_position_in_the_tree_seq \seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl - \str_clear_new:N \l_@@_prefix_str - \str_set:Nx \l_@@_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - } - \cs_set_eq:NN \\ \@@_cr: + \str_clear_new:N \l__witharrows_prefix_str + \str_set:Nx \l__witharrows_prefix_str { \seq_use:Nnnn \l_tmpa_seq - - - } + \cs_set_eq:NN \\ \__witharrows_cr: \dim_zero:N \mathsurround - \int_zero_new:N \l_@@_initial_int - \int_zero_new:N \l_@@_final_int - \int_zero_new:N \l_@@_arrow_int - \int_zero_new:N \l_@@_pos_of_arrow_int - \int_zero_new:N \l_@@_jump_int - \int_set:Nn \l_@@_jump_int \c_one_int - \str_set:Nn \l_@@_format_str { rl } - \seq_clear_new:N \l_@@_labels_seq - \bool_set_false:N \l_@@_tag_next_line_bool - \skip_zero:N \l_@@_interline_skip - \tl_clear_new:N \l_@@_code_before_tl - \tl_clear_new:N \l_@@_code_after_tl - \str_clear_new:N \l_@@_previous_key_str - \bool_if:NT \l_@@_in_WithArrows_bool + \int_zero_new:N \l__witharrows_initial_int + \int_zero_new:N \l__witharrows_final_int + \int_zero_new:N \l__witharrows_arrow_int + \int_zero_new:N \l__witharrows_pos_of_arrow_int + \int_zero_new:N \l__witharrows_jump_int + \int_set:Nn \l__witharrows_jump_int \c_one_int + \str_set:Nn \l__witharrows_format_str { rl } + \seq_clear_new:N \l__witharrows_labels_seq + \bool_set_false:N \l__witharrows_tag_next_line_bool + \skip_zero:N \l__witharrows_interline_skip + \tl_clear_new:N \l__witharrows_code_before_tl + \tl_clear_new:N \l__witharrows_code_after_tl + \str_clear_new:N \l__witharrows_previous_key_str + \bool_if:NT \l__witharrows_in_WithArrows_bool { \keys_set:nn { WithArrows / WithArrows } { #1 } } - \bool_if:NT \l_@@_in_DispWithArrows_bool + \bool_if:NT \l__witharrows_in_DispWithArrows_bool { \keys_set:nn { WithArrows / DispWithArrows } { #1 } } - \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_first_columns: - \int_set:Nn \l_@@_nb_cols_int { \str_count:N \l_@@_format_str } - \int_gset_eq:NN \g_@@_col_int \l_@@_nb_cols_int - \seq_clear_new:N \l_@@_format_seq - \seq_set_split:NnV \l_@@_format_seq { } \l_@@_format_str - \bool_if:NT \g_@@_footnote_bool { \begin { savenotes } } - \l_@@_code_before_tl + \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_first_columns: + \int_set:Nn \l__witharrows_nb_cols_int { \str_count:N \l__witharrows_format_str } + \int_gset_eq:NN \g__witharrows_col_int \l__witharrows_nb_cols_int + \seq_clear_new:N \l__witharrows_format_seq + \seq_set_split:NnV \l__witharrows_format_seq { } \l__witharrows_format_str + \bool_if:NT \g__witharrows_footnote_bool { \begin { savenotes } } + \l__witharrows_code_before_tl \spread@equation - \cs_set_eq:NN \notag \@@_notag: - \cs_set_eq:NN \nonumber \@@_nonumber: - \cs_set_eq:NN \tag \@@_tag - \cs_set_eq:NN \@@_old_label \label - \cs_set_eq:NN \label \@@_label:n - \cs_set_eq:NN \tagnextline \@@_tagnextline: + \cs_set_eq:NN \notag \__witharrows_notag: + \cs_set_eq:NN \nonumber \__witharrows_nonumber: + \cs_set_eq:NN \tag \__witharrows_tag + \cs_set_eq:NN \__witharrows_old_label \label + \cs_set_eq:NN \label \__witharrows_label:n + \cs_set_eq:NN \tagnextline \__witharrows_tagnextline: } -\cs_new_protected:Npn \@@_construct_halign: +\cs_new_protected:Npn \__witharrows_construct_halign: { - \seq_pop_right:NNTF \l_@@_format_seq \l_@@_type_col_str + \seq_pop_right:NNTF \l__witharrows_format_seq \l__witharrows_type_col_str { \use:x { - \int_gdecr:N \g_@@_col_int - \@@_construct_halign: - \int_compare:nNnT \g_@@_col_int = \l_@@_nb_cols_int + \int_gdecr:N \g__witharrows_col_int + \__witharrows_construct_halign: + \int_compare:nNnT \g__witharrows_col_int = \l__witharrows_nb_cols_int { - \cs_set_eq:cN { \l_@@_command_name_str } \@@_Arrow - \bool_if:NT \l_@@_in_DispWithArrows_bool + \cs_set_eq:cN { \l__witharrows_command_name_str } \__witharrows_Arrow + \bool_if:NT \l__witharrows_in_DispWithArrows_bool { - \@@_test_if_to_tag: - \bool_if:NT \c_@@_amsthm_loaded_bool \@@_set_qedhere: + \__witharrows_test_if_to_tag: + \bool_if:NT \c__witharrows_amsthm_loaded_bool \__witharrows_set_qedhere: } } - \str_if_eq:VnT \l_@@_type_col_str { c } \hfil - \str_if_eq:VnT \l_@@_type_col_str { r } \hfill - \int_gincr:N \g_@@_col_int - \int_gset:Nn \g_@@_static_col_int { \int_use:N \g_@@_col_int } + \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil + \str_if_eq:VnT \l__witharrows_type_col_str { r } \hfill + \int_gincr:N \g__witharrows_col_int + \int_gset:Nn \g__witharrows_static_col_int { \int_use:N \g__witharrows_col_int } \c_math_toggle_token { { } - \bool_if:NT \l_@@_displaystyle_bool \displaystyle + \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle #### } \c_math_toggle_token - \int_compare:nNnTF \g_@@_col_int = \l_@@_nb_cols_int - { \@@_construct_nodes: } + \int_compare:nNnTF \g__witharrows_col_int = \l__witharrows_nb_cols_int + { \__witharrows_construct_nodes: } { - \str_if_eq:VnT \l_@@_type_col_str { l } \hfil - \str_if_eq:VnT \l_@@_type_col_str { c } \hfil - \bool_if:NT \l_@@_in_DispWithArrows_bool { \tabskip = \c_zero_skip } + \str_if_eq:VnT \l__witharrows_type_col_str { l } \hfil + \str_if_eq:VnT \l__witharrows_type_col_str { c } \hfil + \bool_if:NT \l__witharrows_in_DispWithArrows_bool { \tabskip = \c_zero_skip } & } } } { - \bool_if:NTF \l_@@_in_WithArrows_bool + \bool_if:NTF \l__witharrows_in_WithArrows_bool { \ialign \bgroup } { - \halign to \l_@@_linewidth_dim + \halign to \l__witharrows_linewidth_dim \bgroup - \bool_if:NT \l_@@_fleqn_bool - { \skip_horizontal:N \l_@@_mathindent_dim } + \bool_if:NT \l__witharrows_fleqn_bool + { \skip_horizontal:N \l__witharrows_mathindent_dim } } - \int_gincr:N \g_@@_line_int - \int_gzero:N \g_@@_col_int - \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl + \int_gincr:N \g__witharrows_line_int + \int_gzero:N \g__witharrows_col_int + \tl_if_eq:NNF \l__witharrows_left_brace_tl \c_novalue_tl { \skip_horizontal:n - { \box_wd:N \l_@@_left_brace_box + \l_@@_delim_wd_dim } + { \box_wd:N \l__witharrows_left_brace_box + \l__witharrows_delim_wd_dim } } \strut } } -\cs_new_protected:Npn \@@_construct_nodes: +\cs_new_protected:Npn \__witharrows_construct_nodes: { \tikz [ remember~picture , overlay ] \node [ node~contents = { } , - @@_node_style , - name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - l , + __witharrows_node_style , + name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - l , alias = { - \str_if_empty:NF \l_@@_name_str - { \l_@@_name_str - \int_use:N \g_@@_line_int - l } + \str_if_empty:NF \l__witharrows_name_str + { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - l } } ] ; @@ -806,36 +792,36 @@ \node [ node~contents = { } , - @@_node_style , - name = wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r , + __witharrows_node_style , + name = wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r , alias = { - \str_if_empty:NF \l_@@_name_str - { \l_@@_name_str - \int_use:N \g_@@_line_int - r } + \str_if_empty:NF \l__witharrows_name_str + { \l__witharrows_name_str - \int_use:N \g__witharrows_line_int - r } } ] ; - \bool_if:NT \l_@@_show_node_names_bool + \bool_if:NT \l__witharrows_show_node_names_bool { \hbox_overlap_right:n - { \small wa - \l_@@_prefix_str - \int_use:N \g_@@_line_int - r } + { \small wa - \l__witharrows_prefix_str - \int_use:N \g__witharrows_line_int - r } } } \NewDocumentEnvironment { WithArrows } { ! O { } } { - \bool_set_true:N \l_@@_in_WithArrows_bool - \bool_set_false:N \l_@@_in_DispWithArrows_bool - \@@_pre_halign:n { #1 } + \bool_set_true:N \l__witharrows_in_WithArrows_bool + \bool_set_false:N \l__witharrows_in_DispWithArrows_bool + \__witharrows_pre_halign:n { #1 } \if_mode_math: \else: - \@@_error:n { WithArrows~outside~math~mode } + \__witharrows_error:n { WithArrows~outside~math~mode } \fi: - \int_case:nn \l_@@_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox } + \int_case:nn \l__witharrows_pos_env_int { 0 \vtop 1 \vcenter 2 \vbox } \bgroup - \@@_construct_halign: + \__witharrows_construct_halign: && - \@@_error:n { Too~much~columns~in~WithArrows } + \__witharrows_error:n { Too~much~columns~in~WithArrows } \c_math_toggle_token - \bool_if:NT \l_@@_displaystyle_bool \displaystyle + \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle { ## } \c_math_toggle_token \cr @@ -844,84 +830,84 @@ \\ \egroup \egroup - \@@_post_halign: - \bool_if:NT \g_@@_footnote_bool { \end { savenotes } } + \__witharrows_post_halign: + \bool_if:NT \g__witharrows_footnote_bool { \end { savenotes } } } -\cs_new_protected:Npn \@@_post_halign: +\cs_new_protected:Npn \__witharrows_post_halign: { - \cs_set:Npn \WithArrowsRightX { \g_@@_right_x_dim } + \cs_set:Npn \WithArrowsRightX { \g__witharrows_right_x_dim } \normalbaselines - \int_compare:nNnT \g_@@_arrow_int > 0 + \int_compare:nNnT \g__witharrows_arrow_int > 0 { - \int_compare:nNnT \g_@@_arrow_int = 1 + \int_compare:nNnT \g__witharrows_arrow_int = 1 { - \int_compare:nNnT \l_@@_pos_arrow_int > 5 - { \int_set:Nn \l_@@_pos_arrow_int 5 } + \int_compare:nNnT \l__witharrows_pos_arrow_int > 5 + { \int_set:Nn \l__witharrows_pos_arrow_int 5 } } - \@@_scan_arrows: + \__witharrows_scan_arrows: } \group_begin: - \tikzset { every~picture / .style = @@_standard } - \cs_set:Npn \WithArrowsNbLines { \int_use:N \g_@@_line_int } - \cs_set_eq:NN \MultiArrow \@@_MultiArrow:nn - \cs_set_eq:cN \l_@@_command_name_str \@@_Arrow_code_after - \bool_set_true:N \l_@@_in_code_after_bool - \l_@@_code_after_tl + \tikzset { every~picture / .style = __witharrows_standard } + \cs_set:Npn \WithArrowsNbLines { \int_use:N \g__witharrows_line_int } + \cs_set_eq:NN \MultiArrow \__witharrows_MultiArrow:nn + \cs_set_eq:cN \l__witharrows_command_name_str \__witharrows_Arrow_code_after + \bool_set_true:N \l__witharrows_in_code_after_bool + \l__witharrows_code_after_tl \group_end: - \seq_gpop_right:NN \g_@@_position_in_the_tree_seq \l_tmpa_tl - \seq_gpop_right:NN \g_@@_position_in_the_tree_seq \l_tmpa_tl - \seq_gput_right:Nx \g_@@_position_in_the_tree_seq + \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl + \seq_gpop_right:NN \g__witharrows_position_in_the_tree_seq \l_tmpa_tl + \seq_gput_right:Nx \g__witharrows_position_in_the_tree_seq { \int_eval:n { \l_tmpa_tl + 1 } } - \int_compare:nNnT { \seq_count:N \g_@@_position_in_the_tree_seq } = 1 - { \int_gincr:N \g_@@_last_env_int } - \seq_gpop_right:NN \g_@@_arrow_int_seq \l_tmpa_tl - \int_gset:Nn \g_@@_arrow_int \l_tmpa_tl - \seq_gpop_right:NN \g_@@_line_int_seq \l_tmpa_tl - \int_gset:Nn \g_@@_line_int \l_tmpa_tl - \seq_gpop_right:NN \g_@@_col_int_seq \l_tmpa_tl - \int_gset:Nn \g_@@_col_int \l_tmpa_tl - \seq_gpop_right:NN \g_@@_static_col_int_seq \l_tmpa_tl - \int_gset:Nn \g_@@_static_col_int \l_tmpa_tl - } -\cs_new_protected:Npn \@@_cr: + \int_compare:nNnT { \seq_count:N \g__witharrows_position_in_the_tree_seq } = 1 + { \int_gincr:N \g__witharrows_last_env_int } + \seq_gpop_right:NN \g__witharrows_arrow_int_seq \l_tmpa_tl + \int_gset:Nn \g__witharrows_arrow_int \l_tmpa_tl + \seq_gpop_right:NN \g__witharrows_line_int_seq \l_tmpa_tl + \int_gset:Nn \g__witharrows_line_int \l_tmpa_tl + \seq_gpop_right:NN \g__witharrows_col_int_seq \l_tmpa_tl + \int_gset:Nn \g__witharrows_col_int \l_tmpa_tl + \seq_gpop_right:NN \g__witharrows_static_col_int_seq \l_tmpa_tl + \int_gset:Nn \g__witharrows_static_col_int \l_tmpa_tl + } +\cs_new_protected:Npn \__witharrows_cr: { \scan_stop: - \int_compare:nNnF \g_@@_col_int = \g_@@_static_col_int - { \@@_error:n { omit~probably~used } } - \prg_replicate:nn { \l_@@_nb_cols_int - \g_@@_static_col_int } { & { } } + \int_compare:nNnF \g__witharrows_col_int = \g__witharrows_static_col_int + { \__witharrows_error:n { omit~probably~used } } + \prg_replicate:nn { \l__witharrows_nb_cols_int - \g__witharrows_static_col_int } { & { } } \group_align_safe_begin: - \peek_meaning_remove:NTF * \@@_cr_i: \@@_cr_i: + \peek_meaning_remove:NTF * \__witharrows_cr_i: \__witharrows_cr_i: } -\cs_new_protected:Npn \@@_cr_i: - { \peek_meaning:NTF [ \@@_cr_ii: { \@@_cr_ii: [ \c_zero_dim ] } } -\cs_new_protected:Npn \@@_cr_ii: [ #1 ] +\cs_new_protected:Npn \__witharrows_cr_i: + { \peek_meaning:NTF [ \__witharrows_cr_ii: { \__witharrows_cr_ii: [ \c_zero_dim ] } } +\cs_new_protected:Npn \__witharrows_cr_ii: [ #1 ] { \peek_meaning_ignore_spaces:NTF \end { - \@@_cr_iii:n { #1 } - \@@_analyze_end:Nn + \__witharrows_cr_iii:n { #1 } + \__witharrows_analyze_end:Nn } - { \@@_cr_iii:n { #1 } } + { \__witharrows_cr_iii:n { #1 } } } -\cs_new_protected:Npn \@@_cr_iii:n #1 +\cs_new_protected:Npn \__witharrows_cr_iii:n #1 { \group_align_safe_end: - \bool_if:NT \l_@@_in_DispWithArrows_bool + \bool_if:NT \l__witharrows_in_DispWithArrows_bool { - \clist_if_in:NnTF \l_@@_tags_clist { all } + \clist_if_in:NnTF \l__witharrows_tags_clist { all } { - \tl_if_empty:NT \l_@@_tag_tl { \int_gincr:N \c@equation } + \tl_if_empty:NT \l__witharrows_tag_tl { \int_gincr:N \c@equation } \cs_gset:Npx \g_tmpa_tl - { \tl_if_empty:NTF \l_@@_tag_tl \theequation \l_@@_tag_tl } - \seq_if_empty:NF \l_@@_labels_seq + { \tl_if_empty:NTF \l__witharrows_tag_tl \theequation \l__witharrows_tag_tl } + \seq_if_empty:NF \l__witharrows_labels_seq { \cs_set:Npx \@currentlabel { \p@equation \g_tmpa_tl } - \bool_if:NT \c_@@_hyperref_loaded_bool + \bool_if:NT \c__witharrows_hyperref_loaded_bool { \str_set:Nn \This@name { equation } \hyper@refstepcounter { equation } } - \bool_if:NT \c_@@_cleveref_loaded_bool + \bool_if:NT \c__witharrows_cleveref_loaded_bool { \cref@constructprefix { equation } \cref@result \protected@edef \cref@currentlabel @@ -935,78 +921,78 @@ \p@equation \g_tmpa_tl } } - \seq_map_function:NN \l_@@_labels_seq \@@_old_label + \seq_map_function:NN \l__witharrows_labels_seq \__witharrows_old_label } - \@@_save:N \l_@@_tag_star_bool - \@@_save:N \l_@@_qedhere_bool - \bool_if:NT \l_@@_tag_next_line_bool + \__witharrows_save:N \l__witharrows_tag_star_bool + \__witharrows_save:N \l__witharrows_qedhere_bool + \bool_if:NT \l__witharrows_tag_next_line_bool { \openup -\jot - \bool_set_false:N \l_@@_tag_next_line_bool + \bool_set_false:N \l__witharrows_tag_next_line_bool \notag \\ & } & - \@@_restore:N \l_@@_tag_star_bool - \@@_restore:N \l_@@_qedhere_bool - \bool_if:NT \l_@@_qedhere_bool - { \hbox_overlap_left:n \@@_qedhere_i: } + \__witharrows_restore:N \l__witharrows_tag_star_bool + \__witharrows_restore:N \l__witharrows_qedhere_bool + \bool_if:NT \l__witharrows_qedhere_bool + { \hbox_overlap_left:n \__witharrows_qedhere_i: } \cs_set_eq:NN \theequation \g_tmpa_tl - \bool_if:NT \l_@@_tag_star_bool + \bool_if:NT \l__witharrows_tag_star_bool { \cs_set_eq:NN \tagform@ \prg_do_nothing: } \hbox_overlap_left:n { - \bool_if:NF \c_@@_leqno_bool + \bool_if:NF \c__witharrows_leqno_bool { - \tikz [ @@_standard ] - \coordinate ( \int_use:N \g_@@_line_int - v ) ; + \tikz [ __witharrows_standard ] + \coordinate ( \int_use:N \g__witharrows_line_int - v ) ; } \quad \@eqnnum } - \bool_if:NT \c_@@_leqno_bool + \bool_if:NT \c__witharrows_leqno_bool { - \tikz [ @@_standard ] - \coordinate ( \int_use:N \g_@@_line_int - v ) ; + \tikz [ __witharrows_standard ] + \coordinate ( \int_use:N \g__witharrows_line_int - v ) ; } } { - \@@_save:N \l_@@_qedhere_bool + \__witharrows_save:N \l__witharrows_qedhere_bool & - \@@_restore:N \l_@@_qedhere_bool - \bool_if:NT \l_@@_qedhere_bool - { \hbox_overlap_left:n \@@_qedhere_i: } - \tikz [ @@_standard ] - \coordinate ( \int_use:N \g_@@_line_int - v ) ; + \__witharrows_restore:N \l__witharrows_qedhere_bool + \bool_if:NT \l__witharrows_qedhere_bool + { \hbox_overlap_left:n \__witharrows_qedhere_i: } + \tikz [ __witharrows_standard ] + \coordinate ( \int_use:N \g__witharrows_line_int - v ) ; } } \dim_compare:nNnT { #1 } < \c_zero_dim - { \@@_error:n { option~of~cr~negative } } + { \__witharrows_error:n { option~of~cr~negative } } \cr \noalign { \dim_set:Nn \l_tmpa_dim { \dim_max:nn { #1 } \c_zero_dim } - \skip_vertical:n { \l_tmpa_dim + \l_@@_interline_skip } + \skip_vertical:n { \l_tmpa_dim + \l__witharrows_interline_skip } \scan_stop: } } -\cs_new_protected:Npn \@@_analyze_end:Nn #1 #2 +\cs_new_protected:Npn \__witharrows_analyze_end:Nn #1 #2 { - \exp_args:NV \str_if_eq:nnT \l_@@_type_env_str { #2 } + \exp_args:NV \str_if_eq:nnT \l__witharrows_type_env_str { #2 } { - \@@_error:n { newline~at~the~end~of~env } + \__witharrows_error:n { newline~at~the~end~of~env } \group_begin: \globaldefs = 1 - \@@_msg_redirect_name:nn { newline~at~the~end~of~env } { none } + \__witharrows_msg_redirect_name:nn { newline~at~the~end~of~env } { none } \group_end: } \end { #2 } } -\bool_new:N \l_@@_in_label_or_minipage_bool +\bool_new:N \l__witharrows_in_label_or_minipage_bool \NewDocumentEnvironment { DispWithArrows } { ! d < > ! O { } } { - \bool_set_true:N \l_@@_in_DispWithArrows_bool - \bool_if:nT \c_@@_mathtools_loaded_bool + \bool_set_true:N \l__witharrows_in_DispWithArrows_bool + \bool_if:nT \c__witharrows_mathtools_loaded_bool { \MH_if_boolean:nT { show_only_refs } { @@ -1014,53 +1000,53 @@ \MH_set_boolean_T:n { show_only_refs } } } - \bool_if:NT \c_@@_typedref_loaded_bool { \str_set:Nn \sr@name { equation } } - \bool_if:NT \c_@@_amsmath_loaded_bool \intertext@ - \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l_@@_left_brace_tl { #1 } } - \@@_pre_halign:n { #2 } - \bool_if:NT \l_@@_subequations_bool { \begin { subequations } } - \bool_if:NF \l_@@_sbwi_bool + \bool_if:NT \c__witharrows_typedref_loaded_bool { \str_set:Nn \sr@name { equation } } + \bool_if:NT \c__witharrows_amsmath_loaded_bool \intertext@ + \exp_args:No \tl_if_novalue:nF { #1 } { \tl_set:Nn \l__witharrows_left_brace_tl { #1 } } + \__witharrows_pre_halign:n { #2 } + \bool_if:NT \l__witharrows_subequations_bool { \begin { subequations } } + \bool_if:NF \l__witharrows_sbwi_bool { \if@inlabel - \bool_set_true:N \l_@@_in_label_or_minipage_bool + \bool_set_true:N \l__witharrows_in_label_or_minipage_bool \fi \if@minipage - \bool_set_true:N \l_@@_in_label_or_minipage_bool + \bool_set_true:N \l__witharrows_in_label_or_minipage_bool \fi } - \tl_if_eq:NNF \l_@@_left_brace_tl \c_novalue_tl + \tl_if_eq:NNF \l__witharrows_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_@@_replace_left_brace_by_tl \vcenter to 1 cm { } \right. + \left \l__witharrows_replace_left_brace_by_tl \vcenter to 1 cm { } \right. \c_math_toggle_token \group_end: } - \dim_zero_new:N \l_@@_delim_wd_dim - \dim_set:Nn \l_@@_delim_wd_dim { \box_wd:N \l_tmpa_box } - \box_clear_new:N \l_@@_left_brace_box - \hbox_set:Nn \l_@@_left_brace_box + \dim_zero_new:N \l__witharrows_delim_wd_dim + \dim_set:Nn \l__witharrows_delim_wd_dim { \box_wd:N \l_tmpa_box } + \box_clear_new:N \l__witharrows_left_brace_box + \hbox_set:Nn \l__witharrows_left_brace_box { \group_begin: - \cs_set_eq:NN \label \@@_old_label + \cs_set_eq:NN \label \__witharrows_old_label \c_math_toggle_token - \bool_if:NT \l_@@_displaystyle_bool \displaystyle - \l_@@_left_brace_tl + \bool_if:NT \l__witharrows_displaystyle_bool \displaystyle + \l__witharrows_left_brace_tl { } \c_math_toggle_token \group_end: } } - \tl_clear_new:N \l_@@_tag_tl - \bool_set_false:N \l_@@_qedhere_bool - \bool_set_false:N \l_@@_tag_star_bool + \tl_clear_new:N \l__witharrows_tag_tl + \bool_set_false:N \l__witharrows_qedhere_bool + \bool_set_false:N \l__witharrows_tag_star_bool \if_mode_math: - \@@_fatal:n { DispWithArrows~in~math~mode } + \__witharrows_fatal:n { DispWithArrows~in~math~mode } \fi: - \bool_if:NTF \l_@@_in_label_or_minipage_bool + \bool_if:NTF \l__witharrows_in_label_or_minipage_bool { \c_math_toggle_token } { \if_mode_vertical: @@ -1069,63 +1055,63 @@ \fi: \c_math_toggle_token \c_math_toggle_token } - \dim_zero_new:N \l_@@_linewidth_dim - \bool_if:NTF \l_@@_in_label_or_minipage_bool - { \dim_set_eq:NN \l_@@_linewidth_dim \linewidth } - { \dim_set_eq:NN \l_@@_linewidth_dim \displaywidth } - \box_clear_new:N \l_@@_halign_box - \setbox \l_@@_halign_box \vtop \bgroup + \dim_zero_new:N \l__witharrows_linewidth_dim + \bool_if:NTF \l__witharrows_in_label_or_minipage_bool + { \dim_set_eq:NN \l__witharrows_linewidth_dim \linewidth } + { \dim_set_eq:NN \l__witharrows_linewidth_dim \displaywidth } + \box_clear_new:N \l__witharrows_halign_box + \setbox \l__witharrows_halign_box \vtop \bgroup \tabskip = - \bool_if:NTF \l_@@_fleqn_bool + \bool_if:NTF \l__witharrows_fleqn_bool \c_zero_skip { 0 pt plus 1000 pt minus 1000 pt } - \@@_construct_halign: + \__witharrows_construct_halign: \tabskip = 0 pt plus 1000 pt minus 1000 pt & $ ## $ \tabskip = \c_zero_skip && - \@@_fatal:n { Too~much~columns~in~DispWithArrows } + \__witharrows_fatal:n { Too~much~columns~in~DispWithArrows } \bool_if:nT \c_false_bool { ## } \cr } { - \clist_if_in:NnT \l_@@_tags_clist { last } - { \clist_set:Nn \l_@@_tags_clist { all } } + \clist_if_in:NnT \l__witharrows_tags_clist { last } + { \clist_set:Nn \l__witharrows_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_@@_alignment_dim - \dim_gset:Nn \g_@@_alignment_dim { \box_wd:N \l_tmpa_box } - \box_clear_new:N \l_@@_new_box - \hbox_set:Nn \l_@@_new_box { \hbox_unpack_clear:N \l_tmpa_box } + \dim_gzero_new:N \g__witharrows_alignment_dim + \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l_tmpa_box } + \box_clear_new:N \l__witharrows_new_box + \hbox_set:Nn \l__witharrows_new_box { \hbox_unpack_clear:N \l_tmpa_box } \dim_compare:nNnT - { \box_wd:N \l_@@_new_box } < \g_@@_alignment_dim - { \dim_gset:Nn \g_@@_alignment_dim { \box_wd:N \l_@@_new_box } } + { \box_wd:N \l__witharrows_new_box } < \g__witharrows_alignment_dim + { \dim_gset:Nn \g__witharrows_alignment_dim { \box_wd:N \l__witharrows_new_box } } \egroup - \tl_if_eq:NNTF \l_@@_left_brace_tl \c_novalue_tl - { \box_use_drop:N \l_@@_halign_box } + \tl_if_eq:NNTF \l__witharrows_left_brace_tl \c_novalue_tl + { \box_use_drop:N \l__witharrows_halign_box } { - \hbox_to_wd:nn \l_@@_linewidth_dim + \hbox_to_wd:nn \l__witharrows_linewidth_dim { - \bool_if:NTF \l_@@_fleqn_bool - { \skip_horizontal:n \l_@@_mathindent_dim } + \bool_if:NTF \l__witharrows_fleqn_bool + { \skip_horizontal:n \l__witharrows_mathindent_dim } \hfil - \hbox_to_wd:nn \g_@@_alignment_dim + \hbox_to_wd:nn \g__witharrows_alignment_dim { - \box_use_drop:N \l_@@_left_brace_box + \box_use_drop:N \l__witharrows_left_brace_box \dim_set:Nn \l_tmpa_dim { - \box_ht:N \l_@@_halign_box - + \box_dp:N \l_@@_halign_box + \box_ht:N \l__witharrows_halign_box + + \box_dp:N \l__witharrows_halign_box } \group_begin: \dim_set_eq:NN \nulldelimiterspace \c_zero_dim \c_math_toggle_token - \left \l_@@_replace_left_brace_by_tl + \left \l__witharrows_replace_left_brace_by_tl \vcenter to \l_tmpa_dim { \vfil } \right. \c_math_toggle_token @@ -1134,36 +1120,36 @@ } \hfil } - \skip_horizontal:n { - \l_@@_linewidth_dim } - \vcenter { \box_use_drop:N \l_@@_halign_box } + \skip_horizontal:n { - \l__witharrows_linewidth_dim } + \vcenter { \box_use_drop:N \l__witharrows_halign_box } } - \dim_gzero_new:N \g_@@_right_x_dim - \dim_gset_eq:NN \g_@@_right_x_dim \c_max_dim - \begin { tikzpicture } [ @@_standard ] - \int_step_variable:nNn \g_@@_line_int \l_tmpa_int + \dim_gzero_new:N \g__witharrows_right_x_dim + \dim_gset_eq:NN \g__witharrows_right_x_dim \c_max_dim + \begin { tikzpicture } [ __witharrows_standard ] + \int_step_variable:nNn \g__witharrows_line_int \l_tmpa_int { \cs_if_free:cTF - { pgf@sh@ns@wa - \l_@@_prefix_str - \l_tmpa_int - v } - { \@@_fatal:n { Inexistent~v-node } } + { pgf@sh@ns@wa - \l__witharrows_prefix_str - \l_tmpa_int - v } + { \__witharrows_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_@@_right_x_dim - { \dim_gset:Nn \g_@@_right_x_dim \l_tmpa_dim } + \dim_compare:nNnT \l_tmpa_dim < \g__witharrows_right_x_dim + { \dim_gset:Nn \g__witharrows_right_x_dim \l_tmpa_dim } } } \end { tikzpicture } - \@@_post_halign: - \bool_if:nT \c_@@_mathtools_loaded_bool + \__witharrows_post_halign: + \bool_if:nT \c__witharrows_mathtools_loaded_bool { \MH_if_boolean:nT { show_only_refs } \MT_showonlyrefs_true: } - \bool_if:NTF \l_@@_in_label_or_minipage_bool + \bool_if:NTF \l__witharrows_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_@@_subequations_bool { \end { subequations } } - \bool_if:NT \g_@@_footnote_bool { \end { savenotes } } + \bool_if:NT \l__witharrows_subequations_bool { \end { subequations } } + \bool_if:NT \g__witharrows_footnote_bool { \end { savenotes } } \ignorespacesafterend } \NewDocumentEnvironment { DispWithArrows* } { } @@ -1172,77 +1158,77 @@ \DispWithArrows } \endDispWithArrows -\cs_new_protected:Npn \@@_if_in_last_col_of_disp:Nn #1 #2 +\cs_new_protected:Npn \__witharrows_if_in_last_col_of_disp:Nn #1 #2 { - \bool_if:NTF \l_@@_in_WithArrows_bool - { \@@_error:nn { Not~allowed~in~WithArrows } { #1 } } + \bool_if:NTF \l__witharrows_in_WithArrows_bool + { \__witharrows_error:nn { Not~allowed~in~WithArrows } { #1 } } { - \int_compare:nNnTF \g_@@_col_int < \l_@@_nb_cols_int - { \@@_error:nn { Not~allowed~in~DispWithArrows } { #1 } } + \int_compare:nNnTF \g__witharrows_col_int < \l__witharrows_nb_cols_int + { \__witharrows_error:nn { Not~allowed~in~DispWithArrows } { #1 } } { #2 } } } -\cs_new_protected:Npn \@@_notag: - { \@@_if_in_last_col_of_disp:Nn \notag { \clist_clear:N \l_@@_tags_clist } } -\cs_new_protected:Npn \@@_nonumber: - { \@@_if_in_last_col_of_disp:Nn \nonumber { \clist_clear:N \l_@@_tags_clist } } -\NewDocumentCommand \@@_tag { s m } +\cs_new_protected:Npn \__witharrows_notag: + { \__witharrows_if_in_last_col_of_disp:Nn \notag { \clist_clear:N \l__witharrows_tags_clist } } +\cs_new_protected:Npn \__witharrows_nonumber: + { \__witharrows_if_in_last_col_of_disp:Nn \nonumber { \clist_clear:N \l__witharrows_tags_clist } } +\NewDocumentCommand \__witharrows_tag { s m } { - \@@_if_in_last_col_of_disp:Nn \tag + \__witharrows_if_in_last_col_of_disp:Nn \tag { - \tl_if_empty:NF \l_@@_tag_tl - { \@@_error:nn { Multiple~tags } { #2 } } - \clist_set:Nn \l_@@_tags_clist { all } - \bool_if:nT \c_@@_mathtools_loaded_bool + \tl_if_empty:NF \l__witharrows_tag_tl + { \__witharrows_error:nn { Multiple~tags } { #2 } } + \clist_set:Nn \l__witharrows_tags_clist { all } + \bool_if:nT \c__witharrows_mathtools_loaded_bool { \MH_if_boolean:nT { show_only_refs } { \MH_if_boolean:nF { show_manual_tags } - { \clist_clear:N \l_@@_tags_clist } + { \clist_clear:N \l__witharrows_tags_clist } } } - \tl_set:Nn \l_@@_tag_tl { #2 } - \bool_set:Nn \l_@@_tag_star_bool { #1 } - \bool_if:nT { #1 && ! \bool_if_p:N \c_@@_amsmath_loaded_bool } - { \@@_error:n { tag*~without~amsmath } } + \tl_set:Nn \l__witharrows_tag_tl { #2 } + \bool_set:Nn \l__witharrows_tag_star_bool { #1 } + \bool_if:nT { #1 && ! \bool_if_p:N \c__witharrows_amsmath_loaded_bool } + { \__witharrows_error:n { tag*~without~amsmath } } } } -\cs_new_protected:Npn \@@_label:n #1 +\cs_new_protected:Npn \__witharrows_label:n #1 { - \@@_if_in_last_col_of_disp:Nn \label + \__witharrows_if_in_last_col_of_disp:Nn \label { - \seq_if_empty:NF \l_@@_labels_seq + \seq_if_empty:NF \l__witharrows_labels_seq { - \bool_if:NTF \c_@@_cleveref_loaded_bool - { \@@_error:n { Multiple~labels~with~cleveref } } - { \@@_error:n { Multiple~labels } } + \bool_if:NTF \c__witharrows_cleveref_loaded_bool + { \__witharrows_error:n { Multiple~labels~with~cleveref } } + { \__witharrows_error:n { Multiple~labels } } } - \seq_put_right:Nn \l_@@_labels_seq { #1 } - \bool_if:nT \c_@@_mathtools_loaded_bool + \seq_put_right:Nn \l__witharrows_labels_seq { #1 } + \bool_if:nT \c__witharrows_mathtools_loaded_bool { \MH_if_boolean:nT { show_only_refs } { \cs_if_exist:cTF { MT_r_#1 } - { \clist_set:Nn \l_@@_tags_clist { all } } - { \clist_clear:N \l_@@_tags_clist } + { \clist_set:Nn \l__witharrows_tags_clist { all } } + { \clist_clear:N \l__witharrows_tags_clist } } } - \bool_if:nT \c_@@_autonum_loaded_bool + \bool_if:nT \c__witharrows_autonum_loaded_bool { \cs_if_exist:cTF { autonum@#1Referenced } - { \clist_set:Nn \l_@@_tags_clist { all } } - { \clist_clear:N \l_@@_tags_clist } + { \clist_set:Nn \l__witharrows_tags_clist { all } } + { \clist_clear:N \l__witharrows_tags_clist } } } } -\cs_new_protected:Npn \@@_tagnextline: +\cs_new_protected:Npn \__witharrows_tagnextline: { - \@@_if_in_last_col_of_disp:Nn \tagnextline - { \bool_set_true:N \l_@@_tag_next_line_bool } + \__witharrows_if_in_last_col_of_disp:Nn \tagnextline + { \bool_set_true:N \l__witharrows_tag_next_line_bool } } -\cs_new_protected:Npn \@@_qedhere: { \bool_set_true:N \l_@@_qedhere_bool } -\cs_new_protected:Npn \@@_set_qedhere: { \cs_set_eq:NN \qedhere \@@_qedhere: } -\cs_new_protected:Npn \@@_qedhere_i: +\cs_new_protected:Npn \__witharrows_qedhere: { \bool_set_true:N \l__witharrows_qedhere_bool } +\cs_new_protected:Npn \__witharrows_set_qedhere: { \cs_set_eq:NN \qedhere \__witharrows_qedhere: } +\cs_new_protected:Npn \__witharrows_qedhere_i: { \group_begin: \cs_set_eq:NN \qed \qedsymbol @@ -1250,286 +1236,286 @@ \QED@stack \relax \relax \group_end: } -\cs_new_protected:Npn \@@_scan_arrows: +\cs_new_protected:Npn \__witharrows_scan_arrows: { \group_begin: - \int_compare:nNnT \l_@@_pos_arrow_int = 7 + \int_compare:nNnT \l__witharrows_pos_arrow_int = 7 { - \@@_scan_arrows_i: - \int_set:Nn \l_@@_pos_arrow_int 8 + \__witharrows_scan_arrows_i: + \int_set:Nn \l__witharrows_pos_arrow_int 8 } - \@@_scan_arrows_i: + \__witharrows_scan_arrows_i: \group_end: } -\cs_new_protected:Npn \@@_scan_arrows_i: +\cs_new_protected:Npn \__witharrows_scan_arrows_i: { - \int_zero_new:N \l_@@_first_arrow_of_group_int - \int_zero_new:N \l_@@_first_line_of_group_int - \int_zero_new:N \l_@@_last_line_of_group_int - \seq_clear_new:N \l_@@_first_arrows_seq - \seq_clear_new:N \l_@@_last_arrows_seq - \bool_set_true:N \l_@@_new_group_bool - \int_set:Nn \l_@@_arrow_int \c_one_int - \int_until_do:nNnn \l_@@_arrow_int > \g_@@_arrow_int + \int_zero_new:N \l__witharrows_first_arrow_of_group_int + \int_zero_new:N \l__witharrows_first_line_of_group_int + \int_zero_new:N \l__witharrows_last_line_of_group_int + \seq_clear_new:N \l__witharrows_first_arrows_seq + \seq_clear_new:N \l__witharrows_last_arrows_seq + \bool_set_true:N \l__witharrows_new_group_bool + \int_set:Nn \l__witharrows_arrow_int \c_one_int + \int_until_do:nNnn \l__witharrows_arrow_int > \g__witharrows_arrow_int { \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { initial } \l_tmpa_tl - \int_set:Nn \l_@@_initial_int \l_tmpa_tl + \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { final } \l_tmpa_tl - \int_set:Nn \l_@@_final_int \l_tmpa_tl + \int_set:Nn \l__witharrows_final_int \l_tmpa_tl \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } - { status } \l_@@_status_arrow_str + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } + { status } \l__witharrows_status_arrow_str \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } - { input-line } \l_@@_input_line_str - \int_compare:nNnTF \l_@@_final_int > \g_@@_line_int + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } + { input-line } \l__witharrows_input_line_str + \int_compare:nNnTF \l__witharrows_final_int > \g__witharrows_line_int { - \int_compare:nNnF \l_@@_pos_arrow_int = 8 - { \@@_error:n { Too~few~lines~for~an~arrow } } + \int_compare:nNnF \l__witharrows_pos_arrow_int = 8 + { \__witharrows_error:n { Too~few~lines~for~an~arrow } } } - \@@_code_for_possible_arrow: - \int_incr:N \l_@@_arrow_int + \__witharrows_code_for_possible_arrow: + \int_incr:N \l__witharrows_arrow_int } \bool_if:nT { - \int_compare_p:n { \l_@@_pos_arrow_int != 7 } + \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 } && - \int_compare_p:nNn \l_@@_first_arrow_of_group_int > 0 + \int_compare_p:nNn \l__witharrows_first_arrow_of_group_int > 0 } - { \@@_draw_arrows:nn \l_@@_first_arrow_of_group_int \g_@@_arrow_int } + { \__witharrows_draw_arrows:nn \l__witharrows_first_arrow_of_group_int \g__witharrows_arrow_int } } -\cs_new_protected:Npn \@@_code_for_possible_arrow: +\cs_new_protected:Npn \__witharrows_code_for_possible_arrow: { \bool_if:nT { - \int_compare_p:nNn \l_@@_arrow_int > \c_one_int + \int_compare_p:nNn \l__witharrows_arrow_int > \c_one_int && - ( \int_compare_p:n { \l_@@_initial_int > \l_@@_last_line_of_group_int } + ( \int_compare_p:n { \l__witharrows_initial_int > \l__witharrows_last_line_of_group_int } && - \int_compare_p:n { \l_@@_pos_arrow_int != 7 } + \int_compare_p:n { \l__witharrows_pos_arrow_int != 7 } || - \str_if_eq_p:Vn \l_@@_status_arrow_str { new-group } + \str_if_eq_p:Vn \l__witharrows_status_arrow_str { new-group } ) } { - \int_compare:nNnF \l_@@_first_arrow_of_group_int = \c_zero_int + \int_compare:nNnF \l__witharrows_first_arrow_of_group_int = \c_zero_int { - \@@_draw_arrows:nn - \l_@@_first_arrow_of_group_int - { \l_@@_arrow_int - 1 } + \__witharrows_draw_arrows:nn + \l__witharrows_first_arrow_of_group_int + { \l__witharrows_arrow_int - 1 } } - \bool_set_true:N \l_@@_new_group_bool + \bool_set_true:N \l__witharrows_new_group_bool } - \bool_if:nTF \l_@@_new_group_bool + \bool_if:nTF \l__witharrows_new_group_bool { - \bool_set_false:N \l_@@_new_group_bool - \int_set_eq:NN \l_@@_first_arrow_of_group_int \l_@@_arrow_int - \int_set_eq:NN \l_@@_first_line_of_group_int \l_@@_initial_int - \int_set_eq:NN \l_@@_last_line_of_group_int \l_@@_final_int - \seq_clear:N \l_@@_first_arrows_seq - \seq_put_left:NV \l_@@_first_arrows_seq \l_@@_arrow_int - \seq_clear:N \l_@@_last_arrows_seq - \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int - \int_compare:nT { \l_@@_pos_arrow_int != 8 } - { \dim_set:Nn \l_@@_x_dim { - \c_max_dim } } + \bool_set_false:N \l__witharrows_new_group_bool + \int_set_eq:NN \l__witharrows_first_arrow_of_group_int \l__witharrows_arrow_int + \int_set_eq:NN \l__witharrows_first_line_of_group_int \l__witharrows_initial_int + \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int + \seq_clear:N \l__witharrows_first_arrows_seq + \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int + \seq_clear:N \l__witharrows_last_arrows_seq + \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int + \int_compare:nT { \l__witharrows_pos_arrow_int != 8 } + { \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim } } } { \bool_if:nF - { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } } + { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } } { \int_compare:nT - { \l_@@_initial_int = \l_@@_first_line_of_group_int } - { \seq_put_left:NV \l_@@_first_arrows_seq \l_@@_arrow_int } - \int_compare:nNnTF \l_@@_final_int > \l_@@_last_line_of_group_int + { \l__witharrows_initial_int = \l__witharrows_first_line_of_group_int } + { \seq_put_left:NV \l__witharrows_first_arrows_seq \l__witharrows_arrow_int } + \int_compare:nNnTF \l__witharrows_final_int > \l__witharrows_last_line_of_group_int { - \int_set_eq:NN \l_@@_last_line_of_group_int \l_@@_final_int - \seq_clear:N \l_@@_last_arrows_seq - \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int + \int_set_eq:NN \l__witharrows_last_line_of_group_int \l__witharrows_final_int + \seq_clear:N \l__witharrows_last_arrows_seq + \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int } { - \int_compare:nNnT \l_@@_final_int = \l_@@_last_line_of_group_int - { \seq_put_left:NV \l_@@_last_arrows_seq \l_@@_arrow_int } + \int_compare:nNnT \l__witharrows_final_int = \l__witharrows_last_line_of_group_int + { \seq_put_left:NV \l__witharrows_last_arrows_seq \l__witharrows_arrow_int } } } } - \bool_if:nF { \str_if_eq_p:Vn \l_@@_status_arrow_str { independent } } + \bool_if:nF { \str_if_eq_p:Vn \l__witharrows_status_arrow_str { independent } } { - \int_compare:nT { \l_@@_pos_arrow_int != 8 } - { \@@_update_x:nn \l_@@_initial_int \l_@@_final_int } + \int_compare:nT { \l__witharrows_pos_arrow_int != 8 } + { \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int } } } \cs_generate_variant:Nn \keys_set:nn { n o } -\cs_new_protected:Npn \@@_keys_set: +\cs_new_protected:Npn \__witharrows_keys_set: { \keys_set_known:no { WithArrows / Arrow / SecondPass } } -\cs_new_protected:Npn \@@_draw_arrows:nn #1 #2 +\cs_new_protected:Npn \__witharrows_draw_arrows:nn #1 #2 { \group_begin: - \int_zero_new:N \l_@@_first_arrow_int - \int_set:Nn \l_@@_first_arrow_int { #1 } - \int_zero_new:N \l_@@_last_arrow_int - \int_set:Nn \l_@@_last_arrow_int { #2 } - \int_set:Nn \l_@@_arrow_int \l_@@_first_arrow_int - \int_until_do:nNnn \l_@@_arrow_int > \l_@@_last_arrow_int + \int_zero_new:N \l__witharrows_first_arrow_int + \int_set:Nn \l__witharrows_first_arrow_int { #1 } + \int_zero_new:N \l__witharrows_last_arrow_int + \int_set:Nn \l__witharrows_last_arrow_int { #2 } + \int_set:Nn \l__witharrows_arrow_int \l__witharrows_first_arrow_int + \int_until_do:nNnn \l__witharrows_arrow_int > \l__witharrows_last_arrow_int { \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { initial } \l_tmpa_tl - \int_set:Nn \l_@@_initial_int \l_tmpa_tl + \int_set:Nn \l__witharrows_initial_int \l_tmpa_tl \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { final } \l_tmpa_tl - \int_set:Nn \l_@@_final_int \l_tmpa_tl - \int_compare:nT { \l_@@_final_int <= \g_@@_line_int } \@@_draw_arrows_i: - \int_incr:N \l_@@_arrow_int + \int_set:Nn \l__witharrows_final_int \l_tmpa_tl + \int_compare:nT { \l__witharrows_final_int <= \g__witharrows_line_int } \__witharrows_draw_arrows_i: + \int_incr:N \l__witharrows_arrow_int } \group_end: } -\cs_new_protected:Npn \@@_draw_arrows_i: +\cs_new_protected:Npn \__witharrows_draw_arrows_i: { \group_begin: \prop_get:cnN - { g_@@_arrow _\l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _\l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { options } \l_tmpa_tl - \str_clear_new:N \l_@@_previous_key_str + \str_clear_new:N \l__witharrows_previous_key_str \exp_args:NNo \exp_args:No - \@@_keys_set: { \l_tmpa_tl , tikz = { xshift = \l_@@_xoffset_dim } } - \bool_set_false:N \l_@@_initial_r_bool - \bool_set_false:N \l_@@_final_r_bool - \int_case:nn \l_@@_pos_arrow_int + \__witharrows_keys_set: { \l_tmpa_tl , tikz = { xshift = \l__witharrows_xoffset_dim } } + \bool_set_false:N \l__witharrows_initial_r_bool + \bool_set_false:N \l__witharrows_final_r_bool + \int_case:nn \l__witharrows_pos_arrow_int { - 0 { \bool_set_true:N \l_@@_final_r_bool } - 2 { \bool_set_true:N \l_@@_initial_r_bool } + 0 { \bool_set_true:N \l__witharrows_final_r_bool } + 2 { \bool_set_true:N \l__witharrows_initial_r_bool } 3 { - \bool_set_true:N \l_@@_initial_r_bool - \bool_set_true:N \l_@@_final_r_bool + \bool_set_true:N \l__witharrows_initial_r_bool + \bool_set_true:N \l__witharrows_final_r_bool } } - \int_compare:nNnT \l_@@_pos_arrow_int = 5 + \int_compare:nNnT \l__witharrows_pos_arrow_int = 5 { - \dim_set:Nn \l_@@_x_dim { - \c_max_dim } - \@@_update_x:nn \l_@@_initial_int \l_@@_final_int + \dim_set:Nn \l__witharrows_x_dim { - \c_max_dim } + \__witharrows_update_x:nn \l__witharrows_initial_int \l__witharrows_final_int } - \tl_set:Nx \l_@@_initial_tl + \tl_set:Nx \l__witharrows_initial_tl { - \int_use:N \l_@@_initial_int - \bool_if:NTF \l_@@_initial_r_bool rl + \int_use:N \l__witharrows_initial_int - \bool_if:NTF \l__witharrows_initial_r_bool rl .south } - \tl_set:Nx \l_@@_final_tl - { \int_use:N \l_@@_final_int - \bool_if:NTF \l_@@_final_r_bool rl .north } + \tl_set:Nx \l__witharrows_final_tl + { \int_use:N \l__witharrows_final_int - \bool_if:NTF \l__witharrows_final_r_bool rl .north } \prop_get:cnN - { g_@@_arrow _ \l_@@_prefix_str _ \int_use:N \l_@@_arrow_int _ prop } + { g__witharrows_arrow _ \l__witharrows_prefix_str _ \int_use:N \l__witharrows_arrow_int _ prop } { label } \l_tmpa_tl - \seq_if_in:NxTF \l_@@_first_arrows_seq - { \int_use:N \l_@@_arrow_int } + \seq_if_in:NxTF \l__witharrows_first_arrows_seq + { \int_use:N \l__witharrows_arrow_int } { \bool_set_true:N \l_tmpa_bool } { \bool_set_false:N \l_tmpa_bool } - \seq_if_in:NxTF \l_@@_last_arrows_seq - { \int_use:N \l_@@_arrow_int } + \seq_if_in:NxTF \l__witharrows_last_arrows_seq + { \int_use:N \l__witharrows_arrow_int } { \bool_set_true:N \l_tmpb_bool } { \bool_set_false:N \l_tmpb_bool } - \int_compare:nNnT \l_@@_pos_arrow_int = 5 + \int_compare:nNnT \l__witharrows_pos_arrow_int = 5 { \bool_set_true:N \l_tmpa_bool \bool_set_true:N \l_tmpb_bool } - \dim_gzero_new:N \g_@@_x_initial_dim - \dim_gzero_new:N \g_@@_x_final_dim - \dim_gzero_new:N \g_@@_y_initial_dim - \dim_gzero_new:N \g_@@_y_final_dim - \begin { tikzpicture } [ @@_standard ] - \tikz@scan@one@point \pgfutil@firstofone ( \l_@@_initial_tl ) - \dim_gset:Nn \g_@@_x_initial_dim \pgf@x - \dim_gset:Nn \g_@@_y_initial_dim \pgf@y - \tikz@scan@one@point \pgfutil@firstofone ( \l_@@_final_tl ) - \dim_gset:Nn \g_@@_x_final_dim \pgf@x - \dim_gset:Nn \g_@@_y_final_dim \pgf@y + \dim_gzero_new:N \g__witharrows_x_initial_dim + \dim_gzero_new:N \g__witharrows_x_final_dim + \dim_gzero_new:N \g__witharrows_y_initial_dim + \dim_gzero_new:N \g__witharrows_y_final_dim + \begin { tikzpicture } [ __witharrows_standard ] + \tikz@scan@one@point \pgfutil@firstofone ( \l__witharrows_initial_tl ) + \dim_gset:Nn \g__witharrows_x_initial_dim \pgf@x + \dim_gset:Nn \g__witharrows_y_initial_dim \pgf@y + \tikz@scan@one@point \pgfutil@firstofone ( \l__witharrows_final_tl ) + \dim_gset:Nn \g__witharrows_x_final_dim \pgf@x + \dim_gset:Nn \g__witharrows_y_final_dim \pgf@y \end { tikzpicture } \bool_if:nTF - { \dim_compare_p:nNn { \g_@@_y_initial_dim - \g_@@_y_final_dim } - > \l_@@_max_length_of_arrow_dim + { \dim_compare_p:nNn { \g__witharrows_y_initial_dim - \g__witharrows_y_final_dim } + > \l__witharrows_max_length_of_arrow_dim && - \int_compare_p:nNn { \l_@@_final_int - \l_@@_initial_int } = 1 + \int_compare_p:nNn { \l__witharrows_final_int - \l__witharrows_initial_int } = 1 } { \tl_gset:Nx \g_tmpa_tl { - \int_compare:nNnTF \l_@@_pos_arrow_int < 5 - { \dim_use:N \g_@@_x_initial_dim } - { \dim_use:N \l_@@_x_dim } , + \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5 + { \dim_use:N \g__witharrows_x_initial_dim } + { \dim_use:N \l__witharrows_x_dim } , \dim_eval:n { - ( \g_@@_y_initial_dim + \g_@@_y_final_dim ) / 2 - + ( \l_@@_max_length_of_arrow_dim / 2 ) + ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2 + + ( \l__witharrows_max_length_of_arrow_dim / 2 ) } } \tl_gset:Nx \g_tmpb_tl { - \int_compare:nNnTF \l_@@_pos_arrow_int < 5 - { \dim_use:N \g_@@_x_final_dim } - { \dim_use:N \l_@@_x_dim } , + \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5 + { \dim_use:N \g__witharrows_x_final_dim } + { \dim_use:N \l__witharrows_x_dim } , \dim_eval:n { - ( \g_@@_y_initial_dim + \g_@@_y_final_dim ) / 2 - - ( \l_@@_max_length_of_arrow_dim / 2 ) + ( \g__witharrows_y_initial_dim + \g__witharrows_y_final_dim ) / 2 + - ( \l__witharrows_max_length_of_arrow_dim / 2 ) } } } { \tl_gset:Nx \g_tmpa_tl { - \int_compare:nNnTF \l_@@_pos_arrow_int < 5 - { \dim_use:N \g_@@_x_initial_dim } - { \dim_use:N \l_@@_x_dim } , + \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5 + { \dim_use:N \g__witharrows_x_initial_dim } + { \dim_use:N \l__witharrows_x_dim } , \bool_if:NTF \l_tmpa_bool - { \dim_eval:n { \g_@@_y_initial_dim + \l_@@_start_adjust_dim } } - { \dim_use:N \g_@@_y_initial_dim } + { \dim_eval:n { \g__witharrows_y_initial_dim + \l__witharrows_start_adjust_dim } } + { \dim_use:N \g__witharrows_y_initial_dim } } \tl_gset:Nx \g_tmpb_tl { - \int_compare:nNnTF \l_@@_pos_arrow_int < 5 - { \dim_use:N \g_@@_x_final_dim } - { \dim_use:N \l_@@_x_dim } , + \int_compare:nNnTF \l__witharrows_pos_arrow_int < 5 + { \dim_use:N \g__witharrows_x_final_dim } + { \dim_use:N \l__witharrows_x_dim } , \bool_if:NTF \l_tmpb_bool - { \dim_eval:n { \g_@@_y_final_dim - \l_@@_end_adjust_dim } } - { \dim_use:N \g_@@_y_final_dim } + { \dim_eval:n { \g__witharrows_y_final_dim - \l__witharrows_end_adjust_dim } } + { \dim_use:N \g__witharrows_y_final_dim } } } - \@@_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl + \__witharrows_draw_arrow:nno \g_tmpa_tl \g_tmpb_tl \l_tmpa_tl \group_end: } -\cs_new_protected:Npn \@@_def_function_tmpa:n #1 +\cs_new_protected:Npn \__witharrows_def_function_tmpa:n #1 { - \cs_set:Npn \@@_tmpa:nnn ##1 ##2 ##3 + \cs_set:Npn \__witharrows_tmpa:nnn ##1 ##2 ##3 { \begin{tikzpicture} [ - @@_standard , + __witharrows_standard , every~path / .style = WithArrows / arrow ] #1 \end{tikzpicture} } } -\cs_new_protected:Npn \@@_draw_arrow:nnn #1 #2 #3 +\cs_new_protected:Npn \__witharrows_draw_arrow:nnn #1 #2 #3 { - \bool_if:nT { \l_@@_wrap_lines_bool && \l_@@_in_DispWithArrows_bool } - { \tl_set_eq:NN \l_@@_tikz_code_tl \c_@@_tikz_code_wrap_lines_tl } - \exp_args:NV \@@_def_function_tmpa:n \l_@@_tikz_code_tl - \@@_tmpa:nnn { #1 } { #2 } { #3 } + \bool_if:nT { \l__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool } + { \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_wrap_lines_tl } + \exp_args:NV \__witharrows_def_function_tmpa:n \l__witharrows_tikz_code_tl + \__witharrows_tmpa:nnn { #1 } { #2 } { #3 } } -\cs_generate_variant:Nn \@@_draw_arrow:nnn { n n o } -\tl_const:Nn \c_@@_tikz_code_wrap_lines_tl +\cs_generate_variant:Nn \__witharrows_draw_arrow:nnn { n n o } +\tl_const:Nn \c__witharrows_tikz_code_wrap_lines_tl { - \draw ( #1 ) to node ( @@_label ) { } ( #2 ) ; - \tikz@parse@node \pgfutil@firstofone ( @@_label.west ) + \draw ( #1 ) to node ( __witharrows_label ) { } ( #2 ) ; + \tikz@parse@node \pgfutil@firstofone ( __witharrows_label.west ) \dim_set:Nn \l_tmpa_dim - { \g_@@_right_x_dim - \pgf@x - \pgfkeysvalueof { / pgf / inner~xsep } } + { \g__witharrows_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 { @@ -1539,80 +1525,80 @@ } \dim_compare:nNnT \l_tmpa_dim > \c_zero_dim { - \path ( @@_label.west ) + \path ( __witharrows_label.west ) node [ anchor = west , text~width = \dim_use:N \l_tmpa_dim ] { #3 } ; } } -\cs_new_protected:Npn \@@_update_x:nn #1 #2 +\cs_new_protected:Npn \__witharrows_update_x:nn #1 #2 { \int_step_inline:nnn { #1 } { #2 } { - \begin { tikzpicture } [ @@_standard ] + \begin { tikzpicture } [ __witharrows_standard ] \tikz@scan@one@point \pgfutil@firstofone ( ##1 - l ) - \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \l_@@_x_dim \pgf@x } + \dim_gset:Nn \g_tmpa_dim { \dim_max:nn \l__witharrows_x_dim \pgf@x } \end { tikzpicture } - \dim_set_eq:NN \l_@@_x_dim \g_tmpa_dim + \dim_set_eq:NN \l__witharrows_x_dim \g_tmpa_dim } } -\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g_@@_last_env_int } +\cs_new:Npn \WithArrowsLastEnv { \int_use:N \g__witharrows_last_env_int } \keys_define:nn { WithArrows / Arrow / code-after } { tikz .code:n = \tikzset { WithArrows / arrow / .append~style = { #1 } } , tikz .value_required:n = true , rr .value_forbidden:n = true , - rr .code:n = \@@_fix_pos_option:n 0 , + rr .code:n = \__witharrows_fix_pos_option:n 0 , ll .value_forbidden:n = true, - ll .code:n = \@@_fix_pos_option:n 1 , + ll .code:n = \__witharrows_fix_pos_option:n 1 , rl .value_forbidden:n = true , - rl .code:n = \@@_fix_pos_option:n 2 , + rl .code:n = \__witharrows_fix_pos_option:n 2 , lr .value_forbidden:n = true , - lr .code:n = \@@_fix_pos_option:n 3 , + lr .code:n = \__witharrows_fix_pos_option:n 3 , v .value_forbidden:n = true , - v .code:n = \@@_fix_pos_option:n 4 , - tikz-code .tl_set:N = \l_@@_tikz_code_tl , + v .code:n = \__witharrows_fix_pos_option:n 4 , + tikz-code .tl_set:N = \l__witharrows_tikz_code_tl , tikz-code .value_required:n = true , - xoffset .dim_set:N = \l_@@_xoffset_dim , + xoffset .dim_set:N = \l__witharrows_xoffset_dim , xoffset .value_required:n = true , unknown .code:n = - \@@_sort_seq:N \l_@@_options_Arrow_code_after_seq - \@@_error:n { Unknown~option~Arrow~in~code-after } + \__witharrows_sort_seq:N \l__witharrows_options_Arrow_code_after_seq + \__witharrows_error:n { Unknown~option~Arrow~in~code-after } } -\seq_new:N \l_@@_options_Arrow_code_after_seq -\@@_set_seq_of_str_from_clist:Nn \l_@@_options_Arrow_code_after_seq +\seq_new:N \l__witharrows_options_Arrow_code_after_seq +\__witharrows_set_seq_of_str_from_clist:Nn \l__witharrows_options_Arrow_code_after_seq { ll, lr, rl, rr, tikz, tikz-code, v, x, offset } -\NewDocumentCommand \@@_Arrow_code_after { O { } m m m ! O { } } +\NewDocumentCommand \__witharrows_Arrow_code_after { O { } m m m ! O { } } { - \int_set:Nn \l_@@_pos_arrow_int 1 - \str_clear_new:N \l_@@_previous_key_str + \int_set:Nn \l__witharrows_pos_arrow_int 1 + \str_clear_new:N \l__witharrows_previous_key_str \group_begin: \keys_set:nn { WithArrows / Arrow / code-after } - { #1, #5, tikz = { xshift = \l_@@_xoffset_dim } } - \bool_set_false:N \l_@@_initial_r_bool - \bool_set_false:N \l_@@_final_r_bool - \int_case:nn \l_@@_pos_arrow_int + { #1, #5, tikz = { xshift = \l__witharrows_xoffset_dim } } + \bool_set_false:N \l__witharrows_initial_r_bool + \bool_set_false:N \l__witharrows_final_r_bool + \int_case:nn \l__witharrows_pos_arrow_int { 0 { - \bool_set_true:N \l_@@_initial_r_bool - \bool_set_true:N \l_@@_final_r_bool + \bool_set_true:N \l__witharrows_initial_r_bool + \bool_set_true:N \l__witharrows_final_r_bool } - 2 { \bool_set_true:N \l_@@_initial_r_bool } - 3 { \bool_set_true:N \l_@@_final_r_bool } + 2 { \bool_set_true:N \l__witharrows_initial_r_bool } + 3 { \bool_set_true:N \l__witharrows_final_r_bool } } \tl_if_eq:nnTF { #2 } { #3 } - { \@@_error:nn { Both~lines~are~equal } { #2 } } + { \__witharrows_error:nn { Both~lines~are~equal } { #2 } } { - \cs_if_free:cTF { pgf@sh@ns@wa - \l_@@_prefix_str - #2 - l } - { \@@_error:nx { Wrong~line~in~Arrow } { #2 } } + \cs_if_free:cTF { pgf@sh@ns@wa - \l__witharrows_prefix_str - #2 - l } + { \__witharrows_error:nx { Wrong~line~in~Arrow } { #2 } } { - \cs_if_free:cTF { pgf@sh@ns@wa - \l_@@_prefix_str - #3 - l } - { \@@_error:nx { Wrong~line~in~Arrow } { #3 } } + \cs_if_free:cTF { pgf@sh@ns@wa - \l__witharrows_prefix_str - #3 - l } + { \__witharrows_error:nx { Wrong~line~in~Arrow } { #3 } } { - \int_compare:nNnTF \l_@@_pos_arrow_int = 4 + \int_compare:nNnTF \l__witharrows_pos_arrow_int = 4 { - \begin { tikzpicture } [ @@_standard ] + \begin { tikzpicture } [ __witharrows_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 @@ -1626,42 +1612,42 @@ \end { tikzpicture } } { - \begin { tikzpicture } [ @@_standard ] + \begin { tikzpicture } [ __witharrows_standard ] \tikz@scan@one@point \pgfutil@firstofone - ( #2-\bool_if:NTF\l_@@_initial_r_bool rl .south ) + ( #2-\bool_if:NTF\l__witharrows_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_@@_final_r_bool rl .north ) + ( #3-\bool_if:NTF\l__witharrows_final_r_bool rl .north ) \tl_gset:Nx \g_tmpb_tl { \dim_use:N \pgf@x , \dim_use:N \pgf@y } \end { tikzpicture } } - \@@_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 } + \__witharrows_draw_arrow:nnn \g_tmpa_tl \g_tmpb_tl { #4 } } } } \group_end: } -\cs_new_protected:Npn \@@_MultiArrow:nn #1 #2 +\cs_new_protected:Npn \__witharrows_MultiArrow:nn #1 #2 { \exp_args:Nnx \regex_match:nnTF { \A \d+ (\,\d+)* ( \, \.\.\. (\,\d+)+ )* \Z } { #1 } - { \@@_MultiArrow_i:nn { #1 } { #2 } } - { \@@_error:nx { Invalid~specification~for~MultiArrow } { #1 } } + { \__witharrows_MultiArrow_i:nn { #1 } { #2 } } + { \__witharrows_error:nx { Invalid~specification~for~MultiArrow } { #1 } } } -\cs_new_protected:Npn \@@_MultiArrow_i:nn #1 #2 +\cs_new_protected:Npn \__witharrows_MultiArrow_i:nn #1 #2 { \foreach \x in { #1 } { - \cs_if_free:cTF { pgf@sh@ns@wa - \l_@@_prefix_str - \x - l } - { \@@_error:nx { Wrong~line~specification~in~MultiArrow } \x } + \cs_if_free:cTF { pgf@sh@ns@wa - \l__witharrows_prefix_str - \x - l } + { \__witharrows_error:nx { Wrong~line~specification~in~MultiArrow } \x } { \clist_gput_right:Nx \g_tmpa_clist \x } } \int_compare:nTF { \clist_count:N \g_tmpa_clist < 2 } - { \@@_error:n { Too~small~specification~for~MultiArrow } } + { \__witharrows_error:n { Too~small~specification~for~MultiArrow } } { \clist_sort:Nn \g_tmpa_clist { @@ -1672,59 +1658,59 @@ \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 \@@_MultiArrow_i:n \g_tmpa_clist + \exp_args:NV \__witharrows_MultiArrow_i:n \g_tmpa_clist \begin { tikzpicture } [ - @@_standard , + __witharrows_standard , every~path / .style = { WithArrows / arrow } ] - \draw [<->] ([xshift = \l_@@_xoffset_dim]\l_tmpa_tl-r.south) + \draw [<->] ([xshift = \l__witharrows_xoffset_dim]\l_tmpa_tl-r.south) -- ++(5mm,0) - -- node (@@_label) {} - ([xshift = \l_@@_xoffset_dim+5mm]\l_tmpb_tl-r.south) - -- ([xshift = \l_@@_xoffset_dim]\l_tmpb_tl-r.south) ; - \tikz@parse@node \pgfutil@firstofone (@@_label.west) + -- node (__witharrows_label) {} + ([xshift = \l__witharrows_xoffset_dim+5mm]\l_tmpb_tl-r.south) + -- ([xshift = \l__witharrows_xoffset_dim]\l_tmpb_tl-r.south) ; + \tikz@parse@node \pgfutil@firstofone (__witharrows_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_@@_wrap_lines_bool && \l_@@_in_DispWithArrows_bool } + \bool_if:nT { \l__witharrows_wrap_lines_bool && \l__witharrows_in_DispWithArrows_bool } { \dim_set:Nn \l_tmpb_dim - { \g_@@_right_x_dim - \pgf@x - 0.3333 em } + { \g__witharrows_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 (@@_label.west) + \path (__witharrows_label.west) node [ anchor = west, text~width = \dim_use:N \l_tmpa_dim ] { #2 } ; \end{tikzpicture} } } -\cs_new_protected:Npn \@@_MultiArrow_i:n #1 +\cs_new_protected:Npn \__witharrows_MultiArrow_i:n #1 { \begin { tikzpicture } [ - @@_standard , + __witharrows_standard , every~path / .style = { WithArrows / arrow } ] \foreach \k in { #1 } { \draw [ <- ] - ( [xshift = \l_@@_xoffset_dim]\k-r.south ) -- ++(5mm,0) ; + ( [xshift = \l__witharrows_xoffset_dim]\k-r.south ) -- ++(5mm,0) ; } ; \end{tikzpicture} } -\str_const:Nn \c_@@_option_ignored_str +\str_const:Nn \c__witharrows_option_ignored_str { If~you~go~on,~this~option~will~be~ignored. } -\str_const:Nn \c_@@_command_ignored_str +\str_const:Nn \c__witharrows_command_ignored_str { If~you~go~on,~this~command~will~be~ignored. } -\@@_msg_new:nn { amsmath~not~loaded } +\__witharrows_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. } -\@@_msg_new:nn { Bad~value~for~replace~brace~by } +\__witharrows_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:~., @@ -1734,263 +1720,263 @@ \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_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { option~of~cr~negative } +\__witharrows_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_@@_line_int\ - of~your~environment~\{\l_@@_type_env_str\}.\\ - \c_@@_option_ignored_str + should~be~positive~in~the~row~\int_use:N \g__witharrows_line_int\ + of~your~environment~\{\l__witharrows_type_env_str\}.\\ + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { omit~probably~used } +\__witharrows_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_@@_line_int\ - (or~another~line)~of~your~environment~\{\l_@@_type_env_str\}.\\ + \token_to_str:N\omit\ in~the~line~\int_use:N \g__witharrows_line_int\ + (or~another~line)~of~your~environment~\{\l__witharrows_type_env_str\}.\\ You~can~go~on~but~you~may~have~others~errors. } -\@@_msg_new:nn { newline~at~the~end~of~env } +\__witharrows_msg_new:nn { newline~at~the~end~of~env } { The~environments~of~witharrows~(\{WithArrows\}~and~ \{DispWithArrows\})~should~not~end~by~\token_to_str:N \\.\\ However,~you~can~go~on~for~this~time.~No~similar~error~will~be~ raised~in~this~document. } -\@@_msg_new:nn { Invalid~option~format } +\__witharrows_msg_new:nn { Invalid~option~format } { The~key~'format'~should~contain~only~letters~r,~c~and~l~and~ must~not~be~empty.\\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Value~for~a~key } +\__witharrows_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. } -\@@_msg_new:nnn { Unknown~option~in~Arrow } +\__witharrows_msg_new:nnn { Unknown~option~in~Arrow } { The~key~'\l_keys_key_tl'~is~unknown~for~the~command~ - \l_@@_string_Arrow_for_msg_str\ in~the~row~ - \int_use:N \g_@@_line_int\ of~your~environment~ - \{\l_@@_type_env_str\}. \l_tmpa_str \\ - \c_@@_option_ignored_str \\ + \l__witharrows_string_Arrow_for_msg_str\ in~the~row~ + \int_use:N \g__witharrows_line_int\ of~your~environment~ + \{\l__witharrows_type_env_str\}. \l_tmpa_str \\ + \c__witharrows_option_ignored_str \\ For~a~list~of~the~available~keys,~type~H~<return>. } { The~available~keys~are~(in~alphabetic~order):~ - \seq_use:Nnnn \l_@@_options_Arrow_seq {~and~} {,~} {~and~}. + \seq_use:Nnnn \l__witharrows_options_Arrow_seq {~and~} {,~} {~and~}. } -\@@_msg_new:nnn { Unknown~option~WithArrows } +\__witharrows_msg_new:nnn { Unknown~option~WithArrows } { - The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\ - \c_@@_option_ignored_str \\ + The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\ + \c__witharrows_option_ignored_str \\ For~a~list~of~the~available~keys,~type~H~<return>. } { The~available~keys~are~(in~alphabetic~order):~ - \seq_use:Nnnn \l_@@_options_WithArrows_seq {~and~} {,~} {~and~}. + \seq_use:Nnnn \l__witharrows_options_WithArrows_seq {~and~} {,~} {~and~}. } -\@@_msg_new:nnn { Unknown~option~DispWithArrows } +\__witharrows_msg_new:nnn { Unknown~option~DispWithArrows } { - The~key~'\l_keys_key_tl'~is~unknown~in~\{\l_@@_type_env_str\}. \\ - \c_@@_option_ignored_str \\ + The~key~'\l_keys_key_tl'~is~unknown~in~\{\l__witharrows_type_env_str\}. \\ + \c__witharrows_option_ignored_str \\ For~a~list~of~the~available~keys,~type~H~<return>. } { The~available~keys~are~(in~alphabetic~order):~ - \seq_use:Nnnn \l_@@_options_DispWithArrows_seq {~and~} {,~} {~and~}. + \seq_use:Nnnn \l__witharrows_options_DispWithArrows_seq {~and~} {,~} {~and~}. } -\@@_msg_new:nnn { Unknown~option~WithArrowsOptions } +\__witharrows_msg_new:nnn { Unknown~option~WithArrowsOptions } { The~key~'\l_keys_key_tl'~is~unknown~in~ \token_to_str:N \WithArrowsOptions. \\ - \c_@@_option_ignored_str \\ + \c__witharrows_option_ignored_str \\ For~a~list~of~the~available~keys,~type~H~<return>. } { The~available~keys~are~(in~alphabetic~order):~ - \seq_use:Nnnn \l_@@_options_WithArrowsOptions_seq {~and~} {,~} {~and~}. + \seq_use:Nnnn \l__witharrows_options_WithArrowsOptions_seq {~and~} {,~} {~and~}. } -\@@_msg_new:nnn { Unknown~option~Arrow~in~code-after } +\__witharrows_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_@@_option_ignored_str \\ + \c__witharrows_option_ignored_str \\ For~a~list~of~the~available~keys,~type~H~<return>. } { The~available~keys~are~(in~alphabetic~order):~ - \seq_use:Nnnn \l_@@_options_Arrow_code_after_seq {~and~} {,~} {~and~}. + \seq_use:Nnnn \l__witharrows_options_Arrow_code_after_seq {~and~} {,~} {~and~}. } -\@@_msg_new:nn { Too~much~columns~in~WithArrows } +\__witharrows_msg_new:nn { Too~much~columns~in~WithArrows } { - Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N - \l_@@_nb_cols_int\ columns~and~you~try~to~use~one~more.~ + Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N + \l__witharrows_nb_cols_int\ columns~and~you~try~to~use~one~more.~ Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str.~ If~you~really~want~to~use~more~columns~(after~the~arrows)~you~should~use~ the~option~'more-columns'~at~a~global~level~or~for~an~environment. \\ However,~you~can~go~one~for~this~time. } -\@@_msg_new:nn { Too~much~columns~in~DispWithArrows } +\__witharrows_msg_new:nn { Too~much~columns~in~DispWithArrows } { - Your~environment~\{\l_@@_type_env_str\}~has~\int_use:N - \l_@@_nb_cols_int\ columns~and~you~try~to~use~one~more.~ + Your~environment~\{\l__witharrows_type_env_str\}~has~\int_use:N + \l__witharrows_nb_cols_int\ columns~and~you~try~to~use~one~more.~ Maybe~you~have~forgotten~a~\c_backslash_str\c_backslash_str\ - at~the~end~of~row~\int_use:N \g_@@_line_int. \\ + at~the~end~of~row~\int_use:N \g__witharrows_line_int. \\ This~error~is~fatal. } -\@@_msg_new:nn { Negative~jump } +\__witharrows_msg_new:nn { Negative~jump } { You~can't~use~a~negative~value~for~the~option~'jump'~of~command~ - \l_@@_string_Arrow_for_msg_str\ - in~the~row~\int_use:N \g_@@_line_int\ - of~your~environment~\{\l_@@_type_env_str\}.~ + \l__witharrows_string_Arrow_for_msg_str\ + in~the~row~\int_use:N \g__witharrows_line_int\ + of~your~environment~\{\l__witharrows_type_env_str\}.~ You~can~create~an~arrow~going~backwards~with~the~option~'<-'~of~Tikz. \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { new-group~without~groups } +\__witharrows_msg_new:nn { new-group~without~groups } { You~can't~use~the~option~'new-group'~for~the~command~ - \l_@@_string_Arrow_for_msg_str\ + \l__witharrows_string_Arrow_for_msg_str\ because~you~are~not~in~'groups'~mode.~Try~to~use~the~option~ - 'groups'~in~your~environment~\{\l_@@_type_env_str\}. \\ - \c_@@_option_ignored_str + 'groups'~in~your~environment~\{\l__witharrows_type_env_str\}. \\ + \c__witharrows_option_ignored_str } -\@@_msg_new:nn +\__witharrows_msg_new:nn { Too~few~lines~for~an~arrow } { - Line~\l_@@_input_line_str\ - :~an~arrow~specified~in~the~row~\int_use:N \l_@@_initial_int\ - of~your~environment~\{\l_@@_type_env_str\}~can't~be~drawn~ + Line~\l__witharrows_input_line_str\ + :~an~arrow~specified~in~the~row~\int_use:N \l__witharrows_initial_int\ + of~your~environment~\{\l__witharrows_type_env_str\}~can't~be~drawn~ because~it~arrives~after~the~last~row~of~the~environment. \\ If~you~go~on,~this~arrow~will~be~ignored. } -\@@_msg_new:nn { WithArrows~outside~math~mode } +\__witharrows_msg_new:nn { WithArrows~outside~math~mode } { - The~environment~\{\l_@@_type_env_str\}~should~be~used~only~in~math~mode~ + The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~in~math~mode~ like~the~environment~\{aligned\}~of~amsmath. \\ Nevertheless,~you~can~go~on. } -\@@_msg_new:nn { DispWithArrows~in~math~mode } +\__witharrows_msg_new:nn { DispWithArrows~in~math~mode } { - The~environment~\{\l_@@_type_env_str\}~should~be~used~only~outside~math~ + The~environment~\{\l__witharrows_type_env_str\}~should~be~used~only~outside~math~ mode~like~the~environment~\{align\}~of~amsmath. \\ This~error~is~fatal. } -\@@_msg_new:nn { Incompatible~options~in~Arrow } +\__witharrows_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_@@_previous_key_str'~set~in~the~same~command~ - \l_@@_string_Arrow_for_msg_str. \\ - \c_@@_option_ignored_str + '\l__witharrows_previous_key_str'~set~in~the~same~command~ + \l__witharrows_string_Arrow_for_msg_str. \\ + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Incompatible~options } +\__witharrows_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_@@_previous_key_str'~set~in~the~same~command~ - \bool_if:NT \l_@@_in_code_after_bool + '\l__witharrows_previous_key_str'~set~in~the~same~command~ + \bool_if:NT \l__witharrows_in_code_after_bool { - \l_@@_string_Arrow_for_msg_str\ - in~the~code-after~of~your~environment~\{\l_@@_type_env_str\} + \l__witharrows_string_Arrow_for_msg_str\ + in~the~code-after~of~your~environment~\{\l__witharrows_type_env_str\} }. \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Arrow~not~in~last~column } +\__witharrows_msg_new:nn { Arrow~not~in~last~column } { - You~should~use~the~command~\l_@@_string_Arrow_for_msg_str\ - only~in~the~last~column~(column~\int_use:N\l_@@_nb_cols_int)~ - of~your~environment~\{\l_@@_type_env_str\}.\\ + You~should~use~the~command~\l__witharrows_string_Arrow_for_msg_str\ + only~in~the~last~column~(column~\int_use:N\l__witharrows_nb_cols_int)~ + of~your~environment~\{\l__witharrows_type_env_str\}.\\ However~you~can~go~on~for~this~time. } -\@@_msg_new:nn { Wrong~line~in~Arrow } +\__witharrows_msg_new:nn { Wrong~line~in~Arrow } { The~specification~of~line~'#1'~you~use~in~the~command~ - \l_@@_string_Arrow_for_msg_str\ - in~the~'code-after'~of~\{\l_@@_type_env_str\}~doesn't~exist. \\ - \c_@@_option_ignored_str + \l__witharrows_string_Arrow_for_msg_str\ + in~the~'code-after'~of~\{\l__witharrows_type_env_str\}~doesn't~exist. \\ + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Both~lines~are~equal } +\__witharrows_msg_new:nn { Both~lines~are~equal } { - In~the~'code-after'~of~\{\l_@@_type_env_str\}~you~try~to~ + In~the~'code-after'~of~\{\l__witharrows_type_env_str\}~you~try~to~ draw~an~arrow~going~to~itself~from~the~line~'#1'.~This~is~not~possible. \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Wrong~line~specification~in~MultiArrow } +\__witharrows_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. } -\@@_msg_new:nn { Too~small~specification~for~MultiArrow } +\__witharrows_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_@@_command_ignored_str + \c__witharrows_command_ignored_str } -\@@_msg_new:nn { Not~allowed~in~DispWithArrows } +\__witharrows_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_@@_nb_cols_int)~of~\{\l_@@_type_env_str\}. \\ - \c_@@_option_ignored_str + (column~\int_use:N\l__witharrows_nb_cols_int)~of~\{\l__witharrows_type_env_str\}. \\ + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { Not~allowed~in~WithArrows } +\__witharrows_msg_new:nn { Not~allowed~in~WithArrows } { - The~command~\token_to_str:N #1 is~not~allowed~in~\{\l_@@_type_env_str\}~ + The~command~\token_to_str:N #1 is~not~allowed~in~\{\l__witharrows_type_env_str\}~ (it's~allowed~in~the~last~column~of~\{DispWithArrows\}). \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { tag*~without~amsmath } +\__witharrows_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. } -\@@_msg_new:nn { Multiple~tags } +\__witharrows_msg_new:nn { Multiple~tags } { You~can't~use~twice~the~command~\token_to_str:N\tag\ - in~a~line~of~the~environment~\{\l_@@_type_env_str\}. \\ + in~a~line~of~the~environment~\{\l__witharrows_type_env_str\}. \\ If~you~go~on,~the~tag~'#1'~will~be~used. } -\@@_msg_new:nn { Multiple~labels } +\__witharrows_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_@@_type_env_str\}. \\ + twice~in~a~line~of~the~environment~\{\l__witharrows_type_env_str\}. \\ However,~you~can~go~on.~ - \bool_if:NT \c_@@_showlabels_loaded_bool + \bool_if:NT \c__witharrows_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. } -\@@_msg_new:nn { Multiple~labels~with~cleveref } +\__witharrows_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_@@_type_env_str\}. \\ + twice~in~a~line~of~the~environment~\{\l__witharrows_type_env_str\}. \\ If~you~go~on,~you~may~have~undefined~references. } -\@@_msg_new:nn { Inexistent~v-node } +\__witharrows_msg_new:nn { Inexistent~v-node } { There~is~a~problem.~Maybe~you~have~put~a~command~\token_to_str:N\cr\ instead~of~a~command~\token_to_str:N\\~at~the~end~of~ the~row~\l_tmpa_int\ - of~your~environment~\{\l_@@_type_env_str\}. \\ + of~your~environment~\{\l__witharrows_type_env_str\}. \\ This~error~is~fatal. } -\@@_msg_new:nn { Option~xoffset~forbidden } +\__witharrows_msg_new:nn { Option~xoffset~forbidden } { You~can't~use~the~option~'xoffset'~in~the~command~ - \l_@@_string_Arrow_for_msg_str\ in~the~row~\int_use:N \g_@@_line_int\ - of~your~environment~\{\l_@@_type_env_str\}~ + \l__witharrows_string_Arrow_for_msg_str\ in~the~row~\int_use:N \g__witharrows_line_int\ + of~your~environment~\{\l__witharrows_type_env_str\}~ because~you~are~using~the~option~ - ' \int_compare:nNnTF \l_@@_pos_arrow_int = 7 + ' \int_compare:nNnTF \l__witharrows_pos_arrow_int = 7 { group } { groups } '.~It's~possible~for~an~independent~arrow~or~if~there~is~ only~one~arrow. \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nnn { Duplicate~name } +\__witharrows_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,~ @@ -2001,22 +1987,28 @@ } { The~names~already~defined~in~this~document~are:~ - \seq_use:Nnnn \g_@@_names_seq { ,~ } { ,~ } { ~and~ }. + \seq_use:Nnnn \g__witharrows_names_seq { ,~ } { ,~ } { ~and~ }. + } +\__witharrows_msg_new:nn { Invalid~specification~for~MultiArrow } + { + The~specification~of~rows~for~\token_to_str:N\MultiArrow\ + (i.e.~#1)~is~invalid. \\ + \c__witharrows_command_ignored_str } \NewDocumentCommand \WithArrowsNewStyle { m m } { \keys_if_exist:nnTF { WithArrows / Global } { #1 } - { \@@_error:nn { Key~already~defined } { #1 } } + { \__witharrows_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_@@_options_WithArrows_seq { \tl_to_str:n { #1 } } - \seq_put_right:Nx \l_@@_options_DispWithArrows_seq + \seq_put_right:Nx \l__witharrows_options_WithArrows_seq { \tl_to_str:n { #1 } } + \seq_put_right:Nx \l__witharrows_options_DispWithArrows_seq { \tl_to_str:n { #1 } } - \seq_put_right:Nx \l_@@_options_WithArrowsOptions_seq + \seq_put_right:Nx \l__witharrows_options_WithArrowsOptions_seq { \tl_to_str:N { #1 } } \group_begin: \msg_set:nnn { witharrows } { Unknown~option~WithArrowsOptions } @@ -2029,105 +2021,182 @@ \group_end: } } -\@@_msg_new:nn { Key~already~defined } +\__witharrows_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_@@_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_@@_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 / up-and-down } + { + radius .dim_set:N = \l__witharrows_up_and_down_radius_dim , + radius .value_required:n = true , + width .code:n = + \str_case:nnF { #1 } + { + { min } { \dim_zero:N \l__witharrows_arrow_width_dim } + { max } { \dim_set_eq:NN \l__witharrows_arrow_width_dim \c_max_dim } + } + { \dim_set:Nn \l__witharrows_arrow_width_dim { #1 } } , + width .value_required:n = true , + unknown .code:n = \__witharrows_error:n { Option~unknown~for~up-and-down } + } +\__witharrows_msg_new:nn { Option~unknown~for~up-and-down } + { + The~option~'\l_keys_key_tl'~is~unknown.~\c__witharrows_option_ignored_str + } +\tl_const:Nn \c__witharrows_tikz_code_up_tl + { + \dim_compare:nNnTF \l__witharrows_arrow_width_dim = \c_max_dim + { + \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) -- node + { + \dim_set:Nn \l_tmpa_dim { \x2 - \x1 } + \begin { varwidth } \l_tmpa_dim + \narrowragged + #3 + \end { varwidth } + } + (\x2,\y1) -- (\p2) ; + } + { + \path + let \p1 = ( #1 ) , \p2 = ( #2 ) + in node + { + \dim_set:Nn \l_tmpa_dim + { \x2 - \x1 - \l__witharrows_up_and_down_radius_dim } + \dim_compare:nNnF \l__witharrows_arrow_width_dim = \c_zero_dim + { + \dim_set:Nn \l_tmpa_dim + { \dim_min:nn \l_tmpa_dim \l__witharrows_arrow_width_dim } + } + \hbox_gset:Nn \g_tmpa_box + { + \begin { varwidth } \l_tmpa_dim + \narrowragged + #3 + \end { varwidth } + } + \dim_compare:nNnTF \l__witharrows_arrow_width_dim > \c_zero_dim + { \dim_gset_eq:NN \g_tmpa_dim \l__witharrows_arrow_width_dim } + { \dim_gset:Nn \g_tmpa_dim { \box_wd:N \g_tmpa_box } } + \dim_gadd:Nn \g_tmpa_dim \l__witharrows_up_and_down_radius_dim + } ; + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\x2-\g_tmpa_dim,\y1) + -- node { \box_use:N \g_tmpa_box } + (\x2-\l__witharrows_up_and_down_radius_dim,\y1) + [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] + -| (\p2) ; + } + } +\tl_const:Nn \c__witharrows_tikz_code_down_tl + { + \dim_compare:nNnTF \l__witharrows_arrow_width_dim = \c_max_dim + { + \draw [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) -- (\x1,\y2) -- node + { + \dim_set:Nn \l_tmpa_dim { \x1 - \x2 } + \begin { varwidth } \l_tmpa_dim + \narrowragged + #3 + \end { varwidth } + } + (\p2) ; + } + { + \path + let \p1 = ( #1 ) , \p2 = ( #2 ) + in node + { + \hbox_gset:Nn \g_tmpa_box + { + \dim_set:Nn \l_tmpa_dim + { \x1 - \x2 - \l__witharrows_up_and_down_radius_dim - 2 mm } + \begin { varwidth } \l_tmpa_dim + \narrowragged + #3 + \end { varwidth } + } + \dim_compare:nNnTF \l__witharrows_arrow_width_dim > \c_zero_dim + { \dim_gset_eq:NN \g_tmpa_dim \l__witharrows_arrow_width_dim } + { \dim_gset:Nn \g_tmpa_dim { \box_wd:N \g_tmpa_box } } + \dim_gadd:Nn \g_tmpa_dim \l__witharrows_up_and_down_radius_dim + } ; + + \draw + let \p1 = ( #1 ) , \p2 = ( #2 ) + in (\p1) + { [ rounded~corners = \l__witharrows_up_and_down_radius_dim ] -- (\x1,\y2) } + -- (\x1-\l__witharrows_up_and_down_radius_dim,\y2) + -- node { \box_use:N \g_tmpa_box } (\x1-\g_tmpa_dim,\y2) + -- ++ (-2mm,0) ; + } } \keys_define:nn { WithArrows / Arrow / FirstPass } { - up .code:n = \@@_set_independent: , - down .code:n = \@@_set_independent: , + up .code:n = \__witharrows_set_independent_bis: , + down .code:n = \__witharrows_set_independent_bis: , up .default:n = NoValue , down .default:n = NoValue } \keys_define:nn { WithArrows / Arrow / SecondPass } { up .code:n = - \str_if_empty:NT \l_@@_previous_key_str + \str_if_empty:NT \l__witharrows_previous_key_str { - \str_set:Nn \l_@@_previous_key_str { up } - \bool_if:NTF \c_@@_varwidth_loaded_bool + \str_set:Nn \l__witharrows_previous_key_str { up } + \bool_if:NTF \c__witharrows_varwidth_loaded_bool { \cs_if_exist:cTF { tikz@library@calc@loaded } { - \int_set:Nn \l_@@_pos_arrow_int \c_one_int - \bool_set_false:N \l_@@_wrap_lines_bool - \tl_set_eq:NN \l_@@_tikz_code_tl - \c_@@_tikz_code_up_tl + \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl + \int_set:Nn \l__witharrows_pos_arrow_int \c_one_int + \bool_set_false:N \l__witharrows_wrap_lines_bool + \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_up_tl } - { \@@_error:n { calc~not~loaded } } + { \__witharrows_error:n { calc~not~loaded } } } - { \@@_error:n { varwidth~not~loaded } } + { \__witharrows_error:n { varwidth~not~loaded } } } , down .code:n = - \str_if_empty:NT \l_@@_previous_key_str + \str_if_empty:NT \l__witharrows_previous_key_str { - \str_set:Nn \l_@@_previous_key_str { down } - \bool_if:NTF \c_@@_varwidth_loaded_bool + \str_set:Nn \l__witharrows_previous_key_str { down } + \bool_if:NTF \c__witharrows_varwidth_loaded_bool { \cs_if_exist:cTF { tikz@library@calc@loaded } { - \int_set:Nn \l_@@_pos_arrow_int \c_one_int - \bool_set_false:N \l_@@_wrap_lines_bool - \tl_set_eq:NN \l_@@_tikz_code_tl - \c_@@_tikz_code_down_tl + \keys_set:nV { WithArrows / up-and-down } \l_keys_value_tl + \int_set:Nn \l__witharrows_pos_arrow_int \c_one_int + \bool_set_false:N \l__witharrows_wrap_lines_bool + \tl_set_eq:NN \l__witharrows_tikz_code_tl \c__witharrows_tikz_code_down_tl } - { \@@_error:n { calc~not~loaded } } + { \__witharrows_error:n { calc~not~loaded } } } - { \@@_error:n { varwidth~not~loaded } } + { \__witharrows_error:n { varwidth~not~loaded } } } } -\seq_put_right:Nn \l_@@_options_Arrow_seq { down } -\seq_put_right:Nn \l_@@_options_Arrow_seq { up } -\@@_msg_new:nn { varwidth~not~loaded } +\seq_put_right:Nn \l__witharrows_options_Arrow_seq { down } +\seq_put_right:Nn \l__witharrows_options_Arrow_seq { up } +\__witharrows_msg_new:nn { varwidth~not~loaded } { You~can't~use~the~option~'\l_keys_key_tl'~because~ you~don't~have~loaded~the~package~'varwidth'. \\ - \c_@@_option_ignored_str + \c__witharrows_option_ignored_str } -\@@_msg_new:nn { calc~not~loaded } +\__witharrows_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_@@_option_ignored_str - } -\@@_msg_new:nn { Invalid~specification~for~MultiArrow } - { - The~specification~of~rows~for~\token_to_str:N\MultiArrow\ - (i.e.~#1)~is~invalid. \\ - \c_@@_command_ignored_str + \c__witharrows_option_ignored_str } \endinput %% |