diff options
author | Karl Berry <karl@freefriends.org> | 2020-07-05 20:54:40 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-07-05 20:54:40 +0000 |
commit | 52b71425066d8e4015ed93679940bedbf7d69e3a (patch) | |
tree | 33bc2a4139c66120ae365c9ab7e6755609c0c862 /Master/texmf-dist/tex | |
parent | 89f4d0db57dc9feccb7bfc85ebf5a6827a907cc5 (diff) |
cascade (5jul20)
git-svn-id: svn://tug.org/texlive/trunk@55759 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/cascade/cascade.sty | 268 |
1 files changed, 191 insertions, 77 deletions
diff --git a/Master/texmf-dist/tex/latex/cascade/cascade.sty b/Master/texmf-dist/tex/latex/cascade/cascade.sty index 6d2ba6f72a1..4e776bddad2 100644 --- a/Master/texmf-dist/tex/latex/cascade/cascade.sty +++ b/Master/texmf-dist/tex/latex/cascade/cascade.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{1.01} -\def\myfiledate{2018/07/12} +\def\myfileversion{1.1} +\def\myfiledate{2020/07/05} \RequirePackage{l3keys2e} \ProvidesExplPackage {cascade} @@ -30,96 +30,210 @@ %% %% The following macro is the same as the macro of amsmath \cs_if_free:NT \spread@equation - {\cs_set_protected:Npn \spread@equation - {\openup\jot - \cs_set_protected:Npn \spread@equation {}}} + { + \cs_set_protected:Npn \spread@equation + { + \openup \jot + \cs_set_protected:Npn \spread@equation { } + } + } %% %% The following registers will be used for the options. \dim_new:N \l__cascade_interline_dim \dim_new:N \l__cascade_interline_all_dim \dim_new:N \l__cascade_space_between_dim -\dim_set:Nn \l__cascade_space_between_dim {0.5 em} +\dim_set:Nn \l__cascade_space_between_dim { 0.5 em } +\bool_new:N \l__cascade_t_bool +\bool_new:N \l__cascade_main_command_bool +\bool_new:N \l__cascade_nested_command_bool +\bool_new:N \l__cascade_first_argument_bool %% %% This set of options will be used by \Cascade and \ShortCascade -\keys_define:nn {cascade/command} +\keys_define:nn { cascade / command } { - interline .dim_set:N = \l__cascade_interline_dim, - interline .value_required:n = true , - interline-all .code:n = { \dim_set:Nn \l__cascade_interline_all_dim {#1} - \dim_set:Nn \l__cascade_interline_dim {#1} }, - interline-all .value_required:n = true, - space-between .dim_set:N = \l__cascade_space_between_dim, - space-between .value_required:n = true} + t .code:n = + \bool_if:NTF \l__cascade_t_bool + { \msg_error:nn { cascade } { t~option~already~set } } + { \bool_set_true:N \l__cascade_t_bool } , + t .value_forbidden:n = true , + interline .dim_set:N = \l__cascade_interline_dim, + interline .value_required:n = true , + interline-all .code:n = + { + \dim_set:Nn \l__cascade_interline_all_dim { #1 } + \dim_set:Nn \l__cascade_interline_dim { #1 } + } , + interline-all .value_required:n = true , + space-between .dim_set:N = \l__cascade_space_between_dim , + space-between .value_required:n = true + } %% %% This set of options will be used by \CascadeOptions -\keys_define:nn {cascade/global} - {interline-all .dim_set:N = \l__cascade_interline_all_dim, - interline-all .value_required:n = true, - space-between .dim_set:N = \l__cascade_space_between_dim, - space-between .value_required:n = true} -\NewDocumentCommand \CascadeOptions {m} - {\keys_set:nn {cascade/global} {#1}} +\keys_define:nn { cascade / global } + { + interline-all .dim_set:N = \l__cascade_interline_all_dim , + interline-all .value_required:n = true , + space-between .dim_set:N = \l__cascade_space_between_dim , + space-between .value_required:n = true + } +\NewDocumentCommand \CascadeOptions { m } + { \keys_set:nn { cascade / global } { #1 } } %% %% The command \Cascade is defined with \NewDocumentCommand of xparse -\NewDocumentCommand \Cascade {O{} mmmm} - { \if_mode_math: - \msg_error:nn {cascade} {Cascade~in~math~mode} - \fi: - \mode_leave_vertical: - \group_begin: - \spread@equation - \dim_set_eq:NN \l__cascade_interline_dim \l__cascade_interline_all_dim - \keys_set:nn {cascade/command} {#1} - \box_clear_new:N \l__cascade_box_one - \box_clear_new:N \l__cascade_box_two - \box_clear_new:N \l__cascade_box_three - \box_clear_new:N \l__cascade_box_four - \hbox_set:Nn \l__cascade_box_one {#2} - \hbox_set:Nn \l__cascade_box_two {#3} - \hbox_set:Nn \l__cascade_box_three {#4} - \hbox_set:Nn \l__cascade_box_four {#5} - \dim_zero_new:N \l__cascade_top_dim - \dim_set:Nn \l__cascade_top_dim - {\dim_max:nn \c_zero_dim - {\box_ht:N \l__cascade_box_one - \box_ht:N \l__cascade_box_two}} - \dim_zero_new:N \l__cascade_bottom_dim - \dim_set:Nn \l__cascade_bottom_dim - {\dim_max:nn \c_zero_dim - {\box_dp:N \l__cascade_box_three - \box_dp:N \l__cascade_box_four}} - \box_set_ht:Nn \l__cascade_box_one \c_zero_dim - \box_set_dp:Nn \l__cascade_box_three \c_zero_dim - \vbox:n - {\skip_vertical:N \l__cascade_top_dim - \vbox_top:n - {\hbox:n - {$\left. - \vcenter {\halign{\hfil##\cr - \hbox:n{\tl_if_empty:nF {#2} - {\box_use_drop:N \l__cascade_box_one - \skip_horizontal:n \l__cascade_space_between_dim} - \box_use_drop:N \l__cascade_box_two \strut} \cr - \noalign{\skip_vertical:n \l__cascade_interline_dim} - \hbox:n{\tl_if_empty:nF {#4} - {\box_use_drop:N \l__cascade_box_three - \skip_horizontal:n \l__cascade_space_between_dim} - \box_use_drop:N \l__cascade_box_four \strut} \cr - } +\NewDocumentCommand \Cascade { O { } m m m m D < > { } } + { + \if_mode_math: + \msg_error:nn { cascade } { Cascade~in~math~mode } + \fi: + \mode_leave_vertical: + \bool_if:NF \l__cascade_nested_command_bool + { + \dim_gzero_new:N \g__cascade_yoffset_dim + \bool_set_true:N \l__cascade_first_argument_bool + } + \group_begin: + + \spread@equation + \dim_set_eq:NN \l__cascade_interline_dim \l__cascade_interline_all_dim + \keys_set:nn { cascade / command } { #1 } + \box_clear_new:N \l__cascade_box_one + \box_clear_new:N \l__cascade_box_two + \box_clear_new:N \l__cascade_box_three + \box_clear_new:N \l__cascade_box_four + \hbox_set:Nn \l__cascade_box_one + { + \bool_set_true:N \l__cascade_first_argument_bool + \bool_set_true:N \l__cascade_nested_command_bool + #2 + } + \hbox_set:Nn \l__cascade_box_two { #3 } + \hbox_set:Nn \l__cascade_box_three + { + \bool_set_false:N \l__cascade_first_argument_bool + \bool_set_true:N \l__cascade_nested_command_bool + #4 + } + \hbox_set:Nn \l__cascade_box_four { #5 } + \dim_zero_new:N \l__cascade_top_dim + \dim_set:Nn \l__cascade_top_dim + { + \dim_max:nn + \c_zero_dim + { \box_ht:N \l__cascade_box_one - \box_ht:N \l__cascade_box_two } + } + \dim_zero_new:N \l__cascade_bottom_dim + \dim_set:Nn \l__cascade_bottom_dim + { + \dim_max:nn + \c_zero_dim + { \box_dp:N \l__cascade_box_three - \box_dp:N \l__cascade_box_four } + } + \box_set_ht:Nn \l__cascade_box_one \c_zero_dim + \box_set_dp:Nn \l__cascade_box_three \c_zero_dim + \vbox_set:Nn \l_tmpa_box + { + \skip_vertical:N \l__cascade_top_dim + \vbox_top:n + { + \__cascade_the_vcenter:nn { #2 } { #4 } + \bool_if:NT \l__cascade_first_argument_bool + { + \dim_set:Nn \l_tmpa_dim + { \box_ht:N \l_tmpb_box + \box_dp:N \l_tmpb_box } + \l_tmpa_dim = 0.5\l_tmpa_dim + \dim_add:Nn \l_tmpa_dim { \the \fontdimen 22 \textfont2 } + \dim_sub:Nn \l_tmpa_dim + { \dim_max:nn { \box_ht:N \l__cascade_box_two } { \box_ht:N \strutbox } } + \dim_gadd:Nn \g__cascade_yoffset_dim \l_tmpa_dim + } + \hbox:n + { + \c_math_toggle_token + \left . + \box_use_drop:N \l_tmpb_box + \right \} + \c_math_toggle_token + \bool_if:NT \l__cascade_t_bool + { + \bool_if:NF \l__cascade_nested_command_bool + { + \tl_if_empty:nF { #6 } + { + \skip_horizontal:n \l__cascade_space_between_dim + #6 + } } - \right\}$ + } + } + \skip_vertical:N \l__cascade_bottom_dim + } + } + \bool_if:NTF \l__cascade_nested_command_bool + { \box_use_drop:N \l_tmpa_box } + { + \bool_if:NTF \l__cascade_t_bool + { \box_move_down:nn \g__cascade_yoffset_dim { \box_use:N \l_tmpa_box } } + { \box_use_drop:N \l_tmpa_box } + } + \group_end: + } +\cs_new_protected:Npn \__cascade_the_vcenter:nn #1 #2 + { + \hbox_set:Nn \l_tmpb_box + { + \c_math_toggle_token + \vcenter + { + \halign + { + \hfil ## \cr + \hbox:n + { + \tl_if_empty:nF { #1 } + { + \box_use_drop:N \l__cascade_box_one + \skip_horizontal:n \l__cascade_space_between_dim + } + \box_use:N \l__cascade_box_two + \strut + } + \cr + \noalign { \skip_vertical:n \l__cascade_interline_dim } + \hbox:n + { + \tl_if_empty:nF { #2 } + { + \box_use_drop:N \l__cascade_box_three + \skip_horizontal:n \l__cascade_space_between_dim + } + \box_use_drop:N \l__cascade_box_four + \strut + } + \cr + } } - \skip_vertical:N \l__cascade_bottom_dim - } + \c_math_toggle_token } - \group_end: -} -\msg_new:nnn {cascade} - {Cascade~in~math~mode} - {The~commands~\token_to_str:N \Cascade\ - and~\token_to_str:N \ShortCascade\ - should~be~used~in~text~mode~only.~However,~you~can~ - go~on~for~this~time.} -\NewDocumentCommand \ShortCascade {O{}mm} - {\Cascade[#1]{}{#2}{}{#3}} + } +\msg_new:nnn + { cascade } + { Cascade~in~math~mode } + { + The~commands~\token_to_str:N \Cascade\ + and~\token_to_str:N \ShortCascade\ + should~be~used~in~text~mode~only.~However,~you~can~ + go~on~for~this~time. + } +\msg_new:nnn + { cascade } + { t~option~already~set } + { + You~can't~use~the~key~'t'~here~because~it~has~been~set~ + in~an~encompassing~command.~If~you~go~on,~this~key~will~be~ + ignored. + } +\NewDocumentCommand \ShortCascade { O { } m m } + { \Cascade [ #1 ] { } { #2 } { } { #3 } } \endinput %% |