summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/numbersets/numbersets.sty
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