summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/unicode-math
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/unicode-math
Initial commit
Diffstat (limited to 'macros/latex/contrib/unicode-math')
-rw-r--r--macros/latex/contrib/unicode-math/CHANGES.md348
-rw-r--r--macros/latex/contrib/unicode-math/LICENSE416
-rw-r--r--macros/latex/contrib/unicode-math/MANIFEST.md258
-rw-r--r--macros/latex/contrib/unicode-math/README.md116
-rw-r--r--macros/latex/contrib/unicode-math/RELEASE_CHECKLIST.md11
-rw-r--r--macros/latex/contrib/unicode-math/um-code-alphabets.dtx934
-rw-r--r--macros/latex/contrib/unicode-math/um-code-amsmath.dtx224
-rw-r--r--macros/latex/contrib/unicode-math/um-code-api.dtx43
-rw-r--r--macros/latex/contrib/unicode-math/um-code-compat.dtx251
-rw-r--r--macros/latex/contrib/unicode-math/um-code-epilogue.dtx420
-rw-r--r--macros/latex/contrib/unicode-math/um-code-fontopt.dtx326
-rw-r--r--macros/latex/contrib/unicode-math/um-code-fontparam.dtx345
-rw-r--r--macros/latex/contrib/unicode-math/um-code-main.dtx700
-rw-r--r--macros/latex/contrib/unicode-math/um-code-mathmap.dtx595
-rw-r--r--macros/latex/contrib/unicode-math/um-code-mathtext.dtx246
-rw-r--r--macros/latex/contrib/unicode-math/um-code-msg.dtx156
-rw-r--r--macros/latex/contrib/unicode-math/um-code-opening.dtx395
-rw-r--r--macros/latex/contrib/unicode-math/um-code-pkgopt.dtx330
-rw-r--r--macros/latex/contrib/unicode-math/um-code-primes.dtx385
-rw-r--r--macros/latex/contrib/unicode-math/um-code-setchar.dtx298
-rw-r--r--macros/latex/contrib/unicode-math/um-code-sscript.dtx238
-rw-r--r--macros/latex/contrib/unicode-math/um-code-sym-commands.dtx216
-rw-r--r--macros/latex/contrib/unicode-math/um-code-ui.dtx101
-rw-r--r--macros/latex/contrib/unicode-math/um-code-usv.dtx592
-rw-r--r--macros/latex/contrib/unicode-math/um-code-variables.dtx257
-rw-r--r--macros/latex/contrib/unicode-math/um-doc-legacyfontdimen.tex76
-rw-r--r--macros/latex/contrib/unicode-math/um-doc-main.tex1234
-rw-r--r--macros/latex/contrib/unicode-math/um-doc-mathfontdimen.tex151
-rw-r--r--macros/latex/contrib/unicode-math/um-doc-nfsssummary.tex87
-rw-r--r--macros/latex/contrib/unicode-math/um-doc-stixextract.tex38
-rw-r--r--macros/latex/contrib/unicode-math/um-doc-style.tex131
-rw-r--r--macros/latex/contrib/unicode-math/unicode-math-code.ltx35
-rw-r--r--macros/latex/contrib/unicode-math/unicode-math-code.pdfbin0 -> 332100 bytes
-rw-r--r--macros/latex/contrib/unicode-math/unicode-math-table.tex2467
-rw-r--r--macros/latex/contrib/unicode-math/unicode-math.dtx111
-rw-r--r--macros/latex/contrib/unicode-math/unicode-math.ins64
-rw-r--r--macros/latex/contrib/unicode-math/unicode-math.ltx38
-rw-r--r--macros/latex/contrib/unicode-math/unicode-math.pdfbin0 -> 162882 bytes
-rw-r--r--macros/latex/contrib/unicode-math/unimath-example.ltx69
-rw-r--r--macros/latex/contrib/unicode-math/unimath-example.pdfbin0 -> 22157 bytes
-rw-r--r--macros/latex/contrib/unicode-math/unimath-symbols.ltx469
-rw-r--r--macros/latex/contrib/unicode-math/unimath-symbols.pdfbin0 -> 1203926 bytes
42 files changed, 13171 insertions, 0 deletions
diff --git a/macros/latex/contrib/unicode-math/CHANGES.md b/macros/latex/contrib/unicode-math/CHANGES.md
new file mode 100644
index 0000000000..ffe61e18a8
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/CHANGES.md
@@ -0,0 +1,348 @@
+CHANGE HISTORY
+==============
+
+## v0.8o (2019/03/04)
+
+ * Avoid `'Dimension too large' error` for some (unpredictable) combinations of font
+ choice and the `Scale` option. Problems are still known to occur for very large or
+ very small values of `Scale`.
+ * Documentation is now run through ‘continuous integration’ (viz, *Travis* for the time being)
+ as well as the test suite.
+
+
+## v0.8n (2019/01/26)
+
+ * Add note to readme that the `lm-math` package is required for minimal functionality.
+ * Spacing fixed for maths fonts loaded with the `Scale` fontspec feature (#287).
+ * Commands like `\crampedtextstyle` now longer lead to an infinite loop under XeTeX (#505).
+ * Improvements to the functionality of the test suite. (Although more tests would be nice.)
+ * Test suite is now (successfully) run with `expl3` debug mode enabled.
+
+
+## v0.8m (2018/07/29)
+
+ * Restore behaviour of legacy syntax `x_\mathrm{x}` (i.e., with no braces).
+ While strictly ‘incorrectly’, this usage is widely used.
+ N.B. this syntax is not supported for the `\symXX` commands.
+ * Add `\cuberoot` and `\fourthroot` as proper radicals.
+ * Some additional input subscripts/superscripts.
+ * Some documentation additions (thanks for the contributions).
+ * Deprecation warning: the *internal* `\__um_switchto_XX:` commands will be dropped in
+ a future release in favour of `\__um_switch_to:n {XX}` (or similar). These are internal
+ commands and shouldn't be used by third-parties; please write if you have a use case.
+
+
+## v0.8l (2018/02/02)
+
+ * Issue an error message if `\setmathfont{...}[range=...]` is used first; a `range`
+ declaration inherently implies a subset, so a ‘main’ math font needs to be set up first.
+ * Fix issue when nesting `\mathXX` and `\symZZ` commands. (#356, #435, #438)
+ * Fix another issue when using `mathXX` or `\symXX` inside `\DeclareMathOperator`. (#449)
+ * Document incompatibility with the `mathspec` package. (#436)
+ * Fix bugs for using `range=\partial` and `range=\nabla`. (#441)
+
+
+## v0.8k (2018/01/13)
+
+ * Eliminate warnings `Variant form 'NV' invalid for base form`... (#430).
+ * Fix issue when loading the `cal` range (#431).
+ * Fix issue with `\sqrt[n]{x}` with `amsmath` (#432).
+ * Error when loading on (really) old versions of XeTeX/LuaTeX removed.
+ * More UM fonts listed in the README (#425).
+
+
+## v0.8j (2018/01/07)
+
+ - NEW
+
+ * Numbers and latin letters in the fullwidth Unicode range are now supported
+ as aliases to their ASCII counterparts (#337).
+ * New commands `\(New|Renew)NegationCommand \foo` for defining custom negations
+ accessed via `\not\foo`.
+
+ - SYMBOLS
+
+ * `\typecolon` is now `\mathrel` instead of `\mathbin` (#360).
+ * New symbol `\mathhyphen` which acts like a ‘letter’ (#313).
+ * `\nabla` and `\partial` have corrected documentation (#257).
+ * The following legacy commands are listed as ‘unsupported’ and will result
+ in sensible error messages rather than the old behaviour of meaningless
+ output: `\arrowvert`, `\Arrowvert`, `\bracevert`. (#411).
+
+ - BUGS
+
+ * LuaTeX bug with shifted `\underbrace` when it contains accented symbols worked around (#391).
+ * When using the `range` feature, users commonly found they needed to call
+ `\setmathfont` a final time with the original font to ensure correct
+ formatting and correct selection of symbol alphabets. I hope the issues
+ that required this have now been corrected (#331, #387).
+ * If `\setmathfont` is called a second time in a document, it tries harder
+ to more properly reset the maths font setup for the new font (#224).
+ * Properly hard-coded the `\delcode` of the period to ensure `\left`/`\right`
+ behave correctly in all circumstances (#344, #351, #420).
+ * Correct `\mathrm` (etc.) situation when no fonts loaded explicitly by the user (#330).
+ * Various bug fixes to `\not` (#126, #343, #363)
+ * `\std@minus` & `\std@equal` now properly corrected (#332).
+ * Fix problem with infinite loop with `\cdots` when `amsmath` loaded after `unicode-math` (#227).
+ * If `\setmath(rm|sf|tt)` is called *before* loading `unicode-math`, the setting
+ is now remembered (#407).
+
+ - INTERNALS
+
+ * A number of improvements to efficiency when loading subsequent math fonts
+ using the `range` feature.
+ * No longer loads the `ucharcat` package.
+ * Test suite re-implemented for better portability and use with Travis CI.
+ See <https://travis-ci.org/wspr/unicode-math> for the up-to-date status
+ of whether the test suite is passing.
+
+
+
+## v0.8i (2017/11/18)
+
+ * Many internal changes to support future work.
+ * Improved documentation describing the `\mathXX` and `\symXX` commands.
+ * Documentation is now split into `unicode-math.pdf` (for the user)
+ and `unicode-math-code.pdf` (for the typeset source code).
+
+
+## v0.8h (2017/10/09)
+
+ * Some bugs crept in in the last update due to some code rearrangement:
+ * package version wasn't set;
+ * some code was being executed at the wrong time;
+ * `\sqrt[]{}` in LuaLaTeX gave incorrect output.
+ * The layout of the code is now structured far more sensibly.
+ * Remove (long deprecated) `\resetmathfont`; for years it has been a synonym for `\setmathfont`.
+
+
+## v0.8g (2017/10/02)
+
+ * Better use of scriptstyle sizes in LuaTeX (I think a regression).
+ * Fix regression (`\mathbf` etc. not being set automatically) caused by the renaming of a `fontspec` internal command.
+ * Minor documentation improvements.
+ * (Only relevant for me: I've also disabled the test suite almost entirely to begin a re-write for ‘continuous integration’.)
+
+
+## v0.8f (2017/08/02)
+
+ * Emergency fix (thanks Bruno) for another bug revealed by `expl3` update.
+
+
+## v0.8e (2017/07/30)
+
+ * Add `\surd` to access the sqrt symbol.
+ * Fix bug exposed by `expl3` update to booleans.
+ * Add Deja Vu Math TeX Gyre in list of symbols.
+ * Add `\sime` alias for `\simeq` and `\nsimeq` for `\nsime`.
+ (For negations it's helpful when they have consistent naming.)
+
+
+## v0.8d (2017/01/25)
+
+ * `vargreek-shape=TeX` and `vargreek-shape=unicode` package options dropped; for consistency and compatibility, `\phi` and `\epsilon` should and will now behave the same as in `TeX`.
+ * On that note, when using control sequences such as `\mbfitsansvarphi` (and so on), there were a few faulty definitions. The new behaviour is to consistenyl define the `varphi` and `varepsilon` ones as those with the "curly" designs.
+ * Add `\wideoverbar`, `\widebreve`, `\widecheck`.
+ * Add `\mathsection`, `\mathparagraph`.
+ * Remove `\mupvarbeta`, `upold(Kk)oppa`, `\up(Ss)tigma`, `\up(Kk)oppa`, `\up(Ss)ampi` — none of these are maths symbols.
+ * `!` (`\mathexclam`) changed from `\mathpunct` to `\mathclose` for backwards compatibility with TeX.
+
+
+## v0.8c (2015/09/24)
+
+ * Add `\over(left/right)harpoon` as "wide" accents.
+ * Add RTL mathematics operators `\arabicmaj` and `\arabichad`, which correspond to `U+1EEF0` and `U+1EEF1`, resp.
+ * Remove `catchfile` package dependency.
+ * Update some internal names to match expl3 standards.
+
+
+## v0.8b (2015/09/09)
+
+ * Bug fix: Use the "ucharcat" package to simplify some code that caused some headaches with \tl_rescan:nn.
+
+
+## v0.8a (2015/08/06)
+
+ * Fix bug with \vert, \|, \(l/r)vert, etc., displaying with the wrong characters.
+
+ * Improve documentation to properly reflect changes in v0.8 and fix some broken examples.
+
+ * No longer reset catcodes of : and @ during \setmathfont .
+
+ * Fix remapping of alphabets (needed for Minion Math) in cases such as:
+
+ \setmathfont[range=bfit->it]{MinionMath-Bold.otf}
+
+
+## v0.8 (2015/07/29) **Breaking changes in this update!**
+
+ * `\mathrm` (`\mathup`), `\mathit`, `\mathbf`, `\mathsf`, and `\mathtt` revert to their traditional LaTeX meanings; they are set up to match their equivalent text fonts unless specifically set using `\setmathrm` and friends from `fontspec` or the new `\setmathfontface` in `unicode-math`. These commands should be used for *multi*-letter identifiers.
+
+ * New "symbol" commands have been added, `\symrm` (`\symup`), `symit`, ..., to replace the behaviour of the old commands. These should be used for *single*-letter identifiers. See the package documentation for more detail on these and related commands.
+
+ * Package options `mathit=sym`, `mathbf=sym`, etc., reverse the changes above to revert to pre-v0.8 behaviour for `\mathXYZ`. Regardless of package option, `\symXYZ` always maps to symbols and `\mathtextXYZ` is provided for the traditional `\mathXYZ` font switch.
+
+ * New command `\setoperatorfont` to set the font used for commands such as `\sin` and `\cos`. Usage: `\setoperatorfont\mathbf` or any command defined with `\setmathfontface`.
+
+ * Traditional LaTeX `\DeclareMathAlphabet` now works again for legacy font-loading packages.
+
+ * Commands defined to "force" Greek letters with `\upbeta` and `\itbeta`, etc.
+
+ * Assorted bug fixes and minor changes.
+
+
+## v0.7e (2014/06/30)
+
+ * No longer assume fixltx2e has been loaded.
+ * Some ascii math symbols have been renamed with a \math... prefix, such as \mathquestion.
+ * Assume latest luaotfload is being used; no need for a separate unicode-math.lua script.
+ * Assorted typos and minor bugs.
+
+
+## v0.7e (2013/05/04)
+
+ * Track luaotfload updates.
+
+
+## v0.7d (2013/03/16)
+
+ * More expl3 changes missed first time around. (Sorry again.)
+
+
+## v0.7c (2013/02/25)
+
+ * The Latin Modern math font name changed TWICE. Only caught the first one.
+ Sorry for any inconvenience caused.
+
+
+## v0.7b (2013/02/22)
+
+ * Keep in sync with Latin Modern Math font name change.
+ * Keep in sync with expl3 changes.
+
+
+## v0.7a (2012/07/28)
+
+ * Keep in sync with expl3 changes.
+
+
+## v0.7 (2012/05/30): The TeX Live 2012 release.
+
+ * Most changes (and all significant ones) in this release thanks to Khaled
+ Hosny, who is now credited as an author of the package.
+ * Many improvements for XeTeX support to take advantage of the new engine
+ (v0.9998) in TL2012.
+ * As a result, `\resetmathfont` is no longer required.
+ * Improve `\not` to use pre-combined glyphs where possible.
+ * LM Math is loaded by default.
+ * Support bottom accents.
+ * And add `\wideutilde`.
+ * The ‘symbols’ document is somewhat better organised and contains
+ information on whether a symbol is defined in plain TeX or amssymb.
+ * Various other minor fixes and additions:
+ * `\underleftrightarrow` added for fonts that support it.
+ * Don’t overwrite mathtool’s `\overbracket` and `\underbracket`.
+ * Bug in `[range=...]` parsing fixed.
+ * Add `\longdivision`.
+ * Add `\lgroup` and `\rgroup`.
+ * Fix ‘moustache’ delimiters.
+ * `\openbox` renamed to `\mathvisiblespace`, since it is already defined
+ in amsthm as an empty box.
+
+
+## v0.6a (2011/09/19)
+
+ * Always a bug that slips through the cracks! Fixes `\left.` and `\right.`
+ * Add experimental package option `warnings-off=...` which allows warnings
+ to be suppressed on an individual basis.
+
+
+## v0.6 (2011/09/18)
+
+ * Keep in sync with fontspec internals
+ (sorry for the small delay where things were broken)
+ * Keep in sync with expl3 deprecated functions
+ * Math versions (finally) implemented; can now change maths fonts
+ mid-document without reinitialising everything
+ (thanks to Ulrike Fischer and Ulrik Vieth)
+ * Symbols file `unimath-symbols.pdf` now uses maths versions to compare
+ all of the OpenType maths fonts I currently have access to
+ * Over- and under- braces, brackets, and parentheses now work in XeTeX
+ (thanks to Claudio Beccari)
+ * Many internal changes, including a re-write of the `range` feature;
+ it should now be faster and more robust
+ * Tentative programmer's interface for querying the current math style:
+ `\l_um_mathstyle_tl`.
+ * Remove (outdated) interaction with beamer; you must specify
+ `professionalfonts` manually for now
+ * Quieten the console output when loading maths fonts with incomplete maths
+ style coverage
+ * Synonym added: `\lnot` -> `\neg`
+ * Two added Unicode symbols (names tentative): `\blanksymbol` and `\openbox`
+ (thanks to Apostolos Syropoulos)
+ * Fixed literal sub-/super-script input.
+
+
+## v0.5e (2011/07/31)
+
+ * Fix forward compatibility clash with deprecated expl3 functions (sorry)
+ * Command names are now `\protected`; this makes them safe to use in moving
+ arguments and so on
+ * Similarly to the change in v0.5c, the main math font is now loaded in
+ math family zero (equiv. to LaTeX's `operators` math font)
+ * `\mathring` added
+ * Ensure that a math font has been selected in order to prevent problems
+ in minimal documents (this will be unnecessary when the OpenType LM math
+ font is released)
+ * Documentation for which was which of epsilon/varepsilon was backwards!
+ (thank to Rasmus Villemoes for pointing this out)
+ * Spurious `\upUpsilon` removed (the one at U+03A5 is now the correct one)
+ * Typo when defining `\dprime` fixed
+ (thanks to Ulrik Vieth for these last two)
+ * Fix the math class of `\modtwosum`; it is now a large operator
+ (thanks to Michael Ummels)
+ * Move several LuaTeX-related patches to the `lualatex-math` package
+ * Fixed mathtool's `\cramped` in XeLaTeX usage
+
+
+## v0.5d (2011/01/30)
+
+ * Assorted improvements to LuaLaTeX support, including non-growing accents
+ available in LuaTeX v0.65 and later
+ * Improved behaviour with reading and using maths font dimensions
+ * Better compatibility with legacy maths packages and environments
+ (always more worked needed, though)
+ * Fix the default setting for "vargreek-shape"
+
+
+## v0.5c (2010/09/27)
+
+ * Fix a long-standing bug in XeLaTeX in which the "master" math
+ families 2 and 3 weren't being set; hence fraction rules and many other
+ parameters were not being set correctly
+ * Stay in sync with internal fontspec changes
+
+
+## v0.5b (2010/09/19): Tune-up
+
+ * Added missing symbols/synonyms:
+ \diamond \smallint \emptyset \hbar \backepsilon \eth
+ * \overline works for LuaLaTeX
+ * Fix \slash; previously, it overwrote the text definition
+ * \vartriangle now has the correct math class
+
+
+## v0.5a (2010/07/14): TeX Live 2010 release
+
+ * Numerous documentation improvements
+ * Bug fix against stray catcode changes
+ * Add `\mathcal` and `\mathbfcal` as distinct from the Script style;
+ these are only supported by the XITS fonts at present
+ * Small changes to the range of symbols offered (especially note that `\ac`
+ is now `\invlazys` to avoid acronym package clash)
+ * Superscripts are allowed after primes (as they should be)
+ * Numerous LuaLaTeX improvements, including roots and over/under braces.
+
+
+## v0.5 (2010/06/03): Initial CTAN release
+
diff --git a/macros/latex/contrib/unicode-math/LICENSE b/macros/latex/contrib/unicode-math/LICENSE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/LICENSE
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/latex/contrib/unicode-math/MANIFEST.md b/macros/latex/contrib/unicode-math/MANIFEST.md
new file mode 100644
index 0000000000..638be84dab
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/MANIFEST.md
@@ -0,0 +1,258 @@
+# Manifest for unicode-math
+
+This file is a listing of all files considered to be part of this package.
+It is automatically generated with `texlua build.lua manifest`.
+
+
+## Repository manifest
+
+The following groups list the files included in the development repository of the package.
+Files listed with a ‘†’ marker are included in the TDS but not CTAN files, and files listed
+with ‘‡’ are included in both.
+
+### Source files
+
+These are source files for a number of purposes, including the `unpack` process which
+generates the installation files of the package. Additional files included here will also
+be installed for processing such as testing.
+
+ | File | Flag | Description |
+ | --- | --- | --- |
+ | unicode-math.dtx | ‡ | Metadata for the package code, including files and versioning |
+ | um-code-opening.dtx | ‡ | Assorted initialisation tasks, including some low-level function definitions. |
+ | um-code-variables.dtx | ‡ | Declaration of all code-level variables used in the package. |
+ | um-code-api.dtx | ‡ | The (underdeveloped) API to interface with the package internals. |
+ | um-code-ui.dtx | ‡ | The xparse user interface top-level definitions. |
+ | um-code-pkgopt.dtx | ‡ | Package options. |
+ | um-code-msg.dtx | ‡ | Definitions of error, warning, and log messages. |
+ | um-code-usv.dtx | ‡ | Mapping of mathematical unicode slots for alphabets. |
+ | um-code-setchar.dtx | ‡ | General assignment of maths symbols. |
+ | um-code-mathtext.dtx | ‡ | The "math text" commands such as `\mathbf` and co. |
+ | um-code-main.dtx | ‡ | Definition of `\setmainfont`. |
+ | um-code-fontopt.dtx | ‡ | Keyval for `\setmathfont` |
+ | um-code-fontparam.dtx | ‡ | Cross-platform interface for font parameters |
+ | um-code-mathmap.dtx | ‡ | Setup of symbol alphabets. |
+ | um-code-sym-commands.dtx | ‡ | Definition of "math symbol alphabet" commands such as `\symbf` and co. |
+ | um-code-alphabets.dtx | ‡ | Definitions for setting up the "math symbol alphabets". |
+ | um-code-primes.dtx | ‡ | The definitions needed for the input of primes. |
+ | um-code-sscript.dtx | ‡ | Setup for active chars needed to process subscript/superscript input chars. |
+ | um-code-compat.dtx | ‡ | Compatibility with 3rd party packages. |
+ | um-code-amsmath.dtx | ‡ | Compatibility with amsmath. |
+ | um-code-epilogue.dtx | ‡ | Assorted definitions to close up. |
+ | unicode-math.ins | ‡ | Docstrip installer. |
+ | unicode-math-table.tex | ‡ | Source file of the math symbols. |
+
+### Typeset documentation source files
+
+These files are typeset using LaTeX to produce the PDF documentation for the package.
+
+ | File | Flag | Description |
+ | --- | --- | --- |
+ | unicode-math-code.ltx | ‡ | Typeset code. |
+ | unicode-math.ltx | ‡ | User documentation. |
+ | unimath-example.ltx | ‡ | A minimal example file to demonstrate the package. |
+ | unimath-symbols.ltx | ‡ | Listing of Unicode mathematics symbols using a variety of fonts. |
+
+### Documentation files
+
+These files form part of the documentation but are not typeset. Generally they will be
+additional input files for the typeset documentation files listed above.
+
+ 1. um-doc-style.tex ‡
+ 2. um-doc-main.tex ‡
+ 3. um-doc-stixextract.tex ‡
+ 4. um-doc-nfsssummary.tex ‡
+ 5. um-doc-legacyfontdimen.tex ‡
+ 6. um-doc-mathfontdimen.tex ‡
+
+### Text files
+
+Plain text files included as documentation or metadata.
+
+ 1. CHANGES.md ‡
+ 2. MANIFEST.md ‡
+ 3. README.md ‡
+ 4. LICENSE
+
+### Derived files
+
+The files created by ‘unpacking’ the package sources. This typically includes
+`.sty` and `.cls` files created from DocStrip `.dtx` files.
+
+ 1. unicode-math-luatex.sty †
+ 2. unicode-math-xetex.sty †
+ 3. unicode-math.sty †
+
+### Typeset documents
+
+The output files (PDF, essentially) from typesetting the various source, demo,
+etc., package files.
+
+ 1. unicode-math-code.pdf ‡
+ 2. unicode-math.pdf ‡
+ 3. unimath-example.pdf ‡
+ 4. unimath-symbols.pdf ‡
+
+### Checking-specific support files
+
+Support files for checking the test suite.
+
+ 1. umtest-preamble.tex
+
+### Test files
+
+These files form the test suite for the package. The listed `.lvt` files are the individual unit tests, with matching `.tlg` (not shown, for brevity) are the stored output for ensuring changes to the package produce the same output.
+
+ 1. Bbbit.lvt
+ 2. aaa-loading.lvt
+ 3. active-frac.lvt
+ 4. active-sscripts-amsmath.lvt
+ 5. active-sscripts.lvt
+ 6. alph-range-calscr.lvt
+ 7. alph-range-fallback.lvt
+ 8. alph-range-mapping.lvt
+ 9. alph-range-sym-alph.lvt
+10. alph-range-sym-range.lvt
+11. alph-sym.lvt
+12. ascii-catcodes.lvt
+13. boldstyle-french.lvt
+14. boldstyle-iso.lvt
+15. boldstyle-literal.lvt
+16. boldstyle-tex.lvt
+17. boldstyle-upright.lvt
+18. fontname-log.lvt
+19. hyphen.lvt
+20. input-fullwidth.lvt
+21. lmdefault-mathrm-it-bf.lvt
+22. mathit-symit-var.lvt
+23. mathit-symit.lvt
+24. mathsizes.lvt
+25. mathstyle-french.lvt
+26. mathstyle-iso.lvt
+27. mathstyle-literal.lvt
+28. mathstyle-tex.lvt
+29. mathstyle-upright.lvt
+30. nabla.lvt
+31. not.lvt
+32. operatorname.lvt
+33. partial.lvt
+34. range-char-cmd.lvt
+35. range-class.lvt
+36. range-up-num.lvt
+37. setmathsf.lvt
+38. sqrt-amsmath-exec.lvt
+39. sqrt-amsmath-output.lvt
+40. sqrt-exec.lvt
+41. sqrt-output.lvt
+
+
+## TDS manifest
+
+The following groups list the files included in the TeX Directory Structure used to install
+the package into a TeX distribution.
+
+### Source files (TDS)
+
+All files included in the `unicode-math/source` directory.
+
+ 1. um-code-alphabets.dtx
+ 2. um-code-amsmath.dtx
+ 3. um-code-api.dtx
+ 4. um-code-compat.dtx
+ 5. um-code-epilogue.dtx
+ 6. um-code-fontopt.dtx
+ 7. um-code-fontparam.dtx
+ 8. um-code-main.dtx
+ 9. um-code-mathmap.dtx
+10. um-code-mathtext.dtx
+11. um-code-msg.dtx
+12. um-code-opening.dtx
+13. um-code-pkgopt.dtx
+14. um-code-primes.dtx
+15. um-code-setchar.dtx
+16. um-code-sscript.dtx
+17. um-code-sym-commands.dtx
+18. um-code-ui.dtx
+19. um-code-usv.dtx
+20. um-code-variables.dtx
+21. unicode-math.dtx
+22. unicode-math.ins
+
+### TeX files (TDS)
+
+All files included in the `unicode-math/tex` directory.
+
+ 1. unicode-math-luatex.sty
+ 2. unicode-math-table.tex
+ 3. unicode-math-xetex.sty
+ 4. unicode-math.sty
+
+### Doc files (TDS)
+
+All files included in the `unicode-math/doc` directory.
+
+ 1. CHANGES.md
+ 2. MANIFEST.md
+ 3. README.md
+ 4. um-doc-legacyfontdimen.tex
+ 5. um-doc-main.tex
+ 6. um-doc-mathfontdimen.tex
+ 7. um-doc-nfsssummary.tex
+ 8. um-doc-stixextract.tex
+ 9. um-doc-style.tex
+10. unicode-math-code.ltx
+11. unicode-math-code.pdf
+12. unicode-math.ltx
+13. unicode-math.pdf
+14. unimath-example.ltx
+15. unimath-example.pdf
+16. unimath-symbols.ltx
+17. unimath-symbols.pdf
+
+
+## CTAN manifest
+
+The following group lists the files included in the CTAN package.
+
+### CTAN files
+
+ 1. CHANGES.md
+ 2. MANIFEST.md
+ 3. README.md
+ 4. um-code-alphabets.dtx
+ 5. um-code-amsmath.dtx
+ 6. um-code-api.dtx
+ 7. um-code-compat.dtx
+ 8. um-code-epilogue.dtx
+ 9. um-code-fontopt.dtx
+10. um-code-fontparam.dtx
+11. um-code-main.dtx
+12. um-code-mathmap.dtx
+13. um-code-mathtext.dtx
+14. um-code-msg.dtx
+15. um-code-opening.dtx
+16. um-code-pkgopt.dtx
+17. um-code-primes.dtx
+18. um-code-setchar.dtx
+19. um-code-sscript.dtx
+20. um-code-sym-commands.dtx
+21. um-code-ui.dtx
+22. um-code-usv.dtx
+23. um-code-variables.dtx
+24. um-doc-legacyfontdimen.tex
+25. um-doc-main.tex
+26. um-doc-mathfontdimen.tex
+27. um-doc-nfsssummary.tex
+28. um-doc-stixextract.tex
+29. um-doc-style.tex
+30. unicode-math-code.ltx
+31. unicode-math-code.pdf
+32. unicode-math-table.tex
+33. unicode-math.dtx
+34. unicode-math.ins
+35. unicode-math.ltx
+36. unicode-math.pdf
+37. unimath-example.ltx
+38. unimath-example.pdf
+39. unimath-symbols.ltx
+40. unimath-symbols.pdf
diff --git a/macros/latex/contrib/unicode-math/README.md b/macros/latex/contrib/unicode-math/README.md
new file mode 100644
index 0000000000..7208d66799
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/README.md
@@ -0,0 +1,116 @@
+The UNICODE-MATH package
+========================
+
+This package provides an implementation of Unicode/OpenType mathematics for
+XeLaTeX and LuaLaTeX.
+
+While I am a little wary of encouraging people to use this package for
+production work, I understand that it has certain uses and am making it
+available for distribution. Your testing and feedback is essential to fill
+in the many gaps that I miss!
+
+Please be aware that this package is undergoing continued development and the
+interface and functionality should not be considered completely stable. But
+the more the package is used the more stable it will become. (Things are
+generally working now; it is only minutiae that may change in the future.)
+
+Unicode maths is currently supported by the following freely available fonts:
+
+ - [Latin Modern Math][LM] (Bogusław Jackowski, Janusz M. Nowacki)
+ - [TeX Gyre Bonum Math][BM] (B. Jackowski, P. Strzel­czyk and P. Pianowski)
+ - [TeX Gyre Pagella Math][PM] (B. Jackowski, P. Strzelczyk and P. Pianowski)
+ - [TeX Gyre Schola Math][SCM] (B. Jackowski, P. Strzelczyk and P. Pianowski)
+ - [TeX Gyre Termes Math][TM] (B. Jackowski, P. Strzelczyk and P. Pianowski)
+ - [DejaVu Math TeX Gyre][DEJA] (B. Jackowski, P. Strzelczyk and P. Pianowski)
+ - [Asana Math][AM] (Apostolos Syropolous),
+ - [STIX][STIX] (STIpub), and
+ - [XITS Math][XM] (Khaled Hosny),
+ - [Libertinus Math][LIB] (Philipp H. Poll and Khaled Hosny).
+ - [Fire Math][FIRA] (Xiangdong Zeng).
+
+These fonts are available under open source licences
+(the [GUST Font License][GFL] and [Open Font Licence][OFL]).
+
+The following fonts are proprietary with OpenType maths support:
+
+ - [Lucida Bright Math][LUCI] (Charles Bigelow and Kris Holmes)
+ - [Cambria Math][CM] (Microsoft),
+ - [Minion Math][MM] (Johannes Küster, typoma GmbH)
+
+I'm always looking for new fonts to test with, so please let me know of any
+new releases.
+
+[CM]: http://www.ascenderfonts.com/font/cambria-regular.aspx
+[LUCI]: http://tug.org/store/lucida/opentype.html
+[MM]: http://www.typoma.com/en/fonts.html
+[LM]: http://www.gust.org.pl/projects/e-foundry/lm-math
+[PM]: http://www.ctan.org/pkg/tex-gyre-math-pagella
+[BM]: http://www.ctan.org/pkg/tex-gyre-math-bonum
+[SCM]: http://www.ctan.org/pkg/tex-gyre-math-schola
+[TM]: http://www.ctan.org/pkg/tex-gyre-math-termes
+[DEJA]: https://ctan.org/pkg/tex-gyre-math-dejavu
+[AM]: http://www.ctan.org/pkg/asana-math
+[STIX]: http://www.stixfonts.org
+[XM]: http://github.com/khaledhosny/xits-math
+[LIB]: https://ctan.org/pkg/libertinus
+[GFL]: http://www.gust.org.pl/projects/projects/e-foundry/licenses/
+[OFL]: http://scripts.sil.org/OFL
+[FIRA]: https://github.com/firamath/firamath
+
+
+PACKAGE USAGE
+-------------
+
+Please see the PDF documentation for full details. A simple beginning is:
+
+```tex
+\usepackage{unicode-math}
+\setmathfont{texgyrepagella-math.otf}
+```
+
+Most LaTeX math should still work after this. (Let me know if it doesn't.)
+Furthermore, it will be in a different font.
+
+
+REQUIREMENTS
+------------
+
+As well as running XeTeX or LuaTeX, this package requires recent versions of the
+`lm-math`, `fontspec`, `expl3`, `xpackages`, `filehook`, and `lualatex-math` packages.
+
+
+THANKS
+------
+
+I write LaTeX code as a hobby and a passion, not as part of my day job.
+If you would like to say thanks, please consider a donation at: <https://www.patreon.com/wspr>
+
+
+DEVELOPMENT and MAINTENANCE
+---------------------------
+
+The current release version is available from CTAN:
+> <https://ctan.org/pkg/unicode-math>
+
+Latest developmental and archived historical versions are available from Github:
+> <http://github.com/wspr/unicode-math>
+
+Please file bug reports with minimal examples:
+> <http://github.com/wspr/unicode-math/issues>
+
+See `CHANGES.md` for the complete listing of change history.
+
+Further information on the details surrounding the development of the package
+can be found in the `CONTRIBUTING.md` file in the Github repository.
+
+
+LICENCE
+-------
+
+The unicode-math package may be modified and distributed under the terms and
+conditions of the [LaTeX Project Public License][LPPL], version 1.3c or
+greater.
+
+[LPPL]: http://www.latex-project.org/lppl/
+
+This work is maintained by Will Robertson and consists of the files listed in `MANIFEST.md`.
diff --git a/macros/latex/contrib/unicode-math/RELEASE_CHECKLIST.md b/macros/latex/contrib/unicode-math/RELEASE_CHECKLIST.md
new file mode 100644
index 0000000000..ab250200e0
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/RELEASE_CHECKLIST.md
@@ -0,0 +1,11 @@
+# UNICODE-MATH RELEASE CHECKLIST
+
+- [ ] Finish final changes on `working` branch
+- [ ] Ensure `CHANGES.md` is up-to-date with a new version number
+- [ ] `git push`
+- [ ] Check Travis build status
+- [ ] Update local distro fully with tlmgr
+- [ ] Run `build check` locally
+- [ ] Install prerelease versions of `fontspec` and `latex3` and re-check
+- [ ] `texlua autorelease.lua`
+- [ ] Check `latex3/contrib/testfiles/unicode-math001.lvt` and update if necessary
diff --git a/macros/latex/contrib/unicode-math/um-code-alphabets.dtx b/macros/latex/contrib/unicode-math/um-code-alphabets.dtx
new file mode 100644
index 0000000000..fd6dd322c8
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-alphabets.dtx
@@ -0,0 +1,934 @@
+%%^^A%% um-code-alphabets.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Definitions for setting up the "math symbol alphabets".
+
+% \section{Setting up alphabets}
+% \label{sec:setupalphabets}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \subsection{Upright: up}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {up} {num}
+ {
+ \@@_set_normal_numbers:nn {up} {#1}
+ \@@_set_mathalphabet_numbers:nnn {up} {up} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {up} {Latin}
+ {
+ \bool_if:NTF \g_@@_literal_bool { \@@_set_normal_Latin:nn {up} {#1} }
+ {
+ \bool_if:NT \g_@@_upLatin_bool { \@@_set_normal_Latin:nn {up,it} {#1} }
+ }
+ \@@_set_mathalphabet_Latin:nnn {up} {up,it} {#1}
+ \@@_set_mathalphabet_Latin:nnn {literal} {up} {up}
+ \@@_set_mathalphabet_Latin:nnn {literal} {it} {it}
+ }
+
+\@@_new_alphabet_config:nnn {up} {latin}
+ {
+ \bool_if:NTF \g_@@_literal_bool { \@@_set_normal_latin:nn {up} {#1} }
+ {
+ \bool_if:NT \g_@@_uplatin_bool
+ {
+ \@@_set_normal_latin:nn {up,it} {#1}
+ \@@_set_normal_char:nnn {h} {up,it} {#1}
+ \@@_set_normal_char:nnn {dotlessi} {up,it} {#1}
+ \@@_set_normal_char:nnn {dotlessj} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {up} {up,it}{#1}
+ \@@_set_mathalphabet_latin:nnn {literal} {up} {up}
+ \@@_set_mathalphabet_latin:nnn {literal} {it} {it}
+ }
+
+\@@_new_alphabet_config:nnn {up} {Greek}
+ {
+ \bool_if:NTF \g_@@_literal_bool { \@@_set_normal_Greek:nn {up}{#1} }
+ {
+ \bool_if:NT \g_@@_upGreek_bool { \@@_set_normal_Greek:nn {up,it}{#1} }
+ }
+ \@@_set_mathalphabet_Greek:nnn {up} {up,it}{#1}
+ \@@_set_mathalphabet_Greek:nnn {literal} {up} {up}
+ \@@_set_mathalphabet_Greek:nnn {literal} {it} {it}
+ }
+
+\@@_new_alphabet_config:nnn {up} {greek}
+ {
+ \bool_if:NTF \g_@@_literal_bool { \@@_set_normal_greek:nn {up} {#1} }
+ {
+ \bool_if:NT \g_@@_upgreek_bool
+ {
+ \@@_set_normal_greek:nn {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_greek:nnn {up} {up,it} {#1}
+ \@@_set_mathalphabet_greek:nnn {literal} {up} {up}
+ \@@_set_mathalphabet_greek:nnn {literal} {it} {it}
+ }
+
+\@@_new_alphabet_config:nnn {up} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{up}{up}
+ }
+ {
+ \bool_if:NT \g_@@_upNabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{up,it}{up}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{up}{up}
+ }
+ {
+ \bool_if:NT \g_@@_uppartial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{up,it}{up}
+ }
+ }
+ \@@_set_mathalphabet_pos:nnnn {up} {partial} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {up} {Nabla} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {up} {dotlessi} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {up} {dotlessj} {up,it} {#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Italic: it}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {it} {Latin}
+ {
+ \bool_if:NTF \g_@@_literal_bool { \@@_set_normal_Latin:nn {it} {#1} }
+ {
+ \bool_if:NF \g_@@_upLatin_bool { \@@_set_normal_Latin:nn {up,it} {#1} }
+ }
+ \@@_set_mathalphabet_Latin:nnn {it} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {it} {latin}
+ {
+ \bool_if:NTF \g_@@_literal_bool
+ {
+ \@@_set_normal_latin:nn {it}{#1}
+ \@@_set_normal_char:nnn {h}{it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_uplatin_bool
+ {
+ \@@_set_normal_latin:nn {up,it} {#1}
+ \@@_set_normal_char:nnn {h} {up,it} {#1}
+ \@@_set_normal_char:nnn {dotlessi} {up,it} {#1}
+ \@@_set_normal_char:nnn {dotlessj} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {it} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {it} {dotlessi} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {it} {dotlessj} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {it} {Greek}
+ {
+ \bool_if:NTF \g_@@_literal_bool
+ {
+ \@@_set_normal_Greek:nn {it} {#1}
+ }
+ {
+ \bool_if:NF \g_@@_upGreek_bool { \@@_set_normal_Greek:nn {up,it} {#1} }
+ }
+ \@@_set_mathalphabet_Greek:nnn {it} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {it} {greek}
+ {
+ \bool_if:NTF \g_@@_literal_bool
+ {
+ \@@_set_normal_greek:nn {it} {#1}
+ }
+ {
+ \bool_if:NF \g_@@_upgreek_bool { \@@_set_normal_greek:nn {it,up} {#1} }
+ }
+ \@@_set_mathalphabet_greek:nnn {it} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {it} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla} {it} {it}
+ }
+ {
+ \bool_if:NF \g_@@_upNabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla} {up,it} {it}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_normal_char:nnn {partial} {it} {it}
+ }
+ {
+ \bool_if:NF \g_@@_uppartial_bool
+ {
+ \@@_set_normal_char:nnn {partial} {up,it} {it}
+ }
+ }
+ \@@_set_mathalphabet_pos:nnnn {it} {partial} {up,it}{#1}
+ \@@_set_mathalphabet_pos:nnnn {it} {Nabla} {up,it}{#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Blackboard or double-struck: bb and bbit}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bb} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {bb} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bb} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {bb} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {C} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {H} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {N} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {P} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {Q} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {R} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {Z} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bb} {num}
+ {
+ \@@_set_mathalphabet_numbers:nnn {bb} {up} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bb} {misc}
+ {
+ \@@_set_mathalphabet_pos:nnnn {bb} {Pi} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {pi} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {Gamma} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {gamma} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {summation} {up} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bbit} {misc}
+ {
+ \@@_set_mathalphabet_pos:nnnn {bbit} {D} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bbit} {d} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bbit} {e} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bbit} {i} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bbit} {j} {up,it} {#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Script and caligraphic: scr and cal}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {scr} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {scr} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {B} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {E} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {F} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {H} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {I} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {L} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {M} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {R} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {scr} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {scr} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {e} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {g} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {o} {up,it} {#1}
+ }
+% \end{macrocode}
+% These are by default synonyms for the above, but with the STIX
+% fonts we want to use the alternate alphabet.
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {cal} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {cal} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {B} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {E} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {F} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {H} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {I} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {L} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {M} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {R} {up,it} {#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Fractur or fraktur or blackletter: frak}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {frak} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {frak} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {frak} {C} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {frak} {H} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {frak} {I} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {frak} {R} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {frak} {Z} {up,it} {#1}
+ }
+\@@_new_alphabet_config:nnn {frak} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {frak} {up,it} {#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Sans serif upright: sfup}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {sfup} {num}
+ {
+ \@@_set_mathalphabet_numbers:nnn {sf} {up} {#1}
+ \@@_set_mathalphabet_numbers:nnn {sfup} {up} {#1}
+ }
+\@@_new_alphabet_config:nnn {sfup} {Latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {sfup} {#1}
+ \@@_set_mathalphabet_Latin:nnn {sf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_Latin:nn {sfup,sfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {sf} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_Latin:nnn {sfup} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {sfup} {latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_latin:nn {sfup} {#1}
+ \@@_set_mathalphabet_latin:nnn {sf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_latin:nn {sfup,sfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {sf} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {sfup} {up,it} {#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Sans serif italic: sfit}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {sfit} {Latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {sfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {sf} {it} {#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_Latin:nn {sfup,sfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {sf} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_Latin:nnn {sfit} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {sfit} {latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_latin:nn {sfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {sf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_latin:nn {sfup,sfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {sf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {sfit} {up,it}{#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Typewriter or monospaced: tt}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {tt} {num}
+ {
+ \@@_set_mathalphabet_numbers:nnn {tt} {up}{#1}
+ }
+\@@_new_alphabet_config:nnn {tt} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {tt} {up,it}{#1}
+ }
+\@@_new_alphabet_config:nnn {tt} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {tt} {up,it}{#1}
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Bold Italic: bfit}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bfit} {Latin}
+ {
+ \bool_if:NF \g_@@_bfupLatin_bool
+ {
+ \@@_set_normal_Latin:nn {bfup,bfit} {#1}
+ }
+ \@@_set_mathalphabet_Latin:nnn {bfit} {up,it}{#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {bfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_bfupLatin_bool
+ {
+ \@@_set_normal_Latin:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bf} {up,it}{#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfit} {latin}
+ {
+ \bool_if:NF \g_@@_bfuplatin_bool
+ {
+ \@@_set_normal_latin:nn {bfup,bfit} {#1}
+ }
+ \@@_set_mathalphabet_latin:nnn {bfit} {up,it}{#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_latin:nn {bfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_bfuplatin_bool
+ {
+ \@@_set_normal_latin:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bf} {up,it}{#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfit} {Greek}
+ {
+ \@@_set_mathalphabet_Greek:nnn {bfit} {up,it}{#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_Greek:nn {bfit}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_bfupGreek_bool
+ {
+ \@@_set_normal_Greek:nn {bfup,bfit}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bf} {up,it}{#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfit} {greek}
+ {
+ \@@_set_mathalphabet_greek:nnn {bfit} {up,it} {#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_greek:nn {bfit} {#1}
+ \@@_set_mathalphabet_greek:nnn {bf} {it} {#1}
+ }
+ {
+ \bool_if:NF \g_@@_bfupgreek_bool
+ {
+ \@@_set_normal_greek:nn {bfit,bfup} {#1}
+ \@@_set_mathalphabet_greek:nnn {bf} {up,it} {#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfit} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ { \@@_set_normal_char:nnn {Nabla} {bfit} {#1} }
+ {
+ \bool_if:NF \g_@@_upNabla_bool
+ { \@@_set_normal_char:nnn {Nabla} {bfup,bfit} {#1} }
+ }
+
+ \bool_if:NTF \g_@@_literal_partial_bool
+ { \@@_set_normal_char:nnn {partial} {bfit} {#1} }
+ {
+ \bool_if:NF \g_@@_uppartial_bool
+ { \@@_set_normal_char:nnn {partial} {bfup,bfit} {#1} }
+ }
+
+ \@@_set_mathalphabet_pos:nnnn {bfit} {partial} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bfit} {Nabla} {up,it} {#1}
+
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {partial} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_uppartial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {partial} {up,it}{#1}
+ }
+ }
+
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {Nabla} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upNabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {Nabla} {up,it}{#1}
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Bold Upright: bfup}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bfup} {num}
+ {
+ \@@_set_mathalphabet_numbers:nnn {bf} {up} {#1}
+ \@@_set_mathalphabet_numbers:nnn {bfup} {up} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfup} {Latin}
+ {
+ \bool_if:NT \g_@@_bfupLatin_bool
+ {
+ \@@_set_normal_Latin:nn {bfup,bfit} {#1}
+ }
+ \@@_set_mathalphabet_Latin:nnn {bfup} {up,it} {#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {bfup} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_bfupLatin_bool
+ {
+ \@@_set_normal_Latin:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bf} {up,it} {#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfup} {latin}
+ {
+ \bool_if:NT \g_@@_bfuplatin_bool
+ {
+ \@@_set_normal_latin:nn {bfup,bfit} {#1}
+ }
+ \@@_set_mathalphabet_latin:nnn {bfup} {up,it} {#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_latin:nn {bfup} {#1}
+ \@@_set_mathalphabet_latin:nnn {bf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_bfuplatin_bool
+ {
+ \@@_set_normal_latin:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bf} {up,it} {#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfup} {Greek}
+ {
+ \@@_set_mathalphabet_Greek:nnn {bfup} {up,it} {#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_Greek:nn {bfup} {#1}
+ \@@_set_mathalphabet_Greek:nnn {bf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_bfupGreek_bool
+ {
+ \@@_set_normal_Greek:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_Greek:nnn {bf} {up,it} {#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfup} {greek}
+ {
+ \@@_set_mathalphabet_greek:nnn {bfup} {up,it} {#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_greek:nn {bfup} {#1}
+ \@@_set_mathalphabet_greek:nnn {bf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_bfupgreek_bool
+ {
+ \@@_set_normal_greek:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_greek:nnn {bf} {up,it} {#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfup} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla} {bfup} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_upNabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla} {bfup,bfit} {#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_normal_char:nnn {partial} {bfup} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_uppartial_bool
+ {
+ \@@_set_normal_char:nnn {partial} {bfup,bfit} {#1}
+ }
+ }
+ \@@_set_mathalphabet_pos:nnnn {bfup} {partial} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bfup} {Nabla} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bfup} {digamma} {up} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bfup} {Digamma} {up} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bf} {digamma} {up} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bf} {Digamma} {up} {#1}
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {partial} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_uppartial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {partial} {up,it} {#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {Nabla} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upNabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {Nabla} {up,it} {#1}
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \subsection{Bold fractur or fraktur or blackletter: bffrak}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bffrak} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {bffrak} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bffrak} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {bffrak} {up,it}{#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Bold script or calligraphic: bfscr}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bfscr} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {bfscr} {up,it}{#1}
+ }
+\@@_new_alphabet_config:nnn {bfscr} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {bfscr} {up,it}{#1}
+ }
+\@@_new_alphabet_config:nnn {bfcal} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {bfcal} {up,it}{#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Bold upright sans serif: bfsfup}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bfsfup} {num}
+ {
+ \@@_set_mathalphabet_numbers:nnn {bfsf} {up}{#1}
+ \@@_set_mathalphabet_numbers:nnn {bfsfup} {up}{#1}
+ }
+\@@_new_alphabet_config:nnn {bfsfup} {Latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {bfsfup} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bfsf} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_Latin:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_Latin:nnn {bfsfup} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfup} {latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_latin:nn {bfsfup} {#1}
+ \@@_set_mathalphabet_latin:nnn {bfsf} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_latin:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {bfsfup} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfup} {Greek}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Greek:nn {bfsfup}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bfsf} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_Greek:nn {bfsfup,bfsfit}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_Greek:nnn {bfsfup} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfup} {greek}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_greek:nn {bfsfup} {#1}
+ \@@_set_mathalphabet_greek:nnn {bfsf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_greek:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_greek:nnn {bfsf} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_greek:nnn {bfsfup} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfup} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{bfsfup}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upNabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{bfsfup,bfsfit}{#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{bfsfup}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_uppartial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{bfsfup,bfsfit}{#1}
+ }
+ }
+ \@@_set_mathalphabet_pos:nnnn {bfsfup} {partial} {up,it}{#1}
+ \@@_set_mathalphabet_pos:nnnn {bfsfup} {Nabla} {up,it}{#1}
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {partial} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_uppartial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {partial} {up,it}{#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {Nabla} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upNabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {Nabla} {up,it}{#1}
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Bold italic sans serif: bfsfit}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bfsfit} {Latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {bfsfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bfsf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_Latin:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_Latin:nnn {bfsfit} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfit} {latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_latin:nn {bfsfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bfsf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_latin:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {bfsfit} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfit} {Greek}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Greek:nn {bfsfit}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bfsf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_Greek:nn {bfsfup,bfsfit}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_Greek:nnn {bfsfit} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfit} {greek}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_greek:nn {bfsfit} {#1}
+ \@@_set_mathalphabet_greek:nnn {bfsf} {it} {#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_greek:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_greek:nnn {bfsf} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_greek:nnn {bfsfit} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfit} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{bfsfit}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upNabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{bfsfup,bfsfit}{#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{bfsfit}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_uppartial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{bfsfup,bfsfit}{#1}
+ }
+ }
+ \@@_set_mathalphabet_pos:nnnn {bfsfit} {partial} {up,it}{#1}
+ \@@_set_mathalphabet_pos:nnnn {bfsfit} {Nabla} {up,it}{#1}
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {partial} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_uppartial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {partial} {up,it}{#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {Nabla} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upNabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {Nabla} {up,it}{#1}
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-amsmath.dtx b/macros/latex/contrib/unicode-math/um-code-amsmath.dtx
new file mode 100644
index 0000000000..bc782ba88c
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-amsmath.dtx
@@ -0,0 +1,224 @@
+%%^^A%% um-code-amsmath.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Compatibility with amsmath.
+
+% \section{Compatibility with \pkg{amsmath}}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Since the mathcode of |`\-| is greater than eight bits, this piece of |\AtBeginDocument| code from \pkg{amsmath} dies if we try and set the maths font in the preamble:
+% \begin{macrocode}
+\AtEndOfPackageFile * {amsmath}
+ {
+ \tl_remove_once:Nn \@begindocumenthook
+ {
+ \mathchardef\std@minus\mathcode`\-\relax
+ \mathchardef\std@equal\mathcode`\=\relax
+ }
+ \AtBeginDocument
+ {
+ \Umathcharnumdef\std@minus\Umathcodenum`-
+ \Umathcharnumdef\std@equal\Umathcodenum`=
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \cs_set:Npn \@cdots {\mathinner{\unicodecdots}}
+ \cs_set_eq:NN \dotsb@ \cdots
+% \end{macrocode}
+% This isn't as clever as the \pkg{amsmath} definition but I think it works:
+% \begin{macrocode}
+%<*XE>
+ \def \resetMathstrut@
+ {%
+ \setbox\z@\hbox{$($}%)
+ \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@
+ }
+% \end{macrocode}
+% The |subarray| environment uses inappropriate font dimensions.
+% \begin{macrocode}
+ \@@_check_and_fix:NNnnn \subarray \cs_set:Npn { #1 }
+ {
+ \vcenter
+ \bgroup
+ \Let@
+ \restore@math@cr
+ \default@tag
+ \baselineskip \fontdimen 10~ \scriptfont \tw@
+ \advance \baselineskip \fontdimen 12~ \scriptfont \tw@
+ \lineskip \thr@@@@ \fontdimen 8~ \scriptfont \thr@@@@
+ \lineskiplimit \lineskip
+ \ialign
+ \bgroup
+ \ifx c #1 \hfil \fi
+ $ \m@th \scriptstyle ## $
+ \hfil
+ \crcr
+ }
+ {
+ \vcenter
+ \c_group_begin_token
+ \Let@
+ \restore@math@cr
+ \default@tag
+ \skip_set:Nn \baselineskip
+ {
+% \end{macrocode}
+% Here we use stack top shift + stack bottom shift, which sounds reasonable.
+% \begin{macrocode}
+ \@@_stack_num_up:N \scriptstyle
+ + \@@_stack_denom_down:N \scriptstyle
+ }
+% \end{macrocode}
+% Here we use the minimum stack gap.
+% \begin{macrocode}
+ \lineskip \@@_stack_vgap:N \scriptstyle
+ \lineskiplimit \lineskip
+ \ialign
+ \c_group_begin_token
+ \token_if_eq_meaning:NNT c #1 { \hfil }
+ \c_math_toggle_token
+ \m@th
+ \scriptstyle
+ \c_parameter_token \c_parameter_token
+ \c_math_toggle_token
+ \hfil
+ \crcr
+ }
+%</XE>
+% \end{macrocode}
+% The roots need a complete rework.
+% \begin{macrocode}
+%<*LU>
+ \@@_check_and_fix:NNnnn \plainroot@ \cs_set_nopar:Npn { #1 \of #2 }
+ {
+ \setbox \rootbox \hbox
+ {
+ $ \m@th \scriptscriptstyle { #1 } $
+ }
+ \mathchoice
+ { \r@@@@t \displaystyle { #2 } }
+ { \r@@@@t \textstyle { #2 } }~
+ { \r@@@@t \scriptstyle { #2 } }
+ { \r@@@@t \scriptscriptstyle { #2 } }
+ \egroup
+ }
+ {
+ \bool_if:nTF
+ {
+ \@@_int_if_zero_p:n \uproot@ && \@@_int_if_zero_p:n \leftroot@
+ }
+ {
+ \Uroot \c_@@_radical_sqrt_tl { #1 } { #2 }
+ }
+ {
+ \hbox_set:Nn \rootbox
+ {
+ \c_math_toggle_token \m@th
+ \scriptscriptstyle { #1 }
+ \c_math_toggle_token
+ }
+ \mathchoice
+ { \r@@@@t \displaystyle { #2 } }
+ { \r@@@@t \textstyle { #2 } }
+ { \r@@@@t \scriptstyle { #2 } }
+ { \r@@@@t \scriptscriptstyle { #2 } }
+ }
+ \c_group_end_token
+ }
+%</LU>
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \@@_check_and_fix:NNnnn \r@@@@t \cs_set_nopar:Npn { #1 #2 }
+ {
+ \setboxz@h { $ \m@th #1 \sqrtsign { #2 } $ }
+ \dimen@ \ht\z@
+ \advance \dimen@ -\dp\z@
+ \setbox\@ne \hbox { $ \m@th #1 \mskip \uproot@ mu $ }
+ \advance \dimen@ by 1.667 \wd\@ne
+ \mkern -\leftroot@ mu
+ \mkern 5mu
+ \raise .6\dimen@ \copy\rootbox
+ \mkern -10mu
+ \mkern \leftroot@ mu
+ \boxz@
+ }
+%<*LU>
+ {
+ \hbox_set:Nn \l_tmpa_box
+ {
+ \c_math_toggle_token \m@th
+ #1 \mskip \uproot@ mu
+ \c_math_toggle_token
+ }
+ \Uroot \c_@@_radical_sqrt_tl
+ {
+ \box_move_up:nn { \box_wd:N \l_tmpa_box }
+ {
+ \hbox:n
+ {
+ \c_math_toggle_token \m@th
+ \mkern -\leftroot@ mu
+ \box_use:N \rootbox
+ \mkern \leftroot@ mu
+ \c_math_toggle_token
+ }
+ }
+ }
+ { #2 }
+ }
+%</LU>
+%<*XE>
+ {
+ \hbox_set:Nn \l_tmpa_box
+ {
+ \c_math_toggle_token \m@th
+ #1 \sqrtsign { #2 }
+ \c_math_toggle_token
+ }
+ \hbox_set:Nn \l_tmpb_box
+ {
+ \c_math_toggle_token \m@th
+ #1 \mskip \uproot@ mu
+ \c_math_toggle_token
+ }
+ \mkern -\leftroot@ mu
+ \@@_mathstyle_scale:NnnN #1 { \kern } { \fontdimen 63 \g_@@_sqrt_font_cmd_tl } \g_@@_sqrt_font_cmd_tl
+ \box_move_up:nn
+ {
+ \box_wd:N \l_tmpb_box + (\box_ht:N \l_tmpa_box - \box_dp:N \l_tmpa_box)
+ * \number \fontdimen 65 \g_@@_sqrt_font_cmd_tl / 100
+ }
+ { \box_use:N \rootbox }
+ \@@_mathstyle_scale:NnnN #1 { \kern } { \fontdimen 64 \g_@@_sqrt_font_cmd_tl } \g_@@_sqrt_font_cmd_tl
+ \mkern \leftroot@ mu
+ \box_use_drop:N \l_tmpa_box
+ }
+%</XE>
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-api.dtx b/macros/latex/contrib/unicode-math/um-code-api.dtx
new file mode 100644
index 0000000000..69a6f5a031
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-api.dtx
@@ -0,0 +1,43 @@
+%%^^A%% um-code-api.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% The (underdeveloped) API to interface with the package internals.
+
+% \section{Programmers' interface}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \begin{macro}{\unimath_get_mathstyle:}
+% This command expands to the currently math style.
+% \begin{macrocode}
+\cs_new:Nn \unimath_get_mathstyle:
+ {
+ \tl_use:N \l_@@_mathstyle_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-compat.dtx b/macros/latex/contrib/unicode-math/um-code-compat.dtx
new file mode 100644
index 0000000000..a5f05c81b3
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-compat.dtx
@@ -0,0 +1,251 @@
+%%^^A%% um-code-compat.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Compatibility with 3rd party packages.
+
+% \section{Compatibility}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\@@_check_and_fix:NNnnn}
+% \darg{command}
+% \darg{factory command}
+% \darg{parameter text}
+% \darg{expected replacement text}
+% \darg{new replacement text}
+% Tries to patch \meta{command}.
+% If \meta{command} is undefined, do nothing.
+% Otherwise it must be a macro with the given \meta{parameter text} and \meta{expected replacement text}, created by the given \meta{factory command} or equivalent.
+% In this case it will be overwritten using the \meta{parameter text} and the \meta{new replacement text for \LuaTeX} or the \meta{new replacement text for \XeTeX}, depending on the engine.
+% Otherwise issue a warning and don’t overwrite.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_check_and_fix:NNnnn
+ {
+ \cs_if_exist:NT #1
+ {
+ \token_if_macro:NTF #1
+ {
+ \group_begin:
+ #2 \@@_tmpa:w #3 { #4 }
+ \cs_if_eq:NNTF #1 \@@_tmpa:w
+ {
+ \msg_info:nnx { unicode-math } { patch-macro } { \token_to_str:N #1 }
+ \group_end:
+ #2 #1 #3 { #5 }
+ }
+ {
+ \msg_warning:nnxxx { unicode-math } { wrong-meaning }
+ { \token_to_str:N #1 } { \token_to_meaning:N #1 }
+ { \token_to_meaning:N \@@_tmpa:w }
+ \group_end:
+ }
+ }
+ {
+ \msg_warning:nnx { unicode-math } { macro-expected }
+ { \token_to_str:N #1 }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \section{Patching/augmenting 3rd-party packages}
+%
+% \subsection{\pkg{url}}
+% Here we need to get \pkg{url} in a state such that
+% when it switches to math mode and enters \ascii\ characters, the maths
+% setup (i.e., \pkg{unicode-math}) doesn't remap the symbols into Plane 1.
+% Which is what \cs{symliteral} is intended to do.
+% This is the same as writing, e.g., |\def\UrlFont{\ttfamily\@@_switch_to:n{literal}}|
+% but activates automatically so documents that might change the \cs{url}
+% font through the standard interface still work correctly.
+% \begin{macrocode}
+\AtEndOfPackageFile * {url}
+ {
+ \tl_put_left:Nn \Url@FormatString { \@@_switch_to:n {literal} }
+ \tl_put_right:Nn \UrlSpecials
+ {
+ \do \` { \mathchar`\` }
+ \do \' { \mathchar`\' }
+ \do \$ { \mathchar`\$ }
+ \do \& { \mathchar`\& }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{\pkg{mathtools}}
+%
+% \pkg{mathtools}’s |\cramped| command and others that make use of its internal version use an incorrect font dimension.
+%
+% The \XeTeX\ version is pretty similar to the legacy version, only using the correct font dimensions.
+% Note we used `\verb|\XeTeXradical|' with the family 255 to be almost sure
+% that the radical rule width is not set. Former use of `\verb|\newfam|' had an
+% upsetting effect on legacy math alphabets.
+% \begin{macrocode}
+%<*XE>
+\AtEndOfPackageFile * { mathtools }
+ {
+ \@@_check_and_fix:NNnnn \MT_cramped_internal:Nn \cs_set_nopar:Npn { #1 #2 }
+ {
+ \sbox \z@ { $ \m@th #1 \nulldelimiterspace = \z@ \radical \z@ { #2 } $ }
+ \ifx #1 \displaystyle
+ \dimen@ = \fontdimen 8 \textfont 3
+ \advance \dimen@ .25 \fontdimen 5 \textfont 2
+ \else
+ \dimen@ = 1.25 \fontdimen 8
+ \ifx #1 \textstyle
+ \textfont
+ \else
+ \ifx #1 \scriptstyle
+ \scriptfont
+ \else
+ \scriptscriptfont
+ \fi
+ \fi
+ 3
+ \fi
+ \advance \dimen@ -\ht\z@
+ \ht\z@ = -\dimen@
+ \box\z@
+ }
+ {
+ \hbox_set:Nn \l_tmpa_box
+ {
+ \color@setgroup \c_math_toggle_token \m@th
+ #1
+ \dim_zero:N \nulldelimiterspace
+ \XeTeXradical 255 ~ 0 ~ { #2 }
+ \c_math_toggle_token \color@endgroup
+ }
+ \box_set_ht:Nn \l_tmpa_box
+ {
+ \box_ht:N \l_tmpa_box - \@@_radical_vgap:N #1
+ }
+ \box_use_drop:N \l_tmpa_box
+ }
+ }
+%</XE>
+% \end{macrocode}
+%
+% \begin{macro}{\overbracket}
+% \begin{macro}{\underbracket}
+% \pkg{mathtools}’s |\overbracket| and |\underbracket| take optional
+% arguments and are defined in terms of rules, so we keep them, and rename
+% ours to |\Uoverbracket| and |\Uunderbracket|.
+%
+% Original definition used the height of |\braceld| which is not available
+% with Unicode fonts, so we are hard coding the $5/18$ex suggested by
+% \pkg{mathtools}’s documentation.
+% \begin{macrocode}
+\AtEndOfPackageFile * { mathtools }
+ {
+ \cs_set_eq:NN \MToverbracket \overbracket
+ \cs_set_eq:NN \MTunderbracket \underbracket
+
+ \AtBeginDocument
+ {
+ \msg_warning:nn { unicode-math } { mathtools-overbracket }
+
+ \cs_set:Npn \downbracketfill #1 #2
+ {
+ \tl_set:Nn \l_MT_bracketheight_fdim {.27ex}
+ \downbracketend {#1} {#2}
+ \leaders \vrule \@height #1 \@depth \z@ \hfill
+ \downbracketend {#1} {#2}
+ }
+
+ \cs_set:Npn \upbracketfill #1 #2
+ {
+ \tl_set:Nn \l_MT_bracketheight_fdim {.27ex}
+ \upbracketend {#1} {#2}
+ \leaders \vrule \@height \z@ \@depth #1 \hfill
+ \upbracketend {#1} {#2}
+ }
+
+ \cs_set_eq:NN \Uoverbracket \overbracket
+ \cs_set_eq:NN \Uunderbracket \underbracket
+ \cs_set_eq:NN \overbracket \MToverbracket
+ \cs_set_eq:NN \underbracket \MTunderbracket
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dblcolon}
+% \begin{macro}{\coloneqq}
+% \begin{macro}{\Coloneqq}
+% \begin{macro}{\eqqcolon}
+% \pkg{mathtools} defines several commands as combinations of colons and
+% other characters, but with meanings incompatible to \pkg{unicode-math}.
+% Thus we issue a warning. Because \pkg{mathtools} uses
+% \cmd{\providecommand} \cmd{\AtBeginDocument}, we can just define the
+% offending commands here.
+% \begin{macrocode}
+\AtEndOfPackageFile * { mathtools }
+ {
+ \msg_warning:nn { unicode-math } { mathtools-colon }
+ \NewDocumentCommand \dblcolon { } { \Colon }
+ \NewDocumentCommand \coloneqq { } { \coloneq }
+ \NewDocumentCommand \Coloneqq { } { \Coloneq }
+ \NewDocumentCommand \eqqcolon { } { \eqcolon }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{\pkg{colonequals}}
+%
+% \begin{macro}{\ratio}
+% \begin{macro}{\coloncolon}
+% \begin{macro}{\minuscolon}
+% \begin{macro}{\colonequals}
+% \begin{macro}{\equalscolon}
+% \begin{macro}{\coloncolonequals}
+% Similarly to \pkg{mathtools}, the \pkg{colonequals} defines several colon
+% combinations. Fortunately there are no name clashes, so we can just
+% overwrite their definitions.
+% \begin{macrocode}
+\AtEndOfPackageFile * { colonequals }
+ {
+ \msg_warning:nn { unicode-math } { colonequals }
+ \RenewDocumentCommand \ratio { } { \mathratio }
+ \RenewDocumentCommand \coloncolon { } { \Colon }
+ \RenewDocumentCommand \minuscolon { } { \dashcolon }
+ \RenewDocumentCommand \colonequals { } { \coloneq }
+ \RenewDocumentCommand \equalscolon { } { \eqcolon }
+ \RenewDocumentCommand \coloncolonequals { } { \Coloneq }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-epilogue.dtx b/macros/latex/contrib/unicode-math/um-code-epilogue.dtx
new file mode 100644
index 0000000000..9c10ee0ddf
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-epilogue.dtx
@@ -0,0 +1,420 @@
+%%^^A%% um-code-epilogue.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Assorted definitions to close up.
+
+% \section{Epilogue}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Lots of little things to tidy up.
+%
+% \subsection{Resolving Greek symbol name control sequences}
+%
+% \begin{macro}{\@@_resolve_greek:}
+% This macro defines \cmd\Alpha\dots\cmd\omega\ as their corresponding
+% Unicode (mathematical italic) character. Remember that the mapping
+% to upright or italic happens with the mathcode definitions, whereas these macros
+% just stand for the literal Unicode characters.
+% \begin{macrocode}
+\AtBeginDocument { \debug_suspend: \@@_resolve_greek: \debug_resume: }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new:Npn \@@_resolve_greek:
+ {
+ \clist_map_inline:nn
+ {
+ Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,
+ alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,
+ Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,
+ mu,nu,xi,omicron,pi,rho,sigma,tau,upsilon,phi,chi,psi,omega,
+ varTheta,varsigma,vartheta,varkappa,varrho,varpi,varepsilon,varphi
+ }
+ {
+ \tl_set:cx {##1} { \exp_not:c { mit ##1 } }
+ \tl_set:cx {up ##1} { \exp_not:N \symup \exp_not:c { ##1 } }
+ \tl_set:cx {it ##1} { \exp_not:N \symit \exp_not:c { ##1 } }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Unicode radicals}
+%
+% Make sure \cs{Uroot} is defined in the case where the \LaTeX{}
+% kernel doesn't make it available with its native name.
+%
+% \begin{macro}{\@@_redefine_radical:}
+% \begin{macrocode}
+\AtBeginDocument{ \@ifpackageloaded { amsmath } { } { \@@_redefine_radical: } }
+% \end{macrocode}
+%
+% \begin{macro}{\r@@t}
+% \darg{A mathstyle (for \cmd\mathpalette)}
+% \darg{Leading superscript for the sqrt sign}
+% A re-implementation of \LaTeX's hard-coded n-root sign using the appropriate \cmd\fontdimen s.
+% \begin{macrocode}
+%<*XE>
+\cs_new:Nn \@@_redefine_radical:
+ {
+ \cs_set_nopar:Npn \r@@@@t ##1 ##2
+ {
+ \hbox_set:Nn \l_tmpa_box
+ {
+ \c_math_toggle_token \m@th
+ ##1 \sqrtsign { ##2 }
+ \c_math_toggle_token
+ }
+ \@@_mathstyle_scale:NnnN ##1 { \kern } { \fontdimen 63 \g_@@_sqrt_font_cmd_tl } \g_@@_sqrt_font_cmd_tl
+ \box_move_up:nn
+ {
+ (\box_ht:N \l_tmpa_box - \box_dp:N \l_tmpa_box) * \number \fontdimen 65 \g_@@_sqrt_font_cmd_tl / 100
+ }
+ { \box_use:N \rootbox }
+ \@@_mathstyle_scale:NnnN ##1 { \kern } { \fontdimen 64 \g_@@_sqrt_font_cmd_tl } \g_@@_sqrt_font_cmd_tl
+ \box_use_drop:N \l_tmpa_box
+ }
+ }
+%</XE>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\root}
+% Redefine this macro for \LuaTeX, which provides us a nice primitive to use.
+% \begin{macrocode}
+%<*LU>
+\cs_new:Nn \@@_redefine_radical:
+ {
+ \cs_set:Npn \root ##1 \of ##2
+ {
+ \Uroot \c_@@_radical_sqrt_tl { ##1 } { ##2 }
+ }
+ }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Active fractions}
+%
+% Active fractions can be set up independently of any maths font definition;
+% all it requires is a mapping from the Unicode input chars to the relevant
+% \LaTeX\ fraction declaration.
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_which_frac:nn
+ {
+ \bool_if:NTF \l_@@_smallfrac_bool {\tfrac} {\frac} {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_setup_active_frac:
+ {
+ \@@_mathactive_remap:nn {"2189} { \@@_which_frac:nn {0} {3} }
+ \@@_mathactive_remap:nn {"2152} { \@@_which_frac:nn {1} {10} }
+ \@@_mathactive_remap:nn {"2151} { \@@_which_frac:nn {1} {9} }
+ \@@_mathactive_remap:nn {"215B} { \@@_which_frac:nn {1} {8} }
+ \@@_mathactive_remap:nn {"2150} { \@@_which_frac:nn {1} {7} }
+ \@@_mathactive_remap:nn {"2159} { \@@_which_frac:nn {1} {6} }
+ \@@_mathactive_remap:nn {"2155} { \@@_which_frac:nn {1} {5} }
+ \@@_mathactive_remap:nn {"00BC} { \@@_which_frac:nn {1} {4} }
+ \@@_mathactive_remap:nn {"2153} { \@@_which_frac:nn {1} {3} }
+ \@@_mathactive_remap:nn {"215C} { \@@_which_frac:nn {3} {8} }
+ \@@_mathactive_remap:nn {"2156} { \@@_which_frac:nn {2} {5} }
+ \@@_mathactive_remap:nn {"00BD} { \@@_which_frac:nn {1} {2} }
+ \@@_mathactive_remap:nn {"2157} { \@@_which_frac:nn {3} {5} }
+ \@@_mathactive_remap:nn {"215D} { \@@_which_frac:nn {5} {8} }
+ \@@_mathactive_remap:nn {"2154} { \@@_which_frac:nn {2} {3} }
+ \@@_mathactive_remap:nn {"00BE} { \@@_which_frac:nn {3} {4} }
+ \@@_mathactive_remap:nn {"2158} { \@@_which_frac:nn {4} {5} }
+ \@@_mathactive_remap:nn {"215A} { \@@_which_frac:nn {5} {6} }
+ \@@_mathactive_remap:nn {"215E} { \@@_which_frac:nn {7} {8} }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AtBeginDocument { \@@_setup_active_frac: }
+% \end{macrocode}
+%
+%
+% \subsection{Synonyms and all the rest}
+%
+% These are symbols with multiple names. Eventually to be taken care of
+% automatically by the maths characters database.
+% \begin{macrocode}
+\protected\def\to{\rightarrow}
+\protected\def\le{\leq}
+\protected\def\ge{\geq}
+\protected\def\neq{\ne}
+\protected\def\triangle{\mathord{\bigtriangleup}}
+\protected\def\bigcirc{\mdlgwhtcircle}
+\protected\def\circ{\vysmwhtcircle}
+\protected\def\bullet{\smblkcircle}
+\protected\def\mathyen{\yen}
+\protected\def\mathsterling{\sterling}
+\protected\def\diamond{\smwhtdiamond}
+\protected\def\emptyset{\varnothing}
+\protected\def\hbar{\hslash}
+\protected\def\land{\wedge}
+\protected\def\lor{\vee}
+\protected\def\owns{\ni}
+\protected\def\gets{\leftarrow}
+\protected\def\mathring{\ocirc}
+\protected\def\lnot{\neg}
+\protected\def\longdivision{\longdivisionsign}
+% \end{macrocode}
+% These are somewhat odd: (and their usual Unicode uprightness does not match their amssymb glyphs)
+% \begin{macrocode}
+\protected\def\backepsilon{\upbackepsilon}
+\protected\def\eth{\matheth}
+% \end{macrocode}
+% These are names that are `frozen' in HTML but have dumb names:
+% \begin{macrocode}
+\protected\def\dbkarow {\dbkarrow}
+\protected\def\drbkarow{\drbkarrow}
+\protected\def\hksearow{\hksearrow}
+\protected\def\hkswarow{\hkswarrow}
+% \end{macrocode}
+%
+% Due to the magic of OpenType math, big operators are automatically
+% enlarged when necessary. Since there isn't a separate unicode glyph for
+% `small integral', I'm not sure if there is a better way to do this:
+% \begin{macrocode}
+\protected\def\smallint{\mathop{\textstyle\int}\limits}
+% \end{macrocode}
+%
+% \begin{macro}{\underbar}
+% \begin{macrocode}
+\cs_set_eq:NN \latexe_underbar:n \underbar
+\renewcommand\underbar
+ {
+ \mode_if_math:TF \mathunderbar \latexe_underbar:n
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\colon}
+% Define \cs{colon} as a mathpunct `|:|'.
+% This is wrong: it should be \unichar{003A} {colon} instead!
+% We hope no-one will notice.
+% \begin{macrocode}
+\@ifpackageloaded{amsmath}
+ {
+ % define their own colon, perhaps I should just steal it. (It does look much better.)
+ }
+ {
+ \cs_set_protected:Npn \colon
+ {
+ \bool_if:NTF \g_@@_literal_colon_bool {:} { \mathpunct{:} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\digamma}
+% \begin{macro}{\Digamma}
+% I might end up just changing these in the table.
+% \begin{macrocode}
+\protected\def\digamma{\updigamma}
+\protected\def\Digamma{\upDigamma}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{Symbols}
+%
+% \begin{macrocode}
+\cs_set_protected:Npn \| {\Vert}
+% \end{macrocode}
+%
+% \cs{mathinner} items:
+% \begin{macrocode}
+\cs_set_protected:Npn \mathellipsis {\mathinner{\unicodeellipsis}}
+\cs_set_protected:Npn \cdots {\mathinner{\unicodecdots}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set_eq:NN \@@_text_slash: \slash
+\cs_set_protected:Npn \slash
+ {
+ \mode_if_math:TF {\mathslash} {\@@_text_slash:}
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection{\cs{not}}
+% \label{sec:negations}
+%
+% The situation of \cs{not} symbol is currently messy, in Unicode it is defined
+% as a combining mark so naturally it should be treated as a math accent,
+% however \XeTeX\ does not correctly place it as it needs special
+% treatment compared to other accents.
+% Furthermore a math accent changes the
+% spacing of its nucleus, so \cs{not=} will be spaced as an ordinary not
+% relational symbol, which is undesired.
+%
+% Here modify \cs{not} to a macro that tries to use predefined negated symbols,
+% which would give better results in most cases, until there is more robust
+% solution in the engines.
+%
+% This code is based on an answer to a TeX -- Stack Exchange question by Enrico
+% Gregorio\footnote{\url{http://tex.stackexchange.com/a/47260/729}}.
+%
+% \begin{macro}{\not}
+% \begin{macrocode}
+\DeclareDocumentCommand \not {m}
+ {
+ \tl_set:Nx \l_@@_not_token_name_tl { \cs_to_str:N #1 }
+ \tl_if_empty:NT \l_@@_not_token_name_tl
+ {
+ \tl_set:Nx \l_@@_not_token_name_tl { \token_to_str:N #1 }
+ }
+ \cs_if_exist:cTF { not \l_@@_not_token_name_tl }
+ {
+ \use:c { not \l_@@_not_token_name_tl }
+ }
+ {
+ \cs_if_exist:cTF { n \l_@@_not_token_name_tl }
+ {
+ \use:c { n \l_@@_not_token_name_tl }
+ }
+ {
+ \tl_if_eq:nnTF {#1} {$} { \notaccent{} } { \notaccent } #1
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NewNegationCommand}
+% \begin{macro}{\RenewNegationCommand}
+% \begin{macrocode}
+\DeclareDocumentCommand \NewNegationCommand {mm}
+ {
+ \@@_set_negation_command:Nnn \cs_new_protected:cpn {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareDocumentCommand \RenewNegationCommand {mm}
+ {
+ \@@_set_negation_command:Nnn \cs_set_protected:cpn {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Nn \@@_set_negation_command:Nnn
+ {
+ \tl_set:Nx \l_@@_not_token_name_tl { \cs_to_str:N #2 }
+ \tl_if_empty:NT \l_@@_not_token_name_tl
+ {
+ \tl_set:Nx \l_@@_not_token_name_tl { \token_to_str:N #2 }
+ }
+ #1 { not \l_@@_not_token_name_tl } { #3 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\NewNegationCommand { = } { \neq }
+\NewNegationCommand { < } { \nless }
+\NewNegationCommand { > } { \ngtr }
+\NewNegationCommand { \gets } { \nleftarrow }
+\NewNegationCommand { \simeq } { \nsime }
+\NewNegationCommand { \equal } { \ne }
+\NewNegationCommand { \le } { \nleq }
+\NewNegationCommand { \ge } { \ngeq }
+\NewNegationCommand { \greater } { \ngtr }
+\NewNegationCommand { \forksnot } { \forks }
+% \end{macrocode}
+%
+%
+% \subsubsection{Full-width remapping}
+%
+% While this could be done with the full mathcode remapping machinery used
+% for the other purposes, it would be fairly redundant with plain ASCII.
+% Worse, this would slow down what is already an inefficient part of \pkg{unicode-math}.
+%
+% Instead we use mathactive to do a plain old mapping from full-width to ASCII directly.
+%
+% Until I get requests for it, I've not included symbols or punctuation here.
+%
+% \paragraph{Numbers}
+%
+% \begin{macrocode}
+\int_step_inline:nnnn {0} {1} {9}
+ {
+ \@@_mathactive_remap:nn {"FF10+#1} {\char\int_eval:n{`\0+#1}}
+ }
+% \end{macrocode}
+%
+% \paragraph{Letters}
+%
+% \begin{macrocode}
+\int_step_inline:nnnn {0} {1} {26}
+ {
+ \@@_mathactive_remap:nn {"FF21+#1} {\char\int_eval:n{`\A+#1}}
+ \@@_mathactive_remap:nn {"FF41+#1} {\char\int_eval:n{`\a+#1}}
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Legacy characters}
+%
+% \begin{macro}{\@@_undeclare_symbol:N}
+% \begin{macrocode}
+\cs_new:Nn \@@_undeclare_symbol:N
+ {
+ \cs_set_protected:Npn #1
+ { \@@_error:nx {legacy-char-not-supported} { \token_to_str:N #1 } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% If you have better ideas about what to do here, please mention.
+% \begin{macrocode}
+\@@_undeclare_symbol:N \arrowvert
+\@@_undeclare_symbol:N \Arrowvert
+\@@_undeclare_symbol:N \bracevert
+% \end{macrocode}
+%
+% \section{A secret hook}
+% This will be executed after most if not all of the standard unicode-math setup.
+% \begin{macrocode}
+\AtBeginDocument{\g_@@_secret_hook_tl}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \section*{Fin}
+%
+% The official end of the package:
+% \begin{macrocode}
+%<package>\endinput
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-fontopt.dtx b/macros/latex/contrib/unicode-math/um-code-fontopt.dtx
new file mode 100644
index 0000000000..acd1117e34
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-fontopt.dtx
@@ -0,0 +1,326 @@
+%%^^A%% um-code-fontopt.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Keyval for `\setmathfont`
+
+% \section{Font loading options}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \subsection{Math version}
+% \begin{macrocode}
+\keys_define:nn {unicode-math}
+ {
+ version .code:n =
+ {
+ \tl_set:Nn \l_@@_mversion_tl {#1}
+ \DeclareMathVersion {\l_@@_mversion_tl}
+ }
+ }
+% \end{macrocode}
+%
+% \subsection{Script and scriptscript font options}
+% \begin{macrocode}
+\keys_define:nn {unicode-math}
+ {
+ script-features .tl_set:N = \l_@@_script_features_tl ,
+ sscript-features .tl_set:N = \l_@@_sscript_features_tl ,
+ script-font .tl_set:N = \l_@@_script_font_tl ,
+ sscript-font .tl_set:N = \l_@@_sscript_font_tl ,
+ }
+% \end{macrocode}
+%
+% \subsection{Range processing}
+% \seclabel{rangeproc}
+%
+% Locally redefined all math symbol commands to their slot number prefixed by a quark.
+% Similary for the math classes.
+% \begin{macrocode}
+\keys_define:nn {unicode-math}
+ {
+ range .code:n =
+ {
+ \bool_if:NF \g_@@_main_font_defined_bool { \@@_error:n {no-main-font} }
+ \bool_gset_false:N \g_@@_init_bool
+ \@@_range_init:
+ \group_begin:
+ \seq_map_inline:Nn \g_@@_mathclasses_seq
+ {
+ \cs_set:Npn ##1 { \use_none:n \q_unicode_math \exp_not:N ##1 }
+ }
+ \cs_set:Npn \_@@_sym:nnn ##1 ##2 ##3
+ {
+ \cs_set:Npn ##2 { \use_none:n \q_unicode_math ##1 }
+ }
+ \@@_input_math_symbol_table:
+ \@@_range_process:n {#1}
+ \group_end:
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_range_init:}
+% Set processing functions if we're not defining the full Unicode math repetoire.
+% Math symbols are defined with \cmd\_@@_sym:nnn; see \secref{mathsymbol}
+% for the individual definitions
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_range_init:
+ {
+ \int_gincr:N \g_@@_fam_int
+ \tl_set:Nx \l_@@_symfont_label_tl {@@_fam\int_use:N\g_@@_fam_int}
+ \cs_set_eq:NN \_@@_sym:nnn \@@_process_symbol_parse:nnn
+ \cs_set_eq:NN \@@_remap_symbol:nnn \@@_remap_symbol_parse:nnn
+ \cs_set_eq:NN \@@_maybe_init_alphabet:n \use_none:n
+ \cs_set_eq:NN \@@_assign_delcode:nn \@@_assign_delcode_parse:nn
+ \cs_set_eq:NN \@@_make_mathactive:nNN \@@_make_mathactive_parse:nNN
+% \end{macrocode}
+% Proceed by filling up the various `range' seqs according to the user options.
+% \begin{macrocode}
+ \seq_gclear:N \g_@@_char_range_seq
+ \seq_gclear:N \g_@@_mclass_range_seq
+ \seq_gclear:N \g_@@_mathalph_seq
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_range_process:}
+% \begin{macrocode}
+\cs_new:Nn \@@_range_process:n
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_mathalph_decl:nF {##1} { \@@_range_decl:n {##1} }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathalph_decl:nF}
+% Possible forms of input:\\
+% |\mathscr|\\
+% |\mathscr->\mathup|\\
+% |\mathscr/{Latin}|\\
+% |\mathscr/{Latin}->\mathup|\\
+% Outputs:\\
+% |tmpa|: math style (\eg, |\mathscr|)\\
+% |tmpb|: alphabets (\eg, |Latin|)\\
+% |tmpc|: remap style (\eg, |\mathup|). Defaults to |tmpa|.
+%
+% The remap style can also be |\mathcal->stixcal|, which I marginally prefer
+% in the general case.
+% \begin{macrocode}
+\cs_new:Nn \@@_mathalph_decl:nF
+ {
+ \tl_set:Nn \l_@@_tmpa_tl {#1}
+ \tl_clear:N \l_@@_tmpb_tl
+ \tl_clear:N \l_@@_tmpc_tl
+
+ \tl_if_in:NnT \l_@@_tmpa_tl {->}
+ { \exp_after:wN \@@_split_arrow:w \l_@@_tmpa_tl \q_nil }
+
+ \tl_if_in:NnT \l_@@_tmpa_tl {/}
+ { \exp_after:wN \@@_split_slash:w \l_@@_tmpa_tl \q_nil }
+
+ \tl_set:Nx \l_@@_tmpa_tl { \tl_to_str:N \l_@@_tmpa_tl }
+ \exp_args:NNx \tl_remove_all:Nn \l_@@_tmpa_tl { \token_to_str:N \math }
+ \exp_args:NNx \tl_remove_all:Nn \l_@@_tmpa_tl { \token_to_str:N \sym }
+ \tl_trim_spaces:N \l_@@_tmpa_tl
+
+ \tl_if_empty:NT \l_@@_tmpc_tl
+ { \tl_set_eq:NN \l_@@_tmpc_tl \l_@@_tmpa_tl }
+
+ \clist_if_in:NVT \g_@@_bad_alpha_clist \l_@@_tmpa_tl { \@@_error:n {range-not-bf-sf} }
+
+ \prop_if_exist:cTF {g_@@_named_range_ \l_@@_tmpa_tl _prop}
+ {
+ \seq_gput_right:Nx \g_@@_mathalph_seq
+ {
+ { \exp_not:V \l_@@_tmpa_tl }
+ { \exp_not:V \l_@@_tmpb_tl }
+ { \exp_not:V \l_@@_tmpc_tl }
+ }
+ }
+ {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_split_arrow:w #1->#2 \q_nil
+ {
+ \tl_set:Nx \l_@@_tmpa_tl { \tl_trim_spaces:n {#1} }
+ \tl_set:Nx \l_@@_tmpc_tl { \tl_trim_spaces:n {#2} }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_set:Npn \@@_split_slash:w #1/#2 \q_nil
+ {
+ \tl_set:Nx \l_@@_tmpa_tl { \tl_trim_spaces:n {#1} }
+ \tl_set:Nx \l_@@_tmpb_tl { \tl_trim_spaces:n {#2} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_range_decl:n}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_range_decl:n
+ {
+ \bool_lazy_and:nnTF { \tl_if_single_p:n {#1} } { \token_if_cs_p:N #1 }
+ % IF A CSNAME:
+ {
+ \tl_if_in:VnTF #1 { \q_unicode_math }
+ {
+ \seq_if_in:NnTF \g__um_mathclasses_seq {#1}
+ { \seq_gput_right:Nn \g_@@_mclass_range_seq {#1} }
+ { \seq_gput_right:Nx \g_@@_char_range_seq { #1 } }
+ }
+ { \@@_error:nx {bad-cs-in-range} { \tl_to_str:n {#1} } }
+ }
+ % ELSE ASSUME NUMERIC INPUT:
+ {
+ \seq_gput_right:Nx \g_@@_char_range_seq { #1 }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_if_char_spec:nNT}
+% \darg{Unicode character slot}
+% \darg{control sequence (math class)}
+% \darg{code to execute}
+% This macro expands to |#3|
+% if any of its arguments are contained in \cmd\g_@@_char_range_seq.
+% This list can contain either character ranges (for checking with |#1|) or control sequences.
+% These latter can either be the command name of a specific character, \emph{or} the math
+% type of one (\eg, \cmd\mathbin).
+%
+% Character ranges are passed to \cs{@@_if_char_spec:nNT}, which accepts input in the form shown in \tabref{ranges}.
+%
+% \begin{table}[htbp]
+% \centering
+% \topcaption{Ranges accepted by \cs{@@_if_char_spec:nNT}.}
+% \label{tab:ranges}
+% \begin{tabular}{>{\ttfamily}cc}
+% \textrm{Input} & Range \\
+% \hline
+% x & $r=x$ \\
+% x- & $r\geq x$ \\
+% -y & $r\leq y$ \\
+% x-y & $x \leq r \leq y$ \\
+% \end{tabular}
+% \end{table}
+%
+% We have three tests, performed sequentially in order of execution time.
+% Any test finding a match jumps directly to the end.
+% \begin{macrocode}
+\cs_new:Nn \@@_if_char_spec:nNT
+ {
+ % math class:
+ \seq_if_in:NnT \g_@@_mclass_range_seq {#2}
+ { \use_none_delimit_by_q_nil:w }
+
+ % character slot:
+ \seq_map_inline:Nn \g_@@_char_range_seq
+ {
+ \@@_int_if_slot_is_last_in_range:nnT {#1} {##1}
+ { \seq_gremove_all:Nn \g_@@_char_range_seq {##1} }
+
+ \@@_int_if_slot_in_range:nnT {#1} {##1}
+ { \seq_map_break:n { \use_none_delimit_by_q_nil:w } }
+ }
+
+ % the following expands to nil if no match was found:
+ \use_none:nnn
+ \q_nil
+ \use:n
+ {
+ \cs_if_eq:NNT #2 \mathalpha
+ {
+ \clist_put_right:Nx \l_@@_mathmap_charints_clist { \int_eval:n {#1} }
+ }
+ #3
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_int_if_slot_in_range:nnT}
+% Pretty basic comma separated range processing.
+% Donald Arseneau's \pkg{selectp} package has a cleverer technique.
+%
+% A `numrange' is like |-2,5-8,12,17-| (can be unsorted).
+%
+% Four cases, four argument types:
+% \begin{Verbatim}
+% input #2 #3 #4
+% "1 " [ 1] - [qn] - [ ] qs
+% "1- " [ 1] - [ ] - [qn-] qs
+% " -3" [ ] - [ 3] - [qn-] qs
+% "1-3" [ 1] - [ 3] - [qn-] qs
+% \end{Verbatim}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_int_if_slot_in_range:nnT
+ {
+ \@@_numrange_parse:nwT {#1} #2 - \q_nil - \q_stop {#3}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_numrange_parse:nwT #1 #2 - #3 - #4 \q_stop #5
+ {
+ \tl_if_empty:nTF {#4} { \int_compare:nT {#1=#2} {#5} }
+ {
+ \tl_if_empty:nTF {#3} { \int_compare:nT {#1>=#2} {#5} }
+ {
+ \tl_if_empty:nTF {#2} { \int_compare:nT {#1<=#3} {#5} }
+ {
+ \int_compare:nT {#1>=#2} { \int_compare:nT {#1<=#3} {#5} }
+ } } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_int_if_slot_is_last_in_range:nnT
+ {
+ \@@_numrange_last_parse:nwT {#1} #2 - \q_nil - \q_stop {#3}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_numrange_last_parse:nwT #1 #2 - #3 - #4 \q_stop #5
+ {
+ \tl_if_empty:nTF {#4} { \int_compare:nT {#1==#2} {#5} }
+ {
+ \tl_if_empty:nTF {#2} { \int_compare:nT {#1==#3} {#5} }
+ {
+ \int_compare:nT {#1==#3} {#5}
+ } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-fontparam.dtx b/macros/latex/contrib/unicode-math/um-code-fontparam.dtx
new file mode 100644
index 0000000000..b801b6c0b9
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-fontparam.dtx
@@ -0,0 +1,345 @@
+%%^^A%% um-code-fontparam.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Cross-platform interface for font parameters
+
+% \section{Cross-platform interface for font parameters}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \XeTeX\ and \LuaTeX\ have different interfaces for math font parameters.
+% We use \LuaTeX’s interface because it’s much better, but rename the primitives to be more \LaTeX3-like.
+% There are getter and setter commands for each font parameter.
+% The names of the parameters is derived from the \LuaTeX\ names, with underscores inserted between words.
+% For every parameter \cs{Umath\meta{\LuaTeX\ name}}, we define an expandable getter command \cs{@@_\meta{\LaTeX3 name}:N} and a protected setter command \cs{@@_set_\meta{\LaTeX3 name}:Nn}.
+% The getter command takes one of the style primitives (\cs{displaystyle} etc.)\ and expands to the font parameter, which is a \meta{dimension}.
+% The setter command takes a style primitive and a dimension expression, which is parsed with \cs{dim_eval:n}.
+%
+% Often, the mapping between font dimensions and font parameters is bijective, but there are cases which require special attention:
+% \begin{itemize}
+% \item Some parameters map to different dimensions in display and non-display styles.
+% \item Likewise, one parameter maps to different dimensions in non-cramped and cramped styles.
+% \item There are a few parameters for which \XeTeX\ doesn’t seem to provide \cs{fontdimen}s; in this case the getter and setter commands are left undefined.
+% \end{itemize}
+%
+% \paragraph{Cramped style tokens}
+% \LuaTeX\ has \cs{crampeddisplaystyle} etc.,\ but they are loaded as \cs{luatexcrampeddisplaystyle} etc.\ by the \pkg{luatextra} package.
+% \XeTeX, however, doesn’t have these primitives, and their syntax cannot really be emulated.
+% Nevertheless, we define these commands as quarks, so they can be used as arguments to the font parameter commands (but nowhere else).
+% Making these commands available is necessary because we need to make a distinction between cramped and non-cramped styles for one font parameter.
+%
+% \begin{macro}{\@@_new_cramped_style:N}
+% \darg{command}
+% Define \meta{command} as a new cramped style switch.
+% For \LuaTeX, simply rename the correspronding primitive if it is not
+% already defined.
+% For \XeTeX, define \meta{command} as a new quark.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_new_cramped_style:N
+%<XE> { \tl_const:Nn #1 { \use_none:n #1 } }
+%<LU> {
+%<LU> \cs_if_exist:NF #1
+%<LU> { \cs_new_eq:Nc #1 { luatex \cs_to_str:N #1 } }
+%<LU> }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\crampeddisplaystyle}
+% \begin{macro}{\crampedtextstyle}
+% \begin{macro}{\crampedscriptstyle}
+% \begin{macro}{\crampedscriptscriptstyle}
+% The cramped style commands.
+% \begin{macrocode}
+\@@_new_cramped_style:N \crampeddisplaystyle
+\@@_new_cramped_style:N \crampedtextstyle
+\@@_new_cramped_style:N \crampedscriptstyle
+\@@_new_cramped_style:N \crampedscriptscriptstyle
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{Font dimension mapping}
+% Font parameters may differ between the styles.
+% \LuaTeX\ accounts for this by having the parameter primitives take a style token argument.
+% To replicate this behavior in \XeTeX, we have to map style tokens to specific combinations of font dimension numbers and math fonts (\cs{textfont} etc.).
+%
+% \begin{macro}{\@@_font_dimen:Nnnnn}
+% \darg{style token}
+% \darg{font dimen for display style}
+% \darg{font dimen for cramped display style}
+% \darg{font dimen for non-display styles}
+% \darg{font dimen for cramped non-display styles}
+% Map math style to \XeTeX\ math font dimension.
+% \meta{style token} must be one of the style switches (\cs{displaystyle}, \cs{crampeddisplaystyle}, \dots).
+% The other parameters are integer constants referring to font dimension numbers.
+% The macro expands to a dimension which contains the appropriate font dimension.
+% \begin{macrocode}
+%<*XE>
+ \cs_new_nopar:Npn \@@_font_dimen:Nnnnn #1 #2 #3 #4 #5 {
+ \fontdimen
+ \cs_if_eq:NNTF #1 \displaystyle {
+ #2 \textfont
+ } {
+ \cs_if_eq:NNTF #1 \crampeddisplaystyle {
+ #3 \textfont
+ } {
+ \cs_if_eq:NNTF #1 \textstyle {
+ #4 \textfont
+ } {
+ \cs_if_eq:NNTF #1 \crampedtextstyle {
+ #5 \textfont
+ } {
+ \cs_if_eq:NNTF #1 \scriptstyle {
+ #4 \scriptfont
+ } {
+ \cs_if_eq:NNTF #1 \crampedscriptstyle {
+ #5 \scriptfont
+ } {
+ \cs_if_eq:NNTF #1 \scriptscriptstyle {
+ #4 \scriptscriptfont
+ } {
+% \end{macrocode}
+% Should we check here if the style is invalid?
+% \begin{macrocode}
+ #5 \scriptscriptfont
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% Which family to use?
+% \begin{macrocode}
+ 2~
+ }
+%</XE>
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Font parameters}
+% This paragraph contains macros for defining the font parameter interface, as well as the definition for all font parameters known to \LuaTeX.
+%
+% \begin{macro}{\@@_font_param:nnnnn}
+% \darg{name}
+% \darg{font dimension for non-cramped display style}
+% \darg{font dimension for cramped display style}
+% \darg{font dimension for non-cramped non-display styles}
+% \darg{font dimension for cramped non-display styles}
+% This macro defines getter and setter functions for the font parameter \meta{name}.
+% The \LuaTeX\ font parameter name is produced by removing all underscores and prefixing the result with |Umath|.
+% The \XeTeX\ font dimension numbers must be integer constants.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_font_param:nnnnn
+%<*XE>
+ {
+ \@@_font_param_aux:ccnnnn { @@_ #1 :N } { @@_set_ #1 :Nn }
+ { #2 } { #3 } { #4 } { #5 }
+ }
+%</XE>
+%<*LU>
+ {
+ \tl_set:Nn \l_@@_tmpa_tl { #1 }
+ \tl_remove_all:Nn \l_@@_tmpa_tl { _ }
+ \@@_font_param_aux:ccc { @@_ #1 :N } { @@_set_ #1 :Nn }
+ { Umath \l_@@_tmpa_tl }
+ }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_font_param:nnn}
+% \darg{name}
+% \darg{font dimension for display style}
+% \darg{font dimension for non-display styles}
+% This macro defines getter and setter functions for the font parameter \meta{name}.
+% The \LuaTeX\ font parameter name is produced by removing all underscores and prefixing the result with |Umath|.
+% The \XeTeX\ font dimension numbers must be integer constants.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_font_param:nnn
+ {
+ \@@_font_param:nnnnn { #1 } { #2 } { #2 } { #3 } { #3 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_font_param:nn}
+% \darg{name}
+% \darg{font dimension}
+% This macro defines getter and setter functions for the font parameter \meta{name}.
+% The \LuaTeX\ font parameter name is produced by removing all underscores and prefixing the result with |Umath|.
+% The \XeTeX\ font dimension number must be an integer constant.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_font_param:nn
+ {
+ \@@_font_param:nnnnn { #1 } { #2 } { #2 } { #2 } { #2 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_font_param:n}
+% \darg{name}
+% This macro defines getter and setter functions for the font parameter \meta{name}, which is considered unavailable in \XeTeX\@.
+% The \LuaTeX\ font parameter name is produced by removing all underscores and prefixing the result with |Umath|.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_font_param:n
+%<XE> { }
+%<LU> { \@@_font_param:nnnnn { #1 } { 0 } { 0 } { 0 } { 0 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_font_param_aux:NNnnnn}
+% \begin{macro}{\@@_font_param_aux:NNN}
+% Auxiliary macros for generating font parameter accessor macros.
+% \begin{macrocode}
+%<*XE>
+\cs_new_protected_nopar:Nn \@@_font_param_aux:NNnnnn
+ {
+ \cs_new_nopar:Npn #1 ##1
+ {
+ \@@_font_dimen:Nnnnn ##1 { #3 } { #4 } { #5 } { #6 }
+ }
+ \cs_new_protected_nopar:Npn #2 ##1 ##2
+ {
+ #1 ##1 \dim_eval:n { ##2 }
+ }
+ }
+\cs_generate_variant:Nn \@@_font_param_aux:NNnnnn { cc }
+%</XE>
+%<*LU>
+\cs_new_protected_nopar:Nn \@@_font_param_aux:NNN
+ {
+ \cs_new_nopar:Npn #1 ##1
+ {
+ #3 ##1
+ }
+ \cs_new_protected_nopar:Npn #2 ##1 ##2
+ {
+ #3 ##1 \dim_eval:n { ##2 }
+ }
+ }
+\cs_generate_variant:Nn \@@_font_param_aux:NNN { ccc }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now all font parameters that are listed in the \LuaTeX\ reference follow.
+% \begin{macrocode}
+\@@_font_param:nn { axis } { 15 }
+\@@_font_param:nn { operator_size } { 13 }
+\@@_font_param:n { fraction_del_size }
+\@@_font_param:nnn { fraction_denom_down } { 45 } { 44 }
+\@@_font_param:nnn { fraction_denom_vgap } { 50 } { 49 }
+\@@_font_param:nnn { fraction_num_up } { 43 } { 42 }
+\@@_font_param:nnn { fraction_num_vgap } { 47 } { 46 }
+\@@_font_param:nn { fraction_rule } { 48 }
+\@@_font_param:nn { limit_above_bgap } { 29 }
+\@@_font_param:n { limit_above_kern }
+\@@_font_param:nn { limit_above_vgap } { 28 }
+\@@_font_param:nn { limit_below_bgap } { 31 }
+\@@_font_param:n { limit_below_kern }
+\@@_font_param:nn { limit_below_vgap } { 30 }
+\@@_font_param:nn { over_delimiter_vgap } { 41 }
+\@@_font_param:nn { over_delimiter_bgap } { 38 }
+\@@_font_param:nn { under_delimiter_vgap } { 40 }
+\@@_font_param:nn { under_delimiter_bgap } { 39 }
+\@@_font_param:nn { overbar_kern } { 55 }
+\@@_font_param:nn { overbar_rule } { 54 }
+\@@_font_param:nn { overbar_vgap } { 53 }
+\@@_font_param:n { quad }
+\@@_font_param:nn { radical_kern } { 62 }
+\@@_font_param:nn { radical_rule } { 61 }
+\@@_font_param:nnn { radical_vgap } { 60 } { 59 }
+\@@_font_param:nn { radical_degree_before } { 63 }
+\@@_font_param:nn { radical_degree_after } { 64 }
+\@@_font_param:nn { radical_degree_raise } { 65 }
+\@@_font_param:nn { space_after_script } { 27 }
+\@@_font_param:nnn { stack_denom_down } { 35 } { 34 }
+\@@_font_param:nnn { stack_num_up } { 33 } { 32 }
+\@@_font_param:nnn { stack_vgap } { 37 } { 36 }
+\@@_font_param:nn { sub_shift_down } { 18 }
+\@@_font_param:nn { sub_shift_drop } { 20 }
+\@@_font_param:n { subsup_shift_down }
+\@@_font_param:nn { sub_top_max } { 19 }
+\@@_font_param:nn { subsup_vgap } { 25 }
+\@@_font_param:nn { sup_bottom_min } { 23 }
+\@@_font_param:nn { sup_shift_drop } { 24 }
+\@@_font_param:nnnnn { sup_shift_up } { 21 } { 22 } { 21 } { 22 }
+\@@_font_param:nn { supsub_bottom_max } { 26 }
+\@@_font_param:nn { underbar_kern } { 58 }
+\@@_font_param:nn { underbar_rule } { 57 }
+\@@_font_param:nn { underbar_vgap } { 56 }
+\@@_font_param:n { connector_overlap_min }
+% \end{macrocode}
+%
+% \subsection{Historical commands}
+%
+% \begin{macro}{\@@_fontdimen_to_percent:nN}
+% \begin{macro}{\@@_fontdimen_pc_to_pt:nN}
+% \darg{Font dimen number}
+% \darg{Font `variable'}
+% \cmd\fontdimen s |10|, |11|, and |65| aren't actually dimensions, they're percentage values given in units of |sp|.
+% \cs{@@_fontdimen_to_percent:nn} takes a font dimension number and outputs the decimal value of the associated parameter.
+% \cs{@@_fontdimen_pc_to_pt:nn} returns a dimension correspond to the current
+% font size relative proportion based on that percentage.
+% \begin{macrocode}
+\cs_set:Nn \@@_fontdimen_to_percent:nN
+ {
+ \fp_eval:n { \dim_to_decimal_in_sp:n { \fontdimen #1 #2 } / 100 }
+ }
+\cs_new:Nn \@@_fontdimen_pc_to_pt:nN
+ {
+ \fp_eval:n { \dim_to_decimal_in_sp:n { \fontdimen #1 #2 } / 100 * \f@size }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathstyle_scale:NnnN}
+% \darg{A math style (\cs{scriptstyle}, say)}
+% \darg{Macro that takes a non-delimited length argument (like \cmd\kern)}
+% \darg{Length control sequence to be scaled according to the math style}
+% \darg{Math font face to use for the lookups}
+% This macro is used to scale the lengths reported by \cmd\fontdimen\ according to the scale factor for script- and scriptscript-size objects.
+% \begin{macrocode}
+\cs_new:Nn \@@_mathstyle_scale:NnnN
+ {
+ \ifx#1\scriptstyle
+ #2 \@@_fontdimen_to_percent:nN {10} #4 #3
+ \else
+ \ifx#1\scriptscriptstyle
+ #2 \@@_fontdimen_to_percent:nN {11} #4 #3
+ \else
+ #2 #3
+ \fi
+ \fi
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-main.dtx b/macros/latex/contrib/unicode-math/um-code-main.dtx
new file mode 100644
index 0000000000..2c6e7bb7db
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-main.dtx
@@ -0,0 +1,700 @@
+%%^^A%% um-code-main.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Definition of `\setmainfont`.
+
+% \section{The main \cs{setmathfont} macro}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\@@_setmathfont:nn}
+% \darg{keyval options}
+% \darg{font name/file}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setmathfont:nn
+ {
+% \end{macrocode}
+% \begin{itemize}
+% \item Initialise all local variables.
+% \item
+% Erase any conception \LaTeX\ has of previously defined math symbol fonts;
+% this allows \cmd\DeclareSymbolFont\ at any point in the document.
+% \item
+% Grab the current size information:
+% (is this robust enough? Maybe it should be preceded by \cmd\normalsize).
+% The macro \cmd\S@\meta{size}
+% contains the definitions of the sizes used for maths letters, subscripts and subsubscripts in
+% \cmd\tf@size, \cmd\sf@size, and \cmd\ssf@size, respectively.
+% \end{itemize}
+% \begin{macrocode}
+
+ \@@_init:n {#2}
+ \cs_set_eq:NN \glb@currsize \scan_stop:
+ \cs_if_exist:cF { S@ \f@size } { \calculate@math@sizes }
+ \use:c { S@ \f@size }
+
+ \keys_set_known:nnN {unicode-math} {#1} \l_@@_unknown_keys_clist
+
+ \bool_if:NT \g_@@_init_bool \@@_fontspec_trial_font:
+ \bool_if:NT \g_@@_init_bool \@@_declare_math_sizes:
+
+ \@@_fontspec_select_font:
+ \@@_setup_math_fam:
+ \bool_if:NT \g_@@_init_bool
+ {
+ \@@_setup_legacy_fam_two:
+ \@@_setup_legacy_fam_three:
+ }
+
+ \@@_input_math_symbol_table:
+
+% \end{macrocode}
+% \begin{itemize}
+% \item the `once-off' setup that doesn't need to be per-font
+% \item remap symbols that don't take their natural mathcode;
+% \item activate any symbols that need to be math-active;
+% \item assign delimiter codes for symbols that need to grow;
+% \item setup the maths alphabets (\cs{symbf} etc.) ---
+% this is an extensive part of the code; see Section~\ref{sec:mathmap};
+% \end{itemize}
+% \begin{macrocode}
+ \bool_if:NT \g_@@_init_bool \@@_onceoff_setup:
+ \@@_remap_symbols:
+ \@@_setup_mathactives:
+ \@@_setup_delcodes:
+ \@@_setup_alphabets:
+
+ %% TODO: what of the above should only be run for the "default"/"main" font?
+
+ \bool_if:NTF \g_@@_init_bool
+ {
+ \bool_gset_true:N \g_@@_main_font_defined_bool
+%<LU> \@@_mathparam_store:
+ \@@_log:n {default-math-font}
+ }
+ {
+%<LU> \@@_mathparam_restore:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Fall-back font}
+%
+% Want to load Latin Modern Math if nothing else.
+% This needs to happen early so that all of the font-loading machinery executes before
+% the other `AtBeginDocument' code.
+% \begin{macrocode}
+\AtBeginDocument { \bool_if:NF \g_@@_main_font_defined_bool \@@_load_lm: }
+\@@_cs_new:Nn \@@_load_lm:
+ {
+ \setmathfont{latinmodern-math.otf}[BoldFont={latinmodern-math.otf}]
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_init:n}
+% Reset local variables.
+% Default to defining the font for every math symbol character.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_init:n
+ {
+ \tl_set:Nn \l_@@_fontname_tl {#1}
+ \bool_gset_true:N \g_@@_ot_math_bool
+ \tl_set:Nn \l_@@_mversion_tl {normal}
+ \tl_set:Nn \l_@@_symfont_label_tl {operators}
+
+ \tl_set:Nn \l_@@_script_features_tl {Style=MathScript}
+ \tl_set:Nn \l_@@_sscript_features_tl {Style=MathScriptScript}
+ \tl_set_eq:NN \l_@@_script_font_tl \l_@@_fontname_tl
+ \tl_set_eq:NN \l_@@_sscript_font_tl \l_@@_fontname_tl
+
+ \bool_gset_true:N \g_@@_init_bool
+ \seq_gclear:N \g_@@_char_range_seq
+ \clist_clear:N \l_@@_mathmap_charints_clist
+ \seq_gclear:N \g_@@_mathalph_seq
+ \seq_clear:N \l_@@_missing_alph_seq
+
+ \cs_set_eq:NN \_@@_sym:nnn \@@_process_symbol_noparse:nnn
+ \cs_set_eq:NN \@@_remap_symbol:nnn \@@_remap_symbol_noparse:nnn
+ \cs_set_eq:NN \@@_maybe_init_alphabet:n \@@_init_alphabet:n
+ \cs_set_eq:NN \@@_assign_delcode:nn \@@_assign_delcode_noparse:nn
+ \cs_set_eq:NN \@@_make_mathactive:nNN \@@_make_mathactive_noparse:nNN
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_declare_math_sizes:}
+% Set the math sizes according to the recommended font parameters.
+% \begin{macrocode}
+\tl_new:N \g_@@_main_font_cmd_tl
+\cs_new:Nn \@@_sf_size: { \@@_fontdimen_pc_to_pt:nN {10} \g_@@_trial_font }
+\cs_new:Nn \@@_ssf_size: { \@@_fontdimen_pc_to_pt:nN {11} \g_@@_trial_font }
+\@@_cs_new:Nn \@@_declare_math_sizes:
+ {
+ \fp_gset:Nn \g_@@_size_tfsf_fp { (\f@size + \@@_sf_size: )/2 }
+ \fp_gset:Nn \g_@@_size_sfssf_fp { (\@@_sf_size: + \@@_ssf_size:)/2 }
+
+ \dim_compare:nF { \fontdimen 10 \g_@@_trial_font == 0pt }
+ {
+ \DeclareMathSizes { \f@size } { \f@size } { \@@_sf_size: } { \@@_ssf_size: }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\@@_fontspec_trial_font:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_fontspec_trial_font:
+ {
+ \tl_set:Nx \l_@@_font_keyval_tl
+ {
+%<LU> Renderer = Basic,
+ BoldItalicFont = {}, ItalicFont = {}, SmallCapsFont = {},
+ Script = Math,
+%<LU> FontAdjustment = { \@@_luatex_copy_fontdimens: },
+ \l_@@_unknown_keys_clist
+ }
+
+ \fontspec_set_family:Nxn \l_@@_trial_family_tl {\l_@@_font_keyval_tl} {\l_@@_fontname_tl}
+
+ \group_begin:
+ \fontfamily { \l_@@_trial_family_tl } \selectfont
+ \exp_last_unbraced:NNo \@@_fontface_gset_eq:NN \g_@@_trial_font \font@name
+ \fontspec_if_script:nF {math}
+ {
+ \@@_warning:n {not-ot-math}
+ \bool_gset_false:N \g_@@_ot_math_bool
+ \bool_gset_false:N \g_@@_init_bool
+ }
+ \group_end:
+
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fontspec_select_font:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_fontspec_select_font:
+ {
+ \tl_set:Nx \l_@@_font_keyval_tl
+ {
+%<LU> Renderer = Basic,
+ BoldItalicFont = {}, ItalicFont = {}, SmallCapsFont = {},
+ Script = Math,
+ SizeFeatures =
+ {
+ {
+ Size = \fp_use:N \g_@@_size_tfsf_fp -
+ } ,
+ {
+ Size = \fp_use:N \g_@@_size_sfssf_fp - \fp_use:N \g_@@_size_tfsf_fp ,
+ Font = \l_@@_script_font_tl ,
+ \l_@@_script_features_tl
+ } ,
+ {
+ Size = - \fp_use:N \g_@@_size_sfssf_fp ,
+ Font = \l_@@_sscript_font_tl ,
+ \l_@@_sscript_features_tl
+ }
+ } ,
+%<LU> FontAdjustment = { \@@_luatex_copy_fontdimens: },
+ \l_@@_unknown_keys_clist
+ }
+
+ \fontspec_set_family:Nxn \l_@@_family_tl {\l_@@_font_keyval_tl} {\l_@@_fontname_tl}
+
+ \int_gincr:N \g_@@_fonts_used_int
+ \group_begin:
+ \fontfamily { \l_@@_family_tl } \selectfont
+ \exp_last_unbraced:Nno \@@_fontface_gset_eq:cN {g_@@_mathfont_ \int_use:N \g_@@_fonts_used_int _font} \font@name
+ \tl_gset:Nx \g_@@_curr_font_cmd_tl { \exp_not:c {g_@@_mathfont_ \int_use:N \g_@@_fonts_used_int _font} }
+ \bool_if:NT \g_@@_init_bool
+ {
+ \exp_last_unbraced:NNo \@@_fontface_gset_eq:NN \l_@@_font \font@name
+ }
+ \group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\tl_gset:Nn \g_@@_main_font_cmd_tl { \l_@@_font }
+\tl_gset:Nn \g_@@_sqrt_font_cmd_tl { \l_@@_font }
+\tl_gset:Nn \g_@@_prime_font_cmd_tl { \l_@@_font }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_luatex_copy_fontdimens:}
+% This performs a once-off copy of the LuaTeX math params into XeTeX-like fontdimens.
+% While the list is somewhat comprehensive, these are really only for backwards compatibility
+% and to allow a little shared code. They shouldn't be relied upon, since LuaTeX users
+% might change the math params, which wouldn't be reflected in the fontdimens.
+% \begin{macrocode}
+%<*LU>
+\@@_cs_new:Nn \@@_luatex_copy_fontdimens:
+ {
+ \@@_fontdimen_from_param:nn {10} {ScriptPercentScaleDown}
+ \@@_fontdimen_from_param:nn {11} {ScriptScriptPercentScaleDown}
+ \@@_fontdimen_from_param:nn {15} {AxisHeight}
+ \@@_fontdimen_from_param:nn {18} {SubscriptShiftDown}
+ \@@_fontdimen_from_param:nn {20} {SubscriptBaselineDropMin}
+ \@@_fontdimen_from_param:nn {21} {SuperscriptShiftUp}
+ \@@_fontdimen_from_param:nn {22} {SuperscriptShiftUpCramped}
+ \@@_fontdimen_from_param:nn {24} {SuperscriptBaselineDropMax}
+ \@@_fontdimen_from_param:nn {28} {UpperLimitGapMin}
+ \@@_fontdimen_from_param:nn {29} {UpperLimitBaselineRiseMin}
+ \@@_fontdimen_from_param:nn {30} {LowerLimitGapMin}
+ \@@_fontdimen_from_param:nn {31} {LowerLimitBaselineDropMin}
+ \@@_fontdimen_from_param:nn {32} {StackTopShiftUp}
+ \@@_fontdimen_from_param:nn {42} {FractionNumeratorShiftUp}
+ \@@_fontdimen_from_param:nn {43} {FractionNumeratorDisplayStyleShiftUp}
+ \@@_fontdimen_from_param:nn {44} {FractionDenominatorShiftDown}
+ \@@_fontdimen_from_param:nn {45} {FractionDenominatorDisplayStyleShiftDown}
+ \@@_fontdimen_from_param:nn {48} {FractionRuleThickness}
+ }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_math_fam:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_math_fam:
+ {
+ \cs_if_exist:cF { sym \l_@@_symfont_label_tl }
+ {
+ \DeclareSymbolFont{\l_@@_symfont_label_tl}
+ {\encodingdefault}{\l_@@_family_tl}{\mddefault}{\updefault}
+ }
+ \SetSymbolFont{\l_@@_symfont_label_tl}{\l_@@_mversion_tl}
+ {\encodingdefault}{\l_@@_family_tl}{\mddefault}{\updefault}
+% \end{macrocode}
+% Set the bold math version.
+% \begin{macrocode}
+ \str_if_eq:eeT {\l_@@_mversion_tl} {normal}
+ {
+ \SetSymbolFont{\l_@@_symfont_label_tl}{bold}
+ {\encodingdefault}{\l_@@_family_tl}{\bfdefault}{\updefault}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_legacy_fam_two:}
+% \TeX\ won't load the same font twice at the same scale, so we need to magnify this one by an imperceptable amount.
+% Note that for extreme font sizes, this scaling value might need to be adjusted.
+% 1.0001 should be enough for reasonable use cases however.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_legacy_fam_two:
+ {
+ \fontspec_set_family:Nxn \l_@@_fam_two_tl
+ {
+ \l_@@_font_keyval_tl,
+ ScaleAgain = 1.0001,
+ FontAdjustment =
+ {
+ \@@_copy_fontdimen:nnN { 8} {43} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN { 9} {42} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {10} {32} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {11} {45} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {12} {44} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {13} {21} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {14} {21} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {15} {22} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {16} {18} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {17} {18} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {18} {24} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {19} {20} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {22} {15} \g_@@_main_font_cmd_tl
+ \@@_zero_fontdimen:n {20} % delim1 = FractionDelimiterDisplaySize
+ \@@_zero_fontdimen:n {21} % delim2 = FractionDelimiterSize
+ }
+ } {\l_@@_fontname_tl}
+
+ \SetSymbolFont{symbols}{\l_@@_mversion_tl}
+ {\encodingdefault}{\l_@@_fam_two_tl}{\mddefault}{\updefault}
+
+ \str_if_eq:eeT {\l_@@_mversion_tl} {normal}
+ {
+ \SetSymbolFont{symbols}{bold}
+ {\encodingdefault}{\l_@@_fam_two_tl}{\bfdefault}{\updefault}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_legacy_fam_three:}
+% Similarly, this font is shrunk by an imperceptable amount for \TeX\ to load it again.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_legacy_fam_three:
+ {
+ \fontspec_set_family:Nxn \l_@@_fam_three_tl
+ {
+ \l_@@_font_keyval_tl,
+ ScaleAgain = 0.9999,
+ FontAdjustment = {
+ \@@_copy_fontdimen:nnN { 8} {48} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN { 9} {28} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {10} {30} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {11} {29} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {12} {31} \g_@@_main_font_cmd_tl
+ \@@_zero_fontdimen:n {13}
+ }
+ } {\l_@@_fontname_tl}
+
+ \SetSymbolFont{largesymbols}{\l_@@_mversion_tl}
+ {\encodingdefault}{\l_@@_fam_three_tl}{\mddefault}{\updefault}
+
+ \str_if_eq:eeT {\l_@@_mversion_tl} {normal}
+ {
+ \SetSymbolFont{largesymbols}{bold}
+ {\encodingdefault}{\l_@@_fam_three_tl}{\bfdefault}{\updefault}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_onceoff_setup:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_onceoff_setup:
+ {
+ \@@_set_delcode:nnn {operators} {`\.} {0}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Functions for setting up symbols with mathcodes}
+% \seclabel{mathsymbol}
+%
+% \begin{macro}{\@@_process_symbol_noparse:nnn}
+% \begin{macro}{\@@_process_symbol_parse:nnn}
+% If the \feat{range} font feature has been used, then only
+% a subset of the Unicode glyphs are to be defined.
+% See \secref{rangeproc} for the code that enables this.
+% \begin{macrocode}
+\cs_set:Nn \@@_process_symbol_noparse:nnn
+ {
+ \@@_set_mathsymbol:nNNn {\l_@@_symfont_label_tl} #2 #3 {#1}
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_set:Nn \@@_process_symbol_parse:nnn
+ {
+ \@@_if_char_spec:nNT {#1} {#3}
+ {
+ \@@_process_symbol_noparse:nnn {#1} {#2} {#3}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_remap_symbols:}
+% This function is used to define the mathcodes for those chars which should
+% be mapped to a different glyph than themselves.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_remap_symbols:
+ {
+ \@@_remap_symbol:nnn {`\-} {\mathbin} {"2212}
+ \@@_remap_symbol:nnn {`\*} {\mathbin} {"02217}% text asterisk to "centred asterisk"
+ \bool_if:NF \g_@@_literal_colon_bool
+ {
+ \@@_remap_symbol:nnn {`\:} {\mathrel} {"02236}% colon to ratio (i.e., punct to rel)
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_remap_symbol_noparse:nnn}
+% \begin{macro}{\@@_remap_symbol_parse:nnn}
+% Where |\@@_remap_symbol:nnn| is defined to be one of these two, depending
+% on the range setup:
+% \begin{macrocode}
+\cs_new:Nn \@@_remap_symbol_parse:nnn
+ {
+ \@@_if_char_spec:nNT {#3} {#2}
+ { \@@_remap_symbol_noparse:nnn {#1} {#2} {#3} }
+ }
+\cs_new:Nn \@@_remap_symbol_noparse:nnn
+ {
+ \clist_map_inline:nn {#1}
+ { \@@_set_mathcode:nnnn {##1} {#2} {\l_@@_symfont_label_tl} {#3} }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Active math characters}
+%
+% There are more math active chars later in the subscript/superscript section.
+% But they don't need to be able to be typeset directly.
+%
+% \begin{macro}{\@@_setup_mathactives:}
+% TODO: if not an OpenType math font, we should ignore doing anything with primes.
+% This needs a revamped `range` feature, I think.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_mathactives:
+ {
+ \@@_make_mathactive:nNN {"2032} \@@_prime_single_mchar \mathord
+ \@@_make_mathactive:nNN {"2033} \@@_prime_double_mchar \mathord
+ \@@_make_mathactive:nNN {"2034} \@@_prime_triple_mchar \mathord
+ \@@_make_mathactive:nNN {"2057} \@@_prime_quad_mchar \mathord
+ \@@_make_mathactive:nNN {"2035} \@@_backprime_single_mchar \mathord
+ \@@_make_mathactive:nNN {"2036} \@@_backprime_double_mchar \mathord
+ \@@_make_mathactive:nNN {"2037} \@@_backprime_triple_mchar \mathord
+ \@@_make_mathactive:nNN {`\'} \mathstraightquote \mathord
+ \@@_make_mathactive:nNN {`\`} \mathbacktick \mathord
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_make_mathactive:nNN}
+% Makes |#1| a mathactive char, and gives cs |#2| the meaning of mathchar |#1|
+% with class |#3|.
+% You are responsible for giving active |#1| a particular meaning!
+% \begin{macrocode}
+\cs_new:Nn \@@_make_mathactive_parse:nNN
+ {
+ \@@_if_char_spec:nNT {#1} #3
+ { \@@_make_mathactive_noparse:nNN {#1} #2 #3 }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_make_mathactive_noparse:nNN
+ {
+ \@@_set_mathchar:NNnn #2 #3 {\l_@@_symfont_label_tl} {#1}
+ \@@_char_gmake_mathactive:n {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Delimiter codes}
+%
+% \begin{macro}{\@@_assign_delcode:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_assign_delcode_noparse:nn
+ {
+ \@@_set_delcode:nnn \l_@@_symfont_label_tl {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_assign_delcode_parse:nn
+ {
+ \@@_if_char_spec:nNT {#2} \@nil
+ {
+ \@@_assign_delcode_noparse:nn {#1} {#2}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_assign_delcode:n}
+% Shorthand.
+% \begin{macrocode}
+\cs_new:Nn \@@_assign_delcode:n { \@@_assign_delcode:nn {#1} {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_delcodes:}
+% Some symbols that aren't mathopen/mathclose still need to have delimiter codes assigned.
+% The list of vertical arrows may be incomplete.
+% On the other hand, many fonts won't support them all being stretchy.
+% And some of them are probably not meant to stretch, either. But adding them here doesn't hurt.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_delcodes:
+ {
+ \@@_assign_delcode:nn {`\/} {\g_@@_slash_delimiter_usv}
+ \@@_assign_delcode:nn {"2044} {\g_@@_slash_delimiter_usv} % fracslash
+ \@@_assign_delcode:nn {"2215} {\g_@@_slash_delimiter_usv} % divslash
+ \@@_assign_delcode:n {"005C} % backslash
+ \@@_assign_delcode:nn {`\<} {"27E8} % angle brackets with ascii notation
+ \@@_assign_delcode:nn {`\>} {"27E9} % angle brackets with ascii notation
+ \@@_assign_delcode:n {"2191} % up arrow
+ \@@_assign_delcode:n {"2193} % down arrow
+ \@@_assign_delcode:n {"2195} % updown arrow
+ \@@_assign_delcode:n {"219F} % up arrow twohead
+ \@@_assign_delcode:n {"21A1} % down arrow twohead
+ \@@_assign_delcode:n {"21A5} % up arrow from bar
+ \@@_assign_delcode:n {"21A7} % down arrow from bar
+ \@@_assign_delcode:n {"21A8} % updown arrow from bar
+ \@@_assign_delcode:n {"21BE} % up harpoon right
+ \@@_assign_delcode:n {"21BF} % up harpoon left
+ \@@_assign_delcode:n {"21C2} % down harpoon right
+ \@@_assign_delcode:n {"21C3} % down harpoon left
+ \@@_assign_delcode:n {"21C5} % arrows up down
+ \@@_assign_delcode:n {"21F5} % arrows down up
+ \@@_assign_delcode:n {"21C8} % arrows up up
+ \@@_assign_delcode:n {"21CA} % arrows down down
+ \@@_assign_delcode:n {"21D1} % double up arrow
+ \@@_assign_delcode:n {"21D3} % double down arrow
+ \@@_assign_delcode:n {"21D5} % double updown arrow
+ \@@_assign_delcode:n {"21DE} % up arrow double stroke
+ \@@_assign_delcode:n {"21DF} % down arrow double stroke
+ \@@_assign_delcode:n {"21E1} % up arrow dashed
+ \@@_assign_delcode:n {"21E3} % down arrow dashed
+ \@@_assign_delcode:n {"21E7} % up white arrow
+ \@@_assign_delcode:n {"21E9} % down white arrow
+ \@@_assign_delcode:n {"21EA} % up white arrow from bar
+ \@@_assign_delcode:n {"21F3} % updown white arrow
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{(Big) operators}
+%
+% The engine does what is necessary to deal with big operators for us
+% automatically with \cmd\Umathchardef.
+% However, the limits aren't set automatically; that is, we want to define,
+% a la Plain \TeX\ \etc, |\def\int{\intop\nolimits}|, so there needs to be a
+% transformation from \cmd\int\ to \cmd\intop\ during the expansion of
+% \cmd\_@@_sym:nnn\ in the appropriate contexts.
+%
+% \begin{macro}{\l_@@_nolimits_tl}
+% This macro is a sequence containing those maths operators that require a
+% \cmd\nolimits\ suffix.
+% This list is used when processing |unicode-math-table.tex| to define such
+% commands automatically (see the macro \cs{@@_set_mathsymbol:nNNn}).
+% I've chosen essentially just the operators that look like integrals;
+% hopefully a better mathematician can help me out here.
+% I've a feeling that it's more useful \emph{not} to include the multiple
+% integrals such as $\iiiint$, but that might be a matter of preference.
+% \begin{macrocode}
+\tl_set:Nn \l_@@_nolimits_tl
+ {
+ \int\iint\iiint\iiiint\oint\oiint\oiiint
+ \intclockwise\varointclockwise\ointctrclockwise\sumint
+ \intbar\intBar\fint\cirfnint\awint\rppolint
+ \scpolint\npolint\pointint\sqint\intlarhk\intx
+ \intcap\intcup\upint\lowint
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Radicals}
+%
+% \begin{macro}{\l_@@_radicals_tl}
+% The radicals are organised in \cs{@@_set_mathsymbol:nNNn}.
+% We organise radicals in the same way as nolimits-operators.
+% (\cs{cuberoot} and \cs{fourthroot}, don't seem to behave as proper radicals.)
+% \begin{macrocode}
+\tl_set:Nn \l_@@_radicals_tl {\sqrt \longdivision \cuberoot \fourthroot}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Fontdimens}
+%
+% \begin{macrocode}
+%<*LU>
+% \end{macrocode}
+%
+% \begin{macro}{\@@_mathparam_restore:}
+% \cs{glb@settings} might not be necessary but is included for symmetry.
+% If the maths font were to be loaded later it would clobber our mathparam settings, so
+% this seems like a sensible move.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_mathparam_restore:
+ {
+ \glb@settings
+ \tl_use:N \g_@@_mathparam_settings_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathparam_store:}
+% \cs{glb@settings} is called to force maths fonts loading \emph{now} so the mathparams
+% are up-to-date.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_mathparam_store:
+ {
+ \glb@settings
+ \tl_gset:Nx \g_@@_mathparam_settings_tl
+ {
+ \@@_mathparam_store_aux:N \displaystyle
+ \@@_mathparam_store_aux:N \textstyle
+ \@@_mathparam_store_aux:N \scriptstyle
+ \@@_mathparam_store_aux:N \scriptscriptstyle
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Nn \@@_mathparam_store_aux:N
+ {
+ \Umathquad #1 = \the \Umathquad #1 \scan_stop:
+ \Umathaxis #1 = \the \Umathaxis #1 \scan_stop:
+ \Umathoperatorsize #1 = \the \Umathoperatorsize #1 \scan_stop:
+ \Umathoverbarkern #1 = \the \Umathoverbarkern #1 \scan_stop:
+ \Umathoverbarrule #1 = \the \Umathoverbarrule #1 \scan_stop:
+ \Umathoverbarvgap #1 = \the \Umathoverbarvgap #1 \scan_stop:
+ \Umathunderbarkern #1 = \the \Umathunderbarkern #1 \scan_stop:
+ \Umathunderbarrule #1 = \the \Umathunderbarrule #1 \scan_stop:
+ \Umathunderbarvgap #1 = \the \Umathunderbarvgap #1 \scan_stop:
+ \Umathradicalkern #1 = \the \Umathradicalkern #1 \scan_stop:
+ \Umathradicalrule #1 = \the \Umathradicalrule #1 \scan_stop:
+ \Umathradicalvgap #1 = \the \Umathradicalvgap #1 \scan_stop:
+ \Umathradicaldegreebefore #1 = \the \Umathradicaldegreebefore #1 \scan_stop:
+ \Umathradicaldegreeafter #1 = \the \Umathradicaldegreeafter #1 \scan_stop:
+ \Umathradicaldegreeraise #1 = \the \Umathradicaldegreeraise #1 \scan_stop:
+ \Umathstackvgap #1 = \the \Umathstackvgap #1 \scan_stop:
+ \Umathstacknumup #1 = \the \Umathstacknumup #1 \scan_stop:
+ \Umathstackdenomdown #1 = \the \Umathstackdenomdown #1 \scan_stop:
+ \Umathfractionrule #1 = \the \Umathfractionrule #1 \scan_stop:
+ \Umathfractionnumvgap #1 = \the \Umathfractionnumvgap #1 \scan_stop:
+ \Umathfractionnumup #1 = \the \Umathfractionnumup #1 \scan_stop:
+ \Umathfractiondenomvgap #1 = \the \Umathfractiondenomvgap #1 \scan_stop:
+ \Umathfractiondenomdown #1 = \the \Umathfractiondenomdown #1 \scan_stop:
+ \Umathfractiondelsize #1 = \the \Umathfractiondelsize #1 \scan_stop:
+ \Umathlimitabovevgap #1 = \the \Umathlimitabovevgap #1 \scan_stop:
+ \Umathlimitabovebgap #1 = \the \Umathlimitabovebgap #1 \scan_stop:
+ \Umathlimitabovekern #1 = \the \Umathlimitabovekern #1 \scan_stop:
+ \Umathlimitbelowvgap #1 = \the \Umathlimitbelowvgap #1 \scan_stop:
+ \Umathlimitbelowbgap #1 = \the \Umathlimitbelowbgap #1 \scan_stop:
+ \Umathlimitbelowkern #1 = \the \Umathlimitbelowkern #1 \scan_stop:
+ \Umathoverdelimitervgap #1 = \the \Umathoverdelimitervgap #1 \scan_stop:
+ \Umathoverdelimiterbgap #1 = \the \Umathoverdelimiterbgap #1 \scan_stop:
+ \Umathunderdelimitervgap #1 = \the \Umathunderdelimitervgap #1 \scan_stop:
+ \Umathunderdelimiterbgap #1 = \the \Umathunderdelimiterbgap #1 \scan_stop:
+ \Umathsubshiftdrop #1 = \the \Umathsubshiftdrop #1 \scan_stop:
+ \Umathsubshiftdown #1 = \the \Umathsubshiftdown #1 \scan_stop:
+ \Umathsupshiftdrop #1 = \the \Umathsupshiftdrop #1 \scan_stop:
+ \Umathsupshiftup #1 = \the \Umathsupshiftup #1 \scan_stop:
+ \Umathsubsupshiftdown #1 = \the \Umathsubsupshiftdown #1 \scan_stop:
+ \Umathsubtopmax #1 = \the \Umathsubtopmax #1 \scan_stop:
+ \Umathsupbottommin #1 = \the \Umathsupbottommin #1 \scan_stop:
+ \Umathsupsubbottommax #1 = \the \Umathsupsubbottommax #1 \scan_stop:
+ \Umathsubsupvgap #1 = \the \Umathsubsupvgap #1 \scan_stop:
+ \Umathspaceafterscript #1 = \the \Umathspaceafterscript #1 \scan_stop:
+ \Umathconnectoroverlapmin #1 = \the \Umathconnectoroverlapmin #1 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</LU>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-mathmap.dtx b/macros/latex/contrib/unicode-math/um-code-mathmap.dtx
new file mode 100644
index 0000000000..e55fe07c2c
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-mathmap.dtx
@@ -0,0 +1,595 @@
+%%^^A%% um-code-mathmap.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Setup of symbol alphabets.
+
+% \section{Defining the math alphabets per style}
+% \label{sec:mathmap}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\@@_setup_alphabets:}
+% This function is called within \cs{setmathfont} to configure the
+% mapping between characters inside math styles. Three modes:
+% \begin{description}
+% \item[IMPLICIT] No ranges specified, set up everything
+% \item[EXPLICIT] Some ranges specified, set up what is requested only
+% \item[INHERIT] Of the slots in the ranges specified, compare against
+% slots in each styled alphabet and only set up those needed
+% \end{description}
+% The INHERIT mode saves less time than I was hoping for but is still beneficial
+% in simple cases.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_alphabets:
+ {
+ \bool_if:NTF \g_@@_init_bool { \@@_setup_alphabets_implicit: }
+ {
+ \seq_if_empty:NF \g_@@_mathalph_seq { \@@_setup_alphabets_explicit: }
+ \clist_if_empty:NF \l_@@_mathmap_charints_clist { \@@_setup_alphabets_inherit: }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_setup_alphabets_implicit:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_alphabets_implicit:
+ {
+ \@@_log:n {setup-implicit}
+ \seq_gset_eq:NN \g_@@_mathalph_seq \g_@@_default_mathalph_seq
+ \bool_set_true:N \l_@@_implicit_alph_bool
+ \@@_maybe_init_alphabet:n {sf}
+ \@@_maybe_init_alphabet:n {bf}
+ \@@_maybe_init_alphabet:n {bfsf}
+ \cs_set_eq:NN \@@_set_mathalphabet_char:nnn \@@_mathmap_noparse:nnn
+ \cs_set_eq:NN \@@_map_char_single:nn \@@_map_char_noparse:nn
+ \@@_mathalph_map:
+ \seq_if_empty:NF \l_@@_missing_alph_seq { \@@_log:n { missing-alphabets } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_setup_alphabets_explicit:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_alphabets_explicit:
+ {
+ \@@_log:n {setup-explicit}
+ \bool_set_false:N \l_@@_implicit_alph_bool
+ \cs_set_eq:NN \@@_set_mathalphabet_char:nnn \@@_mathmap_noparse:nnn
+ \cs_set_eq:NN \@@_map_char_single:nn \@@_map_char_noparse:nn
+ \@@_mathalph_map:
+ \seq_if_empty:NF \l_@@_missing_alph_seq { \@@_log:n { missing-alphabets } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_setup_alphabets_inherit:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_alphabets_inherit:
+ {
+ \seq_gclear:N \g_@@_mathalph_seq
+ \seq_map_inline:Nn \g_@@_default_mathalph_seq
+ {
+ \tl_set:No \l_@@_style_tl { \use_i:nnn ##1 }
+ \clist_set:No \l_@@_alphabet_clist { \use_ii:nnn ##1 }
+
+ \clist_map_inline:Nn \l_@@_alphabet_clist
+ {
+ \clist_if_exist:cT {g_@@_named_slots_ \l_@@_style_tl _ ####1 _clist}
+ {
+ \clist_map_inline:cn {g_@@_named_slots_ \l_@@_style_tl _ ####1 _clist}
+ {
+ \clist_map_inline:Nn \l_@@_mathmap_charints_clist
+ {
+ \@@_int_if_slot_in_range:nnT {################1} {########1}
+ {
+ \seq_gput_right:Nn \g_@@_mathalph_seq {##1}
+ \clist_map_break:n { \clist_map_break:n { \clist_map_break: } }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ \cs_set_eq:NN \@@_set_mathalphabet_char:nnn \@@_mathmap_parse:nnn
+ \cs_set_eq:NN \@@_map_char_single:nn \@@_map_char_parse:nn
+ \@@_mathalph_map:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathalph_map:}
+% \begin{macrocode}
+\cs_set:Nn \@@_mathalph_map:
+ {
+ \seq_map_inline:Nn \g_@@_mathalph_seq
+ {
+ \tl_set:No \l_@@_style_tl { \use_i:nnn ##1 }
+ \clist_set:No \l_@@_alphabet_clist { \use_ii:nnn ##1 }
+ \tl_set:No \l_@@_remap_style_tl { \use_iii:nnn ##1 }
+
+ % If no set of alphabets is defined:
+ \clist_if_empty:NT \l_@@_alphabet_clist
+ {
+ \cs_set_eq:NN \@@_maybe_init_alphabet:n \@@_init_alphabet:n
+ \prop_get:cnN { g_@@_named_range_ \l_@@_style_tl _prop }
+ { default-alpha } \l_@@_alphabet_clist
+ }
+
+ \@@_check_math_alphabet:
+ \@@_setup_math_alphabet:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_check_math_alphabet:}
+% First check that at least one of the alphabets for the font shape is defined
+% (this process is fast) \dots
+% \begin{macrocode}
+\cs_new:Nn \@@_check_math_alphabet:
+ {
+ \clist_map_inline:Nn \l_@@_alphabet_clist
+ {
+ \tl_set:Nn \l_@@_alphabet_tl {##1}
+ \@@_if_alphabet_exists:nnTF \l_@@_style_tl \l_@@_alphabet_tl
+ {
+ \str_if_eq:eeTF {\l_@@_alphabet_tl} {misc}
+ {
+ \@@_maybe_init_alphabet:n \l_@@_style_tl
+ \clist_map_break:
+ }
+ {
+ \@@_glyph_if_exist:NnT \g_@@_curr_font_cmd_tl
+ { \@@_to_usv:nn {\l_@@_style_tl} {\l_@@_alphabet_tl} }
+ {
+ \@@_maybe_init_alphabet:n \l_@@_style_tl
+ \clist_map_break:
+ }
+ }
+ }
+ {
+ \msg_warning:nnx {unicode-math} {no-alphabet}
+ { \l_@@_style_tl / \l_@@_alphabet_tl }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_math_alphabet:}
+% \dots and then loop through them defining the individual ranges:
+% (currently this process is slow)
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_math_alphabet:
+ {
+ \clist_map_inline:Nn \l_@@_alphabet_clist
+ {
+ \tl_set:Nx \l_@@_alphabet_tl { \tl_trim_spaces:n {##1} }
+
+%<debug>\@@_debug:n {_setup_math_alphabet:~\l_@@_style_tl/\l_@@_alphabet_tl}
+
+ \@@_if_alphabet_exists:nnT {\l_@@_style_tl} {\l_@@_alphabet_tl}
+ {
+ \exp_args:No \tl_if_eq:nnTF \l_@@_alphabet_tl {misc}
+ {
+ \@@_log:nx {setup-alph} {sym \l_@@_style_tl~(\l_@@_alphabet_tl)}
+ \@@_alphabet_config:nnn {\l_@@_style_tl} {\l_@@_alphabet_tl} {\l_@@_remap_style_tl}
+ }
+ {
+ \@@_glyph_if_exist:NnTF \g_@@_curr_font_cmd_tl { \@@_to_usv:nn {\l_@@_remap_style_tl} {\l_@@_alphabet_tl} }
+ {
+ \@@_log:nx {setup-alph} {sym \l_@@_style_tl~(\l_@@_alphabet_tl)}
+ \@@_alphabet_config:nnn {\l_@@_style_tl} {\l_@@_alphabet_tl} {\l_@@_remap_style_tl}
+ }
+ {
+ \bool_if:NTF \l_@@_implicit_alph_bool
+ {
+ \seq_put_right:Nx \l_@@_missing_alph_seq
+ {
+ \@backslashchar sym \l_@@_style_tl \space
+ (\tl_use:c{c_@@_math_alphabet_name_ \l_@@_alphabet_tl _tl})
+ }
+ }
+ {
+ \@@_alphabet_config:nnn {\l_@@_style_tl} {\l_@@_alphabet_tl} {up}
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% Each alphabet style needs to be configured.
+% This happens in Section~\ref{sec:setupalphabets}.
+% \begin{macrocode}
+\cs_new:Nn \@@_new_alphabet_config:nnn
+ {
+ \prop_if_exist:cF {g_@@_named_range_#1_prop}
+ { \@@_warning:nnn {no-named-range} {#1} {#2} }
+
+
+ \prop_gput:cnn {g_@@_named_range_#1_prop} { alpha_tl }
+ {
+ \prop_item:cn {g_@@_named_range_#1_prop} { alpha_tl } {#2}
+ }
+ % Q: do I need to bother removing duplicates?
+
+% \end{macrocode}
+% Create list of all chars defined in this named range:
+% \begin{macrocode}
+ \cs_new:cn { @@_config_#1_#2:n }
+ {
+ \clist_gclear_new:c {g_@@_named_slots_#1_#2_clist}
+ \tl_set:Nn \l_@@_curr_named_slot { g_@@_named_slots_#1_#2_clist }
+ #3
+ \clist_gremove_duplicates:c {g_@@_named_slots_#1_#2_clist}
+ }
+
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new:Nn \@@_alphabet_config:nnn
+ {
+ \use:c {@@_config_#1_#2:n} {#3}
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_if_alphabet_exists:nn {T,TF}
+ {
+ \cs_if_exist:cTF {@@_config_#1_#2:n}
+ \prg_return_true: \prg_return_false:
+ }
+% \end{macrocode}
+%
+% \subsection{Mapping `naked’ math characters}
+%
+% Before we show the definitions of the alphabet mappings using the functions
+% |\@@_alphabet_config:nnn \l_@@_style_tl {##1} {...}|, we first want to define some functions
+% to be used inside them to actually perform the character mapping.
+%
+% \subsubsection{Functions}
+%
+% \begin{macro}{\@@_map_char_single:nn}
+% Wrapper for |\@@_map_char_noparse:nn| or |\@@_map_char_parse:nn|
+% depending on the context.
+%
+% \begin{macro}{\@@_map_char_noparse:nn}
+% \begin{macro}{\@@_map_char_parse:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_map_char_noparse:nn
+ {
+ \@@_set_mathcode:nnnn {#1} {\mathalpha} {\l_@@_symfont_label_tl} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_map_char_parse:nn
+ {
+ \@@_if_char_spec:nNT {#1} {\mathalpha}
+ { \@@_map_char_noparse:nn {#1}{#2} }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_map_char_single:nnn}
+% \darg{char name (`dotlessi’)}
+% \darg{from alphabet(s)}
+% \darg{to alphabet}
+% Logical interface to \cs{@@_map_char_single:nn}.
+% \begin{macrocode}
+\cs_new:Nn \@@_map_char_single:nnn
+ {
+ \@@_map_char_single:nn { \@@_to_usv:nn {#1} {#3} }
+ { \@@_to_usv:nn {#2} {#3} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_map_chars_range:nnnn}
+% \darg{Number of chars (26)}
+% \darg{From style, one or more (it)}
+% \darg{To style (up)}
+% \darg{Alphabet name (Latin)}
+% First the function with numbers:
+% \begin{macrocode}
+\cs_set:Nn \@@_map_chars_range:nnn
+ {
+ \int_step_inline:nnnn {0} {1} {#1-1}
+ { \@@_map_char_single:nn {#2+##1} {#3+##1} }
+
+ \clist_gput_right:cx { \l_@@_curr_named_slot }
+ { \int_eval:n { #3 } - \int_eval:n { #3 + #1-1 } }
+ }
+% \end{macrocode}
+% And the wrapper with names:
+% \begin{macrocode}
+\cs_new:Nn \@@_map_chars_range:nnnn
+ {
+ \@@_map_chars_range:nnn {#1} { \@@_to_usv:nn {#2} {#4} }
+ { \@@_to_usv:nn {#3} {#4} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Functions for `normal’ alphabet symbols}
+%
+% \begin{macro}{\@@_set_normal_char:nnn}
+% \begin{macrocode}
+\cs_set:Nn \@@_set_normal_char:nnn
+ {
+ \@@_usv_if_exist:nnT {#3} {#1}
+ {
+ \clist_map_inline:nn {#2}
+ {
+ \@@_set_mathalphabet_pos:nnnn {normal} {#1} {##1} {#3}
+ \@@_map_char_single:nnn {##1} {#3} {#1}
+
+ \clist_gput_right:cx {\l_@@_curr_named_slot}
+ { \int_eval:n { \@@_to_usv:nn {#3} {#1} } }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_normal_Latin:nn
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_set_mathalphabet_Latin:nnn {normal} {##1} {#2}
+ \@@_map_chars_range:nnnn {26} {##1} {#2} {Latin}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_normal_latin:nn
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_set_mathalphabet_latin:nnn {normal} {##1} {#2}
+ \@@_map_chars_range:nnnn {26} {##1} {#2} {latin}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_normal_greek:nn
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_set_mathalphabet_greek:nnn {normal} {##1} {#2}
+ \@@_map_chars_range:nnnn {25} {##1} {#2} {greek}
+ \@@_map_char_single:nnn {##1} {#2} {epsilon}
+ \@@_map_char_single:nnn {##1} {#2} {vartheta}
+ \@@_map_char_single:nnn {##1} {#2} {varkappa}
+ \@@_map_char_single:nnn {##1} {#2} {phi}
+ \@@_map_char_single:nnn {##1} {#2} {varrho}
+ \@@_map_char_single:nnn {##1} {#2} {varpi}
+ \@@_set_mathalphabet_pos:nnnn {normal} {epsilon} {##1} {#2}
+ \@@_set_mathalphabet_pos:nnnn {normal} {vartheta} {##1} {#2}
+ \@@_set_mathalphabet_pos:nnnn {normal} {varkappa} {##1} {#2}
+ \@@_set_mathalphabet_pos:nnnn {normal} {phi} {##1} {#2}
+ \@@_set_mathalphabet_pos:nnnn {normal} {varrho} {##1} {#2}
+ \@@_set_mathalphabet_pos:nnnn {normal} {varpi} {##1} {#2}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_normal_Greek:nn
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_set_mathalphabet_Greek:nnn {normal} {##1} {#2}
+ \@@_map_chars_range:nnnn {25} {##1} {#2} {Greek}
+ \@@_map_char_single:nnn {##1} {#2} {varTheta}
+ \@@_set_mathalphabet_pos:nnnn {normal} {varTheta} {##1} {#2}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_normal_numbers:nn
+ {
+ \@@_set_mathalphabet_numbers:nnn {normal} {#1} {#2}
+ \@@_map_chars_range:nnnn {10} {#1} {#2} {num}
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Mapping chars inside a math style}
+%
+% \subsubsection{Functions for setting up the maths alphabets}
+%
+% \begin{macro}{\@@_set_mathalphabet_char:nnn}
+% \darg{Maths alphabet, \eg, `bb’}
+% \darg{Input slot, \eg, the slot for `A’ (comma separated)}
+% \darg{Output slot, \eg, the slot for `$\mathbb{A}$’}
+% This is a wrapper for either |\@@_mathmap_noparse:nnn| or
+% |\@@_mathmap_parse:nnn|, depending on the context.
+% \end{macro}
+%
+% \begin{macro}{\@@_mathmap_noparse:nnn}
+% \darg{Maths alphabet, \eg, `bb’}
+% \darg{Input slot, \eg, the slot for `A’ (comma separated)}
+% \darg{Output slot, \eg, the slot for `$\mathbb{A}$’}
+% Adds \cs{@@_set_mathcode:nnnn} declarations to the specified maths alphabet’s definition.
+% \begin{macrocode}
+\cs_new:Nn \@@_mathmap_noparse:nnn
+ {
+ \tl_gput_right:cx { g_@@_switchto_#1_tl }
+ {
+ \@@_set_mathcode:nnnn {#2} {\mathalpha} {\l_@@_symfont_label_tl} {#3}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathmap_parse:nnn}
+% \darg{Maths alphabet, \eg, `bb’}
+% \darg{Input slot, \eg, the slot for `A’ (comma separated)}
+% \darg{Output slot, \eg, the slot for `$\mathbb{A}$’}
+% When \cmd\@@_if_char_spec:nNT\ is executed, it populates the \cmd\l_@@_mathmap_charints_clist\
+% macro with slot numbers corresponding to the specified range. This range is used to
+% conditionally add \cs{@@_set_mathcode:nnnn} declaractions to the maths alphabet definition.
+% \begin{macrocode}
+\cs_new:Nn \@@_mathmap_parse:nnn
+ {
+ \exp_args:NNx \clist_if_in:NnT \l_@@_mathmap_charints_clist { \int_eval:n {#3} }
+ {
+ \@@_mathmap_noparse:nnn {#1} {#2} {#3}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_mathalphabet_char:nnnn}
+% \darg{math style command}
+% \darg{input math alphabet name}
+% \darg{output math alphabet name}
+% \darg{char name to map}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_char:nnnn
+ {
+ \@@_set_mathalphabet_char:nnn {#1} { \@@_to_usv:nn {#2} {#4} }
+ { \@@_to_usv:nn {#3} {#4} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_mathalph_range:nnnn}
+% \darg{Number of iterations}
+% \darg{Sym command suffix}
+% \darg{Starting input char}
+% \darg{Starting output char}
+% Loops through character ranges setting \cmd\mathcode.
+% First the version that uses numbers:
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalph_range:nnnn
+ {
+ \int_step_inline:nnnn {0} {1} {#1-1}
+ { \@@_set_mathalphabet_char:nnn {#2} { ##1 + #3 } { ##1 + #4 } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_mathalph_range:nnnn}
+% \darg{Number of iterations}
+% \darg{Sym command suffix}
+% \darg{input style}
+% \darg{output style}
+% \darg{alphabet}
+% Then the wrapper version that uses names:
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalph_range:nnnnn
+ {
+ \clist_gput_right:cx { \l_@@_curr_named_slot }
+ { \int_eval:n { \@@_to_usv:nn {#4} {#5} } - \int_eval:n { (#1-1)+\@@_to_usv:nn {#4} {#5} } }
+
+ \@@_set_mathalph_range:nnnn {#1} {#2} { \@@_to_usv:nn {#3} {#5} }
+ { \@@_to_usv:nn {#4} {#5} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Individual mapping functions for different alphabets}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_pos:nnnn
+ {
+ \@@_usv_if_exist:nnT {#4} {#2}
+ {
+ \clist_map_inline:nn {#3}
+ { \@@_set_mathalphabet_char:nnnn {#1} {##1} {#4} {#2} }
+
+ \clist_gput_right:cx {\l_@@_curr_named_slot}
+ { \int_eval:n { \@@_to_usv:nn {#4} {#2} } }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_numbers:nnn
+ {
+ \clist_map_inline:nn {#2}
+ { \@@_set_mathalph_range:nnnnn {10} {#1} {##1} {#3} {num} }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_Latin:nnn
+ {
+ \clist_map_inline:nn {#2}
+ { \@@_set_mathalph_range:nnnnn {26} {#1} {##1} {#3} {Latin} }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_latin:nnn
+ {
+ \clist_map_inline:nn {#2}
+ {
+ \@@_set_mathalph_range:nnnnn {26} {#1} {##1} {#3} {latin}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {h}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_Greek:nnn
+ {
+ \clist_map_inline:nn {#2}
+ {
+ \@@_set_mathalph_range:nnnnn {25} {#1} {##1} {#3} {Greek}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {varTheta}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_greek:nnn
+ {
+ \clist_map_inline:nn {#2}
+ {
+ \@@_set_mathalph_range:nnnnn {25} {#1} {##1} {#3} {greek}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {epsilon}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {vartheta}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {varkappa}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {phi}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {varrho}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {varpi}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-mathtext.dtx b/macros/latex/contrib/unicode-math/um-code-mathtext.dtx
new file mode 100644
index 0000000000..602ba01352
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-mathtext.dtx
@@ -0,0 +1,246 @@
+%%^^A%% um-code-mathtext.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% The "math text" commands such as `\mathbf` and co.
+
+% \section{Maths text commands}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \subsection{\cs{setmathfontface}}
+%
+% \begin{macro}{\@@_setmathfontface:Nnn}
+% Interface around \cs{SetMathAlphabet}.
+% \begin{macrocode}
+\keys_define:nn {@@_mathface}
+ {
+ version .tl_set:N = \l_@@_mversion_tl
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setmathfontface:Nnn
+ {
+ \tl_clear:N \l_@@_mversion_tl
+
+ \keys_set_known:nnN {@@_mathface} {#2} \l_@@_keyval_clist
+
+ \fontspec_set_family:Nxx \l_@@_tmpa_tl
+ { ItalicFont={}, BoldFont={}, SmallCapsFont={}, \exp_not:V \l_@@_keyval_clist }
+ { #3 }
+
+ \tl_if_empty:NT \l_@@_mversion_tl
+ {
+ \tl_set:Nn \l_@@_mversion_tl {normal}
+ \DeclareMathAlphabet #1 {\g_fontspec_encoding_tl} {\l_@@_tmpa_tl} {\mddefault} {\updefault}
+ }
+
+ \SetMathAlphabet #1 {\l_@@_mversion_tl} {\g_fontspec_encoding_tl} {\l_@@_tmpa_tl} {\mddefault} {\updefault}
+
+ % integrate with fontspec's \setmathrm etc:
+ \tl_case:Nn #1
+ {
+ \mathrm { \cs_gset_eq:NN \g__fontspec_mathrm_tl \l_@@_tmpa_tl }
+ \mathsf { \cs_gset_eq:NN \g__fontspec_mathsf_tl \l_@@_tmpa_tl }
+ \mathtt { \cs_gset_eq:NN \g__fontspec_mathtt_tl \l_@@_tmpa_tl }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Hooks into \LaTeXe}
+%
+% Switching to a different style of alphabetic symbols was traditionally performed with
+% commands like \cmd\mathbf, which literally changes fonts to access alternate symbols.
+% This is not as simple with Unicode fonts.
+%
+% In traditional \TeX{} maths font setups, you simply switch between different `families' (\cmd\fam), which is analogous to changing from one font to another---a symbol such as `a' will be upright in one font, bold in another, and so on.
+% In pkg{unicode-math}, a different mechanism is used to switch between styles. For every letter (start with ascii a-zA-Z and numbers to keep things simple for now), they are assigned a `mathcode' with \cmd\Umathcode\ that maps from input letter to output font glyph slot. This is done with the equivalent of
+% \begin{Verbatim}
+% \Umathcode`\a = 7 1 "1D44E\relax
+% \Umathcode`\b = 7 1 "1D44F\relax
+% \Umathcode`\c = 7 1 "1D450\relax
+% ...
+% \end{Verbatim}
+% When switching from regular letters to, say, \cmd\mathrm, we now need to execute a new mapping:
+% \begin{Verbatim}
+% \Umathcode`\a = 7 1 `\a\relax
+% \Umathcode`\b = 7 1 `\b\relax
+% \Umathcode`\c = 7 1 `\c\relax
+% ...
+% \end{Verbatim}
+% This is fairly straightforward to perform when we're defining our own commands such as \cmd\symbf\ and so on. However, this means that `classical' \TeX\ font setups will break, because with the original mapping still in place, the engine will be attempting to insert unicode maths glyphs from a standard font.
+%
+% \begin{macro}{\use@mathgroup}
+% To overcome this, we patch \cs{use@mathgroup}, which is only used inside of commands
+% such as \cs{mathXYZ}, so this shouldn't have any side-effects.
+% Omit the test for math mode because this is only called \emph{inside} \cs{mathrm} or similar,
+% which already has a math mode check.
+% \begin{macrocode}
+\cs_set:Npn \use@mathgroup #1 #2
+ {
+ \math@bgroup
+ \cs_if_eq:cNF {M@\f@encoding} #1 {#1}
+ \@@_switch_to:n {literal}
+ \@@_mathgroup_set:n {#2}
+ \math@egroup
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% In LaTeX maths, the command |\operator@font| is defined that switches to the |operator| mathgroup. The classic example is the |\sin| in |$\sin{x}$|; essentially we’re using |\mathrm| to typeset the upright symbols, but the syntax is |{\operator@font sin}|.
+% I thought that hooking into |\operator@font| would be hard because all other maths font selection in 2e uses |\mathrm{...}| style.
+% Then reading source2e a little more I stumbled upon \cs{@fontswitch}.
+% Reimplement that here to avoid \cs{bgroup}/\cs{egroup}.
+% \begin{macro}{\operator@font}
+% \begin{macrocode}
+\cs_set:Npn \operator@font
+ {
+ \@@_switch_to:n {literal}
+ \@@_fontswitch:n { \g_@@_operator_mathfont_tl }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fontswitch:n}
+% Omit the check for math mode as \verb|#1| should do that for us.
+% \begin{macrocode}
+\cs_set:Nn \@@_fontswitch:n
+ {
+ \cs_set_eq:NN \math@bgroup \scan_stop:
+ \cs_set_eq:NN \@@_group_begin: \scan_stop:
+ \cs_set:Npn \@@_group_end:n % takes no argument in this case
+ {
+ \cs_set_eq:NN \@@_group_begin: \@@_group_begin_frozen:
+ \cs_set_eq:NN \@@_group_end:n \@@_group_end_frozen:n
+ \cs_set_eq:NN \math@bgroup \@@@@math@bgroup
+ \cs_set_eq:NN \math@egroup \@@@@math@egroup
+ }
+ \cs_set_eq:NN \math@egroup \@@_group_end:n
+ #1 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Hooks into \pkg{fontspec}}
+%
+% Historically, \cs{mathrm} and so on were completely overwritten by \pkg{unicode-math}, and \pkg{fontspec}'s methods for setting these fonts in the classical manner were bypassed.
+%
+% While we could now re-activate the way that \pkg{fontspec} does the following, because we can now change maths fonts whenever it's better to define new commands in \pkg{unicode-math} to define the \cs{mathXYZ} fonts.
+%
+% \subsubsection{Text font}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \tl_if_eq:nnT {o}
+\@@_cs_set:Nn \__fontspec_setmainfont_hook:nn
+ {
+ \tl_if_eq:onT {\g__fontspec_mathrm_tl} {\rmdefault}
+ {
+%<XE> \fontspec_gset_family:Nnn \g__fontspec_mathrm_tl {#1} {#2}
+%<LU> \fontspec_gset_family:Nnn \g__fontspec_mathrm_tl {Renderer=Basic,#1} {#2}
+ \__fontspec_setmathrm_hook:nn {#1} {#2}
+ }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setsansfont_hook:nn
+ {
+ \tl_if_eq:onT {\g__fontspec_mathsf_tl} {\sfdefault}
+ {
+%<XE> \fontspec_gset_family:Nnn \g__fontspec_mathsf_tl {#1} {#2}
+%<LU> \fontspec_gset_family:Nnn \g__fontspec_mathsf_tl {Renderer=Basic,#1} {#2}
+ \__fontspec_setmathsf_hook:nn {#1} {#2}
+ }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setmonofont_hook:nn
+ {
+ \tl_if_eq:onT {\g__fontspec_mathtt_tl} {\ttdefault}
+ {
+%<XE> \fontspec_gset_family:Nnn \g__fontspec_mathtt_tl {#1} {#2}
+%<LU> \fontspec_gset_family:Nnn \g__fontspec_mathtt_tl {Renderer=Basic,#1} {#2}
+ \__fontspec_setmathtt_hook:nn {#1} {#2}
+ }
+ }
+% \end{macrocode}
+%
+% \subsubsection{Maths font}
+%
+% If the maths fonts are set explicitly, then the text commands above will not execute their branches to set the maths font alphabets.
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setmathrm_hook:nn
+ {
+ \SetMathAlphabet\mathrm{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\updefault
+ \SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\mddefault\itdefault
+ \SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl\bfdefault\updefault
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setboldmathrm_hook:nn
+ {
+ \SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\updefault
+ \SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\bfdefault\updefault
+ \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\itdefault
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setmathsf_hook:nn
+ {
+ \SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl\mddefault\updefault
+ \SetMathAlphabet\mathsf{bold} \g_fontspec_encoding_tl\g__fontspec_mathsf_tl\bfdefault\updefault
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setmathtt_hook:nn
+ {
+ \SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl\mddefault\updefault
+ \SetMathAlphabet\mathtt{bold} \g_fontspec_encoding_tl\g__fontspec_mathtt_tl\bfdefault\updefault
+ }
+% \end{macrocode}
+%
+% I can't quite remember the logic behind the following two.
+%
+% If \pkg{fontspec} has been loaded and \verb|\setmathsf| (etc) run, this
+% syncs things up:
+% \begin{macrocode}
+\tl_if_eq:onF {\g__fontspec_mathrm_tl} {\rmdefault} { \__fontspec_setmathrm_hook:nn {} {} }
+\tl_if_eq:onF {\g__fontspec_mathsf_tl} {\sfdefault} { \__fontspec_setmathsf_hook:nn {} {} }
+\tl_if_eq:onF {\g__fontspec_mathtt_tl} {\ttdefault} { \__fontspec_setmathtt_hook:nn {} {} }
+% \end{macrocode}
+%
+% I suppose this is to make things work if neither fontspec or unicode-math
+% load any fonts: (I should check that)
+% \begin{macrocode}
+\AtBeginDocument
+ {
+ \tl_if_eq:onT {\g__fontspec_mathrm_tl} {\rmdefault} { \__fontspec_setmathrm_hook:nn {} {} }
+ \tl_if_eq:onT {\g__fontspec_mathsf_tl} {\sfdefault} { \__fontspec_setmathsf_hook:nn {} {} }
+ \tl_if_eq:onT {\g__fontspec_mathtt_tl} {\ttdefault} { \__fontspec_setmathtt_hook:nn {} {} }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-msg.dtx b/macros/latex/contrib/unicode-math/um-code-msg.dtx
new file mode 100644
index 0000000000..c93809cf4f
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-msg.dtx
@@ -0,0 +1,156 @@
+%%^^A%% um-code-msg.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Definitions of error, warning, and log messages.
+
+% \section{Error messages}
+% \seclabel{codemsg}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\char_set_catcode_space:n {32}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn {no-tfrac}
+{
+ Small fraction command \protect\tfrac\ not defined.\\
+ Load amsmath or define it manually before loading unicode-math.
+}
+\@@_msg_new:nn {default-math-font}
+{
+ Defining the default maths font as '\l_@@_fontname_tl'.
+}
+\@@_msg_new:nn {setup-implicit}
+{
+ Setup alphabets: implicit mode.
+}
+\@@_msg_new:nn {setup-explicit}
+{
+ Setup alphabets: explicit mode.
+}
+\@@_msg_new:nn {alph-initialise}
+{
+ Initialising \@backslashchar math#1.
+}
+\@@_msg_new:nn {setup-alph}
+{
+ Setup alphabet: #1.
+}
+\@@_msg_new:nn {no-alphabet}
+{
+ I am trying to set up alphabet"#1" but there are no configuration settings for it.
+ (See source file "unicode-math-alphabets.dtx" to debug.)
+}
+\@@_msg_new:nn {no-named-range}
+ {
+ I am trying to define new alphabet "#2" in range "#1", but range "#1" hasn't been defined yet.
+ }
+\@@_msg_new:nn {missing-alphabets}
+ {
+ Missing math alphabets in font "\fontname\g_@@_curr_font_cmd_tl" \\ \\
+ \seq_map_function:NN \l_@@_missing_alph_seq \@@_print_indent:n
+ }
+\cs_new:Nn \@@_print_indent:n { \space\space\space\space #1 \\ }
+\@@_msg_new:nn {macro-expected}
+{
+ I've expected that #1 is a macro, but it isn't.
+}
+\@@_msg_new:nn {wrong-meaning}
+{
+ I've expected #1 to have the meaning #3, but it has the meaning #2.
+}
+\@@_msg_new:nn {patch-macro}
+{
+ I'm going to patch macro #1.
+}
+\@@_msg_new:nn {mathtools-overbracket} {
+ Using \token_to_str:N \overbracket\ and
+ \token_to_str:N \underbracket\ from
+ `mathtools' package.\\
+ \\
+ Use \token_to_str:N \Uoverbracket\ and
+ \token_to_str:N \Uunderbracket\ for
+ original `unicode-math' definition.
+}
+\@@_msg_new:nn {mathtools-colon} {
+ I'm going to overwrite the following commands from
+ the `mathtools' package: \\ \\
+ \ \ \ \ \token_to_str:N \dblcolon,
+ \token_to_str:N \coloneqq,
+ \token_to_str:N \Coloneqq,
+ \token_to_str:N \eqqcolon. \\ \\
+ Note that since I won't overwrite the other colon-like
+ commands, using them will lead to inconsistencies.
+}
+\@@_msg_new:nn {colonequals} {
+ I'm going to overwrite the following commands from
+ the `colonequals' package: \\ \\
+ \ \ \ \ \token_to_str:N \ratio,
+ \token_to_str:N \coloncolon,
+ \token_to_str:N \minuscolon, \\
+ \ \ \ \ \token_to_str:N \colonequals,
+ \token_to_str:N \equalscolon,
+ \token_to_str:N \coloncolonequals. \\ \\
+ Note that since I won't overwrite the other colon-like
+ commands, using them will lead to inconsistencies.
+ Furthermore, changing \token_to_str:N \colonsep \c_space_tl
+ or \token_to_str:N \doublecolonsep \c_space_tl won't have
+ any effect on the re-defined commands.
+}
+\@@_msg_new:nn {bad-cs-in-range}
+ {
+ Command `#1` in math range is not recognised as a maths symbol.
+ Check file "unicode-math-table.tex" for allowable commands.
+ }
+\@@_msg_new:nn {legacy-char-not-supported}
+ {
+ Command `#1` is a legacy maths symbol that is not supported by unicode-math.
+ }
+\@@_msg_new:nn {range-not-bf-sf}
+ {
+ Range alphabets cannot include alphabets referring to `bf`, `sf`, or `bfsf`
+ since they relate to input commands not output glyphs.
+ Use `bfit` or `bfup` (etc.) to specify which.
+ }
+\@@_msg_new:nn {no-main-font}
+ {
+ No main maths font has been set up yet.\\If you simply want ‘the default’, use: \\
+ \iow_indent:n {\token_to_str:N\setmathfont{latinmodern-math.otf}}
+ }
+\@@_msg_new:nn {not-ot-math}
+ {
+ The first font loaded by unicode-math must be an OpenType Math font (with script=math).
+ If you simply want ‘the default’ before loading supplementary fonts over the top for certain
+ ranges, use: \\
+ \iow_indent:n {\token_to_str:N\setmathfont{latinmodern-math.otf}}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\char_set_catcode_ignore:n {32}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-opening.dtx b/macros/latex/contrib/unicode-math/um-code-opening.dtx
new file mode 100644
index 0000000000..b739fa6dea
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-opening.dtx
@@ -0,0 +1,395 @@
+%%^^A%% um-code-opening.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Assorted initialisation tasks, including some low-level function definitions.
+
+% \section{Start of the package code}
+%
+% The prefix for \pkg{unicode-math} is \texttt{um}:
+% \begin{macrocode}
+%<@@=um>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \paragraph{Packages}
+% Assuming people are running up-to-date packages.
+% \begin{macrocode}
+\RequirePackage{xparse,l3keys2e}
+\RequirePackage{fontspec}
+\RequirePackage{filehook}
+\RequirePackage{fix-cm}
+%<LU>\RequirePackage{lualatex-math}
+% \end{macrocode}
+%
+% \subsection{\pkg{expl3} variants}
+%
+% Variants needed from \pkg{expl3}:
+% \begin{macrocode}
+\cs_set_protected_nopar:Npn \exp_last_unbraced:NNx { \::N \::x_unbraced \::: }
+% \end{macrocode}
+%
+% For \pkg{fontspec}:
+% \begin{macrocode}
+\cs_generate_variant:Nn \fontspec_set_family:Nnn {Nx,Nxx}
+\cs_generate_variant:Nn \prop_get:NnNTF {cx}
+\cs_generate_variant:Nn \tl_if_eq:nnF {o}
+% \end{macrocode}
+%
+%
+% \subsection{Low level commands}
+%
+% \begin{macrocode}
+\cs_set_eq:NN \@@_group_begin: \group_begin:
+\cs_set_protected:Npn \@@_group_end:n #1 { #1 \group_end: }
+\cs_set_eq:NN \@@_group_begin_frozen: \@@_group_begin:
+\cs_set_eq:NN \@@_group_end_frozen:n \@@_group_end:n
+% \end{macrocode}
+%
+%
+% \subsection{Primitive font commands}
+%
+% What might end up being provided by the kernel.
+%
+% \begin{macro}{\@@_glyph_if_exist:NnTF}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_glyph_if_exist:Nn {p,TF,T,F}
+ {
+ \tex_iffontchar:D #1 #2 \scan_stop:
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fontface_gset_eq:NN}
+% \begin{macrocode}
+\cs_set_protected:Nn \@@_fontface_gset_eq:NN
+ {
+ \tex_global:D \tex_let:D #1 #2
+ }
+\cs_generate_variant:Nn \@@_fontface_gset_eq:NN {cN}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Mathcode and friends}
+%
+% \begin{macro}{\@@_set_mathcode:nnnn}
+% \begin{macro}{\@@_set_mathcode:nnn}
+% These are all wrappers for the primitive commands that take numerical
+% input only.
+% \begin{macrocode}
+\cs_set:Npn \@@_set_mathcode:nnnn #1#2#3#4
+ {
+ \Umathcode \int_eval:n {#1} =
+ \mathchar@type#2 \csname sym#3\endcsname \int_eval:n {#4} \scan_stop:
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_set_mathcode:nnn #1#2#3
+ {
+ \Umathcode \int_eval:n {#1} =
+ \mathchar@type#2 \csname sym#3\endcsname \int_eval:n {#1} \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_mathchar:NNnn}
+% \begin{macro}{\@@_set_mathchar:cNnn}
+% \begin{macrocode}
+\cs_set:Npn \@@_set_mathchar:NNnn #1#2#3#4
+ {
+ \Umathchardef #1 =
+ \mathchar@type#2 \csname sym#3\endcsname \int_eval:n {#4} \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \@@_set_mathchar:NNnn {c}
+% \end{macrocode}
+%
+% \begin{macro}{\@@_set_delcode:nnn}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_delcode:nnn
+ {
+ \Udelcode#2 = \csname sym#1\endcsname #3 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_radical:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_radical:nn
+ {
+ \Uradical \csname sym#1\endcsname #2 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_delimiter:Nnn}
+% \begin{macrocode}
+\cs_new:Nn \@@_delimiter:Nnn
+ {
+ \Udelimiter \mathchar@type#1 \csname sym#2\endcsname #3 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_accent:nnn}
+% \begin{macrocode}
+\cs_new:Nn \@@_accent:nnn
+ {
+ \Umathaccent #1~ \mathchar@type\mathaccent \use:c { sym #2 } #3 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_char_gmake_mathactive:N}
+% \begin{macro}{\@@_char_gmake_mathactive:n}
+% \begin{macrocode}
+\cs_new:Nn \@@_char_gmake_mathactive:N
+ {
+ \tex_global:D \tex_mathcode:D `#1 = "8000 \scan_stop:
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new:Nn \@@_char_gmake_mathactive:n
+ {
+ \tex_global:D \tex_mathcode:D \int_eval:n {#1} = "8000 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathactive_remap:nn}
+% Makes |#1| math-active and defines its meaning to be |#2|.
+% This is a global operation.
+% \begin{macrocode}
+\cs_new:Nn \@@_mathactive_remap:nn
+ {
+ \group_begin:
+ \cs_set_protected:Npn \@@_tmp: {#2}
+ \@@_char_gmake_mathactive:n {#1}
+ \char_gset_active_eq:nN {#1} \@@_tmp:
+ \group_end:
+ }
+% \end{macrocode}
+%
+% \subsubsection{NFSS-related interfaces}
+%
+% \begin{macro}{\@@_mathgroup_set:n}
+% Remember that \cs{mathgroup} is just \cs{fam}!
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_mathgroup_set:n
+ {
+ \tex_fam:D #1 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Font parameters}
+%
+% \begin{macro}{\@@_copy_fontdimen:nnN}
+% \begin{macrocode}
+\cs_new:Nn \@@_copy_fontdimen:nnN
+ {
+ \fontdimen #1 \font = \the \fontdimen #2 #3 \relax
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_zero_fontdimen:n}
+% \begin{macrocode}
+\cs_new:Nn \@@_zero_fontdimen:n
+ {
+ \fontdimen #1 \font = 0pt\relax
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fontdimen_from_param:Nnn}
+% This function extracts the math font dimen \verb|#3| from the font \verb|#1|
+% and sets fontdimen \verb|#2| of the same font to that value.
+%
+% Use \XeTeX's fontdimen approach because it's tidy. We don't need bells and whistles here.
+% \begin{macrocode}
+%<*LU>
+\cs_new_protected:Nn \@@_fontdimen_from_param:nn
+ {
+ \fontdimen #1 \font =
+ \lua_now:n { fontspec.mathfontdimen(font.current(),"#2") }
+ \scan_stop:
+ }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+%
+%^^A \begin{function}[EXP, added = 2019-01-19]{\@@_int_if_zero_p:n, \@@_int_if_zero:nTF}
+%^^A \begin{syntax}
+%^^A \cs{int_if_zero_p:n} \Arg{intexpr}
+%^^A \cs{int_if_zero:nTF} \Arg{intexpr} \Arg{true code} \Arg{false code}
+%^^A \end{syntax}
+%^^A A conditional for testing if the \meta{intexpr} evaluates to zero.
+%^^A This is simply a shorthand for
+%^^A \begin{verbatim}
+%^^A \int_compare_p:nNn {intexpr} = {0}
+%^^A \end{verbatim}
+%^^A \end{function}
+%
+% \begin{macro}{\@@_int_if_zero_p:n}
+% \begin{macro}{\@@_int_if_zero:nTF}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_int_if_zero:n {p,TF,T,F}
+ {
+ \int_compare:nNnTF {#1} = 0 {\prg_return_true:} {\prg_return_false:}
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Alphabet Unicode positions (USVs)}
+%
+% Before we begin, let's define the positions of the various Unicode
+% alphabets so that our code is a little more readable.\footnote{`\textsc{u.s.v.}' stands
+% for `Unicode scalar value'.}
+%
+% \begin{macro}{\usv_set:nnn,\@@_to_usv:nn}
+% Rather than `readable', in the end, this makes the code more extensible.
+% \begin{macrocode}
+\cs_new:Nn \usv_set:nnn { \tl_const:cn { c_@@_#1_#2_usv } {#3} }
+\cs_new:Nn \@@_to_usv:nn { \use:c { c_@@_#1_#2_usv } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_usv_if_exist:nnTF}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_usv_if_exist:nn {T,F,TF}
+ {
+ \cs_if_exist:cTF { c_@@_#1_#2_usv }
+ \prg_return_true: \prg_return_false:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Overcoming \texorpdfstring{\cmd\@onlypreamble}{\textbackslash @onlypreamble}}
+%
+% The requirement of only setting up the maths fonts in the preamble is lifted.
+% (Perhaps unwisely.)
+% \begin{macrocode}
+\tl_map_inline:nn
+ {
+ \new@mathgroup\cdp@list\cdp@elt\DeclareMathSizes
+ \@DeclareMathSizes\newmathalphabet\newmathalphabet@@\newmathalphabet@@@
+ \DeclareMathVersion\define@mathalphabet\define@mathgroup\addtoversion
+ \version@list\version@elt\alpha@list\alpha@elt
+ \restore@mathversion\init@restore@version\dorestore@version\process@table
+ \new@mathversion\DeclareSymbolFont\group@list\group@elt
+ \new@symbolfont\SetSymbolFont\SetSymbolFont@\get@cdp
+ \DeclareMathAlphabet\new@mathalphabet\SetMathAlphabet\SetMathAlphabet@
+ \DeclareMathAccent\set@mathaccent\DeclareMathSymbol\set@mathchar
+ \set@mathsymbol\DeclareMathDelimiter\@xxDeclareMathDelimiter
+ \@DeclareMathDelimiter\@xDeclareMathDelimiter\set@mathdelimiter
+ \set@@mathdelimiter\DeclareMathRadical\mathchar@type
+ \DeclareSymbolFontAlphabet\DeclareSymbolFontAlphabet@
+ }
+ {
+ \tl_remove_once:Nn \@preamblecmds {\do#1}
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Wrappers for kernel commands}
+%
+% Messages themselves are defined in \secref{codemsg}.
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_error:n { \msg_error:nn {unicode-math} }
+\cs_new:Npn \@@_error:nx { \msg_error:nnx {unicode-math} }
+\cs_new:Npn \@@_warning:n { \msg_warning:nn {unicode-math} }
+\cs_new:Npn \@@_warning:nnn { \msg_warning:nnxx {unicode-math} }
+\cs_new:Npn \@@_log:n { \msg_log:nn {unicode-math} }
+\cs_new:Npn \@@_log:nx { \msg_log:nnx {unicode-math} }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \msg_new:nnn {nnx}
+\cs_generate_variant:Nn \msg_new:nnnn {nnxx}
+\cs_new:Nn \@@_msg_new:nn { \msg_new:nnx {unicode-math} {#1} { \tl_trim_spaces:n {#2} } }
+% \end{macrocode}
+%
+%
+% \begin{macro}{\@@_cs_new:Nn}
+% \begin{macrocode}
+%<*debug>
+\int_new:N \g_@@_debug_nest_int
+\cs_new:Nn \@@_debug:n
+ {
+ \typeout{ <UM~DEBUG>~\prg_replicate:nn \g_@@_debug_nest_int {::}~ #1}
+ }
+\cs_new:Nn \@@_debug_start:n
+ {
+ \int_gincr:N \g_@@_debug_nest_int
+ \@@_debug:n {#1}
+ }
+\cs_new:Nn \@@_debug_end:n
+ {
+ \int_gdecr:N \g_@@_debug_nest_int
+ }
+%</debug>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_cs_set:Nn #1 #2
+ {
+ \cs_if_exist:NF #1 { \ERROR{CS~ DOES~ NOT~ EXIST,~ USE~ "NEW"} }
+ \cs_set_protected:Nn #1
+ {
+%<debug>\@@_debug_start:n { \cs_to_str:N #1 }
+ #2
+%<debug>\@@_debug_end:n { \cs_to_str:N #1 }
+ }
+ }
+\cs_new:Npn \@@_cs_new:Nn #1 #2
+ {
+ \cs_new_protected:Nn #1
+ {
+%<debug>\@@_debug_start:n { \cs_to_str:N #1 }
+ #2
+%<debug>\@@_debug_end:n { \cs_to_str:N #1 }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-pkgopt.dtx b/macros/latex/contrib/unicode-math/um-code-pkgopt.dtx
new file mode 100644
index 0000000000..68d265674a
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-pkgopt.dtx
@@ -0,0 +1,330 @@
+%%^^A%% um-code-pkgopt.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Package options.
+
+% \section{setup and package options}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\@@_keys_choices:nn}
+% To simplify the creation of option keys, let's iterate in pairs rather than worry about equals signs and commas.
+% \begin{macrocode}
+\cs_new:Nn \@@_keys_choices:nn
+ {
+ \cs_set:Npn \@@_keys_choices_fn:nn { \@@_keys_choices_aux:nnn {#1} }
+ \use:x
+ {
+ \exp_not:N \keys_define:nn {unicode-math}
+ {
+ #1 .choice: ,
+ \@@_tl_map_dbl:nN {#2} \@@_keys_choices_fn:nn
+ }
+ }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new:Nn \@@_keys_choices_aux:nnn { #1 / #2 .code:n = { \exp_not:n {#3} } , }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_tl_map_dbl:nN
+ {
+ \__@@_tl_map_dbl:Nnn #2 #1 \q_recursion_tail {}{} \q_recursion_stop
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \__@@_tl_map_dbl:Nnn
+ {
+ \quark_if_recursion_tail_stop:n {#2}
+ \quark_if_recursion_tail_stop:n {#3}
+ #1 {#2} {#3}
+ \__@@_tl_map_dbl:Nnn #1
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Compatibility}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathup}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathrm_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathrm_text_bool }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathrm}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathrm_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathrm_text_bool }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathit}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathit_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathit_text_bool }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathbf}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathbf_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathbf_text_bool }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathsf}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathsf_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathsf_text_bool }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathtt}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathtt_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathtt_text_bool }
+ }
+% \end{macrocode}
+%
+% \paragraph{math-style}
+% \begin{macrocode}
+\@@_keys_choices:nn {normal-style}
+ {
+ {ISO} {
+ \bool_gset_false:N \g_@@_literal_bool
+ \bool_gset_false:N \g_@@_upGreek_bool
+ \bool_gset_false:N \g_@@_upgreek_bool
+ \bool_gset_false:N \g_@@_upLatin_bool
+ \bool_gset_false:N \g_@@_uplatin_bool
+ }
+ {TeX} {
+ \bool_gset_false:N \g_@@_literal_bool
+ \bool_gset_true:N \g_@@_upGreek_bool
+ \bool_gset_false:N \g_@@_upgreek_bool
+ \bool_gset_false:N \g_@@_upLatin_bool
+ \bool_gset_false:N \g_@@_uplatin_bool
+ }
+ {french} {
+ \bool_gset_false:N \g_@@_literal_bool
+ \bool_gset_true:N \g_@@_upGreek_bool
+ \bool_gset_true:N \g_@@_upgreek_bool
+ \bool_gset_true:N \g_@@_upLatin_bool
+ \bool_gset_false:N \g_@@_uplatin_bool
+ }
+ {upright} {
+ \bool_gset_false:N \g_@@_literal_bool
+ \bool_gset_true:N \g_@@_upGreek_bool
+ \bool_gset_true:N \g_@@_upgreek_bool
+ \bool_gset_true:N \g_@@_upLatin_bool
+ \bool_gset_true:N \g_@@_uplatin_bool
+ }
+ {literal} {
+ \bool_gset_true:N \g_@@_literal_bool
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_keys_choices:nn {math-style}
+ {
+ {ISO} {
+ \unimathsetup { nabla=upright, partial=italic,
+ normal-style=ISO, bold-style=ISO, sans-style=italic }
+ }
+ {TeX} {
+ \unimathsetup { nabla=upright, partial=italic,
+ normal-style=TeX, bold-style=TeX, sans-style=upright }
+ }
+ {french} {
+ \unimathsetup { nabla=upright, partial=upright,
+ normal-style=french, bold-style=upright, sans-style=upright }
+ }
+ {upright} {
+ \unimathsetup { nabla=upright, partial=upright,
+ normal-style=upright, bold-style=upright, sans-style=upright }
+ }
+ {literal} {
+ \unimathsetup { colon=literal, nabla=literal, partial=literal,
+ normal-style=literal, bold-style=literal, sans-style=literal }
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{bold-style}
+% \begin{macrocode}
+\@@_keys_choices:nn {bold-style}
+ {
+ {ISO} {
+ \bool_gset_false:N \g_@@_bfliteral_bool
+ \bool_gset_false:N \g_@@_bfupGreek_bool
+ \bool_gset_false:N \g_@@_bfupgreek_bool
+ \bool_gset_false:N \g_@@_bfupLatin_bool
+ \bool_gset_false:N \g_@@_bfuplatin_bool
+ }
+ {TeX} {
+ \bool_gset_false:N \g_@@_bfliteral_bool
+ \bool_gset_true:N \g_@@_bfupGreek_bool
+ \bool_gset_false:N \g_@@_bfupgreek_bool
+ \bool_gset_true:N \g_@@_bfupLatin_bool
+ \bool_gset_true:N \g_@@_bfuplatin_bool
+ }
+ {upright} {
+ \bool_gset_false:N \g_@@_bfliteral_bool
+ \bool_gset_true:N \g_@@_bfupGreek_bool
+ \bool_gset_true:N \g_@@_bfupgreek_bool
+ \bool_gset_true:N \g_@@_bfupLatin_bool
+ \bool_gset_true:N \g_@@_bfuplatin_bool
+ }
+ {literal} {
+ \bool_gset_true:N \g_@@_bfliteral_bool
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{sans-style}
+% \begin{macrocode}
+\@@_keys_choices:nn {sans-style}
+ {
+ {italic} { \bool_gset_false:N \g_@@_upsans_bool }
+ {upright} { \bool_gset_true:N \g_@@_upsans_bool }
+ {literal} { \bool_gset_true:N \g_@@_sfliteral_bool }
+ }
+% \end{macrocode}
+%
+%
+% \paragraph{Nabla and partial}
+% \begin{macrocode}
+\@@_keys_choices:nn {nabla}
+ {
+ {upright} {
+ \bool_gset_false:N \g_@@_literal_Nabla_bool
+ \bool_gset_true:N \g_@@_upNabla_bool
+ }
+ {italic} {
+ \bool_gset_false:N \g_@@_literal_Nabla_bool
+ \bool_gset_false:N \g_@@_upNabla_bool
+ }
+ {literal} {
+ \bool_gset_true:N \g_@@_literal_Nabla_bool
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_keys_choices:nn {partial}
+ {
+ {upright} {
+ \bool_gset_false:N \g_@@_literal_partial_bool
+ \bool_gset_true:N \g_@@_uppartial_bool
+ }
+ {italic} {
+ \bool_gset_false:N \g_@@_literal_partial_bool
+ \bool_gset_false:N \g_@@_uppartial_bool
+ }
+ {literal} {
+ \bool_gset_true:N \g_@@_literal_partial_bool
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Colon style}
+% \begin{macrocode}
+\@@_keys_choices:nn {colon}
+ {
+ {literal} { \bool_gset_true:N \g_@@_literal_colon_bool }
+ {TeX} { \bool_gset_false:N \g_@@_literal_colon_bool }
+ }
+% \end{macrocode}
+%
+% \paragraph{Slash delimiter style}
+% \begin{macrocode}
+\@@_keys_choices:nn {slash-delimiter}
+ {
+ {ascii} { \tl_gset:Nn \g_@@_slash_delimiter_usv {"002F} }
+ {frac} { \tl_gset:Nn \g_@@_slash_delimiter_usv {"2044} }
+ {div} { \tl_gset:Nn \g_@@_slash_delimiter_usv {"2215} }
+ }
+% \end{macrocode}
+%
+%
+% \paragraph{Active fraction style}
+% \begin{macrocode}
+\@@_keys_choices:nn {active-frac}
+ {
+ {small}
+ {
+ \cs_if_exist:NTF \tfrac
+ { \bool_set_true:N \l_@@_smallfrac_bool }
+ {
+ \@@_warning:n {no-tfrac}
+ \bool_set_false:N \l_@@_smallfrac_bool
+ }
+ \use:c {@@_setup_active_frac:}
+ }
+
+ {normalsize}
+ {
+ \bool_set_false:N \l_@@_smallfrac_bool
+ \use:c {@@_setup_active_frac:}
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Debug/tracing}
+%
+% \begin{macrocode}
+\keys_define:nn {unicode-math}
+ {
+ warnings-off .code:n =
+ {
+ \clist_map_inline:nn {#1}
+ { \msg_redirect_name:nnn { unicode-math } { ##1 } { none } }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_keys_choices:nn {trace}
+ {
+ {on} {} % default
+ {debug} { \msg_redirect_module:nnn { unicode-math } { log } { warning } }
+ {off} { \msg_redirect_module:nnn { unicode-math } { log } { none } }
+ }
+% \end{macrocode}
+%
+% \subsection{Defaults}
+%
+% \begin{macrocode}
+\unimathsetup {math-style=TeX}
+\unimathsetup {slash-delimiter=ascii}
+\unimathsetup {trace=off}
+\unimathsetup {mathrm=text,mathit=text,mathbf=text,mathsf=text,mathtt=text}
+\cs_if_exist:NT \tfrac { \unimathsetup {active-frac=small} }
+\ProcessKeysOptions {unicode-math}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-primes.dtx b/macros/latex/contrib/unicode-math/um-code-primes.dtx
new file mode 100644
index 0000000000..ad3f3be642
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-primes.dtx
@@ -0,0 +1,385 @@
+%%^^A%% um-code-primes.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% The definitions needed for the input of primes.
+
+% \section{Primes}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% We need a new `prime' algorithm. Unicode math has four pre-drawn prime glyphs.
+% \begin{quote}\obeylines
+% \unichar{2032} {prime} (\cs{prime}): $x\prime$
+% \unichar{2033} {double prime} (\cs{dprime}): $x\dprime$
+% \unichar{2034} {triple prime} (\cs{trprime}): $x\trprime$
+% \unichar{2057} {quadruple prime} (\cs{qprime}): $x\qprime$
+% \end{quote}
+% As you can see, they're all drawn at the correct height without being superscripted.
+% However, in a correctly behaving OpenType font,
+% we also see different behaviour after the \texttt{ssty} feature is applied:
+% \begin{quote}
+% \font\1="[XITSMath-Regular.otf]:script=math,+ssty=0"\1
+% \char"1D465\char"2032\quad
+% \char"1D465\char"2033\quad
+% \char"1D465\char"2034\quad
+% \char"1D465\char"2057
+% \end{quote}
+% The glyphs are now `full size' so that when placed inside a superscript,
+% their shape will match the originally sized ones. Many thanks to Ross Mills
+% of Tiro Typeworks for originally pointing out this behaviour.
+%
+% In regular \LaTeX, primes can be entered with the straight quote character
+% |'|, and multiple straight quotes chain together to produce multiple
+% primes. Better results can be achieved in \pkg{unicode-math} by chaining
+% multiple single primes into a pre-drawn multi-prime glyph; consider
+% $x\prime{}\prime{}\prime$ vs.\ $x\trprime$.
+%
+% For Unicode maths, we wish to conserve this behaviour and augment it with
+% the possibility of adding any combination of Unicode prime or any of the
+% $n$-prime characters. E.g., the user might copy-paste a double prime from
+% another source and then later type another single prime after it; the output
+% should be the triple prime.
+%
+% Our algorithm is:
+% \begin{itemize}[nolistsep]
+% \item Prime encountered; pcount=1.
+% \item Scan ahead; if prime: pcount:=pcount+1; repeat.
+% \item If not prime, stop scanning.
+% \item If pcount=1, \cs{prime}, end.
+% \item If pcount=2, check \cs{dprime}; if it exists, use it, end; if not, goto last step.
+% \item Ditto pcount=3 \& \cs{trprime}.
+% \item Ditto pcount=4 \& \cs{qprime}.
+% \item If pcount>4 or the glyph doesn't exist, insert pcount \cs{prime}s with \cs{primekern} between each.
+% \end{itemize}
+%
+% This is a wrapper to insert a superscript; if there is a subsequent
+% trailing superscript, then it is included within the insertion.
+% \begin{macrocode}
+\cs_new:Nn \@@_arg_i_before_egroup:n {#1\egroup}
+\cs_new:Nn \@@_superscript:n
+ {
+ ^\bgroup #1
+ \peek_meaning_remove:NTF ^ \@@_arg_i_before_egroup:n \egroup
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_nprimes:Nn
+ {
+ \@@_superscript:n
+ {
+ #1
+ \prg_replicate:nn {#2-1} { \mskip \g_@@_primekern_muskip #1 }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_nprimes_select:nn
+ {
+ \int_case:nnF {#2}
+ {
+ {1} { \@@_superscript:n {#1} }
+ {2} {
+ \@@_glyph_if_exist:NnTF \g_@@_prime_font_cmd_tl {"2033}
+ { \@@_superscript:n {\@@_prime_double_mchar} }
+ { \@@_nprimes:Nn #1 {#2} }
+ }
+ {3} {
+ \@@_glyph_if_exist:NnTF \g_@@_prime_font_cmd_tl {"2034}
+ { \@@_superscript:n {\@@_prime_triple_mchar} }
+ { \@@_nprimes:Nn #1 {#2} }
+ }
+ {4} {
+ \@@_glyph_if_exist:NnTF \g_@@_prime_font_cmd_tl {"2057}
+ { \@@_superscript:n {\@@_prime_quad_mchar} }
+ { \@@_nprimes:Nn #1 {#2} }
+ }
+ }
+ {
+ \@@_nprimes:Nn #1 {#2}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_nbackprimes_select:nn
+ {
+ \int_case:nnF {#2}
+ {
+ {1} { \@@_superscript:n {#1} }
+ {2} {
+ \@@_glyph_if_exist:NnTF \g_@@_prime_font_cmd_tl {"2036}
+ { \@@_superscript:n {\@@_backprime_double_mchar} }
+ { \@@_nprimes:Nn #1 {#2} }
+ }
+ {3} {
+ \@@_glyph_if_exist:NnTF \g_@@_prime_font_cmd_tl {"2037}
+ { \@@_superscript:n {\@@_backprime_triple_mchar} }
+ { \@@_nprimes:Nn #1 {#2} }
+ }
+ }
+ {
+ \@@_nprimes:Nn #1 {#2}
+ }
+ }
+% \end{macrocode}
+%
+% Scanning is annoying because I'm too lazy to do it for the general case.
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_scan_prime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_zero:N \l_@@_primecount_int
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_dprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_set:Nn \l_@@_primecount_int {1}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_trprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_set:Nn \l_@@_primecount_int {2}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_qprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_set:Nn \l_@@_primecount_int {3}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_prime:
+ {
+ \int_zero:N \l_@@_primecount_int
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_dprime:
+ {
+ \int_set:Nn \l_@@_primecount_int {1}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_trprime:
+ {
+ \int_set:Nn \l_@@_primecount_int {2}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_qprime:
+ {
+ \int_set:Nn \l_@@_primecount_int {3}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Nn \@@_scanprime_collect:N
+ {
+ \int_incr:N \l_@@_primecount_int
+ \peek_meaning_remove:NTF '
+ { \@@_scanprime_collect:N #1 }
+ {
+ \peek_meaning_remove:NTF \@@_scan_prime:
+ { \@@_scanprime_collect:N #1 }
+ {
+ \peek_meaning_remove:NTF ^^^^2032
+ { \@@_scanprime_collect:N #1 }
+ {
+ \peek_meaning_remove:NTF \@@_scan_dprime:
+ {
+ \int_incr:N \l_@@_primecount_int
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2033
+ {
+ \int_incr:N \l_@@_primecount_int
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF \@@_scan_trprime:
+ {
+ \int_add:Nn \l_@@_primecount_int {2}
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2034
+ {
+ \int_add:Nn \l_@@_primecount_int {2}
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF \@@_scan_qprime:
+ {
+ \int_add:Nn \l_@@_primecount_int {3}
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2057
+ {
+ \int_add:Nn \l_@@_primecount_int {3}
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \@@_nprimes_select:nn {#1} {\l_@@_primecount_int}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_scan_backprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_zero:N \l_@@_primecount_int
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Npn \@@_scan_backdprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_set:Nn \l_@@_primecount_int {1}
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Npn \@@_scan_backtrprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_set:Nn \l_@@_primecount_int {2}
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_backprime:
+ {
+ \int_zero:N \l_@@_primecount_int
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_backdprime:
+ {
+ \int_set:Nn \l_@@_primecount_int {1}
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_backtrprime:
+ {
+ \int_set:Nn \l_@@_primecount_int {2}
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Nn \@@_scanbackprime_collect:N
+ {
+ \int_incr:N \l_@@_primecount_int
+ \peek_meaning_remove:NTF `
+ {
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF \@@_scan_backprime:
+ {
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2035
+ {
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF \@@_scan_backdprime:
+ {
+ \int_incr:N \l_@@_primecount_int
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2036
+ {
+ \int_incr:N \l_@@_primecount_int
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF \@@_scan_backtrprime:
+ {
+ \int_add:Nn \l_@@_primecount_int {2}
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2037
+ {
+ \int_add:Nn \l_@@_primecount_int {2}
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \@@_nbackprimes_select:nn {#1} {\l_@@_primecount_int}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AtBeginDocument { \@@_define_prime_commands: \@@_define_prime_chars: }
+\cs_new:Nn \@@_define_prime_commands:
+ {
+ \cs_set_eq:NN \prime \@@_prime_single_mchar
+ \cs_set_eq:NN \dprime \@@_prime_double_mchar
+ \cs_set_eq:NN \trprime \@@_prime_triple_mchar
+ \cs_set_eq:NN \qprime \@@_prime_quad_mchar
+ \cs_set_eq:NN \backprime \@@_backprime_single_mchar
+ \cs_set_eq:NN \backdprime \@@_backprime_double_mchar
+ \cs_set_eq:NN \backtrprime \@@_backprime_triple_mchar
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\group_begin:
+ \char_set_catcode_active:N \'
+ \char_set_catcode_active:N \`
+ \char_set_catcode_active:n {"2032}
+ \char_set_catcode_active:n {"2033}
+ \char_set_catcode_active:n {"2034}
+ \char_set_catcode_active:n {"2057}
+ \char_set_catcode_active:n {"2035}
+ \char_set_catcode_active:n {"2036}
+ \char_set_catcode_active:n {"2037}
+ \cs_gset:Nn \@@_define_prime_chars:
+ {
+ \cs_set_eq:NN ' \@@_scan_sup_prime:
+ \cs_set_eq:NN ^^^^2032 \@@_scan_sup_prime:
+ \cs_set_eq:NN ^^^^2033 \@@_scan_sup_dprime:
+ \cs_set_eq:NN ^^^^2034 \@@_scan_sup_trprime:
+ \cs_set_eq:NN ^^^^2057 \@@_scan_sup_qprime:
+ \cs_set_eq:NN ` \@@_scan_sup_backprime:
+ \cs_set_eq:NN ^^^^2035 \@@_scan_sup_backprime:
+ \cs_set_eq:NN ^^^^2036 \@@_scan_sup_backdprime:
+ \cs_set_eq:NN ^^^^2037 \@@_scan_sup_backtrprime:
+ }
+\group_end:
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-setchar.dtx b/macros/latex/contrib/unicode-math/um-code-setchar.dtx
new file mode 100644
index 0000000000..8d2ba46e2a
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-setchar.dtx
@@ -0,0 +1,298 @@
+%%^^A%% um-code-setchar.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% General assignment of maths symbols.
+
+% \section{Setting up maths chars}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \subsection{A token list to contain the data of the math table}
+%
+% Instead of \cmd\input-ing the unicode math table every time we
+% want to re-read its data, we save it within a macro. This has two
+% advantages: 1.~it should be slightly faster, at the expense of memory;
+% 2.~we don't need to worry about catcodes later, since they're frozen
+% at this point.
+%
+% In time, the case statement inside |set_mathsymbol| will be moved in here
+% to avoid re-running it every time.
+%
+% \begin{macrocode}
+\group_begin:
+ \file_get:nnN {unicode-math-table.tex} {} \l_@@_mathtable_tl
+ \cs_set:Npn \UnicodeMathSymbol #1#2#3#4
+ {
+ \exp_not:n { \_@@_sym:nnn {#1} {#2} {#3} }
+ }
+ \tl_gset:Nx \g_@@_mathtable_tl {\l_@@_mathtable_tl}
+\group_end:
+% \end{macrocode}
+%
+%
+% \begin{macro}{\@@_input_math_symbol_table:}
+% This function simply expands to the token list containing all the data.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_input_math_symbol_table: {\g_@@_mathtable_tl}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Definitions of the active math characters}
+%
+% Ensure catcodes are appropriate;
+% make sure |#| is an `other' so that we don't get confused with \cs{mathoctothorpe}.
+% \begin{macrocode}
+\AtBeginDocument{\@@_define_math_chars:}
+\@@_cs_new:Nn \@@_define_math_chars:
+ {
+ \group_begin:
+ \cs_set:Npn \_@@_sym:nnn ##1##2##3
+ {
+ \tl_if_in:nnT
+ { \mathord \mathalpha \mathbin \mathrel \mathpunct \mathop \mathfence }
+ {##3}
+ {
+ \exp_last_unbraced:NNx \cs_gset_eq:NN ##2 { \char_generate:nn {##1} {12} }
+ }
+ }
+ \@@_input_math_symbol_table:
+ \group_end:
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsection{Commands for each symbol/glyph/char}
+%
+% \begin{macro}{\@@_set_mathsymbol:nNNn}
+% \darg{A \LaTeX\ symbol font, e.g., \texttt{operators}}
+% \darg{Symbol macro, \eg, \cmd\alpha}
+% \darg{Type, \eg, \cmd\mathalpha}
+% \darg{Slot, \eg, \texttt{"221E}}
+% There are a bunch of tests to perform to process the various characters.
+% The following assignments should all be fairly straightforward.
+%
+% The catcode setting is to work around (strange?) behaviour in LuaTeX in which catcode 11 characters don't have italic correction for maths.
+% We don't adjust ascii chars, however, because certain punctuation should not have their catcodes changed.
+% \begin{macrocode}
+\cs_set:Nn \@@_set_mathsymbol:nNNn
+ {
+ \bool_lazy_and:nnT
+ {
+ \int_compare_p:nNn {#4} > {127}
+ }
+ {
+ \int_compare_p:nNn { \char_value_catcode:n {#4} } = {11}
+ }
+ { \char_set_catcode_other:n {#4} }
+
+ \tl_case:Nn #3
+ {
+ \mathord { \@@_set_mathcode:nnn {#4} {#3} {#1} }
+ \mathalpha { \@@_set_mathcode:nnn {#4} {#3} {#1} }
+ \mathbin { \@@_set_mathcode:nnn {#4} {#3} {#1} }
+ \mathrel { \@@_set_mathcode:nnn {#4} {#3} {#1} }
+ \mathpunct { \@@_set_mathcode:nnn {#4} {#3} {#1} }
+ \mathop { \@@_set_big_operator:nnn {#1} {#2} {#4} }
+ \mathopen { \@@_set_math_open:nnn {#1} {#2} {#4} }
+ \mathclose { \@@_set_math_close:nnn {#1} {#2} {#4} }
+ \mathfence { \@@_set_math_fence:nnnn {#1} {#2} {#3} {#4} }
+ \mathaccent
+ { \@@_set_math_accent:Nnnn #2 {fixed} {#1} {#4} }
+ \mathbotaccent
+ { \@@_set_math_accent:Nnnn #2 {bottom~ fixed} {#1} {#4} }
+ \mathaccentwide
+ { \@@_set_math_accent:Nnnn #2 {} {#1} {#4} }
+ \mathbotaccentwide
+ { \@@_set_math_accent:Nnnn #2 {bottom} {#1} {#4} }
+ \mathover
+ { \@@_set_math_overunder:Nnnn #2 {} {#1} {#4} }
+ \mathunder
+ { \@@_set_math_overunder:Nnnn #2 {bottom} {#1} {#4} }
+ \mathaccentoverlay
+%<LU> { \@@_set_math_accent:Nnnn #2 {overlay~ fixed} {#1} {#4} }
+%<XE> { \@@_set_math_accent:Nnnn #2 {} {#1} {#4} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\edef\mathfence{\string\mathfence}
+\edef\mathover{\string\mathover}
+\edef\mathunder{\string\mathunder}
+\edef\mathbotaccent{\string\mathbotaccent}
+\edef\mathaccentwide{\string\mathaccentwide}
+\edef\mathaccentoverlay{\string\mathaccentoverlay}
+\edef\mathbotaccentwide{\string\mathbotaccentwide}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\@@_set_big_operator:nnn}
+% \darg{Symbol font name}
+% \darg{Macro to assign}
+% \darg{Glyph slot}
+% In the examples following, say we're defining for the symbol \cmd\sum\ ($\sum$).
+% In order for literal Unicode characters to be used in the source and still
+% have the correct limits behaviour, big operators are made math-active.
+% This involves three steps:
+% \begin{itemize}
+% \item
+% The active math char is defined to expand to the macro \cs{sum_sym}.
+% (Later, the control sequence \cs{sum} will be assigned the math char.)
+% \item
+% Declare the plain old mathchardef for the control sequence \cmd\sumop.
+% (This follows the convention of \LaTeX/\pkg{amsmath}.)
+% \item
+% Define \cs{sum_sym} as \cmd\sumop, followed by \cmd\nolimits\ if necessary.
+% \end{itemize}
+% Whether the \cmd\nolimits\ suffix is inserted is controlled by the
+% token list \cs{l_@@_nolimits_tl}, which contains a list of such characters.
+% This list is checked dynamically to allow it to be updated mid-document.
+%
+% Examples of expansion, by default, for two big operators:
+% \begin{quote}
+% (~\cs{sum} $\to$~) $\sum$ $\to$ \cs{sum_sym} $\to$ \cs{sumop}\cs{nolimits}\par
+% (~\cs{int} $\to$~) $\int$ $\to$ \cs{int_sym} $\to$ \cs{intop}
+% \end{quote}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_big_operator:nnn
+ {
+ \@@_char_gmake_mathactive:n {#3}
+ \cs_set_protected_nopar:Npx \@@_tmpa: { \exp_not:c { \cs_to_str:N #2 _sym } }
+ \char_gset_active_eq:nN {#3} \@@_tmpa:
+
+ \@@_set_mathchar:cNnn {\cs_to_str:N #2 op} \mathop {#1} {#3}
+
+ \cs_gset:cpx { \cs_to_str:N #2 _sym }
+ {
+ \exp_not:c { \cs_to_str:N #2 op }
+ \exp_not:n { \tl_if_in:NnT \l_@@_nolimits_tl {#2} \nolimits }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_math_open:nnn}
+% \darg{Symbol font name}
+% \darg{Macro to assign}
+% \darg{Glyph slot}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_math_open:nnn
+ {
+ \tl_if_in:NnTF \l_@@_radicals_tl {#2}
+ {
+ \cs_if_exist:NF #2
+ {
+ %% todo: check if the check is necessary
+ \cs_gset_protected_nopar:Npx #2 { \exp_not:c { \cs_to_str:N #2 sign } }
+ }
+ \cs_gset_protected_nopar:cpx { \cs_to_str:N #2 sign }
+ {
+ \@@_radical:nn {#1} {#3}
+ }
+ \tl_if_exist:cF {c_@@_radical_\cs_to_str:N #2_tl}
+ {
+ \tl_const:cn {c_@@_radical_\cs_to_str:N #2_tl} {\use:c{sym #1}~ #3}
+ }
+ }
+ {
+ \@@_set_delcode:nnn {#1} {#3} {#3}
+ \@@_set_mathcode:nnn {#3} \mathopen {#1}
+ \cs_gset_protected_nopar:Npx #2
+ { \@@_delimiter:Nnn \mathopen {#1} {#3} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_math_close:nnn}
+% \darg{Symbol font name}
+% \darg{Macro to assign}
+% \darg{Glyph slot}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_math_close:nnn
+ {
+ \@@_set_delcode:nnn {#1} {#3} {#3}
+ \@@_set_mathcode:nnn {#3} \mathclose {#1}
+ \cs_gset_protected_nopar:Npx #2
+ { \@@_delimiter:Nnn \mathclose {#1} {#3} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_math_fence:nnnn}
+% \darg{Symbol font name}
+% \darg{Macro to assign}
+% \darg{Type, \eg, \cmd\mathalpha}
+% \darg{Glyph slot}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_math_fence:nnnn
+ {
+ \@@_set_mathcode:nnn {#4} {#3} {#1}
+ \@@_set_delcode:nnn {#1} {#4} {#4}
+ \cs_gset_protected_nopar:cpx {l \cs_to_str:N #2}
+ { \@@_delimiter:Nnn \mathopen {#1} {#4} }
+ \cs_gset_protected_nopar:cpx {r \cs_to_str:N #2}
+ { \@@_delimiter:Nnn \mathclose {#1} {#4} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_math_accent:Nnnn}
+% \darg{Accend command}
+% \darg{Accent type (string)}
+% \darg{Symbol font name}
+% \darg{Glyph slot}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_math_accent:Nnnn
+ {
+ \cs_gset_protected_nopar:Npx #1
+ { \@@_accent:nnn {#2} {#3} {#4} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_math_overunder:Nnnn}
+% \darg{Accend command}
+% \darg{Accent type (string)}
+% \darg{Symbol font name}
+% \darg{Glyph slot}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_math_overunder:Nnnn
+ {
+ \cs_gset_protected_nopar:Npx #1 ##1
+ {
+ \mathop
+ { \@@_accent:nnn {#2} {#3} {#4} {{}##1} }
+ % TODO: remove braces above ^^ which work around a LuaTeX bug
+ \limits
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-sscript.dtx b/macros/latex/contrib/unicode-math/um-code-sscript.dtx
new file mode 100644
index 0000000000..a2192714dd
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-sscript.dtx
@@ -0,0 +1,238 @@
+%%^^A%% um-code-sscript.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Setup for active chars needed to process subscript/superscript input chars.
+
+% \section{Unicode sub- and super-scripts}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% The idea here is to enter a scanning state after a superscript or subscript
+% is encountered.
+% If subsequent superscripts or subscripts (resp.) are found,
+% they are lumped together.
+% Each sub/super has a corresponding regular size
+% glyph which is used by \XeTeX\ to typeset the results; this means that the
+% actual subscript/superscript glyphs are never seen in the output
+% document~--- they are only used as input characters.
+%
+% Open question: should the superscript-like `modifiers' (\unichar{1D2C}
+% {modifier capital letter a} and on) be included here?
+%
+% \paragraph{Superscripts}
+% Populate a property list with superscript characters; themselves as their
+% key, and their replacement as each key's value.
+% Then make the superscript active and bind it to the scanning function.
+%
+% \cs{scantokens} makes this process much simpler since we can activate the
+% char and assign its meaning in one step.
+% \begin{macrocode}
+\cs_new:Nn \@@_setup_active_superscript:nn
+ {
+ \prop_gput:Nxn \g_@@_supers_prop { \int_eval:n {#1} } {#2}
+ \@@_mathactive_remap:nn {#1}
+ {
+ \tl_set:Nn \l_@@_ss_chain_tl {#2}
+ \cs_set_eq:NN \@@_sub_or_super:n \sp
+ \tl_set:Nn \l_@@_tmpa_tl {supers}
+ \@@_scan_sscript:
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Subscripts}
+% \begin{macrocode}
+\cs_new:Nn \@@_setup_active_subscript:nn
+ {
+ \prop_gput:Nxn \g_@@_subs_prop { \int_eval:n {#1} } {#2}
+ \@@_mathactive_remap:nn {#1}
+ {
+ \tl_set:Nn \l_@@_ss_chain_tl {#2}
+ \cs_set_eq:NN \@@_sub_or_super:n \sb
+ \tl_set:Nn \l_@@_tmpa_tl {subs}
+ \@@_scan_sscript:
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{The scanning command}
+% Collects a chain of subscripts or a chain
+% of superscripts and then typesets what it has collected.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_scan_sscript:
+ {
+ \@@_scan_sscript:TF
+ { \@@_scan_sscript: }
+ { \@@_sub_or_super:n {\l_@@_ss_chain_tl} }
+ }
+% \end{macrocode}
+% We do not skip spaces when scanning ahead, and we explicitly wish to
+% bail out on encountering a space or a brace. These cases are filtered
+% using \cs{peek_N_type:TF}. Otherwise the token can be taken as an
+% \texttt{N}-type argument. Then we search for it in the appropriate
+% property list (\cs{l_@@_tmpa_tl} is |subs| or |supers|).
+% If found, add the value to the current chain of sub/superscripts.
+% Remember to put the character back in the input otherwise.
+% The \cs{group_align_safe_begin:} and \cs{group_align_safe_end:} are
+% needed in case |#3| is |&|.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_scan_sscript:TF
+ {
+ \peek_N_type:TF
+ {
+ \group_align_safe_begin:
+ \@@_scan_sscript_aux:nnN {#1} {#2}
+ }
+ {#2}
+ }
+% \end{macrocode}
+% The look-ahead for the sscripts doesn't try to peek inside the lookahead.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_scan_sscript_aux:nnN
+ {
+ \tl_set:Nx \l_@@_tmpa_key_tl { \tl_to_str:n {#3} }
+ \prop_get:cxNTF {g_@@_\l_@@_tmpa_tl _prop}
+ { \int_eval:n { \exp_after:wN ` \l_@@_tmpa_key_tl } }
+ \l_@@_tmpb_tl
+ {
+ \tl_put_right:NV \l_@@_ss_chain_tl \l_@@_tmpb_tl
+ \group_align_safe_end:
+ #1
+ }
+ { \group_align_safe_end: #2 #3 }
+ }
+% \end{macrocode}
+%
+% \paragraph{Definitions}
+% Superscripts.
+% \begin{macrocode}
+\@@_setup_active_superscript:nn {"2070} {0}
+\@@_setup_active_superscript:nn {"00B9} {1}
+\@@_setup_active_superscript:nn {"00B2} {2}
+\@@_setup_active_superscript:nn {"00B3} {3}
+\@@_setup_active_superscript:nn {"2074} {4}
+\@@_setup_active_superscript:nn {"2075} {5}
+\@@_setup_active_superscript:nn {"2076} {6}
+\@@_setup_active_superscript:nn {"2077} {7}
+\@@_setup_active_superscript:nn {"2078} {8}
+\@@_setup_active_superscript:nn {"2079} {9}
+\@@_setup_active_superscript:nn {"207A} {+}
+\@@_setup_active_superscript:nn {"207B} {-}
+\@@_setup_active_superscript:nn {"207C} {=}
+\@@_setup_active_superscript:nn {"207D} {(}
+\@@_setup_active_superscript:nn {"207E} {)}
+\@@_setup_active_superscript:nn {"1D2C} {A}
+\@@_setup_active_superscript:nn {"1D2E} {B}
+\@@_setup_active_superscript:nn {"1D30} {D}
+\@@_setup_active_superscript:nn {"1D31} {E}
+\@@_setup_active_superscript:nn {"1D33} {G}
+\@@_setup_active_superscript:nn {"1D34} {H}
+\@@_setup_active_superscript:nn {"1D35} {I}
+\@@_setup_active_superscript:nn {"1D36} {J}
+\@@_setup_active_superscript:nn {"1D37} {K}
+\@@_setup_active_superscript:nn {"1D38} {L}
+\@@_setup_active_superscript:nn {"1D39} {M}
+\@@_setup_active_superscript:nn {"1D3A} {N}
+\@@_setup_active_superscript:nn {"1D3C} {O}
+\@@_setup_active_superscript:nn {"1D3E} {P}
+\@@_setup_active_superscript:nn {"1D3F} {R}
+\@@_setup_active_superscript:nn {"1D40} {T}
+\@@_setup_active_superscript:nn {"1D41} {U}
+\@@_setup_active_superscript:nn {"2C7D} {V}
+\@@_setup_active_superscript:nn {"1D42} {W}
+\@@_setup_active_superscript:nn {"1D43} {a}
+\@@_setup_active_superscript:nn {"1D47} {b}
+\@@_setup_active_superscript:nn {"1D9C} {c}
+\@@_setup_active_superscript:nn {"1D48} {d}
+\@@_setup_active_superscript:nn {"1D49} {e}
+\@@_setup_active_superscript:nn {"1DA0} {f}
+\@@_setup_active_superscript:nn {"1D4D} {g}
+\@@_setup_active_superscript:nn {"02B0} {h}
+\@@_setup_active_superscript:nn {"2071} {i}
+\@@_setup_active_superscript:nn {"02B2} {j}
+\@@_setup_active_superscript:nn {"1D4F} {k}
+\@@_setup_active_superscript:nn {"02E1} {l}
+\@@_setup_active_superscript:nn {"1D50} {m}
+\@@_setup_active_superscript:nn {"207F} {n}
+\@@_setup_active_superscript:nn {"1D52} {o}
+\@@_setup_active_superscript:nn {"1D56} {p}
+\@@_setup_active_superscript:nn {"02B3} {r}
+\@@_setup_active_superscript:nn {"02E2} {s}
+\@@_setup_active_superscript:nn {"1D57} {t}
+\@@_setup_active_superscript:nn {"1D58} {u}
+\@@_setup_active_superscript:nn {"1D5B} {v}
+\@@_setup_active_superscript:nn {"02B7} {w}
+\@@_setup_active_superscript:nn {"02E3} {x}
+\@@_setup_active_superscript:nn {"02B8} {y}
+\@@_setup_active_superscript:nn {"1DBB} {z}
+\@@_setup_active_superscript:nn {"1D5D} {\beta}
+\@@_setup_active_superscript:nn {"1D5E} {\gamma}
+\@@_setup_active_superscript:nn {"1D5F} {\delta}
+\@@_setup_active_superscript:nn {"1D60} {\phi}
+\@@_setup_active_superscript:nn {"1D61} {\chi}
+\@@_setup_active_superscript:nn {"1DBF} {\theta}
+% \end{macrocode}
+% A few more subscripts than superscripts:
+% \begin{macrocode}
+\@@_setup_active_subscript:nn {"2080} {0}
+\@@_setup_active_subscript:nn {"2081} {1}
+\@@_setup_active_subscript:nn {"2082} {2}
+\@@_setup_active_subscript:nn {"2083} {3}
+\@@_setup_active_subscript:nn {"2084} {4}
+\@@_setup_active_subscript:nn {"2085} {5}
+\@@_setup_active_subscript:nn {"2086} {6}
+\@@_setup_active_subscript:nn {"2087} {7}
+\@@_setup_active_subscript:nn {"2088} {8}
+\@@_setup_active_subscript:nn {"2089} {9}
+\@@_setup_active_subscript:nn {"208A} {+}
+\@@_setup_active_subscript:nn {"208B} {-}
+\@@_setup_active_subscript:nn {"208C} {=}
+\@@_setup_active_subscript:nn {"208D} {(}
+\@@_setup_active_subscript:nn {"208E} {)}
+\@@_setup_active_subscript:nn {"2090} {a}
+\@@_setup_active_subscript:nn {"2091} {e}
+\@@_setup_active_subscript:nn {"2095} {h}
+\@@_setup_active_subscript:nn {"1D62} {i}
+\@@_setup_active_subscript:nn {"2C7C} {j}
+\@@_setup_active_subscript:nn {"2096} {k}
+\@@_setup_active_subscript:nn {"2097} {l}
+\@@_setup_active_subscript:nn {"2098} {m}
+\@@_setup_active_subscript:nn {"2099} {n}
+\@@_setup_active_subscript:nn {"2092} {o}
+\@@_setup_active_subscript:nn {"209A} {p}
+\@@_setup_active_subscript:nn {"1D63} {r}
+\@@_setup_active_subscript:nn {"209B} {s}
+\@@_setup_active_subscript:nn {"209C} {t}
+\@@_setup_active_subscript:nn {"1D64} {u}
+\@@_setup_active_subscript:nn {"1D65} {v}
+\@@_setup_active_subscript:nn {"2093} {x}
+\@@_setup_active_subscript:nn {"1D66} {\beta}
+\@@_setup_active_subscript:nn {"1D67} {\gamma}
+\@@_setup_active_subscript:nn {"1D68} {\rho}
+\@@_setup_active_subscript:nn {"1D69} {\phi}
+\@@_setup_active_subscript:nn {"1D6A} {\chi}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-sym-commands.dtx b/macros/latex/contrib/unicode-math/um-code-sym-commands.dtx
new file mode 100644
index 0000000000..b2450878fe
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-sym-commands.dtx
@@ -0,0 +1,216 @@
+%%^^A%% um-code-sym-commands.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Definition of "math symbol alphabet" commands such as `\symbf` and co.
+
+% \section{Mapping in maths alphabets}
+% \label{sec:symcmd}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \subsection{Setting styles}
+%
+% Algorithm for setting alphabet fonts.
+% By default, when |range| is empty, we are in \emph{implicit} mode.
+% If |range| contains the name of the math alphabet, we are in \emph{explicit}
+% mode and do things slightly differently.
+%
+% Implicit mode:
+% \begin{itemize}
+% \item Try and set all of the alphabet shapes.
+% \item Check for the first glyph of each alphabet to detect if the font supports each
+% alphabet shape.
+% \item For alphabets that do exist, overwrite whatever’s already there.
+% \item For alphabets that are not supported, \emph{do nothing}.
+% (This includes leaving the old alphabet definition in place.)
+% \end{itemize}
+%
+% Explicit mode:
+% \begin{itemize}
+% \item Only set the alphabets specified.
+% \item Check for the first glyph of the alphabet to detect if the font contains
+% the alphabet shape in the Unicode math plane.
+% \item For Unicode math alphabets, overwrite whatever’s already there.
+% \item Otherwise, use the \ascii\ glyph slots instead.
+% \end{itemize}
+%
+%
+%
+% \subsection{Defining the math style macros}
+%
+% We call the different shapes that a math alphabet can be a `math style’.
+% Note that different alphabets can exist within the same math style. E.g.,
+% we call `bold’ the math style |bf| and within it there are upper and lower
+% case Greek and Roman alphabets and Arabic numerals.
+%
+% \begin{macro}{\@@_prepare_mathstyle:n}
+% \darg{math style name (e.g., \texttt{it} or \texttt{bb})}
+% Define the high level math alphabet macros (\cs{mathit}, etc.) in terms of
+% unicode-math definitions. Use \cs{bgroup}/\cs{egroup} so s’scripts scan the
+% whole thing.
+%
+% The flag \cs{l_@@_mathstyle_tl} is for other applications to query the
+% current math style.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_prepare_mathstyle:n
+ {
+ \seq_gput_right:Nn \g_@@_mathstyles_seq {#1}
+ \@@_init_alphabet:n {#1}
+ \cs_set_protected:cpx {sym#1}
+ {
+ \@@_group_begin:
+ \exp_not:n
+ {
+ \mode_if_math:F { \exp_args:Nc \non@alpherr {sym#1} }
+ \tl_set:Nn \l_@@_mathstyle_tl {#1}
+ }
+ \@@_switch_to:n {#1}
+ \@@_mathgroup_set:n {-1}
+ \@@_group_end:n
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_init_alphabet:n}
+% \darg{math alphabet name (e.g., \texttt{it} or \texttt{bb})}
+% This macro initialises the macros used to set up a math alphabet.
+% First used when the math alphabet macro is first defined, but then used
+% later when redefining a particular maths alphabet.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_init_alphabet:n
+ {
+ \@@_log:nx {alph-initialise} {#1}
+ \tl_gclear_new:c {g_@@_switchto_#1_tl}
+ \cs_set_protected:cpn {@@_switchto_#1:} { \tl_use:c {g_@@_switchto_#1_tl} }
+ }
+\cs_new_protected:Nn \@@_switch_to:n
+ {
+ \tl_use:c {g_@@_switchto_#1_tl}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Definition of alphabets and styles}
+%
+%
+% The linking between named ranges and symbol style commands happens here.
+% It’s currently not using all of the machinery we’re in the process of setting up above.
+% Baby steps.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_default_mathalph:nnn
+ {
+ \prop_new:c {g_@@_named_range_#1_prop}
+ \seq_gput_right:Nn \g_@@_default_mathalph_seq {{#1}{#2}{#3}}
+ \prop_gput:cnn { g_@@_named_range_#1_prop } { default-alpha } {#2}
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_default_mathalph:nnn {up } {latin,Latin,greek,Greek,num,misc} {up }
+\@@_default_mathalph:nnn {it } {latin,Latin,greek,Greek,misc} {it }
+\@@_default_mathalph:nnn {bb } {latin,Latin,num,misc} {bb }
+\@@_default_mathalph:nnn {bbit } {misc} {bbit }
+\@@_default_mathalph:nnn {scr } {latin,Latin} {scr }
+\@@_default_mathalph:nnn {cal } {Latin} {scr }
+\@@_default_mathalph:nnn {bfcal } {Latin} {bfscr }
+\@@_default_mathalph:nnn {frak } {latin,Latin} {frak }
+\@@_default_mathalph:nnn {tt } {latin,Latin,num} {tt }
+\@@_default_mathalph:nnn {sfup } {latin,Latin,num} {sfup }
+\@@_default_mathalph:nnn {sfit } {latin,Latin} {sfit }
+\@@_default_mathalph:nnn {bfup } {latin,Latin,greek,Greek,num,misc} {bfup }
+\@@_default_mathalph:nnn {bfit } {latin,Latin,greek,Greek,misc} {bfit }
+\@@_default_mathalph:nnn {bfscr } {latin,Latin} {bfscr }
+\@@_default_mathalph:nnn {bffrak} {latin,Latin} {bffrak}
+\@@_default_mathalph:nnn {bfsfup} {latin,Latin,greek,Greek,num,misc} {bfsfup}
+\@@_default_mathalph:nnn {bfsfit} {latin,Latin,greek,Greek,misc} {bfsfit}
+% \end{macrocode}
+%
+% \subsubsection{Define symbol style commands}
+% Finally, all of the `symbol styles’ commands are set up, which are the commands to access each of the named alphabet styles. There is not a one-to-one mapping between symbol style commands and named style ranges!
+% \begin{macrocode}
+\clist_map_inline:nn
+ {
+ up, it, bfup, bfit, sfup, sfit, bfsfup, bfsfit, bfsf,
+ tt, bb, bbit, scr, bfscr, cal, bfcal, frak, bffrak,
+ normal, literal, sf, bf,
+ }
+ {
+ \@@_prepare_mathstyle:n {#1}
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection{New names for legacy textmath alphabet selection}
+% In case a package option overwrites, say, \cs{mathbf} with \cs{symbf}.
+% \begin{macrocode}
+\clist_map_inline:nn
+ { rm, it, bf, sf, tt }
+ { \cs_set_eq:cc { mathtext #1 } { math #1 } }
+% \end{macrocode}
+% Perhaps these should actually be defined using a hypothetical unicode-math interface to creating new such styles. To come.
+%
+%
+% \subsubsection{Replacing legacy pure-maths alphabets}
+% The following are alphabets which do not have a math/text ambiguity.
+% \begin{macrocode}
+\clist_map_inline:nn
+ {
+ normal, bb , bbit, scr, bfscr, cal, bfcal, frak, bffrak, tt,
+ bfup, bfit, sfup, sfit, bfsfup, bfsfit, bfsf
+ }
+ {
+ \cs_set:cpx { math #1 } { \exp_not:c { sym #1 } }
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection{New commands for ambiguous alphabets}
+%
+% \begin{macrocode}
+\AtBeginDocument { \@@_setup_mathtext: }
+\@@_cs_new:Nn \@@_setup_mathtext:
+ {
+ \clist_map_inline:nn
+ { rm, it, bf, sf, tt }
+ {
+ \cs_set_protected:cpx { math ##1 }
+ {
+ \exp_not:n { \bool_if:NTF } \exp_not:c { g_@@_ math ##1 _text_bool}
+ { \exp_not:c { mathtext ##1 } }
+ { \exp_not:c { sym ##1 } }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Alias \cs{mathrm} as legacy name for \cs{mathup}}
+% \begin{macrocode}
+\cs_set_protected:Npn \mathup { \mathrm }
+\cs_set_protected:Npn \symrm { \symup }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-ui.dtx b/macros/latex/contrib/unicode-math/um-code-ui.dtx
new file mode 100644
index 0000000000..38c257d1dc
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-ui.dtx
@@ -0,0 +1,101 @@
+%%^^A%% um-code-ui.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% The xparse user interface top-level definitions.
+
+% \section{The user interface commands}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\unimathsetup}
+% This macro can be used in lieu of or later to override
+% options declared when the package is loaded.
+% \begin{macrocode}
+\NewDocumentCommand \unimathsetup {m} { \keys_set:nn {unicode-math} {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setmathfont}
+% \doarg{font features (first optional argument retained for backwards compatibility)}
+% \darg{font name}
+% \doarg{font features}
+% \begin{macrocode}
+\NewDocumentCommand \setmathfont { O{} m O{} }
+ {
+ \@@_setmathfont:nn {#1,#3} {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setmathfontface}
+% \begin{macrocode}
+\NewDocumentCommand \setmathfontface { m O{} m O{} }
+ {
+ \@@_setmathfontface:Nnn #1 {#2,#4} {#3}
+ }
+% \end{macrocode}
+%
+% Note that \LaTeX’s \cs{SetMathAlphabet} simply doesn’t work to “reset” a maths alphabet font after \verb”\begin{document}”, so unlike most of the other maths commands around we still restrict this one to the preamble.
+% \begin{macrocode}
+\@onlypreamble \setmathfontface
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\setoperatorfont}
+% TODO: add check?
+% \begin{macrocode}
+\NewDocumentCommand \setoperatorfont {m}
+ {
+ \tl_gset:Nn \g_@@_operator_mathfont_tl {#1}
+ }
+\setoperatorfont{\mathrm}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addnolimits}
+% This macro appends material to the macro containing the list of operators
+% that don’t take limits.
+% \begin{macrocode}
+\NewDocumentCommand \addnolimits {m}
+ {
+ \tl_put_right:Nn \l_@@_nolimits_tl {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\removenolimits}
+% Can this macro be given a better name?
+% It removes an item from the nolimits list.
+% \begin{macrocode}
+\NewDocumentCommand \removenolimits {m}
+ {
+ \tl_remove_all:Nn \l_@@_nolimits_tl {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-usv.dtx b/macros/latex/contrib/unicode-math/um-code-usv.dtx
new file mode 100644
index 0000000000..ce24cc4267
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-usv.dtx
@@ -0,0 +1,592 @@
+%%^^A%% um-code-usv.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Mapping of mathematical unicode slots for alphabets.
+
+% \section{Alphabet Unicode positions}
+%
+% Before we begin, let's define the positions of the various Unicode
+% alphabets so that our code is a little more readable.\footnote{`\textsc{u.s.v.}' stands
+% for `Unicode scalar value'.}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \paragraph{Alphabets}
+% `Normal':
+% \begin{macrocode}
+\usv_set:nnn {normal} {num} {48}
+\usv_set:nnn {normal} {Latin} {"1D434}
+\usv_set:nnn {normal} {latin} {"1D44E}
+\usv_set:nnn {normal} {Greek} {"1D6E2}
+\usv_set:nnn {normal} {greek} {"1D6FC}
+\usv_set:nnn {normal} {varTheta} {"1D6F3}
+\usv_set:nnn {normal} {epsilon} {"1D716}
+\usv_set:nnn {normal} {vartheta} {"1D717}
+\usv_set:nnn {normal} {varkappa} {"1D718}
+\usv_set:nnn {normal} {phi} {"1D719}
+\usv_set:nnn {normal} {varrho} {"1D71A}
+\usv_set:nnn {normal} {varpi} {"1D71B}
+\usv_set:nnn {normal} {Nabla} {"1D6FB}
+\usv_set:nnn {normal} {partial} {"1D715}
+% \end{macrocode}
+% Regular weights:
+% \begin{macrocode}
+\usv_set:nnn {up} {num} {48}
+\usv_set:nnn {up} {Latin} {65}
+\usv_set:nnn {up} {latin} {97}
+\usv_set:nnn {up} {Greek} {"391}
+\usv_set:nnn {up} {greek} {"3B1}
+\usv_set:nnn {it} {Latin} {"1D434}
+\usv_set:nnn {it} {latin} {"1D44E}
+\usv_set:nnn {it} {Greek} {"1D6E2}
+\usv_set:nnn {it} {greek} {"1D6FC}
+\usv_set:nnn {bb} {num} {"1D7D8}
+\usv_set:nnn {bb} {Latin} {"1D538}
+\usv_set:nnn {bb} {latin} {"1D552}
+\usv_set:nnn {scr} {Latin} {"1D49C}
+\usv_set:nnn {cal} {Latin} {"1D49C}
+\usv_set:nnn {scr} {latin} {"1D4B6}
+\usv_set:nnn {frak} {Latin} {"1D504}
+\usv_set:nnn {frak} {latin} {"1D51E}
+\usv_set:nnn {sf} {num} {"1D7E2}
+\usv_set:nnn {sfup} {num} {"1D7E2}
+\usv_set:nnn {sfit} {num} {"1D7E2}
+\usv_set:nnn {sfup} {Latin} {"1D5A0}
+\usv_set:nnn {sf} {Latin} {"1D5A0}
+\usv_set:nnn {sfup} {latin} {"1D5BA}
+\usv_set:nnn {sf} {latin} {"1D5BA}
+\usv_set:nnn {sfit} {Latin} {"1D608}
+\usv_set:nnn {sfit} {latin} {"1D622}
+\usv_set:nnn {tt} {num} {"1D7F6}
+\usv_set:nnn {tt} {Latin} {"1D670}
+\usv_set:nnn {tt} {latin} {"1D68A}
+% \end{macrocode}
+% Bold weights:
+% \begin{macrocode}
+\usv_set:nnn {bf} {num} {"1D7CE}
+\usv_set:nnn {bfup} {num} {"1D7CE}
+\usv_set:nnn {bfit} {num} {"1D7CE}
+\usv_set:nnn {bfup} {Latin} {"1D400}
+\usv_set:nnn {bfup} {latin} {"1D41A}
+\usv_set:nnn {bfup} {Greek} {"1D6A8}
+\usv_set:nnn {bfup} {greek} {"1D6C2}
+\usv_set:nnn {bfit} {Latin} {"1D468}
+\usv_set:nnn {bfit} {latin} {"1D482}
+\usv_set:nnn {bfit} {Greek} {"1D71C}
+\usv_set:nnn {bfit} {greek} {"1D736}
+\usv_set:nnn {bffrak} {Latin} {"1D56C}
+\usv_set:nnn {bffrak} {latin} {"1D586}
+\usv_set:nnn {bfscr} {Latin} {"1D4D0}
+\usv_set:nnn {bfcal} {Latin} {"1D4D0}
+\usv_set:nnn {bfscr} {latin} {"1D4EA}
+\usv_set:nnn {bfsf} {num} {"1D7EC}
+\usv_set:nnn {bfsfup} {num} {"1D7EC}
+\usv_set:nnn {bfsfit} {num} {"1D7EC}
+\usv_set:nnn {bfsfup} {Latin} {"1D5D4}
+\usv_set:nnn {bfsfup} {latin} {"1D5EE}
+\usv_set:nnn {bfsfup} {Greek} {"1D756}
+\usv_set:nnn {bfsfup} {greek} {"1D770}
+\usv_set:nnn {bfsfit} {Latin} {"1D63C}
+\usv_set:nnn {bfsfit} {latin} {"1D656}
+\usv_set:nnn {bfsfit} {Greek} {"1D790}
+\usv_set:nnn {bfsfit} {greek} {"1D7AA}
+% \end{macrocode}
+% The `auto' bolds:
+% \begin{macrocode}
+\usv_set:nnn {bfsf} {Latin} { \bool_if:NTF \g_@@_upLatin_bool \g_@@_bfsfup_Latin_usv \g_@@_bfsfit_Latin_usv }
+\usv_set:nnn {bfsf} {latin} { \bool_if:NTF \g_@@_uplatin_bool \g_@@_bfsfup_latin_usv \g_@@_bfsfit_latin_usv }
+\usv_set:nnn {bfsf} {Greek} { \bool_if:NTF \g_@@_upGreek_bool \g_@@_bfsfup_Greek_usv \g_@@_bfsfit_Greek_usv }
+\usv_set:nnn {bfsf} {greek} { \bool_if:NTF \g_@@_upgreek_bool \g_@@_bfsfup_greek_usv \g_@@_bfsfit_greek_usv }
+\usv_set:nnn {bf} {Latin} { \bool_if:NTF \g_@@_bfupLatin_bool \g_@@_bfup_Latin_usv \g_@@_bfit_Latin_usv }
+\usv_set:nnn {bf} {latin} { \bool_if:NTF \g_@@_bfuplatin_bool \g_@@_bfup_latin_usv \g_@@_bfit_latin_usv }
+\usv_set:nnn {bf} {Greek} { \bool_if:NTF \g_@@_bfupGreek_bool \g_@@_bfup_Greek_usv \g_@@_bfit_Greek_usv }
+\usv_set:nnn {bf} {greek} { \bool_if:NTF \g_@@_bfupgreek_bool \g_@@_bfup_greek_usv \g_@@_bfit_greek_usv }
+% \end{macrocode}
+% \paragraph{Greek variants}
+% Upright:
+% \begin{macrocode}
+\usv_set:nnn {up} {varTheta} {"3F4}
+\usv_set:nnn {up} {Digamma} {"3DC}
+\usv_set:nnn {up} {epsilon} {"3F5}
+\usv_set:nnn {up} {vartheta} {"3D1}
+\usv_set:nnn {up} {varkappa} {"3F0}
+\usv_set:nnn {up} {phi} {"3D5}
+\usv_set:nnn {up} {varrho} {"3F1}
+\usv_set:nnn {up} {varpi} {"3D6}
+\usv_set:nnn {up} {digamma} {"3DD}
+% \end{macrocode}
+% Bold:
+% \begin{macrocode}
+\usv_set:nnn {bfup} {varTheta} {"1D6B9}
+\usv_set:nnn {bfup} {Digamma} {"1D7CA}
+\usv_set:nnn {bfup} {epsilon} {"1D6DC}
+\usv_set:nnn {bfup} {vartheta} {"1D6DD}
+\usv_set:nnn {bfup} {varkappa} {"1D6DE}
+\usv_set:nnn {bfup} {phi} {"1D6DF}
+\usv_set:nnn {bfup} {varrho} {"1D6E0}
+\usv_set:nnn {bfup} {varpi} {"1D6E1}
+\usv_set:nnn {bfup} {digamma} {"1D7CB}
+% \end{macrocode}
+% Italic:
+% \begin{macrocode}
+\usv_set:nnn {it} {varTheta} {"1D6F3}
+\usv_set:nnn {it} {epsilon} {"1D716}
+\usv_set:nnn {it} {vartheta} {"1D717}
+\usv_set:nnn {it} {varkappa} {"1D718}
+\usv_set:nnn {it} {phi} {"1D719}
+\usv_set:nnn {it} {varrho} {"1D71A}
+\usv_set:nnn {it} {varpi} {"1D71B}
+% \end{macrocode}
+% Bold italic:
+% \begin{macrocode}
+\usv_set:nnn {bfit} {varTheta} {"1D72D}
+\usv_set:nnn {bfit} {epsilon} {"1D750}
+\usv_set:nnn {bfit} {vartheta} {"1D751}
+\usv_set:nnn {bfit} {varkappa} {"1D752}
+\usv_set:nnn {bfit} {phi} {"1D753}
+\usv_set:nnn {bfit} {varrho} {"1D754}
+\usv_set:nnn {bfit} {varpi} {"1D755}
+% \end{macrocode}
+% Bold sans:
+% \begin{macrocode}
+\usv_set:nnn {bfsfup} {varTheta} {"1D767}
+\usv_set:nnn {bfsfup} {epsilon} {"1D78A}
+\usv_set:nnn {bfsfup} {vartheta} {"1D78B}
+\usv_set:nnn {bfsfup} {varkappa} {"1D78C}
+\usv_set:nnn {bfsfup} {phi} {"1D78D}
+\usv_set:nnn {bfsfup} {varrho} {"1D78E}
+\usv_set:nnn {bfsfup} {varpi} {"1D78F}
+% \end{macrocode}
+% Bold sans italic:
+% \begin{macrocode}
+\usv_set:nnn {bfsfit} {varTheta} {"1D7A1}
+\usv_set:nnn {bfsfit} {epsilon} {"1D7C4}
+\usv_set:nnn {bfsfit} {vartheta} {"1D7C5}
+\usv_set:nnn {bfsfit} {varkappa} {"1D7C6}
+\usv_set:nnn {bfsfit} {phi} {"1D7C7}
+\usv_set:nnn {bfsfit} {varrho} {"1D7C8}
+\usv_set:nnn {bfsfit} {varpi} {"1D7C9}
+% \end{macrocode}
+% Nabla:
+% \begin{macrocode}
+\usv_set:nnn {up} {Nabla} {"02207}
+\usv_set:nnn {it} {Nabla} {"1D6FB}
+\usv_set:nnn {bfup} {Nabla} {"1D6C1}
+\usv_set:nnn {bfit} {Nabla} {"1D735}
+\usv_set:nnn {bfsfup} {Nabla} {"1D76F}
+\usv_set:nnn {bfsfit} {Nabla} {"1D7A9}
+% \end{macrocode}
+% Partial:
+% \begin{macrocode}
+\usv_set:nnn {up} {partial} {"02202}
+\usv_set:nnn {it} {partial} {"1D715}
+\usv_set:nnn {bfup} {partial} {"1D6DB}
+\usv_set:nnn {bfit} {partial} {"1D74F}
+\usv_set:nnn {bfsfup} {partial} {"1D789}
+\usv_set:nnn {bfsfit} {partial} {"1D7C3}
+% \end{macrocode}
+%
+% \paragraph{Exceptions}
+% Upright uppercase:
+% \begin{macrocode}
+\usv_set:nnn {up} {B} {`\B}
+\usv_set:nnn {up} {C} {`\C}
+\usv_set:nnn {up} {D} {`\D}
+\usv_set:nnn {up} {E} {`\E}
+\usv_set:nnn {up} {F} {`\F}
+\usv_set:nnn {up} {H} {`\H}
+\usv_set:nnn {up} {I} {`\I}
+\usv_set:nnn {up} {L} {`\L}
+\usv_set:nnn {up} {M} {`\M}
+\usv_set:nnn {up} {N} {`\N}
+\usv_set:nnn {up} {P} {`\P}
+\usv_set:nnn {up} {Q} {`\Q}
+\usv_set:nnn {up} {R} {`\R}
+\usv_set:nnn {up} {Z} {`\Z}
+% \end{macrocode}
+% Italic uppercase:
+% \begin{macrocode}
+\usv_set:nnn {it} {B} {"1D435}
+\usv_set:nnn {it} {C} {"1D436}
+\usv_set:nnn {it} {D} {"1D437}
+\usv_set:nnn {it} {E} {"1D438}
+\usv_set:nnn {it} {F} {"1D439}
+\usv_set:nnn {it} {H} {"1D43B}
+\usv_set:nnn {it} {I} {"1D43C}
+\usv_set:nnn {it} {L} {"1D43F}
+\usv_set:nnn {it} {M} {"1D440}
+\usv_set:nnn {it} {N} {"1D441}
+\usv_set:nnn {it} {P} {"1D443}
+\usv_set:nnn {it} {Q} {"1D444}
+\usv_set:nnn {it} {R} {"1D445}
+\usv_set:nnn {it} {Z} {"1D44D}
+% \end{macrocode}
+% Upright lowercase (needed for later mappings):
+% \begin{macrocode}
+\usv_set:nnn {up} {d} {`\d}
+\usv_set:nnn {up} {e} {`\e}
+\usv_set:nnn {up} {g} {`\g}
+\usv_set:nnn {up} {h} {`\h}
+\usv_set:nnn {up} {i} {`\i}
+\usv_set:nnn {up} {j} {`\j}
+\usv_set:nnn {up} {o} {`\o}
+% \end{macrocode}
+% Italic lowercase:
+% \begin{macrocode}
+\usv_set:nnn {it} {d} {"1D451}
+\usv_set:nnn {it} {e} {"1D452}
+\usv_set:nnn {it} {g} {"1D454}
+\usv_set:nnn {it} {h} {"0210E}
+\usv_set:nnn {it} {i} {"1D456}
+\usv_set:nnn {it} {j} {"1D457}
+\usv_set:nnn {it} {o} {"1D45C}
+% \end{macrocode}
+% Latin `h':
+% \begin{macrocode}
+\usv_set:nnn {bb} {h} {"1D559}
+\usv_set:nnn {tt} {h} {"1D691}
+\usv_set:nnn {scr} {h} {"1D4BD}
+\usv_set:nnn {frak} {h} {"1D525}
+\usv_set:nnn {bfup} {h} {"1D421}
+\usv_set:nnn {bfit} {h} {"1D489}
+\usv_set:nnn {sfup} {h} {"1D5C1}
+\usv_set:nnn {sfit} {h} {"1D629}
+\usv_set:nnn {bffrak} {h} {"1D58D}
+\usv_set:nnn {bfscr} {h} {"1D4F1}
+\usv_set:nnn {bfsfup} {h} {"1D5F5}
+\usv_set:nnn {bfsfit} {h} {"1D65D}
+% \end{macrocode}
+% Dotless `i' and `j:
+% \begin{macrocode}
+\usv_set:nnn {up} {dotlessi} {"00131}
+\usv_set:nnn {up} {dotlessj} {"00237}
+\usv_set:nnn {it} {dotlessi} {"1D6A4}
+\usv_set:nnn {it} {dotlessj} {"1D6A5}
+% \end{macrocode}
+% Blackboard:
+% \begin{macrocode}
+\usv_set:nnn {bb} {C} {"2102}
+\usv_set:nnn {bb} {H} {"210D}
+\usv_set:nnn {bb} {N} {"2115}
+\usv_set:nnn {bb} {P} {"2119}
+\usv_set:nnn {bb} {Q} {"211A}
+\usv_set:nnn {bb} {R} {"211D}
+\usv_set:nnn {bb} {Z} {"2124}
+\usv_set:nnn {up} {Pi} {"003A0}
+\usv_set:nnn {up} {pi} {"003C0}
+\usv_set:nnn {up} {Gamma} {"00393}
+\usv_set:nnn {up} {gamma} {"003B3}
+\usv_set:nnn {up} {summation} {"02211}
+\usv_set:nnn {it} {Pi} {"1D6F1}
+\usv_set:nnn {it} {pi} {"1D70B}
+\usv_set:nnn {it} {Gamma} {"1D6E4}
+\usv_set:nnn {it} {gamma} {"1D6FE}
+\usv_set:nnn {bb} {Pi} {"0213F}
+\usv_set:nnn {bb} {pi} {"0213C}
+\usv_set:nnn {bb} {Gamma} {"0213E}
+\usv_set:nnn {bb} {gamma} {"0213D}
+\usv_set:nnn {bb} {summation} {"02140}
+% \end{macrocode}
+% Italic blackboard:
+% \begin{macrocode}
+\usv_set:nnn {bbit} {D} {"2145}
+\usv_set:nnn {bbit} {d} {"2146}
+\usv_set:nnn {bbit} {e} {"2147}
+\usv_set:nnn {bbit} {i} {"2148}
+\usv_set:nnn {bbit} {j} {"2149}
+% \end{macrocode}
+% Script:
+% \begin{macrocode}
+\usv_set:nnn {scr} {B} {"212C}
+\usv_set:nnn {scr} {E} {"2130}
+\usv_set:nnn {scr} {F} {"2131}
+\usv_set:nnn {scr} {H} {"210B}
+\usv_set:nnn {scr} {I} {"2110}
+\usv_set:nnn {scr} {L} {"2112}
+\usv_set:nnn {scr} {M} {"2133}
+\usv_set:nnn {scr} {R} {"211B}
+\usv_set:nnn {scr} {e} {"212F}
+\usv_set:nnn {scr} {g} {"210A}
+\usv_set:nnn {scr} {o} {"2134}
+% \end{macrocode}
+% Caligraphic:
+% \begin{macrocode}
+\usv_set:nnn {cal} {B} {"212C}
+\usv_set:nnn {cal} {E} {"2130}
+\usv_set:nnn {cal} {F} {"2131}
+\usv_set:nnn {cal} {H} {"210B}
+\usv_set:nnn {cal} {I} {"2110}
+\usv_set:nnn {cal} {L} {"2112}
+\usv_set:nnn {cal} {M} {"2133}
+\usv_set:nnn {cal} {R} {"211B}
+% \end{macrocode}
+% Fractur:
+% \begin{macrocode}
+\usv_set:nnn {frak} {C} {"212D}
+\usv_set:nnn {frak} {H} {"210C}
+\usv_set:nnn {frak} {I} {"2111}
+\usv_set:nnn {frak} {R} {"211C}
+\usv_set:nnn {frak} {Z} {"2128}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \subsection{STIX fonts}
+%
+% Version 1.0.0 of the STIX fonts contains a number of
+% alphabets in the private use area of Unicode; i.e.,
+% it contains many math glyphs that have not (yet or if ever)
+% been accepted into the Unicode standard.
+%
+% But we still want to be able to use them if possible.
+%
+% \begin{macrocode}
+%<*stix>
+% \end{macrocode}
+%
+% \paragraph{Upright}
+% \begin{macrocode}
+\usv_set:nnn {stixsfup}{partial}{"E17C}
+\usv_set:nnn {stixsfup}{Greek}{"E17D}
+\usv_set:nnn {stixsfup}{greek}{"E196}
+\usv_set:nnn {stixsfup}{varTheta}{"E18E}
+\usv_set:nnn {stixsfup}{epsilon}{"E1AF}
+\usv_set:nnn {stixsfup}{vartheta}{"E1B0}
+\usv_set:nnn {stixsfup}{varkappa}{0000} % ???
+\usv_set:nnn {stixsfup}{phi}{"E1B1}
+\usv_set:nnn {stixsfup}{varrho}{"E1B2}
+\usv_set:nnn {stixsfup}{varpi}{"E1B3}
+\usv_set:nnn {stixupslash}{Greek}{"E2FC}
+% \end{macrocode}
+%
+% \paragraph{Italic}
+% \begin{macrocode}
+\usv_set:nnn {stixbbit}{A}{"E154}
+\usv_set:nnn {stixbbit}{B}{"E155}
+\usv_set:nnn {stixbbit}{E}{"E156}
+\usv_set:nnn {stixbbit}{F}{"E157}
+\usv_set:nnn {stixbbit}{G}{"E158}
+\usv_set:nnn {stixbbit}{I}{"E159}
+\usv_set:nnn {stixbbit}{J}{"E15A}
+\usv_set:nnn {stixbbit}{K}{"E15B}
+\usv_set:nnn {stixbbit}{L}{"E15C}
+\usv_set:nnn {stixbbit}{M}{"E15D}
+\usv_set:nnn {stixbbit}{O}{"E15E}
+\usv_set:nnn {stixbbit}{S}{"E15F}
+\usv_set:nnn {stixbbit}{T}{"E160}
+\usv_set:nnn {stixbbit}{U}{"E161}
+\usv_set:nnn {stixbbit}{V}{"E162}
+\usv_set:nnn {stixbbit}{W}{"E163}
+\usv_set:nnn {stixbbit}{X}{"E164}
+\usv_set:nnn {stixbbit}{Y}{"E165}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbbit}{a}{"E166}
+\usv_set:nnn {stixbbit}{b}{"E167}
+\usv_set:nnn {stixbbit}{c}{"E168}
+\usv_set:nnn {stixbbit}{f}{"E169}
+\usv_set:nnn {stixbbit}{g}{"E16A}
+\usv_set:nnn {stixbbit}{h}{"E16B}
+\usv_set:nnn {stixbbit}{k}{"E16C}
+\usv_set:nnn {stixbbit}{l}{"E16D}
+\usv_set:nnn {stixbbit}{m}{"E16E}
+\usv_set:nnn {stixbbit}{n}{"E16F}
+\usv_set:nnn {stixbbit}{o}{"E170}
+\usv_set:nnn {stixbbit}{p}{"E171}
+\usv_set:nnn {stixbbit}{q}{"E172}
+\usv_set:nnn {stixbbit}{r}{"E173}
+\usv_set:nnn {stixbbit}{s}{"E174}
+\usv_set:nnn {stixbbit}{t}{"E175}
+\usv_set:nnn {stixbbit}{u}{"E176}
+\usv_set:nnn {stixbbit}{v}{"E177}
+\usv_set:nnn {stixbbit}{w}{"E178}
+\usv_set:nnn {stixbbit}{x}{"E179}
+\usv_set:nnn {stixbbit}{y}{"E17A}
+\usv_set:nnn {stixbbit}{z}{"E17B}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixsfit}{Numerals}{"E1B4}
+\usv_set:nnn {stixsfit}{partial}{"E1BE}
+\usv_set:nnn {stixsfit}{Greek}{"E1BF}
+\usv_set:nnn {stixsfit}{greek}{"E1D8}
+\usv_set:nnn {stixsfit}{varTheta}{"E1D0}
+\usv_set:nnn {stixsfit}{epsilon}{"E1F1}
+\usv_set:nnn {stixsfit}{vartheta}{"E1F2}
+\usv_set:nnn {stixsfit}{varkappa}{0000} % ???
+\usv_set:nnn {stixsfit}{phi}{"E1F3}
+\usv_set:nnn {stixsfit}{varrho}{"E1F4}
+\usv_set:nnn {stixsfit}{varpi}{"E1F5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixcal}{Latin}{"E22D}
+\usv_set:nnn {stixcal}{num}{"E262}
+\usv_set:nnn {scr}{num}{48}
+\usv_set:nnn {it}{num}{48}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixsfitslash}{Latin}{"E294}
+\usv_set:nnn {stixsfitslash}{latin}{"E2C8}
+\usv_set:nnn {stixsfitslash}{greek}{"E32C}
+\usv_set:nnn {stixsfitslash}{epsilon}{"E37A}
+\usv_set:nnn {stixsfitslash}{vartheta}{"E35E}
+\usv_set:nnn {stixsfitslash}{varkappa}{"E374}
+\usv_set:nnn {stixsfitslash}{phi}{"E360}
+\usv_set:nnn {stixsfitslash}{varrho}{"E376}
+\usv_set:nnn {stixsfitslash}{varpi}{"E362}
+\usv_set:nnn {stixsfitslash}{digamma}{"E36A}
+% \end{macrocode}
+%
+% \paragraph{Bold}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfupslash}{Greek}{"E2FD}
+\usv_set:nnn {stixbfupslash}{Digamma}{"E369}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfbb}{A}{"E38A}
+\usv_set:nnn {stixbfbb}{B}{"E38B}
+\usv_set:nnn {stixbfbb}{E}{"E38D}
+\usv_set:nnn {stixbfbb}{F}{"E38E}
+\usv_set:nnn {stixbfbb}{G}{"E38F}
+\usv_set:nnn {stixbfbb}{I}{"E390}
+\usv_set:nnn {stixbfbb}{J}{"E391}
+\usv_set:nnn {stixbfbb}{K}{"E392}
+\usv_set:nnn {stixbfbb}{L}{"E393}
+\usv_set:nnn {stixbfbb}{M}{"E394}
+\usv_set:nnn {stixbfbb}{O}{"E395}
+\usv_set:nnn {stixbfbb}{S}{"E396}
+\usv_set:nnn {stixbfbb}{T}{"E397}
+\usv_set:nnn {stixbfbb}{U}{"E398}
+\usv_set:nnn {stixbfbb}{V}{"E399}
+\usv_set:nnn {stixbfbb}{W}{"E39A}
+\usv_set:nnn {stixbfbb}{X}{"E39B}
+\usv_set:nnn {stixbfbb}{Y}{"E39C}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfbb}{a}{"E39D}
+\usv_set:nnn {stixbfbb}{b}{"E39E}
+\usv_set:nnn {stixbfbb}{c}{"E39F}
+\usv_set:nnn {stixbfbb}{f}{"E3A2}
+\usv_set:nnn {stixbfbb}{g}{"E3A3}
+\usv_set:nnn {stixbfbb}{h}{"E3A4}
+\usv_set:nnn {stixbfbb}{k}{"E3A7}
+\usv_set:nnn {stixbfbb}{l}{"E3A8}
+\usv_set:nnn {stixbfbb}{m}{"E3A9}
+\usv_set:nnn {stixbfbb}{n}{"E3AA}
+\usv_set:nnn {stixbfbb}{o}{"E3AB}
+\usv_set:nnn {stixbfbb}{p}{"E3AC}
+\usv_set:nnn {stixbfbb}{q}{"E3AD}
+\usv_set:nnn {stixbfbb}{r}{"E3AE}
+\usv_set:nnn {stixbfbb}{s}{"E3AF}
+\usv_set:nnn {stixbfbb}{t}{"E3B0}
+\usv_set:nnn {stixbfbb}{u}{"E3B1}
+\usv_set:nnn {stixbfbb}{v}{"E3B2}
+\usv_set:nnn {stixbfbb}{w}{"E3B3}
+\usv_set:nnn {stixbfbb}{x}{"E3B4}
+\usv_set:nnn {stixbfbb}{y}{"E3B5}
+\usv_set:nnn {stixbfbb}{z}{"E3B6}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfsfup}{Numerals}{"E3B7}
+% \end{macrocode}
+%
+% \paragraph{Bold Italic}
+% \begin{macrocode}
+\usv_set:nnn {stixbfsfit}{Numerals}{"E1F6}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfbbit}{A}{"E200}
+\usv_set:nnn {stixbfbbit}{B}{"E201}
+\usv_set:nnn {stixbfbbit}{E}{"E203}
+\usv_set:nnn {stixbfbbit}{F}{"E204}
+\usv_set:nnn {stixbfbbit}{G}{"E205}
+\usv_set:nnn {stixbfbbit}{I}{"E206}
+\usv_set:nnn {stixbfbbit}{J}{"E207}
+\usv_set:nnn {stixbfbbit}{K}{"E208}
+\usv_set:nnn {stixbfbbit}{L}{"E209}
+\usv_set:nnn {stixbfbbit}{M}{"E20A}
+\usv_set:nnn {stixbfbbit}{O}{"E20B}
+\usv_set:nnn {stixbfbbit}{S}{"E20C}
+\usv_set:nnn {stixbfbbit}{T}{"E20D}
+\usv_set:nnn {stixbfbbit}{U}{"E20E}
+\usv_set:nnn {stixbfbbit}{V}{"E20F}
+\usv_set:nnn {stixbfbbit}{W}{"E210}
+\usv_set:nnn {stixbfbbit}{X}{"E211}
+\usv_set:nnn {stixbfbbit}{Y}{"E212}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfbbit}{a}{"E213}
+\usv_set:nnn {stixbfbbit}{b}{"E214}
+\usv_set:nnn {stixbfbbit}{c}{"E215}
+\usv_set:nnn {stixbfbbit}{e}{"E217}
+\usv_set:nnn {stixbfbbit}{f}{"E218}
+\usv_set:nnn {stixbfbbit}{g}{"E219}
+\usv_set:nnn {stixbfbbit}{h}{"E21A}
+\usv_set:nnn {stixbfbbit}{k}{"E21D}
+\usv_set:nnn {stixbfbbit}{l}{"E21E}
+\usv_set:nnn {stixbfbbit}{m}{"E21F}
+\usv_set:nnn {stixbfbbit}{n}{"E220}
+\usv_set:nnn {stixbfbbit}{o}{"E221}
+\usv_set:nnn {stixbfbbit}{p}{"E222}
+\usv_set:nnn {stixbfbbit}{q}{"E223}
+\usv_set:nnn {stixbfbbit}{r}{"E224}
+\usv_set:nnn {stixbfbbit}{s}{"E225}
+\usv_set:nnn {stixbfbbit}{t}{"E226}
+\usv_set:nnn {stixbfbbit}{u}{"E227}
+\usv_set:nnn {stixbfbbit}{v}{"E228}
+\usv_set:nnn {stixbfbbit}{w}{"E229}
+\usv_set:nnn {stixbfbbit}{x}{"E22A}
+\usv_set:nnn {stixbfbbit}{y}{"E22B}
+\usv_set:nnn {stixbfbbit}{z}{"E22C}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfcal}{Latin}{"E247}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfitslash}{Latin}{"E295}
+\usv_set:nnn {stixbfitslash}{latin}{"E2C9}
+\usv_set:nnn {stixbfitslash}{greek}{"E32D}
+\usv_set:nnn {stixsfitslash}{epsilon}{"E37B}
+\usv_set:nnn {stixsfitslash}{vartheta}{"E35F}
+\usv_set:nnn {stixsfitslash}{varkappa}{"E375}
+\usv_set:nnn {stixsfitslash}{phi}{"E361}
+\usv_set:nnn {stixsfitslash}{varrho}{"E377}
+\usv_set:nnn {stixsfitslash}{varpi}{"E363}
+\usv_set:nnn {stixsfitslash}{digamma}{"E36B}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</stix>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-code-variables.dtx b/macros/latex/contrib/unicode-math/um-code-variables.dtx
new file mode 100644
index 0000000000..840b1ebec5
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-code-variables.dtx
@@ -0,0 +1,257 @@
+%%^^A%% um-code-variables.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Declaration of all code-level variables used in the package.
+
+% \section{Variable initialisation}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \subsection{bool}
+%
+% True if using a proper OpenType font with unicode maths
+% \begin{macrocode}
+\bool_new:N \g_@@_ot_math_bool
+% \end{macrocode}
+%
+% Set when \cs{setmathfont} is run to trap the problem of no main font defined.
+% \begin{macrocode}
+\bool_new:N \g_@@_main_font_defined_bool
+% \end{macrocode}
+%
+% \begin{macrocode}
+\bool_new:N \g_@@_init_bool
+\bool_new:N \l_@@_implicit_alph_bool
+% \end{macrocode}
+% For \opt{math-style}:
+% \begin{macrocode}
+\bool_new:N \g_@@_literal_bool
+\bool_new:N \g_@@_upLatin_bool
+\bool_new:N \g_@@_uplatin_bool
+\bool_new:N \g_@@_upGreek_bool
+\bool_new:N \g_@@_upgreek_bool
+% \end{macrocode}
+% For \opt{bold-style}:
+% \begin{macrocode}
+\bool_new:N \g_@@_bfliteral_bool
+\bool_new:N \g_@@_bfupLatin_bool
+\bool_new:N \g_@@_bfuplatin_bool
+\bool_new:N \g_@@_bfupGreek_bool
+\bool_new:N \g_@@_bfupgreek_bool
+% \end{macrocode}
+% For \opt{sans-style}:
+% \begin{macrocode}
+\bool_new:N \g_@@_upsans_bool
+\bool_new:N \g_@@_sfliteral_bool
+% \end{macrocode}
+% For assorted package options:
+% \begin{macrocode}
+\bool_new:N \g_@@_upNabla_bool
+\bool_new:N \g_@@_uppartial_bool
+\bool_new:N \g_@@_literal_Nabla_bool
+\bool_new:N \g_@@_literal_partial_bool
+\bool_new:N \l_@@_smallfrac_bool
+\bool_new:N \g_@@_literal_colon_bool
+\bool_new:N \g_@@_mathrm_text_bool
+\bool_new:N \g_@@_mathit_text_bool
+\bool_new:N \g_@@_mathbf_text_bool
+\bool_new:N \g_@@_mathsf_text_bool
+\bool_new:N \g_@@_mathtt_text_bool
+% \end{macrocode}
+%
+% \subsection{int}
+%
+% \begin{macrocode}
+\int_new:N \g_@@_fam_int
+\int_new:N \g_@@_fonts_used_int
+\int_new:N \l_@@_primecount_int
+% \end{macrocode}
+%
+% \subsection{tl}
+%
+% \begin{macrocode}
+\tl_if_exist:NF \g_@@_secret_hook_tl { \tl_new:N \g_@@_secret_hook_tl }
+% \end{macrocode}
+%
+% For displaying in warning messages, etc.:
+% \begin{macrocode}
+\tl_const:Nn \c_@@_math_alphabet_name_latin_tl {Latin,~lowercase}
+\tl_const:Nn \c_@@_math_alphabet_name_Latin_tl {Latin,~uppercase}
+\tl_const:Nn \c_@@_math_alphabet_name_greek_tl {Greek,~lowercase}
+\tl_const:Nn \c_@@_math_alphabet_name_Greek_tl {Greek,~uppercase}
+\tl_const:Nn \c_@@_math_alphabet_name_num_tl {Numerals}
+\tl_const:Nn \c_@@_math_alphabet_name_misc_tl {Misc.}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_style_tl
+\tl_new:N \l_@@_family_tl
+\tl_new:N \l_@@_alphabet_tl
+\tl_new:N \l_@@_fontname_tl
+\tl_new:N \l_@@_symfont_label_tl
+\tl_new:N \l_@@_remap_style_tl
+\tl_new:N \l_@@_fam_two_tl
+\tl_new:N \l_@@_fam_three_tl
+\tl_new:N \l_@@_curr_named_slot
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_tmpa_tl
+\tl_new:N \l_@@_tmpb_tl
+\tl_new:N \l_@@_tmpc_tl
+\tl_new:N \l_@@_mathstyle_tl
+\tl_new:N \l_@@_radicals_tl
+\tl_new:N \l_@@_nolimits_tl
+\tl_new:N \l_@@_trial_family_tl
+\tl_new:N \l_@@_ss_chain_tl
+\tl_new:N \l_@@_tmpa_key_tl
+% \end{macrocode}
+%
+% Used to store the font switch for the \cs{operator@font}.
+% \begin{macrocode}
+\tl_new:N \g_@@_operator_mathfont_tl
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \g_@@_slash_delimiter_usv
+\tl_new:N \g_@@_mathparam_settings_tl
+\tl_new:N \l_@@_mathtable_tl
+\tl_new:N \g_@@_mathtable_tl
+\tl_new:N \g_@@_fontname_tl
+\tl_new:N \g_@@_mversion_tl
+\tl_new:N \g_@@_symfont_tl
+\tl_new:N \l_@@_font_keyval_tl
+\tl_new:N \g_@@_family_tl
+\tl_new:N \g_@@_style_tl
+\tl_new:N \g_@@_remap_style_tl
+\tl_new:N \l_@@_not_token_name_tl
+\tl_new:N \g_@@_curr_font_cmd_tl
+\tl_new:N \g_@@_sqrt_font_cmd_tl
+\tl_new:N \g_@@_prime_font_cmd_tl
+% \end{macrocode}
+%
+% \begin{macro}{\g_@@_mathparam_store_tl}
+% Used to store and restore the math parameters used in Lua\TeX.
+% This is done to `save' the values of the \emph{first} (or main)
+% maths font loaded, rather than (as per Lua\TeX\ defaults) the last.
+% \begin{macrocode}
+%<*LU>
+\tl_new:N \g_@@_mathparam_store_tl
+%</LU>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{clist}
+%
+% \begin{macrocode}
+\clist_new:N \g_@@_char_nrange_clist
+\clist_new:N \g_@@_unknown_keys_clist
+\clist_new:N \g_@@_alphabet_clist
+\clist_new:N \l_@@_mathmap_charints_clist
+\clist_new:N \l_@@_unknown_keys_clist
+\clist_new:N \l_@@_keyval_clist
+\clist_new:N \l_@@_alphabet_clist
+% \end{macrocode}
+%
+% \begin{macrocode}
+\clist_new:N \g_@@_bad_alpha_clist
+\clist_gput_right:Nx \g_@@_bad_alpha_clist { \tl_to_str:n {bf} }
+\clist_gput_right:Nx \g_@@_bad_alpha_clist { \tl_to_str:n {sf} }
+\clist_gput_right:Nx \g_@@_bad_alpha_clist { \tl_to_str:n {bfsf} }
+% \end{macrocode}
+%
+% \subsection{seq}
+%
+% \begin{macrocode}
+\seq_new:N \l_@@_missing_alph_seq
+\seq_new:N \g_@@_mathalph_seq
+\seq_new:N \g_@@_char_range_seq
+\seq_new:N \g_@@_mclass_range_seq
+% \end{macrocode}
+%
+% \begin{macro}{\g_@@_mathclasses_seq}
+% Every math class.
+% \begin{macrocode}
+\seq_new:N \g_@@_mathclasses_seq
+\seq_gset_from_clist:Nn \g_@@_mathclasses_seq
+ {
+ \mathord,\mathalpha,\mathbin,\mathrel,\mathpunct,
+ \mathop,
+ \mathopen,\mathclose,
+ \mathfence,\mathover,\mathunder,
+ \mathaccent,\mathaccentoverlay,\mathbotaccent,\mathaccentwide,\mathbotaccentwide
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\g_@@_default_mathalph_seq}
+% This sequence stores the alphabets in each math style.
+% \begin{macrocode}
+\seq_new:N \g_@@_default_mathalph_seq
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\g_@@_mathstyles_seq}
+% This is every `math style' known to \pkg{unicode-math}.
+% A named range is such as "bfit" and "sfit", which are also math styles (with \cs{symbfit} and \cs{symsfit}).
+% `Mathstyles' are a superset of named ranges and also include commands such as \cs{symbf} and \cs{symsf}.
+%
+% N.B. for parsing purposes `named ranges' are defined as strings!
+% \begin{macrocode}
+\seq_new:N \g_@@_mathstyles_seq
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{prop}
+%
+% \begin{macrocode}
+\prop_new:N \g_@@_supers_prop
+\prop_new:N \g_@@_subs_prop
+% \end{macrocode}
+%
+% \subsection{muskip}
+%
+% \begin{macrocode}
+\muskip_new:N \g_@@_primekern_muskip
+\muskip_gset:Nn \g_@@_primekern_muskip { -\thinmuskip/2 }% arbitrary
+% \end{macrocode}
+%
+% \subsection{fp}
+%
+% \begin{macrocode}
+\fp_new:N \g_@@_size_tfsf_fp
+\fp_new:N \g_@@_size_sfssf_fp
+% \end{macrocode}
+%
+% \subsection{quark}
+%
+% \begin{macro}{\q_unicode_math}
+% Used as a flag within control sequences to check they're recognised by the package.
+% \begin{macrocode}
+\quark_new:N \q_unicode_math
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-doc-legacyfontdimen.tex b/macros/latex/contrib/unicode-math/um-doc-legacyfontdimen.tex
new file mode 100644
index 0000000000..5adb24e9f6
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-doc-legacyfontdimen.tex
@@ -0,0 +1,76 @@
+%%^^A%% um-doc-legacyfontdimen.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\section{Legacy \TeX\ font dimensions}
+
+\centerline{%
+\begin{tabular}[t]{@{}lp{4cm}@{}}
+\toprule
+\multicolumn{2}{@{}c@{}}{Text fonts} \\
+\midrule
+$\phi_1$ & slant per pt \\
+$\phi_2$ & interword space \\
+$\phi_3$ & interword stretch \\
+$\phi_4$ & interword shrink \\
+$\phi_5$ & x-height \\
+$\phi_6$ & quad width \\
+$\phi_7$ & extra space \\
+$\phi_8$ & cap height (\XeTeX\ only) \\
+\bottomrule
+\end{tabular}
+\quad
+\begin{tabular}[t]{@{}lp{4cm}@{}}
+\toprule
+\multicolumn{2}{@{}c@{}}{Maths font, \cs{fam}2} \\
+\midrule
+$\sigma_5$ & x height \\
+$\sigma_6$ & quad \\
+$\sigma_8$ & num1 \\
+$\sigma_9$ & num2 \\
+$\sigma_{10}$ & num3 \\
+$\sigma_{11}$ & denom1 \\
+$\sigma_{12}$ & denom2 \\
+$\sigma_{13}$ & sup1 \\
+$\sigma_{14}$ & sup2 \\
+$\sigma_{15}$ & sup3 \\
+$\sigma_{16}$ & sub1 \\
+$\sigma_{17}$ & sub2 \\
+$\sigma_{18}$ & sup drop \\
+$\sigma_{19}$ & sub drop \\
+$\sigma_{20}$ & delim1 \\
+$\sigma_{21}$ & delim2 \\
+$\sigma_{22}$ & axis height \\
+\bottomrule
+\end{tabular}
+\quad
+\begin{tabular}[t]{@{}lp{4cm}@{}}
+\toprule
+\multicolumn{2}{@{}c@{}}{Maths font, \cs{fam}3} \\
+\midrule
+$\xi_8$ & default rule thickness \\
+$\xi_9$ & big op spacing1 \\
+$\xi_{10}$ & big op spacing2 \\
+$\xi_{11}$ & big op spacing3 \\
+$\xi_{12}$ & big op spacing4 \\
+$\xi_{13}$ & big op spacing5 \\
+\bottomrule
+\end{tabular}
+}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-doc-main.tex b/macros/latex/contrib/unicode-math/um-doc-main.tex
new file mode 100644
index 0000000000..8ecc8357e7
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-doc-main.tex
@@ -0,0 +1,1234 @@
+%%^^A%% um-doc-main.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\begin{abstract}
+\noindent
+This document describes the \pkg{unicode-math} package, which is
+intended as an implementation of Unicode
+maths for \LaTeX\ using the \XeTeX\ and Lua\TeX\ typesetting engines.
+With this package, changing maths fonts is as easy as changing
+text fonts --- and there are more and more maths fonts appearing now.
+Maths input can also be simplified with Unicode since literal glyphs may be
+entered instead of control sequences in your document source.
+
+The package provides support for both \XeTeX\ and Lua\TeX. The different
+engines provide differing levels of support for Unicode maths.
+Please let us know of any troubles.
+
+Alongside this documentation file, you should be able to find a minimal
+example demonstrating the use of the package,
+`\texttt{unimath-example.ltx}'. It also comes with a separate document,
+`\texttt{unimath-symbols.pdf}',
+containing a complete listing of mathematical symbols defined by
+\pkg{unicode-math}, including comparisons between different fonts.
+
+Finally, while the STIX fonts may be used with this package, accessing
+their alphabets in their `private user area' is not yet supported.
+(Of these additional alphabets there is a separate caligraphic design
+distinct to the script design already included.)
+Better support for the STIX fonts is planned for an upcoming revision of the
+package after any problems have been ironed out with the initial version.
+
+\end{abstract}
+
+\newpage
+\tableofcontents
+
+\clearpage
+\section{Introduction}
+
+This document describes the \pkg{unicode-math} package, which is an
+\emph{experimental} implementation of a macro to Unicode glyph encoding for
+mathematical characters.
+
+Users who desire to specify maths alphabets only (Greek and Latin letters,
+and Arabic numerals)
+may wish to use Andrew Moschou's \pkg{mathspec} package instead.
+(\XeTeX-only at time of writing.)
+Note that \pkg{unicode-math} and \pkg{mathspec} are not compatible with each other.
+
+\section{Acknowledgements}
+
+Many thanks to:
+Microsoft for developing the mathematics extension to OpenType as part of
+Microsoft Office~2007;
+Jonathan Kew for implementing Unicode math support in \XeTeX;
+Taco Hoekwater for implementing Unicode math support in \LuaTeX;
+Barbara Beeton for her prodigious effort compiling the definitive list of Unicode math
+glyphs and their \LaTeX\ names (inventing them where necessary), and also
+for her thoughtful replies to my sometimes incessant questions;
+Philipp Stephani for extending the package to support \LuaTeX.
+Ross Moore and Chris Rowley have provided moral and technical support
+from the very early days with great insight into the issues we face trying
+to extend and use \TeX\ in the future.
+Apostolos Syropoulos, Joel Salomon, Khaled Hosny, and Mariusz Wodzicki
+have been fantastic beta testers.
+
+\section{Getting started}
+
+Load \pkg{unicode-math} as a regular \LaTeX\ package. It should be loaded
+after any other maths or font-related package in case it needs to overwrite
+their definitions. Here's an example using the filename syntax to load the \TeX\ Gyre Pagella Math font: (this works for both \XeLaTeX\ and \LuaLaTeX)
+\begin{Verbatim}
+\usepackage{amsmath} % if desired
+\usepackage{unicode-math}
+\setmathfont{texgyrepagella-math.otf}
+\end{Verbatim}
+
+Once the package is loaded, traditional TFM-based maths fonts are no longer supported;
+you can only switch to a different OpenType maths font using the \cs{setmathfont} command.
+If you do not load an OpenType maths font before |\begin{document}|, Latin Modern Math will be loaded automatically.
+
+\subsection{New commands}
+\LaTeX, since the first version of \LaTeXe, changed the math group
+selection from, say, |{\bf x}| to |\mathbf{x}|. It introduced commands
+such as |\mathbf|, |\mathit|, |\mathsf|, |\mathtt| and |\mathcal|,
+besides |\mathnormal|. This was not only done to maintain the analogy
+with |\textbf|, |\textit| and so on, but with the precise purpose of
+loading the needed math groups (or math families) on demand and not
+allocating them if not required by the document.
+
+The introduction of \pkg{unicode-math} posed some problems fitting into this design. For
+instance, there is a big difference between say |fit| as an operator
+name in boldface type and the product of three boldface variables.
+With legacy \TeX{} engines, |\mathbf{fit}| would use a ligature and
+the same would happen with the input |\mathbf{f}\mathbf{i}\mathbf{t}|.
+For the latter case, the user should probably use |\mathbf{f\/}|.
+
+However, there is another important point from a \emph{conceptual}
+point of view. A boldface variable name should be printed using the
+\emph{math font}, whereas a boldface operator name should be printed
+using the \emph{text font}. OpenType math fonts make this distinction
+feasible, because they contain several math alphabets. Of course a
+boldface text~`x' will not differ much (or at all) from a boldface
+math~`x', but this is not the point: they \emph{should} be considered
+different, because the former is |U+0078| in Unicode, the latter is
+|U+1D431|.
+
+It was clear that \emph{two} different commands are needed: one for using text boldface in math,
+one for using math boldface. Only the document's author can know
+whether one or the other is needed. The decision was to split off
+the two meanings with a command like |\mathbf| for the boldface text font
+in math and a command like |\symbf| (for the bold math font).
+
+The five new symbol font commands that behave in this way are: \cs{symup},
+\cs{symit}, \cs{symbf}, \cs{symsf}, and \cs{symit}.
+These commands switch to single-letter mathematical symbols
+(generally within the same OpenType font).
+
+The legacy \cs{math..} commands switch to text fonts that are set up to behave
+correctly in mathematics, and should be used for multi-letter identifiers. These
+could be denoted `text math alphabets'; further details are discussed
+in \secref{mathselect}. Additional similar `text math alphabet'
+commands can be defined using the \cs{setmathfontface} command
+discussed in \secref{mathselect}. To control the behaviour of the
+default text math alphabet commands to behave in a
+backwards-compatible mode, see the package options described in
+\secref{textmathlegacy}.
+
+
+\begin{table}[t!]
+ \topcaption{New \pkg{unicode-math} commands which overlap with legacy
+ math commands. For new documents the \texttt{sym} versions are recommended.}
+ \tablabel{symvsmath}
+ \centering
+ \begin{tabular}[t]{ll}
+ \toprule
+ Command & Synonym \\
+ \midrule
+ \cs{symnormal} & \cs{mathnormal} \\
+ \cs{symliteral} & \\
+ & \\
+ & \\
+ & \\
+ \cs{symbb} & \cs{mathbb} \\
+ \cs{symbbit} & \cs{mathbbit} \\
+ \cs{symcal} & \cs{mathcal} \\
+ \cs{symscr} & \cs{mathscr} \\
+ \cs{symfrak} & \cs{mathfrak} \\
+ \cs{symsfup} & \cs{mathsfup} \\
+ \cs{symsfit} & \cs{mathsfit} \\
+ \bottomrule
+ \end{tabular}\qquad
+ \begin{tabular}[t]{ll}
+ \toprule
+ Command & Synonym \\
+ \midrule
+ & \\
+ & \\
+ \cs{symbfsf} & \cs{mathbfsf} \\
+ \cs{symbfup} & \cs{mathbfup} \\
+ \cs{symbfit} & \cs{mathbfit} \\
+ & \\
+ & \\
+ \cs{symbfcal} & \cs{mathbfcal} \\
+ \cs{symbfscr} & \cs{mathbfscr} \\
+ \cs{symbffrak} & \cs{mathbffrak} \\
+ \cs{symbfsfup} & \cs{mathbfsfup} \\
+ \cs{symbfsfit} & \cs{mathbfsfit} \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+In addition, \pkg{unicode-math} also provides a number of commands (such as
+|\symcal|) to select specific `symbol alphabets' within the unicode
+maths font, with usage, e.g., |$\symcal{G}$|${}\to\symcal{G}$. The
+full listing is shown in \Tabref{symvsmath}. For backwards
+compatibility, many of these are also defined with `familiar' synonyms
+such as |\mathcal|. However, where possible the `sym' prefix
+commands should be preferred, as certain synonyms may become
+deprecated in time. The |\symliteral| command is described in
+\secref{math-style}.
+
+Using the |\sym..| commands, the glyphs used to produce PDF output are Unicode-encoded,
+and therefore a symbol such as $\symcal{G}$ can be copy-pasted into another programme
+(or even into the source of another \LaTeX\ document using \pkg{unicode-math}) without
+loss of meaning.
+This is an important aspect of Unicode mathematics, but the \pkg{unicode-math} package
+is not `pure' in the sense that the package also provides other mechanisms to change
+the fonts used in the PDF output; the philosophy of the package is to provide mechanisms
+for technical authors to invent and experiment with new syntaxes for their work.
+
+
+\subsection{Package options}
+Package options may be set when the package as loaded or at any later
+stage with the \cs{unimathsetup} command. Therefore, the following two
+examples are equivalent:
+\begin{Verbatim}
+\usepackage[math-style=TeX]{unicode-math}
+% OR
+\usepackage{unicode-math}
+\unimathsetup{math-style=TeX}
+\end{Verbatim}
+Note, however, that some package options affects how maths is initialised
+and changing an option such as |math-style| will not take effect until a
+new maths font is set up.
+
+Package options may \emph{also} be used when declaring new maths fonts,
+passed via options to the \cs{setmathfont} command.
+Therefore, the following two examples are equivalent:
+\begin{Verbatim}
+\unimathsetup{math-style=TeX}
+\setmathfont{texgyrepagella-math.otf}
+% OR
+\setmathfont{texgyrepagella-math.otf}[math-style=TeX]
+\end{Verbatim}
+
+A summary list of package options is shown in \tabref{pkgopt}.
+See following sections for more information.
+
+\begin{table}\centering
+ \topcaption{Package options.}
+ \tablabel{pkgopt}
+ \begin{tabular}{lll}
+ \toprule
+ Option & Description & See\dots \\
+ \midrule
+ |math-style| & Style of letters & \secref*{math-style} \\
+ |bold-style| & Style of bold letters & \secref*{bold-style} \\
+ |sans-style| & Style of sans serif letters & \secref*{sans-style} \\
+ |nabla| & Style of the nabla symbol & \secref*{nabla} \\
+ |partial| & Style of the partial symbol & \secref*{partial} \\
+ |colon| & Behaviour of \cs{colon} & \secref*{colon} \\
+ |slash-delimiter| & Glyph to use for `stretchy' slash & \secref*{slash-delimiter} \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+
+\section{Unicode maths font setup}
+
+In the ideal case, a single Unicode font will contain all maths glyphs we
+need. The file |unicode-math-table.tex| (based on Barbara Beeton's \STIX\ table)
+provides the mapping between Unicode
+maths glyphs and macro names (all 3298 — or however many — of them!). A
+single command
+\codeline{\cmd\setmathfont\marg{font name}\oarg{font features}}
+implements this for every every symbol and alphabetic variant.
+That means |x| to $x$, |\xi| to $\xi$, |\leq| to $\leq$, etc., |\symscr{H}|
+to $\symscr{H}$ and so on, all for Unicode glyphs within a single font.
+
+This package deals well with Unicode characters for maths
+input. This includes using literal Greek letters in formulae,
+resolving to upright or italic depending on preference.
+
+Font features specific to \pkg{unicode-math} are shown in \tabref{mathfontfeatures}.
+Package options (see \tabref{pkgopt}) may also be used.
+Other \pkg{fontspec} features are also valid.
+
+\begin{table}\centering
+ \topcaption{Maths font options.}
+ \tablabel{mathfontfeatures}
+ \begin{tabular}{lll}
+ \toprule
+ Option & Description & See\dots \\
+ \midrule
+ |range| & Style of letters & \secref{range} \\
+ |script-font| & Font to use for sub- and super-scripts & \secref{sscript} \\
+ |script-features| & Font features for sub- and super-scripts & \secref{sscript} \\
+ |sscript-font| & Font to use for nested sub- and super-scripts & \secref{sscript} \\
+ |sscript-features| & Font features for nested sub- and super-scripts & \secref{sscript} \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+\subsection{Using multiple fonts}
+\seclabel{range}
+
+There will probably be few cases where a single Unicode maths font suffices
+(simply due to glyph coverage). The \STIX\ font comes to mind as a
+possible exception. It will therefore be necessary to delegate specific
+Unicode ranges of glyphs to separate fonts:
+ \codeline{\cmd\setmathfont\marg{font name}|[range=|\meta{unicode range}|,|\meta{font features}|]|}
+where \meta{unicode range} is a comma-separated list of Unicode slot numbers and ranges such as |{"27D0-"27EB,"27FF,"295B-"297F}|.
+Note that \TeX's syntax for accessing the slot number of a character, such as |`\+|, will also work here.
+Only numerical slots can be used in ranged declarations.
+
+Note that, for efficiency, the \pkg{unicode-math} package only loads a default maths setup when absolutely necessary.
+Before you use the |range| option you must first load a `main' maths font in the standard way.
+
+You may also use the macro for accessing the glyph, such as |range=|\cs{int}, or whole collection of symbols with the same math type, such as |range=\mathopen|, or complete math styles such as |range=\symbb| (or just |range=bb|).
+
+\subsubsection{Control over alphabet ranges}
+
+As discussed earlier, Unicode mathematics consists of a number of `alphabet styles' within a single font. In \pkg{unicode-math}, these ranges are indicated with the following (hopefully self-explanatory) labels:
+\begin{quote}\ttfamily
+\ExplSyntaxOn
+\clist_const:Nn \g__um_named_ranges_clist {
+up ,
+it ,
+bb ,
+bbit ,
+scr ,
+cal ,
+bfcal ,
+frak ,
+tt ,
+sfup ,
+sfit ,
+bfup ,
+bfit ,
+bfscr ,
+bffrak,
+bfsfup,
+bfsfit,
+}
+\clist_use:Nn \g__um_named_ranges_clist {\,,\,~}
+\ExplSyntaxOff
+\end{quote}
+Fonts can be selected (for predefined ranges only) using the following syntax, in which case all other maths font setup remains untouched:
+\begin{itemize}
+\item |[range=bb]| to use the font for `|bb|' letters only.
+\item |[range=bfsfit/{greek,Greek}]| for Greek lowercase and uppercase only (also with |latin|, |Latin|, |num| as possible options for Latin lower-/upper-case and numbers, resp.).
+\item |[range=up->sfup]| to map to different output styles.
+\end{itemize}
+
+A common request is to load numerals only from a specific font. This can be
+achieved with an option such as |range=up/{num}|.
+
+Note that `meta-styles' such as `|bf|' and `|sf|' are not included in the list above since they are context dependent. Use |[range=bfup]| and |[range=bfit]| to effect changes to the particular ranges selected by `|bf|' (and similarly for `|sf|').
+
+If a particular math style is not defined in the font, we fall back onto the lower-base plane (i.e., `upright') glyphs.
+Therefore, to use an \ascii-encoded fractur font, for example, write
+\begin{Verbatim}
+ \setmathfont{SomeFracturFont}[range=frak]
+\end{Verbatim}
+and because the math plane fractur glyphs will be missing, \pkg{unicode-math} will know to use the \ascii\ ones instead.
+If necessary this behaviour can be forced with |[range=frak->up]|, since the `|up|' range corresponds to \ascii\ letters.
+
+%If you wanted to swap the maths symbols with sans serif forms, it would be possible to write |[range={up->sfup,it->sfit}]|.
+%Note, however, that at present Unicode does not encode glyphs for sans serif Greek (\tabref{mathalphabets}).
+
+Users of the impressive Minion Math fonts (commercial) may use remapping to access the bold glyphs using:
+\begin{Verbatim}
+ \setmathfont{MinionMath-Regular.otf}
+ \setmathfont{MinionMath-Bold.otf}[range={bfup->up,bfit->it}]
+\end{Verbatim}
+To set up the complete range of optical sizes for these fonts, a font declaration such as the following may be used: (adjust may be desired according to the font size of the document)
+\begin{Verbatim}
+\setmathfont{Minion Math}[
+ SizeFeatures = {
+ {Size = -6.01, Font = MinionMath-Tiny},
+ {Size = 6.01-8.41, Font = MinionMath-Capt},
+ {Size = 8.41-13.01, Font = MinionMath-Regular},
+ {Size = 13.01-19.91, Font = MinionMath-Subh},
+ {Size = 19.91-, Font = MinionMath-Disp}
+ }]
+
+\setmathfont{Minion Math}[range = {bfup->up,bfit->it},
+ SizeFeatures = {
+ {Size = -6.01, Font = MinionMath-BoldTiny},
+ {Size = 6.01-8.41, Font = MinionMath-BoldCapt},
+ {Size = 8.41-13.01, Font = MinionMath-Bold},
+ {Size = 13.01-19.91, Font = MinionMath-BoldSubh},
+ {Size = 19.91-, Font = MinionMath-BoldDisp}
+ }]
+\end{Verbatim}
+
+
+\subsection{Script and scriptscript fonts/features}
+\seclabel{sscript}
+
+Cambria Math uses OpenType font features to activate smaller optical sizes
+for scriptsize and scriptscriptsize symbols (the $B$ and $C$, respectively,
+in $A_{B_C}$).
+Other typefaces (such as Minion Math) may use entirely separate font files.
+
+The features |script-font| and |sscript-font| allow alternate fonts to be
+selected for the script and scriptscript sizes, and |script-features| and
+|sscript-features| to apply different OpenType features to them.
+
+By default |script-features| is defined as |Style=MathScript| and |sscript-features| is |Style=MathScriptScript|.
+These correspond to the two levels of OpenType's |ssty| feature tag.
+If the |(s)script-features| options are specified manually, you must
+additionally specify the |Style| options as above.
+
+
+\subsection{Maths `versions'}
+
+\LaTeX\ uses a concept known as `maths versions' to switch math fonts
+mid-document.
+This is useful because it is more efficient than loading a complete maths
+font from scratch every time---especially with thousands of glyphs in the case of Unicode maths!
+The canonical example for maths versions is to select a `bold' maths font
+which might be suitable for section headings, say.
+(Not everyone agrees with this typesetting choice, though; be careful.)
+
+To select a new maths font in a particular version, use the syntax
+ \codeline{\cmd\setmathfont\marg{font name}|[version=|\meta{version name}|,|\meta{font features}|]|}
+and to switch between maths versions mid-document use the standard \LaTeX\ command
+\cmd\mathversion\marg{version name}.
+
+Note there are currently open issues regarding the interaction between the |version|
+and the |range| features, so please proceed with caution.
+
+\subsection{Legacy maths `alphabet' commands}
+\seclabel{mathselect}
+
+\LaTeX\ traditionally uses \cs{DeclareMathAlphabet} and \cs{SetMathAlphabet} to define document commands such as \cs{mathit}, \cs{mathbf}, and so on.
+While these commands can still be used, \pkg{unicode-math} defines a wrapper command to assist with the creation of new such maths alphabet commands.
+This command is known as \cs{setmathface} in symmetry with \pkg{fontspec}'s \cs{newfontface} command; it takes syntax:
+\begin{quote}
+ \cmd\setmathfontface\meta{command}\marg{font name}|[|\meta{font features}|]|
+
+ \makebox[0pt][l]{\cmd\setmathfontface\meta{command}\marg{font name}|[||version=|\meta{version name}|,|\meta{font features}|]|}
+\end{quote}
+For example, if you want to define a new legacy maths alphabet font \cs{mathittt}:
+\begin{verbatim}
+ \setmathfontface\mathittt{texgyrecursor-italic.otf}
+ ...
+ $\mathittt{foo} = \mathittt{a} + \mathittt{b}$
+\end{verbatim}
+
+
+\subsubsection{Default `text math' fonts}
+
+The five `text math' fonts, discussed above, are: \cs{mathrm}, \cs{mathbf}, \cs{mathit}, \cs{mathsf}, and \cs{mathtt}.
+These commands are also defined with their original definition under synonyms \cs{mathtextrm}, \cs{mathtextbf}, and so on.
+(These definitions hold regardless of package option, in case you need to be sure.)
+
+When selecting document fonts using \pkg{fontspec} commands such as \cs{setmainfont}, \pkg{unicode-math} inserts some additional code into \pkg{fontspec} that keeps the current default fonts `in sync' with their corresponding \cs{mathrm} commands, etc.
+
+For example, in standard \LaTeX, \cs{mathsf} doesn't change even if the main document font is changed using |\renewcommand\sfdefault{...}|. With \pkg{unicode-math} loaded, after writing |\setsansfont{Helvetica}|, \cs{mathsf} will now be set in Helvetica.
+
+If the \cs{mathsf} font is set explicitly at any time in the preamble, this `auto-following' does not occur. The legacy math font switches can be defined either with commands defined by \pkg{fontspec} (|\setmathrm|, |\setmathsf|, etc.) or using the more general |\setmathfontface\mathsf| interface defined by \pkg{unicode-math}.
+
+
+\subsubsection{Replacing `text math' fonts by symbols}
+\seclabel{textmathlegacy}
+
+For certain types of documents that use legacy input syntax, it may be preferable to have |\mathbf| behave as if it were |\symbf| en masse (et cetera respectively).
+A series of package options (\tabref{legacyfontswitch}) are provided to facilitate switching the definition of \cs{mathXYZ} for the five legacy text math font definitions.
+
+For example, if in a particular document |\mathbf| is used only for choosing symbols of vectors and matrices, a dedicated symbol font (|\symbf|) will produce better spacing and will better match the main math font.
+In that case loading |unicode-math| with the |mathbf=sym| will achieve the desired result.
+
+\begin{table}
+ \centering
+ \topcaption{Maths text font configuration options. Note that \cs{mathup} and \cs{mathrm} are aliases of each other and cannot be configured separately.}
+ \tablabel{legacyfontswitch}
+ \begin{tabular}{lll}
+ \toprule
+ Defaults (from `text' font) & From `maths symbols' \\
+ \midrule
+ |mathrm=text| & |mathrm=sym | \\
+ |mathup=text|\rlap{$^\ast$} & |mathup=sym|{}\rlap{$^\ast$} \\
+ |mathit=text| & |mathit=sym | \\
+ |mathsf=text| & |mathsf=sym | \\
+ |mathbf=text| & |mathbf=sym | \\
+ |mathtt=text| & |mathtt=sym | \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+
+\subsubsection{Operator font}
+
+\LaTeX\ defines an internal command \cs{operator@font} for typesetting elements such as |\sin| and |\cos|.
+This font is selected from the legacy |operators| NFSS `MathAlphabet', which is no longer relevant in the context of \pkg{unicode-math}.
+By default, the \cs{operator@font} command is defined to switch to the \cs{mathrm} font.
+You may now change these using the command:
+\begin{Verbatim}
+\setoperatorfont\mathit
+\end{Verbatim}
+Or, to select a \pkg{unicode-math} range:
+\begin{Verbatim}
+\setoperatorfont\symscr
+\end{Verbatim}
+\setoperatorfont\symscr
+For example, after the latter above, |$\sin x$| will produce `$\sin x$'.
+
+\mathversion{normal}
+\setoperatorfont\mathrm
+
+
+\section{Maths input}
+
+\XeTeX's Unicode support allows maths input through two methods. Like
+classical \TeX, macros such as \cmd\alpha, \cmd\sum, \cmd\pm, \cmd\leq, and
+so on, provide verbose access to the entire repertoire of characters defined
+by Unicode. The literal characters themselves may be used instead, for more
+readable input files.
+
+\subsection{Math `style'}
+\seclabel{math-style}
+
+Classically, \TeX\ uses italic lowercase Greek letters and \emph{upright}
+uppercase Greek letters for variables in mathematics. This is contrary to
+the \textsc{iso} standards of using italic forms for both upper- and lowercase.
+Furthermore, in various historical contexts, often associated with French typesetting, it was common to use upright uppercase \emph{Latin} letters as well as upright
+upper- and lowercase Greek, but italic lowercase latin. Finally, it is not unknown to use upright letters
+for all characters, as seen in the Euler fonts.
+
+The \pkg{unicode-math} package accommodates these possibilities with the
+option \opt{math-style} that takes one of five (case sensitive) arguments:
+\opt{TeX}, \opt{ISO}, \opt{french}, \opt{upright}, or \opt{literal}.\footnote{Interface inspired by Walter Schmidt's \pkg{lucimatx} package.}
+The \opt{math-style} options' effects are shown in brief in \tabref{math-style}.
+
+The philosophy behind the interface to the mathematical symbols
+lies in \LaTeX's attempt of separating content and formatting. Because input
+source text may come from a variety of places, the upright and
+`mathematical' italic Latin and Greek alphabets are \emph{unified} from the
+point of view of having a specified meaning in the source text. That is, to
+get a mathematical ‘$x$’, either the \ascii\ (`keyboard') letter |x| may
+be typed, or the actual Unicode character may be used. Similarly for Greek
+letters. The upright or italic forms are then chosen based on the
+|math-style| package option.
+
+If glyphs are desired that do not map as per the package option (for
+example, an upright `g' is desired but typing |$g$| yields `$g$'),
+\emph{markup} is required to specify this; to follow from the example:
+|\symup{g}|.
+Maths style commands such as \cmd\symup\ are detailed later.
+
+For compatibility and consistency, however, upright and italic Greek letters
+can be `forced` using \verb|up| or \verb|it| prefixes before their names.
+For example, \cs{Gamma} will give an upright or italic Gamma depending on the
+\opt{math-style}, but \cs{upGamma} and \cs{itGamma} will always give upright
+or italic Gammas, respectively.
+
+\paragraph{`Literal' interface}
+Some may not like this convention of normalising their input.
+For them, an upright |x| is an upright `x' and that's that.
+(This will be the case when obtaining source text from copy/pasting PDF or
+Microsoft Word documents, for example.)
+For these users, the |literal| option to |math-style| will effect this behaviour.
+The \cs{symliteral}\marg{syms} command can also be used, regardless of package setting, to force the style to match the literal input characters.
+This is a `mirror' to \cs{symnormal}\marg{syms} (also alias \cs{mathnormal}) which `resets' the character mapping in its argument to that originally set up through package options.
+
+
+\begin{table}
+ \centering
+ \topcaption{Effects of the \opt{math-style} package option.}
+ \tablabel{math-style}
+ \begin{tabular}{@{}>{\ttfamily}lcc@{}}
+ \toprule
+ & \multicolumn{2}{c}{Example} \\
+ \cmidrule(l){2-3}
+ \rmfamily Package option & Latin & Greek \\
+ \midrule
+ math-style=ISO & $(a,z,B,X)$ & $\symit{(\alpha,\beta,\Gamma,\Xi)}$ \\
+ math-style=TeX & $(a,z,B,X)$ & $(\symit\alpha,\symit\beta,\symup\Gamma,\symup\Xi)$ \\
+ math-style=french & $(a,z,\symup B,\symup X)$ & $(\symup\alpha,\symup\beta,\symup\Gamma,\symup\Xi)$ \\
+ math-style=upright & $(\symup a,\symup z,\symup B,\symup X)$ & $(\symup\alpha,\symup\beta,\symup\Gamma,\symup\Xi)$ \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+\paragraph{`Full-width' letters}
+Unicode contains `full-width' versions of ASCII from \unichar{FF01}.
+The numerals and latin letters in this range are defined by \pkg{unicode-math}
+to map to their standard ASCII counterparts, which are then controlled by the relevant \opt{math-style} setting.
+Other full-width symbols are not currently included but can be if there is sufficient need or desire.
+
+\subsection{Bold style}
+\seclabel{bold-style}
+
+Similar as in the previous section, ISO standards differ somewhat to \TeX's
+conventions (and classical typesetting) for `boldness' in mathematics. In
+the past, it has been customary to use bold \emph{upright} letters to denote
+things like vectors and matrices. For example, \( \symbfup{M} =
+(\mitM_x,\mitM_y,\mitM_z) \). Presumably, this was due to the relatively
+scarcity of bold italic fonts in the pre-digital typesetting era.
+It has been suggested by some that \emph{italic} bold symbols should be used nowadays instead, but this practise is certainly not widespread.
+
+Bold Greek letters have simply been bold variant glyphs of their regular
+weight, as in \( \mbfitxi = (\mitxi_\mitr,\mitxi_\mitphi,\mitxi_\mittheta)
+\).
+Confusingly, the syntax in \LaTeX\ traditionally has been different for obtaining `normal' bold symbols in Latin and Greek: \cmd\mathbf\ in the former (`$\symbfup{M}$'), and \cmd\bm\ (or
+\cmd\boldsymbol, deprecated) in the latter (`$\mbfitxi$').
+
+In \pkg{unicode-math}, the \cmd\symbf\ command works directly with both
+Greek and Latin maths characters and depending on package option
+either switches to upright for Latin letters (|bold-style=TeX|) as well or
+keeps them italic (|bold-style=ISO|).
+To match the package options for non-bold characters, with option
+|bold-style=upright| all bold characters are upright, and
+|bold-style=literal| does not change the upright/italic shape of the letter.
+The \opt{bold-style} options' effects are shown in brief in \tabref{bold-style}.
+
+Upright and italic bold mathematical letters input as direct Unicode
+characters are normalised with the same rules. For example, with
+|bold-style=TeX|, a literal bold italic latin character will be typeset
+upright.
+
+Note that \opt{bold-style} is independent of \opt{math-style}, although if
+the former is not specified then matching defaults are chosen based on the
+latter.
+
+\begin{table}
+ \centering
+ \topcaption{Effects of the \opt{bold-style} package option.}
+ \tablabel{bold-style}
+ \begin{tabular}{@{}>{\ttfamily}lcc@{}}
+ \toprule
+ & \multicolumn{2}{c}{Example} \\
+ \cmidrule(l){2-3}
+ \rmfamily Package option & Latin & Greek \\
+ \midrule
+ bold-style=ISO & $(\symbfit a, \symbfit z, \symbfit B, \symbfit X)$ & $(\symbfit\alpha, \symbfit\beta, \symbfit\Gamma, \symbfit\Xi)$ \\
+ bold-style=TeX & $(\symbfup a,\symbfup z,\symbfup B,\symbfup X)$ & $(\symbfit\alpha, \symbfit\beta,\symbfup \Gamma,\symbfup \Xi)$ \\
+ bold-style=upright & $(\symbfup a,\symbfup z,\symbfup B,\symbfup X)$ & $(\symbfup \alpha,\symbfup \beta,\symbfup \Gamma,\symbfup \Xi)$ \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+
+\subsection{Sans serif style}
+\seclabel{sans-style}
+
+Unicode contains upright and italic, medium and bold mathematical style characters.
+These may be explicitly selected with the \cs{symsfup}, \cs{symsfit}, \cs{symbfsfup}, and \cs{symbfsfit}
+commands discussed in \secref{all-math-alphabets}.
+
+How should the generic \cs{symsf} behave? Unlike bold, sans serif is used much more sparingly
+in mathematics. I've seen recommendations to typeset tensors in sans serif italic
+or sans serif italic bold (e.g., examples in the \pkg{isomath} and \pkg{mattens} packages).
+But \LaTeX's \cs{mathsf} is \textsl{upright} sans serif.
+
+Therefore, the package options |[sans-style=upright]| and |[sans-style=italic]| control the behaviour of \cs{symsf}.
+The |upright| style sets up the command to use upright sans serif, including Greek;
+the |italic| style switches to using italic in both Latin and Greek.
+In other words, this option simply changes the meaning of \cs{symsf} to either \cs{symsfup} or \cs{symsfit}, respectively.
+Please let me know if more granular control is necessary here.
+
+There is also a |[sans-style=literal]| setting, set automatically with |[math-style=literal]|, which retains the uprightness of the input characters used when selecting the sans serif output.
+
+\subsubsection{What about bold sans serif?}
+
+While you might want your bold upright and your sans serif italic, I don't believe you'd also want your bold sans serif upright (etc.).
+Therefore, bold sans serif follows from the setting for sans serif; it is completely independent of the setting for bold.
+
+In other words, \cs{symbfsf} is either \cs{symbfsfup} or \cs{symbfsfit} based on |[sans-style=upright]| or |[sans-style=italic]|, respectively. And \texttt{[sans-style = literal]} causes \cs{symbfsf} to retain the same italic or upright shape as the input, and turns it bold sans serif.
+
+N.B.: there is no medium-weight sans serif Greek range in Unicode.
+Therefore, |\symsf{\alpha}| does not make sense (it produces `$\symsf{\alpha}$'), while |\symbfsf{\alpha}| gives `$\symbfsfup{\alpha}$' or `$\symbfsfit{\alpha}$' according to the |sans-style|.
+
+\subsection{All (the rest) of the mathematical styles}
+\seclabel{all-math-alphabets}
+
+Unicode contains separate codepoints for most if not all variations of style
+shape one may wish to use in mathematical notation. The complete list is shown
+in \tabref{mathalphabets}. Some of these have been covered in the previous sections.
+
+The math font switching commands do not nest; therefore if you want
+sans serif bold, you must write |\symbfsf{...}| rather than |\symbf{\symsf{...}}|.
+This may change in the future.
+
+\begin{table}
+\caption{Mathematical styles defined in Unicode. Closed dots indicate an style exists in the font specified; open dots indicate shapes that should always be taken from the upright font even in the italic style. See main text for description of \cs{mathbbit}.}
+\tablabel{mathalphabets}
+\centering
+\def\Y{\textbullet}
+\def\M{\textopenbullet}
+\begin{tabular}{@{} lll l ccc @{}}
+\toprule
+\multicolumn{3}{c}{Font} & & \multicolumn{3}{c}{Alphabet} \\
+\cmidrule(r){1-3}
+\cmidrule(l){5-7}
+Style & Shape & Series & Switch & Latin & Greek & Numerals \\
+\midrule
+Serif & Upright & Normal & \cs{symup} & \Y & \Y & \Y \\
+ & & Bold & \cs{symbfup} & \Y & \Y & \Y \\
+ & Italic & Normal & \cs{symit} & \Y & \Y & \M \\
+ & & Bold & \cs{symbfit} & \Y & \Y & \M \\
+Sans serif & Upright & Normal & \cs{symsfup} & \Y & & \Y \\
+ & & Bold & \cs{symbfsfup} & \Y & \Y & \Y \\
+ & Italic & Normal & \cs{symsfit} & \Y & & \M \\
+ & & Bold & \cs{symbfsfit} & \Y & \Y & \M \\
+Typewriter & Upright & Normal & \cs{symtt} & \Y & & \Y \\
+Double-struck & Upright & Normal & \cs{symbb} & \Y & & \Y \\
+ & Italic & Normal & \cs{symbbit} & \Y & & \\
+Script & Upright & Normal & \cs{symscr} & \Y & & \\
+ & & Bold & \cs{symbfscr} & \Y & & \\
+Fraktur & Upright & Normal & \cs{symfrak} & \Y & & \\
+ & & Bold & \cs{symbffrac} & \Y & & \\
+\bottomrule
+\end{tabular}
+\end{table}
+
+\subsubsection{Scope of the functionality of the \cs{sym..} commands}
+
+The \cs{sym..} commands are designed to affect only the follow sets of input letters: numerals ($0$--$9$), Latin ($a$--$z$, $A$--$Z$), Greek ($\alpha$--$\omega$, $\Alpha$--$\Omega$,), and the \cs{partial} and \cs{nabla} symbols ($\partial$, $\nabla$).
+These are the only symbols for which Unicode defines separate codepoints with varying mathematical style.
+
+There is currently no scope for including other symbols in the \cs{sym..} commands, such as writing |\symbf{\int}| for a bold integral symbol.
+Therefore the commands provided by \pkg{unicode-math} should not be compared to those provided by the \pkg{bm} package.
+
+\subsubsection{Double-struck}
+
+The double-struck style (also known as `blackboard bold') consists of
+upright Latin letters $\{\symbb{a}$--$\symbb{z}$,$\symbb{A}$$\symbb{Z}\}$,
+numerals $\symbb{0}$--$\symbb{9}$, summation symbol $\symbb\sum$, and four
+Greek letters only: $\{\symbb{\gamma\pi\Gamma\Pi}\}$.
+
+While |\symbb{\sum}| does produce a double-struck summation symbol,
+its limits aren't properly aligned. Therefore,
+either the literal character or the control sequence \cs{Bbbsum} are
+recommended instead.
+
+There are also five Latin \emph{italic} double-struck letters: $\symbbit{Ddeij}$.
+These can be accessed (if not with their literal characters or control sequences)
+with the \cs{mathbbit} style switch, but note that only those five letters
+will give the expected output.
+
+\subsubsection{Caligraphic vs.\ Script variants}
+
+The Unicode maths encoding contains a style for `Script' letters,
+and while by default \cs{mathcal} and \cs{mathscr}
+are synonyms, there are some situations when a
+separate `Caligraphic' style is needed as well.
+
+If a font contains alternate glyphs for a separate caligraphic style,
+they can be selected explicitly as shown below.
+This feature is currently only supported by the XITS~Math font, where
+the caligraphic letters are accessed with the same glyph slots as the
+script letters but with the first stylistic set feature (|ss01|) applied.
+An example is shown below.
+\begin{quote}
+\setmathfont{XITSMath-Regular.otf}
+\setmathfont{XITSMath-Regular.otf}[range=cal,StylisticSet=1]
+The Script style (\cs{mathscr}) in XITS Math is: $\symscr{ABCXYZ}$\par
+The Caligraphic style (\cs{mathcal}) in XITS Math is: $\symcal{ABCXYZ}$
+\end{quote}
+
+
+\subsection{Miscellanea}
+
+\subsubsection{Nabla}
+\seclabel{nabla}
+
+ The symbol $\nabla$ comes in the six forms shown in \tabref{nabla}.
+ We want an individual option to specify whether we want upright or italic
+ nabla by default (when either upright or italic nabla is used in the
+ source). \TeX\ classically uses an upright nabla, and \textsc{iso}
+ standards agree with this convention.
+ The package options |nabla=upright| (default) and
+ |nabla=italic| switch between the two choices, and |nabla=literal| respects
+ the shape of the input character.
+|nabla=literal| is activated automatically after |math-style=literal|.
+
+These settings are then inherited through \cmd\symbf; \cmd\symit\ and \cmd\symup\ can be used to force the shape of the nabla one way or the other.
+
+
+\begin{table}
+ \begin{minipage}[b]{0.49\textwidth}
+ \centering
+ \topcaption{The various forms of nabla.}
+ \tablabel{nabla}
+ \let \tmpshow\empty
+ \begin{tabular}{@{}llc@{}}
+ \toprule
+ \multicolumn{2}{@{}l}{Description} & Glyph \\
+ \cmidrule(r){1-2}\cmidrule(l){3-3}
+ Upright & Serif & $\symup\nabla$ \\
+ & Bold serif & $\symbfup\nabla$ \\
+ & Bold sans & $\symbfsfup\nabla$ \\
+ \cmidrule(lr){1-2}\cmidrule(lr){3-3}
+ Italic & Serif & $\symit\nabla$ \\
+ & Bold serif & $\symbfit\nabla$ \\
+ & Bold sans & $\symbfsfit\nabla$ \\
+ \bottomrule
+ \end{tabular}
+ \end{minipage}\hfill
+ \begin{minipage}[b]{0.49\textwidth}
+ \centering
+ \topcaption{The partial differential.}
+ \tablabel{partial}
+ \begin{tabular}{@{}llc@{}}
+ \toprule
+ \multicolumn{2}{@{}l}{Description} & Glyph \\
+ \cmidrule(r){1-2}\cmidrule(l){3-3}
+ Regular & Upright & $\symup\partial$ \\
+ & Italic & $\symit\partial$ \\
+ Bold & Upright & $\symbfup\partial$ \\
+ & Italic & $\symbfit\partial$ \\
+ Sans bold & Upright & $\symbfsfup\partial$ \\
+ & Italic & $\symbfsfit\partial$ \\
+ \bottomrule
+ \end{tabular}
+ \end{minipage}
+\end{table}
+
+
+\subsubsection{Partial}
+\seclabel{partial}
+
+The same logic as for nabla applies to the symbols \unichar{2202} partial differential and \unichar{1D715} math italic partial differential.
+However, in practice these symbols are often designed identically in an italic style.
+
+If the font you are using supports it, use the |partial=upright| or |partial=italic| (default) package options to specify
+which one you would like, or |partial=literal| to have the same character
+used in the output as was used for the input.
+|partial=literal| is activated following |math-style=literal|.
+
+See \tabref{partial} for the variations on the partial differential symbol.
+
+
+\subsubsection{Primes}
+
+Primes ($x'$) may be input in several ways. You may use any combination
+the \ascii\ straight quote (\texttt{\char`\'}) or the Unicode prime \unichar{2032}
+($'$); when multiple primes occur next to each other, they chain
+together to form double, triple, or quadruple primes if the font contains
+pre-drawn glyphs. The individual prime glyphs are accessed, as usual,
+with the \cs{prime} command, and the double-, triple-, and quadruple-prime
+glyphs are available with \cs{dprime}, \cs{trprime}, and \cs{qprime},
+respectively.
+
+If the font does not contain the pre-drawn glyphs or more than four primes
+are used, the single prime glyph is used multiple times with a negative
+kern to get the spacing right. There is no user interface to adjust this
+negative kern yet (because I haven't decided what it should look like);
+if you need to, write something like this:
+\begin{Verbatim}
+\ExplSyntaxOn
+\muskip_gset:Nn \g_@@_primekern_muskip { -\thinmuskip/2 }
+\ExplySyntaxOff
+\end{Verbatim}
+Backwards or reverse primes behave in exactly the same way; use the \ascii\
+back tick (\texttt{\char`\`}) or the Unicode reverse prime \unichar{2035}
+({\umfont\char"2035}).
+The command to access the backprime is \cs{backprime}, and
+multiple backwards primes can accessed with \cs{backdprime},
+\cs{backtrprime}, and \cs{backqprime}.
+
+In all cases above, no error checking is performed if you attempt to
+access a multi-prime glyph in a font that doesn't contain one. For this
+reason, it may be safer to write |x''''| instead of |x\qprime|
+in general.
+
+If you ever need to enter the straight quote |'| or the backtick |`| in
+maths mode, these glyphs can be accessed with \cs{mathstraightquote} and
+\cs{mathbacktick}.
+
+\subsubsection{Subscripts and superscripts and symbol alphabets}
+
+In traditional \LaTeX, users have for many years exploited a loophole in the implementation
+of |\mathrm| and similar to write expressions such as |x_\mathrm f| to achieve
+$x_{\mathrm{f}}$ instead of writing the more correct |x_{\mathrm{f}}|.
+Shorthand notation such as |x_\mathrm f| is not officially documented \LaTeX\ syntax,
+and due to a particular implementation detail in \pkg{unicode-math} this \emph{incorrect}
+syntax is no longer supported.
+
+
+\subsubsection{Unicode subscripts and superscripts}
+
+You may, if you wish, use Unicode subscripts and superscripts in your
+source document. For basic expressions, the use of these characters
+can make the input more readable.
+Adjacent sub- or super-scripts will be concatenated into a single
+expression.
+
+The range of subscripts and superscripts supported by this package
+are shown in \figref{superscripts,subscripts}. Please request more if
+you think it is appropriate.
+
+\begin{figure}\centering
+\fbox{\fontspec{DejaVuSerif.ttf}\Large
+A
+^^^^2070 ^^^^00b9 ^^^^00b2 ^^^^00b3 ^^^^2074 ^^^^2075 ^^^^2076 ^^^^2077
+^^^^2078 ^^^^2079 ^^^^207a ^^^^207b ^^^^207c ^^^^207d ^^^^207e ^^^^2071
+^^^^207f ^^^^207f ^^^^02b0 ^^^^02b2 ^^^^02b3 ^^^^02b7 ^^^^02b8
+Z}
+\caption{
+ The Unicode superscripts supported as input characters.
+ These are the literal glyphs from the `DejaVu Serif' font,
+ not the output seen when used for maths input.
+ The `A' and `Z' are to provide context for the size and
+ location of the superscript glyphs.
+}
+\figlabel{superscripts}
+\end{figure}
+
+\begin{figure}\centering
+\fbox{\fontspec{DejaVuSerif.ttf}\Large
+A
+^^^^2080 ^^^^2081 ^^^^2082 ^^^^2083 ^^^^2084 ^^^^2085 ^^^^2086 ^^^^2087
+^^^^2088 ^^^^2089 ^^^^208a ^^^^208b ^^^^208c ^^^^208d ^^^^208e ^^^^2090
+^^^^2091 ^^^^1d62 ^^^^2092 ^^^^1d63 ^^^^1d64 ^^^^1d65 ^^^^2093 ^^^^1d66
+^^^^1d67 ^^^^1d68 ^^^^1d69 ^^^^1d6a
+Z}
+\caption{
+ The Unicode subscripts supported as input characters.
+ See note from \figref{superscripts}.
+}
+\figlabel{subscripts}
+\end{figure}
+
+\subsubsection{Colon}
+\seclabel{colon}
+
+The colon is one of the few confusing characters of Unicode maths.
+In \TeX, \texttt{:} is defined as a colon with relation spacing: `$a:b$'.
+While \cs{colon} is defined as a colon with punctuation spacing: `$a\colon b$'.
+
+In Unicode, \unichar{003A} {colon} is defined as a punctuation symbol,
+while \unichar{2236} {ratio} is the colon-like symbol used in mathematics to denote
+ratios and other things.
+
+This breaks the usual straightforward mapping from control sequence to Unicode input character
+to (the same) Unicode glyph.
+
+To preserve input compatibility, we remap the \ascii\ input character `\texttt{:}' to \unichar{2236}.
+Typing a literal \unichar{2236} char will result in the same output.
+If \pkg{amsmath} is loaded, then the definition of \cs{colon} is inherited from there
+(it looks like a punctuation colon with additional space around it).
+Otherwise, \cs{colon} is made to output a colon with \cs{mathpunct} spacing.
+
+The package option |colon=literal| forces \ascii\ input `|:|' to be printed as \cs{mathcolon} instead.
+
+
+\subsubsection{Slashes and backslashes}
+\seclabel{slash-delimiter}
+
+There are several slash-like symbols defined in Unicode. The complete list is shown in \tabref{slashes}.
+
+\begin{table}\centering
+\caption{Slashes and backslashes.}
+\tablabel{slashes}
+\begin{tabular}{@{}cl@{}cl@{}}
+\toprule
+Slot & Name & Glyph & Command \\
+\midrule
+\unichar{002F} & \textsc{solidus} & \umfont \char"002F & \cs{slash} \\
+\unichar{2044} & \textsc{fraction slash} & \umfont \char"2044 & \cs{fracslash} \\
+\unichar{2215} & \textsc{division slash} & \umfont \char"2215 & \cs{divslash} \\
+\unichar{29F8} & \textsc{big solidus} & \umfont \char"29F8 & \cs{xsol} \\
+\midrule
+\unichar{005C} & \textsc{reverse solidus} & \umfont \char"005C & \cs{backslash} \\
+\unichar{2216} & \textsc{set minus} & \umfont \char"2216 & \cs{smallsetminus} \\
+\unichar{29F5} & \textsc{reverse solidus operator}& \umfont \char"29F5 & \cs{setminus} \\
+\unichar{29F9} & \textsc{big reverse solidus} & \umfont \char"29F9 & \cs{xbsol} \\
+\bottomrule
+\end{tabular}
+\end{table}
+
+In regular \LaTeX\ we can write \cs{left}\cs{slash}\dots\cs{right}\cs{backslash}
+and so on and obtain extensible delimiter-like symbols. Not all of the Unicode slashes
+are suitable for this (and do not have the font support to do it).
+
+\paragraph{Slash}
+
+Of \unichar{2044} {fraction slash}, TR25 says that it is:
+\begin{quote}
+\dots used to build up simple fractions in running text\dots
+however parsers of mathematical texts should be prepared to handle fraction slash
+when it is received from other sources.
+\end{quote}
+
+\unichar{2215} {division slash} should be used when division is represented
+without a built-up fraction; $\pi\approx22/7$, for example.
+
+\unichar{29F8} {big solidus} is a `big operator' (like $\sum$).
+
+\paragraph{Backslash}
+
+The \unichar{005C} {reverse solidus} character \cs{backslash} is used for denoting
+double cosets: $A\backslash B$. (So I'm led to believe.)
+It may be used as a `stretchy' delimiter if supported by the font.
+
+MathML uses \unichar{2216} {set minus} like this: $A\smallsetminus B$.\footnote{\S4.4.5.11 \url{http://www.w3.org/TR/MathML3/}}
+The \LaTeX\ command name \cs{smallsetminus} is used for backwards compatibility.
+
+Presumably, \unichar{29F5} {reverse solidus operator} is intended to
+be used in a similar way, but it could also (perhaps?) be used to
+represent `inverse division': $\pi\approx7\mathbin{\backslash}22$.^^A
+\footnote{This is valid syntax in the Octave and Matlab programming languages,
+in which it means matrix inverse pre-multiplication. I.e., $A\mathbin{\backslash} B\equiv A^{-1}B$.}
+The \LaTeX\ name for this character is \cs{setminus}.
+
+Finally, \unichar{29F9} {big reverse solidus} is a `big operator' (like $\sum$).
+
+\paragraph{How to use all of these things}
+
+Unfortunately, font support for the above characters/glyphs is rather inconsistent.
+In Cambria Math, the only slash that grows (say when writing
+\[
+\left.\left[\begin{array}{cc} a & b \\ c & d\end{array}\right]\middle\slash
+ \left[\begin{array}{cc} 1 & 1 \\ 1 & 0\end{array}\right] \right.\quad )
+\]
+is the \textsc{fraction slash}, which we just established above is
+sort of only supposed to be used in text.
+
+Of the above characters, the following are allowed to be used after
+\cs{left}, \cs{middle}, and \cs{right}:
+\begin{itemize}
+\item \cs{fracslash};
+\item \cs{slash}; and,
+\item \cs{backslash} (the only reverse slash).
+\end{itemize}
+
+However, we assume that there is only \emph{one} stretchy slash
+in the font; this is assumed by default to be \unichar{002F} {solidus}.
+Writing \cs{left/} or \cs{left}\cs{slash} or \cs{left}\cs{fracslash}
+will all result in the same stretchy delimiter being used.
+
+The delimiter used can be changed with the |slash-delimiter| package option.
+Allowed values are |ascii|, |frac|, and |div|, corresponding to the respective
+Unicode slots.
+
+For example: as mentioned above, Cambria Math's stretchy slash is
+\unichar{2044} {fraction slash}. When using Cambria Math, then
+\pkg{unicode-math} should be loaded with the |slash-delimiter=frac| option.
+(This should be a font option rather than a package option, but
+it will change soon.)
+
+\subsubsection{Behaviour of hyphens in mathematics}
+\seclabel{hyphen}
+
+Unicode defines the following related characters:
+\begin{itemize}
+\item \unichar{0002D}{hyphen-minus}
+\item \unichar{02212}{minus sign}
+\item \unichar{02010}{hyphen} (\cs{mathhyphen})
+\end{itemize}
+The first two of these characters in the input will all behave as the binary operator
+`minus sign'.
+The third is defined by \pkg{unicode-math} as a `math letter' for constructions
+like \verb|$R‐\text{Mod}$| ($R‐\text{Mod}$).
+If more control is needed surrounding these symbols, additional options can be added to the package;
+please get in touch if this is the case for you.
+
+
+\subsubsection{Growing and non-growing accents}
+\seclabel{growing-accents}
+
+There are a few accents for which \TeX\ has both non-growing and growing
+versions. Among these are \cs{hat} and \cs{tilde}; the corresponding growing
+versions are called \cs{widehat} and \cs{widetilde}, respectively.
+
+Older versions of \XeTeX\ and \LuaTeX\ did not support this distinction,
+however, and \emph{all} accents there were growing automatically. (I.e.,
+\cs{hat} and \cs{widehat} are equivalent.) As of \LuaTeX\ v0.65 and \XeTeX\
+v0.9998, these wide/non-wide commands will again behave in their expected
+manner.
+
+
+\subsubsection{Negations and the \cs{not} command}
+\seclabel{negations}
+
+The \cs{not} command in classic \LaTeXe\ was a mathematical slash modifying glyph that allowed for `negating` maths symbols where pre-built glyphs were not available. While Unicode encodes a slot for this modifying slash, it is only well-supported in \LuaTeX\ and not in \XeTeX.
+
+To provide more flexibility, the \pkg{unicode-math} package defines \cs{not} to search for a predefined `negated' definitions for its argument and use that if available. This method can be used for fine-tuning in cases where spacing needs to be adjusted.
+
+A `negated definition` is any symbol command prefixed by either \verb|n| or \verb|not|. For example, \pkg{unicode-math} by default defines both \cs{leftarrow} ($\leftarrow$) and \cs{nleftarrow} ($\nleftarrow$).
+
+To define custom negated definitions for either symbols (e.g., \verb|\not=|) or commands (e.g., \verb|\not\equal|), use the \cs{NewNotCommand}\marg{symbol or cmd}\marg{definition} command. Its usage is as follows:
+\begin{verbatim}
+\NewNegationCommand {=} {\neq}
+\NewNegationCommand {\equal} {\neq}
+\end{verbatim}
+If the command has already been defined, an error will result and \verb|\RenewNegationCommand| can be used to overwrite the original definition.
+
+
+\subsubsection{Pre-drawn fraction characters}
+
+Pre-drawn fractions \unichar{00BC}--\unichar{00BE}, \unichar{2150}--\unichar{215E}
+are not suitable for use in mathematics output. However, they can be useful
+as input characters to abbreviate common fractions.
+\begin{center}
+\fontspec{DejaVuSerif.ttf} ^^A available in TeX Live 2012 if not earlier
+¼ ½ ¾ ↉ ⅐ ⅑ ⅒ ⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞
+\end{center}
+For example, instead of writing `|\tfrac12 x|', you may consider it more readable to have
+`|½x|' in the source instead.
+
+If the \cs{tfrac} command exists (i.e., if \pkg{amsmath} is loaded or
+you have specially defined \cs{tfrac} for this purpose), it will be used
+to typeset the fractions. If not, regular \cs{frac} will be used. The command
+to use (\cs{tfrac} or \cs{frac}) can be forced either way with the package
+option |active-frac=small| or |active-frac=normalsize|, respectively.
+
+\subsubsection{Circles}
+
+Unicode defines a large number of different types of circles for a variety
+of mathematical purposes. There are thirteen alone just considering the
+all white and all black ones, shown in \tabref{circles}.
+
+\LaTeX\ defines considerably fewer: \cs{circ} and \cs{bigcirc} for white;
+\cs{bullet} for black. This package maps those commands to \cs{vysmwhtcircle},
+\cs{mdlgwhtcircle}, and \cs{smblkcircle}, respectively.
+
+\begin{table}\centering
+\def\showchar#1#2#3{ \textsc{u}+{\small\ttfamily #1} & \texttt{\string#3} & \umfont \char"#1 \\}
+\begin{tabular}{@{}llc@{}}
+\toprule
+Slot & Command & Glyph \\
+\midrule
+\showchar{00B7}{centerdot}{\cdotp}
+\showchar{22C5}{small middle dot}{\cdot}
+\showchar{2219}{bullet operator}{\vysmblkcircle}
+\showchar{2022}{round bullet, filled}{\smblkcircle}
+\showchar{2981}{z notation spot}{\mdsmblkcircle}
+\showchar{26AB}{medium black circle}{\mdblkcircle}
+\showchar{25CF}{circle, filled}{\mdlgblkcircle}
+\showchar{2B24}{black large circle}{\lgblkcircle}
+\bottomrule
+\end{tabular}
+\def\showchar#1#2#3{ \umfont \char"#1 & \texttt{\string#3} & \textsc{u}+{\small\ttfamily #1} \\}
+\begin{tabular}{@{}cll@{}}
+\toprule
+Glyph & Command & Slot \\
+\midrule
+\\
+\\
+\showchar{2218}{composite function (small circle)}{\vysmwhtcircle}
+\showchar{25E6}{white bullet}{\smwhtcircle}
+\showchar{26AC}{medium small white circle}{\mdsmwhtcircle}
+\showchar{26AA}{medium white circle}{\mdwhtcircle}
+\showchar{25CB}{large circle}{\mdlgwhtcircle}
+\showchar{25EF}{large circle}{\lgwhtcircle}
+\bottomrule
+\end{tabular}
+\caption{Filled and hollow Unicode circles.}
+\tablabel{circles}
+\end{table}
+
+\subsubsection{Triangles}
+
+While there aren't as many different sizes of triangle as there are circle,
+there's some important distinctions to make between a few similar characters. See \tabref{uptriangles} for the full summary.
+
+These triangles all have different intended meanings. Note for backwards
+compatibility with \TeX, \unichar{25B3} has \emph{two} different mappings
+in \pkg{unicode-math}. \cs{bigtriangleup} is intended as a binary operator
+whereas \cs{triangle} is intended to be used as a letter-like symbol.
+
+But you're better off if you're using the latter form to indicate an
+increment to use the glyph intended for this purpose, \unichar{2206}: $\increment x$.
+
+Finally, given that $\triangle$ and $\increment$ are provided for you
+already, it is better off to only use upright Greek Delta $\Delta$ if you're
+actually using it as a symbolic entity such as a variable on its own.
+
+\begin{table}\centering
+\begin{tabular}{@{}llcl@{}}
+\toprule
+Slot & Command & Glyph & Class \\
+\midrule
+\unichar{25B5} & \cs{vartriangle} & \umfont \char"25B5 & binary \\
+\unichar{25B3} & \cs{bigtriangleup} & \umfont \char"25B3 & binary \\
+\unichar{25B3} & \cs{triangle} & \umfont \char"25B3 & ordinary \\
+\unichar{2206} & \cs{increment} & \umfont \char"2206 & ordinary \\
+\unichar{0394} & \cs{mathup}\cs{Delta} & \umfont \char"0394 & ordinary \\
+\bottomrule
+\end{tabular}
+\caption{Different upwards pointing triangles.}
+\tablabel{uptriangles}
+\end{table}
+
+\iffalse
+\subsubsection{Normalising some input characters}
+
+I believe
+all variant forms should be used as legal input that is normalised to
+a consistent output glyph, because we want to be fault-tolerant in the input.
+Here are the duplicates:
+\begin{quote}\obeylines
+\unichar {251} {latin small letter alpha}
+\unichar {25B} {latin small letter epsilon}
+\unichar {263} {latin small letter gamma}
+\unichar {269} {latin small letter iota}
+\unichar {278} {latin small letter phi}
+\unichar {28A} {latin small letter upsilon}
+\unichar {190} {latin capital letter epsilon}
+\unichar {194} {latin capital letter gamma}
+\unichar {196} {latin capital letter iota}
+\unichar {1B1} {latin capital letter upsilon}
+\end{quote}
+
+(Not yet implemented.)
+\fi
+
+\section{Advanced}
+
+\subsection{Warning messages}
+
+This package can produce a number of informational messages to try and inform the user when something might be going wrong due to package conflicts or something else.
+As an experimental feature, these can be turn off on an individual basis with the package option |warnings-off| which takes a comma-separated list of warnings to suppress.
+A warning will give you its name when printed on the console output; e.g.,
+\begin{Verbatim}
+ * unicode-math warning: "mathtools-colon"
+ *
+ * ... <warning message> ...
+\end{Verbatim}
+This warning could be suppressed by loading the package as follows:
+\begin{Verbatim}
+ \usepackage[warnings-off={mathtools-colon}]{unicode-math}
+\end{Verbatim}
+
+\subsection{How to overwrite a macro}
+
+\pkg{unicode-math} defines the macros by \cs{AtBeginDocument},
+namely delays the definition until |\begin{document}| is met.
+If you want to overwrite a macro defined by \pkg{unicode-math},
+please redefine it in \cs{AtBeginDocument} after loading this package.
+
+\subsection{Programmer's interface}
+
+(Tentative and under construction.)
+If you are writing some code that needs to know the current
+maths style (\cs{mathbf}, \cs{mathit}, etc.), you can query the
+variable \cs{l_@@_mathstyle_tl}. It will contain the maths style
+without the leading `math' string; for example,
+|\symbf { \show \l_@@_mathstyle_tl }|
+will produce `bf'.
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-doc-mathfontdimen.tex b/macros/latex/contrib/unicode-math/um-doc-mathfontdimen.tex
new file mode 100644
index 0000000000..906a786db3
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-doc-mathfontdimen.tex
@@ -0,0 +1,151 @@
+%%^^A%% um-doc-mathfontdimen.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\section{\Hologo{XeTeX} math font dimensions}
+
+These are the extended \cmd\fontdimen s available for suitable fonts
+in \XeTeX. Note that Lua\TeX\ takes an alternative route, and this package
+will eventually provide a wrapper interface to the two (I hope).
+
+\newcounter{mfdimen}
+\setcounter{mfdimen}{9}
+\newcommand\mathfontdimen[2]{^^A
+ \stepcounter{mfdimen}^^A
+ \themfdimen & {\scshape\small #1} & #2\vspace{0.5ex} \tabularnewline}
+
+\begin{longtable}{
+ @{}c>{\raggedright\parfillskip=0pt}p{4cm}>{\raggedright}p{7cm}@{}}
+\toprule \cmd\fontdimen & Dimension name & Description\tabularnewline\midrule \endhead
+\bottomrule\endfoot
+\mathfontdimen{Script\-Percent\-Scale\-Down}
+{Percentage of scaling down for script level 1. Suggested value: 80\%.}
+\mathfontdimen{Script\-Script\-Percent\-Scale\-Down}
+{Percentage of scaling down for script level 2 (Script\-Script). Suggested value: 60\%.}
+\mathfontdimen{Delimited\-Sub\-Formula\-Min\-Height}
+{Minimum height required for a delimited expression to be treated as a subformula. Suggested value: normal line height\,×\,1.5.}
+\mathfontdimen{Display\-Operator\-Min\-Height}
+{Minimum height of n-ary operators (such as integral and summation) for formulas in display mode.}
+\mathfontdimen{Math\-Leading}
+{White space to be left between math formulas to ensure proper line spacing. For example, for applications that treat line gap as a part of line ascender, formulas with ink going above (os2.sTypoAscender + os2.sTypoLineGap – MathLeading) or with ink going below os2.sTypoDescender will result in increasing line height.}
+\mathfontdimen{Axis\-Height}
+{Axis height of the font. }
+\mathfontdimen{Accent\-Base\-Height}
+{Maximum (ink) height of accent base that does not require raising the accents. Suggested: x-height of the font (os2.sxHeight) plus any possible overshots. }
+\mathfontdimen{Flattened\-Accent\-Base\-Height}
+{Maximum (ink) height of accent base that does not require flattening the accents. Suggested: cap height of the font (os2.sCapHeight).}
+\mathfontdimen{Subscript\-Shift\-Down}
+{The standard shift down applied to subscript elements. Positive for moving in the downward direction. Suggested: os2.ySubscriptYOffset.}
+\mathfontdimen{Subscript\-Top\-Max}
+{Maximum allowed height of the (ink) top of subscripts that does not require moving subscripts further down. Suggested: /5 x-height.}
+\mathfontdimen{Subscript\-Baseline\-Drop\-Min}
+{Minimum allowed drop of the baseline of subscripts relative to the (ink) bottom of the base. Checked for bases that are treated as a box or extended shape. Positive for subscript baseline dropped below the base bottom.}
+\mathfontdimen{Superscript\-Shift\-Up}
+{Standard shift up applied to superscript elements. Suggested: os2.ySuperscriptYOffset.}
+\mathfontdimen{Superscript\-Shift\-Up\-Cramped}
+{Standard shift of superscripts relative to the base, in cramped style.}
+\mathfontdimen{Superscript\-Bottom\-Min}
+{Minimum allowed height of the (ink) bottom of superscripts that does not require moving subscripts further up. Suggested: ¼ x-height.}
+\mathfontdimen{Superscript\-Baseline\-Drop\-Max}
+{Maximum allowed drop of the baseline of superscripts relative to the (ink) top of the base. Checked for bases that are treated as a box or extended shape. Positive for superscript baseline below the base top.}
+\mathfontdimen{Sub\-Superscript\-Gap\-Min}
+{Minimum gap between the superscript and subscript ink. Suggested: 4×default rule thickness.}
+\mathfontdimen{Superscript\-Bottom\-Max\-With\-Subscript}
+{The maximum level to which the (ink) bottom of superscript can be pushed to increase the gap between superscript and subscript, before subscript starts being moved down.
+Suggested: /5 x-height.}
+\mathfontdimen{Space\-After\-Script}
+{Extra white space to be added after each subscript and superscript. Suggested: 0.5pt for a 12 pt font.}
+\mathfontdimen{Upper\-Limit\-Gap\-Min}
+{Minimum gap between the (ink) bottom of the upper limit, and the (ink) top of the base operator. }
+\mathfontdimen{Upper\-Limit\-Baseline\-Rise\-Min}
+{Minimum distance between baseline of upper limit and (ink) top of the base operator.}
+\mathfontdimen{Lower\-Limit\-Gap\-Min}
+{Minimum gap between (ink) top of the lower limit, and (ink) bottom of the base operator.}
+\mathfontdimen{Lower\-Limit\-Baseline\-Drop\-Min}
+{Minimum distance between baseline of the lower limit and (ink) bottom of the base operator.}
+\mathfontdimen{Stack\-Top\-Shift\-Up}
+{Standard shift up applied to the top element of a stack.}
+\mathfontdimen{Stack\-Top\-Display\-Style\-Shift\-Up}
+{Standard shift up applied to the top element of a stack in display style.}
+\mathfontdimen{Stack\-Bottom\-Shift\-Down}
+{Standard shift down applied to the bottom element of a stack. Positive for moving in the downward direction.}
+\mathfontdimen{Stack\-Bottom\-Display\-Style\-Shift\-Down}
+{Standard shift down applied to the bottom element of a stack in display style. Positive for moving in the downward direction.}
+\mathfontdimen{Stack\-Gap\-Min}
+{Minimum gap between (ink) bottom of the top element of a stack, and the (ink) top of the bottom element. Suggested: 3×default rule thickness.}
+\mathfontdimen{Stack\-Display\-Style\-Gap\-Min}
+{Minimum gap between (ink) bottom of the top element of a stack, and the (ink) top of the bottom element in display style. Suggested: 7×default rule thickness.}
+\mathfontdimen{Stretch\-Stack\-Top\-Shift\-Up}
+{Standard shift up applied to the top element of the stretch stack.}
+\mathfontdimen{Stretch\-Stack\-Bottom\-Shift\-Down}
+{Standard shift down applied to the bottom element of the stretch stack. Positive for moving in the downward direction.}
+\mathfontdimen{Stretch\-Stack\-Gap\-Above\-Min}
+{Minimum gap between the ink of the stretched element, and the (ink) bottom of the element above. Suggested: Upper\-Limit\-Gap\-Min}
+\mathfontdimen{Stretch\-Stack\-Gap\-Below\-Min}
+{Minimum gap between the ink of the stretched element, and the (ink) top of the element below. Suggested: Lower\-Limit\-Gap\-Min.}
+\mathfontdimen{Fraction\-Numerator\-Shift\-Up}
+{Standard shift up applied to the numerator. }
+\mathfontdimen{Fraction\-Numerator\-Display\-Style\-Shift\-Up}
+{Standard shift up applied to the numerator in display style. Suggested: Stack\-Top\-Display\-Style\-Shift\-Up.}
+\mathfontdimen{Fraction\-Denominator\-Shift\-Down}
+{Standard shift down applied to the denominator. Positive for moving in the downward direction.}
+\mathfontdimen{Fraction\-Denominator\-Display\-Style\-Shift\-Down}
+{Standard shift down applied to the denominator in display style. Positive for moving in the downward direction. Suggested: Stack\-Bottom\-Display\-Style\-Shift\-Down.}
+\mathfontdimen{Fraction\-Numerator\-Gap\-Min}
+{Minimum tolerated gap between the (ink) bottom of the numerator and the ink of the fraction bar. Suggested: default rule thickness}
+\mathfontdimen{Fraction\-Num\-Display\-Style\-Gap\-Min}
+{Minimum tolerated gap between the (ink) bottom of the numerator and the ink of the fraction bar in display style. Suggested: 3×default rule thickness.}
+\mathfontdimen{Fraction\-Rule\-Thickness}
+{Thickness of the fraction bar. Suggested: default rule thickness.}
+\mathfontdimen{Fraction\-Denominator\-Gap\-Min}
+{Minimum tolerated gap between the (ink) top of the denominator and the ink of the fraction bar. Suggested: default rule thickness}
+\mathfontdimen{Fraction\-Denom\-Display\-Style\-Gap\-Min}
+{Minimum tolerated gap between the (ink) top of the denominator and the ink of the fraction bar in display style. Suggested: 3×default rule thickness.}
+\mathfontdimen{Skewed\-Fraction\-Horizontal\-Gap}
+{Horizontal distance between the top and bottom elements of a skewed fraction.}
+\mathfontdimen{Skewed\-Fraction\-Vertical\-Gap}
+{Vertical distance between the ink of the top and bottom elements of a skewed fraction.}
+\mathfontdimen{Overbar\-Vertical\-Gap}
+{Distance between the overbar and the (ink) top of he base. Suggested: 3×default rule thickness.}
+\mathfontdimen{Overbar\-Rule\-Thickness}
+{Thickness of overbar. Suggested: default rule thickness.}
+\mathfontdimen{Overbar\-Extra\-Ascender}
+{Extra white space reserved above the overbar. Suggested: default rule thickness.}
+\mathfontdimen{Underbar\-Vertical\-Gap}
+{Distance between underbar and (ink) bottom of the base. Suggested: 3×default rule thickness.}
+\mathfontdimen{Underbar\-Rule\-Thickness}
+{Thickness of underbar. Suggested: default rule thickness.}
+\mathfontdimen{Underbar\-Extra\-Descender}
+{Extra white space reserved below the underbar. Always positive. Suggested: default rule thickness.}
+\mathfontdimen{Radical\-Vertical\-Gap}
+{Space between the (ink) top of the expression and the bar over it. Suggested: 1¼ default rule thickness.}
+\mathfontdimen{Radical\-Display\-Style\-Vertical\-Gap}
+{Space between the (ink) top of the expression and the bar over it. Suggested: default rule thickness + ¼ x-height. }
+\mathfontdimen{Radical\-Rule\-Thickness}
+{Thickness of the radical rule. This is the thickness of the rule in designed or constructed radical signs. Suggested: default rule thickness.}
+\mathfontdimen{Radical\-Extra\-Ascender}
+{Extra white space reserved above the radical. Suggested: Radical\-Rule\-Thickness.}
+\mathfontdimen{Radical\-Kern\-Before\-Degree}
+{Extra horizontal kern before the degree of a radical, if such is present. Suggested: 5/18 of em.}
+\mathfontdimen{Radical\-Kern\-After\-Degree}
+{Negative kern after the degree of a radical, if such is present. Suggested: −10/18 of em.}
+\mathfontdimen{Radical\-Degree\-Bottom\-Raise\-Percent}
+{Height of the bottom of the radical degree, if such is present, in proportion to the ascender of the radical sign. Suggested: 60\%.}
+\end{longtable}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-doc-nfsssummary.tex b/macros/latex/contrib/unicode-math/um-doc-nfsssummary.tex
new file mode 100644
index 0000000000..a322ac7f42
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-doc-nfsssummary.tex
@@ -0,0 +1,87 @@
+%%^^A%% um-doc-nfsssummary.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\section{Documenting maths support in the NFSS}
+
+In the following, \meta{NFSS decl.} stands for something like |{T1}{lmr}{m}{n}|.
+
+\begin{description}
+\item[Maths symbol fonts]
+Fonts for symbols: $\propto$, $\leq$, $\rightarrow$
+
+\cmd\DeclareSymbolFont\marg{name}\meta{NFSS decl.}\\
+Declares a named maths font such as |operators| from which symbols are defined with \cmd\DeclareMathSymbol.
+
+\item[Maths alphabet fonts]
+Fonts for $\symit{ABC}$\,–\,$\symit{xyz}$,
+$\symfrak{ABC}$\,–\,$\symscr{XYZ}$, etc.
+
+\cmd\DeclareMathAlphabet\marg{cmd}\meta{NFSS decl.}
+
+For commands such as \cmd\mathbf, accessed
+through maths mode that are unaffected by the current text font, and which are used for
+alphabetic symbols in the \ascii\ range.
+
+\cmd\DeclareSymbolFontAlphabet\marg{cmd}\marg{name}
+
+Alternative (and optimisation) for \cmd\DeclareMathAlphabet\ if a single font is being used
+for both alphabetic characters (as above) and symbols.
+
+\item[Maths `versions'] Different maths weights can be defined with the following, switched
+in text with the \cmd\mathversion\marg{maths version} command.
+
+\cmd\SetSymbolFont\marg{name}\marg{maths version}\meta{NFSS decl.}\\
+\cmd\SetMathAlphabet\marg{cmd}\marg{maths version}\meta{NFSS decl.}
+
+\item[Maths symbols] Symbol definitions in maths for both characters (=) and macros (\cmd\eqdef):
+\cmd\DeclareMathSymbol\marg{symbol}\marg{type}\marg{named font}\marg{slot}
+This is the macro that actually defines which font each symbol comes from and how they behave.
+\end{description}
+Delimiters and radicals use wrappers around \TeX's \cmd\delimiter/\cmd\radical\ primitives,
+which are re-designed in \XeTeX. The syntax used in \LaTeX's NFSS is therefore not so relevant here.
+\begin{description}
+\item[Delimiters] A special class of maths symbol which enlarge themselves in certain contexts.
+
+\cmd\DeclareMathDelimiter\marg{symbol}\marg{type}\marg{sym.\ font}\marg{slot}\marg{sym.\ font}\marg{slot}
+
+\item[Radicals] Similar to delimiters (\cmd\DeclareMathRadical\ takes the same syntax) but
+behave `weirdly'.
+\end{description}
+In those cases, glyph slots in \emph{two} symbol fonts are required; one for the small (`regular') case,
+the other for situations when the glyph is larger. This is not the case in \XeTeX.
+
+Accents are not included yet.
+
+\paragraph{Summary}
+
+For symbols, something like:
+\begin{Verbatim}
+\def\DeclareMathSymbol#1#2#3#4{
+ \global\mathchardef#1"\mathchar@type#2
+ \expandafter\hexnumber@\csname sym#2\endcsname
+ {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}}
+\end{Verbatim}
+For characters, something like:
+\begin{Verbatim}
+\def\DeclareMathSymbol#1#2#3#4{
+ \global\mathcode`#1"\mathchar@type#2
+ \expandafter\hexnumber@\csname sym#2\endcsname
+ {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}}
+\end{Verbatim}
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-doc-stixextract.tex b/macros/latex/contrib/unicode-math/um-doc-stixextract.tex
new file mode 100644
index 0000000000..53a86a8ab7
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-doc-stixextract.tex
@@ -0,0 +1,38 @@
+%%^^A%% um-doc-stixextract.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\section{\STIX\ table data extraction}\label{part:awk}
+
+The source for the \TeX\ names for the very large number of mathematical
+glyphs are provided via Barbara Beeton's table file for the \STIX\ project
+(|ams.org/STIX|). A version is located at
+|http://www.ams.org/STIX/bnb/stix-tbl.asc|
+but check |http://www.ams.org/STIX/| for more up-to-date info.
+
+This table is converted into a form suitable for reading by \TeX.
+A single file is produced containing all (more than 3298) symbols.
+Future optimisations might include generating various (possibly overlapping) subsets
+so not all definitions must be read just to redefine a small range of symbols.
+Performance for now seems to be acceptable without such measures.
+
+This file is currently developed outside this DTX file. It will be
+incorporated when the final version is ready. (I know this is not how
+things are supposed to work!)
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/um-doc-style.tex b/macros/latex/contrib/unicode-math/um-doc-style.tex
new file mode 100644
index 0000000000..729a102ebe
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/um-doc-style.tex
@@ -0,0 +1,131 @@
+%%^^A%% um-doc-style.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\makeatletter
+\input{unicode-math.dtx}
+
+\CheckSum{0}
+\EnableCrossrefs
+\CodelineIndex
+\setcounter{IndexColumns}{2}
+
+\usepackage[svgnames]{xcolor}
+\usepackage[inline]{enumitem}
+\usepackage{amsmath,array,booktabs,calc,enumitem,fancyvrb,graphicx,ifthen,longtable,refstyle,topcapt,url,varioref,underscore}
+\usepackage[slash-delimiter=frac,nabla=literal]{unicode-math}
+\usepackage{metalogo,hologo}
+
+\usepackage[it]{titlesec}
+
+% fancyvrb
+\fvset{fontsize=\small,xleftmargin=2em}
+
+% longtable
+\setcounter{LTchunksize}{100}
+
+\setmainfont{texgyrepagella}%
+ [
+ Extension = .otf ,
+ UprightFont = *-regular ,
+ ItalicFont = *-italic ,
+ BoldFont = *-bold ,
+ BoldItalicFont = *-bolditalic ,
+ ]
+\setsansfont{Iwona}%
+ [
+ Scale=MatchLowercase,
+ Extension = .otf,
+ UprightFont = *-Regular,
+ ItalicFont = *-Italic,
+ BoldFont = *-Bold,
+ BoldItalicFont = *-BoldItalic,
+ ]
+\setmonofont{Inconsolatazi4-Regular.otf}%
+ [
+ Scale=MatchLowercase,
+ BoldFont=Inconsolatazi4-Bold.otf
+ ]
+
+\setmathfont{texgyrepagella-math.otf}
+\setmathfont[version=xits]{XITSMath-Regular.otf}
+\newfontface\umfont{XITSMath-Regular.otf}
+
+\expandafter\def\csname ver@thumbpdf.sty\endcsname{}
+\usepackage{hypdoc}
+\hypersetup{linktocpage}
+
+% work around some issue turning | into "j" inside mathsf in the definition of \Module:
+% (also prettify)
+\def\Module#1{{\footnotesize\color{red}$\langle$\texttt{#1}$\rangle$}}
+
+\linespread{1.1}
+\frenchspacing
+
+\definecolor{niceblue}{rgb}{0.2,0.4,0.8}
+
+\def\theCodelineNo{\textcolor{niceblue}{\sffamily\tiny\arabic{CodelineNo}}}
+
+\newcommand*\name[1]{{#1}}
+\newcommand*\pkg[1]{\textsf{#1}}
+\newcommand*\feat[1]{\texttt{#1}}
+\newcommand*\opt[1]{\texttt{#1}}
+
+\newcommand*\note[1]{\unskip\footnote{#1}}
+
+\let\latin\textit
+\def\eg{\latin{e.g.}}
+\def\Eg{\latin{E.g.}}
+\def\ie{\latin{i.e.}}
+\def\etc{\@ifnextchar.{\latin{etc}}{\latin{etc.}\@}}
+
+\def\STIX{\textsc{stix}}
+\def\MacOSX{Mac~OS~X}
+\def\ascii{\textsc{ascii}}
+\def\OMEGA{Omega}
+
+\newcounter{argument}
+
+\makeatletter
+\g@addto@macro\endmacro{\setcounter{argument}{0}}
+\makeatother
+
+\newcommand*\darg[1]{%
+ \stepcounter{argument}%
+ {\ttfamily\char`\#\theargument~:~}#1\par\noindent\ignorespaces
+}
+\newcommand*\doarg[1]{%
+ \stepcounter{argument}%
+ {\ttfamily\makebox[0pt][r]{[}\char`\#\theargument]:~}#1\par\noindent\ignorespaces
+}
+
+\newcommand\codeline[1]{\par{\centering#1\par\noindent}\ignorespaces}
+
+\newcommand\unichar[1]{\textsc{u}+\texttt{\small#1}}
+
+\setlength\parindent{2em}
+
+\def \MakePrivateLetters {%
+ \catcode`\@=11\relax
+ \catcode`\_=11\relax
+ \catcode`\:=11\relax
+}
+
+\makeatother
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/unicode-math-code.ltx b/macros/latex/contrib/unicode-math/unicode-math-code.ltx
new file mode 100644
index 0000000000..cff887daed
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unicode-math-code.ltx
@@ -0,0 +1,35 @@
+%%^^A%% unicode-math-code.ltx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Typeset code.
+
+\documentclass[a4paper]{ltxdoc}
+\input{um-doc-style.tex}
+\begin{document}
+\maketitle
+\tableofcontents
+
+\def\DTX#1{\clearpage\part{#1}\DocInput{#1}}
+\DTXFILES
+
+\clearpage
+\PrintIndex
+
+\end{document}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/unicode-math-code.pdf b/macros/latex/contrib/unicode-math/unicode-math-code.pdf
new file mode 100644
index 0000000000..bf0ca20ed5
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unicode-math-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/unicode-math/unicode-math-table.tex b/macros/latex/contrib/unicode-math/unicode-math-table.tex
new file mode 100644
index 0000000000..511b67e8ce
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unicode-math-table.tex
@@ -0,0 +1,2467 @@
+%%^^A%% unicode-math-table.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Source file of the math symbols.
+
+\UnicodeMathSymbol{"00021}{\mathexclam }{\mathclose}{exclamation mark}%
+\UnicodeMathSymbol{"00023}{\mathoctothorpe }{\mathord}{number sign}%
+\UnicodeMathSymbol{"00024}{\mathdollar }{\mathord}{dollar sign}%
+\UnicodeMathSymbol{"00025}{\mathpercent }{\mathord}{percent sign}%
+\UnicodeMathSymbol{"00026}{\mathampersand }{\mathord}{ampersand}%
+\UnicodeMathSymbol{"00028}{\lparen }{\mathopen}{left parenthesis}%
+\UnicodeMathSymbol{"00029}{\rparen }{\mathclose}{right parenthesis}%
+\UnicodeMathSymbol{"0002B}{\mathplus }{\mathbin}{plus sign b:}%
+\UnicodeMathSymbol{"0002C}{\mathcomma }{\mathpunct}{comma}%
+\UnicodeMathSymbol{"0002E}{\mathperiod }{\mathord}{full stop, period}%
+\UnicodeMathSymbol{"0002F}{\mathslash }{\mathord}{solidus}%
+\UnicodeMathSymbol{"0003A}{\mathcolon }{\mathpunct}{colon}%
+\UnicodeMathSymbol{"0003B}{\mathsemicolon }{\mathpunct}{semicolon p:}%
+\UnicodeMathSymbol{"0003C}{\less }{\mathrel}{less-than sign r:}%
+\UnicodeMathSymbol{"0003D}{\equal }{\mathrel}{equals sign r:}%
+\UnicodeMathSymbol{"0003E}{\greater }{\mathrel}{greater-than sign r:}%
+\UnicodeMathSymbol{"0003F}{\mathquestion }{\mathord}{question mark}%
+\UnicodeMathSymbol{"00040}{\mathatsign }{\mathord}{commercial at}%
+\UnicodeMathSymbol{"0005B}{\lbrack }{\mathopen}{left square bracket}%
+\UnicodeMathSymbol{"0005C}{\backslash }{\mathord}{reverse solidus}%
+\UnicodeMathSymbol{"0005D}{\rbrack }{\mathclose}{right square bracket}%
+\UnicodeMathSymbol{"0007B}{\lbrace }{\mathopen}{left curly bracket}%
+\UnicodeMathSymbol{"0007C}{\vert }{\mathfence}{vertical bar}%
+\UnicodeMathSymbol{"0007D}{\rbrace }{\mathclose}{right curly bracket}%
+\UnicodeMathSymbol{"000A3}{\mathsterling }{\mathord}{pound sign}%
+\UnicodeMathSymbol{"000A5}{\mathyen }{\mathord}{yen sign}%
+\UnicodeMathSymbol{"000A7}{\mathsection }{\mathord}{section symbol}%
+\UnicodeMathSymbol{"000AC}{\neg }{\mathord}{/neg /lnot not sign}%
+\UnicodeMathSymbol{"000B1}{\pm }{\mathbin}{plus-or-minus sign}%
+\UnicodeMathSymbol{"000B6}{\mathparagraph }{\mathord}{paragraph symbol}%
+\UnicodeMathSymbol{"000B7}{\cdotp }{\mathbin}{/centerdot b: middle dot}%
+\UnicodeMathSymbol{"000D7}{\times }{\mathbin}{multiply sign}%
+\UnicodeMathSymbol{"000F0}{\matheth }{\mathalpha}{eth}%
+\UnicodeMathSymbol{"000F7}{\div }{\mathbin}{divide sign}%
+\UnicodeMathSymbol{"001B5}{\Zbar }{\mathord}{impedance (latin capital letter z with stroke)}%
+\UnicodeMathSymbol{"00300}{\grave }{\mathaccent}{grave accent}%
+\UnicodeMathSymbol{"00301}{\acute }{\mathaccent}{acute accent}%
+\UnicodeMathSymbol{"00302}{\hat }{\mathaccent}{circumflex accent}%
+\UnicodeMathSymbol{"00302}{\widehat }{\mathaccentwide}{circumflex accent}%
+\UnicodeMathSymbol{"00303}{\tilde }{\mathaccent}{tilde}%
+\UnicodeMathSymbol{"00303}{\widetilde }{\mathaccentwide}{tilde}%
+\UnicodeMathSymbol{"00304}{\bar }{\mathaccent}{macron}%
+\UnicodeMathSymbol{"00305}{\overbar }{\mathaccent}{overbar embellishment}%
+\UnicodeMathSymbol{"00305}{\wideoverbar }{\mathaccentwide}{stretchy overbar embellishment}%
+\UnicodeMathSymbol{"00306}{\breve }{\mathaccent}{breve}%
+\UnicodeMathSymbol{"00306}{\widebreve }{\mathaccentwide}{stretchy breve}%
+\UnicodeMathSymbol{"00307}{\dot }{\mathaccent}{dot above}%
+\UnicodeMathSymbol{"00308}{\ddot }{\mathaccent}{dieresis}%
+\UnicodeMathSymbol{"00309}{\ovhook }{\mathaccent}{combining hook above}%
+\UnicodeMathSymbol{"0030A}{\ocirc }{\mathaccent}{ring}%
+\UnicodeMathSymbol{"0030C}{\check }{\mathaccent}{caron}%
+\UnicodeMathSymbol{"0030C}{\widecheck }{\mathaccentwide}{stretchy caron}%
+\UnicodeMathSymbol{"00310}{\candra }{\mathaccent}{candrabindu (non-spacing)}%
+\UnicodeMathSymbol{"00312}{\oturnedcomma }{\mathaccent}{combining turned comma above}%
+\UnicodeMathSymbol{"00315}{\ocommatopright }{\mathaccent}{combining comma above right}%
+\UnicodeMathSymbol{"0031A}{\droang }{\mathaccent}{left angle above (non-spacing)}%
+\UnicodeMathSymbol{"00330}{\wideutilde }{\mathbotaccentwide}{under tilde accent (multiple characters and non-spacing)}%
+\UnicodeMathSymbol{"00332}{\mathunderbar }{\mathbotaccentwide}{combining low line}%
+\UnicodeMathSymbol{"00338}{\notaccent }{\mathaccentoverlay}{combining long solidus overlay}%
+\UnicodeMathSymbol{"0034D}{\underleftrightarrow }{\mathbotaccentwide}{underleftrightarrow accent}%
+\UnicodeMathSymbol{"00391}{\mupAlpha }{\mathalpha}{capital alpha, greek}%
+\UnicodeMathSymbol{"00392}{\mupBeta }{\mathalpha}{capital beta, greek}%
+\UnicodeMathSymbol{"00393}{\mupGamma }{\mathalpha}{capital gamma, greek}%
+\UnicodeMathSymbol{"00394}{\mupDelta }{\mathalpha}{capital delta, greek}%
+\UnicodeMathSymbol{"00395}{\mupEpsilon }{\mathalpha}{capital epsilon, greek}%
+\UnicodeMathSymbol{"00396}{\mupZeta }{\mathalpha}{capital zeta, greek}%
+\UnicodeMathSymbol{"00397}{\mupEta }{\mathalpha}{capital eta, greek}%
+\UnicodeMathSymbol{"00398}{\mupTheta }{\mathalpha}{capital theta, greek}%
+\UnicodeMathSymbol{"00399}{\mupIota }{\mathalpha}{capital iota, greek}%
+\UnicodeMathSymbol{"0039A}{\mupKappa }{\mathalpha}{capital kappa, greek}%
+\UnicodeMathSymbol{"0039B}{\mupLambda }{\mathalpha}{capital lambda, greek}%
+\UnicodeMathSymbol{"0039C}{\mupMu }{\mathalpha}{capital mu, greek}%
+\UnicodeMathSymbol{"0039D}{\mupNu }{\mathalpha}{capital nu, greek}%
+\UnicodeMathSymbol{"0039E}{\mupXi }{\mathalpha}{capital xi, greek}%
+\UnicodeMathSymbol{"0039F}{\mupOmicron }{\mathalpha}{capital omicron, greek}%
+\UnicodeMathSymbol{"003A0}{\mupPi }{\mathalpha}{capital pi, greek}%
+\UnicodeMathSymbol{"003A1}{\mupRho }{\mathalpha}{capital rho, greek}%
+\UnicodeMathSymbol{"003A3}{\mupSigma }{\mathalpha}{capital sigma, greek}%
+\UnicodeMathSymbol{"003A4}{\mupTau }{\mathalpha}{capital tau, greek}%
+\UnicodeMathSymbol{"003A5}{\mupUpsilon }{\mathalpha}{capital upsilon, greek}%
+\UnicodeMathSymbol{"003A6}{\mupPhi }{\mathalpha}{capital phi, greek}%
+\UnicodeMathSymbol{"003A7}{\mupChi }{\mathalpha}{capital chi, greek}%
+\UnicodeMathSymbol{"003A8}{\mupPsi }{\mathalpha}{capital psi, greek}%
+\UnicodeMathSymbol{"003A9}{\mupOmega }{\mathalpha}{capital omega, greek}%
+\UnicodeMathSymbol{"003B1}{\mupalpha }{\mathalpha}{small alpha, greek}%
+\UnicodeMathSymbol{"003B2}{\mupbeta }{\mathalpha}{small beta, greek}%
+\UnicodeMathSymbol{"003B3}{\mupgamma }{\mathalpha}{small gamma, greek}%
+\UnicodeMathSymbol{"003B4}{\mupdelta }{\mathalpha}{small delta, greek}%
+\UnicodeMathSymbol{"003B5}{\mupvarepsilon }{\mathalpha}{rounded small varepsilon, greek}%
+\UnicodeMathSymbol{"003B6}{\mupzeta }{\mathalpha}{small zeta, greek}%
+\UnicodeMathSymbol{"003B7}{\mupeta }{\mathalpha}{small eta, greek}%
+\UnicodeMathSymbol{"003B8}{\muptheta }{\mathalpha}{straight theta, small theta, greek}%
+\UnicodeMathSymbol{"003B9}{\mupiota }{\mathalpha}{small iota, greek}%
+\UnicodeMathSymbol{"003BA}{\mupkappa }{\mathalpha}{small kappa, greek}%
+\UnicodeMathSymbol{"003BB}{\muplambda }{\mathalpha}{small lambda, greek}%
+\UnicodeMathSymbol{"003BC}{\mupmu }{\mathalpha}{small mu, greek}%
+\UnicodeMathSymbol{"003BD}{\mupnu }{\mathalpha}{small nu, greek}%
+\UnicodeMathSymbol{"003BE}{\mupxi }{\mathalpha}{small xi, greek}%
+\UnicodeMathSymbol{"003BF}{\mupomicron }{\mathalpha}{small omicron, greek}%
+\UnicodeMathSymbol{"003C0}{\muppi }{\mathalpha}{small pi, greek}%
+\UnicodeMathSymbol{"003C1}{\muprho }{\mathalpha}{small rho, greek}%
+\UnicodeMathSymbol{"003C2}{\mupvarsigma }{\mathalpha}{terminal sigma, greek}%
+\UnicodeMathSymbol{"003C3}{\mupsigma }{\mathalpha}{small sigma, greek}%
+\UnicodeMathSymbol{"003C4}{\muptau }{\mathalpha}{small tau, greek}%
+\UnicodeMathSymbol{"003C5}{\mupupsilon }{\mathalpha}{small upsilon, greek}%
+\UnicodeMathSymbol{"003C6}{\mupvarphi }{\mathalpha}{curly or open small phi, greek}%
+\UnicodeMathSymbol{"003C7}{\mupchi }{\mathalpha}{small chi, greek}%
+\UnicodeMathSymbol{"003C8}{\muppsi }{\mathalpha}{small psi, greek}%
+\UnicodeMathSymbol{"003C9}{\mupomega }{\mathalpha}{small omega, greek}%
+\UnicodeMathSymbol{"003D1}{\mupvartheta }{\mathalpha}{/vartheta - curly or open theta}%
+\UnicodeMathSymbol{"003D5}{\mupphi }{\mathalpha}{/straightphi - small phi, greek}%
+\UnicodeMathSymbol{"003D6}{\mupvarpi }{\mathalpha}{rounded small pi (pomega), greek}%
+\UnicodeMathSymbol{"003DC}{\upDigamma }{\mathalpha}{capital digamma}%
+\UnicodeMathSymbol{"003DD}{\updigamma }{\mathalpha}{old greek small letter digamma}%
+\UnicodeMathSymbol{"003F0}{\mupvarkappa }{\mathalpha}{rounded small kappa, greek}%
+\UnicodeMathSymbol{"003F1}{\mupvarrho }{\mathalpha}{rounded small rho, greek}%
+\UnicodeMathSymbol{"003F4}{\mupvarTheta }{\mathalpha}{greek capital theta symbol}%
+\UnicodeMathSymbol{"003F5}{\mupepsilon }{\mathalpha}{greek lunate varepsilon symbol}%
+\UnicodeMathSymbol{"003F6}{\upbackepsilon }{\mathord}{greek reversed lunate epsilon symbol}%
+\UnicodeMathSymbol{"02010}{\mathhyphen }{\mathalpha}{hyphen}%
+\UnicodeMathSymbol{"02015}{\horizbar }{\mathord}{horizontal bar}%
+\UnicodeMathSymbol{"02016}{\Vert }{\mathfence}{double vertical bar}%
+\UnicodeMathSymbol{"02017}{\twolowline }{\mathord}{double low line (spacing)}%
+\UnicodeMathSymbol{"02020}{\dagger }{\mathbin}{dagger relation}%
+\UnicodeMathSymbol{"02021}{\ddagger }{\mathbin}{double dagger relation}%
+\UnicodeMathSymbol{"02022}{\smblkcircle }{\mathbin}{/bullet b: round bullet, filled}%
+\UnicodeMathSymbol{"02025}{\enleadertwodots }{\mathord}{double baseline dot (en leader)}%
+\UnicodeMathSymbol{"02026}{\unicodeellipsis }{\mathord}{ellipsis (horizontal)}%
+\UnicodeMathSymbol{"02032}{\prime }{\mathord}{prime or minute, not superscripted}%
+\UnicodeMathSymbol{"02033}{\dprime }{\mathord}{double prime or second, not superscripted}%
+\UnicodeMathSymbol{"02034}{\trprime }{\mathord}{triple prime (not superscripted)}%
+\UnicodeMathSymbol{"02035}{\backprime }{\mathord}{reverse prime, not superscripted}%
+\UnicodeMathSymbol{"02036}{\backdprime }{\mathord}{double reverse prime, not superscripted}%
+\UnicodeMathSymbol{"02037}{\backtrprime }{\mathord}{triple reverse prime, not superscripted}%
+\UnicodeMathSymbol{"02038}{\caretinsert }{\mathord}{caret (insertion mark)}%
+\UnicodeMathSymbol{"0203C}{\Exclam }{\mathord}{double exclamation mark}%
+\UnicodeMathSymbol{"02040}{\tieconcat }{\mathbin}{character tie, z notation sequence concatenation}%
+\UnicodeMathSymbol{"02043}{\hyphenbullet }{\mathord}{rectangle, filled (hyphen bullet)}%
+\UnicodeMathSymbol{"02044}{\fracslash }{\mathbin}{fraction slash}%
+\UnicodeMathSymbol{"02047}{\Question }{\mathord}{double question mark}%
+\UnicodeMathSymbol{"02050}{\closure }{\mathrel}{close up}%
+\UnicodeMathSymbol{"02057}{\qprime }{\mathord}{quadruple prime, not superscripted}%
+\UnicodeMathSymbol{"020AC}{\euro }{\mathord}{euro sign}%
+\UnicodeMathSymbol{"020D0}{\leftharpoonaccent }{\mathaccent}{combining left harpoon above}%
+\UnicodeMathSymbol{"020D0}{\overleftharpoon }{\mathaccentwide}{combining left harpoon above}%
+\UnicodeMathSymbol{"020D1}{\rightharpoonaccent }{\mathaccent}{combining right harpoon above}%
+\UnicodeMathSymbol{"020D1}{\overrightharpoon }{\mathaccentwide}{combining right harpoon above}%
+\UnicodeMathSymbol{"020D2}{\vertoverlay }{\mathaccent}{combining long vertical line overlay}%
+\UnicodeMathSymbol{"020D6}{\overleftarrow }{\mathaccentwide}{combining left arrow above}%
+\UnicodeMathSymbol{"020D7}{\overrightarrow }{\mathaccentwide}{combining left arrow above}%
+\UnicodeMathSymbol{"020D7}{\vec }{\mathaccent}{combining right arrow above}%
+\UnicodeMathSymbol{"020DB}{\dddot }{\mathaccent}{combining three dots above}%
+\UnicodeMathSymbol{"020DC}{\ddddot }{\mathaccent}{combining four dots above}%
+\UnicodeMathSymbol{"020DD}{\enclosecircle }{\mathord}{combining enclosing circle}%
+\UnicodeMathSymbol{"020DE}{\enclosesquare }{\mathord}{combining enclosing square}%
+\UnicodeMathSymbol{"020DF}{\enclosediamond }{\mathord}{combining enclosing diamond}%
+\UnicodeMathSymbol{"020E1}{\overleftrightarrow }{\mathaccentwide}{combining left right arrow above}%
+\UnicodeMathSymbol{"020E4}{\enclosetriangle }{\mathord}{combining enclosing upward pointing triangle}%
+\UnicodeMathSymbol{"020E7}{\annuity }{\mathaccent}{combining annuity symbol}%
+\UnicodeMathSymbol{"020E8}{\threeunderdot }{\mathbotaccent}{combining triple underdot}%
+\UnicodeMathSymbol{"020E9}{\widebridgeabove }{\mathaccent}{combining wide bridge above}%
+\UnicodeMathSymbol{"020EC}{\underrightharpoondown }{\mathbotaccentwide}{combining rightwards harpoon with barb downwards}%
+\UnicodeMathSymbol{"020ED}{\underleftharpoondown }{\mathbotaccentwide}{combining leftwards harpoon with barb downwards}%
+\UnicodeMathSymbol{"020EE}{\underleftarrow }{\mathbotaccentwide}{combining left arrow below}%
+\UnicodeMathSymbol{"020EF}{\underrightarrow }{\mathbotaccentwide}{combining right arrow below}%
+\UnicodeMathSymbol{"020F0}{\asteraccent }{\mathaccent}{combining asterisk above}%
+\UnicodeMathSymbol{"02102}{\BbbC }{\mathalpha}{/bbb c, open face c}%
+\UnicodeMathSymbol{"02107}{\Eulerconst }{\mathord}{euler constant}%
+\UnicodeMathSymbol{"0210A}{\mscrg }{\mathalpha}{/scr g, script letter g}%
+\UnicodeMathSymbol{"0210B}{\mscrH }{\mathalpha}{hamiltonian (script capital h)}%
+\UnicodeMathSymbol{"0210C}{\mfrakH }{\mathalpha}{/frak h, upper case h}%
+\UnicodeMathSymbol{"0210D}{\BbbH }{\mathalpha}{/bbb h, open face h}%
+\UnicodeMathSymbol{"0210E}{\Planckconst }{\mathord}{planck constant}%
+\UnicodeMathSymbol{"0210F}{\hslash }{\mathalpha}{/hslash - variant planck's over 2pi}%
+\UnicodeMathSymbol{"02110}{\mscrI }{\mathalpha}{/scr i, script letter i}%
+\UnicodeMathSymbol{"02111}{\Im }{\mathalpha}{imaginary part}%
+\UnicodeMathSymbol{"02112}{\mscrL }{\mathalpha}{lagrangian (script capital l)}%
+\UnicodeMathSymbol{"02113}{\ell }{\mathalpha}{cursive small l}%
+\UnicodeMathSymbol{"02115}{\BbbN }{\mathalpha}{/bbb n, open face n}%
+\UnicodeMathSymbol{"02118}{\wp }{\mathalpha}{weierstrass p}%
+\UnicodeMathSymbol{"02119}{\BbbP }{\mathalpha}{/bbb p, open face p}%
+\UnicodeMathSymbol{"0211A}{\BbbQ }{\mathalpha}{/bbb q, open face q}%
+\UnicodeMathSymbol{"0211B}{\mscrR }{\mathalpha}{/scr r, script letter r}%
+\UnicodeMathSymbol{"0211C}{\Re }{\mathalpha}{real part}%
+\UnicodeMathSymbol{"0211D}{\BbbR }{\mathalpha}{/bbb r, open face r}%
+\UnicodeMathSymbol{"02124}{\BbbZ }{\mathalpha}{/bbb z, open face z}%
+\UnicodeMathSymbol{"02127}{\mho }{\mathord}{conductance}%
+\UnicodeMathSymbol{"02128}{\mfrakZ }{\mathalpha}{/frak z, upper case z}%
+\UnicodeMathSymbol{"02129}{\turnediota }{\mathalpha}{turned iota}%
+\UnicodeMathSymbol{"0212B}{\Angstrom }{\mathalpha}{angstrom capital a, ring}%
+\UnicodeMathSymbol{"0212C}{\mscrB }{\mathalpha}{bernoulli function (script capital b)}%
+\UnicodeMathSymbol{"0212D}{\mfrakC }{\mathalpha}{black-letter capital c}%
+\UnicodeMathSymbol{"0212F}{\mscre }{\mathalpha}{/scr e, script letter e}%
+\UnicodeMathSymbol{"02130}{\mscrE }{\mathalpha}{/scr e, script letter e}%
+\UnicodeMathSymbol{"02131}{\mscrF }{\mathalpha}{/scr f, script letter f}%
+\UnicodeMathSymbol{"02132}{\Finv }{\mathord}{turned capital f}%
+\UnicodeMathSymbol{"02133}{\mscrM }{\mathalpha}{physics m-matrix (script capital m)}%
+\UnicodeMathSymbol{"02134}{\mscro }{\mathalpha}{order of (script small o)}%
+\UnicodeMathSymbol{"02135}{\aleph }{\mathalpha}{aleph, hebrew}%
+\UnicodeMathSymbol{"02136}{\beth }{\mathalpha}{beth, hebrew}%
+\UnicodeMathSymbol{"02137}{\gimel }{\mathalpha}{gimel, hebrew}%
+\UnicodeMathSymbol{"02138}{\daleth }{\mathalpha}{daleth, hebrew}%
+\UnicodeMathSymbol{"0213C}{\Bbbpi }{\mathord}{double-struck small pi}%
+\UnicodeMathSymbol{"0213D}{\Bbbgamma }{\mathalpha}{double-struck small gamma}%
+\UnicodeMathSymbol{"0213E}{\BbbGamma }{\mathalpha}{double-struck capital gamma}%
+\UnicodeMathSymbol{"0213F}{\BbbPi }{\mathalpha}{double-struck capital pi}%
+\UnicodeMathSymbol{"02140}{\Bbbsum }{\mathop}{double-struck n-ary summation}%
+\UnicodeMathSymbol{"02141}{\Game }{\mathord}{turned sans-serif capital g}%
+\UnicodeMathSymbol{"02142}{\sansLturned }{\mathord}{turned sans-serif capital l}%
+\UnicodeMathSymbol{"02143}{\sansLmirrored }{\mathord}{reversed sans-serif capital l}%
+\UnicodeMathSymbol{"02144}{\Yup }{\mathord}{turned sans-serif capital y}%
+\UnicodeMathSymbol{"02145}{\mitBbbD }{\mathord}{double-struck italic capital d}%
+\UnicodeMathSymbol{"02146}{\mitBbbd }{\mathord}{double-struck italic small d}%
+\UnicodeMathSymbol{"02147}{\mitBbbe }{\mathord}{double-struck italic small e}%
+\UnicodeMathSymbol{"02148}{\mitBbbi }{\mathord}{double-struck italic small i}%
+\UnicodeMathSymbol{"02149}{\mitBbbj }{\mathord}{double-struck italic small j}%
+\UnicodeMathSymbol{"0214A}{\PropertyLine }{\mathord}{property line}%
+\UnicodeMathSymbol{"0214B}{\upand }{\mathbin}{turned ampersand}%
+\UnicodeMathSymbol{"02190}{\leftarrow }{\mathrel}{/leftarrow /gets a: leftward arrow}%
+\UnicodeMathSymbol{"02191}{\uparrow }{\mathrel}{upward arrow}%
+\UnicodeMathSymbol{"02192}{\rightarrow }{\mathrel}{/rightarrow /to a: rightward arrow}%
+\UnicodeMathSymbol{"02193}{\downarrow }{\mathrel}{downward arrow}%
+\UnicodeMathSymbol{"02194}{\leftrightarrow }{\mathrel}{left and right arrow}%
+\UnicodeMathSymbol{"02195}{\updownarrow }{\mathrel}{up and down arrow}%
+\UnicodeMathSymbol{"02196}{\nwarrow }{\mathrel}{nw pointing arrow}%
+\UnicodeMathSymbol{"02197}{\nearrow }{\mathrel}{ne pointing arrow}%
+\UnicodeMathSymbol{"02198}{\searrow }{\mathrel}{se pointing arrow}%
+\UnicodeMathSymbol{"02199}{\swarrow }{\mathrel}{sw pointing arrow}%
+\UnicodeMathSymbol{"0219A}{\nleftarrow }{\mathrel}{not left arrow}%
+\UnicodeMathSymbol{"0219B}{\nrightarrow }{\mathrel}{not right arrow}%
+\UnicodeMathSymbol{"0219C}{\leftwavearrow }{\mathrel}{left arrow-wavy}%
+\UnicodeMathSymbol{"0219D}{\rightwavearrow }{\mathrel}{right arrow-wavy}%
+\UnicodeMathSymbol{"0219E}{\twoheadleftarrow }{\mathrel}{left two-headed arrow}%
+\UnicodeMathSymbol{"0219F}{\twoheaduparrow }{\mathrel}{up two-headed arrow}%
+\UnicodeMathSymbol{"021A0}{\twoheadrightarrow }{\mathrel}{right two-headed arrow}%
+\UnicodeMathSymbol{"021A1}{\twoheaddownarrow }{\mathrel}{down two-headed arrow}%
+\UnicodeMathSymbol{"021A2}{\leftarrowtail }{\mathrel}{left arrow-tailed}%
+\UnicodeMathSymbol{"021A3}{\rightarrowtail }{\mathrel}{right arrow-tailed}%
+\UnicodeMathSymbol{"021A4}{\mapsfrom }{\mathrel}{maps to, leftward}%
+\UnicodeMathSymbol{"021A5}{\mapsup }{\mathrel}{maps to, upward}%
+\UnicodeMathSymbol{"021A6}{\mapsto }{\mathrel}{maps to, rightward}%
+\UnicodeMathSymbol{"021A7}{\mapsdown }{\mathrel}{maps to, downward}%
+\UnicodeMathSymbol{"021A8}{\updownarrowbar }{\mathord}{up down arrow with base (perpendicular)}%
+\UnicodeMathSymbol{"021A9}{\hookleftarrow }{\mathrel}{left arrow-hooked}%
+\UnicodeMathSymbol{"021AA}{\hookrightarrow }{\mathrel}{right arrow-hooked}%
+\UnicodeMathSymbol{"021AB}{\looparrowleft }{\mathrel}{left arrow-looped}%
+\UnicodeMathSymbol{"021AC}{\looparrowright }{\mathrel}{right arrow-looped}%
+\UnicodeMathSymbol{"021AD}{\leftrightsquigarrow }{\mathrel}{left and right arr-wavy}%
+\UnicodeMathSymbol{"021AE}{\nleftrightarrow }{\mathrel}{not left and right arrow}%
+\UnicodeMathSymbol{"021AF}{\downzigzagarrow }{\mathrel}{downwards zigzag arrow}%
+\UnicodeMathSymbol{"021B0}{\Lsh }{\mathrel}{/lsh a:}%
+\UnicodeMathSymbol{"021B1}{\Rsh }{\mathrel}{/rsh a:}%
+\UnicodeMathSymbol{"021B2}{\Ldsh }{\mathrel}{left down angled arrow}%
+\UnicodeMathSymbol{"021B3}{\Rdsh }{\mathrel}{right down angled arrow}%
+\UnicodeMathSymbol{"021B4}{\linefeed }{\mathord}{rightwards arrow with corner downwards}%
+\UnicodeMathSymbol{"021B5}{\carriagereturn }{\mathord}{downwards arrow with corner leftward = carriage return}%
+\UnicodeMathSymbol{"021B6}{\curvearrowleft }{\mathrel}{left curved arrow}%
+\UnicodeMathSymbol{"021B7}{\curvearrowright }{\mathrel}{right curved arrow}%
+\UnicodeMathSymbol{"021B8}{\barovernorthwestarrow }{\mathord}{north west arrow to long bar}%
+\UnicodeMathSymbol{"021B9}{\barleftarrowrightarrowbar}{\mathord}{leftwards arrow to bar over rightwards arrow to bar}%
+\UnicodeMathSymbol{"021BA}{\acwopencirclearrow }{\mathord}{anticlockwise open circle arrow}%
+\UnicodeMathSymbol{"021BB}{\cwopencirclearrow }{\mathord}{clockwise open circle arrow}%
+\UnicodeMathSymbol{"021BC}{\leftharpoonup }{\mathrel}{left harpoon-up}%
+\UnicodeMathSymbol{"021BD}{\leftharpoondown }{\mathrel}{left harpoon-down}%
+\UnicodeMathSymbol{"021BE}{\upharpoonright }{\mathrel}{/upharpoonright /restriction a: up harpoon-right}%
+\UnicodeMathSymbol{"021BF}{\upharpoonleft }{\mathrel}{up harpoon-left}%
+\UnicodeMathSymbol{"021C0}{\rightharpoonup }{\mathrel}{right harpoon-up}%
+\UnicodeMathSymbol{"021C1}{\rightharpoondown }{\mathrel}{right harpoon-down}%
+\UnicodeMathSymbol{"021C2}{\downharpoonright }{\mathrel}{down harpoon-right}%
+\UnicodeMathSymbol{"021C3}{\downharpoonleft }{\mathrel}{down harpoon-left}%
+\UnicodeMathSymbol{"021C4}{\rightleftarrows }{\mathrel}{right arrow over left arrow}%
+\UnicodeMathSymbol{"021C5}{\updownarrows }{\mathrel}{up arrow, down arrow}%
+\UnicodeMathSymbol{"021C6}{\leftrightarrows }{\mathrel}{left arrow over right arrow}%
+\UnicodeMathSymbol{"021C7}{\leftleftarrows }{\mathrel}{two left arrows}%
+\UnicodeMathSymbol{"021C8}{\upuparrows }{\mathrel}{two up arrows}%
+\UnicodeMathSymbol{"021C9}{\rightrightarrows }{\mathrel}{two right arrows}%
+\UnicodeMathSymbol{"021CA}{\downdownarrows }{\mathrel}{two down arrows}%
+\UnicodeMathSymbol{"021CB}{\leftrightharpoons }{\mathrel}{left harpoon over right}%
+\UnicodeMathSymbol{"021CC}{\rightleftharpoons }{\mathrel}{right harpoon over left}%
+\UnicodeMathSymbol{"021CD}{\nLeftarrow }{\mathrel}{not implied by}%
+\UnicodeMathSymbol{"021CE}{\nLeftrightarrow }{\mathrel}{not left and right double arrows}%
+\UnicodeMathSymbol{"021CF}{\nRightarrow }{\mathrel}{not implies}%
+\UnicodeMathSymbol{"021D0}{\Leftarrow }{\mathrel}{is implied by}%
+\UnicodeMathSymbol{"021D1}{\Uparrow }{\mathrel}{up double arrow}%
+\UnicodeMathSymbol{"021D2}{\Rightarrow }{\mathrel}{implies}%
+\UnicodeMathSymbol{"021D3}{\Downarrow }{\mathrel}{down double arrow}%
+\UnicodeMathSymbol{"021D4}{\Leftrightarrow }{\mathrel}{left and right double arrow}%
+\UnicodeMathSymbol{"021D5}{\Updownarrow }{\mathrel}{up and down double arrow}%
+\UnicodeMathSymbol{"021D6}{\Nwarrow }{\mathrel}{nw pointing double arrow}%
+\UnicodeMathSymbol{"021D7}{\Nearrow }{\mathrel}{ne pointing double arrow}%
+\UnicodeMathSymbol{"021D8}{\Searrow }{\mathrel}{se pointing double arrow}%
+\UnicodeMathSymbol{"021D9}{\Swarrow }{\mathrel}{sw pointing double arrow}%
+\UnicodeMathSymbol{"021DA}{\Lleftarrow }{\mathrel}{left triple arrow}%
+\UnicodeMathSymbol{"021DB}{\Rrightarrow }{\mathrel}{right triple arrow}%
+\UnicodeMathSymbol{"021DC}{\leftsquigarrow }{\mathrel}{leftwards squiggle arrow}%
+\UnicodeMathSymbol{"021DD}{\rightsquigarrow }{\mathrel}{rightwards squiggle arrow}%
+\UnicodeMathSymbol{"021DE}{\nHuparrow }{\mathord}{upwards arrow with double stroke}%
+\UnicodeMathSymbol{"021DF}{\nHdownarrow }{\mathord}{downwards arrow with double stroke}%
+\UnicodeMathSymbol{"021E0}{\leftdasharrow }{\mathord}{leftwards dashed arrow}%
+\UnicodeMathSymbol{"021E1}{\updasharrow }{\mathord}{upwards dashed arrow}%
+\UnicodeMathSymbol{"021E2}{\rightdasharrow }{\mathord}{rightwards dashed arrow}%
+\UnicodeMathSymbol{"021E3}{\downdasharrow }{\mathord}{downwards dashed arrow}%
+\UnicodeMathSymbol{"021E4}{\barleftarrow }{\mathrel}{leftwards arrow to bar}%
+\UnicodeMathSymbol{"021E5}{\rightarrowbar }{\mathrel}{rightwards arrow to bar}%
+\UnicodeMathSymbol{"021E6}{\leftwhitearrow }{\mathord}{leftwards white arrow}%
+\UnicodeMathSymbol{"021E7}{\upwhitearrow }{\mathord}{upwards white arrow}%
+\UnicodeMathSymbol{"021E8}{\rightwhitearrow }{\mathord}{rightwards white arrow}%
+\UnicodeMathSymbol{"021E9}{\downwhitearrow }{\mathord}{downwards white arrow}%
+\UnicodeMathSymbol{"021EA}{\whitearrowupfrombar }{\mathord}{upwards white arrow from bar}%
+\UnicodeMathSymbol{"021F4}{\circleonrightarrow }{\mathrel}{right arrow with small circle}%
+\UnicodeMathSymbol{"021F5}{\downuparrows }{\mathrel}{downwards arrow leftwards of upwards arrow}%
+\UnicodeMathSymbol{"021F6}{\rightthreearrows }{\mathrel}{three rightwards arrows}%
+\UnicodeMathSymbol{"021F7}{\nvleftarrow }{\mathrel}{leftwards arrow with vertical stroke}%
+\UnicodeMathSymbol{"021F8}{\nvrightarrow }{\mathrel}{rightwards arrow with vertical stroke}%
+\UnicodeMathSymbol{"021F9}{\nvleftrightarrow }{\mathrel}{left right arrow with vertical stroke}%
+\UnicodeMathSymbol{"021FA}{\nVleftarrow }{\mathrel}{leftwards arrow with double vertical stroke}%
+\UnicodeMathSymbol{"021FB}{\nVrightarrow }{\mathrel}{rightwards arrow with double vertical stroke}%
+\UnicodeMathSymbol{"021FC}{\nVleftrightarrow }{\mathrel}{left right arrow with double vertical stroke}%
+\UnicodeMathSymbol{"021FD}{\leftarrowtriangle }{\mathrel}{leftwards open-headed arrow}%
+\UnicodeMathSymbol{"021FE}{\rightarrowtriangle }{\mathrel}{rightwards open-headed arrow}%
+\UnicodeMathSymbol{"021FF}{\leftrightarrowtriangle }{\mathrel}{left right open-headed arrow}%
+\UnicodeMathSymbol{"02200}{\forall }{\mathord}{for all}%
+\UnicodeMathSymbol{"02201}{\complement }{\mathord}{complement sign}%
+\UnicodeMathSymbol{"02202}{\partial }{\mathalpha}{partial differential}%
+\UnicodeMathSymbol{"02203}{\exists }{\mathord}{at least one exists}%
+\UnicodeMathSymbol{"02204}{\nexists }{\mathord}{negated exists}%
+\UnicodeMathSymbol{"02205}{\varnothing }{\mathord}{circle, slash}%
+\UnicodeMathSymbol{"02206}{\increment }{\mathord}{laplacian (delta; nabla\string^2)}%
+\UnicodeMathSymbol{"02207}{\nabla }{\mathalpha}{nabla, del, hamilton operator}%
+\UnicodeMathSymbol{"02208}{\in }{\mathrel}{set membership, variant}%
+\UnicodeMathSymbol{"02209}{\notin }{\mathrel}{negated set membership}%
+\UnicodeMathSymbol{"0220A}{\smallin }{\mathrel}{set membership (small set membership)}%
+\UnicodeMathSymbol{"0220B}{\ni }{\mathrel}{contains, variant}%
+\UnicodeMathSymbol{"0220C}{\nni }{\mathrel}{negated contains, variant}%
+\UnicodeMathSymbol{"0220D}{\smallni }{\mathrel}{/ni /owns r: contains (small contains as member)}%
+\UnicodeMathSymbol{"0220E}{\QED }{\mathord}{end of proof}%
+\UnicodeMathSymbol{"0220F}{\prod }{\mathop}{product operator}%
+\UnicodeMathSymbol{"02210}{\coprod }{\mathop}{coproduct operator}%
+\UnicodeMathSymbol{"02211}{\sum }{\mathop}{summation operator}%
+\UnicodeMathSymbol{"02212}{\minus }{\mathbin}{minus sign}%
+\UnicodeMathSymbol{"02213}{\mp }{\mathbin}{minus-or-plus sign}%
+\UnicodeMathSymbol{"02214}{\dotplus }{\mathbin}{plus sign, dot above}%
+\UnicodeMathSymbol{"02215}{\divslash }{\mathbin}{division slash}%
+\UnicodeMathSymbol{"02216}{\smallsetminus }{\mathbin}{small set minus (cf. reverse solidus)}%
+\UnicodeMathSymbol{"02217}{\ast }{\mathbin}{centered asterisk}%
+\UnicodeMathSymbol{"02218}{\vysmwhtcircle }{\mathbin}{composite function (small circle)}%
+\UnicodeMathSymbol{"02219}{\vysmblkcircle }{\mathbin}{bullet operator}%
+\UnicodeMathSymbol{"0221A}{\sqrt }{\mathopen}{radical}%
+\UnicodeMathSymbol{"0221A}{\surd }{\mathord}{radical}%
+\UnicodeMathSymbol{"0221B}{\cuberoot }{\mathopen}{cube root}%
+\UnicodeMathSymbol{"0221C}{\fourthroot }{\mathopen}{fourth root}%
+\UnicodeMathSymbol{"0221D}{\propto }{\mathrel}{is proportional to}%
+\UnicodeMathSymbol{"0221E}{\infty }{\mathord}{infinity}%
+\UnicodeMathSymbol{"0221F}{\rightangle }{\mathord}{right (90 degree) angle}%
+\UnicodeMathSymbol{"02220}{\angle }{\mathord}{angle}%
+\UnicodeMathSymbol{"02221}{\measuredangle }{\mathord}{angle-measured}%
+\UnicodeMathSymbol{"02222}{\sphericalangle }{\mathord}{angle-spherical}%
+\UnicodeMathSymbol{"02223}{\mid }{\mathrel}{/mid r:}%
+\UnicodeMathSymbol{"02224}{\nmid }{\mathrel}{negated mid}%
+\UnicodeMathSymbol{"02225}{\parallel }{\mathrel}{parallel}%
+\UnicodeMathSymbol{"02226}{\nparallel }{\mathrel}{not parallel}%
+\UnicodeMathSymbol{"02227}{\wedge }{\mathbin}{/wedge /land b: logical and}%
+\UnicodeMathSymbol{"02228}{\vee }{\mathbin}{/vee /lor b: logical or}%
+\UnicodeMathSymbol{"02229}{\cap }{\mathbin}{intersection}%
+\UnicodeMathSymbol{"0222A}{\cup }{\mathbin}{union or logical sum}%
+\UnicodeMathSymbol{"0222B}{\int }{\mathop}{integral operator}%
+\UnicodeMathSymbol{"0222C}{\iint }{\mathop}{double integral operator}%
+\UnicodeMathSymbol{"0222D}{\iiint }{\mathop}{triple integral operator}%
+\UnicodeMathSymbol{"0222E}{\oint }{\mathop}{contour integral operator}%
+\UnicodeMathSymbol{"0222F}{\oiint }{\mathop}{double contour integral operator}%
+\UnicodeMathSymbol{"02230}{\oiiint }{\mathop}{triple contour integral operator}%
+\UnicodeMathSymbol{"02231}{\intclockwise }{\mathop}{clockwise integral}%
+\UnicodeMathSymbol{"02232}{\varointclockwise }{\mathop}{contour integral, clockwise}%
+\UnicodeMathSymbol{"02233}{\ointctrclockwise }{\mathop}{contour integral, anticlockwise}%
+\UnicodeMathSymbol{"02234}{\therefore }{\mathord}{therefore}%
+\UnicodeMathSymbol{"02235}{\because }{\mathord}{because}%
+\UnicodeMathSymbol{"02236}{\mathratio }{\mathrel}{ratio}%
+\UnicodeMathSymbol{"02237}{\Colon }{\mathrel}{two colons}%
+\UnicodeMathSymbol{"02238}{\dotminus }{\mathbin}{minus sign, dot above}%
+\UnicodeMathSymbol{"02239}{\dashcolon }{\mathrel}{excess (-:)}%
+\UnicodeMathSymbol{"0223A}{\dotsminusdots }{\mathrel}{minus with four dots, geometric properties}%
+\UnicodeMathSymbol{"0223B}{\kernelcontraction }{\mathrel}{homothetic}%
+\UnicodeMathSymbol{"0223C}{\sim }{\mathrel}{similar}%
+\UnicodeMathSymbol{"0223D}{\backsim }{\mathrel}{reverse similar}%
+\UnicodeMathSymbol{"0223E}{\invlazys }{\mathbin}{most positive [inverted lazy s]}%
+\UnicodeMathSymbol{"0223F}{\sinewave }{\mathord}{sine wave}%
+\UnicodeMathSymbol{"02240}{\wr }{\mathbin}{wreath product}%
+\UnicodeMathSymbol{"02241}{\nsim }{\mathrel}{not similar}%
+\UnicodeMathSymbol{"02242}{\eqsim }{\mathrel}{equals, similar}%
+\UnicodeMathSymbol{"02243}{\simeq }{\mathrel}{similar, equals}%
+\UnicodeMathSymbol{"02244}{\nsime }{\mathrel}{not similar, equals}%
+\UnicodeMathSymbol{"02243}{\sime }{\mathrel}{similar, equals (alias)}%
+\UnicodeMathSymbol{"02244}{\nsimeq }{\mathrel}{not similar, equals (alias)}%
+\UnicodeMathSymbol{"02245}{\cong }{\mathrel}{congruent with}%
+\UnicodeMathSymbol{"02246}{\simneqq }{\mathrel}{similar, not equals [vert only for 9573 entity]}%
+\UnicodeMathSymbol{"02247}{\ncong }{\mathrel}{not congruent with}%
+\UnicodeMathSymbol{"02248}{\approx }{\mathrel}{approximate}%
+\UnicodeMathSymbol{"02249}{\napprox }{\mathrel}{not approximate}%
+\UnicodeMathSymbol{"0224A}{\approxeq }{\mathrel}{approximate, equals}%
+\UnicodeMathSymbol{"0224B}{\approxident }{\mathrel}{approximately identical to}%
+\UnicodeMathSymbol{"0224C}{\backcong }{\mathrel}{all equal to}%
+\UnicodeMathSymbol{"0224D}{\asymp }{\mathrel}{asymptotically equal to}%
+\UnicodeMathSymbol{"0224E}{\Bumpeq }{\mathrel}{bumpy equals}%
+\UnicodeMathSymbol{"0224F}{\bumpeq }{\mathrel}{bumpy equals, equals}%
+\UnicodeMathSymbol{"02250}{\doteq }{\mathrel}{equals, single dot above}%
+\UnicodeMathSymbol{"02251}{\Doteq }{\mathrel}{/doteqdot /doteq r: equals, even dots}%
+\UnicodeMathSymbol{"02252}{\fallingdotseq }{\mathrel}{equals, falling dots}%
+\UnicodeMathSymbol{"02253}{\risingdotseq }{\mathrel}{equals, rising dots}%
+\UnicodeMathSymbol{"02254}{\coloneq }{\mathrel}{colon, equals}%
+\UnicodeMathSymbol{"02255}{\eqcolon }{\mathrel}{equals, colon}%
+\UnicodeMathSymbol{"02256}{\eqcirc }{\mathrel}{circle on equals sign}%
+\UnicodeMathSymbol{"02257}{\circeq }{\mathrel}{circle, equals}%
+\UnicodeMathSymbol{"02258}{\arceq }{\mathrel}{arc, equals; corresponds to}%
+\UnicodeMathSymbol{"02259}{\wedgeq }{\mathrel}{corresponds to (wedge, equals)}%
+\UnicodeMathSymbol{"0225A}{\veeeq }{\mathrel}{logical or, equals}%
+\UnicodeMathSymbol{"0225B}{\stareq }{\mathrel}{star equals}%
+\UnicodeMathSymbol{"0225C}{\triangleq }{\mathrel}{triangle, equals}%
+\UnicodeMathSymbol{"0225D}{\eqdef }{\mathrel}{equals by definition}%
+\UnicodeMathSymbol{"0225E}{\measeq }{\mathrel}{measured by (m over equals)}%
+\UnicodeMathSymbol{"0225F}{\questeq }{\mathrel}{equal with questionmark}%
+\UnicodeMathSymbol{"02260}{\ne }{\mathrel}{/ne /neq r: not equal}%
+\UnicodeMathSymbol{"02261}{\equiv }{\mathrel}{identical with}%
+\UnicodeMathSymbol{"02262}{\nequiv }{\mathrel}{not identical with}%
+\UnicodeMathSymbol{"02263}{\Equiv }{\mathrel}{strict equivalence (4 lines)}%
+\UnicodeMathSymbol{"02264}{\leq }{\mathrel}{/leq /le r: less-than-or-equal}%
+\UnicodeMathSymbol{"02265}{\geq }{\mathrel}{/geq /ge r: greater-than-or-equal}%
+\UnicodeMathSymbol{"02266}{\leqq }{\mathrel}{less, double equals}%
+\UnicodeMathSymbol{"02267}{\geqq }{\mathrel}{greater, double equals}%
+\UnicodeMathSymbol{"02268}{\lneqq }{\mathrel}{less, not double equals}%
+\UnicodeMathSymbol{"02269}{\gneqq }{\mathrel}{greater, not double equals}%
+\UnicodeMathSymbol{"0226A}{\ll }{\mathrel}{much less than, type 2}%
+\UnicodeMathSymbol{"0226B}{\gg }{\mathrel}{much greater than, type 2}%
+\UnicodeMathSymbol{"0226C}{\between }{\mathrel}{between}%
+\UnicodeMathSymbol{"0226D}{\nasymp }{\mathrel}{not asymptotically equal to}%
+\UnicodeMathSymbol{"0226E}{\nless }{\mathrel}{not less-than}%
+\UnicodeMathSymbol{"0226F}{\ngtr }{\mathrel}{not greater-than}%
+\UnicodeMathSymbol{"02270}{\nleq }{\mathrel}{not less-than-or-equal}%
+\UnicodeMathSymbol{"02271}{\ngeq }{\mathrel}{not greater-than-or-equal}%
+\UnicodeMathSymbol{"02272}{\lesssim }{\mathrel}{less, similar}%
+\UnicodeMathSymbol{"02273}{\gtrsim }{\mathrel}{greater, similar}%
+\UnicodeMathSymbol{"02274}{\nlesssim }{\mathrel}{not less, similar}%
+\UnicodeMathSymbol{"02275}{\ngtrsim }{\mathrel}{not greater, similar}%
+\UnicodeMathSymbol{"02276}{\lessgtr }{\mathrel}{less, greater}%
+\UnicodeMathSymbol{"02277}{\gtrless }{\mathrel}{greater, less}%
+\UnicodeMathSymbol{"02278}{\nlessgtr }{\mathrel}{not less, greater}%
+\UnicodeMathSymbol{"02279}{\ngtrless }{\mathrel}{not greater, less}%
+\UnicodeMathSymbol{"0227A}{\prec }{\mathrel}{precedes}%
+\UnicodeMathSymbol{"0227B}{\succ }{\mathrel}{succeeds}%
+\UnicodeMathSymbol{"0227C}{\preccurlyeq }{\mathrel}{precedes, curly equals}%
+\UnicodeMathSymbol{"0227D}{\succcurlyeq }{\mathrel}{succeeds, curly equals}%
+\UnicodeMathSymbol{"0227E}{\precsim }{\mathrel}{precedes, similar}%
+\UnicodeMathSymbol{"0227F}{\succsim }{\mathrel}{succeeds, similar}%
+\UnicodeMathSymbol{"02280}{\nprec }{\mathrel}{not precedes}%
+\UnicodeMathSymbol{"02281}{\nsucc }{\mathrel}{not succeeds}%
+\UnicodeMathSymbol{"02282}{\subset }{\mathrel}{subset or is implied by}%
+\UnicodeMathSymbol{"02283}{\supset }{\mathrel}{superset or implies}%
+\UnicodeMathSymbol{"02284}{\nsubset }{\mathrel}{not subset, variant [slash negation]}%
+\UnicodeMathSymbol{"02285}{\nsupset }{\mathrel}{not superset, variant [slash negation]}%
+\UnicodeMathSymbol{"02286}{\subseteq }{\mathrel}{subset, equals}%
+\UnicodeMathSymbol{"02287}{\supseteq }{\mathrel}{superset, equals}%
+\UnicodeMathSymbol{"02288}{\nsubseteq }{\mathrel}{not subset, equals}%
+\UnicodeMathSymbol{"02289}{\nsupseteq }{\mathrel}{not superset, equals}%
+\UnicodeMathSymbol{"0228A}{\subsetneq }{\mathrel}{subset, not equals}%
+\UnicodeMathSymbol{"0228B}{\supsetneq }{\mathrel}{superset, not equals}%
+\UnicodeMathSymbol{"0228C}{\cupleftarrow }{\mathbin}{multiset}%
+\UnicodeMathSymbol{"0228D}{\cupdot }{\mathbin}{union, with dot}%
+\UnicodeMathSymbol{"0228E}{\uplus }{\mathbin}{plus sign in union}%
+\UnicodeMathSymbol{"0228F}{\sqsubset }{\mathrel}{square subset}%
+\UnicodeMathSymbol{"02290}{\sqsupset }{\mathrel}{square superset}%
+\UnicodeMathSymbol{"02291}{\sqsubseteq }{\mathrel}{square subset, equals}%
+\UnicodeMathSymbol{"02292}{\sqsupseteq }{\mathrel}{square superset, equals}%
+\UnicodeMathSymbol{"02293}{\sqcap }{\mathbin}{square intersection}%
+\UnicodeMathSymbol{"02294}{\sqcup }{\mathbin}{square union}%
+\UnicodeMathSymbol{"02295}{\oplus }{\mathbin}{plus sign in circle}%
+\UnicodeMathSymbol{"02296}{\ominus }{\mathbin}{minus sign in circle}%
+\UnicodeMathSymbol{"02297}{\otimes }{\mathbin}{multiply sign in circle}%
+\UnicodeMathSymbol{"02298}{\oslash }{\mathbin}{solidus in circle}%
+\UnicodeMathSymbol{"02299}{\odot }{\mathbin}{middle dot in circle}%
+\UnicodeMathSymbol{"0229A}{\circledcirc }{\mathbin}{small circle in circle}%
+\UnicodeMathSymbol{"0229B}{\circledast }{\mathbin}{asterisk in circle}%
+\UnicodeMathSymbol{"0229C}{\circledequal }{\mathbin}{equal in circle}%
+\UnicodeMathSymbol{"0229D}{\circleddash }{\mathbin}{hyphen in circle}%
+\UnicodeMathSymbol{"0229E}{\boxplus }{\mathbin}{plus sign in box}%
+\UnicodeMathSymbol{"0229F}{\boxminus }{\mathbin}{minus sign in box}%
+\UnicodeMathSymbol{"022A0}{\boxtimes }{\mathbin}{multiply sign in box}%
+\UnicodeMathSymbol{"022A1}{\boxdot }{\mathbin}{/dotsquare /boxdot b: small dot in box}%
+\UnicodeMathSymbol{"022A2}{\vdash }{\mathrel}{vertical, dash}%
+\UnicodeMathSymbol{"022A3}{\dashv }{\mathrel}{dash, vertical}%
+\UnicodeMathSymbol{"022A4}{\top }{\mathord}{top}%
+\UnicodeMathSymbol{"022A5}{\bot }{\mathord}{bottom}%
+\UnicodeMathSymbol{"022A6}{\assert }{\mathrel}{assertion (vertical, short dash)}%
+\UnicodeMathSymbol{"022A7}{\models }{\mathrel}{models (vertical, short double dash)}%
+\UnicodeMathSymbol{"022A8}{\vDash }{\mathrel}{vertical, double dash}%
+\UnicodeMathSymbol{"022A9}{\Vdash }{\mathrel}{double vertical, dash}%
+\UnicodeMathSymbol{"022AA}{\Vvdash }{\mathrel}{triple vertical, dash}%
+\UnicodeMathSymbol{"022AB}{\VDash }{\mathrel}{double vert, double dash}%
+\UnicodeMathSymbol{"022AC}{\nvdash }{\mathrel}{not vertical, dash}%
+\UnicodeMathSymbol{"022AD}{\nvDash }{\mathrel}{not vertical, double dash}%
+\UnicodeMathSymbol{"022AE}{\nVdash }{\mathrel}{not double vertical, dash}%
+\UnicodeMathSymbol{"022AF}{\nVDash }{\mathrel}{not double vert, double dash}%
+\UnicodeMathSymbol{"022B0}{\prurel }{\mathrel}{element precedes under relation}%
+\UnicodeMathSymbol{"022B1}{\scurel }{\mathrel}{succeeds under relation}%
+\UnicodeMathSymbol{"022B2}{\vartriangleleft }{\mathrel}{left triangle, open, variant}%
+\UnicodeMathSymbol{"022B3}{\vartriangleright }{\mathrel}{right triangle, open, variant}%
+\UnicodeMathSymbol{"022B4}{\trianglelefteq }{\mathrel}{left triangle, equals}%
+\UnicodeMathSymbol{"022B5}{\trianglerighteq }{\mathrel}{right triangle, equals}%
+\UnicodeMathSymbol{"022B6}{\origof }{\mathrel}{original of}%
+\UnicodeMathSymbol{"022B7}{\imageof }{\mathrel}{image of}%
+\UnicodeMathSymbol{"022B8}{\multimap }{\mathrel}{/multimap a:}%
+\UnicodeMathSymbol{"022B9}{\hermitmatrix }{\mathord}{hermitian conjugate matrix}%
+\UnicodeMathSymbol{"022BA}{\intercal }{\mathbin}{intercal}%
+\UnicodeMathSymbol{"022BB}{\veebar }{\mathbin}{logical or, bar below (large vee); exclusive disjunction}%
+\UnicodeMathSymbol{"022BC}{\barwedge }{\mathbin}{bar, wedge (large wedge)}%
+\UnicodeMathSymbol{"022BD}{\barvee }{\mathbin}{bar, vee (large vee)}%
+\UnicodeMathSymbol{"022BE}{\measuredrightangle }{\mathord}{right angle-measured [with arc]}%
+\UnicodeMathSymbol{"022BF}{\varlrtriangle }{\mathord}{right triangle}%
+\UnicodeMathSymbol{"022C0}{\bigwedge }{\mathop}{logical and operator}%
+\UnicodeMathSymbol{"022C1}{\bigvee }{\mathop}{logical or operator}%
+\UnicodeMathSymbol{"022C2}{\bigcap }{\mathop}{intersection operator}%
+\UnicodeMathSymbol{"022C3}{\bigcup }{\mathop}{union operator}%
+\UnicodeMathSymbol{"022C4}{\smwhtdiamond }{\mathbin}{white diamond}%
+\UnicodeMathSymbol{"022C5}{\cdot }{\mathbin}{small middle dot}%
+\UnicodeMathSymbol{"022C6}{\star }{\mathbin}{small star, filled, low}%
+\UnicodeMathSymbol{"022C7}{\divideontimes }{\mathbin}{division on times}%
+\UnicodeMathSymbol{"022C8}{\bowtie }{\mathrel}{bowtie}%
+\UnicodeMathSymbol{"022C9}{\ltimes }{\mathbin}{times sign, left closed}%
+\UnicodeMathSymbol{"022CA}{\rtimes }{\mathbin}{times sign, right closed}%
+\UnicodeMathSymbol{"022CB}{\leftthreetimes }{\mathbin}{left semidirect product}%
+\UnicodeMathSymbol{"022CC}{\rightthreetimes }{\mathbin}{right semidirect product}%
+\UnicodeMathSymbol{"022CD}{\backsimeq }{\mathrel}{reverse similar, equals}%
+\UnicodeMathSymbol{"022CE}{\curlyvee }{\mathbin}{curly logical or}%
+\UnicodeMathSymbol{"022CF}{\curlywedge }{\mathbin}{curly logical and}%
+\UnicodeMathSymbol{"022D0}{\Subset }{\mathrel}{double subset}%
+\UnicodeMathSymbol{"022D1}{\Supset }{\mathrel}{double superset}%
+\UnicodeMathSymbol{"022D2}{\Cap }{\mathbin}{/cap /doublecap b: double intersection}%
+\UnicodeMathSymbol{"022D3}{\Cup }{\mathbin}{/cup /doublecup b: double union}%
+\UnicodeMathSymbol{"022D4}{\pitchfork }{\mathrel}{pitchfork}%
+\UnicodeMathSymbol{"022D5}{\equalparallel }{\mathrel}{parallel, equal; equal or parallel}%
+\UnicodeMathSymbol{"022D6}{\lessdot }{\mathrel}{less than, with dot}%
+\UnicodeMathSymbol{"022D7}{\gtrdot }{\mathrel}{greater than, with dot}%
+\UnicodeMathSymbol{"022D8}{\lll }{\mathrel}{/ll /lll /llless r: triple less-than}%
+\UnicodeMathSymbol{"022D9}{\ggg }{\mathrel}{/ggg /gg /gggtr r: triple greater-than}%
+\UnicodeMathSymbol{"022DA}{\lesseqgtr }{\mathrel}{less, equals, greater}%
+\UnicodeMathSymbol{"022DB}{\gtreqless }{\mathrel}{greater, equals, less}%
+\UnicodeMathSymbol{"022DC}{\eqless }{\mathrel}{equal-or-less}%
+\UnicodeMathSymbol{"022DD}{\eqgtr }{\mathrel}{equal-or-greater}%
+\UnicodeMathSymbol{"022DE}{\curlyeqprec }{\mathrel}{curly equals, precedes}%
+\UnicodeMathSymbol{"022DF}{\curlyeqsucc }{\mathrel}{curly equals, succeeds}%
+\UnicodeMathSymbol{"022E0}{\npreccurlyeq }{\mathrel}{not precedes, curly equals}%
+\UnicodeMathSymbol{"022E1}{\nsucccurlyeq }{\mathrel}{not succeeds, curly equals}%
+\UnicodeMathSymbol{"022E2}{\nsqsubseteq }{\mathrel}{not, square subset, equals}%
+\UnicodeMathSymbol{"022E3}{\nsqsupseteq }{\mathrel}{not, square superset, equals}%
+\UnicodeMathSymbol{"022E4}{\sqsubsetneq }{\mathrel}{square subset, not equals}%
+\UnicodeMathSymbol{"022E5}{\sqsupsetneq }{\mathrel}{square superset, not equals}%
+\UnicodeMathSymbol{"022E6}{\lnsim }{\mathrel}{less, not similar}%
+\UnicodeMathSymbol{"022E7}{\gnsim }{\mathrel}{greater, not similar}%
+\UnicodeMathSymbol{"022E8}{\precnsim }{\mathrel}{precedes, not similar}%
+\UnicodeMathSymbol{"022E9}{\succnsim }{\mathrel}{succeeds, not similar}%
+\UnicodeMathSymbol{"022EA}{\nvartriangleleft }{\mathrel}{not left triangle}%
+\UnicodeMathSymbol{"022EB}{\nvartriangleright }{\mathrel}{not right triangle}%
+\UnicodeMathSymbol{"022EC}{\ntrianglelefteq }{\mathrel}{not left triangle, equals}%
+\UnicodeMathSymbol{"022ED}{\ntrianglerighteq }{\mathrel}{not right triangle, equals}%
+\UnicodeMathSymbol{"022EE}{\vdots }{\mathrel}{vertical ellipsis}%
+\UnicodeMathSymbol{"022EF}{\unicodecdots }{\mathord}{three dots, centered}%
+\UnicodeMathSymbol{"022F0}{\adots }{\mathrel}{three dots, ascending}%
+\UnicodeMathSymbol{"022F1}{\ddots }{\mathrel}{three dots, descending}%
+\UnicodeMathSymbol{"022F2}{\disin }{\mathrel}{element of with long horizontal stroke}%
+\UnicodeMathSymbol{"022F3}{\varisins }{\mathrel}{element of with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022F4}{\isins }{\mathrel}{small element of with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022F5}{\isindot }{\mathrel}{element of with dot above}%
+\UnicodeMathSymbol{"022F6}{\varisinobar }{\mathrel}{element of with overbar}%
+\UnicodeMathSymbol{"022F7}{\isinobar }{\mathrel}{small element of with overbar}%
+\UnicodeMathSymbol{"022F8}{\isinvb }{\mathrel}{element of with underbar}%
+\UnicodeMathSymbol{"022F9}{\isinE }{\mathrel}{element of with two horizontal strokes}%
+\UnicodeMathSymbol{"022FA}{\nisd }{\mathrel}{contains with long horizontal stroke}%
+\UnicodeMathSymbol{"022FB}{\varnis }{\mathrel}{contains with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022FC}{\nis }{\mathrel}{small contains with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022FD}{\varniobar }{\mathrel}{contains with overbar}%
+\UnicodeMathSymbol{"022FE}{\niobar }{\mathrel}{small contains with overbar}%
+\UnicodeMathSymbol{"022FF}{\bagmember }{\mathrel}{z notation bag membership}%
+\UnicodeMathSymbol{"02300}{\diameter }{\mathord}{diameter sign}%
+\UnicodeMathSymbol{"02302}{\house }{\mathord}{house}%
+\UnicodeMathSymbol{"02305}{\varbarwedge }{\mathbin}{/barwedge b: logical and, bar above [projective (bar over small wedge)]}%
+\UnicodeMathSymbol{"02306}{\vardoublebarwedge }{\mathbin}{/doublebarwedge b: logical and, double bar above [perspective (double bar over small wedge)]}%
+\UnicodeMathSymbol{"02308}{\lceil }{\mathopen}{left ceiling}%
+\UnicodeMathSymbol{"02309}{\rceil }{\mathclose}{right ceiling}%
+\UnicodeMathSymbol{"0230A}{\lfloor }{\mathopen}{left floor}%
+\UnicodeMathSymbol{"0230B}{\rfloor }{\mathclose}{right floor}%
+\UnicodeMathSymbol{"02310}{\invnot }{\mathord}{reverse not}%
+\UnicodeMathSymbol{"02311}{\sqlozenge }{\mathord}{square lozenge}%
+\UnicodeMathSymbol{"02312}{\profline }{\mathord}{profile of a line}%
+\UnicodeMathSymbol{"02313}{\profsurf }{\mathord}{profile of a surface}%
+\UnicodeMathSymbol{"02317}{\viewdata }{\mathord}{viewdata square}%
+\UnicodeMathSymbol{"02319}{\turnednot }{\mathord}{turned not sign}%
+\UnicodeMathSymbol{"0231C}{\ulcorner }{\mathopen}{upper left corner}%
+\UnicodeMathSymbol{"0231D}{\urcorner }{\mathclose}{upper right corner}%
+\UnicodeMathSymbol{"0231E}{\llcorner }{\mathopen}{lower left corner}%
+\UnicodeMathSymbol{"0231F}{\lrcorner }{\mathclose}{lower right corner}%
+\UnicodeMathSymbol{"02320}{\inttop }{\mathord}{top half integral}%
+\UnicodeMathSymbol{"02321}{\intbottom }{\mathord}{bottom half integral}%
+\UnicodeMathSymbol{"02322}{\frown }{\mathrel}{down curve}%
+\UnicodeMathSymbol{"02323}{\smile }{\mathrel}{up curve}%
+\UnicodeMathSymbol{"0232C}{\varhexagonlrbonds }{\mathord}{six carbon ring, corner down, double bonds lower right etc}%
+\UnicodeMathSymbol{"02332}{\conictaper }{\mathord}{conical taper }%
+\UnicodeMathSymbol{"02336}{\topbot }{\mathord}{top and bottom}%
+\UnicodeMathSymbol{"0233D}{\obar }{\mathbin}{circle with vertical bar}%
+\UnicodeMathSymbol{"0233F}{\APLnotslash }{\mathrel}{solidus, bar through (apl functional symbol slash bar)}%
+\UnicodeMathSymbol{"02340}{\APLnotbackslash }{\mathord}{apl functional symbol backslash bar}%
+\UnicodeMathSymbol{"02353}{\APLboxupcaret }{\mathord}{boxed up caret}%
+\UnicodeMathSymbol{"02370}{\APLboxquestion }{\mathord}{boxed question mark}%
+\UnicodeMathSymbol{"0237C}{\rangledownzigzagarrow }{\mathord}{right angle with downwards zigzag arrow}%
+\UnicodeMathSymbol{"02394}{\hexagon }{\mathord}{horizontal benzene ring [hexagon flat open]}%
+\UnicodeMathSymbol{"0239B}{\lparenuend }{\mathord}{left parenthesis upper hook}%
+\UnicodeMathSymbol{"0239C}{\lparenextender }{\mathord}{left parenthesis extension}%
+\UnicodeMathSymbol{"0239D}{\lparenlend }{\mathord}{left parenthesis lower hook}%
+\UnicodeMathSymbol{"0239E}{\rparenuend }{\mathord}{right parenthesis upper hook}%
+\UnicodeMathSymbol{"0239F}{\rparenextender }{\mathord}{right parenthesis extension}%
+\UnicodeMathSymbol{"023A0}{\rparenlend }{\mathord}{right parenthesis lower hook}%
+\UnicodeMathSymbol{"023A1}{\lbrackuend }{\mathord}{left square bracket upper corner}%
+\UnicodeMathSymbol{"023A2}{\lbrackextender }{\mathord}{left square bracket extension}%
+\UnicodeMathSymbol{"023A3}{\lbracklend }{\mathord}{left square bracket lower corner}%
+\UnicodeMathSymbol{"023A4}{\rbrackuend }{\mathord}{right square bracket upper corner}%
+\UnicodeMathSymbol{"023A5}{\rbrackextender }{\mathord}{right square bracket extension}%
+\UnicodeMathSymbol{"023A6}{\rbracklend }{\mathord}{right square bracket lower corner}%
+\UnicodeMathSymbol{"023A7}{\lbraceuend }{\mathord}{left curly bracket upper hook}%
+\UnicodeMathSymbol{"023A8}{\lbracemid }{\mathord}{left curly bracket middle piece}%
+\UnicodeMathSymbol{"023A9}{\lbracelend }{\mathord}{left curly bracket lower hook}%
+\UnicodeMathSymbol{"023AA}{\vbraceextender }{\mathord}{curly bracket extension}%
+\UnicodeMathSymbol{"023AB}{\rbraceuend }{\mathord}{right curly bracket upper hook}%
+\UnicodeMathSymbol{"023AC}{\rbracemid }{\mathord}{right curly bracket middle piece}%
+\UnicodeMathSymbol{"023AD}{\rbracelend }{\mathord}{right curly bracket lower hook}%
+\UnicodeMathSymbol{"023AE}{\intextender }{\mathord}{integral extension}%
+\UnicodeMathSymbol{"023AF}{\harrowextender }{\mathord}{horizontal line extension (used to extend arrows)}%
+\UnicodeMathSymbol{"023B0}{\lmoustache }{\mathopen}{upper left or lower right curly bracket section}%
+\UnicodeMathSymbol{"023B1}{\rmoustache }{\mathclose}{upper right or lower left curly bracket section}%
+\UnicodeMathSymbol{"023B2}{\sumtop }{\mathord}{summation top}%
+\UnicodeMathSymbol{"023B3}{\sumbottom }{\mathord}{summation bottom}%
+\UnicodeMathSymbol{"023B4}{\overbracket }{\mathover}{top square bracket}%
+\UnicodeMathSymbol{"023B5}{\underbracket }{\mathunder}{bottom square bracket}%
+\UnicodeMathSymbol{"023B6}{\bbrktbrk }{\mathord}{bottom square bracket over top square bracket}%
+\UnicodeMathSymbol{"023B7}{\sqrtbottom }{\mathord}{radical symbol bottom}%
+\UnicodeMathSymbol{"023B8}{\lvboxline }{\mathord}{left vertical box line}%
+\UnicodeMathSymbol{"023B9}{\rvboxline }{\mathord}{right vertical box line}%
+\UnicodeMathSymbol{"023CE}{\varcarriagereturn }{\mathord}{return symbol}%
+\UnicodeMathSymbol{"023DC}{\overparen }{\mathover}{top parenthesis (mathematical use)}%
+\UnicodeMathSymbol{"023DD}{\underparen }{\mathunder}{bottom parenthesis (mathematical use)}%
+\UnicodeMathSymbol{"023DE}{\overbrace }{\mathover}{top curly bracket (mathematical use)}%
+\UnicodeMathSymbol{"023DF}{\underbrace }{\mathunder}{bottom curly bracket (mathematical use)}%
+\UnicodeMathSymbol{"023E0}{\obrbrak }{\mathord}{top tortoise shell bracket (mathematical use)}%
+\UnicodeMathSymbol{"023E1}{\ubrbrak }{\mathord}{bottom tortoise shell bracket (mathematical use)}%
+\UnicodeMathSymbol{"023E2}{\trapezium }{\mathord}{white trapezium}%
+\UnicodeMathSymbol{"023E3}{\benzenr }{\mathord}{benzene ring with circle}%
+\UnicodeMathSymbol{"023E4}{\strns }{\mathord}{straightness}%
+\UnicodeMathSymbol{"023E5}{\fltns }{\mathord}{flatness}%
+\UnicodeMathSymbol{"023E6}{\accurrent }{\mathord}{ac current}%
+\UnicodeMathSymbol{"023E7}{\elinters }{\mathord}{electrical intersection}%
+\UnicodeMathSymbol{"02422}{\blanksymbol }{\mathord}{blank symbol}%
+\UnicodeMathSymbol{"02423}{\mathvisiblespace }{\mathord}{open box}%
+\UnicodeMathSymbol{"02506}{\bdtriplevdash }{\mathord}{doubly broken vert}%
+\UnicodeMathSymbol{"02580}{\blockuphalf }{\mathord}{upper half block}%
+\UnicodeMathSymbol{"02584}{\blocklowhalf }{\mathord}{lower half block}%
+\UnicodeMathSymbol{"02588}{\blockfull }{\mathord}{full block}%
+\UnicodeMathSymbol{"0258C}{\blocklefthalf }{\mathord}{left half block}%
+\UnicodeMathSymbol{"02590}{\blockrighthalf }{\mathord}{right half block}%
+\UnicodeMathSymbol{"02591}{\blockqtrshaded }{\mathord}{25\% shaded block}%
+\UnicodeMathSymbol{"02592}{\blockhalfshaded }{\mathord}{50\% shaded block}%
+\UnicodeMathSymbol{"02593}{\blockthreeqtrshaded }{\mathord}{75\% shaded block}%
+\UnicodeMathSymbol{"025A0}{\mdlgblksquare }{\mathord}{square, filled}%
+\UnicodeMathSymbol{"025A1}{\mdlgwhtsquare }{\mathord}{square, open}%
+\UnicodeMathSymbol{"025A2}{\squoval }{\mathord}{white square with rounded corners}%
+\UnicodeMathSymbol{"025A3}{\blackinwhitesquare }{\mathord}{white square containing black small square}%
+\UnicodeMathSymbol{"025A4}{\squarehfill }{\mathord}{square, horizontal rule filled}%
+\UnicodeMathSymbol{"025A5}{\squarevfill }{\mathord}{square, vertical rule filled}%
+\UnicodeMathSymbol{"025A6}{\squarehvfill }{\mathord}{square with orthogonal crosshatch fill}%
+\UnicodeMathSymbol{"025A7}{\squarenwsefill }{\mathord}{square, nw-to-se rule filled}%
+\UnicodeMathSymbol{"025A8}{\squareneswfill }{\mathord}{square, ne-to-sw rule filled}%
+\UnicodeMathSymbol{"025A9}{\squarecrossfill }{\mathord}{square with diagonal crosshatch fill}%
+\UnicodeMathSymbol{"025AA}{\smblksquare }{\mathord}{/blacksquare - sq bullet, filled}%
+\UnicodeMathSymbol{"025AB}{\smwhtsquare }{\mathord}{white small square}%
+\UnicodeMathSymbol{"025AC}{\hrectangleblack }{\mathord}{black rectangle}%
+\UnicodeMathSymbol{"025AD}{\hrectangle }{\mathord}{horizontal rectangle, open}%
+\UnicodeMathSymbol{"025AE}{\vrectangleblack }{\mathord}{black vertical rectangle}%
+\UnicodeMathSymbol{"025AF}{\vrectangle }{\mathord}{rectangle, white (vertical)}%
+\UnicodeMathSymbol{"025B0}{\parallelogramblack }{\mathord}{black parallelogram}%
+\UnicodeMathSymbol{"025B1}{\parallelogram }{\mathord}{parallelogram, open}%
+\UnicodeMathSymbol{"025B2}{\bigblacktriangleup }{\mathord}{black up-pointing triangle}%
+\UnicodeMathSymbol{"025B3}{\bigtriangleup }{\mathbin}{big up triangle, open}%
+\UnicodeMathSymbol{"025B4}{\blacktriangle }{\mathord}{up triangle, filled}%
+\UnicodeMathSymbol{"025B5}{\vartriangle }{\mathrel}{/triangle - up triangle, open}%
+\UnicodeMathSymbol{"025B6}{\blacktriangleright }{\mathord}{(large) right triangle, filled}%
+\UnicodeMathSymbol{"025B7}{\triangleright }{\mathbin}{(large) right triangle, open; z notation range restriction}%
+\UnicodeMathSymbol{"025B8}{\smallblacktriangleright }{\mathord}{right triangle, filled}%
+\UnicodeMathSymbol{"025B9}{\smalltriangleright }{\mathord}{right triangle, open}%
+\UnicodeMathSymbol{"025BA}{\blackpointerright }{\mathord}{black right-pointing pointer}%
+\UnicodeMathSymbol{"025BB}{\whitepointerright }{\mathord}{white right-pointing pointer}%
+\UnicodeMathSymbol{"025BC}{\bigblacktriangledown }{\mathord}{big down triangle, filled}%
+\UnicodeMathSymbol{"025BD}{\bigtriangledown }{\mathord}{big down triangle, open}%
+\UnicodeMathSymbol{"025BE}{\blacktriangledown }{\mathord}{down triangle, filled}%
+\UnicodeMathSymbol{"025BF}{\triangledown }{\mathord}{down triangle, open}%
+\UnicodeMathSymbol{"025C0}{\blacktriangleleft }{\mathord}{(large) left triangle, filled}%
+\UnicodeMathSymbol{"025C1}{\triangleleft }{\mathbin}{(large) left triangle, open; z notation domain restriction}%
+\UnicodeMathSymbol{"025C2}{\smallblacktriangleleft }{\mathord}{left triangle, filled}%
+\UnicodeMathSymbol{"025C3}{\smalltriangleleft }{\mathord}{left triangle, open}%
+\UnicodeMathSymbol{"025C4}{\blackpointerleft }{\mathord}{black left-pointing pointer}%
+\UnicodeMathSymbol{"025C5}{\whitepointerleft }{\mathord}{white left-pointing pointer}%
+\UnicodeMathSymbol{"025C6}{\mdlgblkdiamond }{\mathord}{black diamond}%
+\UnicodeMathSymbol{"025C7}{\mdlgwhtdiamond }{\mathord}{white diamond; diamond, open}%
+\UnicodeMathSymbol{"025C8}{\blackinwhitediamond }{\mathord}{white diamond containing black small diamond}%
+\UnicodeMathSymbol{"025C9}{\fisheye }{\mathord}{fisheye}%
+\UnicodeMathSymbol{"025CA}{\mdlgwhtlozenge }{\mathord}{lozenge or total mark}%
+\UnicodeMathSymbol{"025CB}{\mdlgwhtcircle }{\mathbin}{medium large circle}%
+\UnicodeMathSymbol{"025CC}{\dottedcircle }{\mathord}{dotted circle}%
+\UnicodeMathSymbol{"025CD}{\circlevertfill }{\mathord}{circle with vertical fill}%
+\UnicodeMathSymbol{"025CE}{\bullseye }{\mathord}{bullseye}%
+\UnicodeMathSymbol{"025CF}{\mdlgblkcircle }{\mathord}{circle, filled}%
+\UnicodeMathSymbol{"025D0}{\circlelefthalfblack }{\mathord}{circle, filled left half [harvey ball]}%
+\UnicodeMathSymbol{"025D1}{\circlerighthalfblack }{\mathord}{circle, filled right half}%
+\UnicodeMathSymbol{"025D2}{\circlebottomhalfblack }{\mathord}{circle, filled bottom half}%
+\UnicodeMathSymbol{"025D3}{\circletophalfblack }{\mathord}{circle, filled top half}%
+\UnicodeMathSymbol{"025D4}{\circleurquadblack }{\mathord}{circle with upper right quadrant black}%
+\UnicodeMathSymbol{"025D5}{\blackcircleulquadwhite }{\mathord}{circle with all but upper left quadrant black}%
+\UnicodeMathSymbol{"025D6}{\blacklefthalfcircle }{\mathord}{left half black circle}%
+\UnicodeMathSymbol{"025D7}{\blackrighthalfcircle }{\mathord}{right half black circle}%
+\UnicodeMathSymbol{"025D8}{\inversebullet }{\mathord}{inverse bullet }%
+\UnicodeMathSymbol{"025D9}{\inversewhitecircle }{\mathord}{inverse white circle}%
+\UnicodeMathSymbol{"025DA}{\invwhiteupperhalfcircle }{\mathord}{upper half inverse white circle}%
+\UnicodeMathSymbol{"025DB}{\invwhitelowerhalfcircle }{\mathord}{lower half inverse white circle}%
+\UnicodeMathSymbol{"025DC}{\ularc }{\mathord}{upper left quadrant circular arc}%
+\UnicodeMathSymbol{"025DD}{\urarc }{\mathord}{upper right quadrant circular arc}%
+\UnicodeMathSymbol{"025DE}{\lrarc }{\mathord}{lower right quadrant circular arc}%
+\UnicodeMathSymbol{"025DF}{\llarc }{\mathord}{lower left quadrant circular arc}%
+\UnicodeMathSymbol{"025E0}{\topsemicircle }{\mathord}{upper half circle}%
+\UnicodeMathSymbol{"025E1}{\botsemicircle }{\mathord}{lower half circle}%
+\UnicodeMathSymbol{"025E2}{\lrblacktriangle }{\mathord}{lower right triangle, filled}%
+\UnicodeMathSymbol{"025E3}{\llblacktriangle }{\mathord}{lower left triangle, filled}%
+\UnicodeMathSymbol{"025E4}{\ulblacktriangle }{\mathord}{upper left triangle, filled}%
+\UnicodeMathSymbol{"025E5}{\urblacktriangle }{\mathord}{upper right triangle, filled}%
+\UnicodeMathSymbol{"025E6}{\smwhtcircle }{\mathord}{white bullet}%
+\UnicodeMathSymbol{"025E7}{\squareleftblack }{\mathord}{square, filled left half}%
+\UnicodeMathSymbol{"025E8}{\squarerightblack }{\mathord}{square, filled right half}%
+\UnicodeMathSymbol{"025E9}{\squareulblack }{\mathord}{square, filled top left corner}%
+\UnicodeMathSymbol{"025EA}{\squarelrblack }{\mathord}{square, filled bottom right corner}%
+\UnicodeMathSymbol{"025EB}{\boxbar }{\mathbin}{vertical bar in box}%
+\UnicodeMathSymbol{"025EC}{\trianglecdot }{\mathord}{triangle with centered dot}%
+\UnicodeMathSymbol{"025ED}{\triangleleftblack }{\mathord}{up-pointing triangle with left half black}%
+\UnicodeMathSymbol{"025EE}{\trianglerightblack }{\mathord}{up-pointing triangle with right half black}%
+\UnicodeMathSymbol{"025EF}{\lgwhtcircle }{\mathord}{large circle}%
+\UnicodeMathSymbol{"025F0}{\squareulquad }{\mathord}{white square with upper left quadrant}%
+\UnicodeMathSymbol{"025F1}{\squarellquad }{\mathord}{white square with lower left quadrant}%
+\UnicodeMathSymbol{"025F2}{\squarelrquad }{\mathord}{white square with lower right quadrant}%
+\UnicodeMathSymbol{"025F3}{\squareurquad }{\mathord}{white square with upper right quadrant}%
+\UnicodeMathSymbol{"025F4}{\circleulquad }{\mathord}{white circle with upper left quadrant}%
+\UnicodeMathSymbol{"025F5}{\circlellquad }{\mathord}{white circle with lower left quadrant}%
+\UnicodeMathSymbol{"025F6}{\circlelrquad }{\mathord}{white circle with lower right quadrant}%
+\UnicodeMathSymbol{"025F7}{\circleurquad }{\mathord}{white circle with upper right quadrant}%
+\UnicodeMathSymbol{"025F8}{\ultriangle }{\mathord}{upper left triangle}%
+\UnicodeMathSymbol{"025F9}{\urtriangle }{\mathord}{upper right triangle}%
+\UnicodeMathSymbol{"025FA}{\lltriangle }{\mathord}{lower left triangle}%
+\UnicodeMathSymbol{"025FB}{\mdwhtsquare }{\mathord}{white medium square}%
+\UnicodeMathSymbol{"025FC}{\mdblksquare }{\mathord}{black medium square}%
+\UnicodeMathSymbol{"025FD}{\mdsmwhtsquare }{\mathord}{white medium small square}%
+\UnicodeMathSymbol{"025FE}{\mdsmblksquare }{\mathord}{black medium small square}%
+\UnicodeMathSymbol{"025FF}{\lrtriangle }{\mathord}{lower right triangle}%
+\UnicodeMathSymbol{"02605}{\bigstar }{\mathord}{star, filled}%
+\UnicodeMathSymbol{"02606}{\bigwhitestar }{\mathord}{star, open}%
+\UnicodeMathSymbol{"02609}{\astrosun }{\mathord}{sun}%
+\UnicodeMathSymbol{"02621}{\danger }{\mathord}{dangerous bend (caution sign)}%
+\UnicodeMathSymbol{"0263B}{\blacksmiley }{\mathord}{black smiling face}%
+\UnicodeMathSymbol{"0263C}{\sun }{\mathord}{white sun with rays}%
+\UnicodeMathSymbol{"0263D}{\rightmoon }{\mathord}{first quarter moon}%
+\UnicodeMathSymbol{"0263E}{\leftmoon }{\mathord}{last quarter moon}%
+\UnicodeMathSymbol{"02640}{\female }{\mathord}{venus, female}%
+\UnicodeMathSymbol{"02642}{\male }{\mathord}{mars, male}%
+\UnicodeMathSymbol{"02660}{\spadesuit }{\mathord}{spades suit symbol}%
+\UnicodeMathSymbol{"02661}{\heartsuit }{\mathord}{heart suit symbol}%
+\UnicodeMathSymbol{"02662}{\diamondsuit }{\mathord}{diamond suit symbol}%
+\UnicodeMathSymbol{"02663}{\clubsuit }{\mathord}{club suit symbol}%
+\UnicodeMathSymbol{"02664}{\varspadesuit }{\mathord}{spade, white (card suit)}%
+\UnicodeMathSymbol{"02665}{\varheartsuit }{\mathord}{filled heart (card suit)}%
+\UnicodeMathSymbol{"02666}{\vardiamondsuit }{\mathord}{filled diamond (card suit)}%
+\UnicodeMathSymbol{"02667}{\varclubsuit }{\mathord}{club, white (card suit)}%
+\UnicodeMathSymbol{"02669}{\quarternote }{\mathord}{music note (sung text sign)}%
+\UnicodeMathSymbol{"0266A}{\eighthnote }{\mathord}{eighth note}%
+\UnicodeMathSymbol{"0266B}{\twonotes }{\mathord}{beamed eighth notes}%
+\UnicodeMathSymbol{"0266D}{\flat }{\mathord}{musical flat}%
+\UnicodeMathSymbol{"0266E}{\natural }{\mathord}{music natural}%
+\UnicodeMathSymbol{"0266F}{\sharp }{\mathord}{musical sharp}%
+\UnicodeMathSymbol{"0267E}{\acidfree }{\mathord}{permanent paper sign}%
+\UnicodeMathSymbol{"02680}{\dicei }{\mathord}{die face-1}%
+\UnicodeMathSymbol{"02681}{\diceii }{\mathord}{die face-2}%
+\UnicodeMathSymbol{"02682}{\diceiii }{\mathord}{die face-3}%
+\UnicodeMathSymbol{"02683}{\diceiv }{\mathord}{die face-4}%
+\UnicodeMathSymbol{"02684}{\dicev }{\mathord}{die face-5}%
+\UnicodeMathSymbol{"02685}{\dicevi }{\mathord}{die face-6}%
+\UnicodeMathSymbol{"02686}{\circledrightdot }{\mathord}{white circle with dot right}%
+\UnicodeMathSymbol{"02687}{\circledtwodots }{\mathord}{white circle with two dots}%
+\UnicodeMathSymbol{"02688}{\blackcircledrightdot }{\mathord}{black circle with white dot right}%
+\UnicodeMathSymbol{"02689}{\blackcircledtwodots }{\mathord}{black circle with two white dots}%
+\UnicodeMathSymbol{"026A5}{\Hermaphrodite }{\mathord}{male and female sign}%
+\UnicodeMathSymbol{"026AA}{\mdwhtcircle }{\mathord}{medium white circle}%
+\UnicodeMathSymbol{"026AB}{\mdblkcircle }{\mathord}{medium black circle}%
+\UnicodeMathSymbol{"026AC}{\mdsmwhtcircle }{\mathord}{medium small white circle}%
+\UnicodeMathSymbol{"026B2}{\neuter }{\mathord}{neuter}%
+\UnicodeMathSymbol{"02713}{\checkmark }{\mathord}{tick, check mark}%
+\UnicodeMathSymbol{"02720}{\maltese }{\mathord}{maltese cross}%
+\UnicodeMathSymbol{"0272A}{\circledstar }{\mathord}{circled white star}%
+\UnicodeMathSymbol{"02736}{\varstar }{\mathord}{six pointed black star}%
+\UnicodeMathSymbol{"0273D}{\dingasterisk }{\mathord}{heavy teardrop-spoked asterisk}%
+\UnicodeMathSymbol{"02772}{\lbrbrak }{\mathopen}{light left tortoise shell bracket ornament}%
+\UnicodeMathSymbol{"02773}{\rbrbrak }{\mathclose}{light right tortoise shell bracket ornament}%
+\UnicodeMathSymbol{"0279B}{\draftingarrow }{\mathord}{right arrow with bold head (drafting)}%
+\UnicodeMathSymbol{"027C0}{\threedangle }{\mathord}{three dimensional angle}%
+\UnicodeMathSymbol{"027C1}{\whiteinwhitetriangle }{\mathord}{white triangle containing small white triangle}%
+\UnicodeMathSymbol{"027C2}{\perp }{\mathrel}{perpendicular}%
+\UnicodeMathSymbol{"027C3}{\subsetcirc }{\mathord}{open subset}%
+\UnicodeMathSymbol{"027C4}{\supsetcirc }{\mathord}{open superset}%
+\UnicodeMathSymbol{"027C5}{\lbag }{\mathopen}{left s-shaped bag delimiter}%
+\UnicodeMathSymbol{"027C6}{\rbag }{\mathclose}{right s-shaped bag delimiter}%
+\UnicodeMathSymbol{"027C7}{\veedot }{\mathbin}{or with dot inside}%
+\UnicodeMathSymbol{"027C8}{\bsolhsub }{\mathrel}{reverse solidus preceding subset}%
+\UnicodeMathSymbol{"027C9}{\suphsol }{\mathrel}{superset preceding solidus}%
+\UnicodeMathSymbol{"027CC}{\longdivision }{\mathopen}{long division}%
+\UnicodeMathSymbol{"027D0}{\diamondcdot }{\mathord}{white diamond with centred dot}%
+\UnicodeMathSymbol{"027D1}{\wedgedot }{\mathbin}{and with dot}%
+\UnicodeMathSymbol{"027D2}{\upin }{\mathrel}{element of opening upwards}%
+\UnicodeMathSymbol{"027D3}{\pullback }{\mathrel}{lower right corner with dot}%
+\UnicodeMathSymbol{"027D4}{\pushout }{\mathrel}{upper left corner with dot}%
+\UnicodeMathSymbol{"027D5}{\leftouterjoin }{\mathop}{left outer join}%
+\UnicodeMathSymbol{"027D6}{\rightouterjoin }{\mathop}{right outer join}%
+\UnicodeMathSymbol{"027D7}{\fullouterjoin }{\mathop}{full outer join}%
+\UnicodeMathSymbol{"027D8}{\bigbot }{\mathop}{large up tack}%
+\UnicodeMathSymbol{"027D9}{\bigtop }{\mathop}{large down tack}%
+\UnicodeMathSymbol{"027DA}{\DashVDash }{\mathrel}{left and right double turnstile}%
+\UnicodeMathSymbol{"027DB}{\dashVdash }{\mathrel}{left and right tack}%
+\UnicodeMathSymbol{"027DC}{\multimapinv }{\mathrel}{left multimap}%
+\UnicodeMathSymbol{"027DD}{\vlongdash }{\mathrel}{long left tack}%
+\UnicodeMathSymbol{"027DE}{\longdashv }{\mathrel}{long right tack}%
+\UnicodeMathSymbol{"027DF}{\cirbot }{\mathrel}{up tack with circle above}%
+\UnicodeMathSymbol{"027E0}{\lozengeminus }{\mathbin}{lozenge divided by horizontal rule}%
+\UnicodeMathSymbol{"027E1}{\concavediamond }{\mathbin}{white concave-sided diamond}%
+\UnicodeMathSymbol{"027E2}{\concavediamondtickleft }{\mathbin}{white concave-sided diamond with leftwards tick}%
+\UnicodeMathSymbol{"027E3}{\concavediamondtickright }{\mathbin}{white concave-sided diamond with rightwards tick}%
+\UnicodeMathSymbol{"027E4}{\whitesquaretickleft }{\mathbin}{white square with leftwards tick}%
+\UnicodeMathSymbol{"027E5}{\whitesquaretickright }{\mathbin}{white square with rightwards tick}%
+\UnicodeMathSymbol{"027E6}{\lBrack }{\mathopen}{mathematical left white square bracket}%
+\UnicodeMathSymbol{"027E7}{\rBrack }{\mathclose}{mathematical right white square bracket}%
+\UnicodeMathSymbol{"027E8}{\langle }{\mathopen}{mathematical left angle bracket}%
+\UnicodeMathSymbol{"027E9}{\rangle }{\mathclose}{mathematical right angle bracket}%
+\UnicodeMathSymbol{"027EA}{\lAngle }{\mathopen}{mathematical left double angle bracket}%
+\UnicodeMathSymbol{"027EB}{\rAngle }{\mathclose}{mathematical right double angle bracket}%
+\UnicodeMathSymbol{"027EC}{\Lbrbrak }{\mathopen}{mathematical left white tortoise shell bracket}%
+\UnicodeMathSymbol{"027ED}{\Rbrbrak }{\mathclose}{mathematical right white tortoise shell bracket}%
+\UnicodeMathSymbol{"027EE}{\lgroup }{\mathopen}{mathematical left flattened parenthesis}%
+\UnicodeMathSymbol{"027EF}{\rgroup }{\mathclose}{mathematical right flattened parenthesis}%
+\UnicodeMathSymbol{"027F0}{\UUparrow }{\mathrel}{upwards quadruple arrow}%
+\UnicodeMathSymbol{"027F1}{\DDownarrow }{\mathrel}{downwards quadruple arrow}%
+\UnicodeMathSymbol{"027F2}{\acwgapcirclearrow }{\mathrel}{anticlockwise gapped circle arrow}%
+\UnicodeMathSymbol{"027F3}{\cwgapcirclearrow }{\mathrel}{clockwise gapped circle arrow}%
+\UnicodeMathSymbol{"027F4}{\rightarrowonoplus }{\mathrel}{right arrow with circled plus}%
+\UnicodeMathSymbol{"027F5}{\longleftarrow }{\mathrel}{long leftwards arrow}%
+\UnicodeMathSymbol{"027F6}{\longrightarrow }{\mathrel}{long rightwards arrow}%
+\UnicodeMathSymbol{"027F7}{\longleftrightarrow }{\mathrel}{long left right arrow}%
+\UnicodeMathSymbol{"027F8}{\Longleftarrow }{\mathrel}{long leftwards double arrow}%
+\UnicodeMathSymbol{"027F9}{\Longrightarrow }{\mathrel}{long rightwards double arrow}%
+\UnicodeMathSymbol{"027FA}{\Longleftrightarrow }{\mathrel}{long left right double arrow}%
+\UnicodeMathSymbol{"027FB}{\longmapsfrom }{\mathrel}{long leftwards arrow from bar}%
+\UnicodeMathSymbol{"027FC}{\longmapsto }{\mathrel}{long rightwards arrow from bar}%
+\UnicodeMathSymbol{"027FD}{\Longmapsfrom }{\mathrel}{long leftwards double arrow from bar}%
+\UnicodeMathSymbol{"027FE}{\Longmapsto }{\mathrel}{long rightwards double arrow from bar}%
+\UnicodeMathSymbol{"027FF}{\longrightsquigarrow }{\mathrel}{long rightwards squiggle arrow}%
+\UnicodeMathSymbol{"02900}{\nvtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with vertical stroke}%
+\UnicodeMathSymbol{"02901}{\nVtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with double vertical stroke}%
+\UnicodeMathSymbol{"02902}{\nvLeftarrow }{\mathrel}{leftwards double arrow with vertical stroke}%
+\UnicodeMathSymbol{"02903}{\nvRightarrow }{\mathrel}{rightwards double arrow with vertical stroke}%
+\UnicodeMathSymbol{"02904}{\nvLeftrightarrow }{\mathrel}{left right double arrow with vertical stroke}%
+\UnicodeMathSymbol{"02905}{\twoheadmapsto }{\mathrel}{rightwards two-headed arrow from bar}%
+\UnicodeMathSymbol{"02906}{\Mapsfrom }{\mathrel}{leftwards double arrow from bar}%
+\UnicodeMathSymbol{"02907}{\Mapsto }{\mathrel}{rightwards double arrow from bar}%
+\UnicodeMathSymbol{"02908}{\downarrowbarred }{\mathrel}{downwards arrow with horizontal stroke}%
+\UnicodeMathSymbol{"02909}{\uparrowbarred }{\mathrel}{upwards arrow with horizontal stroke}%
+\UnicodeMathSymbol{"0290A}{\Uuparrow }{\mathrel}{upwards triple arrow}%
+\UnicodeMathSymbol{"0290B}{\Ddownarrow }{\mathrel}{downwards triple arrow}%
+\UnicodeMathSymbol{"0290C}{\leftbkarrow }{\mathrel}{leftwards double dash arrow}%
+\UnicodeMathSymbol{"0290D}{\rightbkarrow }{\mathrel}{rightwards double dash arrow}%
+\UnicodeMathSymbol{"0290E}{\leftdbkarrow }{\mathrel}{leftwards triple dash arrow}%
+\UnicodeMathSymbol{"0290F}{\dbkarrow }{\mathrel}{rightwards triple dash arrow}%
+\UnicodeMathSymbol{"02910}{\drbkarrow }{\mathrel}{rightwards two-headed triple dash arrow}%
+\UnicodeMathSymbol{"02911}{\rightdotarrow }{\mathrel}{rightwards arrow with dotted stem}%
+\UnicodeMathSymbol{"02912}{\baruparrow }{\mathrel}{upwards arrow to bar}%
+\UnicodeMathSymbol{"02913}{\downarrowbar }{\mathrel}{downwards arrow to bar}%
+\UnicodeMathSymbol{"02914}{\nvrightarrowtail }{\mathrel}{rightwards arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02915}{\nVrightarrowtail }{\mathrel}{rightwards arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02916}{\twoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail}%
+\UnicodeMathSymbol{"02917}{\nvtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02918}{\nVtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02919}{\lefttail }{\mathrel}{leftwards arrow-tail}%
+\UnicodeMathSymbol{"0291A}{\righttail }{\mathrel}{rightwards arrow-tail}%
+\UnicodeMathSymbol{"0291B}{\leftdbltail }{\mathrel}{leftwards double arrow-tail}%
+\UnicodeMathSymbol{"0291C}{\rightdbltail }{\mathrel}{rightwards double arrow-tail}%
+\UnicodeMathSymbol{"0291D}{\diamondleftarrow }{\mathrel}{leftwards arrow to black diamond}%
+\UnicodeMathSymbol{"0291E}{\rightarrowdiamond }{\mathrel}{rightwards arrow to black diamond}%
+\UnicodeMathSymbol{"0291F}{\diamondleftarrowbar }{\mathrel}{leftwards arrow from bar to black diamond}%
+\UnicodeMathSymbol{"02920}{\barrightarrowdiamond }{\mathrel}{rightwards arrow from bar to black diamond}%
+\UnicodeMathSymbol{"02921}{\nwsearrow }{\mathrel}{north west and south east arrow}%
+\UnicodeMathSymbol{"02922}{\neswarrow }{\mathrel}{north east and south west arrow}%
+\UnicodeMathSymbol{"02923}{\hknwarrow }{\mathrel}{north west arrow with hook}%
+\UnicodeMathSymbol{"02924}{\hknearrow }{\mathrel}{north east arrow with hook}%
+\UnicodeMathSymbol{"02925}{\hksearrow }{\mathrel}{south east arrow with hook}%
+\UnicodeMathSymbol{"02926}{\hkswarrow }{\mathrel}{south west arrow with hook}%
+\UnicodeMathSymbol{"02927}{\tona }{\mathrel}{north west arrow and north east arrow}%
+\UnicodeMathSymbol{"02928}{\toea }{\mathrel}{north east arrow and south east arrow}%
+\UnicodeMathSymbol{"02929}{\tosa }{\mathrel}{south east arrow and south west arrow}%
+\UnicodeMathSymbol{"0292A}{\towa }{\mathrel}{south west arrow and north west arrow}%
+\UnicodeMathSymbol{"0292B}{\rdiagovfdiag }{\mathord}{rising diagonal crossing falling diagonal}%
+\UnicodeMathSymbol{"0292C}{\fdiagovrdiag }{\mathord}{falling diagonal crossing rising diagonal}%
+\UnicodeMathSymbol{"0292D}{\seovnearrow }{\mathord}{south east arrow crossing north east arrow}%
+\UnicodeMathSymbol{"0292E}{\neovsearrow }{\mathord}{north east arrow crossing south east arrow}%
+\UnicodeMathSymbol{"0292F}{\fdiagovnearrow }{\mathord}{falling diagonal crossing north east arrow}%
+\UnicodeMathSymbol{"02930}{\rdiagovsearrow }{\mathord}{rising diagonal crossing south east arrow}%
+\UnicodeMathSymbol{"02931}{\neovnwarrow }{\mathord}{north east arrow crossing north west arrow}%
+\UnicodeMathSymbol{"02932}{\nwovnearrow }{\mathord}{north west arrow crossing north east arrow}%
+\UnicodeMathSymbol{"02933}{\rightcurvedarrow }{\mathrel}{wave arrow pointing directly right}%
+\UnicodeMathSymbol{"02934}{\uprightcurvearrow }{\mathord}{arrow pointing rightwards then curving upwards}%
+\UnicodeMathSymbol{"02935}{\downrightcurvedarrow }{\mathord}{arrow pointing rightwards then curving downwards}%
+\UnicodeMathSymbol{"02936}{\leftdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving leftwards}%
+\UnicodeMathSymbol{"02937}{\rightdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving rightwards}%
+\UnicodeMathSymbol{"02938}{\cwrightarcarrow }{\mathrel}{right-side arc clockwise arrow}%
+\UnicodeMathSymbol{"02939}{\acwleftarcarrow }{\mathrel}{left-side arc anticlockwise arrow}%
+\UnicodeMathSymbol{"0293A}{\acwoverarcarrow }{\mathrel}{top arc anticlockwise arrow}%
+\UnicodeMathSymbol{"0293B}{\acwunderarcarrow }{\mathrel}{bottom arc anticlockwise arrow}%
+\UnicodeMathSymbol{"0293C}{\curvearrowrightminus }{\mathrel}{top arc clockwise arrow with minus}%
+\UnicodeMathSymbol{"0293D}{\curvearrowleftplus }{\mathrel}{top arc anticlockwise arrow with plus}%
+\UnicodeMathSymbol{"0293E}{\cwundercurvearrow }{\mathrel}{lower right semicircular clockwise arrow}%
+\UnicodeMathSymbol{"0293F}{\ccwundercurvearrow }{\mathrel}{lower left semicircular anticlockwise arrow}%
+\UnicodeMathSymbol{"02940}{\acwcirclearrow }{\mathrel}{anticlockwise closed circle arrow}%
+\UnicodeMathSymbol{"02941}{\cwcirclearrow }{\mathrel}{clockwise closed circle arrow}%
+\UnicodeMathSymbol{"02942}{\rightarrowshortleftarrow }{\mathrel}{rightwards arrow above short leftwards arrow}%
+\UnicodeMathSymbol{"02943}{\leftarrowshortrightarrow }{\mathrel}{leftwards arrow above short rightwards arrow}%
+\UnicodeMathSymbol{"02944}{\shortrightarrowleftarrow }{\mathrel}{short rightwards arrow above leftwards arrow}%
+\UnicodeMathSymbol{"02945}{\rightarrowplus }{\mathrel}{rightwards arrow with plus below}%
+\UnicodeMathSymbol{"02946}{\leftarrowplus }{\mathrel}{leftwards arrow with plus below}%
+\UnicodeMathSymbol{"02947}{\rightarrowx }{\mathrel}{rightwards arrow through x}%
+\UnicodeMathSymbol{"02948}{\leftrightarrowcircle }{\mathrel}{left right arrow through small circle}%
+\UnicodeMathSymbol{"02949}{\twoheaduparrowcircle }{\mathrel}{upwards two-headed arrow from small circle}%
+\UnicodeMathSymbol{"0294A}{\leftrightharpoonupdown }{\mathrel}{left barb up right barb down harpoon}%
+\UnicodeMathSymbol{"0294B}{\leftrightharpoondownup }{\mathrel}{left barb down right barb up harpoon}%
+\UnicodeMathSymbol{"0294C}{\updownharpoonrightleft }{\mathrel}{up barb right down barb left harpoon}%
+\UnicodeMathSymbol{"0294D}{\updownharpoonleftright }{\mathrel}{up barb left down barb right harpoon}%
+\UnicodeMathSymbol{"0294E}{\leftrightharpoonupup }{\mathrel}{left barb up right barb up harpoon}%
+\UnicodeMathSymbol{"0294F}{\updownharpoonrightright }{\mathrel}{up barb right down barb right harpoon}%
+\UnicodeMathSymbol{"02950}{\leftrightharpoondowndown }{\mathrel}{left barb down right barb down harpoon}%
+\UnicodeMathSymbol{"02951}{\updownharpoonleftleft }{\mathrel}{up barb left down barb left harpoon}%
+\UnicodeMathSymbol{"02952}{\barleftharpoonup }{\mathrel}{leftwards harpoon with barb up to bar}%
+\UnicodeMathSymbol{"02953}{\rightharpoonupbar }{\mathrel}{rightwards harpoon with barb up to bar}%
+\UnicodeMathSymbol{"02954}{\barupharpoonright }{\mathrel}{upwards harpoon with barb right to bar}%
+\UnicodeMathSymbol{"02955}{\downharpoonrightbar }{\mathrel}{downwards harpoon with barb right to bar}%
+\UnicodeMathSymbol{"02956}{\barleftharpoondown }{\mathrel}{leftwards harpoon with barb down to bar}%
+\UnicodeMathSymbol{"02957}{\rightharpoondownbar }{\mathrel}{rightwards harpoon with barb down to bar}%
+\UnicodeMathSymbol{"02958}{\barupharpoonleft }{\mathrel}{upwards harpoon with barb left to bar}%
+\UnicodeMathSymbol{"02959}{\downharpoonleftbar }{\mathrel}{downwards harpoon with barb left to bar}%
+\UnicodeMathSymbol{"0295A}{\leftharpoonupbar }{\mathrel}{leftwards harpoon with barb up from bar}%
+\UnicodeMathSymbol{"0295B}{\barrightharpoonup }{\mathrel}{rightwards harpoon with barb up from bar}%
+\UnicodeMathSymbol{"0295C}{\upharpoonrightbar }{\mathrel}{upwards harpoon with barb right from bar}%
+\UnicodeMathSymbol{"0295D}{\bardownharpoonright }{\mathrel}{downwards harpoon with barb right from bar}%
+\UnicodeMathSymbol{"0295E}{\leftharpoondownbar }{\mathrel}{leftwards harpoon with barb down from bar}%
+\UnicodeMathSymbol{"0295F}{\barrightharpoondown }{\mathrel}{rightwards harpoon with barb down from bar}%
+\UnicodeMathSymbol{"02960}{\upharpoonleftbar }{\mathrel}{upwards harpoon with barb left from bar}%
+\UnicodeMathSymbol{"02961}{\bardownharpoonleft }{\mathrel}{downwards harpoon with barb left from bar}%
+\UnicodeMathSymbol{"02962}{\leftharpoonsupdown }{\mathrel}{leftwards harpoon with barb up above leftwards harpoon with barb down}%
+\UnicodeMathSymbol{"02963}{\upharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside upwards harpoon with barb right}%
+\UnicodeMathSymbol{"02964}{\rightharpoonsupdown }{\mathrel}{rightwards harpoon with barb up above rightwards harpoon with barb down}%
+\UnicodeMathSymbol{"02965}{\downharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside downwards harpoon with barb right}%
+\UnicodeMathSymbol{"02966}{\leftrightharpoonsup }{\mathrel}{leftwards harpoon with barb up above rightwards harpoon with barb up}%
+\UnicodeMathSymbol{"02967}{\leftrightharpoonsdown }{\mathrel}{leftwards harpoon with barb down above rightwards harpoon with barb down}%
+\UnicodeMathSymbol{"02968}{\rightleftharpoonsup }{\mathrel}{rightwards harpoon with barb up above leftwards harpoon with barb up}%
+\UnicodeMathSymbol{"02969}{\rightleftharpoonsdown }{\mathrel}{rightwards harpoon with barb down above leftwards harpoon with barb down}%
+\UnicodeMathSymbol{"0296A}{\leftharpoonupdash }{\mathrel}{leftwards harpoon with barb up above long dash}%
+\UnicodeMathSymbol{"0296B}{\dashleftharpoondown }{\mathrel}{leftwards harpoon with barb down below long dash}%
+\UnicodeMathSymbol{"0296C}{\rightharpoonupdash }{\mathrel}{rightwards harpoon with barb up above long dash}%
+\UnicodeMathSymbol{"0296D}{\dashrightharpoondown }{\mathrel}{rightwards harpoon with barb down below long dash}%
+\UnicodeMathSymbol{"0296E}{\updownharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside downwards harpoon with barb right}%
+\UnicodeMathSymbol{"0296F}{\downupharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside upwards harpoon with barb right}%
+\UnicodeMathSymbol{"02970}{\rightimply }{\mathrel}{right double arrow with rounded head}%
+\UnicodeMathSymbol{"02971}{\equalrightarrow }{\mathrel}{equals sign above rightwards arrow}%
+\UnicodeMathSymbol{"02972}{\similarrightarrow }{\mathrel}{tilde operator above rightwards arrow}%
+\UnicodeMathSymbol{"02973}{\leftarrowsimilar }{\mathrel}{leftwards arrow above tilde operator}%
+\UnicodeMathSymbol{"02974}{\rightarrowsimilar }{\mathrel}{rightwards arrow above tilde operator}%
+\UnicodeMathSymbol{"02975}{\rightarrowapprox }{\mathrel}{rightwards arrow above almost equal to}%
+\UnicodeMathSymbol{"02976}{\ltlarr }{\mathrel}{less-than above leftwards arrow}%
+\UnicodeMathSymbol{"02977}{\leftarrowless }{\mathrel}{leftwards arrow through less-than}%
+\UnicodeMathSymbol{"02978}{\gtrarr }{\mathrel}{greater-than above rightwards arrow}%
+\UnicodeMathSymbol{"02979}{\subrarr }{\mathrel}{subset above rightwards arrow}%
+\UnicodeMathSymbol{"0297A}{\leftarrowsubset }{\mathrel}{leftwards arrow through subset}%
+\UnicodeMathSymbol{"0297B}{\suplarr }{\mathrel}{superset above leftwards arrow}%
+\UnicodeMathSymbol{"0297C}{\leftfishtail }{\mathrel}{left fish tail}%
+\UnicodeMathSymbol{"0297D}{\rightfishtail }{\mathrel}{right fish tail}%
+\UnicodeMathSymbol{"0297E}{\upfishtail }{\mathrel}{up fish tail}%
+\UnicodeMathSymbol{"0297F}{\downfishtail }{\mathrel}{down fish tail}%
+\UnicodeMathSymbol{"02980}{\Vvert }{\mathfence}{triple vertical bar delimiter}%
+\UnicodeMathSymbol{"02981}{\mdsmblkcircle }{\mathord}{z notation spot}%
+\UnicodeMathSymbol{"02982}{\typecolon }{\mathrel}{z notation type colon}%
+\UnicodeMathSymbol{"02983}{\lBrace }{\mathopen}{left white curly bracket}%
+\UnicodeMathSymbol{"02984}{\rBrace }{\mathclose}{right white curly bracket}%
+\UnicodeMathSymbol{"02985}{\lParen }{\mathopen}{left white parenthesis}%
+\UnicodeMathSymbol{"02986}{\rParen }{\mathclose}{right white parenthesis}%
+\UnicodeMathSymbol{"02987}{\llparenthesis }{\mathopen}{z notation left image bracket}%
+\UnicodeMathSymbol{"02988}{\rrparenthesis }{\mathclose}{z notation right image bracket}%
+\UnicodeMathSymbol{"02989}{\llangle }{\mathopen}{z notation left binding bracket}%
+\UnicodeMathSymbol{"0298A}{\rrangle }{\mathclose}{z notation right binding bracket}%
+\UnicodeMathSymbol{"0298B}{\lbrackubar }{\mathopen}{left square bracket with underbar}%
+\UnicodeMathSymbol{"0298C}{\rbrackubar }{\mathclose}{right square bracket with underbar}%
+\UnicodeMathSymbol{"0298D}{\lbrackultick }{\mathopen}{left square bracket with tick in top corner}%
+\UnicodeMathSymbol{"0298E}{\rbracklrtick }{\mathclose}{right square bracket with tick in bottom corner}%
+\UnicodeMathSymbol{"0298F}{\lbracklltick }{\mathopen}{left square bracket with tick in bottom corner}%
+\UnicodeMathSymbol{"02990}{\rbrackurtick }{\mathclose}{right square bracket with tick in top corner}%
+\UnicodeMathSymbol{"02991}{\langledot }{\mathopen}{left angle bracket with dot}%
+\UnicodeMathSymbol{"02992}{\rangledot }{\mathclose}{right angle bracket with dot}%
+\UnicodeMathSymbol{"02993}{\lparenless }{\mathopen}{left arc less-than bracket}%
+\UnicodeMathSymbol{"02994}{\rparengtr }{\mathclose}{right arc greater-than bracket}%
+\UnicodeMathSymbol{"02995}{\Lparengtr }{\mathopen}{double left arc greater-than bracket}%
+\UnicodeMathSymbol{"02996}{\Rparenless }{\mathclose}{double right arc less-than bracket}%
+\UnicodeMathSymbol{"02997}{\lblkbrbrak }{\mathopen}{left black tortoise shell bracket}%
+\UnicodeMathSymbol{"02998}{\rblkbrbrak }{\mathclose}{right black tortoise shell bracket}%
+\UnicodeMathSymbol{"02999}{\fourvdots }{\mathord}{dotted fence}%
+\UnicodeMathSymbol{"0299A}{\vzigzag }{\mathord}{vertical zigzag line}%
+\UnicodeMathSymbol{"0299B}{\measuredangleleft }{\mathord}{measured angle opening left}%
+\UnicodeMathSymbol{"0299C}{\rightanglesqr }{\mathord}{right angle variant with square}%
+\UnicodeMathSymbol{"0299D}{\rightanglemdot }{\mathord}{measured right angle with dot}%
+\UnicodeMathSymbol{"0299E}{\angles }{\mathord}{angle with s inside}%
+\UnicodeMathSymbol{"0299F}{\angdnr }{\mathord}{acute angle}%
+\UnicodeMathSymbol{"029A0}{\gtlpar }{\mathord}{spherical angle opening left}%
+\UnicodeMathSymbol{"029A1}{\sphericalangleup }{\mathord}{spherical angle opening up}%
+\UnicodeMathSymbol{"029A2}{\turnangle }{\mathord}{turned angle}%
+\UnicodeMathSymbol{"029A3}{\revangle }{\mathord}{reversed angle}%
+\UnicodeMathSymbol{"029A4}{\angleubar }{\mathord}{angle with underbar}%
+\UnicodeMathSymbol{"029A5}{\revangleubar }{\mathord}{reversed angle with underbar}%
+\UnicodeMathSymbol{"029A6}{\wideangledown }{\mathord}{oblique angle opening up}%
+\UnicodeMathSymbol{"029A7}{\wideangleup }{\mathord}{oblique angle opening down}%
+\UnicodeMathSymbol{"029A8}{\measanglerutone }{\mathord}{measured angle with open arm ending in arrow pointing up and right}%
+\UnicodeMathSymbol{"029A9}{\measanglelutonw }{\mathord}{measured angle with open arm ending in arrow pointing up and left}%
+\UnicodeMathSymbol{"029AA}{\measanglerdtose }{\mathord}{measured angle with open arm ending in arrow pointing down and right}%
+\UnicodeMathSymbol{"029AB}{\measangleldtosw }{\mathord}{measured angle with open arm ending in arrow pointing down and left}%
+\UnicodeMathSymbol{"029AC}{\measangleurtone }{\mathord}{measured angle with open arm ending in arrow pointing right and up}%
+\UnicodeMathSymbol{"029AD}{\measangleultonw }{\mathord}{measured angle with open arm ending in arrow pointing left and up}%
+\UnicodeMathSymbol{"029AE}{\measangledrtose }{\mathord}{measured angle with open arm ending in arrow pointing right and down}%
+\UnicodeMathSymbol{"029AF}{\measangledltosw }{\mathord}{measured angle with open arm ending in arrow pointing left and down}%
+\UnicodeMathSymbol{"029B0}{\revemptyset }{\mathord}{reversed empty set}%
+\UnicodeMathSymbol{"029B1}{\emptysetobar }{\mathord}{empty set with overbar}%
+\UnicodeMathSymbol{"029B2}{\emptysetocirc }{\mathord}{empty set with small circle above}%
+\UnicodeMathSymbol{"029B3}{\emptysetoarr }{\mathord}{empty set with right arrow above}%
+\UnicodeMathSymbol{"029B4}{\emptysetoarrl }{\mathord}{empty set with left arrow above}%
+\UnicodeMathSymbol{"029B5}{\circlehbar }{\mathbin}{circle with horizontal bar}%
+\UnicodeMathSymbol{"029B6}{\circledvert }{\mathbin}{circled vertical bar}%
+\UnicodeMathSymbol{"029B7}{\circledparallel }{\mathbin}{circled parallel}%
+\UnicodeMathSymbol{"029B8}{\obslash }{\mathbin}{circled reverse solidus}%
+\UnicodeMathSymbol{"029B9}{\operp }{\mathbin}{circled perpendicular}%
+\UnicodeMathSymbol{"029BA}{\obot }{\mathord}{circle divided by horizontal bar and top half divided by vertical bar}%
+\UnicodeMathSymbol{"029BB}{\olcross }{\mathord}{circle with superimposed x}%
+\UnicodeMathSymbol{"029BC}{\odotslashdot }{\mathord}{circled anticlockwise-rotated division sign}%
+\UnicodeMathSymbol{"029BD}{\uparrowoncircle }{\mathord}{up arrow through circle}%
+\UnicodeMathSymbol{"029BE}{\circledwhitebullet }{\mathord}{circled white bullet}%
+\UnicodeMathSymbol{"029BF}{\circledbullet }{\mathord}{circled bullet}%
+\UnicodeMathSymbol{"029C0}{\olessthan }{\mathbin}{circled less-than}%
+\UnicodeMathSymbol{"029C1}{\ogreaterthan }{\mathbin}{circled greater-than}%
+\UnicodeMathSymbol{"029C2}{\cirscir }{\mathord}{circle with small circle to the right}%
+\UnicodeMathSymbol{"029C3}{\cirE }{\mathord}{circle with two horizontal strokes to the right}%
+\UnicodeMathSymbol{"029C4}{\boxdiag }{\mathbin}{squared rising diagonal slash}%
+\UnicodeMathSymbol{"029C5}{\boxbslash }{\mathbin}{squared falling diagonal slash}%
+\UnicodeMathSymbol{"029C6}{\boxast }{\mathbin}{squared asterisk}%
+\UnicodeMathSymbol{"029C7}{\boxcircle }{\mathbin}{squared small circle}%
+\UnicodeMathSymbol{"029C8}{\boxbox }{\mathbin}{squared square}%
+\UnicodeMathSymbol{"029C9}{\boxonbox }{\mathord}{two joined squares}%
+\UnicodeMathSymbol{"029CA}{\triangleodot }{\mathord}{triangle with dot above}%
+\UnicodeMathSymbol{"029CB}{\triangleubar }{\mathord}{triangle with underbar}%
+\UnicodeMathSymbol{"029CC}{\triangles }{\mathord}{s in triangle}%
+\UnicodeMathSymbol{"029CD}{\triangleserifs }{\mathbin}{triangle with serifs at bottom}%
+\UnicodeMathSymbol{"029CE}{\rtriltri }{\mathrel}{right triangle above left triangle}%
+\UnicodeMathSymbol{"029CF}{\ltrivb }{\mathrel}{left triangle beside vertical bar}%
+\UnicodeMathSymbol{"029D0}{\vbrtri }{\mathrel}{vertical bar beside right triangle}%
+\UnicodeMathSymbol{"029D1}{\lfbowtie }{\mathrel}{left black bowtie}%
+\UnicodeMathSymbol{"029D2}{\rfbowtie }{\mathrel}{right black bowtie}%
+\UnicodeMathSymbol{"029D3}{\fbowtie }{\mathrel}{black bowtie}%
+\UnicodeMathSymbol{"029D4}{\lftimes }{\mathrel}{left black times}%
+\UnicodeMathSymbol{"029D5}{\rftimes }{\mathrel}{right black times}%
+\UnicodeMathSymbol{"029D6}{\hourglass }{\mathbin}{white hourglass}%
+\UnicodeMathSymbol{"029D7}{\blackhourglass }{\mathbin}{black hourglass}%
+\UnicodeMathSymbol{"029D8}{\lvzigzag }{\mathopen}{left wiggly fence}%
+\UnicodeMathSymbol{"029D9}{\rvzigzag }{\mathclose}{right wiggly fence}%
+\UnicodeMathSymbol{"029DA}{\Lvzigzag }{\mathopen}{left double wiggly fence}%
+\UnicodeMathSymbol{"029DB}{\Rvzigzag }{\mathclose}{right double wiggly fence}%
+\UnicodeMathSymbol{"029DC}{\iinfin }{\mathord}{incomplete infinity}%
+\UnicodeMathSymbol{"029DD}{\tieinfty }{\mathord}{tie over infinity}%
+\UnicodeMathSymbol{"029DE}{\nvinfty }{\mathord}{infinity negated with vertical bar}%
+\UnicodeMathSymbol{"029DF}{\dualmap }{\mathrel}{double-ended multimap}%
+\UnicodeMathSymbol{"029E0}{\laplac }{\mathord}{square with contoured outline}%
+\UnicodeMathSymbol{"029E1}{\lrtriangleeq }{\mathrel}{increases as}%
+\UnicodeMathSymbol{"029E2}{\shuffle }{\mathbin}{shuffle product}%
+\UnicodeMathSymbol{"029E3}{\eparsl }{\mathrel}{equals sign and slanted parallel}%
+\UnicodeMathSymbol{"029E4}{\smeparsl }{\mathrel}{equals sign and slanted parallel with tilde above}%
+\UnicodeMathSymbol{"029E5}{\eqvparsl }{\mathrel}{identical to and slanted parallel}%
+\UnicodeMathSymbol{"029E6}{\gleichstark }{\mathrel}{gleich stark}%
+\UnicodeMathSymbol{"029E7}{\thermod }{\mathord}{thermodynamic}%
+\UnicodeMathSymbol{"029E8}{\downtriangleleftblack }{\mathord}{down-pointing triangle with left half black}%
+\UnicodeMathSymbol{"029E9}{\downtrianglerightblack }{\mathord}{down-pointing triangle with right half black}%
+\UnicodeMathSymbol{"029EA}{\blackdiamonddownarrow }{\mathord}{black diamond with down arrow}%
+\UnicodeMathSymbol{"029EB}{\mdlgblklozenge }{\mathbin}{black lozenge}%
+\UnicodeMathSymbol{"029EC}{\circledownarrow }{\mathord}{white circle with down arrow}%
+\UnicodeMathSymbol{"029ED}{\blackcircledownarrow }{\mathord}{black circle with down arrow}%
+\UnicodeMathSymbol{"029EE}{\errbarsquare }{\mathord}{error-barred white square}%
+\UnicodeMathSymbol{"029EF}{\errbarblacksquare }{\mathord}{error-barred black square}%
+\UnicodeMathSymbol{"029F0}{\errbardiamond }{\mathord}{error-barred white diamond}%
+\UnicodeMathSymbol{"029F1}{\errbarblackdiamond }{\mathord}{error-barred black diamond}%
+\UnicodeMathSymbol{"029F2}{\errbarcircle }{\mathord}{error-barred white circle}%
+\UnicodeMathSymbol{"029F3}{\errbarblackcircle }{\mathord}{error-barred black circle}%
+\UnicodeMathSymbol{"029F4}{\ruledelayed }{\mathrel}{rule-delayed}%
+\UnicodeMathSymbol{"029F5}{\setminus }{\mathbin}{reverse solidus operator}%
+\UnicodeMathSymbol{"029F6}{\dsol }{\mathbin}{solidus with overbar}%
+\UnicodeMathSymbol{"029F7}{\rsolbar }{\mathbin}{reverse solidus with horizontal stroke}%
+\UnicodeMathSymbol{"029F8}{\xsol }{\mathop}{big solidus}%
+\UnicodeMathSymbol{"029F9}{\xbsol }{\mathop}{big reverse solidus}%
+\UnicodeMathSymbol{"029FA}{\doubleplus }{\mathbin}{double plus}%
+\UnicodeMathSymbol{"029FB}{\tripleplus }{\mathbin}{triple plus}%
+\UnicodeMathSymbol{"029FC}{\lcurvyangle }{\mathopen}{left pointing curved angle bracket}%
+\UnicodeMathSymbol{"029FD}{\rcurvyangle }{\mathclose}{right pointing curved angle bracket}%
+\UnicodeMathSymbol{"029FE}{\tplus }{\mathbin}{tiny}%
+\UnicodeMathSymbol{"029FF}{\tminus }{\mathbin}{miny}%
+\UnicodeMathSymbol{"02A00}{\bigodot }{\mathop}{n-ary circled dot operator}%
+\UnicodeMathSymbol{"02A01}{\bigoplus }{\mathop}{n-ary circled plus operator}%
+\UnicodeMathSymbol{"02A02}{\bigotimes }{\mathop}{n-ary circled times operator}%
+\UnicodeMathSymbol{"02A03}{\bigcupdot }{\mathop}{n-ary union operator with dot}%
+\UnicodeMathSymbol{"02A04}{\biguplus }{\mathop}{n-ary union operator with plus}%
+\UnicodeMathSymbol{"02A05}{\bigsqcap }{\mathop}{n-ary square intersection operator}%
+\UnicodeMathSymbol{"02A06}{\bigsqcup }{\mathop}{n-ary square union operator}%
+\UnicodeMathSymbol{"02A07}{\conjquant }{\mathop}{two logical and operator}%
+\UnicodeMathSymbol{"02A08}{\disjquant }{\mathop}{two logical or operator}%
+\UnicodeMathSymbol{"02A09}{\bigtimes }{\mathop}{n-ary times operator}%
+\UnicodeMathSymbol{"02A0A}{\modtwosum }{\mathop}{modulo two sum}%
+\UnicodeMathSymbol{"02A0B}{\sumint }{\mathop}{summation with integral}%
+\UnicodeMathSymbol{"02A0C}{\iiiint }{\mathop}{quadruple integral operator}%
+\UnicodeMathSymbol{"02A0D}{\intbar }{\mathop}{finite part integral}%
+\UnicodeMathSymbol{"02A0E}{\intBar }{\mathop}{integral with double stroke}%
+\UnicodeMathSymbol{"02A0F}{\fint }{\mathop}{integral average with slash}%
+\UnicodeMathSymbol{"02A10}{\cirfnint }{\mathop}{circulation function}%
+\UnicodeMathSymbol{"02A11}{\awint }{\mathop}{anticlockwise integration}%
+\UnicodeMathSymbol{"02A12}{\rppolint }{\mathop}{line integration with rectangular path around pole}%
+\UnicodeMathSymbol{"02A13}{\scpolint }{\mathop}{line integration with semicircular path around pole}%
+\UnicodeMathSymbol{"02A14}{\npolint }{\mathop}{line integration not including the pole}%
+\UnicodeMathSymbol{"02A15}{\pointint }{\mathop}{integral around a point operator}%
+\UnicodeMathSymbol{"02A16}{\sqint }{\mathop}{quaternion integral operator}%
+\UnicodeMathSymbol{"02A17}{\intlarhk }{\mathop}{integral with leftwards arrow with hook}%
+\UnicodeMathSymbol{"02A18}{\intx }{\mathop}{integral with times sign}%
+\UnicodeMathSymbol{"02A19}{\intcap }{\mathop}{integral with intersection}%
+\UnicodeMathSymbol{"02A1A}{\intcup }{\mathop}{integral with union}%
+\UnicodeMathSymbol{"02A1B}{\upint }{\mathop}{integral with overbar}%
+\UnicodeMathSymbol{"02A1C}{\lowint }{\mathop}{integral with underbar}%
+\UnicodeMathSymbol{"02A1D}{\Join }{\mathop}{join}%
+\UnicodeMathSymbol{"02A1E}{\bigtriangleleft }{\mathop}{large left triangle operator}%
+\UnicodeMathSymbol{"02A1F}{\zcmp }{\mathop}{z notation schema composition}%
+\UnicodeMathSymbol{"02A20}{\zpipe }{\mathop}{z notation schema piping}%
+\UnicodeMathSymbol{"02A21}{\zproject }{\mathop}{z notation schema projection}%
+\UnicodeMathSymbol{"02A22}{\ringplus }{\mathbin}{plus sign with small circle above}%
+\UnicodeMathSymbol{"02A23}{\plushat }{\mathbin}{plus sign with circumflex accent above}%
+\UnicodeMathSymbol{"02A24}{\simplus }{\mathbin}{plus sign with tilde above}%
+\UnicodeMathSymbol{"02A25}{\plusdot }{\mathbin}{plus sign with dot below}%
+\UnicodeMathSymbol{"02A26}{\plussim }{\mathbin}{plus sign with tilde below}%
+\UnicodeMathSymbol{"02A27}{\plussubtwo }{\mathbin}{plus sign with subscript two}%
+\UnicodeMathSymbol{"02A28}{\plustrif }{\mathbin}{plus sign with black triangle}%
+\UnicodeMathSymbol{"02A29}{\commaminus }{\mathbin}{minus sign with comma above}%
+\UnicodeMathSymbol{"02A2A}{\minusdot }{\mathbin}{minus sign with dot below}%
+\UnicodeMathSymbol{"02A2B}{\minusfdots }{\mathbin}{minus sign with falling dots}%
+\UnicodeMathSymbol{"02A2C}{\minusrdots }{\mathbin}{minus sign with rising dots}%
+\UnicodeMathSymbol{"02A2D}{\opluslhrim }{\mathbin}{plus sign in left half circle}%
+\UnicodeMathSymbol{"02A2E}{\oplusrhrim }{\mathbin}{plus sign in right half circle}%
+\UnicodeMathSymbol{"02A2F}{\vectimes }{\mathbin}{vector or cross product}%
+\UnicodeMathSymbol{"02A30}{\dottimes }{\mathbin}{multiplication sign with dot above}%
+\UnicodeMathSymbol{"02A31}{\timesbar }{\mathbin}{multiplication sign with underbar}%
+\UnicodeMathSymbol{"02A32}{\btimes }{\mathbin}{semidirect product with bottom closed}%
+\UnicodeMathSymbol{"02A33}{\smashtimes }{\mathbin}{smash product}%
+\UnicodeMathSymbol{"02A34}{\otimeslhrim }{\mathbin}{multiplication sign in left half circle}%
+\UnicodeMathSymbol{"02A35}{\otimesrhrim }{\mathbin}{multiplication sign in right half circle}%
+\UnicodeMathSymbol{"02A36}{\otimeshat }{\mathbin}{circled multiplication sign with circumflex accent}%
+\UnicodeMathSymbol{"02A37}{\Otimes }{\mathbin}{multiplication sign in double circle}%
+\UnicodeMathSymbol{"02A38}{\odiv }{\mathbin}{circled division sign}%
+\UnicodeMathSymbol{"02A39}{\triangleplus }{\mathbin}{plus sign in triangle}%
+\UnicodeMathSymbol{"02A3A}{\triangleminus }{\mathbin}{minus sign in triangle}%
+\UnicodeMathSymbol{"02A3B}{\triangletimes }{\mathbin}{multiplication sign in triangle}%
+\UnicodeMathSymbol{"02A3C}{\intprod }{\mathbin}{interior product}%
+\UnicodeMathSymbol{"02A3D}{\intprodr }{\mathbin}{righthand interior product}%
+\UnicodeMathSymbol{"02A3E}{\fcmp }{\mathbin}{z notation relational composition}%
+\UnicodeMathSymbol{"02A3F}{\amalg }{\mathbin}{amalgamation or coproduct}%
+\UnicodeMathSymbol{"02A40}{\capdot }{\mathbin}{intersection with dot}%
+\UnicodeMathSymbol{"02A41}{\uminus }{\mathbin}{union with minus sign}%
+\UnicodeMathSymbol{"02A42}{\barcup }{\mathbin}{union with overbar}%
+\UnicodeMathSymbol{"02A43}{\barcap }{\mathbin}{intersection with overbar}%
+\UnicodeMathSymbol{"02A44}{\capwedge }{\mathbin}{intersection with logical and}%
+\UnicodeMathSymbol{"02A45}{\cupvee }{\mathbin}{union with logical or}%
+\UnicodeMathSymbol{"02A46}{\cupovercap }{\mathbin}{union above intersection}%
+\UnicodeMathSymbol{"02A47}{\capovercup }{\mathbin}{intersection above union}%
+\UnicodeMathSymbol{"02A48}{\cupbarcap }{\mathbin}{union above bar above intersection}%
+\UnicodeMathSymbol{"02A49}{\capbarcup }{\mathbin}{intersection above bar above union}%
+\UnicodeMathSymbol{"02A4A}{\twocups }{\mathbin}{union beside and joined with union}%
+\UnicodeMathSymbol{"02A4B}{\twocaps }{\mathbin}{intersection beside and joined with intersection}%
+\UnicodeMathSymbol{"02A4C}{\closedvarcup }{\mathbin}{closed union with serifs}%
+\UnicodeMathSymbol{"02A4D}{\closedvarcap }{\mathbin}{closed intersection with serifs}%
+\UnicodeMathSymbol{"02A4E}{\Sqcap }{\mathbin}{double square intersection}%
+\UnicodeMathSymbol{"02A4F}{\Sqcup }{\mathbin}{double square union}%
+\UnicodeMathSymbol{"02A50}{\closedvarcupsmashprod }{\mathbin}{closed union with serifs and smash product}%
+\UnicodeMathSymbol{"02A51}{\wedgeodot }{\mathbin}{logical and with dot above}%
+\UnicodeMathSymbol{"02A52}{\veeodot }{\mathbin}{logical or with dot above}%
+\UnicodeMathSymbol{"02A53}{\Wedge }{\mathbin}{double logical and}%
+\UnicodeMathSymbol{"02A54}{\Vee }{\mathbin}{double logical or}%
+\UnicodeMathSymbol{"02A55}{\wedgeonwedge }{\mathbin}{two intersecting logical and}%
+\UnicodeMathSymbol{"02A56}{\veeonvee }{\mathbin}{two intersecting logical or}%
+\UnicodeMathSymbol{"02A57}{\bigslopedvee }{\mathbin}{sloping large or}%
+\UnicodeMathSymbol{"02A58}{\bigslopedwedge }{\mathbin}{sloping large and}%
+\UnicodeMathSymbol{"02A59}{\veeonwedge }{\mathrel}{logical or overlapping logical and}%
+\UnicodeMathSymbol{"02A5A}{\wedgemidvert }{\mathbin}{logical and with middle stem}%
+\UnicodeMathSymbol{"02A5B}{\veemidvert }{\mathbin}{logical or with middle stem}%
+\UnicodeMathSymbol{"02A5C}{\midbarwedge }{\mathbin}{ogical and with horizontal dash}%
+\UnicodeMathSymbol{"02A5D}{\midbarvee }{\mathbin}{logical or with horizontal dash}%
+\UnicodeMathSymbol{"02A5E}{\doublebarwedge }{\mathbin}{logical and with double overbar}%
+\UnicodeMathSymbol{"02A5F}{\wedgebar }{\mathbin}{logical and with underbar}%
+\UnicodeMathSymbol{"02A60}{\wedgedoublebar }{\mathbin}{logical and with double underbar}%
+\UnicodeMathSymbol{"02A61}{\varveebar }{\mathbin}{small vee with underbar}%
+\UnicodeMathSymbol{"02A62}{\doublebarvee }{\mathbin}{logical or with double overbar}%
+\UnicodeMathSymbol{"02A63}{\veedoublebar }{\mathbin}{logical or with double underbar}%
+\UnicodeMathSymbol{"02A64}{\dsub }{\mathbin}{z notation domain antirestriction}%
+\UnicodeMathSymbol{"02A65}{\rsub }{\mathbin}{z notation range antirestriction}%
+\UnicodeMathSymbol{"02A66}{\eqdot }{\mathrel}{equals sign with dot below}%
+\UnicodeMathSymbol{"02A67}{\dotequiv }{\mathrel}{identical with dot above}%
+\UnicodeMathSymbol{"02A68}{\equivVert }{\mathrel}{triple horizontal bar with double vertical stroke}%
+\UnicodeMathSymbol{"02A69}{\equivVvert }{\mathrel}{triple horizontal bar with triple vertical stroke}%
+\UnicodeMathSymbol{"02A6A}{\dotsim }{\mathrel}{tilde operator with dot above}%
+\UnicodeMathSymbol{"02A6B}{\simrdots }{\mathrel}{tilde operator with rising dots}%
+\UnicodeMathSymbol{"02A6C}{\simminussim }{\mathrel}{similar minus similar}%
+\UnicodeMathSymbol{"02A6D}{\congdot }{\mathrel}{congruent with dot above}%
+\UnicodeMathSymbol{"02A6E}{\asteq }{\mathrel}{equals with asterisk}%
+\UnicodeMathSymbol{"02A6F}{\hatapprox }{\mathrel}{almost equal to with circumflex accent}%
+\UnicodeMathSymbol{"02A70}{\approxeqq }{\mathrel}{approximately equal or equal to}%
+\UnicodeMathSymbol{"02A71}{\eqqplus }{\mathbin}{equals sign above plus sign}%
+\UnicodeMathSymbol{"02A72}{\pluseqq }{\mathbin}{plus sign above equals sign}%
+\UnicodeMathSymbol{"02A73}{\eqqsim }{\mathrel}{equals sign above tilde operator}%
+\UnicodeMathSymbol{"02A74}{\Coloneq }{\mathrel}{double colon equal}%
+\UnicodeMathSymbol{"02A75}{\eqeq }{\mathrel}{two consecutive equals signs}%
+\UnicodeMathSymbol{"02A76}{\eqeqeq }{\mathrel}{three consecutive equals signs}%
+\UnicodeMathSymbol{"02A77}{\ddotseq }{\mathrel}{equals sign with two dots above and two dots below}%
+\UnicodeMathSymbol{"02A78}{\equivDD }{\mathrel}{equivalent with four dots above}%
+\UnicodeMathSymbol{"02A79}{\ltcir }{\mathrel}{less-than with circle inside}%
+\UnicodeMathSymbol{"02A7A}{\gtcir }{\mathrel}{greater-than with circle inside}%
+\UnicodeMathSymbol{"02A7B}{\ltquest }{\mathrel}{less-than with question mark above}%
+\UnicodeMathSymbol{"02A7C}{\gtquest }{\mathrel}{greater-than with question mark above}%
+\UnicodeMathSymbol{"02A7D}{\leqslant }{\mathrel}{less-than or slanted equal to}%
+\UnicodeMathSymbol{"02A7E}{\geqslant }{\mathrel}{greater-than or slanted equal to}%
+\UnicodeMathSymbol{"02A7F}{\lesdot }{\mathrel}{less-than or slanted equal to with dot inside}%
+\UnicodeMathSymbol{"02A80}{\gesdot }{\mathrel}{greater-than or slanted equal to with dot inside}%
+\UnicodeMathSymbol{"02A81}{\lesdoto }{\mathrel}{less-than or slanted equal to with dot above}%
+\UnicodeMathSymbol{"02A82}{\gesdoto }{\mathrel}{greater-than or slanted equal to with dot above}%
+\UnicodeMathSymbol{"02A83}{\lesdotor }{\mathrel}{less-than or slanted equal to with dot above right}%
+\UnicodeMathSymbol{"02A84}{\gesdotol }{\mathrel}{greater-than or slanted equal to with dot above left}%
+\UnicodeMathSymbol{"02A85}{\lessapprox }{\mathrel}{less-than or approximate}%
+\UnicodeMathSymbol{"02A86}{\gtrapprox }{\mathrel}{greater-than or approximate}%
+\UnicodeMathSymbol{"02A87}{\lneq }{\mathrel}{less-than and single-line not equal to}%
+\UnicodeMathSymbol{"02A88}{\gneq }{\mathrel}{greater-than and single-line not equal to}%
+\UnicodeMathSymbol{"02A89}{\lnapprox }{\mathrel}{less-than and not approximate}%
+\UnicodeMathSymbol{"02A8A}{\gnapprox }{\mathrel}{greater-than and not approximate}%
+\UnicodeMathSymbol{"02A8B}{\lesseqqgtr }{\mathrel}{less-than above double-line equal above greater-than}%
+\UnicodeMathSymbol{"02A8C}{\gtreqqless }{\mathrel}{greater-than above double-line equal above less-than}%
+\UnicodeMathSymbol{"02A8D}{\lsime }{\mathrel}{less-than above similar or equal}%
+\UnicodeMathSymbol{"02A8E}{\gsime }{\mathrel}{greater-than above similar or equal}%
+\UnicodeMathSymbol{"02A8F}{\lsimg }{\mathrel}{less-than above similar above greater-than}%
+\UnicodeMathSymbol{"02A90}{\gsiml }{\mathrel}{greater-than above similar above less-than}%
+\UnicodeMathSymbol{"02A91}{\lgE }{\mathrel}{less-than above greater-than above double-line equal}%
+\UnicodeMathSymbol{"02A92}{\glE }{\mathrel}{greater-than above less-than above double-line equal}%
+\UnicodeMathSymbol{"02A93}{\lesges }{\mathrel}{less-than above slanted equal above greater-than above slanted equal}%
+\UnicodeMathSymbol{"02A94}{\gesles }{\mathrel}{greater-than above slanted equal above less-than above slanted equal}%
+\UnicodeMathSymbol{"02A95}{\eqslantless }{\mathrel}{slanted equal to or less-than}%
+\UnicodeMathSymbol{"02A96}{\eqslantgtr }{\mathrel}{slanted equal to or greater-than}%
+\UnicodeMathSymbol{"02A97}{\elsdot }{\mathrel}{slanted equal to or less-than with dot inside}%
+\UnicodeMathSymbol{"02A98}{\egsdot }{\mathrel}{slanted equal to or greater-than with dot inside}%
+\UnicodeMathSymbol{"02A99}{\eqqless }{\mathrel}{double-line equal to or less-than}%
+\UnicodeMathSymbol{"02A9A}{\eqqgtr }{\mathrel}{double-line equal to or greater-than}%
+\UnicodeMathSymbol{"02A9B}{\eqqslantless }{\mathrel}{double-line slanted equal to or less-than}%
+\UnicodeMathSymbol{"02A9C}{\eqqslantgtr }{\mathrel}{double-line slanted equal to or greater-than}%
+\UnicodeMathSymbol{"02A9D}{\simless }{\mathrel}{similar or less-than}%
+\UnicodeMathSymbol{"02A9E}{\simgtr }{\mathrel}{similar or greater-than}%
+\UnicodeMathSymbol{"02A9F}{\simlE }{\mathrel}{similar above less-than above equals sign}%
+\UnicodeMathSymbol{"02AA0}{\simgE }{\mathrel}{similar above greater-than above equals sign}%
+\UnicodeMathSymbol{"02AA1}{\Lt }{\mathrel}{double nested less-than}%
+\UnicodeMathSymbol{"02AA2}{\Gt }{\mathrel}{double nested greater-than}%
+\UnicodeMathSymbol{"02AA3}{\partialmeetcontraction }{\mathrel}{double less-than with underbar}%
+\UnicodeMathSymbol{"02AA4}{\glj }{\mathrel}{greater-than overlapping less-than}%
+\UnicodeMathSymbol{"02AA5}{\gla }{\mathrel}{greater-than beside less-than}%
+\UnicodeMathSymbol{"02AA6}{\ltcc }{\mathrel}{less-than closed by curve}%
+\UnicodeMathSymbol{"02AA7}{\gtcc }{\mathrel}{greater-than closed by curve}%
+\UnicodeMathSymbol{"02AA8}{\lescc }{\mathrel}{less-than closed by curve above slanted equal}%
+\UnicodeMathSymbol{"02AA9}{\gescc }{\mathrel}{greater-than closed by curve above slanted equal}%
+\UnicodeMathSymbol{"02AAA}{\smt }{\mathrel}{smaller than}%
+\UnicodeMathSymbol{"02AAB}{\lat }{\mathrel}{larger than}%
+\UnicodeMathSymbol{"02AAC}{\smte }{\mathrel}{smaller than or equal to}%
+\UnicodeMathSymbol{"02AAD}{\late }{\mathrel}{larger than or equal to}%
+\UnicodeMathSymbol{"02AAE}{\bumpeqq }{\mathrel}{equals sign with bumpy above}%
+\UnicodeMathSymbol{"02AAF}{\preceq }{\mathrel}{precedes above single-line equals sign}%
+\UnicodeMathSymbol{"02AB0}{\succeq }{\mathrel}{succeeds above single-line equals sign}%
+\UnicodeMathSymbol{"02AB1}{\precneq }{\mathrel}{precedes above single-line not equal to}%
+\UnicodeMathSymbol{"02AB2}{\succneq }{\mathrel}{succeeds above single-line not equal to}%
+\UnicodeMathSymbol{"02AB3}{\preceqq }{\mathrel}{precedes above equals sign}%
+\UnicodeMathSymbol{"02AB4}{\succeqq }{\mathrel}{succeeds above equals sign}%
+\UnicodeMathSymbol{"02AB5}{\precneqq }{\mathrel}{precedes above not equal to}%
+\UnicodeMathSymbol{"02AB6}{\succneqq }{\mathrel}{succeeds above not equal to}%
+\UnicodeMathSymbol{"02AB7}{\precapprox }{\mathrel}{precedes above almost equal to}%
+\UnicodeMathSymbol{"02AB8}{\succapprox }{\mathrel}{succeeds above almost equal to}%
+\UnicodeMathSymbol{"02AB9}{\precnapprox }{\mathrel}{precedes above not almost equal to}%
+\UnicodeMathSymbol{"02ABA}{\succnapprox }{\mathrel}{succeeds above not almost equal to}%
+\UnicodeMathSymbol{"02ABB}{\Prec }{\mathrel}{double precedes}%
+\UnicodeMathSymbol{"02ABC}{\Succ }{\mathrel}{double succeeds}%
+\UnicodeMathSymbol{"02ABD}{\subsetdot }{\mathrel}{subset with dot}%
+\UnicodeMathSymbol{"02ABE}{\supsetdot }{\mathrel}{superset with dot}%
+\UnicodeMathSymbol{"02ABF}{\subsetplus }{\mathrel}{subset with plus sign below}%
+\UnicodeMathSymbol{"02AC0}{\supsetplus }{\mathrel}{superset with plus sign below}%
+\UnicodeMathSymbol{"02AC1}{\submult }{\mathrel}{subset with multiplication sign below}%
+\UnicodeMathSymbol{"02AC2}{\supmult }{\mathrel}{superset with multiplication sign below}%
+\UnicodeMathSymbol{"02AC3}{\subedot }{\mathrel}{subset of or equal to with dot above}%
+\UnicodeMathSymbol{"02AC4}{\supedot }{\mathrel}{superset of or equal to with dot above}%
+\UnicodeMathSymbol{"02AC5}{\subseteqq }{\mathrel}{subset of above equals sign}%
+\UnicodeMathSymbol{"02AC6}{\supseteqq }{\mathrel}{superset of above equals sign}%
+\UnicodeMathSymbol{"02AC7}{\subsim }{\mathrel}{subset of above tilde operator}%
+\UnicodeMathSymbol{"02AC8}{\supsim }{\mathrel}{superset of above tilde operator}%
+\UnicodeMathSymbol{"02AC9}{\subsetapprox }{\mathrel}{subset of above almost equal to}%
+\UnicodeMathSymbol{"02ACA}{\supsetapprox }{\mathrel}{superset of above almost equal to}%
+\UnicodeMathSymbol{"02ACB}{\subsetneqq }{\mathrel}{subset of above not equal to}%
+\UnicodeMathSymbol{"02ACC}{\supsetneqq }{\mathrel}{superset of above not equal to}%
+\UnicodeMathSymbol{"02ACD}{\lsqhook }{\mathrel}{square left open box operator}%
+\UnicodeMathSymbol{"02ACE}{\rsqhook }{\mathrel}{square right open box operator}%
+\UnicodeMathSymbol{"02ACF}{\csub }{\mathrel}{closed subset}%
+\UnicodeMathSymbol{"02AD0}{\csup }{\mathrel}{closed superset}%
+\UnicodeMathSymbol{"02AD1}{\csube }{\mathrel}{closed subset or equal to}%
+\UnicodeMathSymbol{"02AD2}{\csupe }{\mathrel}{closed superset or equal to}%
+\UnicodeMathSymbol{"02AD3}{\subsup }{\mathrel}{subset above superset}%
+\UnicodeMathSymbol{"02AD4}{\supsub }{\mathrel}{superset above subset}%
+\UnicodeMathSymbol{"02AD5}{\subsub }{\mathrel}{subset above subset}%
+\UnicodeMathSymbol{"02AD6}{\supsup }{\mathrel}{superset above superset}%
+\UnicodeMathSymbol{"02AD7}{\suphsub }{\mathrel}{superset beside subset}%
+\UnicodeMathSymbol{"02AD8}{\supdsub }{\mathrel}{superset beside and joined by dash with subset}%
+\UnicodeMathSymbol{"02AD9}{\forkv }{\mathrel}{element of opening downwards}%
+\UnicodeMathSymbol{"02ADA}{\topfork }{\mathrel}{pitchfork with tee top}%
+\UnicodeMathSymbol{"02ADB}{\mlcp }{\mathrel}{transversal intersection}%
+\UnicodeMathSymbol{"02ADC}{\forks }{\mathrel}{forking}%
+\UnicodeMathSymbol{"02ADD}{\forksnot }{\mathrel}{nonforking}%
+\UnicodeMathSymbol{"02ADE}{\shortlefttack }{\mathrel}{short left tack}%
+\UnicodeMathSymbol{"02ADF}{\shortdowntack }{\mathrel}{short down tack}%
+\UnicodeMathSymbol{"02AE0}{\shortuptack }{\mathrel}{short up tack}%
+\UnicodeMathSymbol{"02AE1}{\perps }{\mathord}{perpendicular with s}%
+\UnicodeMathSymbol{"02AE2}{\vDdash }{\mathrel}{vertical bar triple right turnstile}%
+\UnicodeMathSymbol{"02AE3}{\dashV }{\mathrel}{double vertical bar left turnstile}%
+\UnicodeMathSymbol{"02AE4}{\Dashv }{\mathrel}{vertical bar double left turnstile}%
+\UnicodeMathSymbol{"02AE5}{\DashV }{\mathrel}{double vertical bar double left turnstile}%
+\UnicodeMathSymbol{"02AE6}{\varVdash }{\mathrel}{long dash from left member of double vertical}%
+\UnicodeMathSymbol{"02AE7}{\Barv }{\mathrel}{short down tack with overbar}%
+\UnicodeMathSymbol{"02AE8}{\vBar }{\mathrel}{short up tack with underbar}%
+\UnicodeMathSymbol{"02AE9}{\vBarv }{\mathrel}{short up tack above short down tack}%
+\UnicodeMathSymbol{"02AEA}{\barV }{\mathrel}{double down tack}%
+\UnicodeMathSymbol{"02AEB}{\Vbar }{\mathrel}{double up tack}%
+\UnicodeMathSymbol{"02AEC}{\Not }{\mathrel}{double stroke not sign}%
+\UnicodeMathSymbol{"02AED}{\bNot }{\mathrel}{reversed double stroke not sign}%
+\UnicodeMathSymbol{"02AEE}{\revnmid }{\mathrel}{does not divide with reversed negation slash}%
+\UnicodeMathSymbol{"02AEF}{\cirmid }{\mathrel}{vertical line with circle above}%
+\UnicodeMathSymbol{"02AF0}{\midcir }{\mathrel}{vertical line with circle below}%
+\UnicodeMathSymbol{"02AF1}{\topcir }{\mathord}{down tack with circle below}%
+\UnicodeMathSymbol{"02AF2}{\nhpar }{\mathrel}{parallel with horizontal stroke}%
+\UnicodeMathSymbol{"02AF3}{\parsim }{\mathrel}{parallel with tilde operator}%
+\UnicodeMathSymbol{"02AF4}{\interleave }{\mathbin}{triple vertical bar binary relation}%
+\UnicodeMathSymbol{"02AF5}{\nhVvert }{\mathbin}{triple vertical bar with horizontal stroke}%
+\UnicodeMathSymbol{"02AF6}{\threedotcolon }{\mathbin}{triple colon operator}%
+\UnicodeMathSymbol{"02AF7}{\lllnest }{\mathrel}{stacked very much less-than}%
+\UnicodeMathSymbol{"02AF8}{\gggnest }{\mathrel}{stacked very much greater-than}%
+\UnicodeMathSymbol{"02AF9}{\leqqslant }{\mathrel}{double-line slanted less-than or equal to}%
+\UnicodeMathSymbol{"02AFA}{\geqqslant }{\mathrel}{double-line slanted greater-than or equal to}%
+\UnicodeMathSymbol{"02AFB}{\trslash }{\mathbin}{triple solidus binary relation}%
+\UnicodeMathSymbol{"02AFC}{\biginterleave }{\mathop}{large triple vertical bar operator}%
+\UnicodeMathSymbol{"02AFD}{\sslash }{\mathbin}{double solidus operator}%
+\UnicodeMathSymbol{"02AFE}{\talloblong }{\mathbin}{white vertical bar}%
+\UnicodeMathSymbol{"02AFF}{\bigtalloblong }{\mathop}{n-ary white vertical bar}%
+\UnicodeMathSymbol{"02B12}{\squaretopblack }{\mathord}{square with top half black}%
+\UnicodeMathSymbol{"02B13}{\squarebotblack }{\mathord}{square with bottom half black}%
+\UnicodeMathSymbol{"02B14}{\squareurblack }{\mathord}{square with upper right diagonal half black}%
+\UnicodeMathSymbol{"02B15}{\squarellblack }{\mathord}{square with lower left diagonal half black}%
+\UnicodeMathSymbol{"02B16}{\diamondleftblack }{\mathord}{diamond with left half black}%
+\UnicodeMathSymbol{"02B17}{\diamondrightblack }{\mathord}{diamond with right half black}%
+\UnicodeMathSymbol{"02B18}{\diamondtopblack }{\mathord}{diamond with top half black}%
+\UnicodeMathSymbol{"02B19}{\diamondbotblack }{\mathord}{diamond with bottom half black}%
+\UnicodeMathSymbol{"02B1A}{\dottedsquare }{\mathord}{dotted square}%
+\UnicodeMathSymbol{"02B1B}{\lgblksquare }{\mathord}{black large square}%
+\UnicodeMathSymbol{"02B1C}{\lgwhtsquare }{\mathord}{white large square}%
+\UnicodeMathSymbol{"02B1D}{\vysmblksquare }{\mathord}{black very small square}%
+\UnicodeMathSymbol{"02B1E}{\vysmwhtsquare }{\mathord}{white very small square}%
+\UnicodeMathSymbol{"02B1F}{\pentagonblack }{\mathord}{black pentagon}%
+\UnicodeMathSymbol{"02B20}{\pentagon }{\mathord}{white pentagon}%
+\UnicodeMathSymbol{"02B21}{\varhexagon }{\mathord}{white hexagon}%
+\UnicodeMathSymbol{"02B22}{\varhexagonblack }{\mathord}{black hexagon}%
+\UnicodeMathSymbol{"02B23}{\hexagonblack }{\mathord}{horizontal black hexagon}%
+\UnicodeMathSymbol{"02B24}{\lgblkcircle }{\mathord}{black large circle}%
+\UnicodeMathSymbol{"02B25}{\mdblkdiamond }{\mathord}{black medium diamond}%
+\UnicodeMathSymbol{"02B26}{\mdwhtdiamond }{\mathord}{white medium diamond}%
+\UnicodeMathSymbol{"02B27}{\mdblklozenge }{\mathord}{black medium lozenge}%
+\UnicodeMathSymbol{"02B28}{\mdwhtlozenge }{\mathord}{white medium lozenge}%
+\UnicodeMathSymbol{"02B29}{\smblkdiamond }{\mathord}{black small diamond}%
+\UnicodeMathSymbol{"02B2A}{\smblklozenge }{\mathord}{black small lozenge}%
+\UnicodeMathSymbol{"02B2B}{\smwhtlozenge }{\mathord}{white small lozenge}%
+\UnicodeMathSymbol{"02B2C}{\blkhorzoval }{\mathord}{black horizontal ellipse}%
+\UnicodeMathSymbol{"02B2D}{\whthorzoval }{\mathord}{white horizontal ellipse}%
+\UnicodeMathSymbol{"02B2E}{\blkvertoval }{\mathord}{black vertical ellipse}%
+\UnicodeMathSymbol{"02B2F}{\whtvertoval }{\mathord}{white vertical ellipse}%
+\UnicodeMathSymbol{"02B30}{\circleonleftarrow }{\mathrel}{left arrow with small circle}%
+\UnicodeMathSymbol{"02B31}{\leftthreearrows }{\mathrel}{three leftwards arrows}%
+\UnicodeMathSymbol{"02B32}{\leftarrowonoplus }{\mathrel}{left arrow with circled plus}%
+\UnicodeMathSymbol{"02B33}{\longleftsquigarrow }{\mathrel}{long leftwards squiggle arrow}%
+\UnicodeMathSymbol{"02B34}{\nvtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with vertical stroke}%
+\UnicodeMathSymbol{"02B35}{\nVtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with double vertical stroke}%
+\UnicodeMathSymbol{"02B36}{\twoheadmapsfrom }{\mathrel}{leftwards two-headed arrow from bar}%
+\UnicodeMathSymbol{"02B37}{\twoheadleftdbkarrow }{\mathrel}{leftwards two-headed triple-dash arrow}%
+\UnicodeMathSymbol{"02B38}{\leftdotarrow }{\mathrel}{leftwards arrow with dotted stem}%
+\UnicodeMathSymbol{"02B39}{\nvleftarrowtail }{\mathrel}{leftwards arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02B3A}{\nVleftarrowtail }{\mathrel}{leftwards arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02B3B}{\twoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail}%
+\UnicodeMathSymbol{"02B3C}{\nvtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02B3D}{\nVtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02B3E}{\leftarrowx }{\mathrel}{leftwards arrow through x}%
+\UnicodeMathSymbol{"02B3F}{\leftcurvedarrow }{\mathrel}{wave arrow pointing directly left}%
+\UnicodeMathSymbol{"02B40}{\equalleftarrow }{\mathrel}{equals sign above leftwards arrow}%
+\UnicodeMathSymbol{"02B41}{\bsimilarleftarrow }{\mathrel}{reverse tilde operator above leftwards arrow}%
+\UnicodeMathSymbol{"02B42}{\leftarrowbackapprox }{\mathrel}{leftwards arrow above reverse almost equal to}%
+\UnicodeMathSymbol{"02B43}{\rightarrowgtr }{\mathrel}{rightwards arrow through greater-than}%
+\UnicodeMathSymbol{"02B44}{\rightarrowsupset }{\mathrel}{rightwards arrow through subset}%
+\UnicodeMathSymbol{"02B45}{\LLeftarrow }{\mathrel}{leftwards quadruple arrow}%
+\UnicodeMathSymbol{"02B46}{\RRightarrow }{\mathrel}{rightwards quadruple arrow}%
+\UnicodeMathSymbol{"02B47}{\bsimilarrightarrow }{\mathrel}{reverse tilde operator above rightwards arrow}%
+\UnicodeMathSymbol{"02B48}{\rightarrowbackapprox }{\mathrel}{rightwards arrow above reverse almost equal to}%
+\UnicodeMathSymbol{"02B49}{\similarleftarrow }{\mathrel}{tilde operator above leftwards arrow}%
+\UnicodeMathSymbol{"02B4A}{\leftarrowapprox }{\mathrel}{leftwards arrow above almost equal to}%
+\UnicodeMathSymbol{"02B4B}{\leftarrowbsimilar }{\mathrel}{leftwards arrow above reverse tilde operator}%
+\UnicodeMathSymbol{"02B4C}{\rightarrowbsimilar }{\mathrel}{righttwards arrow above reverse tilde operator}%
+\UnicodeMathSymbol{"02B50}{\medwhitestar }{\mathord}{white medium star}%
+\UnicodeMathSymbol{"02B51}{\medblackstar }{\mathord}{black medium star}%
+\UnicodeMathSymbol{"02B52}{\smwhitestar }{\mathord}{white small star}%
+\UnicodeMathSymbol{"02B53}{\rightpentagonblack }{\mathord}{black right-pointing pentagon}%
+\UnicodeMathSymbol{"02B54}{\rightpentagon }{\mathord}{white right-pointing pentagon}%
+\UnicodeMathSymbol{"03012}{\postalmark }{\mathord}{postal mark}%
+\UnicodeMathSymbol{"03030}{\hzigzag }{\mathord}{zigzag}%
+\UnicodeMathSymbol{"1D400}{\mbfA }{\mathalpha}{mathematical bold capital a}%
+\UnicodeMathSymbol{"1D401}{\mbfB }{\mathalpha}{mathematical bold capital b}%
+\UnicodeMathSymbol{"1D402}{\mbfC }{\mathalpha}{mathematical bold capital c}%
+\UnicodeMathSymbol{"1D403}{\mbfD }{\mathalpha}{mathematical bold capital d}%
+\UnicodeMathSymbol{"1D404}{\mbfE }{\mathalpha}{mathematical bold capital e}%
+\UnicodeMathSymbol{"1D405}{\mbfF }{\mathalpha}{mathematical bold capital f}%
+\UnicodeMathSymbol{"1D406}{\mbfG }{\mathalpha}{mathematical bold capital g}%
+\UnicodeMathSymbol{"1D407}{\mbfH }{\mathalpha}{mathematical bold capital h}%
+\UnicodeMathSymbol{"1D408}{\mbfI }{\mathalpha}{mathematical bold capital i}%
+\UnicodeMathSymbol{"1D409}{\mbfJ }{\mathalpha}{mathematical bold capital j}%
+\UnicodeMathSymbol{"1D40A}{\mbfK }{\mathalpha}{mathematical bold capital k}%
+\UnicodeMathSymbol{"1D40B}{\mbfL }{\mathalpha}{mathematical bold capital l}%
+\UnicodeMathSymbol{"1D40C}{\mbfM }{\mathalpha}{mathematical bold capital m}%
+\UnicodeMathSymbol{"1D40D}{\mbfN }{\mathalpha}{mathematical bold capital n}%
+\UnicodeMathSymbol{"1D40E}{\mbfO }{\mathalpha}{mathematical bold capital o}%
+\UnicodeMathSymbol{"1D40F}{\mbfP }{\mathalpha}{mathematical bold capital p}%
+\UnicodeMathSymbol{"1D410}{\mbfQ }{\mathalpha}{mathematical bold capital q}%
+\UnicodeMathSymbol{"1D411}{\mbfR }{\mathalpha}{mathematical bold capital r}%
+\UnicodeMathSymbol{"1D412}{\mbfS }{\mathalpha}{mathematical bold capital s}%
+\UnicodeMathSymbol{"1D413}{\mbfT }{\mathalpha}{mathematical bold capital t}%
+\UnicodeMathSymbol{"1D414}{\mbfU }{\mathalpha}{mathematical bold capital u}%
+\UnicodeMathSymbol{"1D415}{\mbfV }{\mathalpha}{mathematical bold capital v}%
+\UnicodeMathSymbol{"1D416}{\mbfW }{\mathalpha}{mathematical bold capital w}%
+\UnicodeMathSymbol{"1D417}{\mbfX }{\mathalpha}{mathematical bold capital x}%
+\UnicodeMathSymbol{"1D418}{\mbfY }{\mathalpha}{mathematical bold capital y}%
+\UnicodeMathSymbol{"1D419}{\mbfZ }{\mathalpha}{mathematical bold capital z}%
+\UnicodeMathSymbol{"1D41A}{\mbfa }{\mathalpha}{mathematical bold small a}%
+\UnicodeMathSymbol{"1D41B}{\mbfb }{\mathalpha}{mathematical bold small b}%
+\UnicodeMathSymbol{"1D41C}{\mbfc }{\mathalpha}{mathematical bold small c}%
+\UnicodeMathSymbol{"1D41D}{\mbfd }{\mathalpha}{mathematical bold small d}%
+\UnicodeMathSymbol{"1D41E}{\mbfe }{\mathalpha}{mathematical bold small e}%
+\UnicodeMathSymbol{"1D41F}{\mbff }{\mathalpha}{mathematical bold small f}%
+\UnicodeMathSymbol{"1D420}{\mbfg }{\mathalpha}{mathematical bold small g}%
+\UnicodeMathSymbol{"1D421}{\mbfh }{\mathalpha}{mathematical bold small h}%
+\UnicodeMathSymbol{"1D422}{\mbfi }{\mathalpha}{mathematical bold small i}%
+\UnicodeMathSymbol{"1D423}{\mbfj }{\mathalpha}{mathematical bold small j}%
+\UnicodeMathSymbol{"1D424}{\mbfk }{\mathalpha}{mathematical bold small k}%
+\UnicodeMathSymbol{"1D425}{\mbfl }{\mathalpha}{mathematical bold small l}%
+\UnicodeMathSymbol{"1D426}{\mbfm }{\mathalpha}{mathematical bold small m}%
+\UnicodeMathSymbol{"1D427}{\mbfn }{\mathalpha}{mathematical bold small n}%
+\UnicodeMathSymbol{"1D428}{\mbfo }{\mathalpha}{mathematical bold small o}%
+\UnicodeMathSymbol{"1D429}{\mbfp }{\mathalpha}{mathematical bold small p}%
+\UnicodeMathSymbol{"1D42A}{\mbfq }{\mathalpha}{mathematical bold small q}%
+\UnicodeMathSymbol{"1D42B}{\mbfr }{\mathalpha}{mathematical bold small r}%
+\UnicodeMathSymbol{"1D42C}{\mbfs }{\mathalpha}{mathematical bold small s}%
+\UnicodeMathSymbol{"1D42D}{\mbft }{\mathalpha}{mathematical bold small t}%
+\UnicodeMathSymbol{"1D42E}{\mbfu }{\mathalpha}{mathematical bold small u}%
+\UnicodeMathSymbol{"1D42F}{\mbfv }{\mathalpha}{mathematical bold small v}%
+\UnicodeMathSymbol{"1D430}{\mbfw }{\mathalpha}{mathematical bold small w}%
+\UnicodeMathSymbol{"1D431}{\mbfx }{\mathalpha}{mathematical bold small x}%
+\UnicodeMathSymbol{"1D432}{\mbfy }{\mathalpha}{mathematical bold small y}%
+\UnicodeMathSymbol{"1D433}{\mbfz }{\mathalpha}{mathematical bold small z}%
+\UnicodeMathSymbol{"1D434}{\mitA }{\mathalpha}{mathematical italic capital a}%
+\UnicodeMathSymbol{"1D435}{\mitB }{\mathalpha}{mathematical italic capital b}%
+\UnicodeMathSymbol{"1D436}{\mitC }{\mathalpha}{mathematical italic capital c}%
+\UnicodeMathSymbol{"1D437}{\mitD }{\mathalpha}{mathematical italic capital d}%
+\UnicodeMathSymbol{"1D438}{\mitE }{\mathalpha}{mathematical italic capital e}%
+\UnicodeMathSymbol{"1D439}{\mitF }{\mathalpha}{mathematical italic capital f}%
+\UnicodeMathSymbol{"1D43A}{\mitG }{\mathalpha}{mathematical italic capital g}%
+\UnicodeMathSymbol{"1D43B}{\mitH }{\mathalpha}{mathematical italic capital h}%
+\UnicodeMathSymbol{"1D43C}{\mitI }{\mathalpha}{mathematical italic capital i}%
+\UnicodeMathSymbol{"1D43D}{\mitJ }{\mathalpha}{mathematical italic capital j}%
+\UnicodeMathSymbol{"1D43E}{\mitK }{\mathalpha}{mathematical italic capital k}%
+\UnicodeMathSymbol{"1D43F}{\mitL }{\mathalpha}{mathematical italic capital l}%
+\UnicodeMathSymbol{"1D440}{\mitM }{\mathalpha}{mathematical italic capital m}%
+\UnicodeMathSymbol{"1D441}{\mitN }{\mathalpha}{mathematical italic capital n}%
+\UnicodeMathSymbol{"1D442}{\mitO }{\mathalpha}{mathematical italic capital o}%
+\UnicodeMathSymbol{"1D443}{\mitP }{\mathalpha}{mathematical italic capital p}%
+\UnicodeMathSymbol{"1D444}{\mitQ }{\mathalpha}{mathematical italic capital q}%
+\UnicodeMathSymbol{"1D445}{\mitR }{\mathalpha}{mathematical italic capital r}%
+\UnicodeMathSymbol{"1D446}{\mitS }{\mathalpha}{mathematical italic capital s}%
+\UnicodeMathSymbol{"1D447}{\mitT }{\mathalpha}{mathematical italic capital t}%
+\UnicodeMathSymbol{"1D448}{\mitU }{\mathalpha}{mathematical italic capital u}%
+\UnicodeMathSymbol{"1D449}{\mitV }{\mathalpha}{mathematical italic capital v}%
+\UnicodeMathSymbol{"1D44A}{\mitW }{\mathalpha}{mathematical italic capital w}%
+\UnicodeMathSymbol{"1D44B}{\mitX }{\mathalpha}{mathematical italic capital x}%
+\UnicodeMathSymbol{"1D44C}{\mitY }{\mathalpha}{mathematical italic capital y}%
+\UnicodeMathSymbol{"1D44D}{\mitZ }{\mathalpha}{mathematical italic capital z}%
+\UnicodeMathSymbol{"1D44E}{\mita }{\mathalpha}{mathematical italic small a}%
+\UnicodeMathSymbol{"1D44F}{\mitb }{\mathalpha}{mathematical italic small b}%
+\UnicodeMathSymbol{"1D450}{\mitc }{\mathalpha}{mathematical italic small c}%
+\UnicodeMathSymbol{"1D451}{\mitd }{\mathalpha}{mathematical italic small d}%
+\UnicodeMathSymbol{"1D452}{\mite }{\mathalpha}{mathematical italic small e}%
+\UnicodeMathSymbol{"1D453}{\mitf }{\mathalpha}{mathematical italic small f}%
+\UnicodeMathSymbol{"1D454}{\mitg }{\mathalpha}{mathematical italic small g}%
+\UnicodeMathSymbol{"1D456}{\miti }{\mathalpha}{mathematical italic small i}%
+\UnicodeMathSymbol{"1D457}{\mitj }{\mathalpha}{mathematical italic small j}%
+\UnicodeMathSymbol{"1D458}{\mitk }{\mathalpha}{mathematical italic small k}%
+\UnicodeMathSymbol{"1D459}{\mitl }{\mathalpha}{mathematical italic small l}%
+\UnicodeMathSymbol{"1D45A}{\mitm }{\mathalpha}{mathematical italic small m}%
+\UnicodeMathSymbol{"1D45B}{\mitn }{\mathalpha}{mathematical italic small n}%
+\UnicodeMathSymbol{"1D45C}{\mito }{\mathalpha}{mathematical italic small o}%
+\UnicodeMathSymbol{"1D45D}{\mitp }{\mathalpha}{mathematical italic small p}%
+\UnicodeMathSymbol{"1D45E}{\mitq }{\mathalpha}{mathematical italic small q}%
+\UnicodeMathSymbol{"1D45F}{\mitr }{\mathalpha}{mathematical italic small r}%
+\UnicodeMathSymbol{"1D460}{\mits }{\mathalpha}{mathematical italic small s}%
+\UnicodeMathSymbol{"1D461}{\mitt }{\mathalpha}{mathematical italic small t}%
+\UnicodeMathSymbol{"1D462}{\mitu }{\mathalpha}{mathematical italic small u}%
+\UnicodeMathSymbol{"1D463}{\mitv }{\mathalpha}{mathematical italic small v}%
+\UnicodeMathSymbol{"1D464}{\mitw }{\mathalpha}{mathematical italic small w}%
+\UnicodeMathSymbol{"1D465}{\mitx }{\mathalpha}{mathematical italic small x}%
+\UnicodeMathSymbol{"1D466}{\mity }{\mathalpha}{mathematical italic small y}%
+\UnicodeMathSymbol{"1D467}{\mitz }{\mathalpha}{mathematical italic small z}%
+\UnicodeMathSymbol{"1D468}{\mbfitA }{\mathalpha}{mathematical bold italic capital a}%
+\UnicodeMathSymbol{"1D469}{\mbfitB }{\mathalpha}{mathematical bold italic capital b}%
+\UnicodeMathSymbol{"1D46A}{\mbfitC }{\mathalpha}{mathematical bold italic capital c}%
+\UnicodeMathSymbol{"1D46B}{\mbfitD }{\mathalpha}{mathematical bold italic capital d}%
+\UnicodeMathSymbol{"1D46C}{\mbfitE }{\mathalpha}{mathematical bold italic capital e}%
+\UnicodeMathSymbol{"1D46D}{\mbfitF }{\mathalpha}{mathematical bold italic capital f}%
+\UnicodeMathSymbol{"1D46E}{\mbfitG }{\mathalpha}{mathematical bold italic capital g}%
+\UnicodeMathSymbol{"1D46F}{\mbfitH }{\mathalpha}{mathematical bold italic capital h}%
+\UnicodeMathSymbol{"1D470}{\mbfitI }{\mathalpha}{mathematical bold italic capital i}%
+\UnicodeMathSymbol{"1D471}{\mbfitJ }{\mathalpha}{mathematical bold italic capital j}%
+\UnicodeMathSymbol{"1D472}{\mbfitK }{\mathalpha}{mathematical bold italic capital k}%
+\UnicodeMathSymbol{"1D473}{\mbfitL }{\mathalpha}{mathematical bold italic capital l}%
+\UnicodeMathSymbol{"1D474}{\mbfitM }{\mathalpha}{mathematical bold italic capital m}%
+\UnicodeMathSymbol{"1D475}{\mbfitN }{\mathalpha}{mathematical bold italic capital n}%
+\UnicodeMathSymbol{"1D476}{\mbfitO }{\mathalpha}{mathematical bold italic capital o}%
+\UnicodeMathSymbol{"1D477}{\mbfitP }{\mathalpha}{mathematical bold italic capital p}%
+\UnicodeMathSymbol{"1D478}{\mbfitQ }{\mathalpha}{mathematical bold italic capital q}%
+\UnicodeMathSymbol{"1D479}{\mbfitR }{\mathalpha}{mathematical bold italic capital r}%
+\UnicodeMathSymbol{"1D47A}{\mbfitS }{\mathalpha}{mathematical bold italic capital s}%
+\UnicodeMathSymbol{"1D47B}{\mbfitT }{\mathalpha}{mathematical bold italic capital t}%
+\UnicodeMathSymbol{"1D47C}{\mbfitU }{\mathalpha}{mathematical bold italic capital u}%
+\UnicodeMathSymbol{"1D47D}{\mbfitV }{\mathalpha}{mathematical bold italic capital v}%
+\UnicodeMathSymbol{"1D47E}{\mbfitW }{\mathalpha}{mathematical bold italic capital w}%
+\UnicodeMathSymbol{"1D47F}{\mbfitX }{\mathalpha}{mathematical bold italic capital x}%
+\UnicodeMathSymbol{"1D480}{\mbfitY }{\mathalpha}{mathematical bold italic capital y}%
+\UnicodeMathSymbol{"1D481}{\mbfitZ }{\mathalpha}{mathematical bold italic capital z}%
+\UnicodeMathSymbol{"1D482}{\mbfita }{\mathalpha}{mathematical bold italic small a}%
+\UnicodeMathSymbol{"1D483}{\mbfitb }{\mathalpha}{mathematical bold italic small b}%
+\UnicodeMathSymbol{"1D484}{\mbfitc }{\mathalpha}{mathematical bold italic small c}%
+\UnicodeMathSymbol{"1D485}{\mbfitd }{\mathalpha}{mathematical bold italic small d}%
+\UnicodeMathSymbol{"1D486}{\mbfite }{\mathalpha}{mathematical bold italic small e}%
+\UnicodeMathSymbol{"1D487}{\mbfitf }{\mathalpha}{mathematical bold italic small f}%
+\UnicodeMathSymbol{"1D488}{\mbfitg }{\mathalpha}{mathematical bold italic small g}%
+\UnicodeMathSymbol{"1D489}{\mbfith }{\mathalpha}{mathematical bold italic small h}%
+\UnicodeMathSymbol{"1D48A}{\mbfiti }{\mathalpha}{mathematical bold italic small i}%
+\UnicodeMathSymbol{"1D48B}{\mbfitj }{\mathalpha}{mathematical bold italic small j}%
+\UnicodeMathSymbol{"1D48C}{\mbfitk }{\mathalpha}{mathematical bold italic small k}%
+\UnicodeMathSymbol{"1D48D}{\mbfitl }{\mathalpha}{mathematical bold italic small l}%
+\UnicodeMathSymbol{"1D48E}{\mbfitm }{\mathalpha}{mathematical bold italic small m}%
+\UnicodeMathSymbol{"1D48F}{\mbfitn }{\mathalpha}{mathematical bold italic small n}%
+\UnicodeMathSymbol{"1D490}{\mbfito }{\mathalpha}{mathematical bold italic small o}%
+\UnicodeMathSymbol{"1D491}{\mbfitp }{\mathalpha}{mathematical bold italic small p}%
+\UnicodeMathSymbol{"1D492}{\mbfitq }{\mathalpha}{mathematical bold italic small q}%
+\UnicodeMathSymbol{"1D493}{\mbfitr }{\mathalpha}{mathematical bold italic small r}%
+\UnicodeMathSymbol{"1D494}{\mbfits }{\mathalpha}{mathematical bold italic small s}%
+\UnicodeMathSymbol{"1D495}{\mbfitt }{\mathalpha}{mathematical bold italic small t}%
+\UnicodeMathSymbol{"1D496}{\mbfitu }{\mathalpha}{mathematical bold italic small u}%
+\UnicodeMathSymbol{"1D497}{\mbfitv }{\mathalpha}{mathematical bold italic small v}%
+\UnicodeMathSymbol{"1D498}{\mbfitw }{\mathalpha}{mathematical bold italic small w}%
+\UnicodeMathSymbol{"1D499}{\mbfitx }{\mathalpha}{mathematical bold italic small x}%
+\UnicodeMathSymbol{"1D49A}{\mbfity }{\mathalpha}{mathematical bold italic small y}%
+\UnicodeMathSymbol{"1D49B}{\mbfitz }{\mathalpha}{mathematical bold italic small z}%
+\UnicodeMathSymbol{"1D49C}{\mscrA }{\mathalpha}{mathematical script capital a}%
+\UnicodeMathSymbol{"1D49E}{\mscrC }{\mathalpha}{mathematical script capital c}%
+\UnicodeMathSymbol{"1D49F}{\mscrD }{\mathalpha}{mathematical script capital d}%
+\UnicodeMathSymbol{"1D4A2}{\mscrG }{\mathalpha}{mathematical script capital g}%
+\UnicodeMathSymbol{"1D4A5}{\mscrJ }{\mathalpha}{mathematical script capital j}%
+\UnicodeMathSymbol{"1D4A6}{\mscrK }{\mathalpha}{mathematical script capital k}%
+\UnicodeMathSymbol{"1D4A9}{\mscrN }{\mathalpha}{mathematical script capital n}%
+\UnicodeMathSymbol{"1D4AA}{\mscrO }{\mathalpha}{mathematical script capital o}%
+\UnicodeMathSymbol{"1D4AB}{\mscrP }{\mathalpha}{mathematical script capital p}%
+\UnicodeMathSymbol{"1D4AC}{\mscrQ }{\mathalpha}{mathematical script capital q}%
+\UnicodeMathSymbol{"1D4AE}{\mscrS }{\mathalpha}{mathematical script capital s}%
+\UnicodeMathSymbol{"1D4AF}{\mscrT }{\mathalpha}{mathematical script capital t}%
+\UnicodeMathSymbol{"1D4B0}{\mscrU }{\mathalpha}{mathematical script capital u}%
+\UnicodeMathSymbol{"1D4B1}{\mscrV }{\mathalpha}{mathematical script capital v}%
+\UnicodeMathSymbol{"1D4B2}{\mscrW }{\mathalpha}{mathematical script capital w}%
+\UnicodeMathSymbol{"1D4B3}{\mscrX }{\mathalpha}{mathematical script capital x}%
+\UnicodeMathSymbol{"1D4B4}{\mscrY }{\mathalpha}{mathematical script capital y}%
+\UnicodeMathSymbol{"1D4B5}{\mscrZ }{\mathalpha}{mathematical script capital z}%
+\UnicodeMathSymbol{"1D4B6}{\mscra }{\mathalpha}{mathematical script small a}%
+\UnicodeMathSymbol{"1D4B7}{\mscrb }{\mathalpha}{mathematical script small b}%
+\UnicodeMathSymbol{"1D4B8}{\mscrc }{\mathalpha}{mathematical script small c}%
+\UnicodeMathSymbol{"1D4B9}{\mscrd }{\mathalpha}{mathematical script small d}%
+\UnicodeMathSymbol{"1D4BB}{\mscrf }{\mathalpha}{mathematical script small f}%
+\UnicodeMathSymbol{"1D4BD}{\mscrh }{\mathalpha}{mathematical script small h}%
+\UnicodeMathSymbol{"1D4BE}{\mscri }{\mathalpha}{mathematical script small i}%
+\UnicodeMathSymbol{"1D4BF}{\mscrj }{\mathalpha}{mathematical script small j}%
+\UnicodeMathSymbol{"1D4C0}{\mscrk }{\mathalpha}{mathematical script small k}%
+\UnicodeMathSymbol{"1D4C1}{\mscrl }{\mathalpha}{mathematical script small l}%
+\UnicodeMathSymbol{"1D4C2}{\mscrm }{\mathalpha}{mathematical script small m}%
+\UnicodeMathSymbol{"1D4C3}{\mscrn }{\mathalpha}{mathematical script small n}%
+\UnicodeMathSymbol{"1D4C5}{\mscrp }{\mathalpha}{mathematical script small p}%
+\UnicodeMathSymbol{"1D4C6}{\mscrq }{\mathalpha}{mathematical script small q}%
+\UnicodeMathSymbol{"1D4C7}{\mscrr }{\mathalpha}{mathematical script small r}%
+\UnicodeMathSymbol{"1D4C8}{\mscrs }{\mathalpha}{mathematical script small s}%
+\UnicodeMathSymbol{"1D4C9}{\mscrt }{\mathalpha}{mathematical script small t}%
+\UnicodeMathSymbol{"1D4CA}{\mscru }{\mathalpha}{mathematical script small u}%
+\UnicodeMathSymbol{"1D4CB}{\mscrv }{\mathalpha}{mathematical script small v}%
+\UnicodeMathSymbol{"1D4CC}{\mscrw }{\mathalpha}{mathematical script small w}%
+\UnicodeMathSymbol{"1D4CD}{\mscrx }{\mathalpha}{mathematical script small x}%
+\UnicodeMathSymbol{"1D4CE}{\mscry }{\mathalpha}{mathematical script small y}%
+\UnicodeMathSymbol{"1D4CF}{\mscrz }{\mathalpha}{mathematical script small z}%
+\UnicodeMathSymbol{"1D4D0}{\mbfscrA }{\mathalpha}{mathematical bold script capital a}%
+\UnicodeMathSymbol{"1D4D1}{\mbfscrB }{\mathalpha}{mathematical bold script capital b}%
+\UnicodeMathSymbol{"1D4D2}{\mbfscrC }{\mathalpha}{mathematical bold script capital c}%
+\UnicodeMathSymbol{"1D4D3}{\mbfscrD }{\mathalpha}{mathematical bold script capital d}%
+\UnicodeMathSymbol{"1D4D4}{\mbfscrE }{\mathalpha}{mathematical bold script capital e}%
+\UnicodeMathSymbol{"1D4D5}{\mbfscrF }{\mathalpha}{mathematical bold script capital f}%
+\UnicodeMathSymbol{"1D4D6}{\mbfscrG }{\mathalpha}{mathematical bold script capital g}%
+\UnicodeMathSymbol{"1D4D7}{\mbfscrH }{\mathalpha}{mathematical bold script capital h}%
+\UnicodeMathSymbol{"1D4D8}{\mbfscrI }{\mathalpha}{mathematical bold script capital i}%
+\UnicodeMathSymbol{"1D4D9}{\mbfscrJ }{\mathalpha}{mathematical bold script capital j}%
+\UnicodeMathSymbol{"1D4DA}{\mbfscrK }{\mathalpha}{mathematical bold script capital k}%
+\UnicodeMathSymbol{"1D4DB}{\mbfscrL }{\mathalpha}{mathematical bold script capital l}%
+\UnicodeMathSymbol{"1D4DC}{\mbfscrM }{\mathalpha}{mathematical bold script capital m}%
+\UnicodeMathSymbol{"1D4DD}{\mbfscrN }{\mathalpha}{mathematical bold script capital n}%
+\UnicodeMathSymbol{"1D4DE}{\mbfscrO }{\mathalpha}{mathematical bold script capital o}%
+\UnicodeMathSymbol{"1D4DF}{\mbfscrP }{\mathalpha}{mathematical bold script capital p}%
+\UnicodeMathSymbol{"1D4E0}{\mbfscrQ }{\mathalpha}{mathematical bold script capital q}%
+\UnicodeMathSymbol{"1D4E1}{\mbfscrR }{\mathalpha}{mathematical bold script capital r}%
+\UnicodeMathSymbol{"1D4E2}{\mbfscrS }{\mathalpha}{mathematical bold script capital s}%
+\UnicodeMathSymbol{"1D4E3}{\mbfscrT }{\mathalpha}{mathematical bold script capital t}%
+\UnicodeMathSymbol{"1D4E4}{\mbfscrU }{\mathalpha}{mathematical bold script capital u}%
+\UnicodeMathSymbol{"1D4E5}{\mbfscrV }{\mathalpha}{mathematical bold script capital v}%
+\UnicodeMathSymbol{"1D4E6}{\mbfscrW }{\mathalpha}{mathematical bold script capital w}%
+\UnicodeMathSymbol{"1D4E7}{\mbfscrX }{\mathalpha}{mathematical bold script capital x}%
+\UnicodeMathSymbol{"1D4E8}{\mbfscrY }{\mathalpha}{mathematical bold script capital y}%
+\UnicodeMathSymbol{"1D4E9}{\mbfscrZ }{\mathalpha}{mathematical bold script capital z}%
+\UnicodeMathSymbol{"1D4EA}{\mbfscra }{\mathalpha}{mathematical bold script small a}%
+\UnicodeMathSymbol{"1D4EB}{\mbfscrb }{\mathalpha}{mathematical bold script small b}%
+\UnicodeMathSymbol{"1D4EC}{\mbfscrc }{\mathalpha}{mathematical bold script small c}%
+\UnicodeMathSymbol{"1D4ED}{\mbfscrd }{\mathalpha}{mathematical bold script small d}%
+\UnicodeMathSymbol{"1D4EE}{\mbfscre }{\mathalpha}{mathematical bold script small e}%
+\UnicodeMathSymbol{"1D4EF}{\mbfscrf }{\mathalpha}{mathematical bold script small f}%
+\UnicodeMathSymbol{"1D4F0}{\mbfscrg }{\mathalpha}{mathematical bold script small g}%
+\UnicodeMathSymbol{"1D4F1}{\mbfscrh }{\mathalpha}{mathematical bold script small h}%
+\UnicodeMathSymbol{"1D4F2}{\mbfscri }{\mathalpha}{mathematical bold script small i}%
+\UnicodeMathSymbol{"1D4F3}{\mbfscrj }{\mathalpha}{mathematical bold script small j}%
+\UnicodeMathSymbol{"1D4F4}{\mbfscrk }{\mathalpha}{mathematical bold script small k}%
+\UnicodeMathSymbol{"1D4F5}{\mbfscrl }{\mathalpha}{mathematical bold script small l}%
+\UnicodeMathSymbol{"1D4F6}{\mbfscrm }{\mathalpha}{mathematical bold script small m}%
+\UnicodeMathSymbol{"1D4F7}{\mbfscrn }{\mathalpha}{mathematical bold script small n}%
+\UnicodeMathSymbol{"1D4F8}{\mbfscro }{\mathalpha}{mathematical bold script small o}%
+\UnicodeMathSymbol{"1D4F9}{\mbfscrp }{\mathalpha}{mathematical bold script small p}%
+\UnicodeMathSymbol{"1D4FA}{\mbfscrq }{\mathalpha}{mathematical bold script small q}%
+\UnicodeMathSymbol{"1D4FB}{\mbfscrr }{\mathalpha}{mathematical bold script small r}%
+\UnicodeMathSymbol{"1D4FC}{\mbfscrs }{\mathalpha}{mathematical bold script small s}%
+\UnicodeMathSymbol{"1D4FD}{\mbfscrt }{\mathalpha}{mathematical bold script small t}%
+\UnicodeMathSymbol{"1D4FE}{\mbfscru }{\mathalpha}{mathematical bold script small u}%
+\UnicodeMathSymbol{"1D4FF}{\mbfscrv }{\mathalpha}{mathematical bold script small v}%
+\UnicodeMathSymbol{"1D500}{\mbfscrw }{\mathalpha}{mathematical bold script small w}%
+\UnicodeMathSymbol{"1D501}{\mbfscrx }{\mathalpha}{mathematical bold script small x}%
+\UnicodeMathSymbol{"1D502}{\mbfscry }{\mathalpha}{mathematical bold script small y}%
+\UnicodeMathSymbol{"1D503}{\mbfscrz }{\mathalpha}{mathematical bold script small z}%
+\UnicodeMathSymbol{"1D504}{\mfrakA }{\mathalpha}{mathematical fraktur capital a}%
+\UnicodeMathSymbol{"1D505}{\mfrakB }{\mathalpha}{mathematical fraktur capital b}%
+\UnicodeMathSymbol{"1D507}{\mfrakD }{\mathalpha}{mathematical fraktur capital d}%
+\UnicodeMathSymbol{"1D508}{\mfrakE }{\mathalpha}{mathematical fraktur capital e}%
+\UnicodeMathSymbol{"1D509}{\mfrakF }{\mathalpha}{mathematical fraktur capital f}%
+\UnicodeMathSymbol{"1D50A}{\mfrakG }{\mathalpha}{mathematical fraktur capital g}%
+\UnicodeMathSymbol{"1D50D}{\mfrakJ }{\mathalpha}{mathematical fraktur capital j}%
+\UnicodeMathSymbol{"1D50E}{\mfrakK }{\mathalpha}{mathematical fraktur capital k}%
+\UnicodeMathSymbol{"1D50F}{\mfrakL }{\mathalpha}{mathematical fraktur capital l}%
+\UnicodeMathSymbol{"1D510}{\mfrakM }{\mathalpha}{mathematical fraktur capital m}%
+\UnicodeMathSymbol{"1D511}{\mfrakN }{\mathalpha}{mathematical fraktur capital n}%
+\UnicodeMathSymbol{"1D512}{\mfrakO }{\mathalpha}{mathematical fraktur capital o}%
+\UnicodeMathSymbol{"1D513}{\mfrakP }{\mathalpha}{mathematical fraktur capital p}%
+\UnicodeMathSymbol{"1D514}{\mfrakQ }{\mathalpha}{mathematical fraktur capital q}%
+\UnicodeMathSymbol{"1D516}{\mfrakS }{\mathalpha}{mathematical fraktur capital s}%
+\UnicodeMathSymbol{"1D517}{\mfrakT }{\mathalpha}{mathematical fraktur capital t}%
+\UnicodeMathSymbol{"1D518}{\mfrakU }{\mathalpha}{mathematical fraktur capital u}%
+\UnicodeMathSymbol{"1D519}{\mfrakV }{\mathalpha}{mathematical fraktur capital v}%
+\UnicodeMathSymbol{"1D51A}{\mfrakW }{\mathalpha}{mathematical fraktur capital w}%
+\UnicodeMathSymbol{"1D51B}{\mfrakX }{\mathalpha}{mathematical fraktur capital x}%
+\UnicodeMathSymbol{"1D51C}{\mfrakY }{\mathalpha}{mathematical fraktur capital y}%
+\UnicodeMathSymbol{"1D51E}{\mfraka }{\mathalpha}{mathematical fraktur small a}%
+\UnicodeMathSymbol{"1D51F}{\mfrakb }{\mathalpha}{mathematical fraktur small b}%
+\UnicodeMathSymbol{"1D520}{\mfrakc }{\mathalpha}{mathematical fraktur small c}%
+\UnicodeMathSymbol{"1D521}{\mfrakd }{\mathalpha}{mathematical fraktur small d}%
+\UnicodeMathSymbol{"1D522}{\mfrake }{\mathalpha}{mathematical fraktur small e}%
+\UnicodeMathSymbol{"1D523}{\mfrakf }{\mathalpha}{mathematical fraktur small f}%
+\UnicodeMathSymbol{"1D524}{\mfrakg }{\mathalpha}{mathematical fraktur small g}%
+\UnicodeMathSymbol{"1D525}{\mfrakh }{\mathalpha}{mathematical fraktur small h}%
+\UnicodeMathSymbol{"1D526}{\mfraki }{\mathalpha}{mathematical fraktur small i}%
+\UnicodeMathSymbol{"1D527}{\mfrakj }{\mathalpha}{mathematical fraktur small j}%
+\UnicodeMathSymbol{"1D528}{\mfrakk }{\mathalpha}{mathematical fraktur small k}%
+\UnicodeMathSymbol{"1D529}{\mfrakl }{\mathalpha}{mathematical fraktur small l}%
+\UnicodeMathSymbol{"1D52A}{\mfrakm }{\mathalpha}{mathematical fraktur small m}%
+\UnicodeMathSymbol{"1D52B}{\mfrakn }{\mathalpha}{mathematical fraktur small n}%
+\UnicodeMathSymbol{"1D52C}{\mfrako }{\mathalpha}{mathematical fraktur small o}%
+\UnicodeMathSymbol{"1D52D}{\mfrakp }{\mathalpha}{mathematical fraktur small p}%
+\UnicodeMathSymbol{"1D52E}{\mfrakq }{\mathalpha}{mathematical fraktur small q}%
+\UnicodeMathSymbol{"1D52F}{\mfrakr }{\mathalpha}{mathematical fraktur small r}%
+\UnicodeMathSymbol{"1D530}{\mfraks }{\mathalpha}{mathematical fraktur small s}%
+\UnicodeMathSymbol{"1D531}{\mfrakt }{\mathalpha}{mathematical fraktur small t}%
+\UnicodeMathSymbol{"1D532}{\mfraku }{\mathalpha}{mathematical fraktur small u}%
+\UnicodeMathSymbol{"1D533}{\mfrakv }{\mathalpha}{mathematical fraktur small v}%
+\UnicodeMathSymbol{"1D534}{\mfrakw }{\mathalpha}{mathematical fraktur small w}%
+\UnicodeMathSymbol{"1D535}{\mfrakx }{\mathalpha}{mathematical fraktur small x}%
+\UnicodeMathSymbol{"1D536}{\mfraky }{\mathalpha}{mathematical fraktur small y}%
+\UnicodeMathSymbol{"1D537}{\mfrakz }{\mathalpha}{mathematical fraktur small z}%
+\UnicodeMathSymbol{"1D538}{\BbbA }{\mathalpha}{mathematical double-struck capital a}%
+\UnicodeMathSymbol{"1D539}{\BbbB }{\mathalpha}{mathematical double-struck capital b}%
+\UnicodeMathSymbol{"1D53B}{\BbbD }{\mathalpha}{mathematical double-struck capital d}%
+\UnicodeMathSymbol{"1D53C}{\BbbE }{\mathalpha}{mathematical double-struck capital e}%
+\UnicodeMathSymbol{"1D53D}{\BbbF }{\mathalpha}{mathematical double-struck capital f}%
+\UnicodeMathSymbol{"1D53E}{\BbbG }{\mathalpha}{mathematical double-struck capital g}%
+\UnicodeMathSymbol{"1D540}{\BbbI }{\mathalpha}{mathematical double-struck capital i}%
+\UnicodeMathSymbol{"1D541}{\BbbJ }{\mathalpha}{mathematical double-struck capital j}%
+\UnicodeMathSymbol{"1D542}{\BbbK }{\mathalpha}{mathematical double-struck capital k}%
+\UnicodeMathSymbol{"1D543}{\BbbL }{\mathalpha}{mathematical double-struck capital l}%
+\UnicodeMathSymbol{"1D544}{\BbbM }{\mathalpha}{mathematical double-struck capital m}%
+\UnicodeMathSymbol{"1D546}{\BbbO }{\mathalpha}{mathematical double-struck capital o}%
+\UnicodeMathSymbol{"1D54A}{\BbbS }{\mathalpha}{mathematical double-struck capital s}%
+\UnicodeMathSymbol{"1D54B}{\BbbT }{\mathalpha}{mathematical double-struck capital t}%
+\UnicodeMathSymbol{"1D54C}{\BbbU }{\mathalpha}{mathematical double-struck capital u}%
+\UnicodeMathSymbol{"1D54D}{\BbbV }{\mathalpha}{mathematical double-struck capital v}%
+\UnicodeMathSymbol{"1D54E}{\BbbW }{\mathalpha}{mathematical double-struck capital w}%
+\UnicodeMathSymbol{"1D54F}{\BbbX }{\mathalpha}{mathematical double-struck capital x}%
+\UnicodeMathSymbol{"1D550}{\BbbY }{\mathalpha}{mathematical double-struck capital y}%
+\UnicodeMathSymbol{"1D552}{\Bbba }{\mathalpha}{mathematical double-struck small a}%
+\UnicodeMathSymbol{"1D553}{\Bbbb }{\mathalpha}{mathematical double-struck small b}%
+\UnicodeMathSymbol{"1D554}{\Bbbc }{\mathalpha}{mathematical double-struck small c}%
+\UnicodeMathSymbol{"1D555}{\Bbbd }{\mathalpha}{mathematical double-struck small d}%
+\UnicodeMathSymbol{"1D556}{\Bbbe }{\mathalpha}{mathematical double-struck small e}%
+\UnicodeMathSymbol{"1D557}{\Bbbf }{\mathalpha}{mathematical double-struck small f}%
+\UnicodeMathSymbol{"1D558}{\Bbbg }{\mathalpha}{mathematical double-struck small g}%
+\UnicodeMathSymbol{"1D559}{\Bbbh }{\mathalpha}{mathematical double-struck small h}%
+\UnicodeMathSymbol{"1D55A}{\Bbbi }{\mathalpha}{mathematical double-struck small i}%
+\UnicodeMathSymbol{"1D55B}{\Bbbj }{\mathalpha}{mathematical double-struck small j}%
+\UnicodeMathSymbol{"1D55C}{\Bbbk }{\mathalpha}{mathematical double-struck small k}%
+\UnicodeMathSymbol{"1D55D}{\Bbbl }{\mathalpha}{mathematical double-struck small l}%
+\UnicodeMathSymbol{"1D55E}{\Bbbm }{\mathalpha}{mathematical double-struck small m}%
+\UnicodeMathSymbol{"1D55F}{\Bbbn }{\mathalpha}{mathematical double-struck small n}%
+\UnicodeMathSymbol{"1D560}{\Bbbo }{\mathalpha}{mathematical double-struck small o}%
+\UnicodeMathSymbol{"1D561}{\Bbbp }{\mathalpha}{mathematical double-struck small p}%
+\UnicodeMathSymbol{"1D562}{\Bbbq }{\mathalpha}{mathematical double-struck small q}%
+\UnicodeMathSymbol{"1D563}{\Bbbr }{\mathalpha}{mathematical double-struck small r}%
+\UnicodeMathSymbol{"1D564}{\Bbbs }{\mathalpha}{mathematical double-struck small s}%
+\UnicodeMathSymbol{"1D565}{\Bbbt }{\mathalpha}{mathematical double-struck small t}%
+\UnicodeMathSymbol{"1D566}{\Bbbu }{\mathalpha}{mathematical double-struck small u}%
+\UnicodeMathSymbol{"1D567}{\Bbbv }{\mathalpha}{mathematical double-struck small v}%
+\UnicodeMathSymbol{"1D568}{\Bbbw }{\mathalpha}{mathematical double-struck small w}%
+\UnicodeMathSymbol{"1D569}{\Bbbx }{\mathalpha}{mathematical double-struck small x}%
+\UnicodeMathSymbol{"1D56A}{\Bbby }{\mathalpha}{mathematical double-struck small y}%
+\UnicodeMathSymbol{"1D56B}{\Bbbz }{\mathalpha}{mathematical double-struck small z}%
+\UnicodeMathSymbol{"1D56C}{\mbffrakA }{\mathalpha}{mathematical bold fraktur capital a}%
+\UnicodeMathSymbol{"1D56D}{\mbffrakB }{\mathalpha}{mathematical bold fraktur capital b}%
+\UnicodeMathSymbol{"1D56E}{\mbffrakC }{\mathalpha}{mathematical bold fraktur capital c}%
+\UnicodeMathSymbol{"1D56F}{\mbffrakD }{\mathalpha}{mathematical bold fraktur capital d}%
+\UnicodeMathSymbol{"1D570}{\mbffrakE }{\mathalpha}{mathematical bold fraktur capital e}%
+\UnicodeMathSymbol{"1D571}{\mbffrakF }{\mathalpha}{mathematical bold fraktur capital f}%
+\UnicodeMathSymbol{"1D572}{\mbffrakG }{\mathalpha}{mathematical bold fraktur capital g}%
+\UnicodeMathSymbol{"1D573}{\mbffrakH }{\mathalpha}{mathematical bold fraktur capital h}%
+\UnicodeMathSymbol{"1D574}{\mbffrakI }{\mathalpha}{mathematical bold fraktur capital i}%
+\UnicodeMathSymbol{"1D575}{\mbffrakJ }{\mathalpha}{mathematical bold fraktur capital j}%
+\UnicodeMathSymbol{"1D576}{\mbffrakK }{\mathalpha}{mathematical bold fraktur capital k}%
+\UnicodeMathSymbol{"1D577}{\mbffrakL }{\mathalpha}{mathematical bold fraktur capital l}%
+\UnicodeMathSymbol{"1D578}{\mbffrakM }{\mathalpha}{mathematical bold fraktur capital m}%
+\UnicodeMathSymbol{"1D579}{\mbffrakN }{\mathalpha}{mathematical bold fraktur capital n}%
+\UnicodeMathSymbol{"1D57A}{\mbffrakO }{\mathalpha}{mathematical bold fraktur capital o}%
+\UnicodeMathSymbol{"1D57B}{\mbffrakP }{\mathalpha}{mathematical bold fraktur capital p}%
+\UnicodeMathSymbol{"1D57C}{\mbffrakQ }{\mathalpha}{mathematical bold fraktur capital q}%
+\UnicodeMathSymbol{"1D57D}{\mbffrakR }{\mathalpha}{mathematical bold fraktur capital r}%
+\UnicodeMathSymbol{"1D57E}{\mbffrakS }{\mathalpha}{mathematical bold fraktur capital s}%
+\UnicodeMathSymbol{"1D57F}{\mbffrakT }{\mathalpha}{mathematical bold fraktur capital t}%
+\UnicodeMathSymbol{"1D580}{\mbffrakU }{\mathalpha}{mathematical bold fraktur capital u}%
+\UnicodeMathSymbol{"1D581}{\mbffrakV }{\mathalpha}{mathematical bold fraktur capital v}%
+\UnicodeMathSymbol{"1D582}{\mbffrakW }{\mathalpha}{mathematical bold fraktur capital w}%
+\UnicodeMathSymbol{"1D583}{\mbffrakX }{\mathalpha}{mathematical bold fraktur capital x}%
+\UnicodeMathSymbol{"1D584}{\mbffrakY }{\mathalpha}{mathematical bold fraktur capital y}%
+\UnicodeMathSymbol{"1D585}{\mbffrakZ }{\mathalpha}{mathematical bold fraktur capital z}%
+\UnicodeMathSymbol{"1D586}{\mbffraka }{\mathalpha}{mathematical bold fraktur small a}%
+\UnicodeMathSymbol{"1D587}{\mbffrakb }{\mathalpha}{mathematical bold fraktur small b}%
+\UnicodeMathSymbol{"1D588}{\mbffrakc }{\mathalpha}{mathematical bold fraktur small c}%
+\UnicodeMathSymbol{"1D589}{\mbffrakd }{\mathalpha}{mathematical bold fraktur small d}%
+\UnicodeMathSymbol{"1D58A}{\mbffrake }{\mathalpha}{mathematical bold fraktur small e}%
+\UnicodeMathSymbol{"1D58B}{\mbffrakf }{\mathalpha}{mathematical bold fraktur small f}%
+\UnicodeMathSymbol{"1D58C}{\mbffrakg }{\mathalpha}{mathematical bold fraktur small g}%
+\UnicodeMathSymbol{"1D58D}{\mbffrakh }{\mathalpha}{mathematical bold fraktur small h}%
+\UnicodeMathSymbol{"1D58E}{\mbffraki }{\mathalpha}{mathematical bold fraktur small i}%
+\UnicodeMathSymbol{"1D58F}{\mbffrakj }{\mathalpha}{mathematical bold fraktur small j}%
+\UnicodeMathSymbol{"1D590}{\mbffrakk }{\mathalpha}{mathematical bold fraktur small k}%
+\UnicodeMathSymbol{"1D591}{\mbffrakl }{\mathalpha}{mathematical bold fraktur small l}%
+\UnicodeMathSymbol{"1D592}{\mbffrakm }{\mathalpha}{mathematical bold fraktur small m}%
+\UnicodeMathSymbol{"1D593}{\mbffrakn }{\mathalpha}{mathematical bold fraktur small n}%
+\UnicodeMathSymbol{"1D594}{\mbffrako }{\mathalpha}{mathematical bold fraktur small o}%
+\UnicodeMathSymbol{"1D595}{\mbffrakp }{\mathalpha}{mathematical bold fraktur small p}%
+\UnicodeMathSymbol{"1D596}{\mbffrakq }{\mathalpha}{mathematical bold fraktur small q}%
+\UnicodeMathSymbol{"1D597}{\mbffrakr }{\mathalpha}{mathematical bold fraktur small r}%
+\UnicodeMathSymbol{"1D598}{\mbffraks }{\mathalpha}{mathematical bold fraktur small s}%
+\UnicodeMathSymbol{"1D599}{\mbffrakt }{\mathalpha}{mathematical bold fraktur small t}%
+\UnicodeMathSymbol{"1D59A}{\mbffraku }{\mathalpha}{mathematical bold fraktur small u}%
+\UnicodeMathSymbol{"1D59B}{\mbffrakv }{\mathalpha}{mathematical bold fraktur small v}%
+\UnicodeMathSymbol{"1D59C}{\mbffrakw }{\mathalpha}{mathematical bold fraktur small w}%
+\UnicodeMathSymbol{"1D59D}{\mbffrakx }{\mathalpha}{mathematical bold fraktur small x}%
+\UnicodeMathSymbol{"1D59E}{\mbffraky }{\mathalpha}{mathematical bold fraktur small y}%
+\UnicodeMathSymbol{"1D59F}{\mbffrakz }{\mathalpha}{mathematical bold fraktur small z}%
+\UnicodeMathSymbol{"1D5A0}{\msansA }{\mathalpha}{mathematical sans-serif capital a}%
+\UnicodeMathSymbol{"1D5A1}{\msansB }{\mathalpha}{mathematical sans-serif capital b}%
+\UnicodeMathSymbol{"1D5A2}{\msansC }{\mathalpha}{mathematical sans-serif capital c}%
+\UnicodeMathSymbol{"1D5A3}{\msansD }{\mathalpha}{mathematical sans-serif capital d}%
+\UnicodeMathSymbol{"1D5A4}{\msansE }{\mathalpha}{mathematical sans-serif capital e}%
+\UnicodeMathSymbol{"1D5A5}{\msansF }{\mathalpha}{mathematical sans-serif capital f}%
+\UnicodeMathSymbol{"1D5A6}{\msansG }{\mathalpha}{mathematical sans-serif capital g}%
+\UnicodeMathSymbol{"1D5A7}{\msansH }{\mathalpha}{mathematical sans-serif capital h}%
+\UnicodeMathSymbol{"1D5A8}{\msansI }{\mathalpha}{mathematical sans-serif capital i}%
+\UnicodeMathSymbol{"1D5A9}{\msansJ }{\mathalpha}{mathematical sans-serif capital j}%
+\UnicodeMathSymbol{"1D5AA}{\msansK }{\mathalpha}{mathematical sans-serif capital k}%
+\UnicodeMathSymbol{"1D5AB}{\msansL }{\mathalpha}{mathematical sans-serif capital l}%
+\UnicodeMathSymbol{"1D5AC}{\msansM }{\mathalpha}{mathematical sans-serif capital m}%
+\UnicodeMathSymbol{"1D5AD}{\msansN }{\mathalpha}{mathematical sans-serif capital n}%
+\UnicodeMathSymbol{"1D5AE}{\msansO }{\mathalpha}{mathematical sans-serif capital o}%
+\UnicodeMathSymbol{"1D5AF}{\msansP }{\mathalpha}{mathematical sans-serif capital p}%
+\UnicodeMathSymbol{"1D5B0}{\msansQ }{\mathalpha}{mathematical sans-serif capital q}%
+\UnicodeMathSymbol{"1D5B1}{\msansR }{\mathalpha}{mathematical sans-serif capital r}%
+\UnicodeMathSymbol{"1D5B2}{\msansS }{\mathalpha}{mathematical sans-serif capital s}%
+\UnicodeMathSymbol{"1D5B3}{\msansT }{\mathalpha}{mathematical sans-serif capital t}%
+\UnicodeMathSymbol{"1D5B4}{\msansU }{\mathalpha}{mathematical sans-serif capital u}%
+\UnicodeMathSymbol{"1D5B5}{\msansV }{\mathalpha}{mathematical sans-serif capital v}%
+\UnicodeMathSymbol{"1D5B6}{\msansW }{\mathalpha}{mathematical sans-serif capital w}%
+\UnicodeMathSymbol{"1D5B7}{\msansX }{\mathalpha}{mathematical sans-serif capital x}%
+\UnicodeMathSymbol{"1D5B8}{\msansY }{\mathalpha}{mathematical sans-serif capital y}%
+\UnicodeMathSymbol{"1D5B9}{\msansZ }{\mathalpha}{mathematical sans-serif capital z}%
+\UnicodeMathSymbol{"1D5BA}{\msansa }{\mathalpha}{mathematical sans-serif small a}%
+\UnicodeMathSymbol{"1D5BB}{\msansb }{\mathalpha}{mathematical sans-serif small b}%
+\UnicodeMathSymbol{"1D5BC}{\msansc }{\mathalpha}{mathematical sans-serif small c}%
+\UnicodeMathSymbol{"1D5BD}{\msansd }{\mathalpha}{mathematical sans-serif small d}%
+\UnicodeMathSymbol{"1D5BE}{\msanse }{\mathalpha}{mathematical sans-serif small e}%
+\UnicodeMathSymbol{"1D5BF}{\msansf }{\mathalpha}{mathematical sans-serif small f}%
+\UnicodeMathSymbol{"1D5C0}{\msansg }{\mathalpha}{mathematical sans-serif small g}%
+\UnicodeMathSymbol{"1D5C1}{\msansh }{\mathalpha}{mathematical sans-serif small h}%
+\UnicodeMathSymbol{"1D5C2}{\msansi }{\mathalpha}{mathematical sans-serif small i}%
+\UnicodeMathSymbol{"1D5C3}{\msansj }{\mathalpha}{mathematical sans-serif small j}%
+\UnicodeMathSymbol{"1D5C4}{\msansk }{\mathalpha}{mathematical sans-serif small k}%
+\UnicodeMathSymbol{"1D5C5}{\msansl }{\mathalpha}{mathematical sans-serif small l}%
+\UnicodeMathSymbol{"1D5C6}{\msansm }{\mathalpha}{mathematical sans-serif small m}%
+\UnicodeMathSymbol{"1D5C7}{\msansn }{\mathalpha}{mathematical sans-serif small n}%
+\UnicodeMathSymbol{"1D5C8}{\msanso }{\mathalpha}{mathematical sans-serif small o}%
+\UnicodeMathSymbol{"1D5C9}{\msansp }{\mathalpha}{mathematical sans-serif small p}%
+\UnicodeMathSymbol{"1D5CA}{\msansq }{\mathalpha}{mathematical sans-serif small q}%
+\UnicodeMathSymbol{"1D5CB}{\msansr }{\mathalpha}{mathematical sans-serif small r}%
+\UnicodeMathSymbol{"1D5CC}{\msanss }{\mathalpha}{mathematical sans-serif small s}%
+\UnicodeMathSymbol{"1D5CD}{\msanst }{\mathalpha}{mathematical sans-serif small t}%
+\UnicodeMathSymbol{"1D5CE}{\msansu }{\mathalpha}{mathematical sans-serif small u}%
+\UnicodeMathSymbol{"1D5CF}{\msansv }{\mathalpha}{mathematical sans-serif small v}%
+\UnicodeMathSymbol{"1D5D0}{\msansw }{\mathalpha}{mathematical sans-serif small w}%
+\UnicodeMathSymbol{"1D5D1}{\msansx }{\mathalpha}{mathematical sans-serif small x}%
+\UnicodeMathSymbol{"1D5D2}{\msansy }{\mathalpha}{mathematical sans-serif small y}%
+\UnicodeMathSymbol{"1D5D3}{\msansz }{\mathalpha}{mathematical sans-serif small z}%
+\UnicodeMathSymbol{"1D5D4}{\mbfsansA }{\mathalpha}{mathematical sans-serif bold capital a}%
+\UnicodeMathSymbol{"1D5D5}{\mbfsansB }{\mathalpha}{mathematical sans-serif bold capital b}%
+\UnicodeMathSymbol{"1D5D6}{\mbfsansC }{\mathalpha}{mathematical sans-serif bold capital c}%
+\UnicodeMathSymbol{"1D5D7}{\mbfsansD }{\mathalpha}{mathematical sans-serif bold capital d}%
+\UnicodeMathSymbol{"1D5D8}{\mbfsansE }{\mathalpha}{mathematical sans-serif bold capital e}%
+\UnicodeMathSymbol{"1D5D9}{\mbfsansF }{\mathalpha}{mathematical sans-serif bold capital f}%
+\UnicodeMathSymbol{"1D5DA}{\mbfsansG }{\mathalpha}{mathematical sans-serif bold capital g}%
+\UnicodeMathSymbol{"1D5DB}{\mbfsansH }{\mathalpha}{mathematical sans-serif bold capital h}%
+\UnicodeMathSymbol{"1D5DC}{\mbfsansI }{\mathalpha}{mathematical sans-serif bold capital i}%
+\UnicodeMathSymbol{"1D5DD}{\mbfsansJ }{\mathalpha}{mathematical sans-serif bold capital j}%
+\UnicodeMathSymbol{"1D5DE}{\mbfsansK }{\mathalpha}{mathematical sans-serif bold capital k}%
+\UnicodeMathSymbol{"1D5DF}{\mbfsansL }{\mathalpha}{mathematical sans-serif bold capital l}%
+\UnicodeMathSymbol{"1D5E0}{\mbfsansM }{\mathalpha}{mathematical sans-serif bold capital m}%
+\UnicodeMathSymbol{"1D5E1}{\mbfsansN }{\mathalpha}{mathematical sans-serif bold capital n}%
+\UnicodeMathSymbol{"1D5E2}{\mbfsansO }{\mathalpha}{mathematical sans-serif bold capital o}%
+\UnicodeMathSymbol{"1D5E3}{\mbfsansP }{\mathalpha}{mathematical sans-serif bold capital p}%
+\UnicodeMathSymbol{"1D5E4}{\mbfsansQ }{\mathalpha}{mathematical sans-serif bold capital q}%
+\UnicodeMathSymbol{"1D5E5}{\mbfsansR }{\mathalpha}{mathematical sans-serif bold capital r}%
+\UnicodeMathSymbol{"1D5E6}{\mbfsansS }{\mathalpha}{mathematical sans-serif bold capital s}%
+\UnicodeMathSymbol{"1D5E7}{\mbfsansT }{\mathalpha}{mathematical sans-serif bold capital t}%
+\UnicodeMathSymbol{"1D5E8}{\mbfsansU }{\mathalpha}{mathematical sans-serif bold capital u}%
+\UnicodeMathSymbol{"1D5E9}{\mbfsansV }{\mathalpha}{mathematical sans-serif bold capital v}%
+\UnicodeMathSymbol{"1D5EA}{\mbfsansW }{\mathalpha}{mathematical sans-serif bold capital w}%
+\UnicodeMathSymbol{"1D5EB}{\mbfsansX }{\mathalpha}{mathematical sans-serif bold capital x}%
+\UnicodeMathSymbol{"1D5EC}{\mbfsansY }{\mathalpha}{mathematical sans-serif bold capital y}%
+\UnicodeMathSymbol{"1D5ED}{\mbfsansZ }{\mathalpha}{mathematical sans-serif bold capital z}%
+\UnicodeMathSymbol{"1D5EE}{\mbfsansa }{\mathalpha}{mathematical sans-serif bold small a}%
+\UnicodeMathSymbol{"1D5EF}{\mbfsansb }{\mathalpha}{mathematical sans-serif bold small b}%
+\UnicodeMathSymbol{"1D5F0}{\mbfsansc }{\mathalpha}{mathematical sans-serif bold small c}%
+\UnicodeMathSymbol{"1D5F1}{\mbfsansd }{\mathalpha}{mathematical sans-serif bold small d}%
+\UnicodeMathSymbol{"1D5F2}{\mbfsanse }{\mathalpha}{mathematical sans-serif bold small e}%
+\UnicodeMathSymbol{"1D5F3}{\mbfsansf }{\mathalpha}{mathematical sans-serif bold small f}%
+\UnicodeMathSymbol{"1D5F4}{\mbfsansg }{\mathalpha}{mathematical sans-serif bold small g}%
+\UnicodeMathSymbol{"1D5F5}{\mbfsansh }{\mathalpha}{mathematical sans-serif bold small h}%
+\UnicodeMathSymbol{"1D5F6}{\mbfsansi }{\mathalpha}{mathematical sans-serif bold small i}%
+\UnicodeMathSymbol{"1D5F7}{\mbfsansj }{\mathalpha}{mathematical sans-serif bold small j}%
+\UnicodeMathSymbol{"1D5F8}{\mbfsansk }{\mathalpha}{mathematical sans-serif bold small k}%
+\UnicodeMathSymbol{"1D5F9}{\mbfsansl }{\mathalpha}{mathematical sans-serif bold small l}%
+\UnicodeMathSymbol{"1D5FA}{\mbfsansm }{\mathalpha}{mathematical sans-serif bold small m}%
+\UnicodeMathSymbol{"1D5FB}{\mbfsansn }{\mathalpha}{mathematical sans-serif bold small n}%
+\UnicodeMathSymbol{"1D5FC}{\mbfsanso }{\mathalpha}{mathematical sans-serif bold small o}%
+\UnicodeMathSymbol{"1D5FD}{\mbfsansp }{\mathalpha}{mathematical sans-serif bold small p}%
+\UnicodeMathSymbol{"1D5FE}{\mbfsansq }{\mathalpha}{mathematical sans-serif bold small q}%
+\UnicodeMathSymbol{"1D5FF}{\mbfsansr }{\mathalpha}{mathematical sans-serif bold small r}%
+\UnicodeMathSymbol{"1D600}{\mbfsanss }{\mathalpha}{mathematical sans-serif bold small s}%
+\UnicodeMathSymbol{"1D601}{\mbfsanst }{\mathalpha}{mathematical sans-serif bold small t}%
+\UnicodeMathSymbol{"1D602}{\mbfsansu }{\mathalpha}{mathematical sans-serif bold small u}%
+\UnicodeMathSymbol{"1D603}{\mbfsansv }{\mathalpha}{mathematical sans-serif bold small v}%
+\UnicodeMathSymbol{"1D604}{\mbfsansw }{\mathalpha}{mathematical sans-serif bold small w}%
+\UnicodeMathSymbol{"1D605}{\mbfsansx }{\mathalpha}{mathematical sans-serif bold small x}%
+\UnicodeMathSymbol{"1D606}{\mbfsansy }{\mathalpha}{mathematical sans-serif bold small y}%
+\UnicodeMathSymbol{"1D607}{\mbfsansz }{\mathalpha}{mathematical sans-serif bold small z}%
+\UnicodeMathSymbol{"1D608}{\mitsansA }{\mathalpha}{mathematical sans-serif italic capital a}%
+\UnicodeMathSymbol{"1D609}{\mitsansB }{\mathalpha}{mathematical sans-serif italic capital b}%
+\UnicodeMathSymbol{"1D60A}{\mitsansC }{\mathalpha}{mathematical sans-serif italic capital c}%
+\UnicodeMathSymbol{"1D60B}{\mitsansD }{\mathalpha}{mathematical sans-serif italic capital d}%
+\UnicodeMathSymbol{"1D60C}{\mitsansE }{\mathalpha}{mathematical sans-serif italic capital e}%
+\UnicodeMathSymbol{"1D60D}{\mitsansF }{\mathalpha}{mathematical sans-serif italic capital f}%
+\UnicodeMathSymbol{"1D60E}{\mitsansG }{\mathalpha}{mathematical sans-serif italic capital g}%
+\UnicodeMathSymbol{"1D60F}{\mitsansH }{\mathalpha}{mathematical sans-serif italic capital h}%
+\UnicodeMathSymbol{"1D610}{\mitsansI }{\mathalpha}{mathematical sans-serif italic capital i}%
+\UnicodeMathSymbol{"1D611}{\mitsansJ }{\mathalpha}{mathematical sans-serif italic capital j}%
+\UnicodeMathSymbol{"1D612}{\mitsansK }{\mathalpha}{mathematical sans-serif italic capital k}%
+\UnicodeMathSymbol{"1D613}{\mitsansL }{\mathalpha}{mathematical sans-serif italic capital l}%
+\UnicodeMathSymbol{"1D614}{\mitsansM }{\mathalpha}{mathematical sans-serif italic capital m}%
+\UnicodeMathSymbol{"1D615}{\mitsansN }{\mathalpha}{mathematical sans-serif italic capital n}%
+\UnicodeMathSymbol{"1D616}{\mitsansO }{\mathalpha}{mathematical sans-serif italic capital o}%
+\UnicodeMathSymbol{"1D617}{\mitsansP }{\mathalpha}{mathematical sans-serif italic capital p}%
+\UnicodeMathSymbol{"1D618}{\mitsansQ }{\mathalpha}{mathematical sans-serif italic capital q}%
+\UnicodeMathSymbol{"1D619}{\mitsansR }{\mathalpha}{mathematical sans-serif italic capital r}%
+\UnicodeMathSymbol{"1D61A}{\mitsansS }{\mathalpha}{mathematical sans-serif italic capital s}%
+\UnicodeMathSymbol{"1D61B}{\mitsansT }{\mathalpha}{mathematical sans-serif italic capital t}%
+\UnicodeMathSymbol{"1D61C}{\mitsansU }{\mathalpha}{mathematical sans-serif italic capital u}%
+\UnicodeMathSymbol{"1D61D}{\mitsansV }{\mathalpha}{mathematical sans-serif italic capital v}%
+\UnicodeMathSymbol{"1D61E}{\mitsansW }{\mathalpha}{mathematical sans-serif italic capital w}%
+\UnicodeMathSymbol{"1D61F}{\mitsansX }{\mathalpha}{mathematical sans-serif italic capital x}%
+\UnicodeMathSymbol{"1D620}{\mitsansY }{\mathalpha}{mathematical sans-serif italic capital y}%
+\UnicodeMathSymbol{"1D621}{\mitsansZ }{\mathalpha}{mathematical sans-serif italic capital z}%
+\UnicodeMathSymbol{"1D622}{\mitsansa }{\mathalpha}{mathematical sans-serif italic small a}%
+\UnicodeMathSymbol{"1D623}{\mitsansb }{\mathalpha}{mathematical sans-serif italic small b}%
+\UnicodeMathSymbol{"1D624}{\mitsansc }{\mathalpha}{mathematical sans-serif italic small c}%
+\UnicodeMathSymbol{"1D625}{\mitsansd }{\mathalpha}{mathematical sans-serif italic small d}%
+\UnicodeMathSymbol{"1D626}{\mitsanse }{\mathalpha}{mathematical sans-serif italic small e}%
+\UnicodeMathSymbol{"1D627}{\mitsansf }{\mathalpha}{mathematical sans-serif italic small f}%
+\UnicodeMathSymbol{"1D628}{\mitsansg }{\mathalpha}{mathematical sans-serif italic small g}%
+\UnicodeMathSymbol{"1D629}{\mitsansh }{\mathalpha}{mathematical sans-serif italic small h}%
+\UnicodeMathSymbol{"1D62A}{\mitsansi }{\mathalpha}{mathematical sans-serif italic small i}%
+\UnicodeMathSymbol{"1D62B}{\mitsansj }{\mathalpha}{mathematical sans-serif italic small j}%
+\UnicodeMathSymbol{"1D62C}{\mitsansk }{\mathalpha}{mathematical sans-serif italic small k}%
+\UnicodeMathSymbol{"1D62D}{\mitsansl }{\mathalpha}{mathematical sans-serif italic small l}%
+\UnicodeMathSymbol{"1D62E}{\mitsansm }{\mathalpha}{mathematical sans-serif italic small m}%
+\UnicodeMathSymbol{"1D62F}{\mitsansn }{\mathalpha}{mathematical sans-serif italic small n}%
+\UnicodeMathSymbol{"1D630}{\mitsanso }{\mathalpha}{mathematical sans-serif italic small o}%
+\UnicodeMathSymbol{"1D631}{\mitsansp }{\mathalpha}{mathematical sans-serif italic small p}%
+\UnicodeMathSymbol{"1D632}{\mitsansq }{\mathalpha}{mathematical sans-serif italic small q}%
+\UnicodeMathSymbol{"1D633}{\mitsansr }{\mathalpha}{mathematical sans-serif italic small r}%
+\UnicodeMathSymbol{"1D634}{\mitsanss }{\mathalpha}{mathematical sans-serif italic small s}%
+\UnicodeMathSymbol{"1D635}{\mitsanst }{\mathalpha}{mathematical sans-serif italic small t}%
+\UnicodeMathSymbol{"1D636}{\mitsansu }{\mathalpha}{mathematical sans-serif italic small u}%
+\UnicodeMathSymbol{"1D637}{\mitsansv }{\mathalpha}{mathematical sans-serif italic small v}%
+\UnicodeMathSymbol{"1D638}{\mitsansw }{\mathalpha}{mathematical sans-serif italic small w}%
+\UnicodeMathSymbol{"1D639}{\mitsansx }{\mathalpha}{mathematical sans-serif italic small x}%
+\UnicodeMathSymbol{"1D63A}{\mitsansy }{\mathalpha}{mathematical sans-serif italic small y}%
+\UnicodeMathSymbol{"1D63B}{\mitsansz }{\mathalpha}{mathematical sans-serif italic small z}%
+\UnicodeMathSymbol{"1D63C}{\mbfitsansA }{\mathalpha}{mathematical sans-serif bold italic capital a}%
+\UnicodeMathSymbol{"1D63D}{\mbfitsansB }{\mathalpha}{mathematical sans-serif bold italic capital b}%
+\UnicodeMathSymbol{"1D63E}{\mbfitsansC }{\mathalpha}{mathematical sans-serif bold italic capital c}%
+\UnicodeMathSymbol{"1D63F}{\mbfitsansD }{\mathalpha}{mathematical sans-serif bold italic capital d}%
+\UnicodeMathSymbol{"1D640}{\mbfitsansE }{\mathalpha}{mathematical sans-serif bold italic capital e}%
+\UnicodeMathSymbol{"1D641}{\mbfitsansF }{\mathalpha}{mathematical sans-serif bold italic capital f}%
+\UnicodeMathSymbol{"1D642}{\mbfitsansG }{\mathalpha}{mathematical sans-serif bold italic capital g}%
+\UnicodeMathSymbol{"1D643}{\mbfitsansH }{\mathalpha}{mathematical sans-serif bold italic capital h}%
+\UnicodeMathSymbol{"1D644}{\mbfitsansI }{\mathalpha}{mathematical sans-serif bold italic capital i}%
+\UnicodeMathSymbol{"1D645}{\mbfitsansJ }{\mathalpha}{mathematical sans-serif bold italic capital j}%
+\UnicodeMathSymbol{"1D646}{\mbfitsansK }{\mathalpha}{mathematical sans-serif bold italic capital k}%
+\UnicodeMathSymbol{"1D647}{\mbfitsansL }{\mathalpha}{mathematical sans-serif bold italic capital l}%
+\UnicodeMathSymbol{"1D648}{\mbfitsansM }{\mathalpha}{mathematical sans-serif bold italic capital m}%
+\UnicodeMathSymbol{"1D649}{\mbfitsansN }{\mathalpha}{mathematical sans-serif bold italic capital n}%
+\UnicodeMathSymbol{"1D64A}{\mbfitsansO }{\mathalpha}{mathematical sans-serif bold italic capital o}%
+\UnicodeMathSymbol{"1D64B}{\mbfitsansP }{\mathalpha}{mathematical sans-serif bold italic capital p}%
+\UnicodeMathSymbol{"1D64C}{\mbfitsansQ }{\mathalpha}{mathematical sans-serif bold italic capital q}%
+\UnicodeMathSymbol{"1D64D}{\mbfitsansR }{\mathalpha}{mathematical sans-serif bold italic capital r}%
+\UnicodeMathSymbol{"1D64E}{\mbfitsansS }{\mathalpha}{mathematical sans-serif bold italic capital s}%
+\UnicodeMathSymbol{"1D64F}{\mbfitsansT }{\mathalpha}{mathematical sans-serif bold italic capital t}%
+\UnicodeMathSymbol{"1D650}{\mbfitsansU }{\mathalpha}{mathematical sans-serif bold italic capital u}%
+\UnicodeMathSymbol{"1D651}{\mbfitsansV }{\mathalpha}{mathematical sans-serif bold italic capital v}%
+\UnicodeMathSymbol{"1D652}{\mbfitsansW }{\mathalpha}{mathematical sans-serif bold italic capital w}%
+\UnicodeMathSymbol{"1D653}{\mbfitsansX }{\mathalpha}{mathematical sans-serif bold italic capital x}%
+\UnicodeMathSymbol{"1D654}{\mbfitsansY }{\mathalpha}{mathematical sans-serif bold italic capital y}%
+\UnicodeMathSymbol{"1D655}{\mbfitsansZ }{\mathalpha}{mathematical sans-serif bold italic capital z}%
+\UnicodeMathSymbol{"1D656}{\mbfitsansa }{\mathalpha}{mathematical sans-serif bold italic small a}%
+\UnicodeMathSymbol{"1D657}{\mbfitsansb }{\mathalpha}{mathematical sans-serif bold italic small b}%
+\UnicodeMathSymbol{"1D658}{\mbfitsansc }{\mathalpha}{mathematical sans-serif bold italic small c}%
+\UnicodeMathSymbol{"1D659}{\mbfitsansd }{\mathalpha}{mathematical sans-serif bold italic small d}%
+\UnicodeMathSymbol{"1D65A}{\mbfitsanse }{\mathalpha}{mathematical sans-serif bold italic small e}%
+\UnicodeMathSymbol{"1D65B}{\mbfitsansf }{\mathalpha}{mathematical sans-serif bold italic small f}%
+\UnicodeMathSymbol{"1D65C}{\mbfitsansg }{\mathalpha}{mathematical sans-serif bold italic small g}%
+\UnicodeMathSymbol{"1D65D}{\mbfitsansh }{\mathalpha}{mathematical sans-serif bold italic small h}%
+\UnicodeMathSymbol{"1D65E}{\mbfitsansi }{\mathalpha}{mathematical sans-serif bold italic small i}%
+\UnicodeMathSymbol{"1D65F}{\mbfitsansj }{\mathalpha}{mathematical sans-serif bold italic small j}%
+\UnicodeMathSymbol{"1D660}{\mbfitsansk }{\mathalpha}{mathematical sans-serif bold italic small k}%
+\UnicodeMathSymbol{"1D661}{\mbfitsansl }{\mathalpha}{mathematical sans-serif bold italic small l}%
+\UnicodeMathSymbol{"1D662}{\mbfitsansm }{\mathalpha}{mathematical sans-serif bold italic small m}%
+\UnicodeMathSymbol{"1D663}{\mbfitsansn }{\mathalpha}{mathematical sans-serif bold italic small n}%
+\UnicodeMathSymbol{"1D664}{\mbfitsanso }{\mathalpha}{mathematical sans-serif bold italic small o}%
+\UnicodeMathSymbol{"1D665}{\mbfitsansp }{\mathalpha}{mathematical sans-serif bold italic small p}%
+\UnicodeMathSymbol{"1D666}{\mbfitsansq }{\mathalpha}{mathematical sans-serif bold italic small q}%
+\UnicodeMathSymbol{"1D667}{\mbfitsansr }{\mathalpha}{mathematical sans-serif bold italic small r}%
+\UnicodeMathSymbol{"1D668}{\mbfitsanss }{\mathalpha}{mathematical sans-serif bold italic small s}%
+\UnicodeMathSymbol{"1D669}{\mbfitsanst }{\mathalpha}{mathematical sans-serif bold italic small t}%
+\UnicodeMathSymbol{"1D66A}{\mbfitsansu }{\mathalpha}{mathematical sans-serif bold italic small u}%
+\UnicodeMathSymbol{"1D66B}{\mbfitsansv }{\mathalpha}{mathematical sans-serif bold italic small v}%
+\UnicodeMathSymbol{"1D66C}{\mbfitsansw }{\mathalpha}{mathematical sans-serif bold italic small w}%
+\UnicodeMathSymbol{"1D66D}{\mbfitsansx }{\mathalpha}{mathematical sans-serif bold italic small x}%
+\UnicodeMathSymbol{"1D66E}{\mbfitsansy }{\mathalpha}{mathematical sans-serif bold italic small y}%
+\UnicodeMathSymbol{"1D66F}{\mbfitsansz }{\mathalpha}{mathematical sans-serif bold italic small z}%
+\UnicodeMathSymbol{"1D670}{\mttA }{\mathalpha}{mathematical monospace capital a}%
+\UnicodeMathSymbol{"1D671}{\mttB }{\mathalpha}{mathematical monospace capital b}%
+\UnicodeMathSymbol{"1D672}{\mttC }{\mathalpha}{mathematical monospace capital c}%
+\UnicodeMathSymbol{"1D673}{\mttD }{\mathalpha}{mathematical monospace capital d}%
+\UnicodeMathSymbol{"1D674}{\mttE }{\mathalpha}{mathematical monospace capital e}%
+\UnicodeMathSymbol{"1D675}{\mttF }{\mathalpha}{mathematical monospace capital f}%
+\UnicodeMathSymbol{"1D676}{\mttG }{\mathalpha}{mathematical monospace capital g}%
+\UnicodeMathSymbol{"1D677}{\mttH }{\mathalpha}{mathematical monospace capital h}%
+\UnicodeMathSymbol{"1D678}{\mttI }{\mathalpha}{mathematical monospace capital i}%
+\UnicodeMathSymbol{"1D679}{\mttJ }{\mathalpha}{mathematical monospace capital j}%
+\UnicodeMathSymbol{"1D67A}{\mttK }{\mathalpha}{mathematical monospace capital k}%
+\UnicodeMathSymbol{"1D67B}{\mttL }{\mathalpha}{mathematical monospace capital l}%
+\UnicodeMathSymbol{"1D67C}{\mttM }{\mathalpha}{mathematical monospace capital m}%
+\UnicodeMathSymbol{"1D67D}{\mttN }{\mathalpha}{mathematical monospace capital n}%
+\UnicodeMathSymbol{"1D67E}{\mttO }{\mathalpha}{mathematical monospace capital o}%
+\UnicodeMathSymbol{"1D67F}{\mttP }{\mathalpha}{mathematical monospace capital p}%
+\UnicodeMathSymbol{"1D680}{\mttQ }{\mathalpha}{mathematical monospace capital q}%
+\UnicodeMathSymbol{"1D681}{\mttR }{\mathalpha}{mathematical monospace capital r}%
+\UnicodeMathSymbol{"1D682}{\mttS }{\mathalpha}{mathematical monospace capital s}%
+\UnicodeMathSymbol{"1D683}{\mttT }{\mathalpha}{mathematical monospace capital t}%
+\UnicodeMathSymbol{"1D684}{\mttU }{\mathalpha}{mathematical monospace capital u}%
+\UnicodeMathSymbol{"1D685}{\mttV }{\mathalpha}{mathematical monospace capital v}%
+\UnicodeMathSymbol{"1D686}{\mttW }{\mathalpha}{mathematical monospace capital w}%
+\UnicodeMathSymbol{"1D687}{\mttX }{\mathalpha}{mathematical monospace capital x}%
+\UnicodeMathSymbol{"1D688}{\mttY }{\mathalpha}{mathematical monospace capital y}%
+\UnicodeMathSymbol{"1D689}{\mttZ }{\mathalpha}{mathematical monospace capital z}%
+\UnicodeMathSymbol{"1D68A}{\mtta }{\mathalpha}{mathematical monospace small a}%
+\UnicodeMathSymbol{"1D68B}{\mttb }{\mathalpha}{mathematical monospace small b}%
+\UnicodeMathSymbol{"1D68C}{\mttc }{\mathalpha}{mathematical monospace small c}%
+\UnicodeMathSymbol{"1D68D}{\mttd }{\mathalpha}{mathematical monospace small d}%
+\UnicodeMathSymbol{"1D68E}{\mtte }{\mathalpha}{mathematical monospace small e}%
+\UnicodeMathSymbol{"1D68F}{\mttf }{\mathalpha}{mathematical monospace small f}%
+\UnicodeMathSymbol{"1D690}{\mttg }{\mathalpha}{mathematical monospace small g}%
+\UnicodeMathSymbol{"1D691}{\mtth }{\mathalpha}{mathematical monospace small h}%
+\UnicodeMathSymbol{"1D692}{\mtti }{\mathalpha}{mathematical monospace small i}%
+\UnicodeMathSymbol{"1D693}{\mttj }{\mathalpha}{mathematical monospace small j}%
+\UnicodeMathSymbol{"1D694}{\mttk }{\mathalpha}{mathematical monospace small k}%
+\UnicodeMathSymbol{"1D695}{\mttl }{\mathalpha}{mathematical monospace small l}%
+\UnicodeMathSymbol{"1D696}{\mttm }{\mathalpha}{mathematical monospace small m}%
+\UnicodeMathSymbol{"1D697}{\mttn }{\mathalpha}{mathematical monospace small n}%
+\UnicodeMathSymbol{"1D698}{\mtto }{\mathalpha}{mathematical monospace small o}%
+\UnicodeMathSymbol{"1D699}{\mttp }{\mathalpha}{mathematical monospace small p}%
+\UnicodeMathSymbol{"1D69A}{\mttq }{\mathalpha}{mathematical monospace small q}%
+\UnicodeMathSymbol{"1D69B}{\mttr }{\mathalpha}{mathematical monospace small r}%
+\UnicodeMathSymbol{"1D69C}{\mtts }{\mathalpha}{mathematical monospace small s}%
+\UnicodeMathSymbol{"1D69D}{\mttt }{\mathalpha}{mathematical monospace small t}%
+\UnicodeMathSymbol{"1D69E}{\mttu }{\mathalpha}{mathematical monospace small u}%
+\UnicodeMathSymbol{"1D69F}{\mttv }{\mathalpha}{mathematical monospace small v}%
+\UnicodeMathSymbol{"1D6A0}{\mttw }{\mathalpha}{mathematical monospace small w}%
+\UnicodeMathSymbol{"1D6A1}{\mttx }{\mathalpha}{mathematical monospace small x}%
+\UnicodeMathSymbol{"1D6A2}{\mtty }{\mathalpha}{mathematical monospace small y}%
+\UnicodeMathSymbol{"1D6A3}{\mttz }{\mathalpha}{mathematical monospace small z}%
+\UnicodeMathSymbol{"1D6A4}{\imath }{\mathalpha}{mathematical italic small dotless i}%
+\UnicodeMathSymbol{"1D6A5}{\jmath }{\mathalpha}{mathematical italic small dotless j}%
+\UnicodeMathSymbol{"1D6A8}{\mbfAlpha }{\mathalpha}{mathematical bold capital alpha}%
+\UnicodeMathSymbol{"1D6A9}{\mbfBeta }{\mathalpha}{mathematical bold capital beta}%
+\UnicodeMathSymbol{"1D6AA}{\mbfGamma }{\mathalpha}{mathematical bold capital gamma}%
+\UnicodeMathSymbol{"1D6AB}{\mbfDelta }{\mathalpha}{mathematical bold capital delta}%
+\UnicodeMathSymbol{"1D6AC}{\mbfEpsilon }{\mathalpha}{mathematical bold capital epsilon}%
+\UnicodeMathSymbol{"1D6AD}{\mbfZeta }{\mathalpha}{mathematical bold capital zeta}%
+\UnicodeMathSymbol{"1D6AE}{\mbfEta }{\mathalpha}{mathematical bold capital eta}%
+\UnicodeMathSymbol{"1D6AF}{\mbfTheta }{\mathalpha}{mathematical bold capital theta}%
+\UnicodeMathSymbol{"1D6B0}{\mbfIota }{\mathalpha}{mathematical bold capital iota}%
+\UnicodeMathSymbol{"1D6B1}{\mbfKappa }{\mathalpha}{mathematical bold capital kappa}%
+\UnicodeMathSymbol{"1D6B2}{\mbfLambda }{\mathalpha}{mathematical bold capital lambda}%
+\UnicodeMathSymbol{"1D6B3}{\mbfMu }{\mathalpha}{mathematical bold capital mu}%
+\UnicodeMathSymbol{"1D6B4}{\mbfNu }{\mathalpha}{mathematical bold capital nu}%
+\UnicodeMathSymbol{"1D6B5}{\mbfXi }{\mathalpha}{mathematical bold capital xi}%
+\UnicodeMathSymbol{"1D6B6}{\mbfOmicron }{\mathalpha}{mathematical bold capital omicron}%
+\UnicodeMathSymbol{"1D6B7}{\mbfPi }{\mathalpha}{mathematical bold capital pi}%
+\UnicodeMathSymbol{"1D6B8}{\mbfRho }{\mathalpha}{mathematical bold capital rho}%
+\UnicodeMathSymbol{"1D6B9}{\mbfvarTheta }{\mathalpha}{mathematical bold capital theta symbol}%
+\UnicodeMathSymbol{"1D6BA}{\mbfSigma }{\mathalpha}{mathematical bold capital sigma}%
+\UnicodeMathSymbol{"1D6BB}{\mbfTau }{\mathalpha}{mathematical bold capital tau}%
+\UnicodeMathSymbol{"1D6BC}{\mbfUpsilon }{\mathalpha}{mathematical bold capital upsilon}%
+\UnicodeMathSymbol{"1D6BD}{\mbfPhi }{\mathalpha}{mathematical bold capital phi}%
+\UnicodeMathSymbol{"1D6BE}{\mbfChi }{\mathalpha}{mathematical bold capital chi}%
+\UnicodeMathSymbol{"1D6BF}{\mbfPsi }{\mathalpha}{mathematical bold capital psi}%
+\UnicodeMathSymbol{"1D6C0}{\mbfOmega }{\mathalpha}{mathematical bold capital omega}%
+\UnicodeMathSymbol{"1D6C1}{\mbfnabla }{\mathalpha}{mathematical bold nabla}%
+\UnicodeMathSymbol{"1D6C2}{\mbfalpha }{\mathalpha}{mathematical bold small alpha}%
+\UnicodeMathSymbol{"1D6C3}{\mbfbeta }{\mathalpha}{mathematical bold small beta}%
+\UnicodeMathSymbol{"1D6C4}{\mbfgamma }{\mathalpha}{mathematical bold small gamma}%
+\UnicodeMathSymbol{"1D6C5}{\mbfdelta }{\mathalpha}{mathematical bold small delta}%
+\UnicodeMathSymbol{"1D6C6}{\mbfvarepsilon }{\mathalpha}{mathematical bold small varepsilon}%
+\UnicodeMathSymbol{"1D6C7}{\mbfzeta }{\mathalpha}{mathematical bold small zeta}%
+\UnicodeMathSymbol{"1D6C8}{\mbfeta }{\mathalpha}{mathematical bold small eta}%
+\UnicodeMathSymbol{"1D6C9}{\mbftheta }{\mathalpha}{mathematical bold small theta}%
+\UnicodeMathSymbol{"1D6CA}{\mbfiota }{\mathalpha}{mathematical bold small iota}%
+\UnicodeMathSymbol{"1D6CB}{\mbfkappa }{\mathalpha}{mathematical bold small kappa}%
+\UnicodeMathSymbol{"1D6CC}{\mbflambda }{\mathalpha}{mathematical bold small lambda}%
+\UnicodeMathSymbol{"1D6CD}{\mbfmu }{\mathalpha}{mathematical bold small mu}%
+\UnicodeMathSymbol{"1D6CE}{\mbfnu }{\mathalpha}{mathematical bold small nu}%
+\UnicodeMathSymbol{"1D6CF}{\mbfxi }{\mathalpha}{mathematical bold small xi}%
+\UnicodeMathSymbol{"1D6D0}{\mbfomicron }{\mathalpha}{mathematical bold small omicron}%
+\UnicodeMathSymbol{"1D6D1}{\mbfpi }{\mathalpha}{mathematical bold small pi}%
+\UnicodeMathSymbol{"1D6D2}{\mbfrho }{\mathalpha}{mathematical bold small rho}%
+\UnicodeMathSymbol{"1D6D3}{\mbfvarsigma }{\mathalpha}{mathematical bold small final sigma}%
+\UnicodeMathSymbol{"1D6D4}{\mbfsigma }{\mathalpha}{mathematical bold small sigma}%
+\UnicodeMathSymbol{"1D6D5}{\mbftau }{\mathalpha}{mathematical bold small tau}%
+\UnicodeMathSymbol{"1D6D6}{\mbfupsilon }{\mathalpha}{mathematical bold small upsilon}%
+\UnicodeMathSymbol{"1D6D7}{\mbfvarphi }{\mathalpha}{mathematical bold small phi}%
+\UnicodeMathSymbol{"1D6D8}{\mbfchi }{\mathalpha}{mathematical bold small chi}%
+\UnicodeMathSymbol{"1D6D9}{\mbfpsi }{\mathalpha}{mathematical bold small psi}%
+\UnicodeMathSymbol{"1D6DA}{\mbfomega }{\mathalpha}{mathematical bold small omega}%
+\UnicodeMathSymbol{"1D6DB}{\mbfpartial }{\mathalpha}{mathematical bold partial differential}%
+\UnicodeMathSymbol{"1D6DC}{\mbfepsilon }{\mathalpha}{mathematical bold varepsilon symbol}%
+\UnicodeMathSymbol{"1D6DD}{\mbfvartheta }{\mathalpha}{mathematical bold theta symbol}%
+\UnicodeMathSymbol{"1D6DE}{\mbfvarkappa }{\mathalpha}{mathematical bold kappa symbol}%
+\UnicodeMathSymbol{"1D6DF}{\mbfphi }{\mathalpha}{mathematical bold phi symbol}%
+\UnicodeMathSymbol{"1D6E0}{\mbfvarrho }{\mathalpha}{mathematical bold rho symbol}%
+\UnicodeMathSymbol{"1D6E1}{\mbfvarpi }{\mathalpha}{mathematical bold pi symbol}%
+\UnicodeMathSymbol{"1D6E2}{\mitAlpha }{\mathalpha}{mathematical italic capital alpha}%
+\UnicodeMathSymbol{"1D6E3}{\mitBeta }{\mathalpha}{mathematical italic capital beta}%
+\UnicodeMathSymbol{"1D6E4}{\mitGamma }{\mathalpha}{mathematical italic capital gamma}%
+\UnicodeMathSymbol{"1D6E5}{\mitDelta }{\mathalpha}{mathematical italic capital delta}%
+\UnicodeMathSymbol{"1D6E6}{\mitEpsilon }{\mathalpha}{mathematical italic capital epsilon}%
+\UnicodeMathSymbol{"1D6E7}{\mitZeta }{\mathalpha}{mathematical italic capital zeta}%
+\UnicodeMathSymbol{"1D6E8}{\mitEta }{\mathalpha}{mathematical italic capital eta}%
+\UnicodeMathSymbol{"1D6E9}{\mitTheta }{\mathalpha}{mathematical italic capital theta}%
+\UnicodeMathSymbol{"1D6EA}{\mitIota }{\mathalpha}{mathematical italic capital iota}%
+\UnicodeMathSymbol{"1D6EB}{\mitKappa }{\mathalpha}{mathematical italic capital kappa}%
+\UnicodeMathSymbol{"1D6EC}{\mitLambda }{\mathalpha}{mathematical italic capital lambda}%
+\UnicodeMathSymbol{"1D6ED}{\mitMu }{\mathalpha}{mathematical italic capital mu}%
+\UnicodeMathSymbol{"1D6EE}{\mitNu }{\mathalpha}{mathematical italic capital nu}%
+\UnicodeMathSymbol{"1D6EF}{\mitXi }{\mathalpha}{mathematical italic capital xi}%
+\UnicodeMathSymbol{"1D6F0}{\mitOmicron }{\mathalpha}{mathematical italic capital omicron}%
+\UnicodeMathSymbol{"1D6F1}{\mitPi }{\mathalpha}{mathematical italic capital pi}%
+\UnicodeMathSymbol{"1D6F2}{\mitRho }{\mathalpha}{mathematical italic capital rho}%
+\UnicodeMathSymbol{"1D6F3}{\mitvarTheta }{\mathalpha}{mathematical italic capital theta symbol}%
+\UnicodeMathSymbol{"1D6F4}{\mitSigma }{\mathalpha}{mathematical italic capital sigma}%
+\UnicodeMathSymbol{"1D6F5}{\mitTau }{\mathalpha}{mathematical italic capital tau}%
+\UnicodeMathSymbol{"1D6F6}{\mitUpsilon }{\mathalpha}{mathematical italic capital upsilon}%
+\UnicodeMathSymbol{"1D6F7}{\mitPhi }{\mathalpha}{mathematical italic capital phi}%
+\UnicodeMathSymbol{"1D6F8}{\mitChi }{\mathalpha}{mathematical italic capital chi}%
+\UnicodeMathSymbol{"1D6F9}{\mitPsi }{\mathalpha}{mathematical italic capital psi}%
+\UnicodeMathSymbol{"1D6FA}{\mitOmega }{\mathalpha}{mathematical italic capital omega}%
+\UnicodeMathSymbol{"1D6FB}{\mitnabla }{\mathalpha}{mathematical italic nabla}%
+\UnicodeMathSymbol{"1D6FC}{\mitalpha }{\mathalpha}{mathematical italic small alpha}%
+\UnicodeMathSymbol{"1D6FD}{\mitbeta }{\mathalpha}{mathematical italic small beta}%
+\UnicodeMathSymbol{"1D6FE}{\mitgamma }{\mathalpha}{mathematical italic small gamma}%
+\UnicodeMathSymbol{"1D6FF}{\mitdelta }{\mathalpha}{mathematical italic small delta}%
+\UnicodeMathSymbol{"1D700}{\mitvarepsilon }{\mathalpha}{mathematical italic small varepsilon}%
+\UnicodeMathSymbol{"1D701}{\mitzeta }{\mathalpha}{mathematical italic small zeta}%
+\UnicodeMathSymbol{"1D702}{\miteta }{\mathalpha}{mathematical italic small eta}%
+\UnicodeMathSymbol{"1D703}{\mittheta }{\mathalpha}{mathematical italic small theta}%
+\UnicodeMathSymbol{"1D704}{\mitiota }{\mathalpha}{mathematical italic small iota}%
+\UnicodeMathSymbol{"1D705}{\mitkappa }{\mathalpha}{mathematical italic small kappa}%
+\UnicodeMathSymbol{"1D706}{\mitlambda }{\mathalpha}{mathematical italic small lambda}%
+\UnicodeMathSymbol{"1D707}{\mitmu }{\mathalpha}{mathematical italic small mu}%
+\UnicodeMathSymbol{"1D708}{\mitnu }{\mathalpha}{mathematical italic small nu}%
+\UnicodeMathSymbol{"1D709}{\mitxi }{\mathalpha}{mathematical italic small xi}%
+\UnicodeMathSymbol{"1D70A}{\mitomicron }{\mathalpha}{mathematical italic small omicron}%
+\UnicodeMathSymbol{"1D70B}{\mitpi }{\mathalpha}{mathematical italic small pi}%
+\UnicodeMathSymbol{"1D70C}{\mitrho }{\mathalpha}{mathematical italic small rho}%
+\UnicodeMathSymbol{"1D70D}{\mitvarsigma }{\mathalpha}{mathematical italic small final sigma}%
+\UnicodeMathSymbol{"1D70E}{\mitsigma }{\mathalpha}{mathematical italic small sigma}%
+\UnicodeMathSymbol{"1D70F}{\mittau }{\mathalpha}{mathematical italic small tau}%
+\UnicodeMathSymbol{"1D710}{\mitupsilon }{\mathalpha}{mathematical italic small upsilon}%
+\UnicodeMathSymbol{"1D711}{\mitvarphi }{\mathalpha}{mathematical italic small phi}%
+\UnicodeMathSymbol{"1D712}{\mitchi }{\mathalpha}{mathematical italic small chi}%
+\UnicodeMathSymbol{"1D713}{\mitpsi }{\mathalpha}{mathematical italic small psi}%
+\UnicodeMathSymbol{"1D714}{\mitomega }{\mathalpha}{mathematical italic small omega}%
+\UnicodeMathSymbol{"1D715}{\mitpartial }{\mathalpha}{mathematical italic partial differential}%
+\UnicodeMathSymbol{"1D716}{\mitepsilon }{\mathalpha}{mathematical italic varepsilon symbol}%
+\UnicodeMathSymbol{"1D717}{\mitvartheta }{\mathalpha}{mathematical italic theta symbol}%
+\UnicodeMathSymbol{"1D718}{\mitvarkappa }{\mathalpha}{mathematical italic kappa symbol}%
+\UnicodeMathSymbol{"1D719}{\mitphi }{\mathalpha}{mathematical italic phi symbol}%
+\UnicodeMathSymbol{"1D71A}{\mitvarrho }{\mathalpha}{mathematical italic rho symbol}%
+\UnicodeMathSymbol{"1D71B}{\mitvarpi }{\mathalpha}{mathematical italic pi symbol}%
+\UnicodeMathSymbol{"1D71C}{\mbfitAlpha }{\mathalpha}{mathematical bold italic capital alpha}%
+\UnicodeMathSymbol{"1D71D}{\mbfitBeta }{\mathalpha}{mathematical bold italic capital beta}%
+\UnicodeMathSymbol{"1D71E}{\mbfitGamma }{\mathalpha}{mathematical bold italic capital gamma}%
+\UnicodeMathSymbol{"1D71F}{\mbfitDelta }{\mathalpha}{mathematical bold italic capital delta}%
+\UnicodeMathSymbol{"1D720}{\mbfitEpsilon }{\mathalpha}{mathematical bold italic capital epsilon}%
+\UnicodeMathSymbol{"1D721}{\mbfitZeta }{\mathalpha}{mathematical bold italic capital zeta}%
+\UnicodeMathSymbol{"1D722}{\mbfitEta }{\mathalpha}{mathematical bold italic capital eta}%
+\UnicodeMathSymbol{"1D723}{\mbfitTheta }{\mathalpha}{mathematical bold italic capital theta}%
+\UnicodeMathSymbol{"1D724}{\mbfitIota }{\mathalpha}{mathematical bold italic capital iota}%
+\UnicodeMathSymbol{"1D725}{\mbfitKappa }{\mathalpha}{mathematical bold italic capital kappa}%
+\UnicodeMathSymbol{"1D726}{\mbfitLambda }{\mathalpha}{mathematical bold italic capital lambda}%
+\UnicodeMathSymbol{"1D727}{\mbfitMu }{\mathalpha}{mathematical bold italic capital mu}%
+\UnicodeMathSymbol{"1D728}{\mbfitNu }{\mathalpha}{mathematical bold italic capital nu}%
+\UnicodeMathSymbol{"1D729}{\mbfitXi }{\mathalpha}{mathematical bold italic capital xi}%
+\UnicodeMathSymbol{"1D72A}{\mbfitOmicron }{\mathalpha}{mathematical bold italic capital omicron}%
+\UnicodeMathSymbol{"1D72B}{\mbfitPi }{\mathalpha}{mathematical bold italic capital pi}%
+\UnicodeMathSymbol{"1D72C}{\mbfitRho }{\mathalpha}{mathematical bold italic capital rho}%
+\UnicodeMathSymbol{"1D72D}{\mbfitvarTheta }{\mathalpha}{mathematical bold italic capital theta symbol}%
+\UnicodeMathSymbol{"1D72E}{\mbfitSigma }{\mathalpha}{mathematical bold italic capital sigma}%
+\UnicodeMathSymbol{"1D72F}{\mbfitTau }{\mathalpha}{mathematical bold italic capital tau}%
+\UnicodeMathSymbol{"1D730}{\mbfitUpsilon }{\mathalpha}{mathematical bold italic capital upsilon}%
+\UnicodeMathSymbol{"1D731}{\mbfitPhi }{\mathalpha}{mathematical bold italic capital phi}%
+\UnicodeMathSymbol{"1D732}{\mbfitChi }{\mathalpha}{mathematical bold italic capital chi}%
+\UnicodeMathSymbol{"1D733}{\mbfitPsi }{\mathalpha}{mathematical bold italic capital psi}%
+\UnicodeMathSymbol{"1D734}{\mbfitOmega }{\mathalpha}{mathematical bold italic capital omega}%
+\UnicodeMathSymbol{"1D735}{\mbfitnabla }{\mathalpha}{mathematical bold italic nabla}%
+\UnicodeMathSymbol{"1D736}{\mbfitalpha }{\mathalpha}{mathematical bold italic small alpha}%
+\UnicodeMathSymbol{"1D737}{\mbfitbeta }{\mathalpha}{mathematical bold italic small beta}%
+\UnicodeMathSymbol{"1D738}{\mbfitgamma }{\mathalpha}{mathematical bold italic small gamma}%
+\UnicodeMathSymbol{"1D739}{\mbfitdelta }{\mathalpha}{mathematical bold italic small delta}%
+\UnicodeMathSymbol{"1D73A}{\mbfitvarepsilon }{\mathalpha}{mathematical bold italic small varepsilon}%
+\UnicodeMathSymbol{"1D73B}{\mbfitzeta }{\mathalpha}{mathematical bold italic small zeta}%
+\UnicodeMathSymbol{"1D73C}{\mbfiteta }{\mathalpha}{mathematical bold italic small eta}%
+\UnicodeMathSymbol{"1D73D}{\mbfittheta }{\mathalpha}{mathematical bold italic small theta}%
+\UnicodeMathSymbol{"1D73E}{\mbfitiota }{\mathalpha}{mathematical bold italic small iota}%
+\UnicodeMathSymbol{"1D73F}{\mbfitkappa }{\mathalpha}{mathematical bold italic small kappa}%
+\UnicodeMathSymbol{"1D740}{\mbfitlambda }{\mathalpha}{mathematical bold italic small lambda}%
+\UnicodeMathSymbol{"1D741}{\mbfitmu }{\mathalpha}{mathematical bold italic small mu}%
+\UnicodeMathSymbol{"1D742}{\mbfitnu }{\mathalpha}{mathematical bold italic small nu}%
+\UnicodeMathSymbol{"1D743}{\mbfitxi }{\mathalpha}{mathematical bold italic small xi}%
+\UnicodeMathSymbol{"1D744}{\mbfitomicron }{\mathalpha}{mathematical bold italic small omicron}%
+\UnicodeMathSymbol{"1D745}{\mbfitpi }{\mathalpha}{mathematical bold italic small pi}%
+\UnicodeMathSymbol{"1D746}{\mbfitrho }{\mathalpha}{mathematical bold italic small rho}%
+\UnicodeMathSymbol{"1D747}{\mbfitvarsigma }{\mathalpha}{mathematical bold italic small final sigma}%
+\UnicodeMathSymbol{"1D748}{\mbfitsigma }{\mathalpha}{mathematical bold italic small sigma}%
+\UnicodeMathSymbol{"1D749}{\mbfittau }{\mathalpha}{mathematical bold italic small tau}%
+\UnicodeMathSymbol{"1D74A}{\mbfitupsilon }{\mathalpha}{mathematical bold italic small upsilon}%
+\UnicodeMathSymbol{"1D74B}{\mbfitvarphi }{\mathalpha}{mathematical bold italic small phi}%
+\UnicodeMathSymbol{"1D74C}{\mbfitchi }{\mathalpha}{mathematical bold italic small chi}%
+\UnicodeMathSymbol{"1D74D}{\mbfitpsi }{\mathalpha}{mathematical bold italic small psi}%
+\UnicodeMathSymbol{"1D74E}{\mbfitomega }{\mathalpha}{mathematical bold italic small omega}%
+\UnicodeMathSymbol{"1D74F}{\mbfitpartial }{\mathalpha}{mathematical bold italic partial differential}%
+\UnicodeMathSymbol{"1D750}{\mbfitepsilon }{\mathalpha}{mathematical bold italic varepsilon symbol}%
+\UnicodeMathSymbol{"1D751}{\mbfitvartheta }{\mathalpha}{mathematical bold italic theta symbol}%
+\UnicodeMathSymbol{"1D752}{\mbfitvarkappa }{\mathalpha}{mathematical bold italic kappa symbol}%
+\UnicodeMathSymbol{"1D753}{\mbfitphi }{\mathalpha}{mathematical bold italic phi symbol}%
+\UnicodeMathSymbol{"1D754}{\mbfitvarrho }{\mathalpha}{mathematical bold italic rho symbol}%
+\UnicodeMathSymbol{"1D755}{\mbfitvarpi }{\mathalpha}{mathematical bold italic pi symbol}%
+\UnicodeMathSymbol{"1D756}{\mbfsansAlpha }{\mathalpha}{mathematical sans-serif bold capital alpha}%
+\UnicodeMathSymbol{"1D757}{\mbfsansBeta }{\mathalpha}{mathematical sans-serif bold capital beta}%
+\UnicodeMathSymbol{"1D758}{\mbfsansGamma }{\mathalpha}{mathematical sans-serif bold capital gamma}%
+\UnicodeMathSymbol{"1D759}{\mbfsansDelta }{\mathalpha}{mathematical sans-serif bold capital delta}%
+\UnicodeMathSymbol{"1D75A}{\mbfsansEpsilon }{\mathalpha}{mathematical sans-serif bold capital epsilon}%
+\UnicodeMathSymbol{"1D75B}{\mbfsansZeta }{\mathalpha}{mathematical sans-serif bold capital zeta}%
+\UnicodeMathSymbol{"1D75C}{\mbfsansEta }{\mathalpha}{mathematical sans-serif bold capital eta}%
+\UnicodeMathSymbol{"1D75D}{\mbfsansTheta }{\mathalpha}{mathematical sans-serif bold capital theta}%
+\UnicodeMathSymbol{"1D75E}{\mbfsansIota }{\mathalpha}{mathematical sans-serif bold capital iota}%
+\UnicodeMathSymbol{"1D75F}{\mbfsansKappa }{\mathalpha}{mathematical sans-serif bold capital kappa}%
+\UnicodeMathSymbol{"1D760}{\mbfsansLambda }{\mathalpha}{mathematical sans-serif bold capital lambda}%
+\UnicodeMathSymbol{"1D761}{\mbfsansMu }{\mathalpha}{mathematical sans-serif bold capital mu}%
+\UnicodeMathSymbol{"1D762}{\mbfsansNu }{\mathalpha}{mathematical sans-serif bold capital nu}%
+\UnicodeMathSymbol{"1D763}{\mbfsansXi }{\mathalpha}{mathematical sans-serif bold capital xi}%
+\UnicodeMathSymbol{"1D764}{\mbfsansOmicron }{\mathalpha}{mathematical sans-serif bold capital omicron}%
+\UnicodeMathSymbol{"1D765}{\mbfsansPi }{\mathalpha}{mathematical sans-serif bold capital pi}%
+\UnicodeMathSymbol{"1D766}{\mbfsansRho }{\mathalpha}{mathematical sans-serif bold capital rho}%
+\UnicodeMathSymbol{"1D767}{\mbfsansvarTheta }{\mathalpha}{mathematical sans-serif bold capital theta symbol}%
+\UnicodeMathSymbol{"1D768}{\mbfsansSigma }{\mathalpha}{mathematical sans-serif bold capital sigma}%
+\UnicodeMathSymbol{"1D769}{\mbfsansTau }{\mathalpha}{mathematical sans-serif bold capital tau}%
+\UnicodeMathSymbol{"1D76A}{\mbfsansUpsilon }{\mathalpha}{mathematical sans-serif bold capital upsilon}%
+\UnicodeMathSymbol{"1D76B}{\mbfsansPhi }{\mathalpha}{mathematical sans-serif bold capital phi}%
+\UnicodeMathSymbol{"1D76C}{\mbfsansChi }{\mathalpha}{mathematical sans-serif bold capital chi}%
+\UnicodeMathSymbol{"1D76D}{\mbfsansPsi }{\mathalpha}{mathematical sans-serif bold capital psi}%
+\UnicodeMathSymbol{"1D76E}{\mbfsansOmega }{\mathalpha}{mathematical sans-serif bold capital omega}%
+\UnicodeMathSymbol{"1D76F}{\mbfsansnabla }{\mathalpha}{mathematical sans-serif bold nabla}%
+\UnicodeMathSymbol{"1D770}{\mbfsansalpha }{\mathalpha}{mathematical sans-serif bold small alpha}%
+\UnicodeMathSymbol{"1D771}{\mbfsansbeta }{\mathalpha}{mathematical sans-serif bold small beta}%
+\UnicodeMathSymbol{"1D772}{\mbfsansgamma }{\mathalpha}{mathematical sans-serif bold small gamma}%
+\UnicodeMathSymbol{"1D773}{\mbfsansdelta }{\mathalpha}{mathematical sans-serif bold small delta}%
+\UnicodeMathSymbol{"1D774}{\mbfsansvarepsilon }{\mathalpha}{mathematical sans-serif bold small varepsilon}%
+\UnicodeMathSymbol{"1D775}{\mbfsanszeta }{\mathalpha}{mathematical sans-serif bold small zeta}%
+\UnicodeMathSymbol{"1D776}{\mbfsanseta }{\mathalpha}{mathematical sans-serif bold small eta}%
+\UnicodeMathSymbol{"1D777}{\mbfsanstheta }{\mathalpha}{mathematical sans-serif bold small theta}%
+\UnicodeMathSymbol{"1D778}{\mbfsansiota }{\mathalpha}{mathematical sans-serif bold small iota}%
+\UnicodeMathSymbol{"1D779}{\mbfsanskappa }{\mathalpha}{mathematical sans-serif bold small kappa}%
+\UnicodeMathSymbol{"1D77A}{\mbfsanslambda }{\mathalpha}{mathematical sans-serif bold small lambda}%
+\UnicodeMathSymbol{"1D77B}{\mbfsansmu }{\mathalpha}{mathematical sans-serif bold small mu}%
+\UnicodeMathSymbol{"1D77C}{\mbfsansnu }{\mathalpha}{mathematical sans-serif bold small nu}%
+\UnicodeMathSymbol{"1D77D}{\mbfsansxi }{\mathalpha}{mathematical sans-serif bold small xi}%
+\UnicodeMathSymbol{"1D77E}{\mbfsansomicron }{\mathalpha}{mathematical sans-serif bold small omicron}%
+\UnicodeMathSymbol{"1D77F}{\mbfsanspi }{\mathalpha}{mathematical sans-serif bold small pi}%
+\UnicodeMathSymbol{"1D780}{\mbfsansrho }{\mathalpha}{mathematical sans-serif bold small rho}%
+\UnicodeMathSymbol{"1D781}{\mbfsansvarsigma }{\mathalpha}{mathematical sans-serif bold small final sigma}%
+\UnicodeMathSymbol{"1D782}{\mbfsanssigma }{\mathalpha}{mathematical sans-serif bold small sigma}%
+\UnicodeMathSymbol{"1D783}{\mbfsanstau }{\mathalpha}{mathematical sans-serif bold small tau}%
+\UnicodeMathSymbol{"1D784}{\mbfsansupsilon }{\mathalpha}{mathematical sans-serif bold small upsilon}%
+\UnicodeMathSymbol{"1D785}{\mbfsansvarphi }{\mathalpha}{mathematical sans-serif bold small phi}%
+\UnicodeMathSymbol{"1D786}{\mbfsanschi }{\mathalpha}{mathematical sans-serif bold small chi}%
+\UnicodeMathSymbol{"1D787}{\mbfsanspsi }{\mathalpha}{mathematical sans-serif bold small psi}%
+\UnicodeMathSymbol{"1D788}{\mbfsansomega }{\mathalpha}{mathematical sans-serif bold small omega}%
+\UnicodeMathSymbol{"1D789}{\mbfsanspartial }{\mathalpha}{mathematical sans-serif bold partial differential}%
+\UnicodeMathSymbol{"1D78A}{\mbfsansepsilon }{\mathalpha}{mathematical sans-serif bold varepsilon symbol}%
+\UnicodeMathSymbol{"1D78B}{\mbfsansvartheta }{\mathalpha}{mathematical sans-serif bold theta symbol}%
+\UnicodeMathSymbol{"1D78C}{\mbfsansvarkappa }{\mathalpha}{mathematical sans-serif bold kappa symbol}%
+\UnicodeMathSymbol{"1D78D}{\mbfsansphi }{\mathalpha}{mathematical sans-serif bold phi symbol}%
+\UnicodeMathSymbol{"1D78E}{\mbfsansvarrho }{\mathalpha}{mathematical sans-serif bold rho symbol}%
+\UnicodeMathSymbol{"1D78F}{\mbfsansvarpi }{\mathalpha}{mathematical sans-serif bold pi symbol}%
+\UnicodeMathSymbol{"1D790}{\mbfitsansAlpha }{\mathalpha}{mathematical sans-serif bold italic capital alpha}%
+\UnicodeMathSymbol{"1D791}{\mbfitsansBeta }{\mathalpha}{mathematical sans-serif bold italic capital beta}%
+\UnicodeMathSymbol{"1D792}{\mbfitsansGamma }{\mathalpha}{mathematical sans-serif bold italic capital gamma}%
+\UnicodeMathSymbol{"1D793}{\mbfitsansDelta }{\mathalpha}{mathematical sans-serif bold italic capital delta}%
+\UnicodeMathSymbol{"1D794}{\mbfitsansEpsilon }{\mathalpha}{mathematical sans-serif bold italic capital epsilon}%
+\UnicodeMathSymbol{"1D795}{\mbfitsansZeta }{\mathalpha}{mathematical sans-serif bold italic capital zeta}%
+\UnicodeMathSymbol{"1D796}{\mbfitsansEta }{\mathalpha}{mathematical sans-serif bold italic capital eta}%
+\UnicodeMathSymbol{"1D797}{\mbfitsansTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta}%
+\UnicodeMathSymbol{"1D798}{\mbfitsansIota }{\mathalpha}{mathematical sans-serif bold italic capital iota}%
+\UnicodeMathSymbol{"1D799}{\mbfitsansKappa }{\mathalpha}{mathematical sans-serif bold italic capital kappa}%
+\UnicodeMathSymbol{"1D79A}{\mbfitsansLambda }{\mathalpha}{mathematical sans-serif bold italic capital lambda}%
+\UnicodeMathSymbol{"1D79B}{\mbfitsansMu }{\mathalpha}{mathematical sans-serif bold italic capital mu}%
+\UnicodeMathSymbol{"1D79C}{\mbfitsansNu }{\mathalpha}{mathematical sans-serif bold italic capital nu}%
+\UnicodeMathSymbol{"1D79D}{\mbfitsansXi }{\mathalpha}{mathematical sans-serif bold italic capital xi}%
+\UnicodeMathSymbol{"1D79E}{\mbfitsansOmicron }{\mathalpha}{mathematical sans-serif bold italic capital omicron}%
+\UnicodeMathSymbol{"1D79F}{\mbfitsansPi }{\mathalpha}{mathematical sans-serif bold italic capital pi}%
+\UnicodeMathSymbol{"1D7A0}{\mbfitsansRho }{\mathalpha}{mathematical sans-serif bold italic capital rho}%
+\UnicodeMathSymbol{"1D7A1}{\mbfitsansvarTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta symbol}%
+\UnicodeMathSymbol{"1D7A2}{\mbfitsansSigma }{\mathalpha}{mathematical sans-serif bold italic capital sigma}%
+\UnicodeMathSymbol{"1D7A3}{\mbfitsansTau }{\mathalpha}{mathematical sans-serif bold italic capital tau}%
+\UnicodeMathSymbol{"1D7A4}{\mbfitsansUpsilon }{\mathalpha}{mathematical sans-serif bold italic capital upsilon}%
+\UnicodeMathSymbol{"1D7A5}{\mbfitsansPhi }{\mathalpha}{mathematical sans-serif bold italic capital phi}%
+\UnicodeMathSymbol{"1D7A6}{\mbfitsansChi }{\mathalpha}{mathematical sans-serif bold italic capital chi}%
+\UnicodeMathSymbol{"1D7A7}{\mbfitsansPsi }{\mathalpha}{mathematical sans-serif bold italic capital psi}%
+\UnicodeMathSymbol{"1D7A8}{\mbfitsansOmega }{\mathalpha}{mathematical sans-serif bold italic capital omega}%
+\UnicodeMathSymbol{"1D7A9}{\mbfitsansnabla }{\mathalpha}{mathematical sans-serif bold italic nabla}%
+\UnicodeMathSymbol{"1D7AA}{\mbfitsansalpha }{\mathalpha}{mathematical sans-serif bold italic small alpha}%
+\UnicodeMathSymbol{"1D7AB}{\mbfitsansbeta }{\mathalpha}{mathematical sans-serif bold italic small beta}%
+\UnicodeMathSymbol{"1D7AC}{\mbfitsansgamma }{\mathalpha}{mathematical sans-serif bold italic small gamma}%
+\UnicodeMathSymbol{"1D7AD}{\mbfitsansdelta }{\mathalpha}{mathematical sans-serif bold italic small delta}%
+\UnicodeMathSymbol{"1D7AE}{\mbfitsansvarepsilon }{\mathalpha}{mathematical sans-serif bold italic small varepsilon}%
+\UnicodeMathSymbol{"1D7AF}{\mbfitsanszeta }{\mathalpha}{mathematical sans-serif bold italic small zeta}%
+\UnicodeMathSymbol{"1D7B0}{\mbfitsanseta }{\mathalpha}{mathematical sans-serif bold italic small eta}%
+\UnicodeMathSymbol{"1D7B1}{\mbfitsanstheta }{\mathalpha}{mathematical sans-serif bold italic small theta}%
+\UnicodeMathSymbol{"1D7B2}{\mbfitsansiota }{\mathalpha}{mathematical sans-serif bold italic small iota}%
+\UnicodeMathSymbol{"1D7B3}{\mbfitsanskappa }{\mathalpha}{mathematical sans-serif bold italic small kappa}%
+\UnicodeMathSymbol{"1D7B4}{\mbfitsanslambda }{\mathalpha}{mathematical sans-serif bold italic small lambda}%
+\UnicodeMathSymbol{"1D7B5}{\mbfitsansmu }{\mathalpha}{mathematical sans-serif bold italic small mu}%
+\UnicodeMathSymbol{"1D7B6}{\mbfitsansnu }{\mathalpha}{mathematical sans-serif bold italic small nu}%
+\UnicodeMathSymbol{"1D7B7}{\mbfitsansxi }{\mathalpha}{mathematical sans-serif bold italic small xi}%
+\UnicodeMathSymbol{"1D7B8}{\mbfitsansomicron }{\mathalpha}{mathematical sans-serif bold italic small omicron}%
+\UnicodeMathSymbol{"1D7B9}{\mbfitsanspi }{\mathalpha}{mathematical sans-serif bold italic small pi}%
+\UnicodeMathSymbol{"1D7BA}{\mbfitsansrho }{\mathalpha}{mathematical sans-serif bold italic small rho}%
+\UnicodeMathSymbol{"1D7BB}{\mbfitsansvarsigma }{\mathalpha}{mathematical sans-serif bold italic small final sigma}%
+\UnicodeMathSymbol{"1D7BC}{\mbfitsanssigma }{\mathalpha}{mathematical sans-serif bold italic small sigma}%
+\UnicodeMathSymbol{"1D7BD}{\mbfitsanstau }{\mathalpha}{mathematical sans-serif bold italic small tau}%
+\UnicodeMathSymbol{"1D7BE}{\mbfitsansupsilon }{\mathalpha}{mathematical sans-serif bold italic small upsilon}%
+\UnicodeMathSymbol{"1D7BF}{\mbfitsansvarphi }{\mathalpha}{mathematical sans-serif bold italic small phi}%
+\UnicodeMathSymbol{"1D7C0}{\mbfitsanschi }{\mathalpha}{mathematical sans-serif bold italic small chi}%
+\UnicodeMathSymbol{"1D7C1}{\mbfitsanspsi }{\mathalpha}{mathematical sans-serif bold italic small psi}%
+\UnicodeMathSymbol{"1D7C2}{\mbfitsansomega }{\mathalpha}{mathematical sans-serif bold italic small omega}%
+\UnicodeMathSymbol{"1D7C3}{\mbfitsanspartial }{\mathalpha}{mathematical sans-serif bold italic partial differential}%
+\UnicodeMathSymbol{"1D7C4}{\mbfitsansepsilon }{\mathalpha}{mathematical sans-serif bold italic varepsilon symbol}%
+\UnicodeMathSymbol{"1D7C5}{\mbfitsansvartheta }{\mathalpha}{mathematical sans-serif bold italic theta symbol}%
+\UnicodeMathSymbol{"1D7C6}{\mbfitsansvarkappa }{\mathalpha}{mathematical sans-serif bold italic kappa symbol}%
+\UnicodeMathSymbol{"1D7C7}{\mbfitsansphi }{\mathalpha}{mathematical sans-serif bold italic phi symbol}%
+\UnicodeMathSymbol{"1D7C8}{\mbfitsansvarrho }{\mathalpha}{mathematical sans-serif bold italic rho symbol}%
+\UnicodeMathSymbol{"1D7C9}{\mbfitsansvarpi }{\mathalpha}{mathematical sans-serif bold italic pi symbol}%
+\UnicodeMathSymbol{"1D7CA}{\mbfDigamma }{\mathalpha}{mathematical bold capital digamma}%
+\UnicodeMathSymbol{"1D7CB}{\mbfdigamma }{\mathalpha}{mathematical bold small digamma}%
+\UnicodeMathSymbol{"1D7CE}{\mbfzero }{\mathord}{mathematical bold digit 0}%
+\UnicodeMathSymbol{"1D7CF}{\mbfone }{\mathord}{mathematical bold digit 1}%
+\UnicodeMathSymbol{"1D7D0}{\mbftwo }{\mathord}{mathematical bold digit 2}%
+\UnicodeMathSymbol{"1D7D1}{\mbfthree }{\mathord}{mathematical bold digit 3}%
+\UnicodeMathSymbol{"1D7D2}{\mbffour }{\mathord}{mathematical bold digit 4}%
+\UnicodeMathSymbol{"1D7D3}{\mbffive }{\mathord}{mathematical bold digit 5}%
+\UnicodeMathSymbol{"1D7D4}{\mbfsix }{\mathord}{mathematical bold digit 6}%
+\UnicodeMathSymbol{"1D7D5}{\mbfseven }{\mathord}{mathematical bold digit 7}%
+\UnicodeMathSymbol{"1D7D6}{\mbfeight }{\mathord}{mathematical bold digit 8}%
+\UnicodeMathSymbol{"1D7D7}{\mbfnine }{\mathord}{mathematical bold digit 9}%
+\UnicodeMathSymbol{"1D7D8}{\Bbbzero }{\mathord}{mathematical double-struck digit 0}%
+\UnicodeMathSymbol{"1D7D9}{\Bbbone }{\mathord}{mathematical double-struck digit 1}%
+\UnicodeMathSymbol{"1D7DA}{\Bbbtwo }{\mathord}{mathematical double-struck digit 2}%
+\UnicodeMathSymbol{"1D7DB}{\Bbbthree }{\mathord}{mathematical double-struck digit 3}%
+\UnicodeMathSymbol{"1D7DC}{\Bbbfour }{\mathord}{mathematical double-struck digit 4}%
+\UnicodeMathSymbol{"1D7DD}{\Bbbfive }{\mathord}{mathematical double-struck digit 5}%
+\UnicodeMathSymbol{"1D7DE}{\Bbbsix }{\mathord}{mathematical double-struck digit 6}%
+\UnicodeMathSymbol{"1D7DF}{\Bbbseven }{\mathord}{mathematical double-struck digit 7}%
+\UnicodeMathSymbol{"1D7E0}{\Bbbeight }{\mathord}{mathematical double-struck digit 8}%
+\UnicodeMathSymbol{"1D7E1}{\Bbbnine }{\mathord}{mathematical double-struck digit 9}%
+\UnicodeMathSymbol{"1D7E2}{\msanszero }{\mathord}{mathematical sans-serif digit 0}%
+\UnicodeMathSymbol{"1D7E3}{\msansone }{\mathord}{mathematical sans-serif digit 1}%
+\UnicodeMathSymbol{"1D7E4}{\msanstwo }{\mathord}{mathematical sans-serif digit 2}%
+\UnicodeMathSymbol{"1D7E5}{\msansthree }{\mathord}{mathematical sans-serif digit 3}%
+\UnicodeMathSymbol{"1D7E6}{\msansfour }{\mathord}{mathematical sans-serif digit 4}%
+\UnicodeMathSymbol{"1D7E7}{\msansfive }{\mathord}{mathematical sans-serif digit 5}%
+\UnicodeMathSymbol{"1D7E8}{\msanssix }{\mathord}{mathematical sans-serif digit 6}%
+\UnicodeMathSymbol{"1D7E9}{\msansseven }{\mathord}{mathematical sans-serif digit 7}%
+\UnicodeMathSymbol{"1D7EA}{\msanseight }{\mathord}{mathematical sans-serif digit 8}%
+\UnicodeMathSymbol{"1D7EB}{\msansnine }{\mathord}{mathematical sans-serif digit 9}%
+\UnicodeMathSymbol{"1D7EC}{\mbfsanszero }{\mathord}{mathematical sans-serif bold digit 0}%
+\UnicodeMathSymbol{"1D7ED}{\mbfsansone }{\mathord}{mathematical sans-serif bold digit 1}%
+\UnicodeMathSymbol{"1D7EE}{\mbfsanstwo }{\mathord}{mathematical sans-serif bold digit 2}%
+\UnicodeMathSymbol{"1D7EF}{\mbfsansthree }{\mathord}{mathematical sans-serif bold digit 3}%
+\UnicodeMathSymbol{"1D7F0}{\mbfsansfour }{\mathord}{mathematical sans-serif bold digit 4}%
+\UnicodeMathSymbol{"1D7F1}{\mbfsansfive }{\mathord}{mathematical sans-serif bold digit 5}%
+\UnicodeMathSymbol{"1D7F2}{\mbfsanssix }{\mathord}{mathematical sans-serif bold digit 6}%
+\UnicodeMathSymbol{"1D7F3}{\mbfsansseven }{\mathord}{mathematical sans-serif bold digit 7}%
+\UnicodeMathSymbol{"1D7F4}{\mbfsanseight }{\mathord}{mathematical sans-serif bold digit 8}%
+\UnicodeMathSymbol{"1D7F5}{\mbfsansnine }{\mathord}{mathematical sans-serif bold digit 9}%
+\UnicodeMathSymbol{"1D7F6}{\mttzero }{\mathord}{mathematical monospace digit 0}%
+\UnicodeMathSymbol{"1D7F7}{\mttone }{\mathord}{mathematical monospace digit 1}%
+\UnicodeMathSymbol{"1D7F8}{\mtttwo }{\mathord}{mathematical monospace digit 2}%
+\UnicodeMathSymbol{"1D7F9}{\mttthree }{\mathord}{mathematical monospace digit 3}%
+\UnicodeMathSymbol{"1D7FA}{\mttfour }{\mathord}{mathematical monospace digit 4}%
+\UnicodeMathSymbol{"1D7FB}{\mttfive }{\mathord}{mathematical monospace digit 5}%
+\UnicodeMathSymbol{"1D7FC}{\mttsix }{\mathord}{mathematical monospace digit 6}%
+\UnicodeMathSymbol{"1D7FD}{\mttseven }{\mathord}{mathematical monospace digit 7}%
+\UnicodeMathSymbol{"1D7FE}{\mtteight }{\mathord}{mathematical monospace digit 8}%
+\UnicodeMathSymbol{"1D7FF}{\mttnine }{\mathord}{mathematical monospace digit 9}%
+\UnicodeMathSymbol{"1EEF0}{\arabicmaj }{\mathop}{arabic mathematical operator meem with hah with tatweel}%
+\UnicodeMathSymbol{"1EEF1}{\arabichad }{\mathop}{arabic mathematical operator hah with dal}%
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
+
diff --git a/macros/latex/contrib/unicode-math/unicode-math.dtx b/macros/latex/contrib/unicode-math/unicode-math.dtx
new file mode 100644
index 0000000000..59cf98b188
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unicode-math.dtx
@@ -0,0 +1,111 @@
+%%^^A%% unicode-math.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Metadata for the package code, including files and versioning
+
+% \section{Package metadata}
+%
+% List all \texttt{dtx} files for (a) the \texttt{ins} file and~(b) typesetting the code.
+% \begin{macrocode}
+%<*dtx>
+\def\DTXFILES{
+ \DTX{unicode-math.dtx}
+ \DTX{um-code-opening.dtx}
+ \DTX{um-code-variables.dtx}
+ \DTX{um-code-api.dtx}
+ \DTX{um-code-ui.dtx}
+ \DTX{um-code-pkgopt.dtx}
+ \DTX{um-code-msg.dtx}
+ \DTX{um-code-usv.dtx}
+ \DTX{um-code-setchar.dtx}
+ \DTX{um-code-mathtext.dtx}
+ \DTX{um-code-main.dtx}
+ \DTX{um-code-fontopt.dtx}
+ \DTX{um-code-fontparam.dtx}
+ \DTX{um-code-mathmap.dtx}
+ \DTX{um-code-sym-commands.dtx}
+ \DTX{um-code-alphabets.dtx}
+ \DTX{um-code-primes.dtx}
+ \DTX{um-code-sscript.dtx}
+ \DTX{um-code-compat.dtx}
+ \DTX{um-code-amsmath.dtx}
+ \DTX{um-code-epilogue.dtx}
+}
+%</dtx>
+% \end{macrocode}
+%
+% Now exit if we're using plain \TeX\ when loading this file with \texttt{unicode-math.ins}.
+% \begin{macrocode}
+%<*dtx>
+\ifx\plainoutput\undefined\else\expandafter\endinput\fi
+%</dtx>
+% \end{macrocode}
+%
+% Metadata for documentation; the title and authors of the package.
+% \begin{macrocode}
+%<*dtx>
+\title{
+ Experimental Unicode mathematical typesetting:
+ The \pkg{unicode-math} package
+}
+\author{
+ \scshape Will Robertson\\
+ \itshape Philipp Stephani, Joseph Wright, Khaled Hosny, and others\\
+ \url{http://github.com/wspr/unicode-math}
+}
+%</dtx>
+% \end{macrocode}
+%
+% Declare the package version and date.
+% \begin{macrocode}
+%<base>\RequirePackage{expl3}
+%<base>\ProvidesExplPackage{unicode-math}
+%<package&XE>\ProvidesExplPackage{unicode-math-xetex}
+%<package&LU>\ProvidesExplPackage{unicode-math-luatex}
+%<base|package> {2019/03/04} {0.8o} {Unicode maths in XeLaTeX and LuaLaTeX}
+% \end{macrocode}
+%
+% Here the version and date are setup for typesetting the documentation.
+% \begin{macrocode}
+%<*dtx>
+\date{
+ \def\filedate{2019/03/04}
+ \def\fileversion{0.8o}
+ \filedate \qquad \fileversion
+}
+%</dtx>
+% \end{macrocode}
+%
+% \section{The \texttt{unicode-math.sty} loading file}
+%
+% The \texttt{unicode-math.sty} file is a stub which loads necessary packages
+% and then splits into a XeTeX- or LuaTeX-specific version of the package.
+%
+% \begin{macrocode}
+%<base>\sys_if_engine_luatex:T { \RequirePackageWithOptions{unicode-math-luatex} }
+%<base>\sys_if_engine_xetex:T { \RequirePackageWithOptions{unicode-math-xetex} }
+%<base>\sys_if_engine_pdftex:T
+%<base> {
+%<base> \msg_new:nnn {unicode-math} {not-pdftex}
+%<base> { Cannot~ be~ run~ with~ pdfLaTeX!\\ Use~ XeLaTeX~ or~ LuaLaTeX~ instead. }
+%<base> \msg_error:nn {unicode-math} {not-pdftex}
+%<base> }
+%<base>\endinput
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/unicode-math.ins b/macros/latex/contrib/unicode-math/unicode-math.ins
new file mode 100644
index 0000000000..d0b4dc08d1
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unicode-math.ins
@@ -0,0 +1,64 @@
+%%^^A%% unicode-math.ins -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Docstrip installer.
+
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+\input unicode-math.dtx\relax
+\input l3docstrip.tex\relax
+\keepsilent
+
+\declarepreamble\defaultpreamble
+
+------------------------------------------------
+The UNICODE-MATH package <wspr.io/unicode-math>
+------------------------------------------------
+This package is free software and may be redistributed and/or modified under
+the conditions of the LaTeX Project Public License, version 1.3c or higher
+(your choice): <http://www.latex-project.org/lppl/>.
+------------------------------------------------
+Copyright 2006-2018 Will Robertson, LPPL "maintainer"
+Copyright 2010-2017 Philipp Stephani
+Copyright 2011-2017 Joseph Wright
+Copyright 2012-2015 Khaled Hosny
+------------------------------------------------
+
+\endpreamble
+
+\nopostamble
+\askforoverwritefalse
+
+\def\FROM#1#2{\from{#1}{#2}}
+\def\FROMDEBUG#1#2{\from{#1}{#2,debug}}
+\ifx\DEBUG\undefined\else\let\FROM\FROMDEBUG\fi
+\def\Msg#1{}
+\def\Generate#1#2{%
+ \immediate\write\ttyout{Generating file "#1"}%
+ \generate{\file{#1}{#2}}%
+}
+
+\Generate{unicode-math.sty}{\FROM{unicode-math.dtx}{base}}
+
+\def\DTX#1{\FROM{#1}{package,XE}}
+\Generate{unicode-math-xetex.sty}{\DTXFILES}
+
+\def\DTX#1{\FROM{#1}{package,LU}}
+\Generate{unicode-math-luatex.sty}{\DTXFILES}
+
+\endbatchfile
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/unicode-math.ltx b/macros/latex/contrib/unicode-math/unicode-math.ltx
new file mode 100644
index 0000000000..c3a13fd370
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unicode-math.ltx
@@ -0,0 +1,38 @@
+%%^^A%% unicode-math.ltx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% User documentation.
+
+\documentclass[a4paper]{ltxdoc}
+\input{um-doc-style.tex}
+\begin{document}
+\maketitle
+
+\input{um-doc-main.tex}
+
+\clearpage
+\appendix
+
+\input{um-doc-stixextract.tex}
+\input{um-doc-nfsssummary.tex}
+\input{um-doc-legacyfontdimen.tex}
+\input{um-doc-mathfontdimen.tex}
+
+\end{document}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/unicode-math.pdf b/macros/latex/contrib/unicode-math/unicode-math.pdf
new file mode 100644
index 0000000000..05d2817a78
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unicode-math.pdf
Binary files differ
diff --git a/macros/latex/contrib/unicode-math/unimath-example.ltx b/macros/latex/contrib/unicode-math/unimath-example.ltx
new file mode 100644
index 0000000000..d8f75961a8
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unimath-example.ltx
@@ -0,0 +1,69 @@
+%%^^A%% unimath-example.ltx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% A minimal example file to demonstrate the package.
+
+%%%%%%%%%%%%%%%%%%%%%%%
+% UNICODE-MATH EXAMPLE FILE
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass{article}
+
+% Load fontspec and define a document font:
+\usepackage{fontspec}
+\setmainfont{texgyrepagella-regular.otf}
+
+% Load unicode-math and define a math font:
+\usepackage{unicode-math}
+\setmathfont{texgyrepagella-math.otf}
+
+\begin{document}
+\title{An example of \textsf{unicode-math}}
+\author{Will Robertson}
+\maketitle
+
+This is an example of the \textsf{unicode-math} package.
+It allows you to write maths with Unicode input and to use fonts that contain Unicode mathematical glyphs. Follow along in the source code to see how it works.
+
+After loading the package and selecting a font, you shouldn't need to change much to continue to write maths as always.
+\[
+ F(s)=\symscr L \{f(t)\}=\int_0^\infty \symup e^{-st}f(t)\,\symup d t
+\]
+
+The style of Latin and Greek letters is set up by default to match the output of standard \LaTeX: Latin letters and Greek lowercase letters are italic, and Greek uppercase letters are upright. These can be configured with the \texttt{math-style} package option.
+
+One very important feature to recognise is that bold maths now works consistently for both Latin and Greek letters. By default, \verb|\symbf| will turn a Latin letter bold and upright, and a Greek letter will remain italic and also become bold. For example:
+\[
+ \symbf{a} = a\,\symbf{I} \qquad \symbf{\beta} = \beta\,\symbf{I}
+\]
+This behaviour can be configured with the \texttt{bold-style} package option.
+
+In the examples above, I've used \LaTeX\ commands to input characters like \verb|\beta|, \verb|\infty|, and so on. These may now be typed directly into the source of the document:
+\[
+ 𝐉 = ∇×𝐇 \qquad 𝐁 = μ₀(𝐌 + 𝐇)
+\]
+\[
+ ∫₀³ xⁿφ₁₂(x)\,ⅆx
+\]
+It does not matter if you use upright or italic characters; they will be normalised according to the setting of the \texttt{math-style} and \texttt{bold-style} options.
+
+And that's a brief introduction to the package. Please see the documentation for further details. This is a new package; feedback, suggestions, and bug reports are all most welcome.
+
+\end{document}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/unimath-example.pdf b/macros/latex/contrib/unicode-math/unimath-example.pdf
new file mode 100644
index 0000000000..82fdbee8f9
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unimath-example.pdf
Binary files differ
diff --git a/macros/latex/contrib/unicode-math/unimath-symbols.ltx b/macros/latex/contrib/unicode-math/unimath-symbols.ltx
new file mode 100644
index 0000000000..df6ac0e986
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unimath-symbols.ltx
@@ -0,0 +1,469 @@
+%%^^A%% unimath-symbols.ltx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Listing of Unicode mathematics symbols using a variety of fonts.
+
+%!TEX TS-program = LuaLaTeX
+
+%%%%%%%%%%%%%%%%%%%%%%%
+% SYMBOLS DEFINED BY UNICODE-MATH
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[final]{article}
+\makeatletter
+
+\usepackage{ragged2e,setspace,booktabs,catchfile,shortvrb,geometry,metalogo,textcomp,longtable,tabu,hyperref}
+
+\geometry{margin=3cm}
+\hypersetup{colorlinks,linkcolor=black}
+
+\def\cmd#1{\texttt{\textbackslash\expandafter\@gobble\string#1}}
+
+\usepackage{fontspec}
+\setmainfont{texgyrepagella}%
+ [
+ Extension = .otf ,
+ UprightFont = *-regular,
+ ItalicFont = *-italic,
+ BoldFont = *-bold,
+ BoldItalicFont = *-bolditalic,
+ Ligatures=TeX,
+ Numbers={Lowercase,Monospaced},
+ ]
+\usepackage[math-style=literal,bold-style=literal]{unicode-math}
+
+\ExplSyntaxOn
+\cs_generate_variant:Nn \fontspec_set_fontface:NNnn {c}
+
+\def\FINISH{}
+\newcount\Nfonts
+\def\defmathfont#1#2#3#4{
+ \Nfonts=\numexpr\Nfonts+1\relax
+ \tl_set:cn {L#1} {#4}
+ \newcounter{#1}
+ \setcounter{#1}{-1}
+ \setmathfont[version=#1,SizeFeatures={
+ {Size=-10, Colour=999999},
+ {Size=10-, Colour=#3}}]{#2}
+ \fontspec_set_fontface:cNnn {#1} \x {ItalicFont={},BoldFont={}} {#2}
+ \tl_gput_right:Nn \FINISH {
+ \refstepcounter{#1}\label{count:#1}
+ }
+}
+\ExplSyntaxOff
+
+\defmathfont{lm}{latinmodern-math.otf}{CC6666}{L}
+\defmathfont{xits}{XITSMath-Regular.otf}{6666CC}{X}
+\defmathfont{stix}{STIX2Math.otf}{66CC66}{S}
+\defmathfont{pagella}{texgyrepagella-math.otf}{AA6666}{P}
+\defmathfont{dejavu}{texgyredejavu-math.otf}{AACC66}{D}
+\defmathfont{fira}{FiraMath-Regular.otf}{AA66CC}{F}
+
+\def\INPUT{\input{unicode-math-table.tex}}
+\def\TABLE{%
+\par\noindent
+\begin{longtabu}[l]{@{}l *{\Nfonts}{c} lX[l]@{}}
+ \toprule
+ \textsc{usv} & \Llm & \Lxits & \Lstix & \Lpagella & \Ldejavu & \Lfira & Macro & Description \\
+ \midrule \endhead
+ \INPUT\\
+ \bottomrule
+\end{longtabu}
+}
+\makeatletter
+\def\USV#1{\footnotesize\scshape\MakeLowercase{u+\@gobble#1}}
+\makeatother
+\def\CMD#1{\footnotesize\cmd#1}
+\def\DESC#1{%
+ \begin{spacing}{0.5}
+ \RaggedRight\scriptsize #1%
+ \end{spacing}
+}
+
+\newcommand\SHOW[1]{%
+ \def\UnicodeMathSymbol##1##2##3##4{%
+ \def\1{#1}\def\2{##3}%
+ \ifx\1\2\PRINTLINE{##1}{##2}{##4}\fi
+ }%
+ \TABLE
+}
+\ExplSyntaxOn
+\def\PRINTLINE#1#2#3{
+ \def\tempa{
+ \USV{#1} &
+ \SYMB{#2}{lm}{#1} &
+ \SYMB{#2}{xits}{#1} &
+ \SYMB{#2}{stix}{#1} &
+ \SYMB{#2}{pagella}{#1} &
+ \SYMB{#2}{dejavu}{#1} &
+ \SYMB{#2}{fira}{#1} &
+ \CMD{#2}
+ \tl_if_in:NnT \PLAIN {#2}
+ {
+ \makebox[0pt][l]
+ { \color[gray]{0.7} \textsuperscript{\sffamily (p)} }
+ }
+ \tl_if_in:NnT \LTXSYM {#2}
+ {
+ \makebox[0pt][l]
+ { \color[gray]{0.7} \textsuperscript{\sffamily (l)} }
+ }
+ \tl_if_in:NnT \AMSSYMB {#2}
+ {
+ \makebox[0pt][l]
+ { \color[gray]{0.7} \textsuperscript{\sffamily (a)} }
+ }
+ &
+ \DESC{#3} \\
+ }%
+ \expandafter\tempa
+}
+\ExplSyntaxOff
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \refstepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle#1$%
+ \fi
+}
+
+\def\PLAIN{\alpha\beta\gamma\delta\epsilon\zeta\eta\theta\iota\kappa\lambda\mu\nu\xi\pi\rho\sigma\tau\upsilon\phi\chi\psi\omega\varepsilon\vartheta\varpi\varrho\varsigma\varphi\Gamma\Delta\Theta\Lambda\Xi\Pi\Sigma\Upsilon\Phi\Psi\Omega
+%
+\aleph\hbar\imath\jmath\ell\wp\Re\Im\partial\infty\prime\emptyset\nabla\surd\top\bot\angle\triangle\forall\exists\neg\flat\natural\sharp\clubsuit\diamondsuit\heartsuit\spadesuit
+%
+\coprod\bigvee\bigwedge\biguplus\bigcap\bigcup\int\prod\sum\bigotimes\bigoplus\bigodot\oint\bigsqcup\smallint
+%
+\triangleleft\triangleright\bigtriangleup\bigtriangledown\wedge\land\vee\lor\cap\cup\ddagger\dagger\sqcap\sqcup\uplus\amalg\diamond\bullet\wr\div\odot\oslash\otimes\ominus\oplus\mp\pm\circ\bigcirc\setminus\cdot\ast\times\star\propto\sqsubseteq\sqsupseteq\parallel\mid\dashv\vdash\nearrow\searrow\nwarrow\swarrow\Leftrightarrow\Leftarrow\Rightarrow\neq\ne\lnot\leq\le\geq\ge\succ\prec\approx\succeq\preceq\supset\subset\supseteq\subseteq\in\ni\owns\gg\ll\not\leftrightarrow\leftarrow\gets\rightarrow\to\mapstochar\mapsto\sim\simeq\perp\equiv\asymp\smile\frown\leftharpoonup\leftharpoondown\rightharpoonup\rightharpoondown
+%
+\joinrel\relbar\Relbar\lhook\hookrightarrow\rhook\hookleftarrow\bowtie\models\Longrightarrow\longrightarrow\longleftarrow\Longleftarrow\longmapsto\longleftrightarrow\Longleftrightarrow\iff
+%
+\ldotp\cdotp\colon\ldots\cdots\vdots\ddots
+%
+\acute\grave\ddot\tilde\bar\breve\check\hat\vec\dot\widetilde\widehat
+%
+\overrightarrow\overleftarrow\overbrace\underbrace\lmoustache\rmoustache\lgroup\rgroup\arrowvert\Arrowvert\bracevert\Vert\vert\uparrow\downarrow\updownarrow\Uparrow\Downarrow\Updownarrow\backslash\rangle\langle\rbrace\lbrace\rceil\lceil\rfloor\lfloor\sqrt}
+
+
+\def\LTXSYM{
+\cong
+\notin
+\rightleftharpoons
+\doteq
+\mathring
+}
+
+\def\AMSSYMB{\boxdot\boxplus\boxtimes\square\blacksquare\centerdot\lozenge\blacklozenge\circlearrowright\circlearrowleft\leftrightharpoons\boxminus\Vdash\Vvdash\vDash\twoheadrightarrow\twoheadleftarrow\leftleftarrows\rightrightarrows\upuparrows\downdownarrows\upharpoonright\restriction\downharpoonright\upharpoonleft\downharpoonleft\rightarrowtail\leftarrowtail\leftrightarrows\rightleftarrows\Lsh\Rsh\rightsquigarrow\leftrightsquigarrow\looparrowleft\looparrowright\circeq\succsim\gtrsim\gtrapprox\multimap\therefore\because\doteqdot\Doteq\triangleq\precsim\lesssim\lessapprox\eqslantless\eqslantgtr\curlyeqprec\curlyeqsucc\preccurlyeq\leqq\leqslant\lessgtr\backprime\risingdotseq\fallingdotseq\succcurlyeq\geqq\geqslant\gtrless\vartriangleright\vartriangleleft\trianglerighteq\trianglelefteq\bigstar\between\blacktriangledown\blacktriangleright\blacktriangleleft\vartriangle\blacktriangle\triangledown\eqcirc\lesseqgtr\gtreqless\lesseqqgtr\gtreqqless\Rrightarrow\Lleftarrow\veebar\barwedge\doublebarwedge\measuredangle\sphericalangle\varpropto\smallsmile\smallfrown\Subset\Supset\Cup\doublecup\Cap\doublecap\curlywedge\curlyvee\leftthreetimes\rightthreetimes\subseteqq\supseteqq\bumpeq\Bumpeq\lll\llless\ggg\gggtr\circledS\pitchfork\dotplus\backsim\backsimeq\complement\intercal\circledcirc\circledast\circleddash\lvertneqq\gvertneqq\nleq\ngeq\nless\ngtr\nprec\nsucc\lneqq\gneqq\nleqslant\ngeqslant\lneq\gneq\npreceq\nsucceq\precnsim\succnsim\lnsim\gnsim\nleqq\ngeqq\precneqq\succneqq\precnapprox\succnapprox\lnapprox\gnapprox\nsim\ncong\diagup\diagdown\varsubsetneq\varsupsetneq\nsubseteqq\nsupseteqq\subsetneqq\supsetneqq\varsubsetneqq\varsupsetneqq\subsetneq\supsetneq\nsubseteq\nsupseteq\nparallel\nmid\nshortmid\nshortparallel\nvdash\nVdash\nvDash\nVDash\ntrianglerighteq\ntrianglelefteq\ntriangleleft\ntriangleright\nleftarrow\nrightarrow\nLeftarrow\nRightarrow\nLeftrightarrow\nleftrightarrow\divideontimes\varnothing\nexists\Finv\Game\eth\eqsim\beth\gimel\daleth\lessdot\gtrdot\ltimes\rtimes\shortmid\shortparallel\smallsetminus\thicksim\thickapprox\approxeq\succapprox\precapprox\curvearrowleft\curvearrowright\digamma\varkappa\Bbbk\hslash\backepsilon}
+
+\input{unicode-math.dtx}
+
+\begin{document}
+\MakeShortVerb\|
+\title{Symbols defined by \textsf{unicode-math}}
+\author{Will Robertson}
+\maketitle
+
+This document uses the file \texttt{unicode-math-table.tex}
+to print every symbol defined by the \textsf{unicode-math}
+package.
+Use this document to find the command name or the Unicode glyph slot for a symbol that you wish to use.
+The following fonts are shown: (with approximate symbol counts)
+\begin{itemize}
+\item[\Llm] \mathversion{lm} $\mathup{Latin\ Modern\ Math}$ (\ref{count:lm})
+\item[\Lxits] \mathversion{xits} $\mathup{XITS\ Math}$ (\ref{count:xits})
+\item[\Lstix] \mathversion{stix} $\mathup{STIX\ Math\ Two}$ (\ref{count:stix})
+\item[\Lpagella] \mathversion{pagella} $\mathup{TeX\ Gyre\ Pagella\ Math}$ (\ref{count:pagella})
+\item[\Ldejavu] \mathversion{dejavu} $\mathup{DejaVu\ Math\ TeX\ Gyre}$ (\ref{count:dejavu})
+\item[\Lfira] \mathversion{fira} $\mathup{Fira\ Math}$ (\ref{count:fira})
+\end{itemize}
+Symbols defined in Plain \TeX\ are indicated with {\color[gray]{0.6} \textsuperscript{\sffamily (p)}} after their macro name.
+\LaTeX\ follows Plain \TeX, but defines a handful more, indicated with {\color[gray]{0.6} \textsuperscript{\sffamily (l)}}.
+Symbols defined in \textsf{amssymb} are indicated with {\color[gray]{0.6} \textsuperscript{\sffamily (a)}}.
+
+Note that this list of fonts is not intended to be exhaustive but I am happy to add new fonts by request if they are distributed in \TeX\ Live.\footnote{Only a single \TeX\ Gyre Math font is shown here by design as they all largely have the same symbol coverage.}
+
+\tableofcontents
+
+\clearpage
+\section{Opening symbols, \cmd\mathopen}
+\begingroup
+\def\sqrt{\sqrtsign{}}
+\def\cuberoot{\cuberootsign{}}
+\def\fourthroot{\fourthrootsign{}}
+\def\longdivision{\longdivisionsign{}}
+\SHOW\mathopen
+\endgroup
+
+\clearpage
+\section{Closing symbols, \cmd\mathclose}
+\SHOW\mathclose
+
+\clearpage
+\section{Fence symbols, \cmd\mathfence}
+\SHOW\mathfence
+
+\section{Punctuation symbols, \cmd\mathpunct}
+\SHOW\mathpunct
+
+\section{`Over' symbols, \cmd\mathover}
+\begingroup
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \refstepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle #1{\mitx+\mity}$%
+ \fi
+}
+\SHOW\mathover
+\endgroup
+
+
+\section{`Under' symbols, \cmd\mathunder}
+\begingroup
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \refstepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle #1{\mitx+\mity}$%
+ \fi
+}
+\SHOW\mathunder
+\endgroup
+
+\clearpage
+\section{Accents, \cmd\mathaccent}
+
+Note that accents will only be properly placed if used with an OpenType font with the necessary information.
+
+\begingroup
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \refstepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle#1 \mitx$%
+ \fi
+}
+\SHOW\mathaccent
+\endgroup
+
+\section{Bottom accents, \cmd\mathbotaccent}
+\begingroup
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \refstepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle#1 \mitx$%
+ \fi
+}
+\SHOW\mathbotaccent
+\endgroup
+
+\clearpage
+\section{Big operators, \cmd\mathop}
+
+Of the operators shown below, a subset need to be flagged by \textsf{unicode-math} for \cmd\nolimits\ adjustments.
+The limits behaviour as specified by \textsf{unicode-math} are shown with grey subscripts and superscripts.
+\begingroup
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \stepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle#1_0^1$%
+ \fi
+}
+\SHOW\mathop
+\endgroup
+
+\section{Binary relations, \cmd\mathbin}
+\SHOW\mathbin
+
+\clearpage
+\section{Ordinary symbols, \cmd\mathord}
+\SHOW\mathord
+
+\clearpage
+\section{Relation symbols, \cmd\mathrel}
+\SHOW\mathrel
+
+\clearpage
+\section{Alphabetical symbols, \cmd\mathalpha}
+
+% first read in all \mathalpha symbols into a variable:
+\ExplSyntaxOn
+\cs_set:Npn \UnicodeMathSymbol #1#2#3#4 {
+ \str_if_eq:nnT {\mathalpha} {#3} {
+ \exp_not:n { \UnicodeMathSymbol {#1}{#2}{#3}{#4} }
+ }
+}
+\CatchFileEdef
+ \ALPHA{unicode-math-table.tex}
+ {\char_set_catcode_space:N \ }
+
+% now each time we print an alphabet we remove the slot;
+% this ensures we won't miss anything
+
+\def\INPUT{\ALPHA}
+\cs_new:Npn \SLOTS #1#2 {
+ \cs_set:Npn \UnicodeMathSymbol ##1##2##3##4 {
+ \bool_lazy_and:nnT
+ { \int_compare_p:n {##1 >= #1} }
+ { \int_compare_p:n {##1 <= #2} }
+ {
+ \PRINTLINE{##1}{##2}{##4}
+ }
+ }
+ \TABLE
+ \cs_set:Npn \UnicodeMathSymbol ##1##2##3##4 {
+ \bool_lazy_or:nnT
+ { \int_compare_p:n {##1 > #2} }
+ { \int_compare_p:n {##1 < #1} }
+ {
+ \exp_not:n { \UnicodeMathSymbol {##1}{##2}{##3}{##4} }
+ }
+ }
+ \edef\ALPHA{\ALPHA}
+}
+
+\ExplSyntaxOff
+
+\subsection{Normal weight}
+
+\subsubsection{Upright Greek, uppercase}
+\SLOTS{"00391}{"003A9}
+
+\subsubsection{Upright Greek, lowercase}
+\SLOTS{"003B1}{"003F5}
+
+\subsubsection{Italic, Latin, uppercase}
+\SLOTS{"1D434}{"1D44D}
+
+\subsubsection{Italic, Latin, lowercase}
+\SLOTS{"1D44E}{"1D467}
+
+\subsubsection{Italic Greek, uppercase}
+\SLOTS{"1D6E2}{"1D6FA}
+
+\subsubsection{Italic Greek, lowercase}
+\SLOTS{"1D6FC}{"1D71B}
+
+\subsubsection{Script, Latin, uppercase}
+\SLOTS{"1D49C}{"1D4B5}
+
+\subsubsection{Script, Latin, lowercase}
+\SLOTS{"1D4B6}{"1D4CF}
+
+\subsubsection{Fraktur, Latin, uppercase}
+\SLOTS{"1D504}{"1D51C}
+
+\subsubsection{Fraktur, Latin, lowercase}
+\SLOTS{"1D51E}{"1D537}
+
+\subsubsection{Blackboard, Latin, uppercase}
+\SLOTS{"1D538}{"1D550}
+
+\subsubsection{Blackboard, Latin, lowercase}
+\SLOTS{"1D552}{"1D56B}
+
+\subsubsection{Sans serif, Latin, uppercase}
+\SLOTS{"1D5A0}{"1D5B9}
+
+\subsubsection{Sans serif, Latin, lowercase}
+\SLOTS{"1D5BA}{"1D5D3}
+
+\subsubsection{Italic sans serif, Latin, uppercase}
+\SLOTS{"1D608}{"1D621}
+
+\subsubsection{Italic sans serif, Latin, lowercase}
+\SLOTS{"1D622}{"1D63B}
+
+\subsubsection{Typewriter, Latin, uppercase}
+\SLOTS{"1D670}{"1D689}
+
+\subsubsection{Typewriter, Latin, lowercase}
+\SLOTS{"1D68A}{"1D6A3}
+
+\subsection{Bold}
+
+\subsubsection{Bold, Latin, uppercase}
+\SLOTS{"1D400}{"1D419}
+
+\subsubsection{Bold, Latin, lowercase}
+\SLOTS{"1D41A}{"1D433}
+
+\subsubsection{Bold Greek, uppercase}
+\SLOTS{"1D6A8}{"1D6C0}
+
+\subsubsection{Bold Greek, lowercase}
+\SLOTS{"1D6C2}{"1D6E1}
+
+\subsubsection{Bold italic, Latin, uppercase}
+\SLOTS{"1D468}{"1D481}
+
+\subsubsection{Bold italic, Latin, lowercase}
+\SLOTS{"1D482}{"1D49B}
+
+\subsubsection{Bold italic Greek, uppercase}
+\SLOTS{"1D71C}{"1D734}
+
+\subsubsection{Bold italic Greek, lowercase}
+\SLOTS{"1D736}{"1D755}
+
+\subsubsection{Bold script, Latin, uppercase}
+\SLOTS{"1D4D0}{"1D4E9}
+
+\subsubsection{Bold script, Latin, lowercase}
+\SLOTS{"1D4EA}{"1D503}
+
+\subsubsection{Bold fraktur, Latin, uppercase}
+\SLOTS{"1D56C}{"1D585}
+
+\subsubsection{Bold fraktur, Latin, lowercase}
+\SLOTS{"1D586}{"1D59F}
+
+\subsubsection{Bold sans serif, Latin, uppercase}
+\SLOTS{"1D5D4}{"1D5ED}
+
+\subsubsection{Bold sans serif, Latin, lowercase}
+\SLOTS{"1D5EE}{"1D607}
+
+\subsubsection{Bold italic sans serif, Latin, uppercase}
+\SLOTS{"1D63C}{"1D655}
+
+\subsubsection{Bold italic sans serif, Latin, lowercase}
+\SLOTS{"1D656}{"1D66F}
+
+\subsubsection{Bold sans serif Greek, uppercase}
+\SLOTS{"1D756}{"1D76E}
+
+\subsubsection{Bold sans serif Greek, lowercase}
+\SLOTS{"1D770}{"1D78F}
+
+\subsubsection{Bold italic sans serif Greek, uppercase}
+\SLOTS{"1D790}{"1D7A8}
+
+\subsubsection{Bold italic sans serif Greek, lowercase}
+\SLOTS{"1D7AA}{"1D7C9}
+
+\subsection{Miscellaneous}
+\def\UnicodeMathSymbol#1#2#3#4{\PRINTLINE{#1}{#2}{#4}}
+\TABLE
+
+\FINISH
+
+\end{document}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/latex/contrib/unicode-math/unimath-symbols.pdf b/macros/latex/contrib/unicode-math/unimath-symbols.pdf
new file mode 100644
index 0000000000..dcb99c16db
--- /dev/null
+++ b/macros/latex/contrib/unicode-math/unimath-symbols.pdf
Binary files differ