diff options
author | Karl Berry <karl@freefriends.org> | 2022-07-26 19:41:08 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2022-07-26 19:41:08 +0000 |
commit | b097d4a5b14944af0b31fe710a220899b8483754 (patch) | |
tree | 0a6769f68828442f02ece3ec8e3313e9bf27ed54 /Master/texmf-dist/tex/latex | |
parent | 4a551552a1959e00b13554bab025d6d880183f6d (diff) |
wrapstuff (26jul22)
git-svn-id: svn://tug.org/texlive/trunk@63981 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r-- | Master/texmf-dist/tex/latex/wrapstuff/wrapstuff.sty | 1198 |
1 files changed, 706 insertions, 492 deletions
diff --git a/Master/texmf-dist/tex/latex/wrapstuff/wrapstuff.sty b/Master/texmf-dist/tex/latex/wrapstuff/wrapstuff.sty index 4262f9debe2..ad2e4ad87bc 100644 --- a/Master/texmf-dist/tex/latex/wrapstuff/wrapstuff.sty +++ b/Master/texmf-dist/tex/latex/wrapstuff/wrapstuff.sty @@ -25,12 +25,12 @@ %% %% ----------------------------------------------------------------- %% -\NeedsTeXFormat{LaTeX2e} +\NeedsTeXFormat{LaTeX2e}[2021-06-01] \@ifundefined{ExplLoaderFileDate}{\RequirePackage{expl3}}{} -\GetIdInfo$Id: wrapstuff.dtx 564fe9d 2022-07-20 19:55:58 +0800 Qing Lee <sobenlee@gmail.com> $ +\GetIdInfo$Id: wrapstuff.dtx e891159 2022-07-26 19:00:31 +0800 Qing Lee <sobenlee@gmail.com> $ {Wrapping text around stuff} \ProvidesExplPackage{\ExplFileName} - {\ExplFileDate}{0.1}{\ExplFileDescription} + {\ExplFileDate}{0.2}{\ExplFileDescription} \@ifl@t@r \fmtversion { 2021-06-01 } { } { @@ -53,6 +53,217 @@ \msg_critical:nn { wrapstuff } { latex3-too-old } } \prop_gput:Nnn \g_msg_module_name_prop { wstf } { wrapstuff } +\tl_const:Nn \c__wstf_global_tl_tl + { \g__wstf_main_setting_tl } +\tl_const:Nn \c__wstf_global_dim_tl + { + \g__wstf_hang_ht_dim + \g__wstf_total_ht_dim + \g__wstf_stuff_ht_dim + \g__wstf_stuff_wd_dim + \g__wstf_first_dp_dim + \g__wstf_first_sep_dim + \g__wstf_prevdepth_dim + \g__wstf_column_ht_dim + \g__wstf_window_ht_dim + \g__wstf_remaining_dim + \g__wstf_column_room_dim + \g__wstf_parshape_indent_dim + \g__wstf_parshape_length_dim + } +\tl_const:Nn \c__wstf_global_int_tl + { + \g__wstf_top_int + \g__wstf_column_int + \g__wstf_window_int + } +\tl_const:Nn \c__wstf_global_bool_tl + { + \g__wstf_next_bool + \g__wstf_leqno_bool + \g__wstf_column_bool + \g__wstf_entire_bool + \g__wstf_display_bool + \g__wstf_move_hang_bool + \g__wstf_next_hang_bool + \g__wstf_first_set_bool + \g__wstf_first_save_bool + \g__wstf_right_move_bool + } +\cs_new_protected:Npn \__wstf_tl_init:N #1 + { + \tl_new:N #1 + \tl_gput_right:Nn \g__wstf_var_clear_tl + { \tl_gclear:N #1 } + \tl_gput_right:Nn \g__wstf_var_push_tl + { \tl_gset:Nn \exp_not:N #1 { \exp_not:o {#1} } } + } +\cs_new_protected:Npn \__wstf_dim_init:N #1 + { + \dim_new:N #1 + \tl_gput_right:Nn \g__wstf_var_clear_tl + { \dim_gzero:N #1 } + \tl_gput_right:Nn \g__wstf_var_push_tl + { \dim_gset:Nn #1 { \dim_use:N #1 } } + } +\cs_new_protected:Npn \__wstf_int_init:N #1 + { + \int_new:N #1 + \tl_gput_right:Nn \g__wstf_var_clear_tl + { \int_gzero:N #1 } + \tl_gput_right:Nn \g__wstf_var_push_tl + { \int_gset:Nn #1 { \int_use:N #1 } } + } +\cs_new_protected:Npn \__wstf_bool_init:N #1 + { + \bool_new:N #1 + \tl_gput_right:Nn \g__wstf_var_clear_tl + { \bool_gset_false:N #1 } + \tl_gput_right:Nn \g__wstf_var_push_tl + { + \bool_if:NTF #1 + { \bool_gset_true:N #1 } + { \bool_gset_false:N #1 } + } + } +\tl_new:N \g__wstf_var_clear_tl +\tl_new:N \g__wstf_var_push_tl +\tl_map_function:NN \c__wstf_global_tl_tl \__wstf_tl_init:N +\tl_map_function:NN \c__wstf_global_dim_tl \__wstf_dim_init:N +\tl_map_function:NN \c__wstf_global_int_tl \__wstf_int_init:N +\tl_map_function:NN \c__wstf_global_bool_tl \__wstf_bool_init:N +\int_gdecr:N \g__wstf_top_int +\tl_gput_right:Nn \g__wstf_var_clear_tl + { \int_gdecr:N \g__wstf_top_int } +\cs_new_protected_nopar:Npn \__wstf_clear: + { + \__wstf_clear_para_hook: + \__wstf_clear_kludge: + \__wstf_clear_variable: + } +\cs_new_protected_nopar:Npn \__wstf_clear_variable: + { + \tl_use:N \g__wstf_var_clear_tl + \box_gclear:N \g__wstf_stuff_box + } +\cs_new_protected_nopar:Npn \__wstf_clear_kludge: + { + \bool_if:NTF \g__wstf_next_bool + { + \skip_vertical:n + { \tex_baselineskip:D * \g__wstf_window_int } + } + { + \box_if_empty:NF \g__wstf_stuff_box + { \__wstf_clear_stuff_box: } + } + } +\cs_new_protected_nopar:Npn \__wstf_clear_stuff_box: + { + \__wstf_ignore_depth: + \skip_set:Nn \l__wstf_last_skip + { \box_dp:N \strutbox } + \skip_vertical:N \l__wstf_last_skip + \box_use_drop:N \g__wstf_stuff_box + \skip_vertical:N \l__wstf_last_skip + \__wstf_ignore_depth: + } +\cs_new_protected_nopar:Npn \__wstf_status_push: + { + \tl_clear:N \l__wstf_status_tl + \int_gincr:N \g__wstf_status_int + \exp_args:Ne \__wstf_status_push_aux:n + { \int_use:N \g__wstf_status_int } + \seq_gpush:No \g__wstf_status_seq { \l__wstf_status_tl } + } +\cs_new_protected:Npn \__wstf_status_push_aux:n #1 + { + \__wstf_push_cs:nN {#1} \__wstf_para_before: + \__wstf_push_cs:nN {#1} \__wstf_para_begin: + \__wstf_push_cs:nN {#1} \__wstf_para_end: + \__wstf_push_cs:nN {#1} \__wstf_display_hook: + \__wstf_push_box:N \g__wstf_stuff_box + \__wstf_push_var: + } +\cs_new_protected:Npn \__wstf_push_cs:nN #1#2 + { + \exp_args:NNc \__wstf_push_cs_aux:NN #2 + { __wstf_ #1 _ \token_to_str:N #2 } + } +\cs_new_protected:Npn \__wstf_push_cs_aux:NN #1#2 + { + \cs_gset_eq:NN #2#1 + \tl_put_right:Nn \l__wstf_status_tl + { + \cs_gset_eq:NN #1#2 + \cs_undefine:N #2 + } + } +\cs_new_protected:Npn \__wstf_push_box:N #1 + { + \hbox_gset:Nn \g__wstf_stauts_box + { + \hbox_unpack_drop:N \g__wstf_stauts_box + \box_use:N #1 + } + \tl_put_right:Nn \l__wstf_status_tl + { \__wstf_pop_box:N #1 } + } +\cs_new_protected:Npn \__wstf_pop_box:N #1 + { + \hbox_gset:Nw \g__wstf_stauts_box + \hbox_unpack_drop:N \g__wstf_stauts_box + \box_gset_to_last:N #1 + \__wstf_if_last_hlist:TF + { \hbox_gset_end: } + { + \hbox_gset_end: + \box_gclear:N \g__wstf_stauts_box + } + } +\cs_new_protected_nopar:Npn \__wstf_push_var: + { + \tl_put_right:Nx \l__wstf_status_tl + { \g__wstf_var_push_tl } + } +\cs_new_protected_nopar:Npn \__wstf_status_pop: + { + \seq_gpop:NNT \g__wstf_status_seq \l__wstf_status_tl + { + \int_gdecr:N \g__wstf_status_int + \tl_use:N \l__wstf_status_tl + } + } +\cs_new_protected_nopar:Npn \__wstf_status_restore: + { + \__wstf_status_push: + \__wstf_clear_para_hook: + \__wstf_clear_display_hook: + \__wstf_clear_variable: + \group_insert_after:N \__wstf_status_pop: + } +\cs_new_protected_nopar:Npn \__wstf_status_clear: + { + \bool_if:NT \g__wstf_next_bool + { + \__wstf_clear_para_hook: + \__wstf_clear_variable: + } + } +\tl_new:N \l__wstf_status_tl +\box_new:N \g__wstf_stauts_box +\int_new:N \g__wstf_status_int +\seq_new:N \g__wstf_status_seq +\cs_new_protected_nopar:Npn \wrapstuff@parboxrestore + { \group_insert_after:N \__wstf_status_clear: } +\cs_new_protected_nopar:Npn \__wstf_parbox_restore: + { + \cs_set_eq:NN + \wrapstuff@parboxrestore + \__wstf_status_restore: + } +\g@addto@macro \@arrayparboxrestore + { \wrapstuff@parboxrestore } \group_begin: \cs_set:Npn \__wstf_tmp:nn #1 { @@ -82,6 +293,10 @@ { \hook_gput_code:nnn {#1} { wrapstuff } } \cs_new_protected:Npn \__wstf_package_hook:nn #1 { \hook_gput_code:nnn { package/#1/after } { wrapstuff } } +\cs_new_protected_nopar:Npn \__wstf_para_raw_end: + { \group_begin: \para_raw_end: \group_end: } +\cs_new_protected:Npn \__wstf_gadd_ht:Nn #1#2 + { \box_gset_ht:Nn #1 { \box_ht:N #1 + \dim_eval:n {#2} } } \NewDocumentEnvironment { wrapstuff } { O { } } { \__wstf_clear: @@ -179,15 +394,10 @@ \box_gset_dp:Nn \g__wstf_stuff_box { \c_zero_dim } } \tl_new:N \l__wstf_main_kv_tl -\tl_new:N \g__wstf_main_setting_tl \box_new:N \g__wstf_stuff_box -\dim_new:N \g__wstf_stuff_ht_dim -\dim_new:N \g__wstf_stuff_wd_dim \dim_new:N \l__wstf_shift_dim \dim_new:N \l__wstf_width_dim \dim_new:N \l__wstf_height_dim -\dim_new:N \g__wstf_prevdepth_dim -\dim_new:N \g__wstf_remaining_dim \cs_new_protected_nopar:Npn \__wstf_attach_label: { \stepcounter { wrapstuff } @@ -199,20 +409,26 @@ } \cs_new_protected_nopar:Npn \__wstf_write_label: { - \iow_shipout_x:Nx \@auxout + \exp_args:Nee \__wstf_write_label_aux:nn + { \__wstf_counter:n { wrapstuff } } + { \__wstf_counter:n { page } } + } +\cs_new_protected:Npx \__wstf_write_label_aux:nn #1#2 + { + \prop_gput_if_new:Nnn \exp_not:N \g__wstf_page_prop {#1} {#2} + \iow_shipout_x:Nn \exp_not:N \@auxout { \c_backslash_str wrapstuff@label - { \__wstf_counter:n { wrapstuff } } + {#1} { \exp_not:N \wrapstuff@counter { page } } } } +\newcounter { wrapstuff } \cs_new:Npn \__wstf_counter:n #1 { \int_value:w \value {#1} } \cs_new_eq:NN \wrapstuff@counter \__wstf_counter:n \cs_new_protected_nopar:Npn \wrapstuff@label - { \@newl@bel { wrapstuff@label } } -\tl_const:Nn \c__wstf_label_tl - { wrapstuff@label@ \int_value:w \value { wrapstuff } } + { \prop_gput:Nnn \g__wstf_page_prop } \__wstf_gadd_hook:nn { begindocument } { \legacy_if:nTF { @filesw } @@ -225,7 +441,35 @@ } { \cs_gset_eq:NN \__wstf_write_label: \__wstf_empty: } } -\newcounter { wrapstuff } +\__wstf_gadd_hook:nn { enddocument/afterlastpage } + { + \legacy_if:nT { @filesw } + { \prop_gclear:N \g__wstf_page_prop } + } +\__wstf_gadd_hook:nn { enddocument/info } + { + \prop_if_empty:NF \g__wstf_rerun_prop + { \__wstf_rerun_check: } + } +\cs_new_protected_nopar:Npn \__wstf_rerun_check: + { + \prop_map_inline:Nn \g__wstf_rerun_prop + { + \prop_get:NnN \g__wstf_page_prop { ##1 } \l__wstf_page_tl + \int_if_even:nF { \l__wstf_page_tl - ##2 } + { \prop_map_break:n { \__wstf_rerun_warning: } } + } + } +\cs_new_protected_nopar:Npn \__wstf_rerun_warning: + { \msg_warning:nn { wstf } { rerun-required } } +\msg_new:nnn { wstf } { rerun-required } + { + Page(s)~may~have~changed.\\ + Rerun~to~get~i/o~setting~right. + } +\tl_new:N \l__wstf_page_tl +\prop_new:N \g__wstf_page_prop +\prop_new:N \g__wstf_rerun_prop \cs_new_protected_nopar:Npn \__wstf_save_main_setting: { \exp_args:Nnno @@ -254,8 +498,10 @@ \keys_precompile:nnN { wrapstuff } { \l__wstf_main_kv_tl } \l__wstf_main_kv_tl - \tl_gconcat:NNN \g__wstf_main_setting_tl - \g__wstf_main_setting_tl \l__wstf_main_kv_tl + \tl_gconcat:NNN + \g__wstf_main_setting_tl + \g__wstf_main_setting_tl + \l__wstf_main_kv_tl } \cs_new_protected_nopar:Npn \__wstf_set_top_line: { @@ -270,71 +516,28 @@ } \cs_new_protected_nopar:Npn \__wstf_swap_ratio: { + \exp_args:Ne \__wstf_swap_ratio_aux:n + { \__wstf_counter:n { wrapstuff } } + } +\cs_new_protected:Npn \__wstf_swap_ratio_aux:n #1 + { \fp_compare:nF { \c_zero_fp < \l__wstf_ratio_fp < \c_one_fp } { \fp_zero:N \l__wstf_ratio_fp } - \int_if_odd:nTF - { - \exp_args:Ne \cs_if_exist_use:cF - { \c__wstf_label_tl } - { \__wstf_counter:n { page } } - } + \prop_get:NnNF \g__wstf_page_prop {#1} \l__wstf_page_tl + { \tl_set:Nx \l__wstf_page_tl { \__wstf_counter:n { page } } } + \int_if_odd:nTF { \l__wstf_page_tl } { \bool_if:NTF \l__wstf_inner_bool } { \bool_if:NTF \l__wstf_outer_bool } { \__wstf_set_ratio:N \l__wstf_ratio_fp } { \__wstf_set_ratio:n { \c_one_fp - \l__wstf_ratio_fp } } + \prop_gput:Nno \g__wstf_rerun_prop {#1} { \l__wstf_page_tl } } \bool_new:N \l__wstf_swap_bool \bool_new:N \l__wstf_inner_bool \bool_new:N \l__wstf_outer_bool -\cs_new_protected:Npn \__wstf_gadd_ht:Nn #1#2 - { \box_gset_ht:Nn #1 { \box_ht:N #1 + \dim_eval:n {#2} } } -\cs_new_protected:Npn \__wstf_gsub_ht:Nn #1#2 - { \box_gset_ht:Nn #1 { \box_ht:N #1 - \dim_eval:n {#2} } } -\cs_new_protected_nopar:Npn \__wstf_clear: - { - \__wstf_clear_para_hook: - \__wstf_clear_kludge: - \__wstf_clear_variable: - } -\cs_new_protected_nopar:Npn \__wstf_clear_variable: - { - \int_gset:Nn \g__wstf_top_int { -1 } - \int_gzero:N \g__wstf_window_int - \dim_gzero:N \g__wstf_total_ht_dim - \dim_gzero:N \g__wstf_column_left_dim - \tl_gclear:N \g__wstf_main_setting_tl - \bool_gset_false:N \g__wstf_next_bool - \bool_gset_false:N \g__wstf_hoffset_bool - \bool_gset_false:N \g__wstf_next_hang_bool - \bool_gset_false:N \g__wstf_first_save_bool - \bool_gset_false:N \g__wstf_right_move_bool - \bool_gset_false:N \g__wstf_column_right_bool - } -\cs_new_protected_nopar:Npn \__wstf_clear_kludge: - { - \bool_if:NTF \g__wstf_next_bool - { - \box_gclear:N \g__wstf_stuff_box - \skip_vertical:n - { \tex_baselineskip:D * \g__wstf_window_int } - } - { - \box_if_empty:NF \g__wstf_stuff_box - { \__wstf_clear_stuff_box: } - } - } -\cs_new_protected_nopar:Npn \__wstf_clear_stuff_box: - { - \__wstf_ignore_depth: - \skip_set:Nn \l__wstf_last_skip - { \box_dp:N \strutbox } - \skip_vertical:N \l__wstf_last_skip - \box_use_drop:N \g__wstf_stuff_box - \skip_vertical:N \l__wstf_last_skip - \__wstf_ignore_depth: - } \__wstf_gadd_hook:nn { para/before } { \__wstf_para_before: } +\__wstf_gadd_hook:nn { para/after } { \__wstf_para_after: } \__wstf_gadd_hook:nn { para/begin } { \__wstf_para_begin: } \__wstf_gadd_hook:nn { para/end } { \__wstf_para_end: } \cs_new_protected_nopar:Npn \__wstf_next_para: @@ -352,12 +555,14 @@ \cs_new_protected_nopar:Npn \__wstf_clear_para_hook: { \cs_gset_eq:NN \__wstf_para_before: \__wstf_empty: + \cs_gset_eq:NN \__wstf_para_after: \__wstf_empty: \cs_gset_eq:NN \__wstf_para_begin: \__wstf_empty: \cs_gset_eq:NN \__wstf_para_end: \__wstf_empty: } \cs_new_protected_nopar:Npn \__wstf_empty: { } \cs_new_eq:NN \__wstf_para_before: \__wstf_empty: +\cs_new_eq:NN \__wstf_para_after: \__wstf_empty: \cs_new_eq:NN \__wstf_para_begin: \__wstf_empty: \cs_new_eq:NN \__wstf_para_end: \__wstf_empty: \NewDocumentEnvironment { wrapstuff@par } { } @@ -396,14 +601,15 @@ \int_set:Nn \l__wstf_window_int { \l__wstf_window_int * 2 } \int_set:Nn \l__wstf_window_line_int { - \bool_if:NTF \g__wstf_column_right_bool - { \l__wstf_window_int / 2 + \g__wstf_column_window_int } + \bool_if:NTF \g__wstf_column_bool + { \l__wstf_window_int / 2 + \g__wstf_column_int } { \l__wstf_window_int } } } \cs_gset_eq:NN \__wstf_para_before: \__wstf_empty: \cs_gset_eq:NN \__wstf_para_begin: \__wstf_empty: \__wstf_save_parshape: + \__wstf_parbox_restore: \vbox_set:Nw \l__wstf_body_box \__wstf_set_prevdepth:N \g__wstf_prevdepth_dim \__wstf_save_tex_skip: @@ -423,7 +629,8 @@ \int_gset_eq:NN \g__wstf_line_int \tex_prevgraf:D \vbox_set_end: \__wstf_adjust_tex_skip: - \cs_gset_eq:NN \__wstf_para_end: \__wstf_empty: + \cs_gset_eq:NN \__wstf_para_end: \__wstf_empty: + \cs_gset_eq:NN \__wstf_para_after: \__wstf_empty: \int_compare:nNnTF \g__wstf_line_int > \l__wstf_top_int { \__wstf_build_par: } { \__wstf_put_par: } @@ -431,10 +638,8 @@ \box_new:N \l__wstf_body_box \box_new:N \l__wstf_window_box \int_new:N \l__wstf_window_int -\int_new:N \g__wstf_window_int \int_new:N \g__wstf_line_int \int_new:N \l__wstf_window_line_int -\int_new:N \g__wstf_column_window_int \dim_new:N \l__wstf_l_dim \dim_new:N \l__wstf_r_dim \dim_new:N \l__wstf_min_dim @@ -444,17 +649,12 @@ \dim_new:N \l__wstf_voffset_dim \dim_new:N \l__wstf_leftsep_dim \dim_new:N \l__wstf_rightsep_dim -\dim_new:N \g__wstf_window_ht_dim \dim_new:N \l__wstf_main_width_dim -\int_new:N \g__wstf_top_int -\int_gdecr:N \g__wstf_top_int \bool_new:N \l__wstf_hang_bool \cs_new_protected_nopar:Npn \__wstf_set_hang_left: { \bool_set_true:N \l__wstf_hang_bool - \bool_if:NF \g__wstf_hoffset_bool - { \__wstf_set_hoffset:NN \l__wstf_rightsep_dim \use:nn } - \dim_sub:Nn \l__wstf_window_dim { \l__wstf_rightsep_dim } + \__wstf_set_hoffset:N \l__wstf_rightsep_dim \dim_zero:N \l__wstf_l_dim \dim_set_eq:NN \l__wstf_r_dim \l__wstf_window_dim \cs_set_eq:NN \__wstf_build_box: \__wstf_build_hang: @@ -462,9 +662,7 @@ \cs_new_protected_nopar:Npn \__wstf_set_hang_right: { \bool_set_true:N \l__wstf_hang_bool - \bool_if:NF \g__wstf_hoffset_bool - { \__wstf_set_hoffset:NN \l__wstf_leftsep_dim \use_ii_i:nn } - \dim_sub:Nn \l__wstf_window_dim { \l__wstf_leftsep_dim } + \__wstf_set_hoffset:N \l__wstf_leftsep_dim \dim_zero:N \l__wstf_r_dim \dim_set_eq:NN \l__wstf_l_dim \l__wstf_window_dim \cs_set_eq:NN \__wstf_build_box: \__wstf_build_hang: @@ -482,28 +680,16 @@ { \cs_set_eq:NN \__wstf_build_box: \__wstf_build_column: } { \cs_set_eq:NN \__wstf_build_box: \__wstf_build_block: } } -\cs_new_protected:Npn \__wstf_set_hoffset:NN #1#2 +\cs_new_protected:Npn \__wstf_set_hoffset:N #1 { - \bool_gset_true:N \g__wstf_hoffset_bool - \dim_set:Nn \l__wstf_hoffset_width_dim - { #1 + \g__wstf_stuff_wd_dim } + \dim_sub:Nn \l__wstf_window_dim {#1} \group_begin: - \cs_set_eq:NN \width \l__wstf_hoffset_width_dim - \dim_gset:Nn \g__wstf_hoffset_dim { \l__wstf_hoffset_tl } - \group_end: - \int_compare:nNnF \g__wstf_hoffset_dim = \c_zero_dim - { - \hbox_gset:Nn \g__wstf_stuff_box - { - #2 { \tex_kern:D - \g__wstf_hoffset_dim } - { \box_use_drop:N \g__wstf_stuff_box } - } - \dim_add:Nn \l__wstf_window_dim { \g__wstf_hoffset_dim } - } + \dim_set:Nn \l__wstf_width_dim { #1 + \g__wstf_stuff_wd_dim } + \cs_set_eq:NN \width \l__wstf_width_dim + \exp_args:NNNx \group_end: + \dim_add:Nn \l__wstf_window_dim + { \dim_eval:n { \l__wstf_hoffset_tl } } } -\dim_new:N \g__wstf_hoffset_dim -\dim_new:N \l__wstf_hoffset_width_dim -\bool_new:N \g__wstf_hoffset_bool \cs_new_protected_nopar:Npn \__wstf_set_lines: { \bool_if:NTF \g__wstf_next_bool @@ -526,9 +712,9 @@ } \cs_new_protected_nopar:Npn \__wstf_window_init: { - \int_gset_eq:NN \g__wstf_column_window_int \l__wstf_window_int + \int_gset_eq:NN \g__wstf_column_int \l__wstf_window_int \dim_gset:Nn \g__wstf_window_ht_dim - { \tex_baselineskip:D * \g__wstf_column_window_int } + { \tex_baselineskip:D * \g__wstf_column_int } \tl_if_empty:NF \l__wstf_lines_tl { \dim_gset:Nn \g__wstf_remaining_dim @@ -579,7 +765,8 @@ \int_compare:nNnTF \g__wstf_parshape_int = \c_one_int { \tex_parshape:D \g__wstf_parshape_int - \g__wstf_parshape_indent_dim \g__wstf_parshape_length_dim + \g__wstf_parshape_indent_dim + \g__wstf_parshape_length_dim } { \__wstf_restore_hangfrom: } } @@ -618,8 +805,6 @@ \int_new:N \g__wstf_parshape_int \int_new:N \g__wstf_hangafter_int \dim_new:N \g__wstf_hangindent_dim -\dim_new:N \g__wstf_parshape_indent_dim -\dim_new:N \g__wstf_parshape_length_dim \cs_new_protected_nopar:Npn \__wstf_group_kludge: { \scan_stop: @@ -644,16 +829,15 @@ { \fp_to_dim:n { #1 \dim_to_fp:n {#2} } } \cs_new:Npn \__wstf_unit:n #1 { - \fp_eval:n + \int_eval:n { - ceil - ( - \dim_to_decimal_in_unit:nn - {#1} - { \tex_baselineskip:D } - ) + \exp_last_unbraced:Ne \__wstf_unit_aux:w + { \dim_to_decimal_in_unit:nn {#1} { \tex_baselineskip:D } } + \s_stop } } +\cs_new:Npn \__wstf_unit_aux:w #1 . #2 \s_stop + { #1 + 1 } \cs_new_protected_nopar:Npn \__wstf_save_tex_skip: { \skip_gset_eq:NN \g__wstf_left_skip \tex_leftskip:D @@ -683,6 +867,7 @@ \skip_set_eq:NN \tex_leftskip:D \g__wstf_left_skip \skip_set_eq:NN \tex_rightskip:D \g__wstf_right_skip \skip_set_eq:NN \tex_parfillskip:D \g__wstf_parfill_skip + \skip_set_eq:NN \tex_baselineskip:D \g__wstf_baseline_skip } \skip_new:N \g__wstf_left_skip \skip_new:N \g__wstf_right_skip @@ -695,16 +880,27 @@ \tex_everydisplay:D \exp_after:wN { \tex_the:D \tex_everydisplay:D - \__wstf_test_leqno: - \dim_compare:nNnF \tex_displaywidth:D < \c_max_dim - { - \bool_gset_true:N \g__wstf_display_bool - \dim_set_eq:NN \tex_displaywidth:D \l__wstf_display_dim - } + \__wstf_display_hook: + } + } +\cs_new_protected_nopar:Npn \__wstf_display_hook: + { + \__wstf_test_leqno: + \dim_compare:nNnF \tex_displaywidth:D < \c_max_dim + { + \bool_gset_true:N \g__wstf_display_bool + \dim_set_eq:NN \tex_displaywidth:D \l__wstf_display_dim } } \cs_new_eq:NN \__wstf_test_leqno: \__wstf_empty: -\bool_new:N \g__wstf_display_bool +\cs_new_protected_nopar:Npn \__wstf_clear_display_hook: + { \cs_gset_eq:NN \__wstf_display_hook: \__wstf_empty: } +\cs_new_protected_nopar:Npn \__wstf_split_parameter: + { + \skip_zero:N \tex_splittopskip:D + \dim_set_eq:NN \tex_vfuzz:D \c_max_dim + \int_set_eq:NN \tex_vbadness:D \c_max_int + } \cs_new_protected_nopar:Npn \__wstf_build_par: { \bool_if:NTF \g__wstf_hangfrom_bool @@ -739,7 +935,7 @@ } \cs_new_protected_nopar:Npn \__wstf_put_body_box: { - \para_raw_end: + \__wstf_para_raw_end: \dim_compare:nNnTF { \box_wd:N \l__wstf_body_box } < \c_max_dim { \__wstf_put_body_aux:N \l__wstf_body_box } { @@ -747,14 +943,34 @@ \__wstf_put_body_aux:N \l__wstf_body_box \box_set_eq_drop:NN \l__wstf_body_box \l__wstf_bottom_box } - \para_raw_end: + \__wstf_para_raw_end: } \cs_new_protected_nopar:Npn \__wstf_put_body_aux:N #1 { \dim_gset:Nn \g__wstf_prevdepth_dim { \box_dp:N #1 } + \dim_compare:nNnT \g__wstf_prevdepth_dim = \c_zero_dim + { \__wstf_extract_depth:N #1 } \vbox_unpack_drop:N #1 \__wstf_set_prevdepth:N \g__wstf_prevdepth_dim } +\cs_new_protected_nopar:Npn \__wstf_extract_depth:N #1 + { + \vbox_set:Nn \l__wstf_last_box + { + \vbox_unpack:N #1 + \__wstf_if_last_hlist:F + { + \tex_unskip:D \tex_unpenalty:D + \tex_unskip:D \tex_unpenalty:D + } + \__wstf_if_last_hlist:T + { + \box_set_to_last:N \l__wstf_last_box + \dim_gset:Nn \g__wstf_prevdepth_dim + { \box_dp:N \l__wstf_last_box } + } + } + } \cs_new_protected_nopar:Npn \__wstf_put_next_par: { \int_gzero:N \g__wstf_top_int @@ -775,20 +991,24 @@ } \cs_new_protected_nopar:Npn \__wstf_build_display_amsmath: { - \vbox_gset:Nn \g__wstf_equation_box - { - \skip_vertical:n { - \g__wstf_display_pre_skip } - \vbox_unpack_drop:N \g__wstf_display_box - \skip_gset_eq:NN \g__wstf_pos_skip \tex_lastskip:D - \tex_unskip:D - \int_gset_eq:NN \g__wstf_pos_int \tex_lastpenalty:D - \tex_unpenalty:D - \skip_gadd:Nn \g__wstf_pos_skip { \tex_lastskip:D } - \tex_unskip:D - \tex_unpenalty:D - } - \box_gset_wd:Nn \g__wstf_equation_box - { \l__wstf_display_dim } + \group_begin: + \vbox_gset:Nn \g__wstf_equation_box + { + \__wstf_break: + \vbox_unpack_drop:N \g__wstf_display_box + \skip_gset_eq:NN \g__wstf_pos_skip \tex_lastskip:D + \tex_unskip:D + \int_gset_eq:NN \g__wstf_pos_int \tex_lastpenalty:D + \tex_unpenalty:D + \skip_gadd:Nn \g__wstf_pos_skip { \tex_lastskip:D } + \tex_unskip:D + \tex_unpenalty:D + } + \__wstf_split_parameter: + \vbox_set_split_to_ht:NNn \l__wstf_last_box \g__wstf_equation_box + { \c_zero_dim } + \group_end: + \box_gset_wd:Nn \g__wstf_equation_box { \l__wstf_display_dim } \vbox_gset:Nn \g__wstf_display_box { \tex_penalty:D \g__wstf_display_pre_int @@ -866,35 +1086,57 @@ \cs_new_protected_nopar:Npn \__wstf_build_display_auxiii: { \bool_set_true:N \l__wstf_attach_equation_bool - \bool_if:NTF \g__wstf_amsmath_bool - { \box_set_eq_drop:NN \l__wstf_display_box \g__wstf_display_box } + \box_gclear:N \g__wstf_display_box + \bool_if:NF \g__wstf_amsmath_bool + { \__wstf_adjust_equation: } + \__wstf_build_body_box: + } +\bool_new:N \l__wstf_display_bool +\bool_new:N \l__wstf_attach_equation_bool +\cs_new_protected:Npn \__wstf_attach_left:N #1 + { + \__wstf_attach_equation:Nn #1 + { \g__wstf_parshape_indent_dim } + } +\cs_new_protected:Npn \__wstf_attach_right:N #1 + { + \__wstf_attach_equation:Nn #1 { - \box_gclear:N \g__wstf_display_box - \__wstf_adjust_equation: + \l__wstf_line_dim + - \l__wstf_display_dim + + \g__wstf_parshape_indent_dim } - \__wstf_build_body_box: } -\cs_new_protected_nopar:Npn \__wstf_attach_equation:N +\cs_new_protected:Npn \__wstf_attach_equation:Nn #1#2 { - \bool_if:NTF \g__wstf_amsmath_bool - { \__wstf_attach_equation_amsmath:N } - { \__wstf_attach_equation_normal:N } + \vbox_set:Nn \l__wstf_last_box + { + \vbox_unpack:N #1 + \box_set_to_last:N \l__wstf_last_box + \bool_if:NTF \g__wstf_amsmath_bool + { \__wstf_attach_equation_amsmath:Nn } + { \__wstf_attach_equation_normal:Nn } + \l__wstf_last_box {#2} + } } -\cs_new_protected:Npn \__wstf_attach_equation_amsmath:N #1 +\cs_new_protected:Npn \__wstf_attach_equation_amsmath:Nn #1#2 { - \vbox_set:Nn #1 + \vbox_gset:Nn \g__wstf_equation_box { - \box_use:N #1 - \__wstf_ignore_depth: - \vbox_unpack_drop:N \l__wstf_display_box + \__wstf_nobreak: \skip_vertical:n - { \g__wstf_display_pre_dim - \box_dp:N #1 } - \box_use_drop:N \g__wstf_equation_box + { + \g__wstf_display_pre_skip + + \g__wstf_display_pre_dim + - \box_dp:N #1 + } + \box_move_right:nn {#2} + { \box_use_drop:N \g__wstf_equation_box } } } -\cs_new_protected:Npn \__wstf_attach_equation_normal:N #1 +\cs_new_protected:Npn \__wstf_attach_equation_normal:Nn #1#2 { - \vbox_set:Nn #1 + \vbox_set:Nn \l__wstf_last_box { \__wstf_tex_parameter: \dim_set_eq:NN \tex_hsize:D \l__wstf_display_dim @@ -906,6 +1148,25 @@ \tex_unskip:D \int_gset_eq:NN \g__wstf_pos_int \tex_lastpenalty:D \tex_unpenalty:D + \box_set_to_last:N \l__wstf_last_box + \skip_set_eq:NN \l__wstf_last_skip \tex_lastskip:D + \tex_unskip:D + \skip_add:Nn \l__wstf_last_skip { \tex_lastskip:D } + \vbox_gset:Nn \g__wstf_equation_box + { + \__wstf_nobreak: + \skip_vertical:N \l__wstf_last_skip + \box_move_right:nn {#2} + { + \hbox_to_wd:nn + { \l__wstf_display_dim } + { + \tex_hss:D + \box_use_drop:N \l__wstf_last_box + \tex_hss:D + } + } + } } } \cs_new_protected_nopar:Npn \__wstf_insert_equation: @@ -941,15 +1202,15 @@ { \bool_gset_false:N \g__wstf_eqnum_bool \hbox_unpack:N \g__wstf_equation_box - \__wstf_if_last_hlist:F { \use_none_delimit_by_q_stop:w } + \__wstf_if_last_hlist:F { \use_none_delimit_by_s_stop:w } \box_gset_to_last:N \g__wstf_eqnum_box - \__wstf_if_last_kern:F { \use_none_delimit_by_q_stop:w } + \__wstf_if_last_kern:F { \use_none_delimit_by_s_stop:w } \tex_unkern:D - \__wstf_if_last_hlist:F { \use_none_delimit_by_q_stop:w } + \__wstf_if_last_hlist:F { \use_none_delimit_by_s_stop:w } \box_gset_to_last:N \g__wstf_eqbody_box - \__wstf_if_last_none:F { \use_none_delimit_by_q_stop:w } + \__wstf_if_last_none:F { \use_none_delimit_by_s_stop:w } \bool_gset_true:N \g__wstf_eqnum_bool - \use_none_delimit_by_q_stop:w \q_stop + \use_none_delimit_by_s_stop:w \s_stop } } \cs_new_protected_nopar:Npn \__wstf_adjust_equation_width: @@ -979,22 +1240,21 @@ \box_new:N \g__wstf_eqbody_box \box_new:N \g__wstf_eqnum_box \box_new:N \g__wstf_equation_box -\box_new:N \l__wstf_display_box \int_new:N \g__wstf_pos_int \skip_new:N \g__wstf_pos_skip \bool_new:N \g__wstf_eqnum_bool -\bool_new:N \g__wstf_leqno_bool -\bool_new:N \l__wstf_display_bool -\bool_new:N \l__wstf_attach_equation_bool -\cs_new_protected_nopar:Npn \__wstf_add_pos_skip: +\cs_new_protected_nopar:Npn \__wstf_add_pos_kludge: { - \bool_lazy_or:nnTF - { \g__wstf_right_move_bool } - { \int_compare_p:nNn \g__wstf_window_int > \c_zero_int } + \dim_gset:Nn \g__wstf_prevdepth_dim + { \box_dp:N \l__wstf_window_box } + \bool_gset_false:N \g__wstf_equation_dp_bool + \bool_if:NTF \g__wstf_next_bool { \tex_vadjust:D { - \tex_penalty:D \c__wstf_nobreak_int + \box_if_empty:NF \g__wstf_equation_box + { \__wstf_output_equation_box: } + \__wstf_nobreak: \bool_if:NT \l__wstf_display_bool { \skip_vertical:N \g__wstf_pos_skip } } @@ -1004,6 +1264,8 @@ { \tex_vadjust:D { + \box_if_empty:NF \g__wstf_equation_box + { \__wstf_output_equation_box: } \tex_penalty:D \g__wstf_pos_int \skip_vertical:N \g__wstf_pos_skip } @@ -1012,6 +1274,23 @@ \int_gzero:N \g__wstf_pos_int \skip_gzero:N \g__wstf_pos_skip } +\cs_new_protected_nopar:Npn \__wstf_output_equation_box: + { + \cs_gset_eq:NN + \__wstf_para_after: + \__wstf_set_equation_depth: + \bool_gset_true:N \g__wstf_equation_dp_bool + \dim_gset:Nn \g__wstf_prevdepth_dim + { \box_dp:N \g__wstf_equation_box } + \vbox_unpack_drop:N \g__wstf_equation_box + } +\cs_new_protected_nopar:Npn \__wstf_set_equation_depth: + { + \cs_gset_eq:NN \__wstf_para_after: \__wstf_empty: + \bool_gset_false:N \g__wstf_equation_dp_bool + \__wstf_set_prevdepth:N \g__wstf_prevdepth_dim + } +\bool_new:N \g__wstf_equation_dp_bool \cs_new_protected_nopar:Npn \__wstf_build_body_box: { \box_set_eq:NN \l__wstf_save_body_box \l__wstf_bottom_box @@ -1029,9 +1308,6 @@ { \vbox_set:Nn \l__wstf_body_box { - \__wstf_tex_parameter: - \__wstf_make_parshape: - \__wstf_column_penalties: \dim_zero:N \tex_emergencystretch:D \dim_set_eq:NN \tex_hfuzz:D \c_max_dim \dim_set_eq:NN \tex_vfuzz:D \c_max_dim @@ -1040,6 +1316,9 @@ \int_set:Nn \tex_tolerance:D { 1000 } \para_raw_noindent: \hbox_unpack_drop:N \l__wstf_bottom_box + \__wstf_tex_parameter: + \__wstf_make_parshape: + \__wstf_interline_penalties: \para_raw_end: \int_gset_eq:NN \g__wstf_line_int \tex_prevgraf:D } @@ -1062,8 +1341,8 @@ { \c_zero_dim \l__wstf_l_dim } \prg_replicate:nn { - \bool_if:NTF \g__wstf_column_right_bool - { \g__wstf_column_window_int } + \bool_if:NTF \g__wstf_column_bool + { \g__wstf_column_int } { \l__wstf_window_int / 2 } } { \c_zero_dim \l__wstf_r_dim } @@ -1079,15 +1358,16 @@ } \c_zero_dim \c_max_dim } -\cs_new_protected_nopar:Npn \__wstf_column_penalties: +\cs_new_protected_nopar:Npn \__wstf_interline_penalties: { \bool_if:NF \l__wstf_hang_bool { - \bool_if:NT \l__wstf_column_bool - { \__wstf_column_penalties_aux: } + \bool_if:NTF \l__wstf_column_bool + { \__wstf_column_penalties: } + { \__wstf_block_penalties: } } } -\cs_new_protected_nopar:Npn \__wstf_column_penalties_aux: +\cs_new_protected_nopar:Npn \__wstf_column_penalties: { \tex_interlinepenalties:D \int_eval:n { \l__wstf_window_int / 2 + \c_one_int } ~ @@ -1097,90 +1377,70 @@ \c__wstf_break_int \c_zero_int } +\cs_new_protected_nopar:Npn \__wstf_block_penalties: + { + \tex_interlinepenalties:D \l__wstf_window_int + \prg_replicate:nn + { \l__wstf_window_int - \c_one_int } + { \c__wstf_break_int } + \c_zero_int + } +\cs_new_protected_nopar:Npn \__wstf_break: + { \tex_penalty:D \c__wstf_break_int } +\cs_new_protected_nopar:Npn \__wstf_nobreak: + { \tex_penalty:D \c__wstf_nobreak_int } +\int_const:Nn \c__wstf_break_int { -10000 } +\int_const:Nn \c__wstf_nobreak_int { 10000 } \cs_new_protected_nopar:Npn \__wstf_build_block: { - \__wstf_build_block_auxi: \vbox_set:Nn \l__wstf_window_box { - \__wstf_tex_parameter: - \dim_set_eq:NN \tex_hsize:D \l__wstf_line_dim - \para_raw_noindent: - \hbox_unpack_drop:N \g__wstf_line_box - \para_raw_end: - } - \bool_if:NT \l__wstf_attach_equation_bool - { - \box_set_ht:Nn \l__wstf_window_box - { \box_ht_plus_dp:N \l__wstf_window_box - \g__wstf_dp_dim } - \box_set_dp:Nn \l__wstf_window_box { \g__wstf_dp_dim } + \__wstf_split_parameter: + \skip_set_eq:NN \tex_baselineskip:D \g__wstf_baseline_skip + \__wstf_build_line: } } -\cs_new_protected_nopar:Npn \__wstf_build_block_auxi: +\cs_new_protected_nopar:Npn \__wstf_build_line: { - \vbox_set:Nn \l__wstf_body_box + \vbox_set_split_to_ht:NNn \l__wstf_l_box \l__wstf_body_box + { \g__wstf_baseline_skip } + \vbox_set_split_to_ht:NNn \l__wstf_r_box \l__wstf_body_box + { \g__wstf_baseline_skip } + \__wstf_build_line_repack: + \box_if_empty:NTF \l__wstf_body_box + { \__wstf_put_last_line: } { - \vbox_unpack_drop:N \l__wstf_body_box - \bool_lazy_and:nnTF - { \box_if_empty_p:N \l__wstf_bottom_box } - { \int_if_odd_p:n { \g__wstf_line_int } } - { \box_set_eq:NN \l__wstf_r_box \l__wstf_empty_box } - { - \box_set_to_last:N \l__wstf_r_box - \tex_unskip:D \tex_unpenalty:D - } - \box_set_to_last:N \l__wstf_l_box - \tex_unskip:D \tex_unpenalty:D - \hbox_gset:Nn \g__wstf_line_box - { - \bool_if:NT \l__wstf_attach_equation_bool - { \__wstf_build_block_attach: } - \box_use:N \l__wstf_l_box - \tex_hfill:D - \box_use:N \l__wstf_r_box - } - \__wstf_build_block_auxii: + \__wstf_put_line_box: + \__wstf_build_line: } } -\cs_new_protected_nopar:Npn \__wstf_build_block_auxii: +\cs_new_protected_nopar:Npn \__wstf_build_line_repack: { - \int_case:nnTF - { \tex_lastnodetype:D } + \vbox_set:Nn \l__wstf_l_box + { \vbox_unpack_drop:N \l__wstf_l_box } + \box_if_empty:NF \l__wstf_r_box { - { \c__wstf_none_node } { } - { \c__wstf_whatsit_node } { } + \vbox_set:Nn \l__wstf_r_box + { \vbox_unpack_drop:N \l__wstf_r_box } } - { \__wstf_build_block_finalise: } - { \__wstf_build_block_auxiii: } + \__wstf_save_first_ht: } -\cs_new_protected_nopar:Npn \__wstf_build_block_auxiii: +\cs_new_protected_nopar:Npn \__wstf_put_last_line: { - \box_set_to_last:N \l__wstf_r_box - \tex_unskip:D \tex_unpenalty:D - \box_set_to_last:N \l__wstf_l_box - \tex_unskip:D \tex_unpenalty:D - \hbox_gset:Nn \g__wstf_line_box - { - \box_use:N \l__wstf_l_box - \tex_hfill:D - \box_use:N \l__wstf_r_box - \tex_penalty:D \c__wstf_break_int - \hbox_unpack_drop:N \g__wstf_line_box - } - \__wstf_build_block_auxii: + \bool_if:NT \l__wstf_attach_equation_bool + { \__wstf_attach_left:N \l__wstf_l_box } + \__wstf_put_line_box: } -\cs_new_protected_nopar:Npn \__wstf_build_block_attach: +\cs_new_protected_nopar:Npn \__wstf_put_line_box: { - \box_set_eq:NN \l__wstf_last_box \l__wstf_l_box - \__wstf_attach_equation:N \l__wstf_last_box - \dim_gset:Nn \g__wstf_dp_dim { \box_dp:N \l__wstf_last_box } - \hbox_set:Nn \l__wstf_l_box + \hbox_to_wd:nn { \l__wstf_line_dim } { - \box_move_down:nn - { \box_ht:N \l__wstf_last_box - \box_ht:N \l__wstf_l_box } - { \box_use_drop:N \l__wstf_last_box } + \box_use_drop:N \l__wstf_l_box + \tex_hfil:D + \box_use_drop:N \l__wstf_r_box } } -\cs_new_protected_nopar:Npn \__wstf_build_block_finalise: +\cs_new_protected_nopar:Npn \__wstf_save_first_ht: { \dim_gset:Nn \g__wstf_ht_dim { @@ -1188,38 +1448,23 @@ { \box_ht:N \l__wstf_l_box } { \box_ht:N \l__wstf_r_box } } + \cs_set_eq:NN \__wstf_save_first_ht: \__wstf_empty: } -\dim_new:N \g__wstf_dp_dim \dim_new:N \g__wstf_ht_dim \box_new:N \l__wstf_l_box \box_new:N \l__wstf_r_box -\box_new:N \g__wstf_line_box -\box_new:N \l__wstf_empty_box -\hbox_set:Nn \l__wstf_empty_box { } -\int_const:Nn \c__wstf_break_int { -10000 } -\int_const:Nn \c__wstf_nobreak_int { 10000 } \cs_new_protected_nopar:Npn \__wstf_build_column_fuzzy: { \hbox_set_to_wd:Nnn \l__wstf_window_box { \l__wstf_line_dim } { - \skip_zero:N \tex_splittopskip:D - \dim_set_eq:NN \tex_vfuzz:D \c_max_dim - \int_set_eq:NN \tex_vbadness:D \c_max_int + \__wstf_split_parameter: \__wstf_build_column_aux: \box_if_empty:NT \l__wstf_bottom_box { \__wstf_build_column_fuzzy_aux: } - \dim_gset:Nn \g__wstf_ht_dim { \box_ht:N \l__wstf_l_box } - \vbox_set:Nn \l__wstf_l_box - { - \vbox_unpack_drop:N \l__wstf_l_box - \bool_if:NT \l__wstf_attach_equation_bool - { - \box_set_to_last:N \l__wstf_last_box - \__wstf_attach_equation:N \l__wstf_last_box - \vbox_unpack_drop:N \l__wstf_last_box - } - } + \__wstf_repack_left_box: + \bool_if:NT \l__wstf_attach_equation_bool + { \__wstf_attach_left:N \l__wstf_l_box } \box_use:N \l__wstf_l_box \tex_hfil:D \box_move_up:nn @@ -1230,7 +1475,7 @@ \cs_new_protected_nopar:Npn \__wstf_build_column_aux: { \vbox_set_split_to_ht:NNn \l__wstf_l_box \l__wstf_body_box - { \c_zero_dim } + { \box_ht:N \l__wstf_body_box / 2 } \vbox_set_top:Nn \l__wstf_l_box { \vbox_unpack_drop:N \l__wstf_l_box } \box_set_eq_drop:NN \l__wstf_r_box \l__wstf_body_box @@ -1256,23 +1501,25 @@ \cs_new_protected_nopar:Npn \__wstf_rebuild_window: { \int_compare:nNnT \l__wstf_window_int > { 2 } - { - \int_sub:Nn \l__wstf_window_int { 2 } - \box_set_eq_drop:NN \l__wstf_last_l_box \l__wstf_l_box - \box_set_eq_drop:NN \l__wstf_last_r_box \l__wstf_r_box - \box_set_eq:NN \l__wstf_bottom_box \l__wstf_save_body_box - \int_set_eq:NN \l__wstf_window_line_int \l__wstf_window_int - \__wstf_build_window: - \__wstf_build_column_aux: - \__wstf_build_column_fuzzy_aux: - } + { \__wstf_rebuild_window_aux: } } +\cs_new_protected_nopar:Npn \__wstf_rebuild_window_aux: + { + \int_sub:Nn \l__wstf_window_int { 2 } + \box_set_eq_drop:NN \l__wstf_last_l_box \l__wstf_l_box + \box_set_eq_drop:NN \l__wstf_last_r_box \l__wstf_r_box + \box_set_eq:NN \l__wstf_bottom_box \l__wstf_save_body_box + \int_set_eq:NN \l__wstf_window_line_int \l__wstf_window_int + \__wstf_build_window: + \__wstf_build_column_aux: + \__wstf_build_column_fuzzy_aux: + } +\box_new:N \l__wstf_last_l_box +\box_new:N \l__wstf_last_r_box \cs_new_protected_nopar:Npn \__wstf_build_column_strict: { \group_begin: - \skip_zero:N \tex_splittopskip:D - \dim_set_eq:NN \tex_vfuzz:D \c_max_dim - \int_set_eq:NN \tex_vbadness:D \c_max_int + \__wstf_split_parameter: \__wstf_build_column_aux: \box_if_empty:NTF \l__wstf_r_box { \__wstf_build_column_strict_auxi: } @@ -1280,7 +1527,7 @@ \box_if_empty:NTF \l__wstf_bottom_box { \__wstf_build_column_strict_auxii: } { - \bool_if:NTF \g__wstf_column_right_bool + \bool_if:NTF \g__wstf_column_bool { \__wstf_build_column_strict_auxiii: } { \__wstf_build_column_strict_auxiv: } } @@ -1292,9 +1539,9 @@ { \__wstf_repack_left_box: \bool_if:NT \l__wstf_attach_equation_bool - { \__wstf_column_attach:N \l__wstf_l_box } + { \__wstf_attach_left:N \l__wstf_l_box } \box_gset_eq_drop:NN \g__wstf_window_box \l__wstf_l_box - \bool_gset_true:N \g__wstf_column_right_bool + \bool_gset_true:N \g__wstf_column_bool \bool_if:NF \g__wstf_first_save_bool { \bool_gset_true:N \g__wstf_first_save_bool @@ -1319,12 +1566,12 @@ \dim_gsub:Nn \g__wstf_first_sep_dim { \box_dp:N \l__wstf_window_box } \bool_gset_false:N \g__wstf_entire_bool - \dim_gzero:N \g__wstf_column_right_ht_dim + \dim_gzero:N \g__wstf_column_ht_dim \dim_gset_eq:NN \g__wstf_prevdepth_dim \g__wstf_first_dp_dim \__wstf_column_right_move_set:nn { \g__wstf_stuff_ht_dim } { \g__wstf_window_ht_dim } - \int_gset_eq:NN \g__wstf_window_int \g__wstf_column_window_int + \int_gset_eq:NN \g__wstf_window_int \g__wstf_column_int } \cs_new_protected:Npn \__wstf_column_right_move_set:nn #1#2 { @@ -1343,7 +1590,7 @@ \__wstf_make_next_stuff:nn { \l__wstf_line_dim - \l__wstf_r_dim - \l__wstf_rightsep_dim } {#1} - \dim_gset:Nn \g__wstf_column_left_dim {#2} + \dim_gset:Nn \g__wstf_column_room_dim {#2} \int_gzero:N \g__wstf_top_int } \cs_new_protected_nopar:Npn \__wstf_build_column_strict_auxii: @@ -1351,11 +1598,12 @@ \bool_gset_false:N \g__wstf_entire_bool \__wstf_repack_left_box: \bool_if:NT \l__wstf_attach_equation_bool - { \__wstf_column_attach:N \l__wstf_r_box } + { \__wstf_attach_right:N \l__wstf_r_box } \dim_gset:Nn \g__wstf_hang_ht_dim { \g__wstf_stuff_ht_dim - \tex_baselineskip:D * \__wstf_unit:n { \box_ht_plus_dp:N \l__wstf_r_box } + - \box_ht_plus_dp:N \g__wstf_equation_box - \g__wstf_pos_skip } \dim_compare:nNnTF \g__wstf_hang_ht_dim > \c_zero_dim @@ -1368,19 +1616,21 @@ { \int_compare:nNnTF \g__wstf_window_int > \c_zero_int { - \dim_gset:Nn \g__wstf_column_left_dim + \dim_gset:Nn \g__wstf_column_room_dim { \g__wstf_window_ht_dim - \g__wstf_first_sep_dim - - \box_ht:N \l__wstf_r_box + - \box_ht_plus_dp:N \l__wstf_r_box + - \box_ht_plus_dp:N \g__wstf_equation_box } \__wstf_next_hang_para: } { - \dim_gset:Nn \g__wstf_column_left_dim + \dim_gset:Nn \g__wstf_column_room_dim { \box_ht:N \l__wstf_l_box - - \box_ht:N \l__wstf_r_box + - \box_ht_plus_dp:N \l__wstf_r_box + - \box_ht_plus_dp:N \g__wstf_equation_box } \dim_gset:Nn \g__wstf_first_sep_dim { \tex_baselineskip:D - \g__wstf_ht_dim } @@ -1393,11 +1643,15 @@ \box_use:N \l__wstf_l_box \tex_hfil:D \box_move_up:nn - { \g__wstf_column_left_dim } + { \g__wstf_column_room_dim } { \box_use:N \l__wstf_r_box } } - \dim_gset:Nn \g__wstf_column_right_ht_dim - { \box_ht:N \l__wstf_r_box + \g__wstf_pos_skip } + \dim_gset:Nn \g__wstf_column_ht_dim + { + \box_ht_plus_dp:N \l__wstf_r_box + + \box_ht_plus_dp:N \g__wstf_equation_box + + \g__wstf_pos_skip + } } \cs_new_protected_nopar:Npn \__wstf_column_put_right: { @@ -1424,14 +1678,14 @@ { \__wstf_column_right_move_set:nn { \g__wstf_hang_ht_dim } - { \g__wstf_column_left_dim } + { \g__wstf_column_room_dim } \int_gzero:N \g__wstf_window_int } \bool_gset_false:N \g__wstf_next_hang_bool } \cs_new_protected_nopar:Npn \__wstf_build_column_strict_auxiii: { - \bool_gset_false:N \g__wstf_column_right_bool + \bool_gset_false:N \g__wstf_column_bool \__wstf_repack_left_box: \hbox_gset_to_wd:Nnn \g__wstf_window_box { \l__wstf_line_dim } @@ -1462,32 +1716,8 @@ \vbox_set:Nn \l__wstf_l_box { \vbox_unpack_drop:N \l__wstf_l_box } } -\cs_new_protected_nopar:Npn \__wstf_column_attach:N #1 - { - \vbox_set:Nn #1 - { - \vbox_unpack_drop:N #1 - \box_set_to_last:N \l__wstf_last_box - \__wstf_attach_equation:N \l__wstf_last_box - \vbox_unpack_drop:N \l__wstf_last_box - } - } -\box_new:N \l__wstf_last_l_box -\box_new:N \l__wstf_last_r_box \box_new:N \g__wstf_window_box -\dim_new:N \g__wstf_fake_wd_dim -\dim_new:N \g__wstf_first_dp_dim -\dim_new:N \g__wstf_first_sep_dim -\dim_new:N \g__wstf_column_left_dim -\dim_new:N \g__wstf_column_right_ht_dim -\bool_new:N \g__wstf_entire_bool -\bool_new:N \g__wstf_next_hang_bool -\bool_new:N \g__wstf_first_save_bool -\bool_new:N \g__wstf_column_right_bool -\bool_new:N \l__wstf_column_strict_bool -\bool_new:N \g__wstf_first_set_bool \bool_new:N \l__wstf_first_move_bool -\bool_new:N \g__wstf_right_move_bool \bool_new:N \l__wstf_column_bool \cs_new_eq:NN \__wstf_build_column: \__wstf_build_column_strict: \cs_new_eq:NN \__wstf_build_box: \__wstf_build_column: @@ -1500,38 +1730,39 @@ { \vbox_unpack:N \l__wstf_body_box } \dim_gset:Nn \g__wstf_ht_dim { \box_ht:N \l__wstf_window_box } } - \bool_if:NTF \l__wstf_attach_equation_bool - { - \vbox_set:Nn \l__wstf_window_box - { - \vbox_unpack_drop:N \l__wstf_window_box - \box_set_to_last:N \l__wstf_last_box - \__wstf_attach_equation:N \l__wstf_last_box - \vbox_unpack_drop:N \l__wstf_last_box - } - } - { \box_set_eq_drop:NN \l__wstf_window_box \l__wstf_body_box } - \dim_compare:nNnTF \g__wstf_column_left_dim > \c_zero_dim - { \__wstf_build_hang_aux: } - { \bool_gset_false:N \g__wstf_move_hang_bool } + \box_set_eq_drop:NN \l__wstf_window_box \l__wstf_body_box + \bool_if:NT \l__wstf_attach_equation_bool + { \__wstf_build_hang_attach: } + \dim_compare:nNnT \g__wstf_column_room_dim > \c_zero_dim + { \__wstf_build_hang_move: } } -\cs_new_protected_nopar:Npn \__wstf_build_hang_aux: +\cs_new_protected_nopar:Npn \__wstf_build_hang_attach: + { + \dim_compare:nNnTF \l__wstf_r_dim = \c_zero_dim + { \__wstf_attach_left:N \l__wstf_window_box } + { \__wstf_attach_right:N \l__wstf_window_box } + } +\cs_new_protected_nopar:Npn \__wstf_build_hang_move: { \dim_set:Nn \l__wstf_shift_dim { \dim_max:nn { \box_ht:N \l__wstf_window_box } { \tex_baselineskip:D * \g__wstf_line_int } + + \box_ht_plus_dp:N \g__wstf_equation_box + \tex_parskip:D } - \dim_gsub:Nn \g__wstf_column_left_dim { \l__wstf_shift_dim } - \dim_compare:nNnTF \g__wstf_column_left_dim > \c_zero_dim + \dim_gsub:Nn \g__wstf_column_room_dim { \l__wstf_shift_dim } + \dim_compare:nNnTF \g__wstf_column_room_dim > \c_zero_dim { \box_if_empty:NTF \l__wstf_bottom_box { \bool_if:NT \g__wstf_right_move_bool { \__wstf_set_next_hang: } } - { \bool_gset_false:N \g__wstf_move_hang_bool } } - { \bool_gset_false:N \g__wstf_move_hang_bool } + { \use:n } + { + \bool_gset_false:N \g__wstf_move_hang_bool + \bool_gset_false:N \g__wstf_right_move_bool + } } \cs_new_protected_nopar:Npn \__wstf_set_next_hang: { @@ -1541,75 +1772,67 @@ \dim_gset_eq:NN \g__wstf_hang_ht_dim \g__wstf_remaining_dim } \dim_gsub:Nn \g__wstf_hang_ht_dim { \l__wstf_shift_dim } - \dim_gset:Nn \g__wstf_dp_dim { \box_dp:N \l__wstf_window_box } \__wstf_column_right_move_set:nn { \g__wstf_hang_ht_dim } - { \g__wstf_column_left_dim } + { \g__wstf_column_room_dim } \int_gzero:N \g__wstf_window_int } -\dim_new:N \g__wstf_hang_ht_dim -\bool_new:N \g__wstf_move_hang_bool \cs_new_protected_nopar:Npn \__wstf_build_hangfrom: { - \dim_compare:nNnTF \g__wstf_prevdepth_dim > \c__wstf_ignore_depth_dim - { \__wstf_build_hangfrom_aux: } - { \dim_gzero:N \g__wstf_ht_dim } - } -\cs_new_protected_nopar:Npn \__wstf_build_hangfrom_aux: - { \group_begin: - \skip_zero:N \tex_splittopskip:D - \vbox_gset:Nn \g__wstf_line_box + \vbox_gset:Nn \g__wstf_window_box { - \tex_penalty:D \c__wstf_break_int + \__wstf_break: \vbox_unpack:N \l__wstf_body_box } - \vbox_set_split_to_ht:NNn \l__wstf_last_box \g__wstf_line_box + \__wstf_split_parameter: + \vbox_set_split_to_ht:NNn \l__wstf_last_box \g__wstf_window_box { \c_zero_dim } \dim_gset:Nn \g__wstf_ht_dim { \g__wstf_baseline_skip - \g__wstf_prevdepth_dim - - \l__wstf_shift_dim - \box_ht:N \l__wstf_body_box - + \box_ht:N \g__wstf_line_box + + \box_ht:N \g__wstf_window_box } \group_end: - \box_set_eq_drop:NN \l__wstf_body_box \g__wstf_line_box + \box_set_eq_drop:NN \l__wstf_body_box \g__wstf_window_box } \cs_new_protected_nopar:Npn \__wstf_put_box: { - \para_raw_end: + \__wstf_para_raw_end: \dim_compare:nNnTF \g__wstf_prevdepth_dim > \c__wstf_ignore_depth_dim { \__wstf_add_vskip: } - { \skip_gzero:N \g__wstf_pre_skip } + { \__wstf_set_vskip: } \skip_set_eq:NN \l__wstf_par_skip \tex_parskip:D \skip_zero:N \tex_parskip:D + \dim_set:Nn \l__wstf_window_ht_dim + { \box_ht_plus_dp:N \l__wstf_window_box } \bool_if:NTF \g__wstf_right_move_bool { \__wstf_put_box_aux: } { \box_if_empty:NTF \l__wstf_bottom_box - { - \dim_compare:nNnTF - { \g__wstf_remaining_dim } - > - { \box_ht_plus_dp:N \l__wstf_window_box } - { \__wstf_set_next: } - { \__wstf_put_box_aux: } - } + { \__wstf_put_next_test: } { \__wstf_put_box_aux: } } } +\dim_new:N \l__wstf_window_ht_dim \skip_new:N \l__wstf_par_skip -\cs_new_protected_nopar:Npn \__wstf_put_box_aux: +\cs_new_protected_nopar:Npn \__wstf_put_next_test: { - \int_gzero:N \g__wstf_window_int - \__wstf_hbox:n + \box_if_empty:NF \g__wstf_equation_box { - \__wstf_put_window_box: - \bool_if:NF \g__wstf_next_bool - { \__wstf_put_stuff_box: } + \dim_add:Nn \l__wstf_window_ht_dim + { \box_ht_plus_dp:N \g__wstf_equation_box + \g__wstf_pos_skip } } + \dim_compare:nNnTF + { \g__wstf_remaining_dim + \g__wstf_pos_skip } > \l__wstf_window_ht_dim + { \__wstf_set_next: } + { \__wstf_put_box_aux: } + } +\cs_new_protected_nopar:Npn \__wstf_put_box_aux: + { + \__wstf_output_window_box: \box_if_empty:NTF \l__wstf_bottom_box { \__wstf_put_trailer_box: } { \__wstf_put_bottom_box: } @@ -1625,31 +1848,48 @@ \bool_if:NTF \g__wstf_right_move_bool { \__wstf_next_para_trailer: } { - \__wstf_add_pos_skip: - \box_if_empty:NF \g__wstf_pos_box - { - \__wstf_newline: - \hbox_unpack_drop:N \g__wstf_pos_box - } + \__wstf_add_pos_kludge: + \__wstf_put_pos_box: + \__wstf_clear_variable: } } } \cs_new_protected_nopar:Npn \__wstf_put_bottom_box: { - \__wstf_newline: + \__wstf_para_raw_end: + \para_raw_noindent: \hbox_unpack_drop:N \l__wstf_bottom_box \box_if_empty:NF \g__wstf_equation_box { \__wstf_insert_equation: } + \__wstf_put_pos_box: + \__wstf_clear_variable: + } +\cs_new_protected_nopar:Npn \__wstf_output_window_box: + { + \__wstf_hbox:n + { + \__wstf_put_window_box: + \bool_if:NF \g__wstf_next_bool + { \__wstf_output_stuff_box: } + } + } +\cs_new_protected_nopar:Npn \__wstf_put_pos_box: + { \box_if_empty:NF \g__wstf_pos_box - { \hbox_unpack_drop:N \g__wstf_pos_box } - \bool_gset_false:N \g__wstf_right_move_bool - \bool_gset_false:N \g__wstf_first_save_bool + { \__wstf_output_pos_box: } } -\cs_new_protected_nopar:Npn \__wstf_newline: +\cs_new_protected_nopar:Npn \__wstf_output_pos_box: { - \tex_penalty:D \c__wstf_nobreak_int - \tex_hfil:D - \tex_penalty:D \c__wstf_break_int + \__wstf_if_last_none:F + { \__wstf_output_pos_box_aux: } + \hbox_unpack_drop:N \g__wstf_pos_box + } +\cs_new_protected_nopar:Npn \__wstf_output_pos_box_aux: + { + \__wstf_para_raw_end: + \bool_if:NT \g__wstf_equation_dp_bool + { \__wstf_set_equation_depth: } + \para_raw_noindent: } \cs_new_protected:Npn \__wstf_hbox:n #1 { @@ -1664,22 +1904,22 @@ { \skip_horizontal:n { \l__wstf_line_dim - \l__wstf_r_dim } } \box_use:N \l__wstf_window_box } -\cs_new_protected_nopar:Npn \__wstf_put_stuff_box: +\cs_new_protected_nopar:Npn \__wstf_output_stuff_box: { - \__wstf_move_stuff_box:nn { up } + \hbox_gset:Nn \g__wstf_stuff_box { - \l__wstf_voffset_dim - + ( \box_dp:N \g__wstf_stuff_box - - \box_dp:N \l__wstf_window_box ) - + ( \box_ht_plus_dp:N \l__wstf_window_box - - \g__wstf_stuff_ht_dim ) / 2 - \box_if_empty:NT \l__wstf_bottom_box - { - \g__wstf_pos_skip / 2 } + \__wstf_parshape_kern: + \box_move_up:nn + { + + \box_ht:N \l__wstf_window_box + - ( \l__wstf_window_ht_dim + + \box_ht_plus_dp:N \g__wstf_stuff_box ) / 2 + + \l__wstf_voffset_dim + } + { \box_use_drop:N \g__wstf_stuff_box } } - \__wstf_output_stuff_box: - } -\cs_new_protected_nopar:Npn \__wstf_output_stuff_box: - { + \box_gset_ht:Nn \g__wstf_stuff_box { \c_zero_dim } + \box_gset_dp:Nn \g__wstf_stuff_box { \c_zero_dim } \skip_horizontal:n { \dim_compare:nNnTF \l__wstf_r_dim > \c_zero_dim @@ -1699,18 +1939,6 @@ } \box_use_drop:N \g__wstf_stuff_box } -\cs_new_protected:Npn \__wstf_move_stuff_box:nn #1#2 - { - \hbox_gset:Nn \g__wstf_stuff_box - { - \__wstf_parshape_kern: - \use:c { box_move_ #1 :nn } - {#2} - { \box_use_drop:N \g__wstf_stuff_box } - } - \box_gset_ht:Nn \g__wstf_stuff_box { \c_zero_dim } - \box_gset_dp:Nn \g__wstf_stuff_box { \c_zero_dim } - } \cs_new_protected_nopar:Npn \__wstf_add_vskip: { \box_if_empty:NTF \g__wstf_display_box @@ -1719,6 +1947,7 @@ } \cs_new_protected_nopar:Npn \__wstf_add_vskip_display: { + \bool_set_true:N \l__wstf_display_pre_bool \vbox_unpack_drop:N \g__wstf_display_box \__wstf_ignore_depth: } @@ -1726,18 +1955,15 @@ { \dim_compare:nNnTF \tex_pagegoal:D < \c_max_dim { \__wstf_add_vskip_auxii: } - { \__wstf_add_vskip_auxiii: } + { + \bool_if:NTF \g__wstf_next_bool + { \__wstf_add_vskip_auxii: } + { \__wstf_add_vskip_auxiii: } + } } \cs_new_protected_nopar:Npn \__wstf_add_vskip_auxii: { - \skip_gset:Nn \g__wstf_pre_skip - { - \g__wstf_baseline_skip - - \g__wstf_prevdepth_dim - - \g__wstf_ht_dim - } - \dim_compare:nNnT \g__wstf_pre_skip < \tex_lineskiplimit:D - { \skip_gset_eq:NN \g__wstf_pre_skip \tex_lineskip:D } + \__wstf_add_vskip_auxiv: \bool_if:NTF \l__wstf_first_move_bool { \__wstf_first_move_skip: } { \skip_vertical:N \g__wstf_pre_skip } @@ -1745,14 +1971,25 @@ } \cs_new_protected_nopar:Npn \__wstf_add_vskip_auxiii: { + \__wstf_add_vskip_auxiv: + \skip_vertical:N \g__wstf_pre_skip \dim_compare:nNnTF \tex_topskip:D > \g__wstf_ht_dim { + \skip_sub:Nn \tex_topskip:D { \g__wstf_ht_dim } \tex_hrule:D height \c_zero_dim \scan_stop: - \skip_gset:Nn \g__wstf_pre_skip - { \tex_topskip:D - \g__wstf_ht_dim } - \skip_vertical:n { \g__wstf_pre_skip - \tex_topskip:D } } - { \skip_gzero:N \g__wstf_pre_skip } + { \__wstf_ignore_depth: } + } +\cs_new_protected_nopar:Npn \__wstf_add_vskip_auxiv: + { + \skip_gset:Nn \g__wstf_pre_skip + { + \g__wstf_baseline_skip + - \g__wstf_prevdepth_dim + - \g__wstf_ht_dim + } + \dim_compare:nNnT \g__wstf_pre_skip < \tex_lineskiplimit:D + { \skip_gset_eq:NN \g__wstf_pre_skip \tex_lineskip:D } } \cs_new_protected_nopar:Npn \__wstf_first_move_skip: { @@ -1761,11 +1998,21 @@ \g__wstf_first_sep_dim - \g__wstf_window_ht_dim - \tex_parskip:D - \dim_compare:nNnT \g__wstf_column_right_ht_dim > \c_zero_dim - { + \g__wstf_column_right_ht_dim + \g__wstf_pre_skip } + \dim_compare:nNnT \g__wstf_column_ht_dim > \c_zero_dim + { + \g__wstf_column_ht_dim + \g__wstf_pre_skip } } } \skip_new:N \g__wstf_pre_skip +\bool_new:N \l__wstf_display_pre_bool +\cs_new_protected_nopar:Npn \__wstf_set_vskip: + { + \box_if_empty:NTF \g__wstf_display_box + { + \skip_gset:Nn \g__wstf_pre_skip + { \g__wstf_baseline_skip - \g__wstf_ht_dim } + } + { \__wstf_add_vskip_display: } + } \cs_new_protected_nopar:Npn \__wstf_ignore_depth: { \dim_set_eq:NN \tex_prevdepth:D \c__wstf_ignore_depth_dim } \cs_new_protected_nopar:Npn \__wstf_set_prevdepth:N @@ -1775,24 +2022,19 @@ { \dim_set:Nn \l__wstf_height_dim { - \g__wstf_pre_skip - + \g__wstf_pos_skip - + \box_ht_plus_dp:N \l__wstf_window_box + \bool_if:NT \g__wstf_next_bool { \l__wstf_par_skip } + + \g__wstf_pre_skip + + \l__wstf_window_ht_dim } \dim_gadd:Nn \g__wstf_total_ht_dim { \l__wstf_height_dim } \dim_set:Nn \l__wstf_shift_dim { \g__wstf_remaining_dim - \l__wstf_height_dim } - \dim_compare:nNnTF \l__wstf_shift_dim > \c_zero_dim - { \__wstf_set_next_auxi: } - { - \dim_compare:nNnTF - { - \l__wstf_shift_dim } > \l__wstf_min_dim - { \__wstf_set_next_auxii: } - { \__wstf_set_next_auxi: } - } + \dim_compare:nNnTF + { - \l__wstf_shift_dim } < \l__wstf_min_dim + { \__wstf_set_next_para: } + { \__wstf_set_next_output: } } -\dim_new:N \g__wstf_total_ht_dim -\cs_new_protected_nopar:Npn \__wstf_set_next_auxi: +\cs_new_protected_nopar:Npn \__wstf_set_next_para: { \int_gset:Nn \g__wstf_window_int { @@ -1801,68 +2043,38 @@ { \c_one_int } } \__wstf_set_next_verify: - \bool_if:NF \g__wstf_next_bool - { \__wstf_move_next_stuff_box: } - \__wstf_set_next_output: + \__wstf_output_window_box: \__wstf_make_next_stuff:nn { \g__wstf_stuff_wd_dim } { \l__wstf_shift_dim } \int_gzero:N \g__wstf_top_int \__wstf_next_para_trailer: } -\cs_new_protected_nopar:Npn \__wstf_move_next_stuff_box: - { - \__wstf_move_stuff_box:nn { down } - { - \box_ht:N \g__wstf_stuff_box - - \box_ht:N \l__wstf_window_box - + ( \g__wstf_window_ht_dim - - \g__wstf_stuff_ht_dim - - \g__wstf_pre_skip - + \g__wstf_pos_skip - + \l__wstf_par_skip ) / 2 - - \l__wstf_voffset_dim - } - } -\cs_new_protected_nopar:Npn \__wstf_set_next_auxii: - { - \int_gzero:N \g__wstf_window_int - \bool_if:NF \g__wstf_next_bool - { - \__wstf_move_stuff_box:nn { down } - { - \box_ht:N \g__wstf_stuff_box - - \box_ht:N \l__wstf_window_box - - \l__wstf_voffset_dim - } - } - \__wstf_set_next_output: - \__wstf_add_pos_skip: - } \cs_new_protected_nopar:Npn \__wstf_set_next_output: { - \__wstf_hbox:n - { - \__wstf_put_window_box: - \bool_if:NF \g__wstf_next_bool - { \__wstf_output_stuff_box: } - } + \__wstf_output_window_box: + \__wstf_add_pos_kludge: + \__wstf_put_pos_box: + \__wstf_clear_variable: } \cs_new_protected_nopar:Npn \__wstf_set_next_verify: { \dim_set:Nn \l__wstf_height_dim - { \g__wstf_window_ht_dim - \g__wstf_total_ht_dim } - \dim_until_do:nNnn + { \g__wstf_window_ht_dim - \g__wstf_total_ht_dim - \l__wstf_min_dim } + \dim_while_do:nNnn { \tex_baselineskip:D * \g__wstf_window_int + \l__wstf_par_skip } - > + < { \l__wstf_height_dim } { \int_gincr:N \g__wstf_window_int } - \dim_gadd:Nn \g__wstf_total_ht_dim - { \tex_baselineskip:D * \g__wstf_window_int + \l__wstf_par_skip } + \bool_if:NF \g__wstf_next_bool + { + \dim_add:Nn \l__wstf_window_ht_dim + { \tex_baselineskip:D * \g__wstf_window_int + \l__wstf_par_skip } + } } \cs_new_protected_nopar:Npn \__wstf_next_para_trailer: { - \__wstf_add_pos_skip: + \__wstf_add_pos_kludge: \box_if_empty:NTF \g__wstf_pos_box { \__wstf_next_para: } { @@ -1877,7 +2089,6 @@ \dim_gset:Nn \g__wstf_stuff_wd_dim {#1} \dim_gset:Nn \g__wstf_remaining_dim {#2} } -\bool_new:N \g__wstf_next_bool \cs_new_protected:Npn \__wstf_extract_display_hbox:NN #1 { \box_gclear:N \g__wstf_pos_box @@ -1938,11 +2149,7 @@ \dim_new:N \g__wstf_display_pre_dim \cs_new_protected_nopar:Npn \__wstf_test_display_math: { - \__wstf_if_last_hlist:T - { - \box_gset_to_last:N \g__wstf_pos_box - \tex_unskip:D - } + \__wstf_if_last_hlist:T { \__wstf_extract_pos_hbox: } \box_clear:N \l__wstf_add_box \box_gclear:N \g__wstf_display_box \skip_gzero:N \g__wstf_last_skip @@ -1954,14 +2161,21 @@ \__wstf_add_last_skip:w \__wstf_add_last_skip:w \__wstf_add_last_penalty:w - \__wstf_add_last_finalise:w \q_stop + \__wstf_add_last_finalise:w \s_stop + } +\cs_new_protected_nopar:Npn \__wstf_extract_pos_hbox: + { + \box_gset_to_last:N \g__wstf_last_box + \__wstf_repack_hbox:N \l__wstf_last_box + \box_gset_eq_drop:NN \g__wstf_pos_box \l__wstf_last_box + \tex_unskip:D } \box_new:N \l__wstf_add_box \box_new:N \g__wstf_pos_box \cs_new_protected_nopar:Npn \__wstf_add_last_stop:w { \vbox_unpack_drop:N \l__wstf_add_box - \use_none_delimit_by_q_stop:w + \use_none_delimit_by_s_stop:w } \cs_new_protected_nopar:Npn \__wstf_add_last_skip:w { @@ -2027,7 +2241,7 @@ } { \box_gset_eq_drop:NN \g__wstf_display_box \l__wstf_add_box } { \vbox_unpack_drop:N \l__wstf_add_box } - \use_none_delimit_by_q_stop:w + \use_none_delimit_by_s_stop:w } \int_new:N \g__wstf_display_pre_int \skip_new:N \g__wstf_display_pre_skip @@ -2293,11 +2507,11 @@ } \regex_const:Nn \c__wstf_integer_regex { \A \d+ \Z } \cs_new_protected_nopar:Npn \__wstf_unknown_key_error:n - { \msg_error:nnn { wrapstuff } { unknown-key } } -\msg_new:nnnn { wrapstuff } { unknown-key } - { The~key~'#1'~is~unknown~and~is~being~ignored. } + { \msg_error:nnn { wstf } { unknown-key } } +\msg_new:nnnn { wstf } { unknown-key } + { The~key~"#1"~is~unknown~and~is~being~ignored. } { - The~package~wrapstuff~does~not~have~a~key~called~'#1'.\\ + The~package~wrapstuff~does~not~have~a~key~called~"#1".\\ Check~that~you~have~spelled~the~key~name~correctly. } \NewDocumentCommand \wrapstuffset { m } |