diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/spbmark/spbmark.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/spbmark/spbmark.sty | 139 |
1 files changed, 88 insertions, 51 deletions
diff --git a/Master/texmf-dist/tex/latex/spbmark/spbmark.sty b/Master/texmf-dist/tex/latex/spbmark/spbmark.sty index fa10c8410f6..eb6b248a829 100644 --- a/Master/texmf-dist/tex/latex/spbmark/spbmark.sty +++ b/Master/texmf-dist/tex/latex/spbmark/spbmark.sty @@ -1,15 +1,15 @@ % % ***************** THE SPBMARK PACKAGE ***************** % -% Copyright (C) 2021-2024 by Qu Yi <toquyi@163.com> +% Copyright (C) 2021-2025 by Qu Yi <toquyi@163.com> % % This work may be distributed and/or modified under the % conditions of the CC-BY 4.0 License. % The latest version of this license is in % https://creativecommons.org/licenses/by/4.0/legalcode \NeedsTeXFormat{LaTeX2e}[2018/12/31] -\RequirePackage{xparse,l3keys2e} -\ProvidesExplPackage{spbmark}{2024/06/21}{1.46k} +\RequirePackage{xparse} +\ProvidesExplPackage{spbmark}{2025/02/08}{1.46x} {Customize superscripts and subscripts} \cs_generate_variant:Nn \box_set_ht:Nn { cv } @@ -34,15 +34,13 @@ \cs_set_eq:NN \spbset \spb_set:n \cs_new_protected:Npn \spb_mark_core_set_trad:n #1 { - \cs_set:cpn { spb@text#1script@core } - { \use:c { spb@text#1script@save } } - \cs_set:cpn { spb@math@#1@core } - { \use:c { spb@math@#1@save } } + \cs_set_eq:cc { spb@text#1script@core } { spb@text#1script@save } + \cs_set_eq:cc { spb@math@#1@core } { spb@math@#1@save } } \cs_new_protected:Npn \spb_mark_core_set_none:n #1 { - \cs_set:cpn { spb@text#1script@core } { \relax } - \cs_set:cpn { spb@math@#1@core } { \relax } + \cs_set_eq:cN { spb@text#1script@core } \use:n + \cs_set_eq:cN { spb@math@#1@core } \use:n } \keys_define:nn { spbmark/option } @@ -130,17 +128,27 @@ { \tl_set_eq:NN \fnmarkfont \ftntm@font } { \tl_set_eq:NN \fnmarkfont \normalfont } -\ProcessKeysOptions{spbmark/option} +\cs_if_exist:NTF \ProcessKeyOptions + { \ProcessKeyOptions[spbmark/option] } + { + \RequirePackage{l3keys2e} + \ProcessKeysOptions{spbmark/option} + } \tl_new:N \g__spb_mark_case_init_tl +\bool_new:N \l__spb_mark_at_local_bool \cs_new_protected:Npn \spb_local_case_init:nnn #1#2#3 { - \str_case:Vn \g__spb_mark_case_init_tl + \bool_if:NTF \l__spb_mark_at_local_bool { - { super } {#1} - { sub } {#2} - { supersub } {#3} + \str_case:Vn \g__spb_mark_case_init_tl + { + { super } {#1} + { sub } {#2} + { supersub } {#3} + } } + { #1#2#3 } } \NewDocumentCommand{\spb@both@vsep@assign} {>{\SplitArgument{1}{,}}m} @@ -219,7 +227,7 @@ { \box_move_up:nn {#1} { \box_use:N \g__super_ii_box } } \cs_new:Npn \spb_box_sub_move_down_ii:n #1 { \box_move_down:nn {#1} { \box_use:N \g__sub_ii_box } } -\cs_new:Npn \spb_box_vmove_i:nn #1 +\cs_new:Npn \spb_inner_box_vmove_i:nn #1 { \str_case:nn {#1} { @@ -230,7 +238,7 @@ \cs_generate_variant:Nn \spb_box_super_move_up_ii:n { V } \cs_generate_variant:Nn \spb_box_sub_move_down_ii:n { V } \providecommand{\hbox_overlap_center:n}[1] - { \hbox_to_zero:n { \hss #1\hss } } + {\hbox_to_zero:n { \hss #1\hss }} \cs_new:Npn \spb_hbox_overlap_vmove_ii:n #1 { \use:c { hbox_overlap_#1:n } @@ -330,40 +338,70 @@ \tl_set:Nn \maxwd { \dim_max:VV \superwd \subwd } \tl_set:Nn \l__spb_box_super_wd_i_tl { \box_wd:N \g__super_i_inner_box } \tl_set:Nn \l__spb_box_sub_wd_i_tl { \box_wd:N \g__sub_i_inner_box } -\cs_new:Npn \spb_math_print_store_i:nn #1#2 +\providecommand{\NewHookWithArguments}[2]{} +\providecommand{\UseHookWithArguments}[4]{} +\NewHookWithArguments{spb/super/before}{2} +\NewHookWithArguments{spb/super/after}{2} +\NewHookWithArguments{spb/sub/before}{2} +\NewHookWithArguments{spb/sub/after}{2} +\NewHookWithArguments{spb/super*/before}{2} +\NewHookWithArguments{spb/super*/after}{2} +\NewHookWithArguments{spb/sub*/before}{2} +\NewHookWithArguments{spb/sub*/after}{2} +\NewHookWithArguments{cmd+/super/after}{2} +\NewHookWithArguments{cmd+/sub/after}{2} +\cs_new:Npn \spb_math_print_store_i:nnnn #1#2#3#4 { - \hbox_gset:cn { g__#1_i_inner_box } - { - \ensuremath - { - \use:c { spb@math@#1@core } - { \tl_use:c { l__spb_#1_cmd_i_tl }{#2} } + \bool_if:NTF \l__spb_nobox_mark_bool + { \tl_gset:cn { g__#1_i_nobox_mark_tl } } + { \hbox_gset:cn { g__#1_i_inner_box } } + { + #3{ + \UseHookWithArguments{spb/#1/before}{2}{#1}{#2} + \use:c {#4} { \tl_use:c { l__spb_#1_cmd_i_tl }{#2} } + \UseHookWithArguments{spb/#1/after}{2}{#1}{#2} } } \dim_gset:Nv \rlastwd { l__spb_box_#1_wd_i_tl } } +\cs_new:Npn \spb_math_print_store_i:nn #1#2 + { + \spb_math_print_store_i:nnnn + {#1} {#2} { \ensuremath } { spb@math@#1@core } + } \cs_new:Npn \spb_text_print_store_i:nn #1#2 { - \hbox_gset:cn { g__#1_i_inner_box } + \spb_math_print_store_i:nnnn + {#1} {#2} { \use:n } { spb@text#1script@core } + } +\cs_new:Npn \spb_math_print_store_ii:nnnnn #1#2#3#4#5 + { + \hbox_gset:Nn \g__super_ii_box + { + #3{ + \UseHookWithArguments{spb/super*/before}{2}{super}{#1} + #4{\l__spb_super_cmd_ii_tl{#1}} + \UseHookWithArguments{spb/super*/after}{2}{super}{#1} + } + } + \hbox_gset:Nn \g__sub_ii_box { - \use:c { spb@text#1script@core } - { \tl_use:c { l__spb_#1_cmd_i_tl }{#2} } + #3{ + \UseHookWithArguments{spb/sub*/before}{2}{sub}{#2} + #5{\l__spb_sub_cmd_ii_tl{#2}} + \UseHookWithArguments{spb/sub*/after}{2}{sub}{#2} + } } - \dim_gset:Nv \rlastwd { l__spb_box_#1_wd_i_tl } } \cs_new:Npn \spb_math_print_store_ii:nn #1#2 { - \hbox_gset:Nn \g__super_ii_box - { \ensuremath{\spb@math@super@core{\l__spb_super_cmd_ii_tl{#1}}} } - \hbox_gset:Nn \g__sub_ii_box - { \ensuremath{\spb@math@sub@core{\l__spb_sub_cmd_ii_tl{#2}}} } + \spb_math_print_store_ii:nnnnn {#1} {#2} + { \ensuremath } { \spb@math@super@core } { \spb@math@sub@core } } \cs_new:Npn \spb_text_print_store_ii:nn #1#2 { - \hbox_gset:Nn \g__super_ii_box - { \spb@textsuperscript@core{\l__spb_super_cmd_ii_tl{#1}} } - \hbox_gset:Nn \g__sub_ii_box - { \spb@textsubscript@core{\l__spb_sub_cmd_ii_tl{#2}} } + \spb_math_print_store_ii:nnnnn {#1} {#2} + { \use:n } { \spb@textsuperscript@core } { \spb@textsubscript@core } } \cs_set_eq:NN \spbifmath \use_ii:nn \cs_new:Npn \spb@ifmathtrue { \cs_set_eq:NN \spbifmath \use_i:nn } @@ -417,7 +455,8 @@ spregex .tl_set:N = \l__spb_super_regex_next_tl, spregex .initial:n = \c{sub}|\c{textsubscript}|\c{sb}|\_, sbregex .tl_set:N = \l__spb_sub_regex_next_tl, - sbregex .initial:n = \c{super}|\c{textsuperscript}|\c{sp}|\^ + sbregex .initial:n = \c{super}|\c{textsuperscript}|\c{sp}|\^, + nobox .bool_set:N = \l__spb_nobox_mark_bool } \cs_new:Npn \spb_clear_thiswd:n #1 { @@ -457,23 +496,29 @@ \exp_args:Nc \NewDocumentCommand {#1}{sO{}O{}mO{}} { \group_begin: + \bool_set_true:N \l__spb_mark_at_local_bool \mode_leave_vertical: \tl_gset:Nn \g__spb_mark_case_init_tl {#1} \spb_set:n { ##2,##3,##5 } \spb_mode_switch:nnn {#1} {##4} { i } - \spb_content_hbox_set:nn {#1} {##1} - \spb_ht_dp_assign:nnnn {#1} {#1} { i } { _outer } - \box_use:c { g__#1_i_outer_box } + \bool_if:NTF \l__spb_nobox_mark_bool + { \tl_use:c { g__#1_i_nobox_mark_tl } } + { + \spb_mark_box_set:nn {#1} {##1} + \spb_ht_dp_assign:nnnn {#1} {#1} { i } { _outer } + \box_use:c { g__#1_i_outer_box } + } \exp_last_unbraced:Nx \group_end: { + \UseHookWithArguments{cmd+/#1/after}{2}{#1}{##4} \exp_args:Nv \str_if_eq:nnT { l__spb_#1_thiswd_mode_tl } { auto } { \spb_clear_thiswd:n {#1} } } } } -\cs_new_protected:Npn \spb_content_hbox_set:nn #1#2 +\cs_new_protected:Npn \spb_mark_box_set:nn #1#2 { \dim_gset:Nn \clastwd { (\llastwd + \rlastwd)/2 } \tl_set:Nn \abs@hmove@i { \dim_abs:v { l__spb_#1_hmove_tl } } @@ -484,7 +529,7 @@ \hbox_overlap_left:n { \hbox_overlap_right:n - { \spb_box_vmove_i:nn {#1} { \tl_use:c { l__spb_#1_vmove_tl } } } + { \spb_inner_box_vmove_i:nn {#1} { \tl_use:c { l__spb_#1_vmove_tl } } } \skip_horizontal:n { \abs@hmove@i } } \IfBooleanT{#2} @@ -496,7 +541,7 @@ { \hbox_to_wd:nn { \tl_use:c { l__spb_box_#1_wd_i_tl } + \tl_use:c { l__spb_#1_hmove_tl } } - { \hss\spb_box_vmove_i:nn {#1} { \tl_use:c { l__spb_#1_vmove_tl } } } + { \hss\spb_inner_box_vmove_i:nn {#1} { \tl_use:c { l__spb_#1_vmove_tl } } } } } \dim_gset:Nv \llastwd { l__spb_box_#1_wd_i_tl } @@ -517,6 +562,7 @@ \NewDocumentCommand{\supersub}{sO{}mmO{}} { \group_begin: + \bool_set_true:N \l__spb_mark_at_local_bool \mode_leave_vertical: \tl_gset:Nn \g__spb_mark_case_init_tl { supersub } \spb_set:n {#2,#5} @@ -601,15 +647,6 @@ {\AddToHook{package/easybase/after}} {\use:n} { \keys_define:nn { } { ctex/tools .inherit:n = spbmark/option } } -\IfFormatAtLeastTF{2021/11/15} - { - \AddToHook{package/altsubsup/after} - { - \ifaltsbsp@spbmark - \SetAltSubSupCommands{\relax} - \fi - } - }{} \cs_set_eq:NN \spb \supersub \endinput % |