Comibined characters in Math
Posted on October 15, 2017
There is a new feature in ConTeXt that replaces some ascii math (I am using this term informally. The symbols do not match the asciimath symbol list). It is enabled using1
\setupmathematics[collapsing=3]
and replaces a combination of characters by a glyph. For example,
\setupmathematics[collapsing=3]
A function $f$ is an increasing function
\startformula
x <= y ===> f(x) <= f(y)
\stopformula
gives
Notice that <=
got translated to ≤
(\le
) and ===>
got translated to
⟹
(\Longrightarrow
).
ConTeXt version 2017.08.15
or newer is needed for these mappings to work.
Here is the complete list of comining characters that are available:
shortcut | Mapped to |
---|---|
'' |
\doubleprime |
''' |
\tripleprime |
'''' |
\quadprime |
:: |
\squaredots |
:= |
\colonequals |
=: |
\equalscolon |
::= |
\coloncolonequals |
-: |
\minuscolon |
/< |
\nless |
/> |
\ngtr |
<= |
\le |
/<= |
\nleq |
>= |
\ge |
/>= |
\ngeq |
/= |
\neq |
=> |
\eqgtr |
=< |
\eqless |
<=> |
\lesseqqgtr |
>=< |
\gtreqqless |
` | |
<< |
\ll |
‘»` | \gg |
<<< |
\lll |
>>> |
\ggg |
== |
\equiv |
/== |
\nequiv |
=== |
\eqequiv (a virtual character for mapping purposes) |
-> |
\rightarrow |
<- |
\leftarrow |
<-> |
\leftrightarrow |
--> |
\longleftarrow |
<-- |
\longrightarrow |
<--> |
\longleftrightarrow |
==> |
\Rightarrow |
<== |
\Leftarrow |
<==> |
\Leftrightarrow |
===> |
\Longrightarrow |
<=== |
\Longleftarrow |
<===> |
\Longleftrightarrow |
|| |
\doubleverticalbar |
||| |
\tripleverticalbar |
If the font does not contain the appropriate glyph, then the above
will silently fail (e.g., Latin Modern Math does not have ::=
). If something
goes wrong, partial debug information is available using:
\enabletrackers[math.collapsing]
This shows the following tracking information on the console (and also writes it to the log file)
mathematics > collapsing > enabling math collapsing
mathematics > collapsing > creating ligature ″ (U+02033) from specials
mathematics > collapsing > creating ligature ‴ (U+02034) from specials
mathematics > collapsing > creating ligature ⁗ (U+02057) from specials
mathematics > collapsing > creating ligature ∷ (U+02237) from mathlist
mathematics > collapsing > creating ligature ≔ (U+02254) from mathlist
mathematics > collapsing > creating ligature ≕ (U+02255) from mathlist
mathematics > collapsing > creating ligature ⩴ (U+02A74) from specials
...
Notice that there are two mechanisms for collapsing mathlist
and specials
(I don’t quite understand the difference except that the specials
mechanism
is old and related for some font stuff while the mathlist
mechanism is new).
The relevant information is available in char-def.lua
. For example, for
::=
(which is a special
), the entry in char-def.lua
is
[0x2A74]={
category="sm",
description="DOUBLE COLON EQUAL",
direction="on",
linebreak="al",
mathclass="relation",
mathname="coloncolonequals",
specials={ "compat", 0x3A, 0x3A, 0x3D },
unicodeslot=0x2A74,
},
On the other hand, for ::
(which is a mathlist
), the entry in
char-def.lua
is:
[0x2237]={
adobename="proportion",
category="sm",
cjkwd="a",
description="PROPORTION",
direction="on",
linebreak="ai",
mathclass="relation",
mathname="squaredots",
mathlist={ 0x3A, 0x3A },
unicodeslot=0x2237,
},
To add additional such shortcuts, simply add the mathlist = { ... }
line in char-def.lua
and regenerate the format file.
-
In principle, there are multiple types of collapsing. Using
collapsing=1
usesspecials
for collapsing, usingcollapsing=2
usesspecials + mathlist
(i.e., specials get preference over mathlist) and usingcollapsing=3
usesmathlist + specials
. Here specials and mathlist refer to the internal implementation of the feature inchar-def.lua
. ↩︎
This entry was posted in Mathematics and tagged asciimath.