From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/unicode-math/CHANGES.md | 348 +++ macros/latex/contrib/unicode-math/LICENSE | 416 ++++ macros/latex/contrib/unicode-math/MANIFEST.md | 258 ++ macros/latex/contrib/unicode-math/README.md | 116 + .../contrib/unicode-math/RELEASE_CHECKLIST.md | 11 + .../contrib/unicode-math/um-code-alphabets.dtx | 934 ++++++++ .../latex/contrib/unicode-math/um-code-amsmath.dtx | 224 ++ macros/latex/contrib/unicode-math/um-code-api.dtx | 43 + .../latex/contrib/unicode-math/um-code-compat.dtx | 251 ++ .../contrib/unicode-math/um-code-epilogue.dtx | 420 ++++ .../latex/contrib/unicode-math/um-code-fontopt.dtx | 326 +++ .../contrib/unicode-math/um-code-fontparam.dtx | 345 +++ macros/latex/contrib/unicode-math/um-code-main.dtx | 700 ++++++ .../latex/contrib/unicode-math/um-code-mathmap.dtx | 595 +++++ .../contrib/unicode-math/um-code-mathtext.dtx | 246 ++ macros/latex/contrib/unicode-math/um-code-msg.dtx | 156 ++ .../latex/contrib/unicode-math/um-code-opening.dtx | 395 ++++ .../latex/contrib/unicode-math/um-code-pkgopt.dtx | 330 +++ .../latex/contrib/unicode-math/um-code-primes.dtx | 385 +++ .../latex/contrib/unicode-math/um-code-setchar.dtx | 298 +++ .../latex/contrib/unicode-math/um-code-sscript.dtx | 238 ++ .../contrib/unicode-math/um-code-sym-commands.dtx | 216 ++ macros/latex/contrib/unicode-math/um-code-ui.dtx | 101 + macros/latex/contrib/unicode-math/um-code-usv.dtx | 592 +++++ .../contrib/unicode-math/um-code-variables.dtx | 257 ++ .../unicode-math/um-doc-legacyfontdimen.tex | 76 + macros/latex/contrib/unicode-math/um-doc-main.tex | 1234 ++++++++++ .../contrib/unicode-math/um-doc-mathfontdimen.tex | 151 ++ .../contrib/unicode-math/um-doc-nfsssummary.tex | 87 + .../contrib/unicode-math/um-doc-stixextract.tex | 38 + macros/latex/contrib/unicode-math/um-doc-style.tex | 131 ++ .../contrib/unicode-math/unicode-math-code.ltx | 35 + .../contrib/unicode-math/unicode-math-code.pdf | Bin 0 -> 332100 bytes .../contrib/unicode-math/unicode-math-table.tex | 2467 ++++++++++++++++++++ macros/latex/contrib/unicode-math/unicode-math.dtx | 111 + macros/latex/contrib/unicode-math/unicode-math.ins | 64 + macros/latex/contrib/unicode-math/unicode-math.ltx | 38 + macros/latex/contrib/unicode-math/unicode-math.pdf | Bin 0 -> 162882 bytes .../latex/contrib/unicode-math/unimath-example.ltx | 69 + .../latex/contrib/unicode-math/unimath-example.pdf | Bin 0 -> 22157 bytes .../latex/contrib/unicode-math/unimath-symbols.ltx | 469 ++++ .../latex/contrib/unicode-math/unimath-symbols.pdf | Bin 0 -> 1203926 bytes 42 files changed, 13171 insertions(+) create mode 100644 macros/latex/contrib/unicode-math/CHANGES.md create mode 100644 macros/latex/contrib/unicode-math/LICENSE create mode 100644 macros/latex/contrib/unicode-math/MANIFEST.md create mode 100644 macros/latex/contrib/unicode-math/README.md create mode 100644 macros/latex/contrib/unicode-math/RELEASE_CHECKLIST.md create mode 100644 macros/latex/contrib/unicode-math/um-code-alphabets.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-amsmath.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-api.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-compat.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-epilogue.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-fontopt.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-fontparam.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-main.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-mathmap.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-mathtext.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-msg.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-opening.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-pkgopt.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-primes.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-setchar.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-sscript.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-sym-commands.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-ui.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-usv.dtx create mode 100644 macros/latex/contrib/unicode-math/um-code-variables.dtx create mode 100644 macros/latex/contrib/unicode-math/um-doc-legacyfontdimen.tex create mode 100644 macros/latex/contrib/unicode-math/um-doc-main.tex create mode 100644 macros/latex/contrib/unicode-math/um-doc-mathfontdimen.tex create mode 100644 macros/latex/contrib/unicode-math/um-doc-nfsssummary.tex create mode 100644 macros/latex/contrib/unicode-math/um-doc-stixextract.tex create mode 100644 macros/latex/contrib/unicode-math/um-doc-style.tex create mode 100644 macros/latex/contrib/unicode-math/unicode-math-code.ltx create mode 100644 macros/latex/contrib/unicode-math/unicode-math-code.pdf create mode 100644 macros/latex/contrib/unicode-math/unicode-math-table.tex create mode 100644 macros/latex/contrib/unicode-math/unicode-math.dtx create mode 100644 macros/latex/contrib/unicode-math/unicode-math.ins create mode 100644 macros/latex/contrib/unicode-math/unicode-math.ltx create mode 100644 macros/latex/contrib/unicode-math/unicode-math.pdf create mode 100644 macros/latex/contrib/unicode-math/unimath-example.ltx create mode 100644 macros/latex/contrib/unicode-math/unimath-example.pdf create mode 100644 macros/latex/contrib/unicode-math/unimath-symbols.ltx create mode 100644 macros/latex/contrib/unicode-math/unimath-symbols.pdf (limited to 'macros/latex/contrib/unicode-math') 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 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: + + +DEVELOPMENT and MAINTENANCE +--------------------------- + +The current release version is available from CTAN: +> + +Latest developmental and archived historical versions are available from Github: +> + +Please file bug reports with minimal examples: +> + +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 +%%^^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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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 + } +% +% \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 + } +% +% \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 } + } +% +%<*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 + } +% + } +% \end{macrocode} +% +% \begin{macrocode} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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 + } + } +% +% \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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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 + } + } +% +% \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 } + } + } +% +% \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} +% +% \end{macrocode} +% +% \section*{Fin} +% +% The official end of the package: +% \begin{macrocode} +%\endinput +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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 +% { \tl_const:Nn #1 { \use_none:n #1 } } +% { +% \cs_if_exist:NF #1 +% { \cs_new_eq:Nc #1 { luatex \cs_to_str:N #1 } } +% } +% \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~ + } +% +% \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 } + } +% +%<*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 } + } +% +% \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 +% { } +% { \@@_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 } +% +%<*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 } +% +% \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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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 +% \@@_mathparam_store: + \@@_log:n {default-math-font} + } + { +% \@@_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 + { +% Renderer = Basic, + BoldItalicFont = {}, ItalicFont = {}, SmallCapsFont = {}, + Script = Math, +% 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 + { +% 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 + } + } , +% 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} + } +% +% \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} +% +% \end{macrocode} +% +% \begin{macrocode} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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: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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} + { +% \fontspec_gset_family:Nnn \g__fontspec_mathrm_tl {#1} {#2} +% \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} + { +% \fontspec_gset_family:Nnn \g__fontspec_mathsf_tl {#1} {#2} +% \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} + { +% \fontspec_gset_family:Nnn \g__fontspec_mathtt_tl {#1} {#2} +% \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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +%\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: + } +% +% \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{ ~\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 + } +% +% \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_start:n { \cs_to_str:N #1 } + #2 +%\@@_debug_end:n { \cs_to_str:N #1 } + } + } +\cs_new:Npn \@@_cs_new:Nn #1 #2 + { + \cs_new_protected:Nn #1 + { +%\@@_debug_start:n { \cs_to_str:N #1 } + #2 +%\@@_debug_end:n { \cs_to_str:N #1 } + } + } +% \end{macrocode} +% \end{macro} +% +% +% \begin{macrocode} +% +% \end{macrocode} + +\endinput + + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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 +% { \@@_set_math_accent:Nnnn #2 {overlay~ fixed} {#1} {#4} } +% { \@@_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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +% +% \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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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 +% +% \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} +% +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 + +\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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 + +\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" + * + * ... ... +\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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 + +\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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 + +\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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 + +\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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 + +\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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 Binary files /dev/null and b/macros/latex/contrib/unicode-math/unicode-math-code.pdf 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 +%%^^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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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} +} +% +% \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 +% +% \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} +} +% +% \end{macrocode} +% +% Declare the package version and date. +% \begin{macrocode} +%\RequirePackage{expl3} +%\ProvidesExplPackage{unicode-math} +%\ProvidesExplPackage{unicode-math-xetex} +%\ProvidesExplPackage{unicode-math-luatex} +% {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 +} +% +% \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} +%\sys_if_engine_luatex:T { \RequirePackageWithOptions{unicode-math-luatex} } +%\sys_if_engine_xetex:T { \RequirePackageWithOptions{unicode-math-xetex} } +%\sys_if_engine_pdftex:T +% { +% \msg_new:nnn {unicode-math} {not-pdftex} +% { Cannot~ be~ run~ with~ pdfLaTeX!\\ Use~ XeLaTeX~ or~ LuaLaTeX~ instead. } +% \msg_error:nn {unicode-math} {not-pdftex} +% } +%\endinput +% \end{macrocode} + +\endinput + +% /© +% +% ------------------------------------------------ +% The UNICODE-MATH package +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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 +------------------------------------------------ +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): . +------------------------------------------------ +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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 +%%^^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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 Binary files /dev/null and b/macros/latex/contrib/unicode-math/unicode-math.pdf 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 +%%^^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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 Binary files /dev/null and b/macros/latex/contrib/unicode-math/unimath-example.pdf 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 +%%^^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 +% ------------------------------------------------ +% 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): . +% ------------------------------------------------ +% 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 Binary files /dev/null and b/macros/latex/contrib/unicode-math/unimath-symbols.pdf differ -- cgit v1.2.3