summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/spbmark/spbmark.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/spbmark/spbmark.sty')
-rw-r--r--macros/latex/contrib/spbmark/spbmark.sty109
1 files changed, 63 insertions, 46 deletions
diff --git a/macros/latex/contrib/spbmark/spbmark.sty b/macros/latex/contrib/spbmark/spbmark.sty
index e78f1db659..86ebb2a100 100644
--- a/macros/latex/contrib/spbmark/spbmark.sty
+++ b/macros/latex/contrib/spbmark/spbmark.sty
@@ -9,14 +9,15 @@
% https://creativecommons.org/licenses/by/4.0/legalcode
\NeedsTeXFormat{LaTeX2e}[2018/12/31]
\RequirePackage{xparse,l3keys2e}
-\ProvidesExplPackage{spbmark}{2022/03/04}{1.39}
+\ProvidesExplPackage{spbmark}{2022/03/05}{1.4}
{Customize superscripts and subscripts}
\cs_generate_variant:Nn \box_set_ht:Nn { cv }
\cs_generate_variant:Nn \box_set_dp:Nn { cv }
\cs_generate_variant:Nn \dim_max:nn { VV }
\cs_generate_variant:Nn \dim_gset:Nn { Nv }
-\cs_generate_variant:Nn \dim_compare:nNnTF { V }
+\cs_generate_variant:Nn \dim_abs:n { V,v }
+\cs_generate_variant:Nn \dim_compare:nNnTF { V,v }
\cs_generate_variant:Nn \msg_warning:nnn { nnV }
\cs_generate_variant:Nn \str_case:nn { x }
\cs_generate_variant:Nn \tl_if_novalue:nF { V }
@@ -120,9 +121,9 @@
novmove .meta:n = { spvmove = 0pt,sbvmove = 0pt }
}
\cs_new:Npn \spb_box_super_move_up_i:n #1
- { \box_move_up:nn {#1} { \box_use:N \l__super_i_box } }
+ { \box_move_up:nn {#1} { \box_use:N \l__super_i_inner_box } }
\cs_new:Npn \spb_box_sub_move_down_i:n #1
- { \box_move_down:nn {#1} { \box_use:N \l__sub_i_box } }
+ { \box_move_down:nn {#1} { \box_use:N \l__sub_i_inner_box } }
\cs_new:Npn \spb_box_super_move_up_ii:n #1
{ \box_move_up:nn {#1} { \box_use:N \l__super_ii_box } }
\cs_new:Npn \spb_box_sub_move_down_ii:n #1
@@ -216,30 +217,31 @@
{ \tl_set:Nn \l__sub_depth_ii_tl {#1} }
}
}
-\cs_new_protected:Npn \spb_ht_dp_assign:nnn #1#2#3
+\cs_new_protected:Npn \spb_ht_dp_assign:nnnn #1#2#3#4
{
\tl_if_blank:vF { l__#1_height_#3_tl }
- { \box_set_ht:cv { l__#1_#3_box } { l__#1_height_#3_tl } }
+ { \box_set_ht:cv { l__#1_#3#4_box } { l__#1_height_#3_tl } }
\tl_if_blank:vF { l__#1_depth_i_tl }
- { \box_set_dp:cv { l__#2_#3_box } { l__#2_depth_#3_tl } }
+ { \box_set_dp:cv { l__#2_#3#4_box } { l__#2_depth_#3_tl } }
}
-\box_new:N \l__super_i_box
-\box_new:N \l__sub_i_box
+\box_new:N \l__super_i_outer_box
+\box_new:N \l__super_i_inner_box
+\box_new:N \l__sub_i_outer_box
+\box_new:N \l__sub_i_inner_box
\box_new:N \l__super_ii_box
\box_new:N \l__sub_ii_box
\dim_new:N \llastwd
\dim_new:N \clastwd
\dim_new:N \rlastwd
-\tl_set:Nn \l__spb_box_super_wd_i_tl { \box_wd:N \l__super_i_box }
-\tl_set:Nn \l__spb_box_sub_wd_i_tl { \box_wd:N \l__sub_i_box }
-\tl_set:Nn \l__spb_box_super_wd_ii_tl { \box_wd:N \l__super_ii_box }
-\tl_set:Nn \l__spb_box_sub_wd_ii_tl { \box_wd:N \l__sub_ii_box }
-\tl_set:Nn \l__spb_box_max_wd_tl
- { \dim_max:VV \l__spb_box_super_wd_ii_tl \l__spb_box_sub_wd_ii_tl }
+\tl_set:Nn \superwd { \box_wd:N \l__super_ii_box }
+\tl_set:Nn \subwd { \box_wd:N \l__sub_ii_box }
+\tl_set:Nn \maxwd { \dim_max:VV \superwd \subwd }
+\tl_set:Nn \l__spb_box_super_wd_i_tl { \box_wd:N \l__super_i_inner_box }
+\tl_set:Nn \l__spb_box_sub_wd_i_tl { \box_wd:N \l__sub_i_inner_box }
\cs_new:Npn \spb_math_print_store_i:nn #1#2
{
- \hbox_set:cn { l__#1_i_box }
+ \hbox_gset:cn { l__#1_i_inner_box }
{
\ensuremath
{
@@ -251,7 +253,7 @@
}
\cs_new:Npn \spb_text_print_store_i:nn #1#2
{
- \hbox_set:cn { l__#1_i_box }
+ \hbox_gset:cn { l__#1_i_inner_box }
{
\use:c { spb@text#1script@save }
{ \tl_use:c { l__spb_#1_cmd_i_tl }{#2} }
@@ -260,16 +262,16 @@
}
\cs_new:Npn \spb_math_print_store_ii:nn #1#2
{
- \hbox_set:Nn \l__super_ii_box
+ \hbox_gset:Nn \l__super_ii_box
{ \ensuremath{\spb@math@super@save{\l__spb_super_cmd_ii_tl{#1}}} }
- \hbox_set:Nn \l__sub_ii_box
+ \hbox_gset:Nn \l__sub_ii_box
{ \ensuremath{\spb@math@sub@save{\l__spb_sub_cmd_ii_tl{#2}}} }
}
\cs_new:Npn \spb_text_print_store_ii:nn #1#2
{
- \hbox_set:Nn \l__super_ii_box
+ \hbox_gset:Nn \l__super_ii_box
{ \spb@textsuperscript@save{\l__spb_super_cmd_ii_tl{#1}} }
- \hbox_set:Nn \l__sub_ii_box
+ \hbox_gset:Nn \l__sub_ii_box
{ \spb@textsubscript@save{\l__spb_sub_cmd_ii_tl{#2}} }
}
\cs_set_eq:NN \spbifmath \use_ii:nn
@@ -306,32 +308,38 @@
\cs_new_protected:Npn \spb_both_newcmd_map:n #1
{
- \exp_args:Nc \NewDocumentCommand {#1}{O{}mO{}}
+ \exp_args:Nc \NewDocumentCommand {#1}{sO{}mO{}}
{
\group_begin:
\mode_leave_vertical:
\tl_gset:Nn \g__spb_mark_case_init_tl {#1}
\spb_define:n { unknown .undefine: }
- \spb_set:n { ##1,##3 }
- \spb_mode_switch:nnn {#1} {##2} { i }
- \spb_content_hbox_set:n {#1}
- \spb_ht_dp_assign:nnn {#1} {#1} { i }
- \box_use:c { l__#1_i_box }
+ \spb_set:n { ##2,##4 }
+ \spb_mode_switch:nnn {#1} {##3} { i }
+ \spb_content_hbox_set:nn {#1} {##1}
+ \spb_ht_dp_assign:nnnn {#1} {#1} { i } { _outer }
+ \box_use:c { l__#1_i_outer_box }
\group_end:
}
}
-\cs_new_protected:Npn \spb_content_hbox_set:n #1
+\cs_new_protected:Npn \spb_content_hbox_set:nn #1#2
{
\dim_gset:Nn \clastwd { (\llastwd + \rlastwd)/2 }
- \hbox_set:cn { l__#1_i_box }
+ \tl_set:Nn \abs@hmove@i { \dim_abs:v { l__spb_#1_hmove_tl } }
+ \hbox_set:cn { l__#1_i_outer_box }
{
- \dim_compare:nNnTF { \tl_use:c { l__spb_#1_hmove_tl } } < { 0pt }
+ \dim_compare:vNnTF { l__spb_#1_hmove_tl } < { 0pt }
{
\hbox_overlap_left:n
{
\hbox_overlap_right:n
{ \spb_box_vmove_i:nn {#1} { \tl_use:c { l__spb_#1_vmove_tl } } }
- \skip_horizontal:n { \dim_abs:n { \tl_use:c { l__spb_#1_hmove_tl } } }
+ \skip_horizontal:n { \abs@hmove@i }
+ }
+ \IfBooleanT{#2}
+ {
+ \dim_compare:nNnT { \abs@hmove@i } < { \rlastwd }
+ { \skip_horizontal:n { \rlastwd - \abs@hmove@i } }
}
}
{
@@ -340,22 +348,30 @@
{ \hss\spb_box_vmove_i:nn {#1} { \tl_use:c { l__spb_#1_vmove_tl } } }
}
}
- \dim_gset:Nn \llastwd
- { \tl_use:c { l__spb_box_#1_wd_i_tl } - \tl_use:c { l__spb_#1_hmove_tl } }
+ \dim_gset:Nv \llastwd { l__spb_box_#1_wd_i_tl }
}
\clist_map_inline:nn { super,sub } { \spb_both_newcmd_map:n {#1} }
\cs_new:Npn \spb_supersub_hmove_if_negative:TF #1#2
{ \dim_compare:VNnTF \l__spb_supersub_hmove_tl < { 0pt } {#1} {#2} }
-\NewDocumentCommand{\supersub}{O{}mmO{}}
+\tl_set:Nn \abs@hmove@ii { \dim_abs:V \l__spb_supersub_hmove_tl }
+\cs_new:Npn \spb_supersub_avoid_overlap:n #1
+ {
+ \IfBooleanT{#1}
+ {
+ \dim_compare:nNnT { \abs@hmove@ii } < { \maxwd }
+ { \skip_horizontal:n { \maxwd - \abs@hmove@ii } }
+ }
+ }
+\NewDocumentCommand{\supersub}{sO{}mmO{}}
{
\group_begin:
\mode_leave_vertical:
\tl_gset:Nn \g__spb_mark_case_init_tl { supersub }
\spb_define:n { unknown .undefine: }
- \spb_set:n {#1,#4}
- \spb_mode_switch:nnn {#2} {#3} { ii }
- \spb_ht_dp_assign:nnn { super } { sub } { ii }
+ \spb_set:n {#2,#5}
+ \spb_mode_switch:nnn {#3} {#4} { ii }
+ \spb_ht_dp_assign:nnnn { super } { sub } { ii } { }
\str_case:VnF \l__spb_supersub_halign_tl
{
{ l } { \use_i:nnn }
@@ -372,15 +388,16 @@
\hbox_overlap_left:n
{
\spb_hbox_overlap_vmove_ii:n { right }
- \skip_horizontal:n { \dim_abs:n { \l__spb_supersub_hmove_tl } }
+ \skip_horizontal:n { \abs@hmove@ii }
}
+ \spb_supersub_avoid_overlap:n {#1}
}
{
\hbox:n
{
\skip_horizontal:n { \l__spb_supersub_hmove_tl }
\spb_hbox_overlap_vmove_ii:n { right }
- \skip_horizontal:n { \l__spb_box_max_wd_tl }
+ \skip_horizontal:n { \maxwd }
}
}
}
@@ -390,16 +407,16 @@
\hbox_overlap_left:n
{
\spb_hbox_overlap_vmove_ii:n { center }
- \skip_horizontal:n
- { \dim_abs:n { \l__spb_supersub_hmove_tl + \l__spb_box_max_wd_tl/2 } }
+ \skip_horizontal:n { \abs@hmove@ii - \maxwd/2 }
}
+ \spb_supersub_avoid_overlap:n {#1}
}
{
\hbox:n
{
- \skip_horizontal:n { \l__spb_box_max_wd_tl/2 + \l__spb_supersub_hmove_tl }
+ \skip_horizontal:n { \maxwd/2 + \l__spb_supersub_hmove_tl }
\spb_hbox_overlap_vmove_ii:n { center }
- \skip_horizontal:n { \l__spb_box_max_wd_tl/2 }
+ \skip_horizontal:n { \maxwd/2 }
}
}
}
@@ -409,14 +426,14 @@
\hbox_overlap_left:n
{
\spb_hbox_overlap_vmove_ii:n { left }
- \skip_horizontal:n
- { \dim_abs:n { \l__spb_supersub_hmove_tl + \l__spb_box_max_wd_tl } }
+ \skip_horizontal:n { \abs@hmove@ii - \maxwd }
}
+ \spb_supersub_avoid_overlap:n {#1}
}
{
\hbox:n
{
- \skip_horizontal:n { \l__spb_box_max_wd_tl + \l__spb_supersub_hmove_tl }
+ \skip_horizontal:n { \maxwd + \l__spb_supersub_hmove_tl }
\spb_hbox_overlap_vmove_ii:n { left }
}
}