math-dld.mklx /size: 10 Kb    last modification: 2025-02-21 11:03
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!color=,
44   \c!textcolor=\mathdelimitedparameter\c!color,
45   \c!symbolcolor=\mathdelimitedparameter\c!color,
46   \c!leftmargin=\zeropoint,
47   \c!rightmargin=\zeropoint]
48
49\appendtoks
50    \ifcstok{\mathdelimitedparameter\c!define}\v!yes
51      \frozen\protected\instance\edefcsname\currentmathdelimited\endcsname{\math_delimited_handle{\currentmathdelimited}}
52    \fi
53\to \everydefinemathdelimited
54
55\mutable\lettonothing\currentmathdelimited
56
57\tolerant\protected\def\math_delimited_handle#tag#*[#S#settings]#:#body%
58  {\begingroup
59   \cdef\currentmathdelimited{#tag}%
60   \setupcurrentmathdelimited[#settings]%
61   \math_delimited_alternative{%
62     \begincsname\??mathwhateverstrut\mathdelimitedparameter\c!strut\endcsname
63     \scratchdimen{\mathdelimitedparameter\c!leftmargin}%
64     \ifzeropt\scratchdimen\else\kern\scratchdimen\fi
65     \begingroup
66     \usemathdelimitedcolorparameter\c!textcolor
67     #body%
68     \endgroup
69     \scratchdimen{\mathdelimitedparameter\c!rightmargin}%
70     \ifzeropt\scratchdimen\else\kern\scratchdimen\fi
71   }%
72   \endgroup}
73
74\def\math_delimited_alternative{\csname\??mathdelimitedalternative\mathdelimitedparameter\c!alternative\endcsname}
75
76\protected\def\math_delimited_common
77  {\Udelimited
78     \usedcolorparameterattributes{\mathdelimitedparameter\c!symbolcolor}%
79     \s!height{\mathdelimitedparameter\c!height+\mathdelimitedparameter\c!topoffset}%
80     \s!depth {\mathdelimitedparameter\c!depth+\mathdelimitedparameter\c!bottomoffset}%
81     \s!source{\namedboxanchor{\mathdelimitedparameter\c!source}}%
82     \s!style \normalmathstyle
83     \s!size  {\mathdelimitedparameter\c!size}%
84     \zerocount \mathdelimitedparameter\c!left
85     \zerocount \mathdelimitedparameter\c!right
86  \relax}
87
88\defcsname\??mathdelimitedalternative\v!default\endcsname %  #body%
89  {\math_delimited_common} % {#body}}
90
91\defcsname\??mathdelimitedalternative\v!normal\endcsname#body%
92  {\edef\p_mathmeaning{\mathdelimitedparameter\c!mathmeaning}%
93   \ifempty\p_mathmeaning
94     \let\p_mathmeaning\currentmathdelimited
95   \fi
96   \dostarttagged\t!mdelimitedstack\p_mathmeaning
97   \math_delimited_common{#body}%
98   \dostoptagged}
99
100%integerdef\delimitedrightgraveuc    \privatecharactercode{delimited right grave}
101\integerdef\delimitedrightddotuc     \privatecharactercode{delimited right ddot}
102\integerdef\delimitedrightbaruc      \privatecharactercode{delimited right bar}
103%integerdef\delimitedrightacuteuc    \privatecharactercode{delimited right acute}
104\integerdef\delimitedrighthatuc      \privatecharactercode{delimited right hat}
105\integerdef\delimitedrightcheckuc    \privatecharactercode{delimited right check}
106\integerdef\delimitedrightbreveuc    \privatecharactercode{delimited right breve}
107\integerdef\delimitedrightdotuc      \privatecharactercode{delimited right dot}
108\integerdef\delimitedrightringuc     \privatecharactercode{delimited right ring}
109\integerdef\delimitedrighttildeuc    \privatecharactercode{delimited right tilde}
110\integerdef\delimitedrightdddotuc    \privatecharactercode{delimited right dddot}
111
112% \integerdef\delimitedrighthatuc   \privatecharactercode{delimited right hat}
113% \integerdef\delimitedrighttildeuc \privatecharactercode{delimited right tilde}
114% \integerdef\delimitedrightcheckuc \privatecharactercode{delimited right check}
115
116% todo: some more .. are the offsets okay?
117% breve and acute does not make sense
118
119\definemathdelimited
120  [marked]
121  [\c!define=\v!no,
122   \c!topoffset=.2\exheight]
123
124\definemathdelimited
125  [ddotmarked]
126  [marked]
127  [\c!define=\v!yes,
128   \c!right=\delimitedrightddotuc]
129
130\definemathdelimited
131  [barmarked]
132  [marked]
133  [\c!define=\v!yes,
134   \c!right=\delimitedrightbaruc]
135
136\definemathdelimited
137  [hatmarked]
138  [marked]
139  [\c!define=\v!yes,
140   \c!right=\delimitedrighthatuc]
141
142\definemathdelimited
143  [checkmarked]
144  [marked]
145  [\c!define=\v!yes,
146   \c!right=\delimitedrightcheckuc]
147
148\definemathdelimited
149  [brevemarked]
150  [marked]
151  [\c!define=\v!yes,
152   \c!right=\delimitedrightbreveuc]
153
154\definemathdelimited
155  [dotmarked]
156  [marked]
157  [\c!right=\delimitedrightdotuc]
158
159\definemathdelimited
160  [ringmarked]
161  [marked]
162  [\c!define=\v!yes,
163   \c!right=\delimitedrightringuc]
164
165\definemathdelimited
166  [tildemarked]
167  [marked]
168  [\c!define=\v!yes,
169   \c!right=\delimitedrighttildeuc]
170
171\definemathdelimited
172  [dddotmarked]
173  [marked]
174  [\c!define=\v!yes,
175   \c!right=\delimitedrightdddotuc]
176
177% The following ones are
178% not really belonging here,
179% but convenient
180
181% If there are more needed we can have:
182%
183% \c!ight=\privatecharactercode{delimited right dagger \mathdelimitedparameter\c!size}
184%
185% or even:
186%
187% \def\privatedelimitedcode#1{\privatecharactercode{delimited #1 \mathdelimitedparameter\c!size}}
188%
189% \c!right=\privatedelimitedcode{right dagger}
190%
191% with some glyph installer btu let's for now save some bytes in the format.
192
193\integerdef\delimitedrightdaggeruc        \privatecharactercode{delimited right dagger}
194\integerdef\delimitedrightddaggeruc       \privatecharactercode{delimited right ddagger}
195\integerdef\delimitedrightastuc           \privatecharactercode{delimited right ast}
196\integerdef\delimitedrightstaruc          \privatecharactercode{delimited right star}
197
198\integerdef\delimitedscriptrightdaggeruc  \privatecharactercode{delimited right dagger 1}
199\integerdef\delimitedscriptrightddaggeruc \privatecharactercode{delimited right ddagger 1}
200\integerdef\delimitedscriptrightastuc     \privatecharactercode{delimited right ast 1}
201\integerdef\delimitedscriptrightstaruc    \privatecharactercode{delimited right star 1}
202
203\definemathdelimited
204  [daggermarked]
205  [marked]
206  [\c!define=\v!yes,
207   \c!size=1,
208   \c!right=\delimitedscriptrightdaggeruc]
209  %\c!right=\privatedelimitedcode{right dagger}]
210
211\definemathdelimited
212  [ddaggermarked]
213  [marked]
214  [\c!define=\v!yes,
215   \c!size=1,
216   \c!right=\delimitedscriptrightddaggeruc]
217  %\c!right=\privatedelimitedcode{right ddagger}]
218
219\definemathdelimited
220  [astmarked]
221  [marked]
222  [\c!define=\v!yes,
223   \c!size=1,
224   \c!right=\delimitedscriptrightastuc]
225  %\c!right=\privatedelimitedcode{right ast}]
226
227\definemathdelimited
228  [starmarked]
229  [marked]
230  [\c!define=\v!yes,
231   \c!size=1,
232   \c!right=\delimitedscriptrightstaruc]
233  %\c!right=\privatedelimitedcode{right star}]
234
235% More contextual
236
237\definemathdelimited
238  [fourier]
239  [\c!topoffset=.2\exheight,
240   \c!right=\delimitedrighthatuc]
241
242\definemathdelimited
243  [inversefourier]
244  [fourier]
245  [\c!right=\delimitedrightcheckuc]
246
247\definemathdelimited
248  [fuzzyfourier]
249  [fourier]
250  [\c!right=\delimitedrighttildeuc]
251
252% \definemathdelimited
253%   [bannuity]
254%   [%topoffset=.2\exheight,
255%    \c!strut=no,
256%    \c!rightmargin=.05\emwidth,
257%    \c!right=\delimitedrightanutityuc]
258
259% $ \autofences \fourier{(z+\frac12)} + \courier{(z+\frac12)} + \xourier{(z+\frac12)} $
260
261\integerdef\delimitedrightprimeuc   \privatecharactercode{delimited right prime}
262\integerdef\delimitedrightdprimeuc  \privatecharactercode{delimited right dprime}
263\integerdef\delimitedrighttprimeuc  \privatecharactercode{delimited right tprime}
264\integerdef\delimitedrightqprimeuc  \privatecharactercode{delimited right qprime}
265\integerdef\delimitedrightrprimeuc  \privatecharactercode{delimited right rprime}
266\integerdef\delimitedrightrdprimeuc \privatecharactercode{delimited right rdprime}
267\integerdef\delimitedrightrtprimeuc \privatecharactercode{delimited right rtprime}
268
269%definemathdelimited [primed]                       [\c!right="2032,\c!size=1,\c!topoffset=.2\exheight]
270%definemathdelimited [doubleprimed]        [primed] [\c!right="2033]
271%definemathdelimited [tripleprimed]        [primed] [\c!right="2034]
272%definemathdelimited [quadrupleprimed]     [primed] [\c!right="2057]
273%definemathdelimited [reverseprimed]       [primed] [\c!right="2035]
274%definemathdelimited [doublereverseprimed] [primed] [\c!right="2036]
275%definemathdelimited [triplereverseprimed] [primed] [\c!right="2037]
276
277\definemathdelimited [primed]                       [\c!right=\delimitedrightprimeuc,\c!topoffset=.2\exheight,\c!size=1]
278\definemathdelimited [doubleprimed]        [primed] [\c!right=\delimitedrightdprimeuc]
279\definemathdelimited [tripleprimed]        [primed] [\c!right=\delimitedrighttprimeuc]
280\definemathdelimited [quadrupleprimed]     [primed] [\c!right=\delimitedrightqprimeuc]
281\definemathdelimited [reverseprimed]       [primed] [\c!right=\delimitedrightrprimeuc]
282\definemathdelimited [doublereverseprimed] [primed] [\c!right=\delimitedrightrdprimeuc]
283\definemathdelimited [triplereverseprimed] [primed] [\c!right=\delimitedrightrtprimeuc]
284
285%
286
287\integerdef\delimitedleftuppercorner \privatecharactercode{delimited left upper corner}
288\integerdef\delimitedrightuppercorner\privatecharactercode{delimited right upper corner}
289\integerdef\delimitedleftlowercorner \privatecharactercode{delimited left lower corner}
290\integerdef\delimitedrightlowercorner\privatecharactercode{delimited right lower corner}
291
292\definemathdelimited
293  [leftuppermarked]
294  [marked]
295  [\c!left=\delimitedleftuppercorner]
296
297\definemathdelimited
298  [rightuppermarked]
299  [marked]
300  [\c!right=\delimitedrightuppercorner]
301
302\definemathdelimited
303  [uppermarked]
304  [marked]
305  [\c!left=\delimitedleftuppercorner,
306   \c!right=\delimitedrightuppercorner]
307
308\definemathdelimited
309  [leftlowermarked]
310  [marked]
311  [\c!left=\delimitedleftlowercorner]
312
313\definemathdelimited
314  [rightlowermarked]
315  [marked]
316  [\c!right=\delimitedrightlowercorner]
317
318\definemathdelimited
319  [lowermarked]
320  [marked]
321  [\c!left=\delimitedleftlowercorner,
322   \c!right=\delimitedrightlowercorner]
323
324\protect \endinput
325