math-dld.mklx /size: 10 Kb    last modification: 2024-01-16 10:22
1%D \module
2%D   [       file=math-dld,
3%D        version=2022.07.29,
4%D          title=\CONTEXT\ Math Macros,
5%D       subtitle=delimiteds,
6%D         author=Hans Hagen,
7%D           date=\currentdate,
8%D      copyright={PRAGMA ADE \& \CONTEXT\ Development Team}]
9%C
10%C This module is part of the \CONTEXT\ macro||package and is
11%C therefore copyrighted by \PRAGMA. See mreadme.pdf for
12%C details.
13
14\writestatus{loading}{ConTeXt Math Macros / Delimited}
15
16\unprotect
17
18%D This is a variant on radicals but in the end it was better to just define a new
19%D environment for this. This is because we don't have the rule and we want a
20%D different control over the spacing. We also don't want the degree.
21
22% Todo: also add the mp plugin here but that more fun stuff for later (when we pick
23% up school math).
24
25\installcorenamespace{mathdelimited}
26\installcorenamespace{mathdelimitedalternative}
27
28\installcommandhandler \??mathdelimited {mathdelimited} \??mathdelimited
29
30\setupmathdelimited
31  [\c!define=\v!yes,
32   \c!alternative=\v!normal,
33   \c!mpoffset=.25\exheight,
34   \c!topoffset=\zeropoint,
35   \c!bottomoffset=\zeropoint,
36   \c!height=\zeropoint,
37   \c!depth=\zeropoint,
38   \c!strut=\v!height,
39   \c!source=\zerocount,
40   \c!size=\zerocount,
41   \c!left=\zerocount,
42   \c!right=\zerocount,
43   \c!leftmargin=\zeropoint,
44   \c!rightmargin=\zeropoint]
45
46\appendtoks
47    \ifcstok{\mathdelimitedparameter\c!define}\v!yes
48      \frozen\protected\instance\edefcsname\currentmathdelimited\endcsname{\math_delimited_handle{\currentmathdelimited}}
49    \fi
50\to \everydefinemathdelimited
51
52\mutable\lettonothing\currentmathdelimited
53
54\tolerant\protected\def\math_delimited_handle#tag#*[#S#settings]#:#body%
55  {\begingroup
56   \cdef\currentmathdelimited{#tag}%
57   \setupcurrentmathdelimited[#settings]%
58   \math_delimited_alternative{%
59     \begincsname\??mathwhateverstrut\mathdelimitedparameter\c!strut\endcsname
60     \scratchdimen\mathdelimitedparameter\c!leftmargin \relax\ifzeropt\scratchdimen\else\kern\scratchdimen\fi
61     #body%
62     \scratchdimen\mathdelimitedparameter\c!rightmargin\relax\ifzeropt\scratchdimen\else\kern\scratchdimen\fi
63   }%
64   \endgroup}
65
66\def\math_delimited_alternative{\csname\??mathdelimitedalternative\mathdelimitedparameter\c!alternative\endcsname}
67
68\protected\def\math_delimited_common
69  {\Udelimited
70     \s!height\dimexpr\mathdelimitedparameter\c!height+\mathdelimitedparameter\c!topoffset\relax
71     \s!depth \dimexpr\mathdelimitedparameter\c!depth+\mathdelimitedparameter\c!bottomoffset\relax
72     \s!source\numexpr\namedboxanchor{\mathdelimitedparameter\c!source}\relax
73     \s!style \normalmathstyle
74     \s!size  \numexpr\mathdelimitedparameter\c!size\relax
75     \zerocount \mathdelimitedparameter\c!left
76     \zerocount \mathdelimitedparameter\c!right
77  \relax}
78
79\defcsname\??mathdelimitedalternative\v!default\endcsname %  #body%
80  {\math_delimited_common} % {#body}}
81
82\defcsname\??mathdelimitedalternative\v!normal\endcsname#body%
83  {\edef\p_color{\mathdelimitedparameter\c!color}%
84   \ifempty\p_color
85     \math_delimited_common{#body}% {} really needed as \rootdelimited expands first
86   \else
87     \pushcolor[\p_color]%
88     \math_delimited_common
89     {\popcolor#body}%
90   \fi}
91
92%integerdef\delimitedrightgraveuc    \privatecharactercode{delimited right grave}
93\integerdef\delimitedrightddotuc     \privatecharactercode{delimited right ddot}
94\integerdef\delimitedrightbaruc      \privatecharactercode{delimited right bar}
95%integerdef\delimitedrightacuteuc    \privatecharactercode{delimited right acute}
96\integerdef\delimitedrighthatuc      \privatecharactercode{delimited right hat}
97\integerdef\delimitedrightcheckuc    \privatecharactercode{delimited right check}
98\integerdef\delimitedrightbreveuc    \privatecharactercode{delimited right breve}
99\integerdef\delimitedrightdotuc      \privatecharactercode{delimited right dot}
100\integerdef\delimitedrightringuc     \privatecharactercode{delimited right ring}
101\integerdef\delimitedrighttildeuc    \privatecharactercode{delimited right tilde}
102\integerdef\delimitedrightdddotuc    \privatecharactercode{delimited right dddot}
103
104% \integerdef\delimitedrighthatuc   \privatecharactercode{delimited right hat}
105% \integerdef\delimitedrighttildeuc \privatecharactercode{delimited right tilde}
106% \integerdef\delimitedrightcheckuc \privatecharactercode{delimited right check}
107
108% todo: some more .. are the offsets okay?
109% breve and acute does not make sense
110
111\definemathdelimited
112  [marked]
113  [\c!define=\v!no,
114   \c!topoffset=.2\exheight]
115
116\definemathdelimited
117  [ddotmarked]
118  [marked]
119  [\c!define=\v!yes,
120   \c!right=\delimitedrightddotuc]
121
122\definemathdelimited
123  [barmarked]
124  [marked]
125  [\c!define=\v!yes,
126   \c!right=\delimitedrightbaruc]
127
128\definemathdelimited
129  [hatmarked]
130  [marked]
131  [\c!define=\v!yes,
132   \c!right=\delimitedrighthatuc]
133
134\definemathdelimited
135  [checkmarked]
136  [marked]
137  [\c!define=\v!yes,
138   \c!right=\delimitedrightcheckuc]
139
140\definemathdelimited
141  [brevemarked]
142  [marked]
143  [\c!define=\v!yes,
144   \c!right=\delimitedrightbreveuc]
145
146\definemathdelimited
147  [dotmarked]
148  [marked]
149  [\c!right=\delimitedrightdotuc]
150
151\definemathdelimited
152  [ringmarked]
153  [marked]
154  [\c!define=\v!yes,
155   \c!right=\delimitedrightringuc]
156
157\definemathdelimited
158  [tildemarked]
159  [marked]
160  [\c!define=\v!yes,
161   \c!right=\delimitedrighttildeuc]
162
163\definemathdelimited
164  [dddotmarked]
165  [marked]
166  [\c!define=\v!yes,
167   \c!right=\delimitedrightdddotuc]
168
169% The following ones are
170% not really belonging here,
171% but convenient
172
173% If there are more needed we can have:
174%
175% \c!ight=\privatecharactercode{delimited right dagger \mathdelimitedparameter\c!size}
176%
177% or even:
178%
179% \def\privatedelimitedcode#1{\privatecharactercode{delimited #1 \mathdelimitedparameter\c!size}}
180%
181% \c!right=\privatedelimitedcode{right dagger}
182%
183% with some glyph installer btu let's for now save some bytes in the format.
184
185\integerdef\delimitedrightdaggeruc        \privatecharactercode{delimited right dagger}
186\integerdef\delimitedrightddaggeruc       \privatecharactercode{delimited right ddagger}
187\integerdef\delimitedrightastuc           \privatecharactercode{delimited right ast}
188\integerdef\delimitedrightstaruc          \privatecharactercode{delimited right star}
189
190\integerdef\delimitedscriptrightdaggeruc  \privatecharactercode{delimited right dagger 1}
191\integerdef\delimitedscriptrightddaggeruc \privatecharactercode{delimited right ddagger 1}
192\integerdef\delimitedscriptrightastuc     \privatecharactercode{delimited right ast 1}
193\integerdef\delimitedscriptrightstaruc    \privatecharactercode{delimited right star 1}
194
195\definemathdelimited
196  [daggermarked]
197  [marked]
198  [\c!define=\v!yes,
199   \c!size=1,
200   \c!right=\delimitedscriptrightdaggeruc]
201  %\c!right=\privatedelimitedcode{right dagger}]
202
203\definemathdelimited
204  [ddaggermarked]
205  [marked]
206  [\c!define=\v!yes,
207   \c!size=1,
208   \c!right=\delimitedscriptrightddaggeruc]
209  %\c!right=\privatedelimitedcode{right ddagger}]
210
211\definemathdelimited
212  [astmarked]
213  [marked]
214  [\c!define=\v!yes,
215   \c!size=1,
216   \c!right=\delimitedscriptrightastuc]
217  %\c!right=\privatedelimitedcode{right ast}]
218
219\definemathdelimited
220  [starmarked]
221  [marked]
222  [\c!define=\v!yes,
223   \c!size=1,
224   \c!right=\delimitedscriptrightstaruc]
225  %\c!right=\privatedelimitedcode{right star}]
226
227% More contextual
228
229\definemathdelimited
230  [fourier]
231  [\c!topoffset=.2\exheight,
232   \c!right=\delimitedrighthatuc]
233
234\definemathdelimited
235  [inversefourier]
236  [fourier]
237  [\c!right=\delimitedrightcheckuc]
238
239\definemathdelimited
240  [fuzzyfourier]
241  [fourier]
242  [\c!right=\delimitedrighttildeuc]
243
244% \definemathdelimited
245%   [bannuity]
246%   [%topoffset=.2\exheight,
247%    \c!strut=no,
248%    \c!rightmargin=.05\emwidth,
249%    \c!right=\delimitedrightanutityuc]
250
251% $ \autofences \fourier{(z+\frac12)} + \courier{(z+\frac12)} + \xourier{(z+\frac12)} $
252
253\integerdef\delimitedrightprimeuc   \privatecharactercode{delimited right prime}
254\integerdef\delimitedrightdprimeuc  \privatecharactercode{delimited right dprime}
255\integerdef\delimitedrighttprimeuc  \privatecharactercode{delimited right tprime}
256\integerdef\delimitedrightqprimeuc  \privatecharactercode{delimited right qprime}
257\integerdef\delimitedrightrprimeuc  \privatecharactercode{delimited right rprime}
258\integerdef\delimitedrightrdprimeuc \privatecharactercode{delimited right rdprime}
259\integerdef\delimitedrightrtprimeuc \privatecharactercode{delimited right rtprime}
260
261%definemathdelimited [primed]                       [\c!right="2032,\c!size=1,\c!topoffset=.2\exheight]
262%definemathdelimited [doubleprimed]        [primed] [\c!right="2033]
263%definemathdelimited [tripleprimed]        [primed] [\c!right="2034]
264%definemathdelimited [quadrupleprimed]     [primed] [\c!right="2057]
265%definemathdelimited [reverseprimed]       [primed] [\c!right="2035]
266%definemathdelimited [doublereverseprimed] [primed] [\c!right="2036]
267%definemathdelimited [triplereverseprimed] [primed] [\c!right="2037]
268
269\definemathdelimited [primed]                       [\c!right=\delimitedrightprimeuc,\c!topoffset=.2\exheight,\c!size=1]
270\definemathdelimited [doubleprimed]        [primed] [\c!right=\delimitedrightdprimeuc]
271\definemathdelimited [tripleprimed]        [primed] [\c!right=\delimitedrighttprimeuc]
272\definemathdelimited [quadrupleprimed]     [primed] [\c!right=\delimitedrightqprimeuc]
273\definemathdelimited [reverseprimed]       [primed] [\c!right=\delimitedrightrprimeuc]
274\definemathdelimited [doublereverseprimed] [primed] [\c!right=\delimitedrightrdprimeuc]
275\definemathdelimited [triplereverseprimed] [primed] [\c!right=\delimitedrightrtprimeuc]
276
277%
278
279\integerdef\delimitedleftuppercorner \privatecharactercode{delimited left upper corner}
280\integerdef\delimitedrightuppercorner\privatecharactercode{delimited right upper corner}
281\integerdef\delimitedleftlowercorner \privatecharactercode{delimited left lower corner}
282\integerdef\delimitedrightlowercorner\privatecharactercode{delimited right lower corner}
283
284\definemathdelimited
285  [leftuppermarked]
286  [marked]
287  [\c!left=\delimitedleftuppercorner]
288
289\definemathdelimited
290  [rightuppermarked]
291  [marked]
292  [\c!right=\delimitedrightuppercorner]
293
294\definemathdelimited
295  [uppermarked]
296  [marked]
297  [\c!left=\delimitedleftuppercorner,
298   \c!right=\delimitedrightuppercorner]
299
300\definemathdelimited
301  [leftlowermarked]
302  [marked]
303  [\c!left=\delimitedleftlowercorner]
304
305\definemathdelimited
306  [rightlowermarked]
307  [marked]
308  [\c!right=\delimitedrightlowercorner]
309
310\definemathdelimited
311  [lowermarked]
312  [marked]
313  [\c!left=\delimitedleftlowercorner,
314   \c!right=\delimitedrightlowercorner]
315
316\protect \endinput
317