diff options
Diffstat (limited to 'macros/latex/contrib/numbersets/numbersets.sty')
-rw-r--r-- | macros/latex/contrib/numbersets/numbersets.sty | 120 |
1 files changed, 120 insertions, 0 deletions
diff --git a/macros/latex/contrib/numbersets/numbersets.sty b/macros/latex/contrib/numbersets/numbersets.sty new file mode 100644 index 0000000000..cceabf53e0 --- /dev/null +++ b/macros/latex/contrib/numbersets/numbersets.sty @@ -0,0 +1,120 @@ +\ProvidesExplPackage{numbersets}{2024-10-15}{v0.2.0}{A package for displaying number sets with customizable typefaces} + +% List of properties to store style commands +\prop_new:N \g_numbersets_styles_prop + +% Global default style for the package +\cs_new:Nn \g_numbersets_default_style_tl: { bb } + +% Presets for typefaces +\prop_put:Nnn \g_numbersets_styles_prop { bb } { \symbb } +\prop_put:Nnn \g_numbersets_styles_prop { bfup } { \symbfup } +\prop_put:Nnn \g_numbersets_styles_prop { bfit } { \symbfit } + +% Options for package +\keys_define:nn { numbersets } +{ + style .tl_set:N = \g_numbersets_default_style_tl, + style .initial:n = bb, +} + +\ProcessKeyOptions + +% Validation for property +\cs_new_protected:Npn \numbersets_check_style:n #1 +{ + \prop_if_in:NnTF \g_numbersets_styles_prop { #1 } + { } + { + \msg_error:nnn { numbersets } { unknown-style } { #1 } + } +} + +% Error message for unknown options +\msg_new:nnn { numbersets } { unknown-style } +{ + The~style~'#1'~is~not~declared. +} + +% Command to declare (or overwrite) styles +\NewDocumentCommand{\DeclareNumberSetStyle}{ m m } +{ + \prop_put:Nnn \g_numbersets_styles_prop { #1 } { #2 } +} + +% Command for setup global option +\NewDocumentCommand{\SetupNumberSetsOptions}{ m } +{ + \keys_set:nn { numbersets } { #1 } +} + +% Function to apply the style command +\cs_new_protected:Npn \numbersets_apply_style:n #1 +{ + \prop_get:NnNTF \g_numbersets_styles_prop { #1 } \l_tmpa_tl + { + \use:n { \l_tmpa_tl } + } + { + \msg_error:nnn { numbersets } { unknown-style } { #1 } + } +} + +% Store the style identifer of the \numberset command as a local variable +\cs_new:Nn \l_numbersets_style_tl: { } + +% Options for the \numberset command +\keys_define:nn { numberset } +{ + style .tl_set:N = \l_numbersets_style_tl, +} + +% Command to display the set symbol with custom typefaces +\NewDocumentCommand{\NumberSet}{ O{} m } +{ + \group_begin: + \keys_set:nn { numberset } { #1 } + \tl_if_empty:VTF \l_numbersets_style_tl + { + \tl_set_eq:NN \l_numbersets_style_tl \g_numbersets_default_style_tl + } + {} + \expandafter\numbersets_apply_style:n \expandafter{ \l_numbersets_style_tl } + { #2 } + \group_end: +} + +% Command to declare custom commands for set composed of numbers +\NewDocumentCommand{\DeclareNumberSetCommand}{ m m } +{ + \NewDocumentCommand{#1} + {o} + { + \IfValueTF{##1} + { + \NumberSet[##1]{#2} + } + { + \NumberSet{#2} + } + } +} + +% Presets for some sets composed of numbers + +% Natural numbers +\DeclareNumberSetCommand{\NaturalNumbers}{N} + +% Integers +\DeclareNumberSetCommand{\Integers}{Z} + +% Rational numbers +\DeclareNumberSetCommand{\RationalNumbers}{Q} + +% Real Numbers +\DeclareNumberSetCommand{\RealNumbers}{R} + +% Complex Numbers +\DeclareNumberSetCommand{\ComplexNumbers}{C} + +\endinput
\ No newline at end of file |