summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/numbersets/numbersets.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/numbersets/numbersets.sty')
-rw-r--r--macros/latex/contrib/numbersets/numbersets.sty120
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