blob: a2b4f2c4e2db305d2ec383571693dbed14429a75 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
\ProvidesExplPackage{numbersets}{2024-10-13}{v0.1.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 }
{
\expandafter\NewDocumentCommand\cs:w#1\cs_end:
{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
|