summaryrefslogtreecommitdiff
path: root/fonts/mdsymbol
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /fonts/mdsymbol
Initial commit
Diffstat (limited to 'fonts/mdsymbol')
-rw-r--r--fonts/mdsymbol/FONTLOG.txt45
-rw-r--r--fonts/mdsymbol/OFL.txt95
-rw-r--r--fonts/mdsymbol/README78
-rw-r--r--fonts/mdsymbol/dvips/mdsymbol-a.enc54
-rw-r--r--fonts/mdsymbol/dvips/mdsymbol-b.enc53
-rw-r--r--fonts/mdsymbol/dvips/mdsymbol-c.enc58
-rw-r--r--fonts/mdsymbol/dvips/mdsymbol-d.enc58
-rw-r--r--fonts/mdsymbol/dvips/mdsymbol-e.enc53
-rw-r--r--fonts/mdsymbol/dvips/mdsymbol-f.enc54
-rw-r--r--fonts/mdsymbol/dvips/mdsymbol.map24
-rw-r--r--fonts/mdsymbol/mdsymbol.dtx3758
-rw-r--r--fonts/mdsymbol/mdsymbol.ins53
-rw-r--r--fonts/mdsymbol/mdsymbol.pdfbin0 -> 393886 bytes
-rw-r--r--fonts/mdsymbol/otf/MdSymbol-Bold.otfbin0 -> 124316 bytes
-rw-r--r--fonts/mdsymbol/otf/MdSymbol-Light.otfbin0 -> 121932 bytes
-rw-r--r--fonts/mdsymbol/otf/MdSymbol-Regular.otfbin0 -> 121236 bytes
-rw-r--r--fonts/mdsymbol/otf/MdSymbol-Semibold.otfbin0 -> 121592 bytes
-rw-r--r--fonts/mdsymbol/source/MdSymbolA-Bold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolA-Light.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolA-Regular.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolA-Semibold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolA.mf36
-rw-r--r--fonts/mdsymbol/source/MdSymbolB-Bold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolB-Light.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolB-Regular.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolB-Semibold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolB.mf20
-rw-r--r--fonts/mdsymbol/source/MdSymbolC-Bold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolC-Light.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolC-Regular.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolC-Semibold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolC.mf20
-rw-r--r--fonts/mdsymbol/source/MdSymbolD-Bold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolD-Light.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolD-Regular.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolD-Semibold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolD.mf20
-rw-r--r--fonts/mdsymbol/source/MdSymbolE-Bold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolE-Light.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolE-Regular.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolE-Semibold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolE.mf25
-rw-r--r--fonts/mdsymbol/source/MdSymbolF-Bold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolF-Light.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolF-Regular.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolF-Semibold.mf15
-rw-r--r--fonts/mdsymbol/source/MdSymbolF.mf12
-rw-r--r--fonts/mdsymbol/source/mdaccents.mf88
-rw-r--r--fonts/mdsymbol/source/mdarrows.mf805
-rw-r--r--fonts/mdsymbol/source/mdbase.mf1016
-rw-r--r--fonts/mdsymbol/source/mddelims.mf616
-rw-r--r--fonts/mdsymbol/source/mdgeometric.mf1918
-rw-r--r--fonts/mdsymbol/source/mdoperators.mf478
-rw-r--r--fonts/mdsymbol/source/mdrelations.mf1184
-rw-r--r--fonts/mdsymbol/source/mdturnstile.mf102
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolA-Bold.tfmbin0 -> 1244 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolA-Light.tfmbin0 -> 1244 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolA-Regular.tfmbin0 -> 1248 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolA-Semibold.tfmbin0 -> 1248 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolB-Bold.tfmbin0 -> 1140 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolB-Light.tfmbin0 -> 1140 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolB-Regular.tfmbin0 -> 1140 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolB-Semibold.tfmbin0 -> 1140 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolC-Bold.tfmbin0 -> 1296 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolC-Light.tfmbin0 -> 1296 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolC-Regular.tfmbin0 -> 1296 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolC-Semibold.tfmbin0 -> 1296 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolD-Bold.tfmbin0 -> 1292 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolD-Light.tfmbin0 -> 1292 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolD-Regular.tfmbin0 -> 1292 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolD-Semibold.tfmbin0 -> 1292 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolE-Bold.tfmbin0 -> 856 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolE-Light.tfmbin0 -> 856 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolE-Regular.tfmbin0 -> 856 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolE-Semibold.tfmbin0 -> 856 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolF-Bold.tfmbin0 -> 1392 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolF-Light.tfmbin0 -> 1404 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolF-Regular.tfmbin0 -> 1404 bytes
-rw-r--r--fonts/mdsymbol/tfm/MdSymbolF-Semibold.tfmbin0 -> 1396 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolA-Bold.pfbbin0 -> 30923 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolA-Light.pfbbin0 -> 25722 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolA-Regular.pfbbin0 -> 25213 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolA-Semibold.pfbbin0 -> 30480 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolB-Bold.pfbbin0 -> 46713 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolB-Light.pfbbin0 -> 37305 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolB-Regular.pfbbin0 -> 43651 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolB-Semibold.pfbbin0 -> 42896 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolC-Bold.pfbbin0 -> 37436 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolC-Light.pfbbin0 -> 31465 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolC-Regular.pfbbin0 -> 31235 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolC-Semibold.pfbbin0 -> 32419 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolD-Bold.pfbbin0 -> 47125 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolD-Light.pfbbin0 -> 41572 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolD-Regular.pfbbin0 -> 42117 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolD-Semibold.pfbbin0 -> 42675 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolE-Bold.pfbbin0 -> 23966 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolE-Light.pfbbin0 -> 26557 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolE-Regular.pfbbin0 -> 26058 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolE-Semibold.pfbbin0 -> 23433 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolF-Bold.pfbbin0 -> 32392 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolF-Light.pfbbin0 -> 25937 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolF-Regular.pfbbin0 -> 25789 bytes
-rw-r--r--fonts/mdsymbol/type1/MdSymbolF-Semibold.pfbbin0 -> 26343 bytes
103 files changed, 11083 insertions, 0 deletions
diff --git a/fonts/mdsymbol/FONTLOG.txt b/fonts/mdsymbol/FONTLOG.txt
new file mode 100644
index 0000000000..7a3a8dd507
--- /dev/null
+++ b/fonts/mdsymbol/FONTLOG.txt
@@ -0,0 +1,45 @@
+FONTLOG for MdSymbol
+--------------------
+
+This file provides detailed information on the MdSymbol font family.
+This information should be distributed along with the MdSymbol fonts
+and any derivative works.
+
+
+Basic Font Information
+----------------------
+
+MdSymbol is a font of mathematical symbols designed as a companion to
+Adobe Myriad Pro, but it might also fit well to other contemporary
+typefaces.
+
+MdSymbol is derived from FdSymbol, designed and released under the SIL
+Open Font License, Version 1.1 by Michael Ummels.
+
+MdSymbol development is currently hosted on:
+http://github.com/sebschub/MdSymbol
+
+
+ChangeLog
+---------
+29 Nov 2012 (Sebastian Schubert) MdSymbol version 2.000
+- Tuning of line width (mainly thinner lines) and font dimensions
+- Added "product integral" and inverted "product integral"
+- Correction of name in opentype
+
+19 Dec 2011 (Sebastian Schubert) MdSymbol version 1.000
+- First public release
+
+Acknowledgements
+-------------------------
+(Here is where contributors can be acknowledged. If you make modifications be sure to add your name (N), email (E), web-address (W) and description (D). This list is sorted by last name in alphabetical order.)
+
+N: Sebastian Schubert
+E: schubert.seb@googlemail.com
+W: http://github.com/sebschub/
+D: Original Modifications of FdSymbol
+
+N: Michael Ummels
+E: michael.ummels@rwth-aachen.de
+W: http://www.ummels.de
+D: Original Designer of FdSymbol
diff --git a/fonts/mdsymbol/OFL.txt b/fonts/mdsymbol/OFL.txt
new file mode 100644
index 0000000000..8212afa0fb
--- /dev/null
+++ b/fonts/mdsymbol/OFL.txt
@@ -0,0 +1,95 @@
+Copyright (c) 2011, Sebastian Schubert <schubert.seb@googlemail.com>
+All Rights Reserved.
+
+"MdSymbol" is Reserved Font Name for this Font Software.
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+-----------------------------------------------------------
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/fonts/mdsymbol/README b/fonts/mdsymbol/README
new file mode 100644
index 0000000000..016084beb2
--- /dev/null
+++ b/fonts/mdsymbol/README
@@ -0,0 +1,78 @@
+MdSymbol - A math symbol font
+=============================
+
+MdSymbol is a math symbol font, designed as a companion to Myriad Pro
+by Adobe, but it might also fit other contemporary typefaces. MdSymbol
+is based on FdSymbol by Michael Ummels released under the SIL Open
+Font License, Version 1.1.
+
+The development of this font package is hosted at github:
+http://github.com/sebschub/MdSymbol
+
+Usage
+-----
+
+To use this font in LaTeX, include
+
+ \usepackage{mdsymbol}
+
+in the preamble of your LaTeX document. See the PDF documentation for
+the details.
+
+Installation
+------------
+
+1. Run `latex mdsymbol.ins` to generate the LaTeX package.
+
+2. Create the following directories in a local texmf tree:
+
+ - doc/latex/mdsymbol
+ - fonts/map/dvips/mdsymbol
+ - fonts/enc/dvips/mdsymbol
+ - fonts/tfm/public/mdsymbol
+ - fonts/type1/public/mdsymbol
+ - tex/latex/mdsymbol
+
+3. Copy all necessary files into the texmf tree:
+
+ - mdsymbol.pdf goes to doc/latex/mdsymbol
+ - mdsymbol.map in the dvips directory goes to fonts/map/dvips/mdsymbol
+ - all other files in the dvips directory go to fonts/enc/dvips/mdsymbol
+ - all files in the tfm directory go to fonts/tfm/public/mdsymbol
+ - all files in the type1 directory go to fonts/type1/public/mdsymbol
+ - mdsymbol.sty goes to tex/latex/mdsymbol
+
+4. Afterwards, you may need to regenerate the file database:
+
+ texhash
+
+5. Finally, you need to activate the map file:
+
+ updmap --enable MixedMap=mdsymbol.map
+
+For a system-wide installation, replace updmap by updmap-sys.
+
+License
+-------
+
+Copyright (c) 2011 by Sebastian Schubert <schubert.seb@googlemail.com>
+
+The font components of this software, e.g. MetaFont (.mf), TeX font metric
+(.tfm), and Type 1 (.pfb) files, are licensed under the SIL Open Font
+License, Version 1.1. This license is in the accompanying file OFL.txt,
+and is also available with a FAQ at: http://scripts.sil.org/OFL
+
+The LaTeX support files contained in this software may be modified
+and distributed under the terms and conditions of the LaTeX Project
+Public License, version 1.3c or greater (your choice).
+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 Sebastian Schubert.
+
+This work consists of the files mdsymbol.dtx, mdsymbol.ins
+and the derived files mdsymbol.pdf and mdsymbol.sty.
diff --git a/fonts/mdsymbol/dvips/mdsymbol-a.enc b/fonts/mdsymbol/dvips/mdsymbol-a.enc
new file mode 100644
index 0000000000..fde60dfaea
--- /dev/null
+++ b/fonts/mdsymbol/dvips/mdsymbol-a.enc
@@ -0,0 +1,54 @@
+% TeX extra characters encoding.
+% CODINGSCHEME FONTSPECIFIC
+%
+/MdSymbolA [
+%00
+ /dotmath /sym000 /uni2236 /sym001 /sym002 /uni22EF /uni22EE /uni22F0
+ /uni22F1 /sym003 /therefore /sym004 /uni2235 /uni2237 /minus /uni2215
+%10
+ /uni2216 /plus /multiply /uni2238 /uni2A2A /divide /uni2A2B /uni2A2C
+ /uni223A /plusminus /uni2213 /uni2214 /uni2A25 /uni2A30 /uni2A31 /uni22C7
+%20
+ /logicalnot /revlogicalnot /uni2A3C /uni2A3D %/uni2319
+ /uni22CB /uni22CC /uni2A32 /uni22CA
+ /sym005 /uni22C9 /uni22C8 /uni29D6 /sym006 /sym007 /sym008 /sym009
+%30
+ /logicaland /logicalor /uni27D1 /uni27C7 /uni2A55 /uni2A56 /uni22CF /uni22CE
+ /uni22BC /uni22BB /uni2A5E /uni2A63 /union /intersection /uni22D3 /uni22D2
+%40
+ /uni228D /uni2A40 /uni228E /sym00A /uni2294 /uni2293 /uni2A4F /uni2A4E
+ /sym00B /sym00C /sym00D /sym00E /uni27D3 /uni27D4 /uni25B9 /uni25B5
+%50
+ /uni25C3 /uni25BF /uni25B8 /uni25B4 /uni25C2 /uni25BE /uni25B7 /uni25B3
+ /uni25C1 /uni25BD /uni25B6 /uni25B2 /uni25C0 /uni25BC /sym00F /sym010
+%60
+ /openbullet /bullet /circle /uni25CF /uni2296 /uni29B6 /uni2298 /uni29B8
+ /circleplus /circlemultiply /uni2299 /uni229A /uni229B /uni229D /uni229C /emptyset
+%70
+ /uni29B0 /uni25EF /uni2B24 /uni25AB /uni25AA /uni25A1 /uni25A0 /uni229F
+ /uni25EB /uni29C4 /uni29C5 /uni229E /uni22A0 /uni22A1 /uni29C8 /uni2B1C
+%80
+ /uni2B1B /uni22C4 /uni2B29 /uni25C7 /uni25C6 /sym011 /sym012 /sym013
+ /sym014 /sym015 /sym016 /uni27D0 /sym017 /uni2B2B /uni2B2A /lozenge
+%90
+ /uni29EB /uni27E0 /uni2B52 /uni22C6 /uni2B50 /uni2B51 /uni2606 /uni2605
+ /asteriskmath /infinity /proportional /sym018 /sym019 /uni226C /uni22BA /uni2240
+%A0
+ /angle /uni29A3 /uni2221 /uni299B /uni2222 /uni29A1 /uni29A0 /sym01A
+ /uni221F /uni22BE /uni299C /uni299D /minute /uni2035 /product.small /uni2A3F
+%B0
+ /integral.small /uni2713 /uni21AF /uni2662 /diamond /uni2661 /heart /spade
+ /club /uni2720 /uni2721 /uni2314 /universal /existential /uni2204 /uni2132
+%C0
+ /uni2141 /uni2201 /uni266D /uni266E /uni266F /aleph /uni2136 /uni2137
+ /uni2138 /weierstrass /uni2207 /sym01B /sym01C /.notdef /.notdef /.notdef
+%D0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%E0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%F0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
diff --git a/fonts/mdsymbol/dvips/mdsymbol-b.enc b/fonts/mdsymbol/dvips/mdsymbol-b.enc
new file mode 100644
index 0000000000..1b6a182340
--- /dev/null
+++ b/fonts/mdsymbol/dvips/mdsymbol-b.enc
@@ -0,0 +1,53 @@
+% TeX extra characters encoding.
+% CODINGSCHEME FONTSPECIFIC
+%
+/MdSymbolB [
+%00
+ /equal /uni2261 /similar /uni223D /approxequal /uni224B /uni2243 /uni22CD
+ /uni2242 /congruent /uni224C /uni224A /uni224F /uni2AAE /uni224E /uni2250
+%10
+ /uni2A66 /uni2251 /uni2252 /uni2253 /uni2254 /uni2255 /uni2323 /uni2322
+ /uni224D /uni2050 /sym020 /uni2258 /uni2256 /uni2257 /uni2259 /uni225A
+%20
+ /uni225B /uni225C /element /uni220B /less /greater /lessequal /greaterequal
+ /uni2A7D /uni2A7E /uni2266 /uni2267 /uni2272 /uni2273 /uni2A85 /uni2A86
+%30
+ /uni2276 /uni2277 /uni22DA /uni22DB /uni2A8B /uni2A8C /uni22DA.alt /uni22DB.alt
+ /uni226A /uni226B /uni22D8 /uni22D9 /uni22B2 /uni22B3 /uni22B4 /uni22B5
+%40
+ /uni2AA6 /uni2AA7 /uni2AA8 /uni2AA9 /uni228F /uni2290 /uni2291 /uni2292
+ /sym021 /sym022 /sym023 /sym024 /propersubset /propersuperset /reflexsubset /reflexsuperset
+%50
+ /uni2AC5 /uni2AC6 /uni22D0 /uni22D1 /uni227A /uni227B /uni2AAF /uni2AB0
+ /uni227C /uni227D /uni2AB3 /uni2AB4 /uni227E /uni227F /uni2AB7 /uni2AB8
+%60
+ /uni22D6 /uni22D7 /sym025 /sym026 /uni2A7F /uni2A80 /uni2A95 /uni2A96
+ /uni22DE /uni22DF /notequal /uni2262 /uni2241 /uni223D0338 /uni2249 /uni224B0338
+%70
+ /uni2244 /uni22CD0338 /uni22420338 /uni2247 /uni224C0338 /uni224A0338 /uni224F0338 /uni2AAE0338
+ /uni224E0338 /uni22500338 /uni2A660338 /uni22510338 /uni22520338 /uni22530338 /uni23230338 /uni23220338
+%80
+ /uni226D /uni20500338 /sym020_uni0338 /uni22580338 /uni22560338 /uni22570338 /uni22590338 /uni225A0338
+ /uni225B0338 /uni225C0338 /notelement /uni220C /uni226E /uni226F /uni2270 /uni2271
+%90
+ /uni2A7D0338 /uni2A7E0338 /uni22660338 /uni22670338 /uni2274 /uni2275 /uni2A850338 /uni2A860338
+ /uni2278 /uni2279 /uni22DA0338 /uni22DB0338 /uni2A8B0338 /uni2A8C0338 /uni22DA0338.alt /uni22DB0338.alt
+%A0
+ /uni226A0338 /uni226B0338 /uni22D80338 /uni22D90338 /uni22EA /uni22EB /uni22EC /uni22ED
+ /uni2AA60338 /uni2AA70338 /uni2AA80338 /uni2AA90338 /uni228F0338 /uni22900338 /uni22E2 /uni22E3
+%B0
+ /sym021_uni0338 /sym022_uni0338 /sym023_uni0338 /sym024_uni0338 /notsubset /uni2285 /uni2288 /uni2289
+ /uni2AC50338 /uni2AC60338 /uni22D00338 /uni22D10338 /uni2280 /uni2281 /uni2AAF0338 /uni2AB00338
+%C0
+ /uni22E0 /uni22E1 /uni2AB30338 /uni2AB40338 /uni227E0338 /uni227F0338 /uni2AB70338 /uni2AB80338
+ /uni22D60338 /uni22D70338 /sym025_uni0338 /sym026_uni0338 /uni2A7F0338 /uni2A800338 /uni2A950338 /uni2A960338
+%D0
+ /uni22DE0338 /uni22DF0338 /uni2246 /sym027 /uni2A87 /uni2A88 /uni2268 /uni2269
+ /uni22E6 /uni22E7 /uni2A89 /uni2A8A /uni22E4 /uni22E5 /sym028 /sym029
+%E0
+ /uni228A /uni228B /uni2ACB /uni2ACC /uni2AB1 /uni2AB2 /uni2AB5 /uni2AB6
+ /uni22E8 /uni22E9 /uni2AB9 /uni2ABA /.notdef /.notdef /.notdef /.notdef
+%F0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
diff --git a/fonts/mdsymbol/dvips/mdsymbol-c.enc b/fonts/mdsymbol/dvips/mdsymbol-c.enc
new file mode 100644
index 0000000000..48c67e3f02
--- /dev/null
+++ b/fonts/mdsymbol/dvips/mdsymbol-c.enc
@@ -0,0 +1,58 @@
+% TeX extra characters encoding.
+% CODINGSCHEME FONTSPECIFIC
+%
+/MdSymbolC [
+%00
+ /arrowright /arrowup /arrowleft /arrowdown /uni2197 /uni2196 /uni2199 /uni2198
+ /arrowdblright /arrowdblup /arrowdblleft /arrowdbldown /uni21D7 /uni21D6 /uni21D9 /uni21D8
+%10
+ /arrowboth /arrowupdn /uni2921 /uni2922 /arrowdblboth /uni21D5 /sym030 /sym031
+ /uni21A0 /uni219F /uni219E /uni21A1 /sym033 /sym032 /sym035 /sym034
+%20
+ /uni21A3 /sym036 /uni21A2 /sym037 /sym039 /sym038 /sym03B /sym03A
+ /uni21A6 /uni21A5 /uni21A4 /uni21A7 /uni2907 /sym03C /uni2906 /sym03D
+%30
+ /uni21AA /sym03E /uni21A9.alt /sym03F.alt /uni2924.alt /uni2923 /uni2926.alt /uni2925
+ /uni21AA.alt /sym03E.alt /uni21A9 /sym03F /uni2924 /uni2923.alt /uni2926 /uni2925.alt
+%40
+ /uni21C0 /uni21BF /uni21BD /uni21C2 /sym041 /sym040 /sym043 /sym042
+ /uni21C1 /uni21BE /uni21BC /uni21C3 /sym045 /sym044 /sym047 /sym046
+%50
+ /uni294B /uni294D /sym049 /sym048 /uni294A /uni294C /sym04B /sym04A
+ /uni21CC /uni296E /sym04D /sym04C /uni21CB /uni296F /sym04F /sym04E
+%60
+ /uni21E2 /uni21E1 /uni21E0 /uni21E3 /sym051 /sym050 /sym053 /sym052
+ /uni22B8 /uni2AEF /uni27DC /uni2AF0 /sym054 /sym056 /sym055 /sym057
+%70
+ /uni29DF /sym058 /uni22B7 /uni22B6 /sym05A /uni22D4 /sym05B /sym059
+ /uni21C9 /uni21C8 /uni21C7 /uni21CA /sym05D /sym05C /sym05F /sym05E
+%80
+ /uni21C4 /uni21C5 /sym061 /sym060 /uni21C6 /uni21F5 /sym063 /sym062
+ /uni219D %/uni21DD /uni2933
+ /sym064.alt /uni219C.alt %/uni21DC.alt /uni2B3F.alt
+ /sym065 /uni219D.alt %/uni21DD.alt /uni2933.alt
+ /sym064 /uni219C %/uni21DC /uni2B3F
+ /sym065.alt
+%90
+ /uni21AD /sym066.alt /uni21AD.alt /sym066 /sym069 /sym068 /sym067 /uni2938
+ /sym06C /sym06B /uni2936 /uni2935 /uni293B /sym06A /uni293A /uni2939
+%A0
+ /uni2934 /sym06D /sym06E /uni2937 /sym06F /sym070 /sym071 /sym072
+ /sym074 /sym073 /sym076 /sym075 /sym077 /sym078 /sym079 /uni21BA
+%B0
+ /uni27F2 /sym07C /uni27F3 /uni21BB /sym07A /sym07B /uni21DB /uni290A
+ /uni21DA /uni290B /uni27F6 /uni27F5 /uni27F9 /uni27F8 /uni27F7 /uni27FA
+%C0
+ /uni27FC /uni27FB /uni27FE /uni27FD /uni27FF /uni2B33 /uni27DD /uni27DE
+ /uni21B0 /uni21B1 /uni21B2 /uni21B3 /uni21AC /uni21AB /.notdef /.notdef
+%D0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%E0
+ /uni22A2 /uni22A5 %/uni27C2
+ /uni22A3 /uni22A4 /uni22A6 /uni2AE0 /uni2ADE /uni2ADF
+ /uni22A8 /uni2AEB /uni2AE4 /uni2AEA /uni22A7 /sym07E /sym07D /sym07F
+%F0
+ /uni22A9 /uni234A /uni2AE3 /uni2351 /uni22A9.alt /uni2AE8 /uni2AE3.alt /uni2AE7 %/uni3012
+ /uni22AB /sym080 /uni2AE5 /sym081 /uni22AA /sym082 /uni2AE2 /sym083
+] def
diff --git a/fonts/mdsymbol/dvips/mdsymbol-d.enc b/fonts/mdsymbol/dvips/mdsymbol-d.enc
new file mode 100644
index 0000000000..d4a1ab8277
--- /dev/null
+++ b/fonts/mdsymbol/dvips/mdsymbol-d.enc
@@ -0,0 +1,58 @@
+% TeX extra characters encoding.
+% CODINGSCHEME FONTSPECIFIC
+%
+/MdSymbolD [
+%00
+ /uni219B /uni21910338 /uni219A /uni21930338 /uni21970338 /uni21960338 /uni21990338 /uni21980338
+ /uni21CF /uni21D10338 /uni21CD /uni21D30338 /uni21D70338 /uni21D60338 /uni21D90338 /uni21D80338
+%10
+ /uni21AE /uni21950338 /uni29210338 /uni29220338 /uni21CE /uni21D50338 /sym030_uni0338 /sym031_uni0338
+ /uni21A00338 /uni219F0338 /uni219E0338 /uni21A10338 /sym033_uni0338 /sym032_uni0338 /sym035_uni0338 /sym034_uni0338
+%20
+ /uni21A30338 /sym036_uni0338 /uni21A20338 /sym037_uni0338 /sym039_uni0338 /sym038_uni0338 /sym03B_uni0338 /sym03A_uni0338
+ /uni21A60338 /uni21A50338 /uni21A40338 /uni21A70338 /uni29070338 /sym03C_uni0338 /uni29060338 /sym03D_uni0338
+%30
+ /uni21AA0338 /sym03E_uni0338 /uni21A90338.alt /sym03F_uni0338.alt /uni29240338.alt /uni29230338 /uni29260338.alt /uni29250338
+ /uni21AA0338.alt /sym03E_uni0338.alt /uni21A90338 /sym03F_uni0338 /uni29240338 /uni29230338.alt /uni29260338 /uni29250338.alt
+%40
+ /uni21C00338 /uni21BF0338 /uni21BD0338 /uni21C20338 /sym041_uni0338 /sym040_uni0338 /sym043_uni0338 /sym042_uni0338
+ /uni21C10338 /uni21BE0338 /uni21BC0338 /uni21C30338 /sym045_uni0338 /sym044_uni0338 /sym047_uni0338 /sym046_uni0338
+%50
+ /uni294B0338 /uni294D0338 /sym049_uni0338 /sym048_uni0338 /uni294A0338 /uni294C0338 /sym04B_uni0338 /sym04A_uni0338
+ /uni21CC0338 /uni296E0338 /sym04D_uni0338 /sym04C_uni0338 /uni21CB0338 /uni296F0338 /sym04F_uni0338 /sym04E_uni0338
+%60
+ /uni21E20338 /uni21E10338 /uni21E00338 /uni21E30338 /sym051_uni0338 /sym050_uni0338 /sym053_uni0338 /sym052_uni0338
+ /uni22B80338 /uni2AEF0338 /uni27DC0338 /uni2AF00338 /sym054_uni0338 /sym056_uni0338 /sym055_uni0338 /sym057_uni0338
+%70
+ /uni29DF0338 /sym058_uni0338 /uni22B70338 /uni22B60338 /sym05A_uni0338 /uni22D40338 /sym05B_uni0338 /sym059_uni0338
+ /uni21C90338 /uni21C80338 /uni21C70338 /uni21CA0338 /sym05D_uni0338 /sym05C_uni0338 /sym05F_uni0338 /sym05E_uni0338
+%80
+ /uni21C40338 /uni21C50338 /sym061_uni0338 /sym060_uni0338 /uni21C60338 /uni21F50338 /sym063_uni0338 /sym062_uni0338
+ /uni219D0338 %/uni21DD0338 /uni29330338
+ /sym064_uni0338.alt /uni219C0338.alt %/uni21DC0338.alt /uni2B3F0338.alt
+ /sym065_uni0338 /uni219D0338.alt %/uni21DD0338.alt /uni29330338.alt
+ /sym064_uni0338 /uni219C0338 %/uni21DC0338 /uni2B3F0338
+ /sym065_uni0338.alt
+%90
+ /uni21AD0338 /sym066_uni0338.alt /uni21AD0338.alt /sym066_uni0338 /sym069_uni0338 /sym068_uni0338 /sym067_uni0338 /uni29380338
+ /sym06C_uni0338 /sym06B_uni0338 /uni29360338 /uni29350338 /uni293B0338 /sym06A_uni0338 /uni293A0338 /uni29390338
+%A0
+ /uni29340338 /sym06D_uni0338 /sym06E_uni0338 /uni29370338 /sym06F_uni0338 /sym070_uni0338 /sym071_uni0338 /sym072_uni0338
+ /sym074_uni0338 /sym073_uni0338 /sym076_uni0338 /sym075_uni0338 /sym077_uni0338 /sym078_uni0338 /sym079_uni0338 /uni21BA0338
+%B0
+ /uni27F20338 /sym07C_uni0338 /uni27F30338 /uni21BB0338 /sym07A_uni0338 /sym07B_uni0338 /uni21DB0338 /uni290A0338
+ /uni21DA0338 /uni290B0338 /uni27F60338 /uni27F50338 /uni27F90338 /uni27F80338 /uni27F70338 /uni27FA0338
+%C0
+ /uni27FC0338 /uni27FB0338 /uni27FE0338 /uni27FD0338 /uni27FF0338 /uni2B330338 /uni27DD0338 /uni27DE0338
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%D0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%E0
+ /uni22AC /uni22A50338 %/uni27C20338
+ /uni22A30338 /uni22A40338 /uni22A60338 /uni2AE00338 /uni2ADE0338 /uni2ADF0338
+ /uni22AD /uni2AEB0338 /uni2AE40338 /uni2AEA0338 /uni22A70338 /sym07E_uni0338 /sym07D_uni0338 /sym07F_uni0338
+%F0
+ /uni22AE /uni234A0338 /uni2AE30338 /uni23510338 /uni22AE.alt /uni2AE80338 /uni2AE30338.alt /uni2AE70338 %/uni30120338
+ /uni22AF /sym080_uni0338 /uni2AE50338 /sym081_uni0338 /uni22AA0338 /sym082_uni0338 /uni2AE20338 /sym083_uni0338
+] def
diff --git a/fonts/mdsymbol/dvips/mdsymbol-e.enc b/fonts/mdsymbol/dvips/mdsymbol-e.enc
new file mode 100644
index 0000000000..7ef4b29948
--- /dev/null
+++ b/fonts/mdsymbol/dvips/mdsymbol-e.enc
@@ -0,0 +1,53 @@
+% TeX extra characters encoding.
+% CODINGSCHEME FONTSPECIFIC
+%
+/MdSymbolE [
+%00
+ /sym090 /sym090.disp /uni2A09 /uni2A09.disp /uni22C0 /uni22C0.disp /uni22C1 /uni22C1.disp
+ /sym091 /sym091.disp /sym092 /sym092.disp /uni2A07 /uni2A07.disp /uni2A08 /uni2A08.disp
+%10
+ /sym093 /sym093.disp /sym094 /sym094.disp /uni22C2 /uni22C2.disp /uni22C3 /uni22C3.disp
+ /sym095 /sym095.disp /uni2A03 /uni2A03.disp /sym096 /sym096.disp /uni2A04 /uni2A04.disp
+%20
+ /uni2A05 /uni2A05.disp /uni2A06 /uni2A06.disp /sym097 /sym097.disp /sym098 /sym098.disp
+ /sym099 /sym099.disp /sym09A /sym09A.disp /uni2A01 /uni2A01.disp /uni2A02 /uni2A02.disp
+%30
+ /uni2A00 /uni2A00.disp /sym09B /sym09B.disp /product /product.disp /uni2210 /uni2210.disp
+ /summation /summation.disp /uni2A0A /uni2A0A.disp /integral /integral.disp /uni222C /uni222C.disp
+%40
+ /uni222D /uni222D.disp /uni2A0C /uni2A0C.disp /uni222B22EF222B /uni222B22EF222B.disp /uni2231 /uni2231.disp
+ /uni2A11 /uni2A11.disp /uni2A0D /uni2A0D.disp /uni2A0E /uni2A0E.disp /uni2A0F /uni2A0F.disp
+%50
+ /uni222E /uni222E.disp /uni222F /uni222F.disp /uni2230 /uni2230.disp /uni2233 /uni2233.disp
+ /uni2232.alt /uni2232.alt.disp /uni2233.alt /uni2233.alt.disp /uni2232 /uni2232.disp /uni2A0B /uni2A0B.disp
+%60
+ /sym09C /sym09C.disp /sym09D /sym09D.disp /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%70
+ /.notdef /.notdef /uni0302 /uni0302.big1 /uni0302.big2 /uni0302.big3 /uni0302.big4 /uni0302.big5
+ /uni0303 /uni0303.big1 /uni0303.big2 /uni0303.big3 /uni0303.big4 /uni0303.big5 /uni0311 /uni0311.big1
+%80
+ /uni0311.big2 /uni0311.big3 /uni0311.big4 /uni0311.big5 /uni20D7 /uni0335 /uni0337 /uni0338
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%90
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%A0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%B0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%C0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%D0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%E0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%F0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
diff --git a/fonts/mdsymbol/dvips/mdsymbol-f.enc b/fonts/mdsymbol/dvips/mdsymbol-f.enc
new file mode 100644
index 0000000000..5ba166a15b
--- /dev/null
+++ b/fonts/mdsymbol/dvips/mdsymbol-f.enc
@@ -0,0 +1,54 @@
+% TeX extra characters encoding.
+% CODINGSCHEME FONTSPECIFIC
+%
+/MdSymbolF [
+%00
+ /parenleft /parenleft.big1 /parenleft.big2 /parenleft.big3 /parenleft.big4 /parenleft.big5 /parenright /parenright.big1
+ /parenright.big2 /parenright.big3 /parenright.big4 /parenright.big5 /uni239B /uni239E /uni239D /uni23A0
+%10
+ /uni239C /uni239F /bracketleft /bracketleft.big1 /bracketleft.big2 /bracketleft.big3 /bracketleft.big4 /bracketleft.big5
+ /bracketright /bracketright.big1 /bracketright.big2 /bracketright.big3 /bracketright.big4 /bracketright.big5 /uni230A /uni230A.big1
+%20
+ /uni230A.big2 /uni230A.big3 /uni230A.big4 /uni230A.big5 /uni230B /uni230B.big1 /uni230B.big2 /uni230B.big3
+ /uni230B.big4 /uni230B.big5 /uni2308 /uni2308.big1 /uni2308.big2 /uni2308.big3 /uni2308.big4 /uni2308.big5
+%30
+ /uni2309 /uni2309.big1 /uni2309.big2 /uni2309.big3 /uni2309.big4 /uni2309.big5 /uni231C /uni231C.big1
+ /uni231C.big2 /uni231C.big3 /uni231C.big4 /uni231C.big5 /uni231D /uni231D.big1 /uni231D.big2 /uni231D.big3
+%40
+ /uni231D.big4 /uni231D.big5 /uni231E /uni231E.big1 /uni231E.big2 /uni231E.big3 /uni231E.big4 /uni231E.big5
+ /uni231F /uni231F.big1 /uni231F.big2 /uni231F.big3 /uni231F.big4 /uni231F.big5 /sym0A0 /sym0A0.big1
+%50
+ /sym0A0.big2 /sym0A0.big3 /sym0A0.big4 /sym0A0.big5 /sym0A1 /sym0A1.big1 /sym0A1.big2 /sym0A1.big3
+ /sym0A1.big4 /sym0A1.big5 /uni23A1 /uni23A4 /uni23A3 /uni23A6 /uni23A2 /uni23A5
+%60
+ /uni27E6 /uni27E6.big1 /uni27E6.big2 /uni27E6.big3 /uni27E6.big4 /uni27E6.big5 /uni27E7 /uni27E7.big1
+ /uni27E7.big2 /uni27E7.big3 /uni27E7.big4 /uni27E7.big5 /sym0A2 /sym0A5 /sym0A4 /sym0A7
+%70
+ /sym0A3 /sym0A6 /braceleft /braceleft.big1 /braceleft.big2 /braceleft.big3 /braceleft.big4 /braceleft.big5
+ /braceright /braceright.big1 /braceright.big2 /braceright.big3 /braceright.big4 /braceright.big5 /uni23A7 /uni23AB
+%80
+ /uni23A9 /uni23AD /uni23A8 /uni23AC /uni23AA /uni27E8 /uni27E8.big1 /uni27E8.big2
+ /uni27E8.big3 /uni27E8.big4 /uni27E8.big5 /uni27E9 /uni27E9.big1 /uni27E9.big2 /uni27E9.big3 /uni27E9.big4
+%90
+ /uni27E9.big5 /uni27EA /uni27EA.big1 /uni27EA.big2 /uni27EA.big3 /uni27EA.big4 /uni27EA.big5 /uni27EB
+ /uni27EB.big1 /uni27EB.big2 /uni27EB.big3 /uni27EB.big4 /uni27EB.big5 /uni2991 /uni2991.big1 /uni2991.big2
+%A0
+ /uni2991.big3 /uni2991.big4 /uni2991.big5 /uni2992 /uni2992.big1 /uni2992.big2 /uni2992.big3 /uni2992.big4
+ /uni2992.big5 /slash /slash.big1 /slash.big2 /slash.big3 /slash.big4 /slash.big5 /backslash
+%B0
+ /backslash.big1 /backslash.big2 /backslash.big3 /backslash.big4 /backslash.big5 /uni2223.short /uni2223 /uni2223.big1 %/uni007C
+ /uni2224.short /uni2224 /uni2224.big1 /sym0A8 /uni2225.short /uni2225 /uni2225.big1 %/uni2016
+ /uni2226.short
+%C0
+ /uni2226 /uni2226.big1 /sym0A9 /uni2980 /uni2980.big1 /sym0AA /arrowup.short /arrowdown.short
+ /sym0AB /arrowdblup.short /arrowdbldown.short /sym0AC /sym0AD /sym0AF /sym0AE /sym0B0
+%D0
+ /sym0B2 /sym0B3 /sym0B1 /radical.tex /radical.tex.big1 /radical.tex.big2 /radical.tex.big3 /radical.tex.big4
+ /radical.tex.big5 /radical.tex.top /uni23B7.tex /radical.ex /radical /radical.big1 /radical.big2 /radical.big3
+%E0
+ /radical.big4 /radical.big5 /radical.top /uni23B7 /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+%F0
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef
+] def
diff --git a/fonts/mdsymbol/dvips/mdsymbol.map b/fonts/mdsymbol/dvips/mdsymbol.map
new file mode 100644
index 0000000000..ae1a71156b
--- /dev/null
+++ b/fonts/mdsymbol/dvips/mdsymbol.map
@@ -0,0 +1,24 @@
+MdSymbolA-Light MdSymbolA-Light <MdSymbolA-Light.pfb
+MdSymbolA-Regular MdSymbolA-Regular <MdSymbolA-Regular.pfb
+MdSymbolA-Semibold MdSymbolA-Semibold <MdSymbolA-Semibold.pfb
+MdSymbolA-Bold MdSymbolA-Bold <MdSymbolA-Bold.pfb
+MdSymbolB-Light MdSymbolB-Light <MdSymbolB-Light.pfb
+MdSymbolB-Regular MdSymbolB-Regular <MdSymbolB-Regular.pfb
+MdSymbolB-Semibold MdSymbolB-Semibold <MdSymbolB-Semibold.pfb
+MdSymbolB-Bold MdSymbolB-Bold <MdSymbolB-Bold.pfb
+MdSymbolC-Light MdSymbolC-Light <MdSymbolC-Light.pfb
+MdSymbolC-Regular MdSymbolC-Regular <MdSymbolC-Regular.pfb
+MdSymbolC-Semibold MdSymbolC-Semibold <MdSymbolC-Semibold.pfb
+MdSymbolC-Bold MdSymbolC-Bold <MdSymbolC-Bold.pfb
+MdSymbolD-Light MdSymbolD-Light <MdSymbolD-Light.pfb
+MdSymbolD-Regular MdSymbolD-Regular <MdSymbolD-Regular.pfb
+MdSymbolD-Semibold MdSymbolD-Semibold <MdSymbolD-Semibold.pfb
+MdSymbolD-Bold MdSymbolD-Bold <MdSymbolD-Bold.pfb
+MdSymbolE-Light MdSymbolE-Light <MdSymbolE-Light.pfb
+MdSymbolE-Regular MdSymbolE-Regular <MdSymbolE-Regular.pfb
+MdSymbolE-Semibold MdSymbolE-Semibold <MdSymbolE-Semibold.pfb
+MdSymbolE-Bold MdSymbolE-Bold <MdSymbolE-Bold.pfb
+MdSymbolF-Light MdSymbolF-Light <MdSymbolF-Light.pfb
+MdSymbolF-Regular MdSymbolF-Regular <MdSymbolF-Regular.pfb
+MdSymbolF-Semibold MdSymbolF-Semibold <MdSymbolF-Semibold.pfb
+MdSymbolF-Bold MdSymbolF-Bold <MdSymbolF-Bold.pfb
diff --git a/fonts/mdsymbol/mdsymbol.dtx b/fonts/mdsymbol/mdsymbol.dtx
new file mode 100644
index 0000000000..29cf055abb
--- /dev/null
+++ b/fonts/mdsymbol/mdsymbol.dtx
@@ -0,0 +1,3758 @@
+% \iffalse meta-comment
+%
+% Copyright (c) 2012 by Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% 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 Sebastian Schubert.
+%
+% This work consists of the files mdsymbol.dtx, mdsymbol.ins
+% and the derived files mdsymbol.pdf and mdsymbol.sty.
+%
+% \fi
+%
+%\iffalse
+%<*driver>
+\ProvidesFile{mdsymbol.dtx}[2012/11/18 v0.5 MdSymbol support package]
+%</driver>
+%<style>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<style>\ProvidesPackage{mdsymbol}[2012/11/18 v0.5 MdSymbol support package]
+%<*driver>
+\documentclass[10pt]{ltxdoc}
+
+\usepackage{multicol}
+\usepackage[T1]{fontenc}
+\IfFileExists{MyriadPro.sty}{%
+ \usepackage[footnotefigures,medfamily]{MyriadPro}
+ \renewcommand{\familydefault}{\sfdefault}
+ \DeclareFontFamily{T1}{mdsylmtt}{}
+ \DeclareFontShape{T1}{mdsylmtt}{m}{n}
+ { <-> [1.11] ec-lmtt10}{}
+ \renewcommand{\ttdefault}{mdsylmtt}
+ \usepackage[toc,eqno,enum,bib,lineno]{tabfigures}
+}{%
+ \usepackage{lmodern}
+ \usepackage{mdsymbol}
+}
+\usepackage{booktabs,paralist}
+\usepackage{hypdoc}
+\usepackage{microtype}
+
+\hypersetup{
+ bookmarksnumbered,
+ colorlinks=false,
+ pdfborder={0 0 0},
+ pdftitle={MdSymbol: A Math Symbol Font},
+ pdfauthor={Sebastian Schubert}
+}
+
+\linespread{1.1}
+\frenchspacing
+
+\newcommand{\pkg}[1]{\mbox{#1}}
+\newcommand{\opt}[1]{\mbox{\texttt{#1}}}
+\newcommand{\mainopt}[1]{\mbox{\textbf{#1}}}
+\newcommand{\file}[1]{\texttt{#1}}
+\providecommand{\figureversion}[1]{}
+
+\renewcommand{\theCodelineNo}%
+ {\normalfont\figureversion{tab}\scriptsize\arabic{CodelineNo}}
+
+\begin{document}
+\DocInput{mdsymbol.dtx}
+\end{document}
+%</driver>
+%\fi
+%
+% \CheckSum{4445}
+% \CharacterTable
+% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+% Digits \0\1\2\3\4\5\6\7\8\9
+% Exclamation \! Double quote \" Hash (number) \#
+% Dollar \$ Percent \% Ampersand \&
+% Acute accent \' Left paren \( Right paren \)
+% Asterisk \* Plus \+ Comma \,
+% Minus \- Point \. Solidus \/
+% Colon \: Semicolon \; Less than \<
+% Equals \= Greater than \> Question mark \?
+% Commercial at \@ Left bracket \[ Backslash \\
+% Right bracket \] Circumflex \^ Underscore \_
+% Grave accent \` Left brace \{ Vertical bar \|
+% Right brace \} Tilde \~}
+%
+% \GetFileInfo{mdsymbol.dtx}
+%
+% \title{MdSymbol: A Math Symbol Font}
+% \author{Sebastian Schubert \\ \texttt{schubert.seb@googlemail.com}}
+% \date{\fileversion\ -- \filedate}
+% \maketitle
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% MdSymbol is a font of mathematical symbols designed as a companion
+% to Adobe Myriad Pro, but it might also fit well to other
+% contemporary typefaces. To use this font in a \LaTeX\ document, add
+% the command
+% \begin{quote}
+% |\usepackage|\oarg{options}|{mdsymbol}|
+% \end{quote}
+% to the preamble of your document. With default settings, it
+% redefines most of the standard mathematical symbols and makes
+% available many new ones (see Section~\ref{sec:glyphs}). With the
+% \opt{onlysansmath} option, the symbols are only defined for two new
+% math versions, sans and sansbold. This allows to easily use two
+% distinct math fonts in one document. For details and the other
+% available options see section~\ref{sec:selection}.
+%
+% \subsubsection*{Acknowledgements}
+%
+% The MdSymbol font is heavily based on
+% FdSymbol\footnote{\url{http://www.ctan.org/pkg/fdsymbol/}}, another
+% math symbol font, designed by Michael Ummels. All supporting
+% scripts (to e.g. convert the MetaFont sources to Type~1 fonts) were
+% written by him. I got a lot of help in |comp.text.tex| so basically
+% the main code implementing the \opt{onlysansmath} functionality is
+% written by Bruno Le Floch, Enrico Gregorio, Lars Madsen and Heiko
+% Oberdiek; the ugly parts and bugs by me.
+%
+% \section{Interferences with other packages}
+%
+% The \pkg{mdsymbol} package is incompatible with the \pkg{amssymb} and
+% \pkg{amsfonts} packages. It automatically loads the \pkg{amsmath} and
+% \pkg{textcomp} packages. If you want to pass options to these packages, you
+% can either load these packages before \pkg{mdsymbol} or you can include the
+% options in the |\documentclass| command.
+%
+% \section{Options}\label{sec:options}
+%
+% \subsection{Font selection}\label{sec:selection}
+%
+% MdSymbol comes in four weights, which are (in increasing order)
+% Light, Regular, Semibold and Bold. Of these, Light and Regular are
+% suitable for normal math typesetting, while Semibold and Bold can be
+% used for bold math typesetting. Using the options
+% \mainopt{normalweight} and \mainopt{boldweight}, you can select
+% which weights are used. For example, to use the Light weight as the
+% normal weight in math, add \opt{normalweight=Light} to the package
+% options. Analogously, to use the Bold weight with |\boldmath| or
+% |\boldsymbol|, add \opt{boldweight=Bold} to the package options. By
+% default, Regular and Semibold are used. Additionally, it is possible
+% to use a suitable weight automatically depending on the font size.
+% By selecting \opt{autolight} or \opt{autoregular} for
+% \opt{normalweight}, Light or Regular weight, respectively, is used
+% for font sizes larger than 6pt and Regular or Semibold,
+% respectively, for smaller sizes. Similarly, \opt{autosemibold} for
+% \opt{boldweight} selects Semibold for bold symbols larger than 6pt
+% and Bold below 6pt.
+%
+%
+%\subsection{Math Symbols only in sans serif math}\label{sec:sansmath}
+%
+% With the \mainopt{onlysansmath} option, \pkg{mdsymbol} does not change
+% already defined math symbols but declares two new math versions,
+% sans and sansbold, and defines its symbols to be only used within
+% these math versions. Use the command |\mathversion{sans}| or
+% |\mathversion{sansbold}| to switch to this math version. Also single
+% input character symbols (e.g. |+|, |-|, |(|, |)|) adapt to the math
+% version except when used with a delimiter size increasing command
+% like |\big(|.\footnote{Any help to solve this problem is highly
+% welcome!} As a workaround, use the corresponding full command
+% instead (|\big\lparen|).
+%
+%
+%\subsection{Miscellaneous}\label{sec:Misc}
+%
+%
+% \pkg{mdsymbol} uses and combines some symbols of the text font
+% (section~\ref{sec:faked}). The option \mainopt{retainmissing}
+% prevents this.
+%
+% In order to use MdSymbol with different text fonts, it is possible
+% to scale the fonts by an arbitrary factor. This can be achieved with
+% the option \mainopt{scale}. For example, to use the fonts at 90\,\%
+% of their original size, you can add \opt{scale=0.9} to the package
+% options. Finally, it is possible to increase the height of
+% delimiters slightly (by 20\,\% in text size and by 25\,\% in |\big|
+% size). This can be achieved by activating the option
+% \mainopt{largedelims}. Use this option if you want to combine
+% MdSymbol with a text font that has rather tall delimiters.
+%
+% The following table summarises all options (keys) that can be used with the
+% \pkg{mdsymbol} package. Values that correspond to the default behaviour of
+% the package are marked by an asterisk.
+% \begin{center}
+% \begin{tabular}{@{}ll@{}}
+% \toprule
+% Key & Values \\
+% \midrule
+% \opt{normalweight} & \opt{Light}, \opt{Regular}*, \opt{autolight}, \opt{autoregular} \\
+% \opt{boldweight} & \opt{Semibold}*, \opt{Bold}, \opt{autosemibold} \\
+% \opt{onlysansmath} & \opt{true}, \opt{false}*\\
+% \opt{retainmissing} & \opt{true}, \opt{false}*\\
+% \opt{scale} & \meta{factor} \\
+% \opt{largedelims} & \opt{true}, \opt{false}* \\
+% \bottomrule
+% \end{tabular}
+% \end{center}
+%
+% \section{Version history}\label{sec:history}
+%
+% Version 0.1: First version\\
+% Version 0.1a: Always declare sansmathtabular and sansmathboldtabular
+% if \opt{onlysansmath} option is given\\
+% Version 0.2: Internal bugfixes\\
+% Version 0.2a:
+% \begin{compactitem}
+% \item Bugfixes of bugfixes
+% \item Issue error when using a symbol in non-sans math versions
+% which has not been declared before loading \pkg{mdsymbol} with
+% \opt{onlysansmath} option
+% \end{compactitem}
+% Version 0.3: Rename package to lower-case mdsymbol for CTAN upload\\
+% Version 0.4:
+% \begin{compactitem}
+% \item Added overlining command
+% \item Tuning of parameters and correction of some symbols
+% \end{compactitem}
+% Version 0.5: Added symbols |\prodi| and |\coprodi|
+%
+% \section{Symbols}\label{sec:glyphs}
+%
+% The \pkg{mdsymbol} package provides the following symbols.
+%
+% \renewcommand\cmd[1]{\texttt{\string#1}}
+% \newcommand\showsymbol[1]{\par\noindent\hangindent=3em%
+% \makebox[2em][l]{$#1$}\cmd{#1}}
+% \newcommand\showwidesymbol[1]{\par\noindent\hangindent=4em%
+% \makebox[3em][l]{$#1$}\cmd{#1}}
+% \newcommand\showop[1]{\par\noindent\hangindent=6em%
+% \makebox[5em][l]{$#1$\hfill$\displaystyle#1$\hfill}\cmd{#1}}
+% \newcommand\showmbrace[1]{\par\noindent\hangindent=6em%
+% \makebox[5em][l]{${#1}{\bigm#1}{\Bigm#1}{\biggm#1}{\Biggm#1}$}\cmd{#1}}
+% \newcommand\showlbrace[1]{\par\noindent\hangindent=6em%
+% \makebox[5em][l]{$\Biggl#1\biggl#1\Bigl#1\bigl#1#1$}\cmd{#1}}
+% \newcommand\showrbrace[1]{\par\noindent\hangindent=6em%
+% \makebox[5em][l]{$#1\bigr#1\Bigr#1\biggr#1\Biggr#1$}\cmd{#1}}
+% \newcommand\showover[1]{\par\noindent\hangindent=4em%
+% \makebox[3em][l]{$#1{xxx}$}\cmd{#1}}
+% \newcommand\showaccent[1]{\par\noindent\hangindent=4em%
+% \makebox[3em][l]{$#1b$}\cmd{#1}}
+%
+% \subsection{Ordinary symbols}
+%
+% \begin{multicols}{2}
+% \raggedright
+% \showsymbol\hdots
+% \showsymbol\vdots
+% \showsymbol\udots, \cmd{\adots}
+% \showsymbol{\ddots}
+% \showsymbol{\righttherefore}
+% \showsymbol{\uptherefore}, \cmd{\therefore}
+% \showsymbol{\lefttherefore}
+% \showsymbol{\downtherefore}, \cmd{\because}
+% \showsymbol{\squaredots}
+% \showsymbol{\neg}, \cmd{\lnot}
+% \showsymbol{\backneg}, \cmd{\invnot}, \cmd{\invneg}
+% \showsymbol{\turnedneg}, \cmd{\turnednot}
+% \showsymbol{\turnedbackneg}
+% \showsymbol{\largetriangleup}
+% \showsymbol{\largetriangledown}
+% \showsymbol{\emptyset}, \cmd{\diameter}, \cmd{\varnothing}
+% \showsymbol{\revemptyset}
+% \showsymbol{\largecircle}, \cmd{\lgwhtcircle}
+% \showsymbol{\largeblackcircle}
+% \showsymbol{\largesquare}, \cmd{\lgwhtsquare}
+% \showsymbol{\largeblacksquare}, \cmd{\lgblksquare}
+% \showsymbol{\smalllozenge}, \cmd{\smwhtlozenge}
+% \showsymbol{\smallblacklozenge}, \cmd{\smblklozenge}
+% \showsymbol{\medlozenge}, \cmd{\lozenge}, \cmd{\mdlgwhtlozenge},
+% \cmd{\mdwhtlozenge}
+% \showsymbol{\medblacklozenge}, \cmd{\blacklozenge}, \cmd{\mdlgblklozenge},
+% \cmd{\mdblklozenge}
+% \showsymbol{\lozengeminus}
+% \showsymbol{\largewhitestar}
+% \showsymbol{\largeblackstar}, \cmd{\bigstar}
+% \showsymbol{\infty}
+% \showsymbol{\angle}
+% \showsymbol{\revangle}
+% \showsymbol{\measuredangle}
+% \showsymbol{\revmeasuredangle}, \cmd{\measuredangleleft}
+% \showsymbol{\sphericalangle}
+% \showsymbol{\sphericalangleup}
+% \showsymbol{\sphericalangleleft}, \cmd{\revsphericalangle}, \cmd{\gtlpar}
+% \showsymbol{\sphericalangledown}
+% \showsymbol{\rightangle}
+% \showsymbol{\measuredrightangle}
+% \showsymbol{\rightanglesquare}, \cmd{\rightanglesqr}
+% \showsymbol{\measuredrightangledot}, \cmd{\rightanglemdot}
+% \showsymbol{\prime}
+% \showsymbol{\backprime}
+% \showsymbol{\checkmark}
+% \showsymbol{\lightning}, \cmd{\downzigzagarrow}
+% \showsymbol{\diamondsuit}
+% \showsymbol{\vardiamondsuit}
+% \showsymbol{\heartsuit}
+% \showsymbol{\varheartsuit}
+% \showsymbol{\spadesuit}
+% \showsymbol{\clubsuit}
+% \showsymbol{\maltese}
+% \showsymbol{\starofdavid}
+% \showsymbol{\sector}
+% \showsymbol{\forall}
+% \showsymbol{\exists}
+% \showsymbol{\nexists}
+% \showsymbol{\Finv}
+% \showsymbol{\Game}
+% \showsymbol{\complement}
+% \showsymbol{\flat}
+% \showsymbol{\natural}
+% \showsymbol{\sharp}
+% \showsymbol{\aleph}
+% \showsymbol{\beth}
+% \showsymbol{\gimel}
+% \showsymbol{\daleth}
+% \showsymbol{\wp}
+% \showsymbol{\nabla}
+% \showsymbol{\top}
+% \showsymbol{\bot}
+% \showsymbol{/}, \cmd{\mathslash}
+% \showsymbol{\backslash}
+% {\catcode`\|=11 \showsymbol{|}, \cmd{\vert}}
+% \showsymbol{\Vert}
+% \showsymbol{\Vvert}
+% \end{multicols}
+%
+% \subsection{Binary operators}
+%
+% \begin{multicols}{2}
+% \raggedright
+% \showsymbol{\cdot}
+% \showsymbol{\centerdot}
+% \showsymbol{\hdotdot}
+% \showsymbol{\vdotdot}
+% \showsymbol{\udotdot}
+% \showsymbol{\ddotdot}
+% \showsymbol{-}, \cmd{\minus}
+% \showsymbol{\medslash}, \cmd{\smalldivslash}
+% \showsymbol{\medbackslash}, \cmd{\smallsetminus}
+% \showsymbol{+}, \cmd{\plus}
+% \showsymbol{\times}
+% \showsymbol{\dotminus}
+% \showsymbol{\minusdot}
+% \showsymbol{\div}
+% \showsymbol{\minusfdots}
+% \showsymbol{\minusrdots}
+% \showsymbol{\pm}
+% \showsymbol{\mp}
+% \showsymbol{\dotplus}
+% \showsymbol{\plusdot}
+% \showsymbol{\dottimes}
+% \showsymbol{\timesbar}
+% \showsymbol{\divideontimes}
+% \showsymbol{\intprod}
+% \showsymbol{\intprodr}
+% \showsymbol{\leftthreetimes}
+% \showsymbol{\rightthreetimes}
+% \showsymbol{\dtimes}, \cmd{\btimes}
+% \showsymbol{\rtimes}
+% \showsymbol{\utimes}, \cmd{\ttimes}
+% \showsymbol{\ltimes}
+% \showsymbol{\lrtimes}
+% \showsymbol{\upbowtie}, \cmd{\hourglass}
+% \showsymbol{\rightY}
+% \showsymbol{\upY}
+% \showsymbol{\leftY}
+% \showsymbol{\downY}
+% \showsymbol{\wedge}, \cmd{\land}
+% \showsymbol{\vee}, \cmd{\lor}
+% \showsymbol{\wedgedot}
+% \showsymbol{\veedot}
+% \showsymbol{\doublewedge}, \cmd{\wedgeonwedge}
+% \showsymbol{\doublevee}, \cmd{\veeonwee}
+% \showsymbol{\curlywedge}
+% \showsymbol{\curlyvee}
+% \showsymbol{\barwedge}
+% \showsymbol{\veebar}
+% \showsymbol{\doublebarwedge}
+% \showsymbol{\veedoublebar}
+% \showsymbol{\cup}
+% \showsymbol{\cap}
+% \showsymbol{\doublecup}, \cmd{\Cup}
+% \showsymbol{\doublecap}, \cmd{\Cap}
+% \showsymbol{\cupdot}
+% \showsymbol{\capdot}
+% \showsymbol{\cupplus}, \cmd{\uplus}
+% \showsymbol{\capplus}
+% \showsymbol{\sqcup}
+% \showsymbol{\sqcap}
+% \showsymbol{\doublesqcup}, \cmd{\Sqcup}
+% \showsymbol{\doublesqcap}, \cmd{\Sqcap}
+% \showsymbol{\sqcupdot}
+% \showsymbol{\sqcapdot}
+% \showsymbol{\sqcupplus}
+% \showsymbol{\sqcapplus}
+% \showsymbol{\pullback}
+% \showsymbol{\pushout}
+% \showsymbol{\smalltriangleright}
+% \showsymbol{\smalltriangleup}
+% \showsymbol{\smalltriangleleft}
+% \showsymbol{\smalltriangledown}
+% \showsymbol{\smallblacktriangleright}
+% \showsymbol{\smallblacktriangleup}
+% \showsymbol{\smallblacktriangleleft}
+% \showsymbol{\smallblacktriangledown}
+% \showsymbol{\medtriangleright}, \cmd{\triangleright}
+% \showsymbol{\medtriangleup}, \cmd{\triangle}, \cmd{\vartriangle}
+% \showsymbol{\medtriangleleft}, \cmd{\triangleleft}
+% \showsymbol{\medtriangledown}, \cmd{\triangledown}
+% \showsymbol{\medblacktriangleright}, \cmd{\blacktriangleright}
+% \showsymbol{\medblacktriangleup}, \cmd{\blacktriangle}
+% \showsymbol{\medblacktriangleleft}, \cmd{\blacktriangleleft}
+% \showsymbol{\medblacktriangledown}, \cmd{\blacktriangledown}
+% \showsymbol{\bigtriangleup}
+% \showsymbol{\bigtriangledown}
+% \showsymbol{\smallcircle}, \cmd{\circ}, \cmd{\smwhtcircle}
+% \showsymbol{\smallblackcircle}, \cmd{\bullet}, \cmd{\smblkcircle}
+% \showsymbol{\medcircle}, \cmd{\mdlgwhtcircle}, \cmd{\mdwhtcircle}
+% \showsymbol{\medblackcircle}, \cmd{\mdlgblkcircle}, \cmd{\mdblkcircle}
+% \showsymbol{\ominus}
+% \showsymbol{\overt}, \cmd{\circledvert}
+% \showsymbol{\oslash}
+% \showsymbol{\obackslash}, \cmd{\obslash}
+% \showsymbol{\oplus}
+% \showsymbol{\otimes}
+% \showsymbol{\odot}
+% \showsymbol{\ocirc}, \cmd{\circledcirc}
+% \showsymbol{\oast}, \cmd{\circledast}
+% \showsymbol{\odash}, \cmd{\circleddash}
+% \showsymbol{\oequal}, \cmd{\circledequal}
+% \showsymbol{\bigcirc}
+% \showsymbol{\smallsquare}, \cmd{\smwhtsquare}
+% \showsymbol{\smallblacksquare}, \cmd{\smblksquare}
+% \showsymbol{\medsquare}, \cmd{\square}, \cmd{\Box}, \cmd{\mdlgwhtsquare},
+% \cmd{\mdwhtsquare}
+% \showsymbol{\medblacksquare}, \cmd{\mdlgblksquare}, \cmd{\mdblksquare}
+% \showsymbol{\boxminus}
+% \showsymbol{\boxvert}, \cmd{\boxbar}
+% \showsymbol{\boxslash}, \cmd{\boxdiag}
+% \showsymbol{\boxbackslash}, \cmd{\boxbslash}
+% \showsymbol{\boxplus}
+% \showsymbol{\boxtimes}
+% \showsymbol{\boxdot}
+% \showsymbol{\boxbox}
+% \showsymbol{\smalldiamond}, \cmd{\diamond}, \cmd{\smwhtdiamond}
+% \showsymbol{\smallblackdiamond}, \cmd{\blackdiamond}, \cmd{\smblkdiamond}
+% \showsymbol{\meddiamond}, \cmd{\Diamond}, \cmd{\mdlgwhtdiamond},
+% \cmd{\mdwhtdiamond}
+% \showsymbol{\medblackdiamond}, \cmd{\mdlgblkdiamond}, \cmd{\mdblkdiamond}
+% \showsymbol{\diamondminus}
+% \showsymbol{\diamondvert}
+% \showsymbol{\diamondslash}
+% \showsymbol{\diamondbackslash}, \cmd{\diamondbslash}
+% \showsymbol{\diamondplus}
+% \showsymbol{\diamondtimes}
+% \showsymbol{\diamonddot}, \cmd{\diamondcdot}
+% \showsymbol{\diamonddiamond}
+% \showsymbol{\smallwhitestar}, \cmd{\smwhitestar}
+% \showsymbol{\smallblackstar}, \cmd{\star}
+% \showsymbol{\medwhitestar}
+% \showsymbol{\medblackstar}, \cmd{\medstar}
+% \showsymbol{*}, \cmd{\ast}
+% \showsymbol{\intercal}
+% \showsymbol{\wreath}, \cmd{\wr}
+% \showsymbol{\amalg}
+% \showsymbol{\lhd}
+% \showsymbol{\rhd}
+% \showsymbol{\unlhd}
+% \showsymbol{\unrhd}
+% \showsymbol{\divslash}
+% \showsymbol{\setminus}
+% \end{multicols}
+%
+% \subsection{Relations}
+%
+% \begin{multicols}{2}
+% \raggedright
+% \showsymbol{=}, \cmd{\equal}, \cmd{\Relbar}
+% \showsymbol{\equiv}
+% \showsymbol{\sim}
+% \showsymbol{\backsim}
+% \showsymbol{\approx}
+% \showsymbol{\triplesim}, \cmd{\approxident}
+% \showsymbol{\simeq}
+% \showsymbol{\backsimeq}
+% \showsymbol{\eqsim}
+% \showsymbol{\cong}
+% \showsymbol{\backcong}
+% \showsymbol{\dotcong}
+% \showsymbol{\approxeq}
+% \showsymbol{\bumpeq}
+% \showsymbol{\bumpeqq}
+% \showsymbol{\Bumpeq}
+% \showsymbol{\doteq}
+% \showsymbol{\eqdot}
+% \showsymbol{\Doteq}
+% \showsymbol{\fallingdotseq}
+% \showsymbol{\risingdotseq}
+% \showsymbol{\coloneq}, \cmd{\coloneqq}
+% \showsymbol{\eqcolon}, \cmd{\eqqcolon}
+% \showsymbol{\smile}, \cmd{\smallsmile}
+% \showsymbol{\frown}, \cmd{\smallfrown}
+% \showsymbol{\smilefrown}, \cmd{\asymp}
+% \showsymbol{\frownsmile}, \cmd{\closure}
+% \showsymbol{\smileeq}
+% \showsymbol{\frowneq}, \cmd{\arceq}
+% \showsymbol{\eqcirc}
+% \showsymbol{\circeq}
+% \showsymbol{\wedgeq}, \cmd{\hateq}
+% \showsymbol{\veeeq}
+% \showsymbol{\stareq}
+% \showsymbol{\triangleeq}, \cmd{\triangleq}
+% \showsymbol{\in}
+% \showsymbol{\owns}, \cmd{\ni}
+% \showsymbol{<}, \cmd{\less}
+% \showsymbol{>}, \cmd{\gtr}
+% \showsymbol{\leq}, \cmd{\le}
+% \showsymbol{\geq}, \cmd{\ge}
+% \showsymbol{\leqslant}
+% \showsymbol{\geqslant}
+% \showsymbol{\leqq}
+% \showsymbol{\geqq}
+% \showsymbol{\lesssim}
+% \showsymbol{\gtrsim}
+% \showsymbol{\lessapprox}
+% \showsymbol{\gtrapprox}
+% \showsymbol{\lessgtr}
+% \showsymbol{\gtrless}
+% \showsymbol{\lesseqgtr}
+% \showsymbol{\gtreqless}
+% \showsymbol{\lesseqqgtr}
+% \showsymbol{\gtreqqless}
+% \showsymbol{\lesseqslantgtr}, \cmd{\lesq}
+% \showsymbol{\gtreqslantless}, \cmd{\gesl}
+% \showsymbol{\ll}
+% \showsymbol{\gg}
+% \showsymbol{\lll}, \cmd{\llless}
+% \showsymbol{\ggg}, \cmd{\gggtr}
+% \showsymbol{\lessclosed}, \cmd{\vartriangleleft}
+% \showsymbol{\gtrclosed}, \cmd{\vartriangleright}
+% \showsymbol{\leqclosed}, \cmd{\trianglelefteq}
+% \showsymbol{\geqclosed}, \cmd{\trianglerighteq}
+% \showsymbol{\lesscc}, \cmd{\ltcc}
+% \showsymbol{\gtrcc}, \cmd{\gtcc}
+% \showsymbol{\leqslcc}, \cmd{\lescc}
+% \showsymbol{\geqslcc}, \cmd{\gescc}
+% \showsymbol{\sqsubset}
+% \showsymbol{\sqsupset}
+% \showsymbol{\sqsubseteq}
+% \showsymbol{\sqsupseteq}
+% \showsymbol{\sqsubseteqq}
+% \showsymbol{\sqsupseteqq}
+% \showsymbol{\Sqsubset}
+% \showsymbol{\Sqsupset}
+% \showsymbol{\subset}
+% \showsymbol{\supset}
+% \showsymbol{\subseteq}
+% \showsymbol{\supseteq}
+% \showsymbol{\subseteqq}
+% \showsymbol{\supseteqq}
+% \showsymbol{\Subset}
+% \showsymbol{\Supset}
+% \showsymbol{\prec}
+% \showsymbol{\succ}
+% \showsymbol{\preceq}
+% \showsymbol{\succeq}
+% \showsymbol{\preccurlyeq}
+% \showsymbol{\succcurlyeq}
+% \showsymbol{\preceqq}
+% \showsymbol{\succeqq}
+% \showsymbol{\precsim}
+% \showsymbol{\succsim}
+% \showsymbol{\precapprox}
+% \showsymbol{\succapprox}
+% \showsymbol{\lessdot}
+% \showsymbol{\gtrdot}
+% \showsymbol{\leqdot}
+% \showsymbol{\geqdot}
+% \showsymbol{\leqslantdot}, \cmd{\lesdot}
+% \showsymbol{\geqslantdot}, \cmd{\gesdot}
+% \showsymbol{\eqslantless}
+% \showsymbol{\eqslantgtr}
+% \showsymbol{\curlyeqprec}
+% \showsymbol{\curlyeqsucc}
+% \showsymbol{\thicksim}
+% \showsymbol{\thickapprox}
+% \showsymbol{\rightarrow}, \cmd{\to}
+% \showsymbol{\uparrow}
+% \showsymbol{\leftarrow}, \cmd{\gets}
+% \showsymbol{\downarrow}
+% \showsymbol{\nearrow}
+% \showsymbol{\nwarrow}
+% \showsymbol{\swarrow}
+% \showsymbol{\searrow}
+% \showsymbol{\Rightarrow}
+% \showsymbol{\Uparrow}
+% \showsymbol{\Leftarrow}
+% \showsymbol{\Downarrow}
+% \showsymbol{\Nearrow}
+% \showsymbol{\Nwarrow}
+% \showsymbol{\Swarrow}
+% \showsymbol{\Searrow}
+% \showsymbol{\leftrightarrow}
+% \showsymbol{\updownarrow}
+% \showsymbol{\neswarrow}
+% \showsymbol{\nwsearrow}
+% \showsymbol{\Leftrightarrow}
+% \showsymbol{\Updownarrow}
+% \showsymbol{\Neswarrow}
+% \showsymbol{\Nwsearrow}
+% \showsymbol{\twoheadrightarrow}
+% \showsymbol{\twoheaduparrow}
+% \showsymbol{\twoheadleftarrow}
+% \showsymbol{\twoheaddownarrow}
+% \showsymbol{\twoheadnearrow}
+% \showsymbol{\twoheadnwarrow}
+% \showsymbol{\twoheadswarrow}
+% \showsymbol{\twoheadsearrow}
+% \showsymbol{\rightarrowtail}
+% \showsymbol{\uparrowtail}
+% \showsymbol{\leftarrowtail}
+% \showsymbol{\downarrowtail}
+% \showsymbol{\nearrowtail}
+% \showsymbol{\nwarrowtail}
+% \showsymbol{\swarrowtail}
+% \showsymbol{\searrowtail}
+% \showsymbol{\rightmapsto}, \cmd{\mapsto}
+% \showsymbol{\upmapsto}, \cmd{\mapsup}
+% \showsymbol{\leftmapsto}, \cmd{\mapsfrom}
+% \showsymbol{\downmapsto}, \cmd{\mapsdown}
+% \showsymbol{\Rightmapsto}, \cmd{\Mapsto}
+% \showsymbol{\Upmapsto}, \cmd{\Mapsup}
+% \showsymbol{\Leftmapsto}, \cmd{\Mapsfrom}
+% \showsymbol{\Downmapsto}, \cmd{\Mapsdown}
+% \showsymbol{\hookrightarrow}
+% \showsymbol{\hookuparrow}
+% \showsymbol{\varhookleftarrow}
+% \showsymbol{\varhookdownarrow}
+% \showsymbol{\varhooknearrow}
+% \showsymbol{\hooknwarrow}, \cmd{\hknwarrow}
+% \showsymbol{\varhookswarrow}
+% \showsymbol{\hooksearrow}, \cmd{\hksearrow}
+% \showsymbol{\varhookrightarrow}
+% \showsymbol{\varhookuparrow}
+% \showsymbol{\hookleftarrow}
+% \showsymbol{\hookdownarrow}
+% \showsymbol{\hooknearrow}, \cmd{\hknearrow}
+% \showsymbol{\varhooknwarrow}
+% \showsymbol{\hookswarrow}, \cmd{\hkswarrow}
+% \showsymbol{\varhooksearrow}
+% \showsymbol{\rightharpoonup}
+% \showsymbol{\upharpoonleft}
+% \showsymbol{\leftharpoondown}
+% \showsymbol{\downharpoonright}
+% \showsymbol{\neharpoonnw}
+% \showsymbol{\nwharpoonsw}
+% \showsymbol{\swharpoonse}
+% \showsymbol{\seharpoonne}
+% \showsymbol{\rightharpoondown}
+% \showsymbol{\upharpoonright}, \cmd{\restriction}
+% \showsymbol{\leftharpoonup}
+% \showsymbol{\downharpoonleft}
+% \showsymbol{\neharpoonse}
+% \showsymbol{\nwharpoonne}
+% \showsymbol{\swharpoonnw}
+% \showsymbol{\seharpoonsw}
+% \showsymbol{\leftrightharpoonupdown}
+% \showsymbol{\updownharpoonleftright}
+% \showsymbol{\neswharpoonnwse}
+% \showsymbol{\nwseharpoonnesw}
+% \showsymbol{\leftrightharpoondownup}
+% \showsymbol{\updownharpoonrightleft}
+% \showsymbol{\neswharpoonsenw}
+% \showsymbol{\nwseharpoonswne}
+% \showsymbol{\rightleftharpoons}
+% \showsymbol{\updownharpoons}, \cmd{\updownharpoonsleftright}
+% \showsymbol{\neswharpoons}
+% \showsymbol{\senwharpoons}
+% \showsymbol{\leftrightharpoons}
+% \showsymbol{\downupharpoons}, \cmd{\downupharpoonsleftright}
+% \showsymbol{\swneharpoons}
+% \showsymbol{\nwseharpoons}
+% \showsymbol{\rightbkarrow}, \cmd{\dashrightarrow}, \cmd{\dasharrow}
+% \showsymbol{\upbkarrow}
+% \showsymbol{\leftbkarrow}, \cmd{\dashleftarrow}
+% \showsymbol{\downbkarrow}
+% \showsymbol{\nebkarrow}
+% \showsymbol{\nwbkarrow}
+% \showsymbol{\swbkarrow}
+% \showsymbol{\sebkarrow}
+% \showsymbol{\rightspoon}, \cmd{\multimap}
+% \showsymbol{\upspoon}, \cmd{\cirmid}
+% \showsymbol{\leftspoon}, \cmd{\multimapinv}
+% \showsymbol{\downspoon}, \cmd{\midcir}
+% \showsymbol{\rightblackspoon}
+% \showsymbol{\upblackspoon}
+% \showsymbol{\leftblackspoon}
+% \showsymbol{\downblackspoon}
+% \showsymbol{\leftrightspoon}, \cmd{\dualmap}
+% \showsymbol{\leftrightblackspoon}
+% \showsymbol{\blackwhitespoon}, \cmd{\imageof}
+% \showsymbol{\whiteblackspoon}, \cmd{\origof}
+% \showsymbol{\rightpitchfork}
+% \showsymbol{\uppitchfork}, \cmd{\pitchfork}
+% \showsymbol{\leftpitchfork}
+% \showsymbol{\downpitchfork}
+% \showsymbol{\rightrightarrows}
+% \showsymbol{\upuparrows}
+% \showsymbol{\leftleftarrows}
+% \showsymbol{\downdownarrows}
+% \showsymbol{\nenearrows}
+% \showsymbol{\nwnwarrows}
+% \showsymbol{\swswarrows}
+% \showsymbol{\sesearrows}
+% \showsymbol{\rightleftarrows}
+% \showsymbol{\updownarrows}
+% \showsymbol{\neswarrows}
+% \showsymbol{\nwsearrows}
+% \showsymbol{\leftrightarrows}
+% \showsymbol{\downuparrows}
+% \showsymbol{\swnearrows}
+% \showsymbol{\senwarrows}
+% \showsymbol{\rightwavearrow}, \cmd{\leadsto}, \cmd{\rightsquigarrow},
+% \cmd{\rightcurvedarrow}
+% \showsymbol{\varupwavearrow}
+% \showsymbol{\varleftwavearrow}
+% \showsymbol{\downwavearrow}
+% \showsymbol{\varrightwavearrow}
+% \showsymbol{\upwavearrow}
+% \showsymbol{\leftwavearrow}, \cmd{\leftsquigarrow}, \cmd{\leftcurvedarrow}
+% \showsymbol{\vardownwavearrow}
+% \showsymbol{\leftrightwavearrow}, \cmd{\leftrightsquigarrow}
+% \showsymbol{\updownwavearrow}
+% \showsymbol{\varleftrightwavearrow}
+% \showsymbol{\varupdownwavearrow}
+% \showsymbol{\cwoverarcarrow}, \cmd{\curvearrowright}
+% \showsymbol{\cwleftarcarrow}
+% \showsymbol{\cwunderarcarrow}
+% \showsymbol{\cwrightarcarrow}
+% \showsymbol{\cwnwarcarrow}, \cmd{\rightupcurvedarrow}
+% \showsymbol{\cwswarcarrow}, \cmd{\upleftcurvedarrow}
+% \showsymbol{\cwsearcarrow}, \cmd{\leftdowncurvedarrow}
+% \showsymbol{\cwnearcarrow}, \cmd{\downrightcurvedarrow}
+% \showsymbol{\acwunderarcarrow}
+% \showsymbol{\acwrightarcarrow}
+% \showsymbol{\acwoverarcarrow}, \cmd{\curvearrowleft}
+% \showsymbol{\acwleftarcarrow}
+% \showsymbol{\acwsearcarrow}, \cmd{\uprightcurvearrow}
+% \showsymbol{\acwnearcarrow}, \cmd{\leftupcurvedarrow}
+% \showsymbol{\acwnwarcarrow}, \cmd{\downleftcurvedarrow}
+% \showsymbol{\acwswarcarrow}, \cmd{\rightdowncurvedarrow}
+% \showsymbol{\bdoverarcarrow}
+% \showsymbol{\bdleftarcarrow}
+% \showsymbol{\bdunderarcarrow}
+% \showsymbol{\bdrightarcarrow}
+% \showsymbol{\bdnwarcarrow}
+% \showsymbol{\bdswarcarrow}
+% \showsymbol{\bdsearcarrow}
+% \showsymbol{\bdnearcarrow}
+% \showsymbol{\leftfootline}
+% \showsymbol{\rightfootline}
+% \showsymbol{\acwcirclearrowup}
+% \showsymbol{\acwcirclearrowleft}, \cmd{\circlearrowleft},
+% \cmd{\acwopencirclearrow}
+% \showsymbol{\acwcirclearrowdown}, \cmd{\acwgapcirclearrow}
+% \showsymbol{\acwcirclearrowright}
+% \showsymbol{\cwcirclearrowdown}, \cmd{\cwgapcirclearrow}
+% \showsymbol{\cwcirclearrowright}, \cmd{\circlearrowright},
+% \cmd{\cwopencirclearrow}
+% \showsymbol{\cwcirclearrowup}
+% \showsymbol{\cwcirclearrowleft}
+% \showsymbol{\Rrightarrow}
+% \showsymbol{\Uuparrow}
+% \showsymbol{\Lleftarrow}
+% \showsymbol{\Ddownarrow}
+% \showsymbol{\longrightarrow}
+% \showsymbol{\longleftarrow}
+% \showsymbol{\Longrightarrow}
+% \showsymbol{\Longleftarrow}
+% \showsymbol{\longleftrightarrow}
+% \showsymbol{\Longleftrightarrow}
+% \showsymbol{\longmapsto}
+% \showsymbol{\longmapsfrom}
+% \showsymbol{\Longmapsto}
+% \showsymbol{\Longmapsfrom}
+% \showsymbol{\longrightwavearrow}, \cmd{\longleadsto},
+% \cmd{\longrightsquigarrow}
+% \showsymbol{\longleftwavearrow}, \cmd{\longleftsquigarrow}
+% \showsymbol{\longleftfootline}, \cmd{\vlongdash}
+% \showsymbol{\longrightfootline}, \cmd{\longdashv}
+% \showsymbol{\Lsh}
+% \showsymbol{\Rsh}
+% \showsymbol{\Ldsh}
+% \showsymbol{\Rdsh}
+% \showsymbol{\looparrowright}
+% \showsymbol{\looparrowleft}
+% \showsymbol{\rightvdash}, \cmd{\vdash}
+% \showsymbol{\upvdash}, \cmd{\perp}
+% \showsymbol{\leftvdash}, \cmd{\dashv}
+% \showsymbol{\downvdash}
+% \showsymbol{\rightassert}, \cmd{\assert}, \cmd{\shortrighttack}
+% \showsymbol{\upassert}, \cmd{\shortuptack}
+% \showsymbol{\leftassert}, \cmd{\shortlefttack}
+% \showsymbol{\downassert}, \cmd{\shortdowntack}
+% \showsymbol{\rightvDash}, \cmd{\vDash}
+% \showsymbol{\upvDash}, \cmd{\Vbar}
+% \showsymbol{\leftvDash}, \cmd{\Dashv}
+% \showsymbol{\downvDash}, \cmd{\barV}
+% \showsymbol{\rightmodels}, \cmd{\models}
+% \showsymbol{\upmodels}
+% \showsymbol{\leftmodels}
+% \showsymbol{\downmodels}
+% \showsymbol{\rightVdash}, \cmd{\Vdash}
+% \showsymbol{\upVdash}
+% \showsymbol{\leftVdash}, \cmd{\dashV}
+% \showsymbol{\downVdash}
+% \showsymbol{\rightAssert}, \cmd{\Assert}
+% \showsymbol{\upAssert}, \cmd{\vBar}
+% \showsymbol{\leftAssert}
+% \showsymbol{\downAssert}, \cmd{\Barv}
+% \showsymbol{\rightVDash}, \cmd{\VDash}
+% \showsymbol{\upVDash}
+% \showsymbol{\leftVDash}, \cmd{\DashV}
+% \showsymbol{\downVDash}
+% \showsymbol{\Vvdash}
+% \showsymbol{\dashVv}
+% \showsymbol{\vDdash}
+% \showsymbol{\Ddashv}
+% \showsymbol{\nequal}, \cmd{\neq}, \cmd{\ne}
+% \showsymbol{\nequiv}
+% \showsymbol{\nsim}
+% \showsymbol{\nbacksim}
+% \showsymbol{\napprox}
+% \showsymbol{\ntriplesim}, \cmd{\napproxident}
+% \showsymbol{\nsimeq}, \cmd{\nsime}
+% \showsymbol{\nbacksimeq}
+% \showsymbol{\neqsim}
+% \showsymbol{\ncong}
+% \showsymbol{\nbackcong}
+% \showsymbol{\napproxeq}
+% \showsymbol{\nbumpeq}
+% \showsymbol{\nbumpeqq}
+% \showsymbol{\nBumpeq}
+% \showsymbol{\ndoteq}
+% \showsymbol{\neqdot}
+% \showsymbol{\nDoteq}
+% \showsymbol{\nfallingdotseq}
+% \showsymbol{\nrisingdotseq}
+% \showsymbol{\nsmile}
+% \showsymbol{\nfrown}
+% \showsymbol{\nsmilefrown}, \cmd{\nasymp}
+% \showsymbol{\nfrownsmile}, \cmd{\nclosure}
+% \showsymbol{\nsmileeq}
+% \showsymbol{\nfrowneq}, \cmd{\narceq}
+% \showsymbol{\neqcirc}
+% \showsymbol{\ncirceq}
+% \showsymbol{\nwedgeq}, \cmd{\nhateq}
+% \showsymbol{\nveeeq}
+% \showsymbol{\nstareq}
+% \showsymbol{\ntriangleeq}
+% \showsymbol{\nin}, \cmd{\notin}
+% \showsymbol{\nowns}, \cmd{\nni}
+% \showsymbol{\nless}
+% \showsymbol{\ngtr}
+% \showsymbol{\nleq}
+% \showsymbol{\ngeq}
+% \showsymbol{\nleqslant}
+% \showsymbol{\ngeqslant}
+% \showsymbol{\nleqq}
+% \showsymbol{\ngeqq}
+% \showsymbol{\nlesssim}
+% \showsymbol{\ngtrsim}
+% \showsymbol{\nlessapprox}
+% \showsymbol{\ngtrapprox}
+% \showsymbol{\nlessgtr}
+% \showsymbol{\ngtrless}
+% \showsymbol{\nlesseqgtr}
+% \showsymbol{\ngtreqless}
+% \showsymbol{\nlesseqqgtr}
+% \showsymbol{\ngtreqqless}
+% \showsymbol{\nlesseqslantgtr}, \cmd{\nlesg}
+% \showsymbol{\ngtreqslantless}, \cmd{\ngesl}
+% \showsymbol{\nll}
+% \showsymbol{\ngg}
+% \showsymbol{\nlll}
+% \showsymbol{\nggg}
+% \showsymbol{\nlessclosed}, \cmd{\ntriangleleft}
+% \showsymbol{\ngtrclosed}, \cmd{\ntriangleright}
+% \showsymbol{\nleqclosed}, \cmd{\ntrianglelefteq}
+% \showsymbol{\ngeqclosed}, \cmd{\ntrianglerighteq}
+% \showsymbol{\nlesscc}, \cmd{\nltcc}
+% \showsymbol{\ngtrcc}, \cmd{\ngtcc}
+% \showsymbol{\nleqslcc}, \cmd{\nlescc}
+% \showsymbol{\ngeqslcc}, \cmd{\ngescc}
+% \showsymbol{\nsqsubset}
+% \showsymbol{\nsqsupset}
+% \showsymbol{\nsqsubseteq}
+% \showsymbol{\nsqsupseteq}
+% \showsymbol{\nsqsubseteqq}
+% \showsymbol{\nsqsupseteqq}
+% \showsymbol{\nSqsubset}
+% \showsymbol{\nSqsupset}
+% \showsymbol{\nsubset}
+% \showsymbol{\nsupset}
+% \showsymbol{\nsubseteq}
+% \showsymbol{\nsupseteq}
+% \showsymbol{\nsubseteqq}
+% \showsymbol{\nsupseteqq}
+% \showsymbol{\nSubset}
+% \showsymbol{\nSupset}
+% \showsymbol{\nprec}
+% \showsymbol{\nsucc}
+% \showsymbol{\npreceq}
+% \showsymbol{\nsucceq}
+% \showsymbol{\npreccurlyeq}
+% \showsymbol{\nsucccurlyeq}
+% \showsymbol{\npreceqq}
+% \showsymbol{\nsucceqq}
+% \showsymbol{\nprecsim}
+% \showsymbol{\nsuccsim}
+% \showsymbol{\nprecapprox}
+% \showsymbol{\nsuccapprox}
+% \showsymbol{\nlessdot}
+% \showsymbol{\ngtrdot}
+% \showsymbol{\nleqdot}
+% \showsymbol{\ngeqdot}
+% \showsymbol{\nleqslantdot}, \cmd{\nlesdot}
+% \showsymbol{\ngeqslantdot}, \cmd{\ngesdot}
+% \showsymbol{\neqslantless}
+% \showsymbol{\neqslantgtr}
+% \showsymbol{\ncurlyeqprec}
+% \showsymbol{\ncurlyeqsucc}
+% \showsymbol{\simneqq}
+% \showsymbol{\backsimneqq}
+% \showsymbol{\lneq}
+% \showsymbol{\gneq}
+% \showsymbol{\lneqq}, \cmd{\lvertneqq}
+% \showsymbol{\gneqq}, \cmd{\gvertneqq}
+% \showsymbol{\lnsim}
+% \showsymbol{\gnsim}
+% \showsymbol{\lnapprox}
+% \showsymbol{\gnapprox}
+% \showsymbol{\sqsubsetneq}
+% \showsymbol{\sqsupsetneq}
+% \showsymbol{\sqsubsetneqq}
+% \showsymbol{\sqsupsetneqq}
+% \showsymbol{\subsetneq}, \cmd{\varsubsetneq}
+% \showsymbol{\supsetneq}, \cmd{\varsupsetneq}
+% \showsymbol{\subsetneqq}, \cmd{\varsubsetneqq}
+% \showsymbol{\supsetneqq}, \cmd{\varsupsetneqq}
+% \showsymbol{\precneq}
+% \showsymbol{\succneq}
+% \showsymbol{\precneqq}
+% \showsymbol{\succneqq}
+% \showsymbol{\precnsim}
+% \showsymbol{\succnsim}
+% \showsymbol{\precnapprox}
+% \showsymbol{\succnapprox}
+% \showsymbol{\nrightarrow}, \cmd{\nto}
+% \showsymbol{\nuparrow}
+% \showsymbol{\nleftarrow}, \cmd{\ngets}
+% \showsymbol{\ndownarrow}
+% \showsymbol{\nnearrow}
+% \showsymbol{\nnwarrow}
+% \showsymbol{\nswarrow}
+% \showsymbol{\nsearrow}
+% \showsymbol{\nRightarrow}
+% \showsymbol{\nUparrow}
+% \showsymbol{\nLeftarrow}
+% \showsymbol{\nDownarrow}
+% \showsymbol{\nNearrow}
+% \showsymbol{\nNwarrow}
+% \showsymbol{\nSwarrow}
+% \showsymbol{\nSearrow}
+% \showsymbol{\nleftrightarrow}
+% \showsymbol{\nupdownarrow}
+% \showsymbol{\nneswarrow}
+% \showsymbol{\nnwsearrow}
+% \showsymbol{\nLeftrightarrow}
+% \showsymbol{\nUpdownarrow}
+% \showsymbol{\nNeswarrow}
+% \showsymbol{\nNwsearrow}
+% \showsymbol{\ntwoheadrightarrow}
+% \showsymbol{\ntwoheaduparrow}
+% \showsymbol{\ntwoheadleftarrow}
+% \showsymbol{\ntwoheaddownarrow}
+% \showsymbol{\ntwoheadnearrow}
+% \showsymbol{\ntwoheadnwarrow}
+% \showsymbol{\ntwoheadswarrow}
+% \showsymbol{\ntwoheadsearrow}
+% \showsymbol{\nrightarrowtail}
+% \showsymbol{\nuparrowtail}
+% \showsymbol{\nleftarrowtail}
+% \showsymbol{\ndownarrowtail}
+% \showsymbol{\nnearrowtail}
+% \showsymbol{\nnwarrowtail}
+% \showsymbol{\nswarrowtail}
+% \showsymbol{\nsearrowtail}
+% \showsymbol{\nrightmapsto}, \cmd{\nmapsto}
+% \showsymbol{\nupmapsto}, \cmd{\nmapsup}
+% \showsymbol{\nleftmapsto}, \cmd{\nmapsfrom}
+% \showsymbol{\ndownmapsto}, \cmd{\nmapsdown}
+% \showsymbol{\nRightmapsto}, \cmd{\nMapsto}
+% \showsymbol{\nUpmapsto}, \cmd{\nMapsup}
+% \showsymbol{\nLeftmapsto}, \cmd{\nMapsfrom}
+% \showsymbol{\nDownmapsto}, \cmd{\nMapsdown}
+% \showsymbol{\nhookrightarrow}
+% \showsymbol{\nhookuparrow}
+% \showsymbol{\nvarhookleftarrow}
+% \showsymbol{\nvarhookdownarrow}
+% \showsymbol{\nvarhooknearrow}
+% \showsymbol{\nhooknwarrow}, \cmd{\nhknwarrow}
+% \showsymbol{\nvarhookswarrow}
+% \showsymbol{\nhooksearrow}, \cmd{\nhksearrow}
+% \showsymbol{\nvarhookrightarrow}
+% \showsymbol{\nvarhookuparrow}
+% \showsymbol{\nhookleftarrow}
+% \showsymbol{\nhookdownarrow}
+% \showsymbol{\nhooknearrow}, \cmd{\nhknearrow}
+% \showsymbol{\nvarhooknwarrow}
+% \showsymbol{\nhookswarrow}, \cmd{\nhkswarrow}
+% \showsymbol{\nvarhooksearrow}
+% \showsymbol{\nrightharpoonup}
+% \showsymbol{\nupharpoonleft}
+% \showsymbol{\nleftharpoondown}
+% \showsymbol{\ndownharpoonright}
+% \showsymbol{\nneharpoonnw}
+% \showsymbol{\nnwharpoonsw}
+% \showsymbol{\nswharpoonse}
+% \showsymbol{\nseharpoonne}
+% \showsymbol{\nrightharpoondown}
+% \showsymbol{\nupharpoonright}, \cmd{\nrestriction}
+% \showsymbol{\nleftharpoonup}
+% \showsymbol{\ndownharpoonleft}
+% \showsymbol{\nneharpoonse}
+% \showsymbol{\nnwharpoonne}
+% \showsymbol{\nswharpoonnw}
+% \showsymbol{\nseharpoonsw}
+% \showsymbol{\nleftrightharpoonupdown}
+% \showsymbol{\nupdownharpoonleftright}
+% \showsymbol{\nneswharpoonnwse}
+% \showsymbol{\nnwseharpoonnesw}
+% \showsymbol{\nleftrightharpoondownup}
+% \showsymbol{\nupdownharpoonrightleft}
+% \showsymbol{\nneswharpoonsenw}
+% \showsymbol{\nnwseharpoonswne}
+% \showsymbol{\nrightleftharpoons}
+% \showsymbol{\nupdownharpoons}, \cmd{\nupdownharpoonsleftright}
+% \showsymbol{\nneswharpoons}
+% \showsymbol{\nsenwharpoons}
+% \showsymbol{\nleftrightharpoons}
+% \showsymbol{\ndownupharpoons}, \cmd{\ndownupharpoonsleftright}
+% \showsymbol{\nswneharpoons}
+% \showsymbol{\nnwseharpoons}
+% \showsymbol{\nrightbkarrow}, \cmd{\ndasharrow}, \cmd{\ndashrightarrow}
+% \showsymbol{\nupbkarrow}
+% \showsymbol{\nleftbkarrow}, \cmd{\ndashleftarrow}
+% \showsymbol{\ndownbkarrow}
+% \showsymbol{\nnebkarrow}
+% \showsymbol{\nnwbkarrow}
+% \showsymbol{\nswbkarrow}
+% \showsymbol{\nsebkarrow}
+% \showsymbol{\nrightspoon}, \cmd{\nmultimap}
+% \showsymbol{\nupspoon}, \cmd{\ncirmid}
+% \showsymbol{\nleftspoon}, \cmd{\nmultimapinv}
+% \showsymbol{\ndownspoon}, \cmd{\nmidcir}
+% \showsymbol{\nrightblackspoon}
+% \showsymbol{\nupblackspoon}
+% \showsymbol{\nleftblackspoon}
+% \showsymbol{\ndownblackspoon}
+% \showsymbol{\nleftrightspoon}, \cmd{\ndualmap}
+% \showsymbol{\nleftrightblackspoon}
+% \showsymbol{\nblackwhitespoon}, \cmd{\nimageof}
+% \showsymbol{\nwhiteblackspoon}, \cmd{\norigof}
+% \showsymbol{\nrightpitchfork}
+% \showsymbol{\nuppitchfork}, \cmd{\npitchfork}
+% \showsymbol{\nleftpitchfork}
+% \showsymbol{\ndownpitchfork}
+% \showsymbol{\nrightrightarrows}
+% \showsymbol{\nupuparrows}
+% \showsymbol{\nleftleftarrows}
+% \showsymbol{\ndowndownarrows}
+% \showsymbol{\nnenearrows}
+% \showsymbol{\nnwnwarrows}
+% \showsymbol{\nswswarrows}
+% \showsymbol{\nsesearrows}
+% \showsymbol{\nrightleftarrows}
+% \showsymbol{\nupdownarrows}
+% \showsymbol{\nneswarrows}
+% \showsymbol{\nnwsearrows}
+% \showsymbol{\nleftrightarrows}
+% \showsymbol{\ndownuparrows}
+% \showsymbol{\nswnearrows}
+% \showsymbol{\nsenwarrows}
+% \showsymbol{\nrightwavearrow}, \cmd{\nleadsto}, \cmd{\nrightsquigarrow},
+% \cmd{\nrightcurvedarrow}
+% \showsymbol{\nvarupwavearrow}
+% \showsymbol{\nvarleftwavearrow}
+% \showsymbol{\ndownwavearrow}
+% \showsymbol{\nvarrightwavearrow}
+% \showsymbol{\nupwavearrow}
+% \showsymbol{\nleftwavearrow}, \cmd{\nleftsquigarrow}, \cmd{\nleftcurvedarrow}
+% \showsymbol{\nvardownwavearrow}
+% \showsymbol{\nleftrightwavearrow}, \cmd{\nleftrightsquigarrow}
+% \showsymbol{\nupdownwavearrow}
+% \showsymbol{\nvarleftrightwavearrow}
+% \showsymbol{\nvarupdownwavearrow}
+% \showsymbol{\ncwoverarcarrow}, \cmd{\ncurvearrowright}
+% \showsymbol{\ncwleftarcarrow}
+% \showsymbol{\ncwunderarcarrow}
+% \showsymbol{\ncwrightarcarrow}
+% \showsymbol{\ncwnwarcarrow}, \cmd{\nrightupcurvedarrow}
+% \showsymbol{\ncwswarcarrow}, \cmd{\nupleftcurvedarrow}
+% \showsymbol{\ncwsearcarrow}, \cmd{\nleftdowncurvedarrow}
+% \showsymbol{\ncwnearcarrow}, \cmd{\ndownrightcurvedarrow}
+% \showsymbol{\nacwunderarcarrow}
+% \showsymbol{\nacwrightarcarrow}
+% \showsymbol{\nacwoverarcarrow}, \cmd{\ncurvearrowleft}
+% \showsymbol{\nacwleftarcarrow}
+% \showsymbol{\nacwsearcarrow}, \cmd{\nuprightcurvearrow}
+% \showsymbol{\nacwnearcarrow}, \cmd{\nleftupcurvedarrow}
+% \showsymbol{\nacwnwarcarrow}, \cmd{\ndownleftcurvedarrow}
+% \showsymbol{\nacwswarcarrow}, \cmd{\nrightdowncurvedarrow}
+% \showsymbol{\nbdoverarcarrow}
+% \showsymbol{\nbdleftarcarrow}
+% \showsymbol{\nbdunderarcarrow}
+% \showsymbol{\nbdrightarcarrow}
+% \showsymbol{\nbdnwarcarrow}
+% \showsymbol{\nbdswarcarrow}
+% \showsymbol{\nbdsearcarrow}
+% \showsymbol{\nbdnearcarrow}
+% \showsymbol{\nleftfootline}
+% \showsymbol{\nrightfootline}
+% \showsymbol{\nacwcirclearrowup}
+% \showsymbol{\nacwcirclearrowleft}, \cmd{\ncirclearrowleft},
+% \cmd{\nacwopencirclearrow}
+% \showsymbol{\nacwcirclearrowdown}, \cmd{\nacwgapcirclearrow}
+% \showsymbol{\nacwcirclearrowright}
+% \showsymbol{\ncwcirclearrowdown}, \cmd{\ncwgapcirclearrow}
+% \showsymbol{\ncwcirclearrowright}, \cmd{\ncirclearrowright},
+% \cmd{\ncwopencirclearrow}
+% \showsymbol{\ncwcirclearrowup}
+% \showsymbol{\ncwcirclearrowleft}
+% \showsymbol{\nRrightarrow}
+% \showsymbol{\nUuparrow}
+% \showsymbol{\nLleftarrow}
+% \showsymbol{\nDdownarrow}
+% \showsymbol{\nlongrightarrow}
+% \showsymbol{\nlongleftarrow}
+% \showsymbol{\nLongrightarrow}
+% \showsymbol{\nLongleftarrow}
+% \showsymbol{\nlongleftrightarrow}
+% \showsymbol{\nLongleftrightarrow}
+% \showsymbol{\nlongmapsto}
+% \showsymbol{\nlongmapsfrom}
+% \showsymbol{\nLongmapsto}
+% \showsymbol{\nLongmapsfrom}
+% \showsymbol{\nlongrightwavearrow}, \cmd{\nlongleadsto},
+% \cmd{\nlongrightsquigarrow}
+% \showsymbol{\nlongleftwavearrow}, \cmd{\nlongleftsquigarrow}
+% \showsymbol{\nlongleftfootline}, \cmd{\nvlongdash}
+% \showsymbol{\nlongrightfootline}, \cmd{\nlongdashv}
+% \showsymbol{\nrightvdash}, \cmd{\nvdash}
+% \showsymbol{\nupvdash}, \cmd{\nperp}
+% \showsymbol{\nleftvdash}, \cmd{\ndashv}
+% \showsymbol{\ndownvdash}
+% \showsymbol{\nrightassert}, \cmd{\nassert}, \cmd{\nshortrighttack}
+% \showsymbol{\nupassert}, \cmd{\nshortuptack}
+% \showsymbol{\nleftassert}, \cmd{\nshortlefttack}
+% \showsymbol{\ndownassert}, \cmd{\nshortdowntack}
+% \showsymbol{\nrightvDash}, \cmd{\nvDash}
+% \showsymbol{\nupvDash}, \cmd{\nVbar}
+% \showsymbol{\nleftvDash}, \cmd{\nDashv}
+% \showsymbol{\ndownvDash}, \cmd{\nbarV}
+% \showsymbol{\nrightmodels}, \cmd{\nmodels}
+% \showsymbol{\nupmodels}
+% \showsymbol{\nleftmodels}
+% \showsymbol{\ndownmodels}
+% \showsymbol{\nrightVdash}, \cmd{\nVdash}
+% \showsymbol{\nupVdash}
+% \showsymbol{\nleftVdash}, \cmd{\ndashV}
+% \showsymbol{\ndownVdash}
+% \showsymbol{\nrightAssert}, \cmd{\nAssert}
+% \showsymbol{\nupAssert}, \cmd{\nvBar}
+% \showsymbol{\nleftAssert}
+% \showsymbol{\ndownAssert}, \cmd{\nBarv}
+% \showsymbol{\nrightVDash}, \cmd{\nVDash}
+% \showsymbol{\nupVDash}
+% \showsymbol{\nleftVDash}, \cmd{\nDashV}
+% \showsymbol{\ndownVDash}
+% \showsymbol{\nVvdash}
+% \showsymbol{\ndashVv}
+% \showsymbol{\nvDdash}
+% \showsymbol{\nDdashv}
+% \showsymbol{:}, \cmd{\mathratio}
+% \showsymbol{\Colon}
+% \showsymbol{\relbar}
+% \showsymbol{\dotsminusdots}
+% \showsymbol{\rJoin}
+% \showsymbol{\lJoin}
+% \showsymbol{\bowtie}, \cmd{\Join}
+% \showsymbol{\propto}, \cmd{\varpropto}
+% \showsymbol{\backpropto}, \cmd{\propfrom}
+% \showsymbol{\crossing}
+% \showsymbol{\between}
+% \showsymbol{\shortmid}
+% \showsymbol{\mid}, \cmd{\divides}
+% \showsymbol{\nshortmid}
+% \showsymbol{\nmid}, \cmd{\ndivides}
+% \showsymbol{\shortparallel}
+% \showsymbol{\parallel}
+% \showsymbol{\nshortparallel}
+% \showsymbol{\nparallel}
+% \end{multicols}
+%
+% \subsection{Punctuation symbols}
+%
+% \begin{multicols}{2}
+% \raggedright
+% \showsymbol\cdotp
+% \showsymbol\colon, \cmd{\mathcolon}
+% \end{multicols}
+%
+% \subsection{Large operators}
+%
+% \begin{multicols}{2}
+% \raggedright
+% \showop{\bigplus}
+% \showop{\bigtimes}
+% \showop{\bigwedge}
+% \showop{\bigvee}
+% \showop{\bigwedgedot}
+% \showop{\bigveedot}
+% \showop{\bigdoublewedge}, \cmd{\conjquant}
+% \showop{\bigdoublevee}, \cmd{\disjquant}
+% \showop{\bigcurlywedge}
+% \showop{\bigcurlyvee}
+% \showop{\bigcap}
+% \showop{\bigcup}
+% \showop{\bigcapdot}
+% \showop{\bigcupdot}
+% \showop{\bigcapplus}
+% \showop{\bigcupplus}, \cmd{\biguplus}
+% \showop{\bigsqcap}
+% \showop{\bigsqcup}
+% \showop{\bigsqcapdot}
+% \showop{\bigsqcupdot}
+% \showop{\bigsqcapplus}
+% \showop{\bigsqcupplus}
+% \showop{\bigoplus}
+% \showop{\bigotimes}
+% \showop{\bigodot}
+% \showop{\bigoast}
+% \showop{\prod}
+% \showop{\coprod}
+% \showop{\prodi}
+% \showop{\coprodi}
+% \showop{\sum}
+% \showop{\osum}, \cmd{\modtwosum}
+% \showop{\int}
+% \showop{\iint}
+% \showop{\iiint}
+% \showop{\iiiint}
+% \showop{\idotsint}, \cmd{\dotsint}
+% \showop{\landupint}, \cmd{\intclockwise}
+% \showop{\landdownint}, \cmd{\awint}, \cmd{\intctrclockwise}
+% \showop{\intbar}
+% \showop{\intBar}
+% \showop{\fint}
+% \showop{\oint}
+% \showop{\oiint}
+% \showop{\oiiint}
+% \showop{\rcirclerightint}, \cmd{\ointctrclockwise}
+% \showop{\lcirclerightint}, \cmd{\varointclockwise}
+% \showop{\rcircleleftint}, \cmd{\varointctrclockwise}
+% \showop{\lcircleleftint}, \cmd{\ointclockwise}
+% \showop{\sumint}
+% \showop{\smallprod}
+% \showop{\smallcoprod}
+% \showop{\smallprodi}
+% \showop{\smallcoprodi}
+% \showop{\smallint}
+% \showop{\surd}
+% \end{multicols}
+%
+% \subsection{Delimiters and accents}
+%
+% \begin{multicols}{2}
+% \raggedright
+% \showlbrace{(}, \cmd{\lparen}
+% \showrbrace{)}, \cmd{\rparen}
+% \showlbrace{[}, \cmd{\lbrack}
+% \showrbrace{]}, \cmd{\rbrack}
+% \showlbrace{\lfloor}
+% \showrbrace{\rfloor}
+% \showlbrace{\lceil}
+% \showrbrace{\rceil}
+% \showlbrace{\ulcorner}
+% \showrbrace{\urcorner}
+% \showlbrace{\llcorner}
+% \showrbrace{\lrcorner}
+% \showlbrace{\ullcorner}
+% \showrbrace{\ulrcorner}
+% \showlbrace{\lsem}, \cmd{\lBrack}
+% \showrbrace{\rsem}, \cmd{\rBrack}
+% \showlbrace{\lbrace}, \cmd{\{}
+% \showrbrace{\rbrace}, \cmd{\}}
+% \showlbrace{\langle}
+% \showrbrace{\rangle}
+% \showlbrace{\lAngle}
+% \showrbrace{\rAngle}
+% \showlbrace{\langledot}
+% \showrbrace{\rangledot}
+% \showmbrace{/}, \cmd{\mathslash}
+% \showmbrace{\backslash}
+% {\catcode`\|=11 \showmbrace{|}, \cmd{\vert}}
+% \showlbrace{\lvert}
+% \showrbrace{\rvert}
+% \showmbrace{\Vert}, \cmd{\|}
+% \showlbrace{\lVert}
+% \showrbrace{\rVert}
+% \showmbrace{\Vvert}
+% \showlbrace{\lVvert}
+% \showrbrace{\rVvert}
+% \showmbrace{\arrowvert}
+% \showmbrace{\Arrowvert}
+% \showlbrace{\lgroup}
+% \showrbrace{\rgroup}
+% \showlbrace{\lmoustache}
+% \showrbrace{\rmoustache}
+% \showmbrace{\bracevert}
+% \showmbrace{\uparrow}
+% \showmbrace{\downarrow}
+% \showmbrace{\updownarrow}
+% \showmbrace{\Uparrow}
+% \showmbrace{\Downarrow}
+% \showmbrace{\Updownarrow}
+% \end{multicols}
+%
+% \begin{multicols}{2}
+% \showover{\overbrace}
+% \showover{\underbrace}
+% \showover{\overgroup}
+% \showover{\undergroup}
+% \showover{\overlinesegment}
+% \showover{\overleftharpoon}
+% \showover{\overrightharpoon}
+% \showover{\underlinesegment}
+% \end{multicols}
+%
+% \begin{multicols}{2}
+% \raggedright
+% \showaccent{\sqrt}
+% \showover{\widehat}
+% \showover{\widetilde}
+% \showover{\wideparen}
+% \showaccent{\vec}
+% \showaccent{\middlebar}
+% \showaccent{\middleslash}
+% \showaccent{\strokethrough}
+% \end{multicols}
+%
+% In addition to the |\overline| command, which produces a line with a
+% height of three times the line width over its argument (and which
+% might be to high due to that), \pkg{mdsymbol} also defines an
+% command with a fixed height:
+% \begin{multicols}{2}
+% \showover{\overlining}
+% \end{multicols}
+%
+%
+% \subsection{Faked symbols}\label{sec:faked}
+%
+% The following symbols are taken from the text font.
+%
+% \begin{multicols}{2}
+% \raggedright
+% \showsymbol{\dagger}
+% \showsymbol{\ddagger}
+% \showsymbol{\mathparagraph}
+% \showsymbol{\mathsection}
+% \showsymbol{\mathdollar}
+% \showsymbol{\mathsterling}
+% \showsymbol{\yen}
+% \showsymbol{\hbar}
+% \showsymbol{\hslash}
+% \showsymbol{\circledR}
+% \showsymbol{\circledS}
+% \showsymbol{\lambdabar}
+% \showsymbol{\lambdaslash}
+% \end{multicols}
+%
+% \subsection{Missing symbols}
+%
+% The following symbols from Computer Modern or the AMS fonts are missing
+% in MdSymbol. If available, they should be taken from the text font.
+% \begin{multicols}{3}
+% \parindent=0pt
+% |\mho|\par
+% |\eth|\par
+% |\digamma|\par
+% |\varkappa|\par
+% |\backepsilon|\par
+% |\mapstochar|\par
+% |\lhook|\par
+% |\rhook|\par
+% |\diagup|\par
+% |\diagdown|\par
+% |\Bbbk|\par
+% \quad
+% \end{multicols}
+%
+% \StopEventually{}
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+%<*style>
+\RequirePackage{xkeyval}
+\newcommand*\mdsy@choicekey[3]{%
+ \define@choicekey*{mdsymbol.sty}{#1}[\@tempa\@tempb]{#2}{#3}%
+}
+% \end{macrocode}
+% We use \pkg{xkeyval}'s key mechanism to declare all options. The
+% first options determines the size of delimiters.
+% \begin{macrocode}
+\define@boolkey{mdsymbol.sty}[mdsy@]{largedelims}[true]{}
+% \end{macrocode}
+% The following option determines whether faked symbols should be
+% defined.
+% \begin{macrocode}
+\define@boolkey{mdsymbol.sty}[mdsy@]{retainmissing}[true]{}
+% \end{macrocode}
+% The next option allows to scale the fonts by an arbitrary factor.
+% \begin{macrocode}
+\newcommand{\mdsy@scale}{1.0}
+\define@key{mdsymbol.sty}{scale}{\renewcommand\mdsy@scale{#1}}
+% \end{macrocode}
+% The next option controls whether only the sans and sansbold
+% mathversions are modified.
+% \begin{macrocode}
+\define@boolkey{mdsymbol.sty}[mdsy@]{onlysansmath}[true]{}
+% \end{macrocode}
+% The following two options control which weights are used
+% for which math version and font size.
+% \begin{macrocode}
+\newcommand\mdsy@mweight@normal{Regular}
+\newcommand\mdsy@mweight@small{Regular}
+\newcommand\mdsy@bweight@normal{Semibold}
+\newcommand\mdsy@bweight@small{Semibold}
+\mdsy@choicekey{normalweight}{light,regular,autolight,autoregular}{%
+ \ifcase\@tempb\relax
+ \renewcommand\mdsy@mweight@normal{Light}%
+ \renewcommand\mdsy@mweight@small{Light}%
+ \or
+ \renewcommand\mdsy@mweight@normal{Regular}%
+ \renewcommand\mdsy@mweight@small{Regular}%
+ \or
+ \renewcommand\mdsy@mweight@normal{Light}%
+ \renewcommand\mdsy@mweight@small{Regular}%
+ \or
+ \renewcommand\mdsy@mweight@normal{Regular}%
+ \renewcommand\mdsy@mweight@small{Semibold}%
+ \fi
+}
+\mdsy@choicekey{boldweight}{semibold,bold,autosemibold}{%
+ \ifcase\@tempb\relax
+ \renewcommand\mdsy@bweight@normal{Semibold}%
+ \renewcommand\mdsy@bweight@small{Semibold}%
+ \or
+ \renewcommand\mdsy@bweight@normal{Bold}%
+ \renewcommand\mdsy@bweight@small{Bold}%
+ \or
+ \renewcommand\mdsy@bweight@normal{Semibold}%
+ \renewcommand\mdsy@bweight@small{Bold}%
+ \fi
+}
+\ExecuteOptionsX{largedelims=false,onlysansmath=false,retainmissing=false}
+\ProcessOptionsX
+% \end{macrocode}
+% Load external packages, but only if they are not already loaded
+% in order to avoid warning messages about loading a package twice
+% with different options.
+% \begin{macrocode}
+\@ifpackageloaded{amsmath}{}{\RequirePackage{amsmath}}
+\@ifpackageloaded{textcomp}{}{\RequirePackage{textcomp}}
+% \end{macrocode}
+% Command to check whether tabular math version is available
+% \begin{macrocode}
+\newcommand*\mdsy@if@tabular@math[1]{%
+ \@ifundefined{mv@tabular}{}{#1}%
+}
+% \end{macrocode}
+% Add an additional switch into the mathversion command to indicate
+% sans or sansbold math. Putting this into the |\ifmathversionsans|
+% command does not work with the delimiter definition below.
+% \begin{macrocode}
+\ifmdsy@onlysansmath
+ \DeclareMathVersion{sans}
+ \DeclareMathVersion{sansbold}
+ \DeclareMathVersion{sanstabular}
+ \DeclareMathVersion{sansboldtabular}
+
+ \newif\if@mdsy@sans@
+
+ \let\mathversion@old\mathversion
+ \def\sans@version{sans}
+ \def\sans@version@bold{sansbold}
+ \def\sans@version@tab{sanstabular}
+ \def\sans@version@bold@tab{sansboldtabular}
+ \renewcommand{\mathversion}[1]{%
+ \mathversion@old{#1}%
+ \@mdsy@sans@false%
+ \ifx\math@version\sans@version%
+ \@mdsy@sans@true%
+ \fi%
+ \ifx\math@version\sans@version@bold%
+ \@mdsy@sans@true%
+ \fi%
+ \ifx\math@version\sans@version@tab%
+ \@mdsy@sans@true%
+ \fi%
+ \ifx\math@version\sans@version@bold@tab%
+ \@mdsy@sans@true%
+ \fi%
+ }
+\fi
+\def\ifmathversionsans{%
+ \if@mdsy@sans@
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+}
+% \end{macrocode}
+% The following shorthands simplify the definition of commands which
+% have different output depending on the mathversion in the case of
+% \opt{onlysansmath}. Without that option, they just normally define
+% the commands.
+% \begin{macrocode}
+\RequirePackage{etoolbox}
+
+\newcommand\mdsy@setslot[1]{\@tempcnta #1\relax}
+\newcommand\mdsy@nextslot{\advance\@tempcnta 1\relax}
+\newcommand\mdsy@prevslot{\advance\@tempcnta-1\relax}
+
+\newcommand\mdsy@@DeclareSymbol[4]{\expandafter\DeclareMathSymbol\expandafter{\csname#2\endcsname}{#3}{#4}{#1}}
+
+\ifmdsy@onlysansmath
+ \newcommand\mdsy@OrigSymbol@not@def{%
+ \PackageError{mdsymbol}{Symbol is only available in sans-like mathversions}{%
+ Define symbol before loading mdsymbol with the onlysansmath option}
+ }
+ \newcommand\mdsy@DeclareSymbol[3]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}
+ \expandafter\mdsy@@DeclareSymbol\expandafter{\the\@tempcnta}{#1@sans}{#3}{#2}%
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}%
+ \mdsy@nextslot
+ }
+ \newcommand\mdsy@DeclareDelimiter[4]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}%
+ \expandafter\DeclareMathDelimiter\expandafter{\csname #1@sans\endcsname}{#2}{#3}{#4}{#3}{#4}%
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}
+ }
+ \newcommand\mdsy@DeclareOperator[3]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}%
+ \csdef{#1@sans}{\DOTSB#3\slimits@}
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}
+ }
+ \newcommand\mdsy@DeclareIntegral[3]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}%
+ \csdef{#1@sans}{\DOTSI#3\ilimits@}%
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}
+ }
+ \newcommand\mdsy@DeclareMathSymbol[4]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}%
+ \expandafter\DeclareMathSymbol\expandafter{\csname #1@sans\endcsname}{#2}{#3}{#4}%
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}
+ }
+ \newcommand\mdsy@DeclareMathDelimiter[6]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}%
+ \expandafter\DeclareMathDelimiter\expandafter{\csname #1@sans\endcsname}{#2}{#3}{#4}{#5}{#6}%
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}
+ }
+ \newcommand\mdsy@DeclareMathAccent[4]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}%
+ \expandafter\DeclareMathAccent\expandafter{\csname #1@sans\endcsname}{#2}{#3}{#4}%
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}
+ }
+ \newcommand\mdsy@DeclareMathRadical[5]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}%
+ \expandafter\DeclareMathRadical\expandafter{\csname #1@sans\endcsname}{#2}{#3}{#4}{#5}%
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}
+ }
+ \newcommand{\mdsy@DeclareActiveMathSymbol}[4]{%
+ \ifnum\mathcode`#1="8000 %
+ \errmessage{`#1' is already active}%
+ \fi
+ \expandafter\mathchardef\csname#1@old\endcsname=\mathcode`#1 %
+ \expandafter\DeclareMathSymbol\csname#1@new\endcsname{#2}{#3}{#4}
+ \begingroup
+ \lccode`\~=`#1 %
+ \lowercase{\endgroup
+ \def~%
+ }{\ifmathversionsans{\csname#1@new\endcsname}{\csname#1@old\endcsname}}%
+ \mathcode`#1="8000 %
+ }
+ \newcommand{\mdsy@DeclareActiveMathDelimiter}[4]{%
+ % don't know how to implement an active math delimiter; so declare
+ % it as an active math symbol instead
+ \mdsy@DeclareActiveMathSymbol{#1}{#2}{#3}{#4}
+ }
+ \newcommand{\mdsy@renewcommand}[2]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}%
+ \expandafter\newcommand\csname #1@sans\endcsname{#2}%
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}%
+ }
+ \newcommand{\mdsy@DeclareRobustCommandArg}[3]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}%
+ \expandafter\DeclareRobustCommand\csname #1@sans\endcsname[#2]{#3}%
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}%
+ }
+ \newcommand{\mdsy@DeclareRobustCommand}[2]{%
+ \ifcsdef{#1}{%
+ \csletcs{#1@old}{#1}%
+ }{\cslet{#1@old}{\mdsy@OrigSymbol@not@def}}%
+ \expandafter\DeclareRobustCommand\csname #1@sans\endcsname{#2}%
+ \csundef{#1}%
+ \csdef{#1}{\ifmathversionsans{\csname #1@sans\endcsname}{\csname#1@old\endcsname}}%
+ }
+\else
+ \let\ifmathversionsans\undefined
+ \newcommand\mdsy@DeclareSymbol[3]{%
+ \csundef{#1}%
+ \expandafter\mdsy@@DeclareSymbol\expandafter{\the\@tempcnta}{#1}{#3}{#2}%
+ \mdsy@nextslot
+ }
+ \newcommand\mdsy@DeclareDelimiter[4]{%
+ \csundef{#1}%
+ \expandafter\DeclareMathDelimiter\expandafter{\csname#1\endcsname}{#2}{#3}{#4}{#3}{#4}%
+ }
+ \newcommand\mdsy@DeclareOperator[3]{%
+ \csdef{#1}{\DOTSB#3\slimits@}%
+ }
+ \newcommand\mdsy@DeclareIntegral[3]{%
+ \csdef{#1}{\DOTSI#3\ilimits@}%
+ }
+ \newcommand\mdsy@DeclareMathSymbol[4]{%
+ \expandafter\DeclareMathSymbol\expandafter{\csname#1\endcsname}{#2}{#3}{#4}%
+ }
+ \newcommand\mdsy@DeclareMathDelimiter[6]{%
+ \expandafter\DeclareMathDelimiter\expandafter{\csname#1\endcsname}{#2}{#3}{#4}{#5}{#6}%
+ }
+ \newcommand\mdsy@DeclareMathAccent[4]{%
+ \expandafter\DeclareMathAccent\expandafter{\csname#1\endcsname}{#2}{#3}{#4}%
+ }
+ \newcommand\mdsy@DeclareMathRadical[5]{%
+ \expandafter\DeclareMathRadical\expandafter{\csname#1\endcsname}{#2}{#3}{#4}{#5}%
+ }
+ \newcommand\mdsy@DeclareActiveMathSymbol[4]{%
+ \DeclareMathSymbol{#1}{#2}{#3}{#4}%
+ }
+ \newcommand\mdsy@DeclareActiveMathDelimiter[4]{%
+ \DeclareMathDelimiter{#1}{#2}{#3}{#4}{#3}{#4}%
+ }
+ \newcommand{\mdsy@renewcommand}[2]{%
+ \expandafter\providecommand\csname #1\endcsname{#2}%
+ }
+ \newcommand{\mdsy@DeclareRobustCommand}[2]{%
+ \expandafter\DeclareRobustCommand\csname#1\endcsname{#2}%
+ }
+ \newcommand{\mdsy@DeclareRobustCommandArg}[3]{%
+ \expandafter\DeclareRobustCommand\csname#1\endcsname[#2]{#3}%
+ }
+\fi
+
+\newcommand\mdsy@DeclareAlias[3]{\mdsy@prevslot\mdsy@DeclareSymbol{#1}{#2}{#3}}
+
+\newcommand\mdsy@DeclareOpen[3]{\mdsy@DeclareDelimiter{#1}{\mathopen}{#2}{#3}}
+\newcommand\mdsy@DeclareClose[3]{\mdsy@DeclareDelimiter{#1}{\mathclose}{#2}{#3}}
+% \end{macrocode}
+% If the option \textsf{largedelims} has been selected, we readjust the
+% scaling factors of big delimiters, so that |\Big|, |\bigg| and |\Bigg| do
+% not change their size.
+% \begin{macrocode}
+\ifmdsy@largedelims
+ \mdsy@renewcommand{Big}{\bBigg@{1.25}}
+ \mdsy@renewcommand{bigg}{\bBigg@{1.66}}
+ \mdsy@renewcommand{Bigg}{\bBigg@{2.08}}
+\fi
+% \end{macrocode}
+% Some symbols missing from MdSymbol can be obtained from other fonts or
+% by combining several other symbols.
+% \begin{macrocode}
+\ifmdsy@retainmissing
+\else
+ \mdsy@DeclareRobustCommand{dagger}{\mdsy@text{\textdagger}}
+ \mdsy@DeclareRobustCommand{ddagger}{\mdsy@text{\textdaggerdbl}}
+ \mdsy@DeclareRobustCommand{mathparagraph}{\mdsy@text{\textparagraph}}
+ \mdsy@DeclareRobustCommand{mathsection}{\mdsy@text{\textsection}}
+ \mdsy@DeclareRobustCommand{mathdollar}{\mdsy@text{\textdollar}}
+ \mdsy@DeclareRobustCommand{mathsterling}{\mdsy@text{\textsterling}}
+ \mdsy@DeclareRobustCommand{yen}{\mdsy@text{\textyen}}
+ \mdsy@DeclareRobustCommand{circledR}{\mdsy@text{\textcircled{%
+ \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont R}}}
+ \mdsy@DeclareRobustCommand{circledS}{\mdsy@text{\textcircled{%
+ \check@mathfonts\fontsize\sf@size\z@\math@fontsfalse\selectfont S}}}
+ \mdsy@DeclareRobustCommand{Re}{\mathfrak{R}}
+ \mdsy@DeclareRobustCommand{Im}{\mathfrak{I}}
+ \mdsy@DeclareRobustCommand{dotcong}{\mathrel{\dot{\cong}}}
+ \mdsy@DeclareRobustCommand{thicksim}{\mathrel{\text{\boldmath$\m@th\sim$}}}
+ \mdsy@DeclareRobustCommand{thickapprox}{\mathrel{\text{\boldmath$\m@th\approx$}}}
+ \mdsy@DeclareRobustCommand{hslash}{\middleslash h}
+ \mdsy@DeclareRobustCommand{centerdot}{\mathbin{\rule{0.15em}{0.15em}}}
+ \mdsy@DeclareRobustCommand{lambdabar}{\middlebar\lambda}
+ \mdsy@DeclareRobustCommand{lambdaslash}{\middleslash\lambda}
+ \@ifpackageloaded{MyriadPro}{}{%
+ \mdsy@DeclareRobustCommand{hbar}{\middlebar h}%
+ }
+\fi
+% \end{macrocode}
+% Unneeded partial symbols.
+% \begin{macrocode}
+\ifmdsy@onlysansmath
+\else
+ \let\mapstochar\undefined
+ \let\lhook\undefined
+ \let\rhook\undefined
+\fi
+% \end{macrocode}
+% Font definitions.
+% \begin{macrocode}
+\DeclareFontFamily{U}{MdSymbolA}{}
+\DeclareFontFamily{U}{MdSymbolB}{}
+\DeclareFontFamily{U}{MdSymbolC}{}
+\DeclareFontFamily{U}{MdSymbolD}{}
+\DeclareFontFamily{U}{MdSymbolE}{}
+\DeclareFontFamily{U}{MdSymbolF}{}
+
+\RequirePackage{fltpoint}
+\fpDecimalSign{.}
+\newcommand*{\mdsy@calc@bsize}[2]{\fpDiv{#1}{#2}{\mdsy@scale}}
+
+\mdsy@calc@bsize{\mdsy@s@medium}{6}
+\mdsy@calc@bsize{\mdsy@s@bold}{6}
+
+\DeclareFontShape{U}{MdSymbolA}{m}{n}{
+ < -\mdsy@s@medium> s * [\mdsy@scale] MdSymbolA-\mdsy@mweight@small
+ <\mdsy@s@medium- > s * [\mdsy@scale] MdSymbolA-\mdsy@mweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolA}{b}{n}{
+ < - \mdsy@s@bold> s * [\mdsy@scale] MdSymbolA-\mdsy@bweight@small
+ <\mdsy@s@bold - > s * [\mdsy@scale] MdSymbolA-\mdsy@bweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolB}{m}{n}{
+ < -\mdsy@s@medium> s * [\mdsy@scale] MdSymbolB-\mdsy@mweight@small
+ <\mdsy@s@medium- > s * [\mdsy@scale] MdSymbolB-\mdsy@mweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolB}{b}{n}{
+ < - \mdsy@s@bold> s * [\mdsy@scale] MdSymbolB-\mdsy@bweight@small
+ <\mdsy@s@bold - > s * [\mdsy@scale] MdSymbolB-\mdsy@bweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolC}{m}{n}{
+ < -\mdsy@s@medium> s * [\mdsy@scale] MdSymbolC-\mdsy@mweight@small
+ <\mdsy@s@medium- > s * [\mdsy@scale] MdSymbolC-\mdsy@mweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolC}{b}{n}{
+ < - \mdsy@s@bold> s * [\mdsy@scale] MdSymbolC-\mdsy@bweight@small
+ <\mdsy@s@bold - > s * [\mdsy@scale] MdSymbolC-\mdsy@bweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolD}{m}{n}{
+ < -\mdsy@s@medium> s * [\mdsy@scale] MdSymbolD-\mdsy@mweight@small
+ <\mdsy@s@medium- > s * [\mdsy@scale] MdSymbolD-\mdsy@mweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolD}{b}{n}{
+ < - \mdsy@s@bold> s * [\mdsy@scale] MdSymbolD-\mdsy@bweight@small
+ <\mdsy@s@bold - > s * [\mdsy@scale] MdSymbolD-\mdsy@bweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolE}{m}{n}{
+ < -\mdsy@s@medium> s * [\mdsy@scale] MdSymbolE-\mdsy@mweight@small
+ <\mdsy@s@medium- > s * [\mdsy@scale] MdSymbolE-\mdsy@mweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolE}{b}{n}{
+ < - \mdsy@s@bold> s * [\mdsy@scale] MdSymbolE-\mdsy@bweight@small
+ <\mdsy@s@bold - > s * [\mdsy@scale] MdSymbolE-\mdsy@bweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolF}{m}{n}{
+ < -\mdsy@s@medium> s * [\mdsy@scale] MdSymbolF-\mdsy@mweight@small
+ <\mdsy@s@medium- > s * [\mdsy@scale] MdSymbolF-\mdsy@mweight@normal
+}{}
+\DeclareFontShape{U}{MdSymbolF}{b}{n}{
+ < - \mdsy@s@bold> s * [\mdsy@scale] MdSymbolF-\mdsy@bweight@small
+ <\mdsy@s@bold - > s * [\mdsy@scale] MdSymbolF-\mdsy@bweight@normal
+}{}
+
+\newcommand\IfUndefSymbolFont[3]{\@ifundefined{sym#1}{#2}{#3}}
+\newcommand{\mdsy@DeclareSymbolFont}[3]{%
+ \IfUndefSymbolFont{#1}{%
+ \DeclareSymbolFont{#1}{#2}{#3}{m}{n}
+ }{%
+ \ifmdsy@onlysansmath%
+ \SetSymbolFont{#1}{sans}{#2}{#3}{m}{n}%
+ \SetSymbolFont{#1}{sanstabular}{#2}{#3}{m}{n}%
+ \else%
+ \SetSymbolFont{#1}{normal}{#2}{#3}{m}{n}%
+ \mdsy@if@tabular@math{\SetSymbolFont{#1}{tabular}{#2}{#3}{m}{n}}%
+ \fi%
+ }
+ \ifmdsy@onlysansmath%
+ \SetSymbolFont{#1}{sansbold}{#2}{#3}{b}{n}%
+ \SetSymbolFont{#1}{sansboldtabular}{#2}{#3}{b}{n}%
+ \else%
+ \SetSymbolFont{#1}{bold}{#2}{#3}{b}{n}%
+ \mdsy@if@tabular@math{\SetSymbolFont{#1}{boldtabular}{#2}{#3}{b}{n}}%
+ \fi%
+}
+
+\mdsy@DeclareSymbolFont{symbols}{U}{MdSymbolA}
+\mdsy@DeclareSymbolFont{relations}{U}{MdSymbolB}
+\mdsy@DeclareSymbolFont{arrows}{U}{MdSymbolC}
+\mdsy@DeclareSymbolFont{narrows}{U}{MdSymbolD}
+\mdsy@DeclareSymbolFont{largesymbols}{U}{MdSymbolE}
+\mdsy@DeclareSymbolFont{delimiters}{U}{MdSymbolF}
+
+% \end{macrocode}
+% A command for taking math symbols from the text font.
+% \begin{macrocode}
+\def\mdsy@bold{bold}
+\newcommand*\mdsy@text[1]{%
+ \ifx\mdsy@bold\math@version
+ \text{\sffamily\bfseries#1}%
+ \else
+ \text{\sffamily\mdseries#1}%
+ \fi
+}
+% \end{macrocode}
+% MdSymbolA: binary operators and ordinary symbols
+% \begin{macrocode}
+\mdsy@setslot{0}
+\mdsy@DeclareSymbol{cdot}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{cdotp}{symbols}{\mathpunct}
+\mdsy@DeclareSymbol{hdotdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{vdotdot}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{colon}{symbols}{\mathpunct}
+ \mdsy@DeclareAlias{mathcolon}{symbols}{\mathpunct}
+ \mdsy@DeclareAlias{mathratio}{symbols}{\mathrel}
+\mdsy@DeclareSymbol{udotdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{ddotdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{hdots}{symbols}{\mathord}
+ \mdsy@DeclareAlias{@cdots}{symbols}{\mathinner}
+ \mdsy@DeclareAlias{cdots}{symbols}{\mathinner}
+\mdsy@DeclareSymbol{@vdots}{symbols}{\mathord}
+\mdsy@DeclareRobustCommand{vdots}{\ifmmode\@vdots\else\hbox{$\@vdots$}\fi}
+\mdsy@DeclareSymbol{udots}{symbols}{\mathord}
+ \mdsy@DeclareAlias{adots}{symbols}{\mathord}
+\mdsy@DeclareSymbol{ddots}{symbols}{\mathord}
+\mdsy@DeclareSymbol{righttherefore}{symbols}{\mathord}
+\mdsy@DeclareSymbol{uptherefore}{symbols}{\mathord}
+ \mdsy@DeclareAlias{therefore}{symbols}{\mathord}
+\mdsy@DeclareSymbol{lefttherefore}{symbols}{\mathord}
+\mdsy@DeclareSymbol{downtherefore}{symbols}{\mathord}
+ \mdsy@DeclareAlias{because}{symbols}{\mathord}
+\mdsy@DeclareSymbol{squaredots}{symbols}{\mathord}
+ \mdsy@DeclareAlias{Colon}{symbols}{\mathrel}
+\mdsy@DeclareSymbol{minus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medslash}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{smalldivslash}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medbackslash}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{smallsetminus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{plus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{times}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{dotminus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{minusdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{div}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{minusfdots}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{minusrdots}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{dotsminusdots}{symbols}{\mathrel}
+\mdsy@DeclareSymbol{pm}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{mp}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{dotplus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{plusdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{dottimes}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{timesbar}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{divideontimes}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{neg}{symbols}{\mathord}
+ \mdsy@DeclareAlias{lnot}{symbols}{\mathord}
+ \mdsy@DeclareAlias{minushookdown}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{backneg}{symbols}{\mathord}
+ \mdsy@DeclareAlias{hookdownminus}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{invneg}{symbols}{\mathord}
+ \mdsy@DeclareAlias{invnot}{symbols}{\mathord}
+\mdsy@DeclareSymbol{intprod}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{minushookup}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{turnedneg}{symbols}{\mathord}
+ \mdsy@DeclareAlias{turnednot}{symbols}{\mathord}
+\mdsy@DeclareSymbol{intprodr}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{hookupminus}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{turnedbackneg}{symbols}{\mathord}
+\mdsy@DeclareSymbol{leftthreetimes}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{rightthreetimes}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{dtimes}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{btimes}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{rtimes}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{rJoin}{symbols}{\mathrel}
+\mdsy@DeclareSymbol{utimes}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{ttimes}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{ltimes}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{lJoin}{symbols}{\mathrel}
+\mdsy@DeclareSymbol{bowtie}{symbols}{\mathrel}
+ \mdsy@DeclareAlias{Join}{symbols}{\mathrel}
+ \mdsy@DeclareAlias{lrtimes}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{upbowtie}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{hourglass}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{rightY}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{upY}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{leftY}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{downY}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{wedge}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{land}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{vee}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{lor}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{wedgedot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{veedot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{doublewedge}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{wedgeonwedge}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{doublevee}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{veeonvee}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{curlywedge}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{curlyvee}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{barwedge}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{veebar}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{doublebarwedge}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{veedoublebar}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{cup}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{cap}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{doublecup}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{Cup}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{doublecap}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{Cap}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{cupdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{capdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{cupplus}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{uplus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{capplus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{sqcup}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{sqcap}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{doublesqcup}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{Sqcup}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{doublesqcap}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{Sqcap}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{sqcupdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{sqcapdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{sqcupplus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{sqcapplus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{pullback}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{pushout}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smalltriangleright}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smalltriangleup}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smalltriangleleft}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smalltriangledown}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smallblacktriangleright}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smallblacktriangleup}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smallblacktriangleleft}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smallblacktriangledown}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medtriangleright}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{triangleright}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medtriangleup}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{triangle}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{vartriangle}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medtriangleleft}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{triangleleft}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medtriangledown}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{triangledown}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medblacktriangleright}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{blacktriangleright}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medblacktriangleup}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{blacktriangle}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medblacktriangleleft}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{blacktriangleleft}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medblacktriangledown}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{blacktriangledown}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{largetriangleup}{symbols}{\mathord}
+ \mdsy@DeclareAlias{bigtriangleup}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{largetriangledown}{symbols}{\mathord}
+ \mdsy@DeclareAlias{bigtriangledown}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smallcircle}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{circ}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{smwhtcircle}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smallblackcircle}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{bullet}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{smblkcircle}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medcircle}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{mdlgwhtcircle}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medblackcircle}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{mdlgblkcircle}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{ominus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{overt}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{circledvert}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{oslash}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{obackslash}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{obslash}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{oplus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{otimes}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{odot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{ocirc}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{circledcirc}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{oast}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{circledast}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{odash}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{circleddash}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{oequal}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{circledequal}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{emptyset}{symbols}{\mathord}
+ \mdsy@DeclareAlias{diameter}{symbols}{\mathord}
+ \mdsy@DeclareAlias{varnothing}{symbols}{\mathord}
+\mdsy@DeclareSymbol{revemptyset}{symbols}{\mathord}
+\mdsy@DeclareSymbol{largecircle}{symbols}{\mathord}
+ \mdsy@DeclareAlias{bigcirc}{symbols}{\mathord}
+ \mdsy@DeclareAlias{lgwhtcircle}{symbols}{\mathord}
+\mdsy@DeclareSymbol{largeblackcircle}{symbols}{\mathord}
+ \mdsy@DeclareAlias{lgblkcircle}{symbols}{\mathord}
+\mdsy@DeclareSymbol{smallsquare}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{smwhtsquare}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smallblacksquare}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{smblksquare}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medsquare}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{square}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{Box}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{mdlgwhtsquare}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{mdwhtsquare}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medblacksquare}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{mdlgblksquare}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{mdblksquare}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{boxminus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{boxvert}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{boxbar}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{boxslash}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{boxdiag}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{boxbackslash}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{boxbslash}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{boxplus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{boxtimes}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{boxdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{boxbox}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{largesquare}{symbols}{\mathord}
+ \mdsy@DeclareAlias{lgwhtsquare}{symbols}{\mathord}
+\mdsy@DeclareSymbol{largeblacksquare}{symbols}{\mathord}
+ \mdsy@DeclareAlias{lgblksquare}{symbols}{\mathord}
+\mdsy@DeclareSymbol{smalldiamond}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{diamond}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{smwhtdiamond}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smallblackdiamond}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{blackdiamond}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{smblkdiamond}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{meddiamond}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{Diamond}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{mdlgwhtdiamond}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{mdwhtdiamond}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medblackdiamond}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{mdlgblkdiamond}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{mdblkdiamond}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{diamondminus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{diamondvert}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{diamondslash}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{diamondbackslash}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{diamondbslash}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{diamondplus}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{diamondtimes}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{diamonddot}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{diamondcdot}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{diamonddiamond}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smalllozenge}{symbols}{\mathord}
+ \mdsy@DeclareAlias{smwhtlozenge}{symbols}{\mathord}
+\mdsy@DeclareSymbol{smallblacklozenge}{symbols}{\mathord}
+ \mdsy@DeclareAlias{smblklozenge}{symbols}{\mathord}
+\mdsy@DeclareSymbol{medlozenge}{symbols}{\mathord}
+ \mdsy@DeclareAlias{lozenge}{symbols}{\mathord}
+ \mdsy@DeclareAlias{mdlgwhtlozenge}{symbols}{\mathord}
+ \mdsy@DeclareAlias{mdwhtlozenge}{symbols}{\mathord}
+\mdsy@DeclareSymbol{medblacklozenge}{symbols}{\mathord}
+ \mdsy@DeclareAlias{blacklozenge}{symbols}{\mathord}
+ \mdsy@DeclareAlias{mdlgblklozenge}{symbols}{\mathord}
+ \mdsy@DeclareAlias{mdblklozenge}{symbols}{\mathord}
+\mdsy@DeclareSymbol{lozengeminus}{symbols}{\mathord}
+\mdsy@DeclareSymbol{smallwhitestar}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{smwhitestar}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smallblackstar}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{star}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medwhitestar}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{medblackstar}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{medstar}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{largewhitestar}{symbols}{\mathord}
+\mdsy@DeclareSymbol{largeblackstar}{symbols}{\mathord}
+ \mdsy@DeclareAlias{bigstar}{symbols}{\mathord}
+\mdsy@DeclareSymbol{ast}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{infty}{symbols}{\mathord}
+\mdsy@DeclareSymbol{propto}{symbols}{\mathrel}
+ \mdsy@DeclareAlias{varpropto}{symbols}{\mathrel}
+\mdsy@DeclareSymbol{backpropto}{symbols}{\mathrel}
+ \mdsy@DeclareAlias{propfrom}{symbols}{\mathrel}
+\mdsy@DeclareSymbol{crossing}{symbols}{\mathrel}
+\mdsy@DeclareSymbol{between}{symbols}{\mathrel}
+\mdsy@DeclareSymbol{intercal}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{wreath}{symbols}{\mathbin}
+ \mdsy@DeclareAlias{wr}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{angle}{symbols}{\mathord}
+\mdsy@DeclareSymbol{revangle}{symbols}{\mathord}
+\mdsy@DeclareSymbol{measuredangle}{symbols}{\mathord}
+\mdsy@DeclareSymbol{revmeasuredangle}{symbols}{\mathord}
+ \mdsy@DeclareAlias{measuredangleleft}{symbols}{\mathord}
+\mdsy@DeclareSymbol{sphericalangle}{symbols}{\mathord}
+\mdsy@DeclareSymbol{sphericalangleup}{symbols}{\mathord}
+\mdsy@DeclareSymbol{sphericalangleleft}{symbols}{\mathord}
+ \mdsy@DeclareAlias{revsphericalangle}{symbols}{\mathord}
+ \mdsy@DeclareAlias{gtlpar}{symbols}{\mathord}
+\mdsy@DeclareSymbol{sphericalangledown}{symbols}{\mathord}
+\mdsy@DeclareSymbol{rightangle}{symbols}{\mathord}
+\mdsy@DeclareSymbol{measuredrightangle}{symbols}{\mathord}
+\mdsy@DeclareSymbol{rightanglesquare}{symbols}{\mathord}
+ \mdsy@DeclareAlias{rightanglesqr}{symbols}{\mathord}
+\mdsy@DeclareSymbol{measuredrightangledot}{symbols}{\mathord}
+ \mdsy@DeclareAlias{rightanglemdot}{symbols}{\mathord}
+\mdsy@DeclareSymbol{prime}{symbols}{\mathord}
+\mdsy@DeclareSymbol{backprime}{symbols}{\mathord}
+\mdsy@DeclareSymbol{smallprod}{symbols}{\mathop}
+\mdsy@DeclareSymbol{smallcoprod}{symbols}{\mathop}
+ \mdsy@DeclareAlias{amalg}{symbols}{\mathbin}
+\mdsy@DeclareSymbol{smallint}{symbols}{\mathop}
+\mdsy@DeclareSymbol{checkmark}{symbols}{\mathord}
+\mdsy@DeclareSymbol{lightning}{symbols}{\mathord}
+ \mdsy@DeclareAlias{downzigzagarrow}{symbols}{\mathord}
+\mdsy@DeclareSymbol{diamondsuit}{symbols}{\mathord}
+\mdsy@DeclareSymbol{vardiamondsuit}{symbols}{\mathord}
+\mdsy@DeclareSymbol{heartsuit}{symbols}{\mathord}
+\mdsy@DeclareSymbol{varheartsuit}{symbols}{\mathord}
+\mdsy@DeclareSymbol{spadesuit}{symbols}{\mathord}
+\mdsy@DeclareSymbol{clubsuit}{symbols}{\mathord}
+\mdsy@DeclareSymbol{maltese}{symbols}{\mathord}
+\mdsy@DeclareSymbol{starofdavid}{symbols}{\mathord}
+\mdsy@DeclareSymbol{sector}{symbols}{\mathord}
+\mdsy@DeclareSymbol{forall}{symbols}{\mathord}
+\mdsy@DeclareSymbol{exists}{symbols}{\mathord}
+\mdsy@DeclareSymbol{nexists}{symbols}{\mathord}
+\mdsy@DeclareSymbol{Finv}{symbols}{\mathord}
+\mdsy@DeclareSymbol{Game}{symbols}{\mathord}
+\mdsy@DeclareSymbol{complement}{symbols}{\mathord}
+\mdsy@DeclareSymbol{flat}{symbols}{\mathord}
+\mdsy@DeclareSymbol{natural}{symbols}{\mathord}
+\mdsy@DeclareSymbol{sharp}{symbols}{\mathord}
+\mdsy@DeclareSymbol{aleph}{symbols}{\mathord}
+\mdsy@DeclareSymbol{beth}{symbols}{\mathord}
+\mdsy@DeclareSymbol{gimel}{symbols}{\mathord}
+\mdsy@DeclareSymbol{daleth}{symbols}{\mathord}
+\mdsy@DeclareSymbol{wp}{symbols}{\mathord}
+\mdsy@DeclareSymbol{nabla}{symbols}{\mathord}
+\mdsy@DeclareSymbol{smallprodi}{symbols}{\mathop}
+\mdsy@DeclareSymbol{smallcoprodi}{symbols}{\mathop}
+% \end{macrocode}
+% MdSymbolB: relations
+% \begin{macrocode}
+\mdsy@setslot{0}
+\mdsy@DeclareSymbol{equal}{relations}{\mathrel}
+\mdsy@DeclareSymbol{equiv}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{backsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{approx}{relations}{\mathrel}
+\mdsy@DeclareSymbol{triplesim}{relations}{\mathrel}
+ \mdsy@DeclareAlias{approxident}{relations}{\mathrel}
+\mdsy@DeclareSymbol{simeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{backsimeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{eqsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{cong}{relations}{\mathrel}
+\mdsy@DeclareSymbol{backcong}{relations}{\mathrel}
+\mdsy@DeclareSymbol{approxeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{bumpeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{bumpeqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{Bumpeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{doteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{eqdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{Doteq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{doteqdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{fallingdotseq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{risingdotseq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{coloneq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{coloneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{eqcolon}{relations}{\mathrel}
+ \mdsy@DeclareAlias{eqqcolon}{relations}{\mathrel}
+\mdsy@DeclareSymbol{smile}{relations}{\mathrel}
+ \mdsy@DeclareAlias{smallsmile}{relations}{\mathrel}
+\mdsy@DeclareSymbol{frown}{relations}{\mathrel}
+ \mdsy@DeclareAlias{smallfrown}{relations}{\mathrel}
+\mdsy@DeclareSymbol{smilefrown}{relations}{\mathrel}
+ \mdsy@DeclareAlias{asymp}{relations}{\mathrel}
+\mdsy@DeclareSymbol{frownsmile}{relations}{\mathrel}
+ \mdsy@DeclareAlias{closure}{relations}{\mathrel}
+\mdsy@DeclareSymbol{smileeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{frowneq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{arceq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{eqcirc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{circeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{wedgeq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{hateq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{veeeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{stareq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{triangleeq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{triangleq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{in}{relations}{\mathrel}
+\mdsy@DeclareSymbol{owns}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ni}{relations}{\mathrel}
+\mdsy@DeclareSymbol{less}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{leq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{le}{relations}{\mathrel}
+\mdsy@DeclareSymbol{geq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ge}{relations}{\mathrel}
+\mdsy@DeclareSymbol{leqslant}{relations}{\mathrel}
+\mdsy@DeclareSymbol{geqslant}{relations}{\mathrel}
+\mdsy@DeclareSymbol{leqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{geqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lesssim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gtrsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lessapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gtrapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lessgtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gtrless}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lesseqgtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gtreqless}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lesseqqgtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gtreqqless}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lesseqslantgtr}{relations}{\mathrel}
+ \mdsy@DeclareAlias{lesg}{relations}{\mathrel}
+ \mdsy@DeclareAlias{lesseqgtrslant}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gtreqslantless}{relations}{\mathrel}
+ \mdsy@DeclareAlias{gesl}{relations}{\mathrel}
+ \mdsy@DeclareAlias{gtreqlessslant}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ll}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gg}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lll}{relations}{\mathrel}
+ \mdsy@DeclareAlias{llless}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ggg}{relations}{\mathrel}
+ \mdsy@DeclareAlias{gggtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lessclosed}{relations}{\mathrel}
+ \mdsy@DeclareAlias{lhd}{relations}{\mathbin}
+ \mdsy@DeclareAlias{vartriangleleft}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gtrclosed}{relations}{\mathrel}
+ \mdsy@DeclareAlias{rhd}{relations}{\mathbin}
+ \mdsy@DeclareAlias{vartriangleright}{relations}{\mathrel}
+\mdsy@DeclareSymbol{leqclosed}{relations}{\mathrel}
+ \mdsy@DeclareAlias{unlhd}{relations}{\mathbin}
+ \mdsy@DeclareAlias{trianglelefteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{geqclosed}{relations}{\mathrel}
+ \mdsy@DeclareAlias{unrhd}{relations}{\mathbin}
+ \mdsy@DeclareAlias{trianglerighteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lesscc}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ltcc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gtrcc}{relations}{\mathrel}
+ \mdsy@DeclareAlias{gtcc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{leqslcc}{relations}{\mathrel}
+ \mdsy@DeclareAlias{lescc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{geqslcc}{relations}{\mathrel}
+ \mdsy@DeclareAlias{gescc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sqsubset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sqsupset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sqsubseteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sqsupseteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sqsubseteqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sqsupseteqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{Sqsubset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{Sqsupset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{subset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{supset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{subseteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{supseteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{subseteqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{supseteqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{Subset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{Supset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{prec}{relations}{\mathrel}
+\mdsy@DeclareSymbol{succ}{relations}{\mathrel}
+\mdsy@DeclareSymbol{preceq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{succeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{preccurlyeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{succcurlyeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{preceqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{succeqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{precsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{succsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{precapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{succapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lessdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gtrdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{leqdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{geqdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{leqslantdot}{relations}{\mathrel}
+ \mdsy@DeclareAlias{lesdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{geqslantdot}{relations}{\mathrel}
+ \mdsy@DeclareAlias{gesdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{eqslantless}{relations}{\mathrel}
+\mdsy@DeclareSymbol{eqslantgtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{curlyeqprec}{relations}{\mathrel}
+\mdsy@DeclareSymbol{curlyeqsucc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nequal}{relations}{\mathrel}
+ \mdsy@DeclareAlias{neq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ne}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nequiv}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nbacksim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{napprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ntriplesim}{relations}{\mathrel}
+ \mdsy@DeclareAlias{napproxident}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsimeq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{nsime}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nbacksimeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{neqsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ncong}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nbackcong}{relations}{\mathrel}
+\mdsy@DeclareSymbol{napproxeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nbumpeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nbumpeqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nBumpeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ndoteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{neqdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nDoteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nfallingdotseq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nrisingdotseq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsmile}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nfrown}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsmilefrown}{relations}{\mathrel}
+ \mdsy@DeclareAlias{nasymp}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nfrownsmile}{relations}{\mathrel}
+ \mdsy@DeclareAlias{nclosure}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsmileeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nfrowneq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{narceq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{neqcirc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ncirceq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nwedgeq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{nhateq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nveeeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nstareq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ntriangleeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nin}{relations}{\mathrel}
+ \mdsy@DeclareAlias{notin}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nowns}{relations}{\mathrel}
+ \mdsy@DeclareAlias{nni}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nless}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nleq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nleqslant}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngeqslant}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nleqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngeqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nlesssim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngtrsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nlessapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngtrapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nlessgtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngtrless}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nlesseqgtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngtreqless}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nlesseqqgtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngtreqqless}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nlesseqslantgtr}{relations}{\mathrel}
+ \mdsy@DeclareAlias{nlesg}{relations}{\mathrel}
+ \mdsy@DeclareAlias{nlesseqgtrslant}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngtreqslantless}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ngesl}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ngtreqlessslant}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nll}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngg}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nlll}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nggg}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nlessclosed}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ntriangleleft}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngtrclosed}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ntriangleright}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nleqclosed}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ntrianglelefteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngeqclosed}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ntrianglerighteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nlesscc}{relations}{\mathrel}
+ \mdsy@DeclareAlias{nltcc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngtrcc}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ngtcc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nleqslcc}{relations}{\mathrel}
+ \mdsy@DeclareAlias{nlescc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngeqslcc}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ngescc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsqsubset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsqsupset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsqsubseteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsqsupseteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsqsubseteqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsqsupseteqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nSqsubset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nSqsupset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsubset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsupset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsubseteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsupseteq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsubseteqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsupseteqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nSubset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nSupset}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nprec}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsucc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{npreceq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsucceq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{npreccurlyeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsucccurlyeq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{npreceqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsucceqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nprecsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsuccsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nprecapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nsuccapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nlessdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngtrdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nleqdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngeqdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{nleqslantdot}{relations}{\mathrel}
+ \mdsy@DeclareAlias{nlesdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ngeqslantdot}{relations}{\mathrel}
+ \mdsy@DeclareAlias{ngesdot}{relations}{\mathrel}
+\mdsy@DeclareSymbol{neqslantless}{relations}{\mathrel}
+\mdsy@DeclareSymbol{neqslantgtr}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ncurlyeqprec}{relations}{\mathrel}
+\mdsy@DeclareSymbol{ncurlyeqsucc}{relations}{\mathrel}
+\mdsy@DeclareSymbol{simneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{backsimneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lneq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gneq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lneqq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{lvertneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gneqq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{gvertneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lnsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gnsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{lnapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{gnapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sqsubsetneq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sqsupsetneq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sqsubsetneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{sqsupsetneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{subsetneq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{varsubsetneq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{supsetneq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{varsupsetneq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{subsetneqq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{varsubsetneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{supsetneqq}{relations}{\mathrel}
+ \mdsy@DeclareAlias{varsupsetneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{precneq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{succneq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{precneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{succneqq}{relations}{\mathrel}
+\mdsy@DeclareSymbol{precnsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{succnsim}{relations}{\mathrel}
+\mdsy@DeclareSymbol{precnapprox}{relations}{\mathrel}
+\mdsy@DeclareSymbol{succnapprox}{relations}{\mathrel}
+% \end{macrocode}
+% MdSymbolC: arrows and turnstile symbols
+% \begin{macrocode}
+\mdsy@setslot{0}
+\mdsy@DeclareSymbol{rightarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{to}{arrows}{\mathrel}
+% \mdsy@DeclareSymbol{uparrow}{arrows}{\mathrel}
+\mdsy@nextslot %uparrow defined below
+\mdsy@DeclareSymbol{leftarrow}{arrows}{\mathrel}
+\mdsy@DeclareAlias{gets}{arrows}{\mathrel}
+% \mdsy@DeclareSymbol{downarrow}{arrows}{\mathrel}
+\mdsy@nextslot %downarrow defined below
+\mdsy@DeclareSymbol{nearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{swarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{searrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Rightarrow}{arrows}{\mathrel}
+% \mdsy@DeclareSymbol{Uparrow}{arrows}{\mathrel}
+\mdsy@nextslot %Uparrow defined below
+\mdsy@DeclareSymbol{Leftarrow}{arrows}{\mathrel}
+% \mdsy@DeclareSymbol{Downarrow}{arrows}{\mathrel}
+\mdsy@nextslot %Downarrow defined below
+\mdsy@DeclareSymbol{Nearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Nwarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Swarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Searrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftrightarrow}{arrows}{\mathrel}
+% \mdsy@DeclareSymbol{updownarrow}{arrows}{\mathrel}
+\mdsy@nextslot %updownarrow defined below
+\mdsy@DeclareSymbol{neswarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwsearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Leftrightarrow}{arrows}{\mathrel}
+% \mdsy@DeclareSymbol{Updownarrow}{arrows}{\mathrel}
+\mdsy@nextslot %Updownarrow defined below
+\mdsy@DeclareSymbol{Neswarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Nwsearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{twoheadrightarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{twoheaduparrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{twoheadleftarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{twoheaddownarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{twoheadnearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{twoheadnwarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{twoheadswarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{twoheadsearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightarrowtail}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{uparrowtail}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftarrowtail}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downarrowtail}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nearrowtail}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwarrowtail}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{swarrowtail}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{searrowtail}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightmapsto}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{mapsto}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upmapsto}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{mapsup}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftmapsto}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{mapsfrom}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downmapsto}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{mapsdown}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Rightmapsto}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{Mapsto}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Upmapsto}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{Mapsup}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Leftmapsto}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{Mapsfrom}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Downmapsto}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{Mapsdown}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{hookrightarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{lhookrightarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{hookuparrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{lhookuparrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varhookleftarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{lhookleftarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varhookdownarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{lhookdownarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varhooknearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{lhooknearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{hooknwarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{hknwarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{lhooknwarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varhookswarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{lhookswarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{hooksearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{hksearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{lhooksearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varhookrightarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rhookrightarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varhookuparrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rhookuparrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{hookleftarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rhookleftarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{hookdownarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rhookdownarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{hooknearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{hknearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rhooknearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varhooknwarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rhooknwarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{hookswarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{hkswarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rhookswarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varhooksearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rhooksearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightharpoonup}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upharpoonleft}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftharpoondown}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downharpoonright}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{neharpoonnw}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwharpoonsw}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{swharpoonse}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{seharpoonne}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightharpoondown}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upharpoonright}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{restriction}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftharpoonup}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downharpoonleft}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{neharpoonse}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwharpoonne}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{swharpoonnw}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{seharpoonsw}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftrightharpoonupdown}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{updownharpoonleftright}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{neswharpoonnwse}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwseharpoonnesw}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftrightharpoondownup}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{updownharpoonrightleft}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{neswharpoonsenw}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwseharpoonswne}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightleftharpoons}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{updownharpoons}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{updownharpoonsleftright}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{neswharpoons}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{senwharpoons}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftrightharpoons}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downupharpoons}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{downupharpoonsleftright}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{swneharpoons}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwseharpoons}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightbkarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{dasharrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{dashrightarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upbkarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftbkarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{dashleftarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downbkarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nebkarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwbkarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{swbkarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{sebkarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightspoon}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{multimap}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upspoon}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{cirmid}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftspoon}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{multimapinv}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downspoon}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{midcir}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightblackspoon}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upblackspoon}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftblackspoon}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downblackspoon}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftrightspoon}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{dualmap}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftrightblackspoon}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{blackwhitespoon}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{imageof}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{whiteblackspoon}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{origof}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightpitchfork}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{uppitchfork}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{pitchfork}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftpitchfork}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downpitchfork}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightrightarrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upuparrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftleftarrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downdownarrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nenearrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwnwarrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{swswarrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{sesearrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightleftarrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{updownarrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{neswarrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{nwsearrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftrightarrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downuparrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{swnearrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{senwarrows}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leadsto}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rightsquigarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rightcurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rightlsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varupwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{uplsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varleftwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leftlsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{downlsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varrightwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rightrsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{uprsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leftsquigarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leftcurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leftrsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{vardownwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{downrsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftrightwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leftrightsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{updownwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{updownsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varleftrightwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rightleftsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{varupdownwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{downupsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwoverarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{curvearrowright}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rightlcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwleftarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{uplcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwunderarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leftlcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwrightarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{downlcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwnwarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rightupcurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{nelcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwswarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{upleftcurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{nwlcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwsearcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leftdowncurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{swlcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwnearcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{downrightcurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{selcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwunderarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rightrcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwrightarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{uprcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwoverarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{curvearrowleft}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leftrcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwleftarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{downrcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwsearcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{uprightcurvearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{nercurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwnearcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leftupcurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{nwrcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwnwarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{downleftcurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{swrcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwswarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rightdowncurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{sercurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{bdoverarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{leftrightcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{bdleftarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{updowncurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{bdunderarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{rightleftcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{bdrightarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{downupcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{bdnwarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{neswcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{bdswarcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{nwsecurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{bdsearcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{swnecurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{bdnearcarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{senwcurvearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftfootline}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightfootline}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwcirclearrowup}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwcirclearrowleft}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{circlearrowleft}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{acwopencirclearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwcirclearrowdown}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{acwgapcirclearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{acwcirclearrowright}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwcirclearrowdown}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{cwgapcirclearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwcirclearrowright}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{circlearrowright}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{cwopencirclearrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwcirclearrowup}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{cwcirclearrowleft}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Rrightarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Uuparrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Lleftarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Ddownarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{longrightarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{longleftarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Longrightarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Longleftarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{longleftrightarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Longleftrightarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{longmapsto}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{longmapsfrom}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Longmapsto}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Longmapsfrom}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{longrightwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{longleadsto}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{longrightsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{longleftwavearrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{longleftsquigarrow}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{longleftfootline}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{vlongdash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{longrightfootline}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{longdashv}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Lsh}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Rsh}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Ldsh}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Rdsh}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{looparrowright}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{looparrowleft}{arrows}{\mathrel}
+\mdsy@setslot{224}
+\mdsy@DeclareSymbol{rightvdash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{vdash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upvdash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{perp}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{bot}{arrows}{\mathord}
+\mdsy@DeclareSymbol{leftvdash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{dashv}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downvdash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{top}{arrows}{\mathord}
+\mdsy@DeclareSymbol{rightassert}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{assert}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{shortrighttack}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upassert}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{shortuptack}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftassert}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{shortlefttack}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downassert}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{shortdowntack}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightvDash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{vDash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upvDash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{Vbar}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftvDash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{Dashv}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downvDash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{barV}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightmodels}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{models}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upmodels}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftmodels}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downmodels}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightVdash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{Vdash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upVdash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftVdash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{dashV}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downVdash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightAssert}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{Assert}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upAssert}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{vBar}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftAssert}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downAssert}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{Barv}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{rightVDash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{VDash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{upVDash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{leftVDash}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{DashV}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{downVDash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Vvdash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{dashVv}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{vDdash}{arrows}{\mathrel}
+\mdsy@DeclareSymbol{Ddashv}{arrows}{\mathrel}
+
+\mdsy@DeclareRobustCommand{relbar}{\mathrel{\smash-}}
+\mdsy@DeclareRobustCommand{Relbar}{\mathrel=}
+\mdsy@DeclareRobustCommand{joinrel}{\mathrel{\mkern-4mu}}
+% \end{macrocode}
+% MdSymbolD: stroked arrows
+% \begin{macrocode}
+\mdsy@setslot{0}
+\mdsy@DeclareSymbol{nrightarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nto}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nuparrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ngets}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nswarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nsearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nRightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nUparrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nLeftarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nDownarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nNearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nNwarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nSwarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nSearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupdownarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nneswarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwsearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nLeftrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nUpdownarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nNeswarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nNwsearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ntwoheadrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ntwoheaduparrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ntwoheadleftarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ntwoheaddownarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ntwoheadnearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ntwoheadnwarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ntwoheadswarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ntwoheadsearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightarrowtail}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nuparrowtail}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftarrowtail}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownarrowtail}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnearrowtail}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwarrowtail}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nswarrowtail}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nsearrowtail}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightmapsto}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nmapsto}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupmapsto}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nmapsup}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftmapsto}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nmapsfrom}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownmapsto}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nmapsdown}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nRightmapsto}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nMapsto}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nUpmapsto}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nMapsup}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nLeftmapsto}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nMapsfrom}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nDownmapsto}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nMapsdown}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nhookrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nhookuparrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarhookleftarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarhookdownarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarhooknearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nhooknwarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nhknwarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarhookswarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nhooksearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nhksearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarhookrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarhookuparrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nhookleftarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nhookdownarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nhooknearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nhknearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarhooknwarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nhookswarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nhkswarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarhooksearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightharpoonup}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupharpoonleft}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftharpoondown}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownharpoonright}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nneharpoonnw}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwharpoonsw}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nswharpoonse}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nseharpoonne}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightharpoondown}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupharpoonright}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nrestriction}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftharpoonup}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownharpoonleft}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nneharpoonse}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwharpoonne}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nswharpoonnw}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nseharpoonsw}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftrightharpoonupdown}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupdownharpoonleftright}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nneswharpoonnwse}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwseharpoonnesw}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftrightharpoondownup}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupdownharpoonrightleft}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nneswharpoonsenw}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwseharpoonswne}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightleftharpoons}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupdownharpoons}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nupdownharpoonsleftright}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nneswharpoons}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nsenwharpoons}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftrightharpoons}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownupharpoons}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndownupharpoonsleftright}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nswneharpoons}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwseharpoons}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightbkarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndasharrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndashrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupbkarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftbkarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndashleftarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownbkarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnebkarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwbkarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nswbkarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nsebkarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightspoon}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nmultimap}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupspoon}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ncirmid}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftspoon}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nmultimapinv}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownspoon}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nmidcir}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightblackspoon}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupblackspoon}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftblackspoon}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownblackspoon}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftrightspoon}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndualmap}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftrightblackspoon}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nblackwhitespoon}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nimageof}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nwhiteblackspoon}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{norigof}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightpitchfork}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nuppitchfork}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{npitchfork}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftpitchfork}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownpitchfork}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightrightarrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupuparrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftleftarrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndowndownarrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnenearrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwnwarrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nswswarrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nsesearrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightleftarrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupdownarrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nneswarrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nnwsearrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftrightarrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownuparrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nswnearrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nsenwarrows}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nleadsto}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nrightsquigarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nrightcurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{nrightlsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarupwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nuplsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarleftwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nleftlsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndownlsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarrightwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nrightrsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nuprsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nleftsquigarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nleftcurvedarrow}{arrows}{\mathrel}
+ \mdsy@DeclareAlias{nleftrsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvardownwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndownrsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftrightwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nleftrightsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupdownwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nupdownsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarleftrightwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nrightleftsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvarupdownwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndownupsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwoverarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ncurvearrowright}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nrightlcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwleftarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nuplcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwunderarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nleftlcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwrightarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndownlcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwnwarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nrightupcurvedarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nnelcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwswarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nupleftcurvedarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nnwlcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwsearcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nleftdowncurvedarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nswlcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwnearcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndownrightcurvedarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nselcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwunderarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nrightrcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwrightarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nuprcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwoverarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ncurvearrowleft}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nleftrcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwleftarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndownrcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwsearcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nuprightcurvearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nnercurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwnearcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nleftupcurvedarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nnwrcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwnwarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndownleftcurvedarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nswrcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwswarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nrightdowncurvedarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nsercurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nbdoverarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nleftrightcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nbdleftarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nupdowncurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nbdunderarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nrightleftcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nbdrightarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndownupcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nbdnwarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nneswcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nbdswarcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nnwsecurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nbdsearcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nswnecurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nbdnearcarrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nsenwcurvearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftfootline}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightfootline}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwcirclearrowup}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwcirclearrowleft}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ncirclearrowleft}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nacwopencirclearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwcirclearrowdown}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nacwgapcirclearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nacwcirclearrowright}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwcirclearrowdown}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ncwgapcirclearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwcirclearrowright}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ncirclearrowright}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ncwopencirclearrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwcirclearrowup}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ncwcirclearrowleft}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nRrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nUuparrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nLleftarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nDdownarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nlongrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nlongleftarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nLongrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nLongleftarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nlongleftrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nLongleftrightarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nlongmapsto}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nlongmapsfrom}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nLongmapsto}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nLongmapsfrom}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nlongrightwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nlongleadsto}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nlongrightsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nlongleftwavearrow}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nlongleftsquigarrow}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nlongleftfootline}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nvlongdash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nlongrightfootline}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nlongdashv}{narrows}{\mathrel}
+\mdsy@setslot{224}
+\mdsy@DeclareSymbol{nrightvdash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nvdash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupvdash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nperp}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftvdash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndashv}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownvdash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightassert}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nassert}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nshortrighttack}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupassert}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nshortuptack}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftassert}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nshortlefttack}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownassert}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nshortdowntack}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightvDash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nvDash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupvDash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nVbar}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftvDash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nDashv}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownvDash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nbarV}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightmodels}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nmodels}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupmodels}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftmodels}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownmodels}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightVdash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nVdash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupVdash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftVdash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{ndashV}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownVdash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightAssert}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nAssert}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupAssert}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nvBar}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftAssert}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownAssert}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nBarv}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nrightVDash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nVDash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nupVDash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nleftVDash}{narrows}{\mathrel}
+ \mdsy@DeclareAlias{nDashV}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndownVDash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nVvdash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{ndashVv}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nvDdash}{narrows}{\mathrel}
+\mdsy@DeclareSymbol{nDdashv}{narrows}{\mathrel}
+% \end{macrocode}
+% MdSymbolE: large operators
+% \begin{macrocode}
+\mdsy@setslot{0}
+\mdsy@DeclareSymbol{tbigplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigtimes}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigtimes}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigwedge}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigwedge}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigvee}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigvee}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigwedgedot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigwedgedot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigveedot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigveedot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigdoublewedge}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tconjquant}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigdoublewedge}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{dconjquant}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigdoublevee}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tdisjquant}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigdoublevee}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{ddisjquant}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigcurlywedge}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigcurlywedge}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigcurlyvee}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigcurlyvee}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigcap}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigcap}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigcup}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigcup}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigcapdot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigcapdot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigcupdot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigcupdot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigcapplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigcapplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigcupplus}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tbiguplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigcupplus}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{dbiguplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigsqcap}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigsqcap}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigsqcup}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigsqcup}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigsqcapdot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigsqcapdot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigsqcupdot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigsqcupdot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigsqcapplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigsqcapplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigsqcupplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigsqcupplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigoplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigoplus}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigotimes}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigotimes}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigodot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigodot}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tbigoast}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dbigoast}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tprod}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dprod}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tcoprod}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dcoprod}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tsum}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dsum}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tosum}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tmodtwosum}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dosum}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{dmodtwosum}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tiint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{diint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tiiint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{diiint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tiiiint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{diiiint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tidotsint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tdotsint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{didotsint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{ddotsint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tlandupint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tintclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dlandupint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{dintclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tlanddownint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tawint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tintctrclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dlanddownint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{dawint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{dintctrclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tintbar}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dintbar}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tintBar}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dintBar}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tfint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dfint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{toint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{doint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{toiint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{doiint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{toiiint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{doiiint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{trcirclerightint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tointctrclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{drcirclerightint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{dointctrclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tlcirclerightint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tvarointclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dlcirclerightint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{dvarointclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{trcircleleftint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tvarointctrclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{drcircleleftint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{dvarointctrclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tlcircleleftint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{tointclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dlcircleleftint}{largesymbols}{\mathop}
+ \mdsy@DeclareAlias{dointclockwise}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tsumint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dsumint}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tprodi}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dprodi}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{tcoprodi}{largesymbols}{\mathop}
+\mdsy@DeclareSymbol{dcoprodi}{largesymbols}{\mathop}
+%\let\intop\tint
+%\let\ointop\toint
+
+\mdsy@DeclareOperator{bigplus}{\dbigplus}{\tbigplus}
+\mdsy@DeclareOperator{bigtimes}{\dbigtimes}{\tbigtimes}
+\mdsy@DeclareOperator{bigwedge}{\dbigwedge}{\tbigwedge}
+\mdsy@DeclareOperator{bigvee}{\dbigvee}{\tbigvee}
+\mdsy@DeclareOperator{bigwedgedot}{\dbigwedgedot}{\tbigwedgedot}
+\mdsy@DeclareOperator{bigveedot}{\dbigveedot}{\tbigveedot}
+\mdsy@DeclareOperator{bigdoublewedge}{\dbigdoublewedge}{\tbigdoublewedge}
+\mdsy@DeclareOperator{conjquant}{\dconjquant}{\tconjquant}
+\mdsy@DeclareOperator{bigdoublevee}{\dbigdoublevee}{\tbigdoublevee}
+\mdsy@DeclareOperator{disjquant}{\ddisjquant}{\tdisjquant}
+\mdsy@DeclareOperator{bigcurlywedge}{\dbigcurlywedge}{\tbigcurlywedge}
+\mdsy@DeclareOperator{bigcurlyvee}{\dbigcurlyvee}{\tbigcurlyvee}
+\mdsy@DeclareOperator{bigcurlywedgedot}{\dbigcurlywedgedot}{\tbigcurlywedgedot}
+\mdsy@DeclareOperator{bigcurlyveedot}{\dbigcurlyveedot}{\tbigcurlyveedot}
+\mdsy@DeclareOperator{bigdoublecurlywedge}{\dbigdoublecurlywedge}{\tbigdoublecurlywedge}
+\mdsy@DeclareOperator{bigdoublecurlyvee}{\dbigdoublecurlyvee}{\tbigdoublecurlyvee}
+\mdsy@DeclareOperator{bigcap}{\dbigcap}{\tbigcap}
+\mdsy@DeclareOperator{bigcup}{\dbigcup}{\tbigcup}
+\mdsy@DeclareOperator{bigcapdot}{\dbigcapdot}{\tbigcapdot}
+\mdsy@DeclareOperator{bigcupdot}{\dbigcupdot}{\tbigcupdot}
+\mdsy@DeclareOperator{bigcapplus}{\dbigcapplus}{\tbigcapplus}
+\mdsy@DeclareOperator{bigcupplus}{\dbigcupplus}{\tbigcupplus}
+\mdsy@DeclareOperator{biguplus}{\dbiguplus}{\tbiguplus}
+\mdsy@DeclareOperator{bigsqcap}{\dbigsqcap}{\tbigsqcap}
+\mdsy@DeclareOperator{bigsqcup}{\dbigsqcup}{\tbigsqcup}
+\mdsy@DeclareOperator{bigsqcapdot}{\dbigsqcapdot}{\tbigsqcapdot}
+\mdsy@DeclareOperator{bigsqcupdot}{\dbigsqcupdot}{\tbigsqcupdot}
+\mdsy@DeclareOperator{bigsqcapplus}{\dbigsqcapplus}{\tbigsqcapplus}
+\mdsy@DeclareOperator{bigsqcupplus}{\dbigsqcupplus}{\tbigsqcupplus}
+\mdsy@DeclareOperator{bigoplus}{\dbigoplus}{\tbigoplus}
+\mdsy@DeclareOperator{bigotimes}{\dbigotimes}{\tbigotimes}
+\mdsy@DeclareOperator{bigodot}{\dbigodot}{\tbigodot}
+\mdsy@DeclareOperator{bigoast}{\dbigoast}{\tbigoast}
+\mdsy@DeclareOperator{sum}{\dsum}{\tsum}
+\mdsy@DeclareOperator{osum}{\dosum}{\tosum}
+\mdsy@DeclareOperator{modtwosum}{\dmodtwosum}{\tmodtwosum}
+\mdsy@DeclareOperator{prod}{\dprod}{\tprod}
+\mdsy@DeclareOperator{coprod}{\dcoprod}{\tcoprod}
+\mdsy@DeclareOperator{prodi}{\dprodi}{\tprodi}
+\mdsy@DeclareOperator{coprodi}{\dcoprodi}{\tcoprodi}
+\mdsy@DeclareIntegral{int}{\dint}{\tint}
+\mdsy@DeclareIntegral{iint}{\diint}{\tiint}
+\mdsy@DeclareIntegral{iiint}{\diiint}{\tiiint}
+\mdsy@DeclareIntegral{iiiint}{\diiiint}{\tiiiint}
+\mdsy@DeclareIntegral{idotsint}{\didotsint}{\tidotsint}
+\mdsy@DeclareIntegral{dotsint}{\ddotsint}{\tdotsint}
+\mdsy@DeclareIntegral{landupint}{\dlandupint}{\tlandupint}
+\mdsy@DeclareIntegral{intclockwise}{\dintclockwise}{\tintclockwise}
+\mdsy@DeclareIntegral{landdownint}{\dlanddownint}{\tlanddownint}
+\mdsy@DeclareIntegral{awint}{\dawint}{\tawint}
+\mdsy@DeclareIntegral{intctrclockwise}{\dintctrclockwise}{\tintctrclockwise}
+\mdsy@DeclareIntegral{landdownint}{\dlanddownint}{\tlanddownint}
+\mdsy@DeclareIntegral{intbar}{\dintbar}{\tintbar}
+\mdsy@DeclareIntegral{intBar}{\dintBar}{\tintBar}
+\mdsy@DeclareIntegral{fint}{\dfint}{\tfint}
+\mdsy@DeclareIntegral{oint}{\doint}{\toint}
+\mdsy@DeclareIntegral{oiint}{\doiint}{\toiint}
+\mdsy@DeclareIntegral{oiiint}{\doiiint}{\toiiint}
+\mdsy@DeclareIntegral{rcirclerightint}{\drcirclerightint}{\trcirclerightint}
+\mdsy@DeclareIntegral{ointctrclockwise}{\dointctrclockwise}{\tointctrclockwise}
+\mdsy@DeclareIntegral{lcirclerightint}{\dlcirclerightint}{\tlcirclerightint}
+\mdsy@DeclareIntegral{varointclockwise}{\dvarointclockwise}{\tvarointclockwise}
+\mdsy@DeclareIntegral{rcircleleftint}{\drcircleleftint}{\trcircleleftint}
+\mdsy@DeclareIntegral{varointctrclockwise}{\dvarointctrclockwise}{\tvarointctrclockwise}
+\mdsy@DeclareIntegral{lcircleleftint}{\dlcircleleftint}{\tlcircleleftint}
+\mdsy@DeclareIntegral{ointclockwise}{\dointclockwise}{\tointclockwise}
+\mdsy@DeclareIntegral{sumint}{\dsumint}{\tsumint}
+
+\mdsy@renewcommand{intkern@}{\mkern-8.5mu\mathchoice{\mkern-1mu}{}{}{}}
+\mdsy@renewcommand{intdots@}{\mkern-6mu%
+ \mathchoice{\@cdots}%
+ {{\cdotp}\mkern0.5mu{\cdotp}\mkern0.5mu{\cdotp}}%
+ {{\cdotp}{\cdotp}{\cdotp}}%
+ {{\cdotp}{\cdotp}{\cdotp}}%
+ \mkern-6mu}
+% \end{macrocode}
+% Math accents.
+% \begin{macrocode}
+\mdsy@DeclareMathAccent{widehat}{\mathord}{largesymbols}{"72}
+\mdsy@DeclareMathAccent{widetilde}{\mathord}{largesymbols}{"78}
+\mdsy@DeclareMathAccent{wideparen}{\mathord}{largesymbols}{"7E}
+\mdsy@DeclareMathAccent{vec}{\mathord}{largesymbols}{"84}
+\mdsy@DeclareMathAccent{middlebar}{\mathord}{largesymbols}{"85}
+\mdsy@DeclareMathAccent{middleslash}{\mathord}{largesymbols}{"86}
+\mdsy@DeclareMathAccent{strokethrough}{\mathord}{largesymbols}{"87}
+% \end{macrocode}
+% MdSymbolF: delimiters
+% \begin{macrocode}
+\ifmdsy@largedelims
+% \mdsy@DeclareOpen{(}{delimiters}{"01}
+% \mdsy@DeclareClose{)}{delimiters}{"07}
+ \mdsy@DeclareOpen{lparen}{delimiters}{"01}
+ \mdsy@DeclareClose{rparen}{delimiters}{"07}
+% \mdsy@DeclareOpen{[}{delimiters}{"13}
+% \mdsy@DeclareClose{]}{delimiters}{"19}
+ \mdsy@DeclareOpen{lbrack}{delimiters}{"13}
+ \mdsy@DeclareClose{rbrack}{delimiters}{"19}
+ \mdsy@DeclareOpen{lfloor}{delimiters}{"1F}
+ \mdsy@DeclareClose{rfloor}{delimiters}{"25}
+ \mdsy@DeclareOpen{lceil}{delimiters}{"2B}
+ \mdsy@DeclareClose{rceil}{delimiters}{"31}
+ \mdsy@DeclareOpen{ulcorner}{delimiters}{"37}
+ \mdsy@DeclareClose{urcorner}{delimiters}{"3D}
+ \mdsy@DeclareOpen{llcorner}{delimiters}{"43}
+ \mdsy@DeclareClose{lrcorner}{delimiters}{"49}
+ \mdsy@DeclareOpen{ullcorner}{delimiters}{"4F}
+ \mdsy@DeclareClose{ulrcorner}{delimiters}{"55}
+ \mdsy@DeclareOpen{lsem}{delimiters}{"61}
+ \mdsy@DeclareClose{rsem}{delimiters}{"67}
+ \mdsy@DeclareOpen{lBrack}{delimiters}{"61}
+ \mdsy@DeclareClose{rBrack}{delimiters}{"67}
+ \mdsy@DeclareOpen{lbrace}{delimiters}{"73}
+ \mdsy@DeclareClose{rbrace}{delimiters}{"79}
+% \mdsy@DeclareOpen{<}{delimiters}{"86}
+% \mdsy@DeclareClose{>}{delimiters}{"8C}
+ \mdsy@DeclareOpen{langle}{delimiters}{"86}
+ \mdsy@DeclareClose{rangle}{delimiters}{"8C}
+ \mdsy@DeclareOpen{lAngle}{delimiters}{"92}
+ \mdsy@DeclareClose{rAngle}{delimiters}{"98}
+ \mdsy@DeclareOpen{langledot}{delimiters}{"9E}
+ \mdsy@DeclareClose{rangledot}{delimiters}{"A4}
+% \mdsy@DeclareDelimiter{/}{\mathord}{delimiters}{"AA}
+ \mdsy@DeclareDelimiter{mathslash}{\mathord}{delimiters}{"AA}
+ \mdsy@DeclareMathSymbol{divslash}{\mathbin}{delimiters}{"AA}
+ \mdsy@DeclareDelimiter{backslash}{\mathord}{delimiters}{"B0}
+% \expandafter\DeclareMathDelimiter\@backslashchar%
+% {\mathord}{delimiters}{"B0}{delimiters}{"B0}
+ \mdsy@DeclareMathSymbol{setminus}{\mathbin}{delimiters}{"B0}
+% \mdsy@DeclareDelimiter{|}{\mathord}{delimiters}{"B7}
+ \mdsy@DeclareDelimiter{vert}{\mathord}{delimiters}{"B7}
+ \mdsy@DeclareOpen{lvert}{delimiters}{"B7}
+ \mdsy@DeclareClose{rvert}{delimiters}{"B7}
+ \mdsy@DeclareMathSymbol{mid}{\mathrel}{delimiters}{"B7}
+ \mdsy@DeclareMathSymbol{nmid}{\mathrel}{delimiters}{"BA}
+ \mdsy@DeclareDelimiter{Vert}{\mathord}{delimiters}{"BE}
+ \mdsy@DeclareOpen{lVert}{delimiters}{"BE}
+ \mdsy@DeclareClose{rVert}{delimiters}{"BE}
+ \mdsy@DeclareMathSymbol{parallel}{\mathrel}{delimiters}{"BE}
+ \mdsy@DeclareMathSymbol{nparallel}{\mathrel}{delimiters}{"C1}
+ \mdsy@DeclareDelimiter{Vvert}{\mathord}{delimiters}{"C4}
+ \mdsy@DeclareOpen{lVvert}{delimiters}{"C4}
+ \mdsy@DeclareClose{rVvert}{delimiters}{"C4}
+\else
+% \mdsy@DeclareOpen{(}{delimiters}{"00}
+% \mdsy@DeclareClose{)}{delimiters}{"06}
+ \mdsy@DeclareOpen{lparen}{delimiters}{"00}
+ \mdsy@DeclareClose{rparen}{delimiters}{"06}
+% \mdsy@DeclareOpen{[}{delimiters}{"12}
+% \mdsy@DeclareClose{]}{delimiters}{"18}
+ \mdsy@DeclareOpen{lbrack}{delimiters}{"12}
+ \mdsy@DeclareClose{rbrack}{delimiters}{"18}
+ \mdsy@DeclareOpen{lfloor}{delimiters}{"1E}
+ \mdsy@DeclareClose{rfloor}{delimiters}{"24}
+ \mdsy@DeclareOpen{lceil}{delimiters}{"2A}
+ \mdsy@DeclareClose{rceil}{delimiters}{"30}
+ \mdsy@DeclareOpen{ulcorner}{delimiters}{"36}
+ \mdsy@DeclareClose{urcorner}{delimiters}{"3C}
+ \mdsy@DeclareOpen{llcorner}{delimiters}{"42}
+ \mdsy@DeclareClose{lrcorner}{delimiters}{"48}
+ \mdsy@DeclareOpen{ullcorner}{delimiters}{"4E}
+ \mdsy@DeclareClose{ulrcorner}{delimiters}{"54}
+ \mdsy@DeclareOpen{lsem}{delimiters}{"60}
+ \mdsy@DeclareClose{rsem}{delimiters}{"66}
+ \mdsy@DeclareOpen{lBrack}{delimiters}{"60}
+ \mdsy@DeclareClose{rBrack}{delimiters}{"66}
+ \mdsy@DeclareOpen{lbrace}{delimiters}{"72}
+ \mdsy@DeclareClose{rbrace}{delimiters}{"78}
+% \mdsy@DeclareOpen{<}{delimiters}{"85}
+% \mdsy@DeclareClose{>}{delimiters}{"8B}
+ \mdsy@DeclareOpen{langle}{delimiters}{"85}
+ \mdsy@DeclareClose{rangle}{delimiters}{"8B}
+ \mdsy@DeclareOpen{lAngle}{delimiters}{"91}
+ \mdsy@DeclareClose{rAngle}{delimiters}{"97}
+ \mdsy@DeclareOpen{langledot}{delimiters}{"9D}
+ \mdsy@DeclareClose{rangledot}{delimiters}{"A3}
+% \mdsy@DeclareDelimiter{/}{\mathord}{delimiters}{"A9}
+ \mdsy@DeclareDelimiter{mathslash}{\mathord}{delimiters}{"A9}
+ \mdsy@DeclareMathSymbol{divslash}{\mathbin}{delimiters}{"A9}
+ \mdsy@DeclareDelimiter{backslash}{\mathord}{delimiters}{"AF}
+% \expandafter\DeclareMathDelimiter\@backslashchar%
+% {\mathord}{delimiters}{"AF}{delimiters}{"AF}
+ \mdsy@DeclareMathSymbol{setminus}{\mathbin}{delimiters}{"AF}
+% \mdsy@DeclareDelimiter{|}{\mathord}{delimiters}{"B6}
+ \mdsy@DeclareDelimiter{vert}{\mathord}{delimiters}{"B6}
+ \mdsy@DeclareOpen{lvert}{delimiters}{"B6}
+ \mdsy@DeclareClose{rvert}{delimiters}{"B6}
+ \mdsy@DeclareMathSymbol{mid}{\mathrel}{delimiters}{"B6}
+ \mdsy@DeclareMathSymbol{nmid}{\mathrel}{delimiters}{"B9}
+ \mdsy@DeclareDelimiter{Vert}{\mathord}{delimiters}{"BD}
+ \mdsy@DeclareOpen{lVert}{delimiters}{"BD}
+ \mdsy@DeclareClose{rVert}{delimiters}{"BD}
+ \mdsy@DeclareMathSymbol{parallel}{\mathrel}{delimiters}{"BD}
+ \mdsy@DeclareMathSymbol{nparallel}{\mathrel}{delimiters}{"C0}
+ \mdsy@DeclareDelimiter{Vvert}{\mathord}{delimiters}{"C3}
+ \mdsy@DeclareOpen{lVvert}{delimiters}{"C3}
+ \mdsy@DeclareClose{rVvert}{delimiters}{"C3}
+\fi
+\let\|\Vert
+\mdsy@renewcommand{divides}{\mid}
+\mdsy@renewcommand{ndivides}{\nmid}
+\mdsy@DeclareMathSymbol{shortmid}{\mathrel}{delimiters}{"B5}
+\mdsy@DeclareMathSymbol{nshortmid}{\mathrel}{delimiters}{"B8}
+\mdsy@DeclareMathSymbol{shortparallel}{\mathrel}{delimiters}{"BC}
+\mdsy@DeclareMathSymbol{nshortparallel}{\mathrel}{delimiters}{"BF}
+\mdsy@DeclareDelimiter{arrowvert}{\mathord}{delimiters}{"BB}
+\mdsy@DeclareDelimiter{Arrowvert}{\mathord}{delimiters}{"C2}
+\mdsy@DeclareClose{lgroup}{delimiters}{"7E}
+\mdsy@DeclareOpen{rgroup}{delimiters}{"7F}
+\mdsy@DeclareClose{rmoustache}{delimiters}{"80}
+\mdsy@DeclareOpen{lmoustache}{delimiters}{"81}
+\mdsy@DeclareDelimiter{bracevert}{\mathord}{delimiters}{"84}
+
+\mdsy@DeclareMathDelimiter{uparrow}{\mathrel}{arrows}{"01}{delimiters}{"C6}
+\mdsy@DeclareMathDelimiter{downarrow}{\mathrel}{arrows}{"03}{delimiters}{"C7}
+\mdsy@DeclareMathDelimiter{updownarrow}{\mathrel}{arrows}{"11}{delimiters}{"C8}
+\mdsy@DeclareMathDelimiter{Uparrow}{\mathrel}{arrows}{"09}{delimiters}{"C9}
+\mdsy@DeclareMathDelimiter{Downarrow}{\mathrel}{arrows}{"0B}{delimiters}{"CA}
+\mdsy@DeclareMathDelimiter{Updownarrow}{\mathrel}{arrows}{"15}{delimiters}{"CB}
+% \end{macrocode}
+% Horizontal braces.
+% \begin{macrocode}
+\mdsy@DeclareMathSymbol{braceld}{\mathord}{delimiters}{"CC}
+\mdsy@DeclareMathSymbol{bracelu}{\mathord}{delimiters}{"CD}
+\mdsy@DeclareMathSymbol{bracerd}{\mathord}{delimiters}{"CE}
+\mdsy@DeclareMathSymbol{braceru}{\mathord}{delimiters}{"CF}
+\mdsy@DeclareMathSymbol{bracemd}{\mathord}{delimiters}{"D0}
+\mdsy@DeclareMathSymbol{bracemu}{\mathord}{delimiters}{"D1}
+\mdsy@DeclareMathSymbol{bracemid}{\mathord}{delimiters}{"D2}
+
+\mdsy@DeclareRobustCommandArg{bracefill@}{5}{%
+ $\m@th#5#1\leaders\hbox{$#4$}\hfill#2\leaders\hbox{$#4$}\hfill#3$%
+}
+\mdsy@renewcommand{downbracefill@}{\bracefill@\braceld\bracemd\bracerd\bracemid}
+\mdsy@renewcommand{upbracefill@}{\bracefill@\bracelu\bracemu\braceru\bracemid}
+\mdsy@renewcommand{downgroupfill@}{\bracefill@\braceld{}\bracerd\bracemid}
+\mdsy@renewcommand{upgroupfill@}{\bracefill@\bracelu{}\braceru\bracemid}
+\mdsy@renewcommand{linesegmentfill@}{\arrowfill@\leftfootline\relbar\rightfootline}
+\mdsy@renewcommand{leftharpoonfill@}{\arrowfill@\leftharpoondown\relbar\relbar}
+\mdsy@renewcommand{rightharpoonfill@}{\arrowfill@\relbar\relbar\rightharpoonup}
+
+\mdsy@DeclareRobustCommandArg{overbrace}{1}{%
+ \mathop{\mathpalette{\overarrow@\downbracefill@}{#1}}\limits%
+}
+\mdsy@DeclareRobustCommandArg{underbrace}{1}{%
+ \mathop{\mathpalette{\underarrow@\upbracefill@}{#1}}\limits%
+}
+\mdsy@DeclareRobustCommand{overgroup}{\mathpalette{\overarrow@\downgroupfill@}}
+\mdsy@DeclareRobustCommand{undergroup}{\mathpalette{\underarrow@\upgroupfill@}}
+\mdsy@DeclareRobustCommand{overlinesegment}{\mathpalette{\overarrow@\linesegmentfill@}}
+\mdsy@DeclareRobustCommand{overleftharpoon}{\mathpalette{\overarrow@\leftharpoonfill@}}
+\mdsy@DeclareRobustCommand{overrightharpoon}{\mathpalette{\overarrow@\rightharpoonfill@}}
+\mdsy@DeclareRobustCommand{underlinesegment}{\mathpalette{\underarrow@\linesegmentfill@}}
+% \end{macrocode}
+% Radical symbols.
+% \begin{macrocode}
+\ifmdsy@largedelims
+ \mdsy@DeclareMathRadical{sqrtsign}{delimiters}{"D4}{delimiters}{"D4}
+ \mdsy@DeclareMathSymbol{surd}{\mathop}{delimiters}{"D4}
+\else
+ \mdsy@DeclareMathRadical{sqrtsign}{delimiters}{"D3}{delimiters}{"D3}
+ \mdsy@DeclareMathSymbol{surd}{\mathop}{delimiters}{"D3}
+\fi
+% \end{macrocode}
+% In the \textit{n}-th root, we don't want the~\textit{n} to come too
+% close to the radical (adopted from package \textsf{lucimatx}).
+% \begin{macrocode}
+\mdsy@DeclareRobustCommandArg{r@@t}{2}{\setbox\z@\hbox{$\m@th#1\sqrt{#2}$}%
+ \dimen@\ht\z@ \advance\dimen@-\dp\z@
+ \mkern5mu\raise.6\dimen@\copy\rootbox \mkern-8mu\box\z@}
+% \end{macrocode}
+% Mathchars. If onlysansmath, we make certain single characters active
+% to react on the mathversion.
+% \begin{macrocode}
+\AtBeginDocument{%
+ \mdsy@DeclareActiveMathSymbol{+}{\mathbin}{symbols}{"11}
+ \mdsy@DeclareActiveMathSymbol{-}{\mathbin}{symbols}{"0E}
+ \mdsy@DeclareActiveMathSymbol{*}{\mathbin}{symbols}{"98}
+ \mdsy@DeclareActiveMathSymbol{:}{\mathrel}{symbols}{"02}
+ \mdsy@DeclareActiveMathSymbol{=}{\mathrel}{relations}{"00}
+ \mdsy@DeclareActiveMathSymbol{<}{\mathrel}{relations}{"24}
+ \mdsy@DeclareActiveMathSymbol{>}{\mathrel}{relations}{"25}
+ \ifmdsy@largedelims
+ \mdsy@DeclareActiveMathDelimiter{|}{\mathord}{delimiters}{"B7}
+ \mdsy@DeclareActiveMathDelimiter{(}{\mathopen}{delimiters}{"01}
+ \mdsy@DeclareActiveMathDelimiter{)}{\mathclose}{delimiters}{"07}
+ \mdsy@DeclareActiveMathDelimiter{[}{\mathopen}{delimiters}{"13}
+ \mdsy@DeclareActiveMathDelimiter{]}{\mathclose}{delimiters}{"19}
+ \mdsy@DeclareActiveMathDelimiter{/}{\mathord}{delimiters}{"AA}
+ \else
+ \mdsy@DeclareActiveMathDelimiter{|}{\mathord}{delimiters}{"B6}
+ \mdsy@DeclareActiveMathDelimiter{(}{\mathopen}{delimiters}{"00}
+ \mdsy@DeclareActiveMathDelimiter{)}{\mathclose}{delimiters}{"06}
+ \mdsy@DeclareActiveMathDelimiter{[}{\mathopen}{delimiters}{"12}
+ \mdsy@DeclareActiveMathDelimiter{]}{\mathclose}{delimiters}{"18}
+ \mdsy@DeclareActiveMathDelimiter{/}{\mathord}{delimiters}{"A9}
+ \fi
+ \ifmdsy@onlysansmath
+% \end{macrocode}
+% amsmath and amsopn define commands which use the mathcode of some of
+% the symbols above to define new math characters. Since the mathcode
+% is out of the range (made active), this fails. So change the
+% commands and make the definitions at the begin of the document.
+% \begin{macrocode}
+ \def\resetMathstrut@{%
+ \setbox\z@\hbox{%
+ \ifmathversionsans{%
+ \mathchardef\@tempa\csname(@new\endcsname%
+ }{%
+ \mathchardef\@tempa\csname(@old\endcsname%
+ }
+ \def\@tempb##1"##2##3{\the\textfont"##3\char"}%
+ \expandafter\@tempb\meaning\@tempa \relax
+ }%
+ \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@
+ }
+ \renewcommand{\std@minus}{-}
+ \renewcommand{\std@equal}{=}
+ \gdef\newmcodes@{\mathcode`\'39\mathcode`\*42\mathcode`\."613A%
+ \ifnum\mathcode`\-=45 \else
+ \renewcommand{\std@minus}{-}\relax
+ \fi
+ \mathcode`\-45\mathcode`\/47\mathcode`\:"603A\relax}
+ \fi
+}
+% \end{macrocode}
+% There is no |\not| symbol in MdSymbol since all relational symbols come
+% with a stroked companion. For compatibility we define a |\not| command that
+% places a virgule over the following symbol.
+% \begin{macrocode}
+\mdsy@DeclareRobustCommandArg{c@ncel}{2}{\m@th\ooalign{$\hfil#1/\hfil$\crcr$#1#2$}}
+\mdsy@DeclareRobustCommandArg{not}{1}{\mathrel{\m@th\mathpalette\c@ncel{#1}}}
+% \end{macrocode}
+% The height of the |\overline| command is three times the
+% |default_line_thickness| which can be too much for heavier weights.
+% An alternative implementation follows with a fixed height. It is
+% based on \url{http://tex.stackexchange.com/a/24134/11605} and \url{http://tex.stackexchange.com/a/43906/11605}.
+% \begin{macrocode}
+\RequirePackage{calc}
+\newsavebox\overliningbox
+
+\def\ovlg@eat#1#2#3#4#5{\futurelet\ovlg@let@token\ovlg@eat@}
+\def\ovlg@eat@#1\ovlg@eat{%
+\ifx\ovlg@let@token\bgroup
+\else\ifx\ovlg@let@token\mathop
+ \mathop
+\else\ifx\ovlg@let@token\mathbin
+ \mathbin
+\else\ifx\ovlg@let@token\mathrel
+ \mathrel
+\else\ifx\ovlg@let@token\mathopen
+ \mathopen
+\else\ifx\ovlg@let@token\mathop
+ \mathop
+\else\ifx\ovlg@let@token\mathpunct
+ \mathpunct
+\else\ifcat.\ifcat a\noexpand\ovlg@let@token.\else\noexpand\ovlg@let@token\fi
+ \afterassignment\ovlg@mathchar\count@\mathcode`#1\relax\ovlg@eat
+\else\ifx\ovlg@let@token\mathchar
+ \afterassignment\ovlg@mathchar\expandafter\count@\@gobble#1\relax\ovlg@eat
+\else
+ \xdef\meaning@{\meaning\ovlg@let@token}%
+ \expandafter\ovlg@mchar@test\meaning@""\@nil
+\fi\fi\fi\fi\fi\fi\fi\fi\fi
+}
+
+\edef\ovlg@mchar@{\meaning\mathchar}
+
+\def\ovlg@mchar@test#1"#2"#3\@nil{%
+ \xdef\meaning@{#1}%
+ \ifx\meaning@\ovlg@mchar@
+ \count@"#2\relax
+ \ovlg@mathchar\ovlg@eat
+ \fi
+}
+
+\def\ovlg@mathchar#1\ovlg@eat{%
+ \divide\count@"1000 }
+
+\mdsy@DeclareRobustCommandArg{overlining}{1}{%
+\begingroup
+\let\protect\empty
+\expandafter\ovlg@eat\romannumeral`\Q#1\relax\ovlg@eat
+ \ifcase\count@
+ \or
+ \mathop\or
+ \mathbin\or
+ \mathrel\or
+ \mathopen\or
+ \mathclose\or
+ \mathpunct\or
+ \fi
+ {\text{\savebox\overliningbox{$\m@th#1$}\fboxsep\z@%
+ \makebox[0pt][l]{$\m@th#1$}%
+ \rule[\ht\overliningbox+1.2pt]{\wd\overliningbox}{.8\fontdimen8\textfont3}}}%
+\endgroup}
+%</style>
+% \end{macrocode}
+%
+% \Finale
+\endinput
diff --git a/fonts/mdsymbol/mdsymbol.ins b/fonts/mdsymbol/mdsymbol.ins
new file mode 100644
index 0000000000..294efd61f8
--- /dev/null
+++ b/fonts/mdsymbol/mdsymbol.ins
@@ -0,0 +1,53 @@
+%
+% Copyright (c) 2011 by Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% 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 Sebastian Schubert.
+%
+% This work consists of the files mdsymbol.dtx, mdsymbol.ins
+% and the derived files mdsymbol.pdf and mdsymbol.sty.
+%
+
+\input docstrip.tex
+
+\preamble
+
+Copyright (c) 2011 by Sebastian Schubert <schubert.seb@googlemail.com>
+
+This work may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3c
+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 Sebastian Schubert.
+
+This work consists of the files mdsymbol.dtx, mdsymbol.ins
+and the derived files mdsymbol.pdf and mdsymbol.sty.
+
+\endpreamble
+
+\postamble
+\endpostamble
+
+\keepsilent
+\askforoverwritefalse
+
+\generate{%
+ \file{mdsymbol.sty}{\from{mdsymbol.dtx}{style}}
+}
+
+\endbatchfile
diff --git a/fonts/mdsymbol/mdsymbol.pdf b/fonts/mdsymbol/mdsymbol.pdf
new file mode 100644
index 0000000000..f18a372124
--- /dev/null
+++ b/fonts/mdsymbol/mdsymbol.pdf
Binary files differ
diff --git a/fonts/mdsymbol/otf/MdSymbol-Bold.otf b/fonts/mdsymbol/otf/MdSymbol-Bold.otf
new file mode 100644
index 0000000000..5f2e3de670
--- /dev/null
+++ b/fonts/mdsymbol/otf/MdSymbol-Bold.otf
Binary files differ
diff --git a/fonts/mdsymbol/otf/MdSymbol-Light.otf b/fonts/mdsymbol/otf/MdSymbol-Light.otf
new file mode 100644
index 0000000000..d18623dae9
--- /dev/null
+++ b/fonts/mdsymbol/otf/MdSymbol-Light.otf
Binary files differ
diff --git a/fonts/mdsymbol/otf/MdSymbol-Regular.otf b/fonts/mdsymbol/otf/MdSymbol-Regular.otf
new file mode 100644
index 0000000000..5165db5fd2
--- /dev/null
+++ b/fonts/mdsymbol/otf/MdSymbol-Regular.otf
Binary files differ
diff --git a/fonts/mdsymbol/otf/MdSymbol-Semibold.otf b/fonts/mdsymbol/otf/MdSymbol-Semibold.otf
new file mode 100644
index 0000000000..b1df24e99a
--- /dev/null
+++ b/fonts/mdsymbol/otf/MdSymbol-Semibold.otf
Binary files differ
diff --git a/fonts/mdsymbol/source/MdSymbolA-Bold.mf b/fonts/mdsymbol/source/MdSymbolA-Bold.mf
new file mode 100644
index 0000000000..fd9d08adbf
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolA-Bold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolA";
+ font_weight := "Bold";
+fi
+weight_index := 3;
+
+input MdSymbolA;
diff --git a/fonts/mdsymbol/source/MdSymbolA-Light.mf b/fonts/mdsymbol/source/MdSymbolA-Light.mf
new file mode 100644
index 0000000000..ee63d484cc
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolA-Light.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolA";
+ font_weight := "Light";
+fi
+weight_index := 0;
+
+input MdSymbolA;
diff --git a/fonts/mdsymbol/source/MdSymbolA-Regular.mf b/fonts/mdsymbol/source/MdSymbolA-Regular.mf
new file mode 100644
index 0000000000..7bf5800ac7
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolA-Regular.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolA";
+ font_weight := "Regular";
+fi
+weight_index := 1;
+
+input MdSymbolA;
diff --git a/fonts/mdsymbol/source/MdSymbolA-Semibold.mf b/fonts/mdsymbol/source/MdSymbolA-Semibold.mf
new file mode 100644
index 0000000000..00f54f1b82
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolA-Semibold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolA";
+ font_weight := "Semibold";
+fi
+weight_index := 2;
+
+input MdSymbolA;
diff --git a/fonts/mdsymbol/source/MdSymbolA.mf b/fonts/mdsymbol/source/MdSymbolA.mf
new file mode 100644
index 0000000000..f722176386
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolA.mf
@@ -0,0 +1,36 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+input mdbase;
+input mdgeometric;
+
+font_slant 0;
+font_x_height x_height#;
+font_quad 10pt#;
+
+subs := 7/10; % subscript size
+rth# := rule_thickness#;
+
+fontdimen 8: % parameters $\sigma_8$ to $\sigma_{22}$ will now be listed
+ math_axis# + 3.5rth# + subs * desc_depth#, % num1 (\sigma_8)
+ math_axis# + 1.5rth# + 5/6pt#, % num2 (\sigma_9)
+ math_axis# + 1.5rth# + 5/6pt#, % num3 (\sigma_{10})
+ 3.5rth# + subs * asc_height# - math_axis#, % denom1 (\sigma_{11})
+ 1.5rth# + subs * asc_height# - math_axis# + 5/6pt#, % denom2 (\sigma_{12})
+ 5.5pt#, % sup1 (\sigma_{13})
+ 5.2pt#, % sup2 (\sigma_{14})
+ 3.7pt#, % sup3 (\sigma_{15})
+ 1.8pt#, % sub1 (\sigma_{16})
+ 2.0pt#, % sub2 (\sigma_{17})
+ 4.0pt#, % sup\_drop (\sigma_{18})
+ 0.5pt#, % sub\_drop (\sigma_{19})
+ 25pt#, % delim1 (\sigma_{20})
+ 12pt#, % delim2 (\sigma_{21})
+ math_axis#; % axis\_height (\sigma_{22})
+
+bye;
diff --git a/fonts/mdsymbol/source/MdSymbolB-Bold.mf b/fonts/mdsymbol/source/MdSymbolB-Bold.mf
new file mode 100644
index 0000000000..d73c34c196
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolB-Bold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolB";
+ font_weight := "Bold";
+fi
+weight_index := 3;
+
+input MdSymbolB;
diff --git a/fonts/mdsymbol/source/MdSymbolB-Light.mf b/fonts/mdsymbol/source/MdSymbolB-Light.mf
new file mode 100644
index 0000000000..b16061a0f3
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolB-Light.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolB";
+ font_weight := "Light";
+fi
+weight_index := 0;
+
+input MdSymbolB;
diff --git a/fonts/mdsymbol/source/MdSymbolB-Regular.mf b/fonts/mdsymbol/source/MdSymbolB-Regular.mf
new file mode 100644
index 0000000000..091f10a4f8
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolB-Regular.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolB";
+ font_weight := "Regular";
+fi
+weight_index := 1;
+
+input MdSymbolB;
diff --git a/fonts/mdsymbol/source/MdSymbolB-Semibold.mf b/fonts/mdsymbol/source/MdSymbolB-Semibold.mf
new file mode 100644
index 0000000000..99291db9d0
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolB-Semibold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolB";
+ font_weight := "Semibold";
+fi
+weight_index := 2;
+
+input MdSymbolB;
diff --git a/fonts/mdsymbol/source/MdSymbolB.mf b/fonts/mdsymbol/source/MdSymbolB.mf
new file mode 100644
index 0000000000..17284eb624
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolB.mf
@@ -0,0 +1,20 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+input mdbase;
+
+negated := 0;
+input mdrelations;
+
+negated := 1;
+input mdrelations;
+
+negated := 2;
+input mdrelations;
+
+bye;
diff --git a/fonts/mdsymbol/source/MdSymbolC-Bold.mf b/fonts/mdsymbol/source/MdSymbolC-Bold.mf
new file mode 100644
index 0000000000..22eb0e3562
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolC-Bold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolC";
+ font_weight := "Bold";
+fi
+weight_index := 3;
+
+input MdSymbolC;
diff --git a/fonts/mdsymbol/source/MdSymbolC-Light.mf b/fonts/mdsymbol/source/MdSymbolC-Light.mf
new file mode 100644
index 0000000000..de67274804
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolC-Light.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolC";
+ font_weight := "Light";
+fi
+weight_index := 0;
+
+input MdSymbolC;
diff --git a/fonts/mdsymbol/source/MdSymbolC-Regular.mf b/fonts/mdsymbol/source/MdSymbolC-Regular.mf
new file mode 100644
index 0000000000..701f374884
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolC-Regular.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolC";
+ font_weight := "Regular";
+fi
+weight_index := 1;
+
+input MdSymbolC;
diff --git a/fonts/mdsymbol/source/MdSymbolC-Semibold.mf b/fonts/mdsymbol/source/MdSymbolC-Semibold.mf
new file mode 100644
index 0000000000..5f59437a52
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolC-Semibold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolC";
+ font_weight := "Semibold";
+fi
+weight_index := 2;
+
+input MdSymbolC;
diff --git a/fonts/mdsymbol/source/MdSymbolC.mf b/fonts/mdsymbol/source/MdSymbolC.mf
new file mode 100644
index 0000000000..d407aab88d
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolC.mf
@@ -0,0 +1,20 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+input mdbase;
+
+boolean negated;
+negated := false;
+
+input mdarrows;
+
+current_char := 223;
+
+input mdturnstile;
+
+bye;
diff --git a/fonts/mdsymbol/source/MdSymbolD-Bold.mf b/fonts/mdsymbol/source/MdSymbolD-Bold.mf
new file mode 100644
index 0000000000..e8be0186ea
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolD-Bold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolD";
+ font_weight := "Bold";
+fi
+weight_index := 3;
+
+input MdSymbolD;
diff --git a/fonts/mdsymbol/source/MdSymbolD-Light.mf b/fonts/mdsymbol/source/MdSymbolD-Light.mf
new file mode 100644
index 0000000000..8061a846b6
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolD-Light.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolD";
+ font_weight := "Light";
+fi
+weight_index := 0;
+
+input MdSymbolD;
diff --git a/fonts/mdsymbol/source/MdSymbolD-Regular.mf b/fonts/mdsymbol/source/MdSymbolD-Regular.mf
new file mode 100644
index 0000000000..e3a2ea6f50
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolD-Regular.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolD";
+ font_weight := "Regular";
+fi
+weight_index := 1;
+
+input MdSymbolD;
diff --git a/fonts/mdsymbol/source/MdSymbolD-Semibold.mf b/fonts/mdsymbol/source/MdSymbolD-Semibold.mf
new file mode 100644
index 0000000000..de22d61cca
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolD-Semibold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolD";
+ font_weight := "Semibold";
+fi
+weight_index := 2;
+
+input MdSymbolD;
diff --git a/fonts/mdsymbol/source/MdSymbolD.mf b/fonts/mdsymbol/source/MdSymbolD.mf
new file mode 100644
index 0000000000..75bc3e1c1f
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolD.mf
@@ -0,0 +1,20 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+input mdbase;
+
+boolean negated;
+negated := true;
+
+input mdarrows;
+
+current_char := 223;
+
+input mdturnstile;
+
+bye;
diff --git a/fonts/mdsymbol/source/MdSymbolE-Bold.mf b/fonts/mdsymbol/source/MdSymbolE-Bold.mf
new file mode 100644
index 0000000000..f5463022af
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolE-Bold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolE";
+ font_weight := "Bold";
+fi
+weight_index := 3;
+
+input MdSymbolE;
diff --git a/fonts/mdsymbol/source/MdSymbolE-Light.mf b/fonts/mdsymbol/source/MdSymbolE-Light.mf
new file mode 100644
index 0000000000..dfaefc199b
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolE-Light.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolE";
+ font_weight := "Light";
+fi
+weight_index := 0;
+
+input MdSymbolE;
diff --git a/fonts/mdsymbol/source/MdSymbolE-Regular.mf b/fonts/mdsymbol/source/MdSymbolE-Regular.mf
new file mode 100644
index 0000000000..c39b44a0e4
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolE-Regular.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolE";
+ font_weight := "Regular";
+fi
+weight_index := 1;
+
+input MdSymbolE;
diff --git a/fonts/mdsymbol/source/MdSymbolE-Semibold.mf b/fonts/mdsymbol/source/MdSymbolE-Semibold.mf
new file mode 100644
index 0000000000..038513bf48
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolE-Semibold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolE";
+ font_weight := "Semibold";
+fi
+weight_index := 2;
+
+input MdSymbolE;
diff --git a/fonts/mdsymbol/source/MdSymbolE.mf b/fonts/mdsymbol/source/MdSymbolE.mf
new file mode 100644
index 0000000000..25c3fd03b8
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolE.mf
@@ -0,0 +1,25 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+input mdbase;
+input mdoperators;
+
+current_char := 113;
+input mdaccents.mf;
+
+font_x_height x_height#;
+
+fontdimen 8:
+ rule_thickness#, % default_rule_thickness
+ 1.1pt#, % big_op_spacing1
+ 1.6pt#, % big_op_spacing2
+ 2.0pt#, % big_op_spacing3
+ 6.0pt#, % big_op_spacing4
+ 1.0pt#; % big_op_spacing5
+
+bye;
diff --git a/fonts/mdsymbol/source/MdSymbolF-Bold.mf b/fonts/mdsymbol/source/MdSymbolF-Bold.mf
new file mode 100644
index 0000000000..a69cc97469
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolF-Bold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolF";
+ font_weight := "Bold";
+fi
+weight_index := 3;
+
+input MdSymbolF;
diff --git a/fonts/mdsymbol/source/MdSymbolF-Light.mf b/fonts/mdsymbol/source/MdSymbolF-Light.mf
new file mode 100644
index 0000000000..54b174a530
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolF-Light.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolF";
+ font_weight := "Light";
+fi
+weight_index := 0;
+
+input MdSymbolF;
diff --git a/fonts/mdsymbol/source/MdSymbolF-Regular.mf b/fonts/mdsymbol/source/MdSymbolF-Regular.mf
new file mode 100644
index 0000000000..759f9aebc5
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolF-Regular.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolF";
+ font_weight := "Regular";
+fi
+weight_index := 1;
+
+input MdSymbolF;
diff --git a/fonts/mdsymbol/source/MdSymbolF-Semibold.mf b/fonts/mdsymbol/source/MdSymbolF-Semibold.mf
new file mode 100644
index 0000000000..df64590f7a
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolF-Semibold.mf
@@ -0,0 +1,15 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+if known ps_output:
+ font_family := "MdSymbolF";
+ font_weight := "Semibold";
+fi
+weight_index := 2;
+
+input MdSymbolF;
diff --git a/fonts/mdsymbol/source/MdSymbolF.mf b/fonts/mdsymbol/source/MdSymbolF.mf
new file mode 100644
index 0000000000..9a79721c03
--- /dev/null
+++ b/fonts/mdsymbol/source/MdSymbolF.mf
@@ -0,0 +1,12 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+input mdbase;
+input mddelims;
+
+bye;
diff --git a/fonts/mdsymbol/source/mdaccents.mf b/fonts/mdsymbol/source/mdaccents.mf
new file mode 100644
index 0000000000..ab342a4f60
--- /dev/null
+++ b/fonts/mdsymbol/source/mdaccents.mf
@@ -0,0 +1,88 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+for scale = 1, 1.8, 2.6, 3.4, 4.2, 5:
+ beginaccent(scale * 7u#, 1/2equal_spread# + accent_thickness#); "wide hat";
+
+ y2r = h;
+ x2r = w/2;
+ x1r = w - x3r = 0;
+ y1r = y3r = y2r - 1/2equal_spread;
+
+ theta := angle(z2r - z1r);
+
+ penpos2(1.1thick/cosd(theta), 90);
+ penpos1(thick, theta + 90);
+ penpos3(thick, 90 - theta);
+
+ fill stroke z1e -- z2e -- z3e;
+ penlabels(1,2,3);
+ endchar;
+endfor;
+
+charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
+
+for scale = 1, 1.8, 2.6, 3.4, 4.2, 5:
+ beginaccent(scale * 7u#, 1/2equal_spread# + accent_thickness#); "wide tilde";
+ draw_sim(a, (0, 1/2[accent_height, h]), (w, 1/2[accent_height, h]), 1/4equal_spread, thick);
+ endchar;
+endfor;
+
+charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
+
+for scale = 1, 1.8, 2.6, 3.4, 4.2, 5:
+ beginaccent(scale * 7u#, 1/2equal_spread# + accent_thickness#); "wide paren";
+ draw_smile(a, -1, (0, 1/2[accent_height, h]), (w, 1/2[accent_height, h]), 1/2equal_spread, thick, true);
+ endchar;
+endfor;
+
+charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
+
+beginaccent(6u# + side_bearing#, 3u# + 1/2accent_thickness#); "vec";
+
+ x0 = side_bearing;
+ x1 = w - 1/2thick;
+ y0 = y1 = h - 1/2(1/2(x1-x0) + thick);
+
+ draw_straight(z0, z1, thick, false);
+ draw_arrowhead(z1, 0, 1/2(x1-x0), thick);
+ labels(0,1);
+endchar;
+
+beginsymbol(5u#, (-.8)[x_height#, asc_height#], 0); "middle bar";
+ penpos0(accent_thickness, 90);
+ penpos1(accent_thickness, 90);
+
+ x0 = w - x1 = 0;
+ y0 = y1 = h;
+
+ fill stroke z0e -- z1e;
+ penlabels(0,1)
+endchar;
+
+beginsymbol(5u#, (-.8)[x_height#, asc_height#], 0); "middle slash";
+ x0 = w - x1 = 0;
+ 1/2[y0,y1] = h;
+ y1 - y0 = 2line_thickness;
+
+ penpos0(accent_thickness/cosd(angle(z1-z0)), 90);
+ penpos1(accent_thickness/cosd(angle(z1-z0)), 90);
+
+ fill stroke z0e -- z1e;
+ penlabels(0,1)
+endchar;
+
+beginsymbol(5u# + 2side_bearing#, 3/2asc_height#, 0); "stroke through";
+ theta := 70;
+
+ z0 = (w/2,1/6asc_height);
+ z1 = z0 + 3/4asc_height / cosd (90 - theta) * dir theta;
+ z2 = z0 - 3/4asc_height / cosd (90 - theta) * dir theta;
+
+ draw_line_cut_linethick(1,2)(4/5line_thickness);
+endchar;
diff --git a/fonts/mdsymbol/source/mdarrows.mf b/fonts/mdsymbol/source/mdarrows.mf
new file mode 100644
index 0000000000..5916b56593
--- /dev/null
+++ b/fonts/mdsymbol/source/mdarrows.mf
@@ -0,0 +1,805 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+def ifneg(expr a,b) =
+ if negated: a else: b fi
+enddef;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "single arrow (" & decimal alpha & ")";
+ draw_line(foot_ex, head, false);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 6/5, ifneg(19/10, 13/10) * arrow_spread#); "double arrow (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot_ex;
+ 1/2[z2,z3] = head;
+
+ draw_line(z0, arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(z1, arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - arrow_spread * dir alpha], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 45, 135:
+ beginarrow(alpha, 6/5, ifneg(3/2, 1) * arrow_spread#); "bidirectional arrow (" & decimal alpha & ")";
+ draw_line(foot, head, false);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(foot, alpha+180, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 45, 135:
+ beginarrow(alpha, 7/5, ifneg(19/10, 13/10) * arrow_spread#); "double bidirectional arrow (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot;
+ 1/2[z2,z3] = head;
+
+ draw_line(arrowhead_intersection(foot, alpha+180, 13/10arrow_spread, z0 -- z2), arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(arrowhead_intersection(foot, alpha+180, 13/10arrow_spread, z1 -- z3), arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
+ draw_arrowhead(foot, alpha+180, 13/10arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 5/4, ifneg(3/2, 1) * arrow_spread#); "double-head arrow (" & decimal alpha & ")";
+ draw_line(foot_ex, head, false);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(head - 1/4arrow_len * dir alpha, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - (1/2arrow_spread + 1/4arrow_len) * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "tailed arrow (" & decimal alpha & ")";
+ z0 = foot + 1/2arrow_spread * dir alpha;
+
+ draw_line(z0, head, false);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(z0, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "arrow with foot (" & decimal alpha & ")";
+ draw_line(foot, head, false);
+ draw_line(foot - 1/2arrow_spread * dir (alpha + 90), foot + 1/2arrow_spread * dir (alpha + 90), true);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginarrow(alpha, 6/5, ifneg(19/10, 13/10) * arrow_spread#); "double arrow with foot (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot_ex;
+ 1/2[z2,z3] = head;
+
+ draw_line(z0, arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(z1, arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_line(foot - 13/20arrow_spread * dir (alpha + 90), foot + 13/20arrow_spread * dir (alpha + 90), true);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "left embedding (" & decimal alpha & ")";
+ thick := line_thickness;
+
+ z0 = foot + 1/4arrow_spread * dir(alpha + 90);
+ 1/2[z1,z2] = z0 + 1/4arrow_spread * dir alpha;
+ z2 = z1 + 1/2arrow_spread * dir (alpha + 90);
+ z3 = head;
+ z4 = z2 + 1/2thick * dir alpha;
+
+ penpos0(thick, alpha);
+ penpos1(thick, alpha + 90);
+ penpos2(thick, alpha - 90);
+ penpos3(thick, alpha + 90);
+ penpos4(thick, alpha - 90);
+
+ draw_arrowhead(head, alpha, arrow_spread, thick);
+ fill stroke z4.e -- z2.e{dir (alpha + 180)} ..
+ z0.e{dir (alpha - 90)} .. z1.e{dir alpha} -- z3.e;
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "right embedding (" & decimal alpha & ")";
+ thick := line_thickness;
+
+ z0 = foot - 1/4arrow_spread * dir(alpha + 90);
+ 1/2[z1,z2] = z0 + 1/4arrow_spread * dir alpha;
+ z2 = z1 - 1/2arrow_spread * dir (alpha + 90);
+ z3 = head;
+ z4 = z2 + 1/2thick * dir alpha;
+
+ penpos0(thick, alpha + 180);
+ penpos1(thick, alpha + 90);
+ penpos2(thick, alpha - 90);
+ penpos3(thick, alpha + 90);
+ penpos4(thick, alpha - 90);
+
+ draw_arrowhead(head, alpha, arrow_spread, thick);
+ fill stroke z4.e -- z2.e{dir (alpha + 180)} ..
+ z0.e{dir (alpha + 90)} .. z1.e{dir alpha} -- z3.e;
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "left harpoon (" & decimal alpha & ")";
+ draw_line(foot_ex, head, false);
+ draw_arrowhead_left(head, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "right harpoon (" & decimal alpha & ")";
+ draw_line(foot_ex, head, false);
+ draw_arrowhead_right(head, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 45, 135:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "left left harpoon (" & decimal alpha & ")";
+ draw_line(foot, head, false);
+ draw_arrowhead_left(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead_left(foot, alpha+180, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(80, 80, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 45, 135:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "right right harpoon (" & decimal alpha & ")";
+ draw_line(foot, head, false);
+ draw_arrowhead_right(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead_right(foot, alpha+180, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 100, 100);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 45, 135:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread# + equal_spread#); "double left left harpoon (" & decimal alpha & ")";
+ z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot;
+ 1/2[z0',z1'] = foot_ex;
+ 1/2[z2,z3] = head;
+ 1/2[z2',z3'] = head_ex;
+
+ draw_line(z2', z0, false);
+ draw_line(z1', z3, false);
+ draw_arrowhead_left(z3, alpha, arrow_spread, line_thickness);
+ draw_arrowhead_left(z0, alpha+180, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread + equal_spread)(80, 80, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 45, 135:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread# + equal_spread#); "double right right harpoon (" & decimal alpha & ")";
+ z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot;
+ 1/2[z0',z1'] = foot_ex;
+ 1/2[z2,z3] = head;
+ 1/2[z2',z3'] = head_ex;
+
+ draw_line(z0', z2, false);
+ draw_line(z3', z1, false);
+ draw_arrowhead_right(z2, alpha, arrow_spread, line_thickness);
+ draw_arrowhead_right(z1, alpha+180, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread + equal_spread)(70, 70, 100, 100);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "broken arrow (" & decimal alpha & ")";
+ z0 = ifneg( 4/20, 6/20)[foot,head];
+ z1 = ifneg(13/20,11/20)[foot,head];
+
+ draw_line(foot_ex, z0, false);
+ draw_line(z1, head, false);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[z0, z1], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "multi map (" & decimal alpha & ")";
+ draw_line(foot_ex, head - (4/5arrow_spread + 1/4line_thickness) * dir alpha, false);
+ draw_circle(head - 2/5arrow_spread * dir alpha, 2/5arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 4/5arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#); "filled multi map (" & decimal alpha & ")";
+ draw_line(foot_ex, head_ex - 2/5arrow_spread * dir alpha, false);
+ filldraw_circle(head - 2/5arrow_spread * dir alpha, 2/5arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 4/5arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+beginarrow(0, 7/5, ifneg(3/2, 1) * arrow_spread#); "double multi map";
+ draw_line(foot + (4/5arrow_spread + 1/4line_thickness) * right, head - (4/5arrow_spread + 1/4line_thickness) * right, false);
+ draw_circle(head - 2/5arrow_spread * right, 2/5arrow_spread, line_thickness);
+ draw_circle(foot + 2/5arrow_spread * right, 2/5arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], 0, 3/2arrow_spread)(70);
+ fi
+endchar;
+
+beginarrow(0, 7/5, ifneg(3/2, 1) * arrow_spread#); "filled double multi map";
+ draw_line(foot_ex + 2/5arrow_spread * right, head - 2/5arrow_spread * right, false);
+ filldraw_circle(head - 2/5arrow_spread * right, 2/5arrow_spread, line_thickness);
+ filldraw_circle(foot + 2/5arrow_spread * right, 2/5arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], 0, 3/2arrow_spread)(70);
+ fi
+endchar;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 7/5, ifneg(3/2, 1) * arrow_spread#); "image of (" & decimal alpha & ")";
+ draw_line(foot_ex + 2/5arrow_spread * dir alpha, head - (4/5arrow_spread + 1/4line_thickness) * dir alpha, false);
+ filldraw_circle(foot + 2/5arrow_spread * dir alpha, 2/5arrow_spread, line_thickness);
+ draw_circle(head - 2/5arrow_spread * dir alpha, 2/5arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginarrow(alpha, 1, 3/4plus_size# + ifneg(1,0) * arrow_spread#); "pitchfork (" & decimal alpha & ")";
+ draw_line(foot_ex, head_ex, false);
+ draw_subset(a, foot + 1/2arrow_len * dir alpha, foot_ex, 3/4plus_size, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/4[foot, head], alpha, 3/4plus_size + arrow_spread)(80, 80, 100, 100, 80, 80, 100, 100);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 1, 2arrow_spread#+line_thickness#); "parallel arrows (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = (arrow_spread+line_thickness) * dir (alpha + 90);
+ 1/2[z0,z1] = foot_ex;
+ 1/2[z2,z3] = head;
+
+ draw_line(z0, z2, false);
+ draw_line(z1, z3, false);
+ draw_arrowhead(z2, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(z3, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 45, 135:
+ beginarrow(alpha, 1, 2arrow_spread#); "anti-parallel arrows right left (" & decimal alpha & ")";
+ z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = arrow_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot;
+ 1/2[z0',z1'] = foot_ex;
+ 1/2[z2,z3] = head;
+ 1/2[z2',z3'] = head_ex;
+
+ draw_line(z2', z0, false);
+ draw_line(z1', z3, false);
+ draw_arrowhead(z3, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(z0, alpha+180, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 2arrow_spread)(80, 80, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 45, 135:
+ beginarrow(alpha, 1, 2arrow_spread#); "anti-parallel arrows left right (" & decimal alpha & ")";
+ z1 - z0 = z1' - z0' = z3 - z2 = z3' - z2' = arrow_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot;
+ 1/2[z0',z1'] = foot_ex;
+ 1/2[z2,z3] = head;
+ 1/2[z2',z3'] = head_ex;
+
+ draw_line(z0', z2, false);
+ draw_line(z3', z1, false);
+ draw_arrowhead(z2, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(z1, alpha+180, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 2arrow_spread)(70, 70, 100, 100);
+ fi
+ endchar;
+endfor;
+
+for sign = 1, -1:
+for alpha = 0, 90, 180, 270:
+ beginarrow(alpha, 1, ifneg(3/2, 1) * arrow_spread#);
+ if sign > 0: "left right" else: "right left" fi & " wave arrow (" & decimal alpha & ")";
+ thick := line_thickness;
+
+ z0 = foot - sign * 1/8arrow_spread * dir (alpha + 90);
+ z1 = 4/18[foot,head] + sign * 1/4arrow_spread * dir (alpha + 90);
+ z2 = 7/18[foot,head];
+ z3 = 10/18[foot,head] - sign * 1/4arrow_spread * dir (alpha + 90);
+ z4 = 12/18[foot,head] - sign * 1/8arrow_spread * dir (alpha + 90);
+ z5 = 14/18[foot,head];
+ z6 = head;
+
+ penpos0(thick, alpha - 90 + sign * 55);
+ penpos1(thick, alpha - 90);
+ penpos2(thick, alpha - 90 - sign * 55);
+ penpos3(thick, alpha - 90);
+ penpos4(thick, alpha - 90 + sign * 35);
+ penpos5(thick, alpha - 90);
+ penpos6(thick, alpha - 90);
+
+ penlabels(0,1,2,3,4,5,6);
+
+ fill stroke z0.e{dir (alpha + sign * 55)} .. z1.e{dir alpha} .. z2.e{dir (alpha - sign * 55)} .. z3.e{dir alpha} .. z4.e{dir (alpha + sign * 35)} ... {dir alpha}z5.e -- z6.e;
+ draw_arrowhead(z6, alpha, arrow_spread, thick);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 70, 70, 70, 70, 70, 70);
+ fi
+ endchar;
+endfor;
+endfor;
+
+for sign = 1, -1:
+ for alpha = 0, 90:
+ beginarrow(alpha, 6/5, ifneg(3/2, 1) * arrow_spread#);
+ if sign > 0: "left right" else: "right left" fi & " bidirectional wave arrow (" & decimal alpha & ")";
+ thick := line_thickness;
+
+ z0 = foot;
+ z1 = 4/22[foot,head];
+ z2 = 6/22[foot,head] + sign * 1/8arrow_spread * dir (alpha + 90);
+ z3 = 8/22[foot,head] + sign * 1/4arrow_spread * dir (alpha + 90);
+ z4 = 11/22[foot,head];
+ z5 = 14/22[foot,head] - sign * 1/4arrow_spread * dir (alpha + 90);
+ z6 = 16/22[foot,head] - sign * 1/8arrow_spread * dir (alpha + 90);
+ z7 = 18/22[foot,head];
+ z8 = head;
+
+ penpos0(thick, alpha - 90);
+ penpos1(thick, alpha - 90);
+ penpos2(thick, alpha - 90 + sign * 35);
+ penpos3(thick, alpha - 90);
+ penpos4(thick, alpha - 90 - sign * 55);
+ penpos5(thick, alpha - 90);
+ penpos6(thick, alpha - 90 + sign * 35);
+ penpos7(thick, alpha - 90);
+ penpos8(thick, alpha - 90);
+
+ penlabels(0,1,2,3,4,5,6,7,8);
+
+ fill stroke z0e. -- z1.e{dir alpha} .. z2.e{dir (alpha + sign * 35)} .. z3.e{dir alpha} .. z4.e{dir (alpha - sign * 55)} .. z5.e{dir alpha} ... z6.e{dir (alpha + sign * 35)} .. {dir alpha}z7.e -- z8.e;
+ draw_arrowhead(z0, alpha + 180, arrow_spread, thick);
+ draw_arrowhead(z8, alpha, arrow_spread, thick);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 70, 70);
+ fi
+ endchar;
+ endfor;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 1, ifneg(3/2,1) * arrow_spread#); "right bend arrow (" & decimal alpha & ")";
+ thick := line_thickness;
+
+ z0 = foot - 1/4arrow_spread * dir (alpha + 90);
+ z1 = 9/20[foot,head] + 1/4arrow_spread * dir (alpha + 90);
+ z2 = 19/20[foot,head] - 1/2arrow_spread * dir (alpha + 90);
+
+ penpos0(thick, alpha - 35);
+ penpos1(thick, alpha - 90);
+ penpos2(thick, alpha - 150);
+
+ fill stroke z0.e{dir (alpha + 55)} .. z1.e .. {dir (alpha - 60)}z2.e;
+ draw_arrowhead(z2, alpha - 50, arrow_spread, thick);
+
+ if negated:
+ stroke_through_arrow(1/10[z1,z2] + 1/8arrow_spread * dir (alpha - 90), alpha, 3/2arrow_spread)(80, 80, 80, 80, 80, 80, 80, 80);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 1, ifneg(3/2,1) * arrow_spread#); "left bend arrow (" & decimal alpha & ")";
+ thick := line_thickness;
+
+ z0 = foot + 1/4arrow_spread * dir (alpha + 90);
+ z1 = 9/20[foot,head] - 1/4arrow_spread * dir (alpha + 90);
+ z2 = 19/20[foot,head] + 1/2arrow_spread * dir (alpha + 90);
+
+ penpos0(thick, alpha + 35);
+ penpos1(thick, alpha + 90);
+ penpos2(thick, alpha + 150);
+
+ fill stroke z0.e{dir (alpha - 55)} .. z1.e .. {dir (alpha + 60)}z2.e;
+ draw_arrowhead(z2, alpha + 50, arrow_spread, thick);
+
+ if negated:
+ stroke_through_arrow(1/10[z1,z2] + 1/8arrow_spread * dir (alpha + 90), alpha, 3/2arrow_spread)(110, 110, 110, 110, 110, 110, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270, 45, 135, 225, 315:
+ beginarrow(alpha, 6/5, ifneg(3/2,1) * arrow_spread#); "bidirectional bend arrow (" & decimal alpha & ")";
+ thick := line_thickness;
+
+ z0 = 1/20[foot,head] - 1/2arrow_spread * dir (alpha + 90);
+ z1 = 1/2[foot,head] + 1/4arrow_spread * dir (alpha + 90);
+ z2 = 19/20[foot,head] - 1/2arrow_spread * dir (alpha + 90);
+
+ penpos0(thick, alpha - 30);
+ penpos1(thick, alpha - 90);
+ penpos2(thick, alpha - 150);
+
+ fill stroke z0.e{dir (alpha + 60)} .. z1.e .. {dir (alpha - 60)}z2.e;
+ draw_arrowhead(z0, alpha + 230, arrow_spread, thick);
+ draw_arrowhead(z2, alpha - 50, arrow_spread, thick);
+
+ if negated:
+ stroke_through_arrow(z1 + 1/8arrow_spread * dir (alpha - 90), alpha, 3/2arrow_spread)(80, 80, 100, 100, 80, 80, 100, 100);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 1, ifneg(3/2,1) * arrow_spread#); "headless arrow with foot (" & decimal alpha & ")";
+ draw_line(foot_ex, head_ex, false);
+ draw_line(foot - 1/2arrow_spread * dir (alpha + 90), foot + 1/2arrow_spread * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ for alpha = 0, 90, 180, 270:
+ beginoperator(large_op_size#, 1);
+ if sign > 0: "right" else: "left" fi & " circle arrow (" & decimal alpha & ")";
+
+ thick := line_thickness;
+ r := (w - 2side_bearing)/2 - arrow_spread/3;
+
+ for i = 0 upto 7:
+ z[i] = centre + r * dir (alpha + i/8 * 360);
+ penpos[i](thick, alpha + i/8 * 360);
+ endfor;
+
+ z0' = centre + r * dir (alpha + 10);
+ penpos0'(thick, alpha + 10);
+ z0'' = centre + r * dir (alpha - 10);
+ penpos0''(thick, alpha - 10);
+
+ penlabels(0',0'',1,2,3,4,5,6,7);
+
+ fill stroke z0'.e{dir (alpha + 100)} .. z1.e .. z2.e .. z3.e .. z4.e .. z5.e .. z6.e .. z7.e .. {dir (alpha + 80)}z0''.e;
+
+ if sign > 0:
+ draw_arrowhead(z0'', (alpha + 65), arrow_spread, thick);
+ else:
+ draw_arrowhead(z0', (alpha - 65), arrow_spread, thick);
+ fi;
+
+ if negated:
+ 1/2[z8,z9] = centre;
+ if (alpha = 90) or (alpha = 270):
+ y8 - y9 = large_op_size * sind 45;
+ z8 - z9 = whatever * dir 40;
+ else:
+ y8 - y9 = large_op_size;
+ z8 - z9 = whatever * dir 80;
+ fi
+
+ draw_straight(z8, z9, stroke_through_thickness, false);
+ fi
+ endchar;
+ endfor;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginarrow(alpha, 6/5, ifneg(21/10, 14/10) * arrow_spread#+line_thickness#/2); "triple arrow (" & decimal alpha & ")";
+ z1 - z0 = z2 - z1 = 2/3equal_spread * dir (alpha + 90);
+ z1 = foot_ex;
+ z4 - z3 = z5 - z4 = 2/3equal_spread * dir (alpha + 90);
+ z4 = head_ex;
+
+ draw_straight(z0, arrowhead_intersection(head, alpha, 3/2arrow_spread, z0 -- z3), 4/5line_thickness, false);
+ draw_straight(z1, arrowhead_intersection(head, alpha, 3/2arrow_spread, z1 -- z4), 4/5line_thickness, false);
+ draw_straight(z2, arrowhead_intersection(head, alpha, 3/2arrow_spread, z2 -- z5), 4/5line_thickness, false);
+ draw_arrowhead(head, alpha, 3/2arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - arrow_spread * dir alpha], alpha, 21/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(3/2, 1) * arrow_spread#); "long single arrow (" & decimal alpha & ")";
+ draw_line(foot_ex, head, false);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(19/10, 13/10) * arrow_spread#); "long double arrow (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot_ex;
+ 1/2[z2,z3] = head;
+
+ draw_line(z0, arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(z1, arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - arrow_spread * dir alpha], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0:
+ beginarrow(alpha, 2, ifneg(3/2, 1) * arrow_spread#); "long bidirectional arrow (" & decimal alpha & ")";
+ draw_line(foot, head, false);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+ draw_arrowhead(foot, alpha+180, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0:
+ beginarrow(alpha, 2, ifneg(19/10, 13/10) * arrow_spread#); "long double bidirectional arrow (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot;
+ 1/2[z2,z3] = head;
+
+ draw_line(arrowhead_intersection(foot, alpha+180, 13/10arrow_spread, z0 -- z2), arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(arrowhead_intersection(foot, alpha+180, 13/10arrow_spread, z1 -- z3), arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
+ draw_arrowhead(foot, alpha+180, 13/10arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(3/2, 1) * arrow_spread#); "long arrow with foot (" & decimal alpha & ")";
+ draw_line(foot, head, false);
+ draw_line(foot - 1/2arrow_spread * dir (alpha + 90), foot + 1/2arrow_spread * dir (alpha + 90), true);
+ draw_arrowhead(head, alpha, arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(19/10, 13/10) * arrow_spread#); "long double arrow with foot (" & decimal alpha & ")";
+ z1 - z0 = z3 - z2 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot_ex;
+ 1/2[z2,z3] = head;
+
+ draw_line(z0, arrowhead_intersection(head, alpha, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(z1, arrowhead_intersection(head, alpha, 13/10arrow_spread, z1 -- z3), false);
+ draw_line(foot - 13/20arrow_spread * dir (alpha + 90), foot + 13/20arrow_spread * dir (alpha + 90), true);
+ draw_arrowhead(head, alpha, 13/10arrow_spread, line_thickness);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - arrow_spread * dir alpha], alpha, 19/10arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(3/2, 1) * arrow_spread#); "long wave arrow (" & decimal alpha & ")";
+ thick := line_thickness;
+ sign := if alpha > 0: 1 else: -1 fi;
+
+ z0 = foot - 1/8arrow_spread * up;
+ z1 = 4/43[foot,head] + 1/4arrow_spread * up;
+ z2 = 7/43[foot,head];
+ z3 = 10/43[foot,head] - 1/4arrow_spread * up;
+ z4 = 13/43[foot,head];
+ z5 = 16/43[foot,head] + 1/4arrow_spread * up;
+ z6 = 19/43[foot,head];
+ z7 = 22/43[foot,head] - 1/4arrow_spread * up;
+ z8 = 25/43[foot,head];
+ z9 = 28/43[foot,head] + 1/4arrow_spread * up;
+ z10 = 31/43[foot,head];
+ z11 = 34/43[foot,head] - 1/4arrow_spread * up;
+ z12 = 36/43[foot,head] - 1/8arrow_spread * up;
+ z13 = 38/43[foot,head];
+ z14 = head;
+
+ penpos0(thick, sign * 35);
+ penpos1(thick, sign * 90);
+ penpos2(thick, sign * 145);
+ penpos3(thick, sign * 90);
+ penpos4(thick, sign * 35);
+ penpos5(thick, sign * 90);
+ penpos6(thick, sign * 145);
+ penpos7(thick, sign * 90);
+ penpos8(thick, sign * 35);
+ penpos9(thick, sign * 90);
+ penpos10(thick, sign * 145);
+ penpos11(thick, sign * 90);
+ penpos12(thick, sign * 45);
+ penpos13(thick, sign * 90);
+ penpos14(thick, sign * 90);
+
+ penlabels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14);
+
+ fill stroke z0e{dir (sign * 35 + 90)} .. z1.e{dir (sign * 90 + 90)} .. z2.e{dir (sign * 145 + 90)} .. z3.e{dir (sign * 90 + 90)} .. z4.e{dir (sign * 35 + 90)} .. z5.e{dir (sign * 90 + 90)} .. z6.e{dir (sign * 145 + 90)} .. z7.e{dir (sign * 90 + 90)} .. z8.e{dir (sign * 35 + 90)} .. z9.e{dir (sign * 90 + 90)} .. z10.e{dir (sign * 145 + 90)} .. z11.e{dir (sign * 90 + 90)} .. z12.e{dir (sign * 45 + 90)} .. {dir (sign * 90 + 90)}z13.e -- z14.e;
+ draw_arrowhead(z14, alpha, arrow_spread, thick);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head - 1/2arrow_spread * dir alpha], alpha, 3/2arrow_spread)(70, 70, 70, 70, 70, 70, 70, 70);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginarrow(alpha, 2, ifneg(3/2,1) * arrow_spread#); "long headless arrow with foot (" & decimal alpha & ")";
+ draw_line(foot_ex, head_ex, false);
+ draw_line(foot - 1/2arrow_spread * dir (alpha + 90), foot + 1/2arrow_spread * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(1/2[foot, head], alpha, 3/2arrow_spread)(70, 70, 110, 110, 70, 70, 110, 110);
+ fi
+ endchar;
+endfor;
+
+if not negated:
+ for sign = 1, -1:
+ beginsymbol(4/3arrow_spread# + line_thickness# + 2side_bearing#, vcentre(2arrow_spread# + line_thickness#)); "left shift";
+ y0 = y1 = h - 1/2arrow_spread - 1/2line_thickness;
+ y2 = -d + 1/2line_thickness;
+ 1/2[x0,x1] = w/2;
+ x1 - x0 = sign * 4/3arrow_spread;
+ x2 = x1;
+
+ draw_line(z2, z1, true);
+ draw_line(z1, z0, false);
+ draw_arrowhead(z0, 90 + sign * 90, arrow_spread, line_thickness);
+ endchar;
+ endfor;
+
+ for sign = 1, -1:
+ beginsymbol(4/3arrow_spread# + line_thickness# + 2side_bearing#, vcentre(2arrow_spread# + line_thickness#)); "left down shift";
+ y0 = y1 = -d + 1/2arrow_spread + 1/2line_thickness;
+ y2 = h - 1/2line_thickness;
+ 1/2[x0,x1] = w/2;
+ x1 - x0 = sign * 4/3arrow_spread;
+ x2 = x1;
+
+ draw_line(z2, z1, true);
+ draw_line(z1, z0, false);
+ draw_arrowhead(z0, 90 + sign * 90, arrow_spread, line_thickness);
+ endchar;
+ endfor;
+
+ for sign = -1, 1:
+ beginsymbol(arrow_diag_len# + 2side_bearing#, vcentre(arrow_diag_len#)); "loop arrow";
+ thick := line_thickness;
+ arrow_len := arrow_diag_len;
+ pair centre;
+ centre := (w/2, (h-d)/2);
+
+ z0 = centre + sign * (arrow_len - line_thickness)/2 * left;
+ z1 = centre + arrow_len/2 * down;
+ z2 = centre + (arrow_len - line_thickness)/4 * up;
+ z3 = centre + sign * (arrow_len - line_thickness)/4 * right;
+ z4 = centre + (arrow_len - line_thickness) * (1/4sign, 1/2);
+ z5 = centre + (arrow_len - line_thickness) * (1/2sign, 1/4);
+
+ penpos0(thick, - sign * 90);
+ penpos1(thick, 180);
+ penpos2(thick, 180);
+ penpos3(thick, - sign * 90);
+ penpos4(thick, sign * 90);
+ penpos5(thick, 0);
+
+ fill stroke z0e -- z3e{sign * right} .. {up}z5e .. {sign * left}z4e .. {down}z2e -- z1e;
+ draw_arrowhead(z0, 90 + sign * 90, arrow_spread, thick);
+
+ penlabels(0,1,2,3,4,5);
+ endchar;
+ endfor;
+fi
diff --git a/fonts/mdsymbol/source/mdbase.mf b/fonts/mdsymbol/source/mdbase.mf
new file mode 100644
index 0000000000..5a3a9c7889
--- /dev/null
+++ b/fonts/mdsymbol/source/mdbase.mf
@@ -0,0 +1,1016 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+design_size := 10;
+font_size design_size * pt#;
+
+if known ps_output:
+ font_version := "2.000";
+ font_comment := "Copyright (c) 2012, Sebastian Schubert. This Font Software is licensed under the SIL Open Font License, Version 1.1.";
+fi
+
+u# := 0.57pt#;
+cap_height# := 6.74pt#; %7.37pt#;
+asc_height# := 7.10pt#; % 8.56pt#;
+desc_depth# := 1.98pt#; % 2.94pt#;
+x_height# := 4.84pt#;
+math_axis# := 2.75pt#;
+if weight_index = 0: % Light
+ line_thickness# := 0.40pt#;
+ letter_line_thickness# := 0.40pt#;
+ dot_size# := line_thickness#;
+elseif weight_index = 1: % Regular
+ line_thickness# := 0.68pt#;
+ letter_line_thickness# := 0.73pt#;
+ dot_size# := line_thickness#;
+elseif weight_index = 2: % Semibold
+ line_thickness# := 0.93pt#;
+ letter_line_thickness# := 1.01pt#;
+ dot_size# := 0.85pt#;
+else: % Bold
+ line_thickness# := 1.14pt#;
+ letter_line_thickness# := 1.25pt#;
+ dot_size# := 1.0pt#;
+fi;
+
+side_bearing# := 1.u#;
+small_op_size# := 8u#; % radius of small operators
+med_op_size# := 12.5u#; % radius of medium operators
+plus_size# := 9u#;
+large_op_size# := 18u#; % radius of large operators
+order_width# := 8u#; % width of equal sign
+turnstile_width# := 11u#; % width of turnstile symbols
+equal_spread# := .7math_axis#; % distance between the lines of the equal sign
+greater_spread# := 10/4equal_spread#; % distance between the ends of the greater sign
+arrow_horiz_len# := 12.5u#; % length of horizontal arrows
+arrow_vert_len# := 12.5u#; % length of vertical arrows
+arrow_diag_len# := 1/2(arrow_horiz_len# + arrow_vert_len#);
+arrow_spread# := 1.6equal_spread#;
+delim_height# := 4.9pt#; % half the height of normal delimiters
+bigop_height# := 10.7pt#; % height of big operators
+accent_height# := x_height# + 1.u#; % height of accents
+accent_thickness# := 4/5line_thickness#;
+rule_thickness# := line_thickness#;
+
+mode_setup;
+
+define_pixels(u, asc_height, cap_height, desc_depth, delim_height, bigop_height, x_height);
+define_whole_pixels(dot_size, small_op_size, med_op_size, large_op_size, plus_size,
+ order_width, turnstile_width, equal_spread, greater_spread,
+ arrow_horiz_len, arrow_vert_len, arrow_diag_len, arrow_spread);
+
+if known ps_output:
+ define_pixels(math_axis, line_thickness, letter_line_thickness, rule_thickness, side_bearing, accent_height, accent_thickness);
+else:
+ math_axis := good.y(math_axis# * hppp);
+ line_thickness := ceiling(line_thickness# * hppp);
+ letter_line_thickness := ceiling(letter_line_thickness# * hppp);
+ rule_thickness := ceiling(rule_thickness# * hppp);
+ side_bearing := ceiling(side_bearing# * hppp);
+ accent_height := ceiling(accent_height# * hppp);
+ accent_thickness := ceiling(accent_thickness# * hppp);
+fi
+
+stroke_through_thickness := 4/5line_thickness;
+bop_thickness_fac := 1.; % make big operators that much thicker
+ % (including sum and integral)
+
+% Macros
+
+def ppos_cut(suffix $)(expr a, b) =
+ ppos_cut_linethick($)(line_thickness, a, b);
+enddef;
+
+def ppos_cut_linethick(suffix $)(expr lt, a, b) =
+ if sind(a-b) = 0 :
+ penpos$(lt,0);
+ else:
+ penpos$(lt/abs(sind(a-b)),b);
+ fi
+enddef;
+
+
+% Redefine clockwise and counterclockwise (turningnumber seems more stable)
+if known ps_output:
+ vardef counterclockwise primary p =
+ (if turningnumber p>0: p else: (reverse p) fi)
+ enddef;
+
+ vardef clockwise primary p =
+ (if turningnumber p<0: p else: (reverse p) fi)
+ enddef;
+fi
+
+% Selects the n-th element of a list
+def select(expr n)(text values) =
+ begingroup;
+ i := 0;
+ for v = values:
+ result := v;
+ exitif i = n;
+ i := i + 1;
+ endfor;
+ result
+ endgroup
+enddef;
+
+% Splits a length at the math axis
+def vcentre(expr size) =
+ size/2 + math_axis#, size/2 - math_axis#
+enddef;
+
+current_char := -1;
+
+def beginsymbol(expr width, height, depth) =
+ current_char := current_char + 1;
+ beginchar(current_char, width, height, depth);
+ if not known ps_output:
+ proofrule((side_bearing, math_axis),(w - side_bearing, math_axis));
+ proofrule((side_bearing, h),(side_bearing, -d));
+ proofrule((w - side_bearing, h),(w - side_bearing, -d));
+ fi
+enddef;
+
+def beginoperator(expr size, ratio) =
+ beginsymbol(size + 2side_bearing#, vcentre(ratio * size));
+ pair centre;
+ centre := (w/2, (h-d)/2);
+ radius := w/2 - side_bearing - 1/2line_thickness;
+enddef;
+
+def beginbigop(expr xscale, yscale) =
+ beginsymbol(xscale * 3/2order_width# + 2side_bearing#, vcentre(yscale * bigop_height#));
+ pair centre;
+ centre := (w/2, (h-d)/2);
+ op_width := xscale * 3/2order_width;
+ op_height := yscale * bigop_height;
+enddef;
+
+def beginsquarebigop(expr xscale, yscale) =
+ beginsymbol(xscale * bigop_height# + 2side_bearing#, vcentre(yscale * bigop_height#));
+ pair centre;
+ centre := (w/2, (h-d)/2);
+ op_width := xscale * bigop_height;
+ op_height := yscale * bigop_height;
+enddef;
+
+def beginarrow(expr angle, scale, spread) =
+ arrow_len# := scale *
+ if angle mod 180 = 0: arrow_horiz_len#
+ elseif angle mod 180 = 90: arrow_vert_len#
+ else: arrow_diag_len#
+ fi;
+ arrow_len := scale *
+ if angle mod 180 = 0: arrow_horiz_len
+ elseif angle mod 180 = 90: arrow_vert_len
+ else: arrow_diag_len
+ fi;
+
+ beginsymbol(arrow_len# * abs(cosd(angle)) + (spread + line_thickness#) * abs(sind(angle)) + 2side_bearing#, vcentre(arrow_len# * abs(sind(angle)) + (spread + line_thickness#) * abs(cosd(angle))));
+ pair centre, head, head_ex, foot, foot_ex;
+
+ centre := (w/2, (h-d)/2);
+ head := centre + (arrow_len - line_thickness)/2 * dir angle;
+ head_ex := centre + arrow_len/2 * dir angle;
+ foot := centre - (arrow_len - line_thickness)/2 * dir angle;
+ foot_ex := centre - arrow_len/2 * dir angle;
+enddef;
+
+def beginorder(expr sign, width, spread) =
+ beginsymbol(width + 2side_bearing#, vcentre(spread + line_thickness#));
+ pair centre, left_ex, right_ex, left_point, right_point;
+ centre := (w/2, (h-d)/2);
+ left_ex := centre - sign * (w/2 - side_bearing) * right;
+ left_point := centre - sign * (w/2 - side_bearing - line_thickness/2) * right;
+ right_ex := centre + sign * (w/2 - side_bearing) * right;
+ right_point := centre + sign * (w/2 - side_bearing - line_thickness/2) * right;
+enddef;
+
+def beginturnstile(expr angle, scale) =
+ beginsymbol(abs(sind(angle) + scale * cosd(angle)) * turnstile_width# + 2side_bearing#, abs(min(scale, 1 + (scale - 1)/2) * sind(angle) + cosd(angle)) * cap_height#, abs(max(0, (scale - 1)/2) * sind(angle)) * cap_height#);
+ pair foot;
+
+ if angle mod 180 = 0:
+ len := scale * turnstile_width;
+ spread := cap_height - line_thickness;
+ else:
+ len := scale * cap_height;
+ spread := turnstile_width - line_thickness;;
+ fi
+ foot = (w/2, (h - d)/2) - (len - line_thickness)/2 * dir angle;
+enddef;
+
+def beginaccent(expr width, addheight) =
+ thick := accent_thickness;
+ beginsymbol(width, accent_height# + addheight, 0);
+enddef;
+
+% Strokes a pen path
+vardef stroke text t =
+ forsuffixes e = l, r:
+ path_.e := t;
+ endfor
+ path_.r -- reverse path_.l -- cycle
+enddef;
+
+% Shapes
+
+def circle(expr centre, radius) =
+ (centre + radius * right){up} ...
+ (centre + radius * dir 45){dir 135} ...
+ (centre + radius * up){left} ...
+ (centre + radius * dir 135){dir 225} ...
+ (centre + radius * left){down} ...
+ (centre + radius * dir 225){dir 315} ...
+ (centre + radius * down){right} ...
+ (centre + radius * dir 315){dir 45} ...
+ cycle
+enddef;
+
+def square(expr centre, radius, angle) =
+ (centre + sqrt(2) * radius * dir (angle + 45)) --
+ (centre + sqrt(2) * radius * dir (angle + 135)) --
+ (centre + sqrt(2) * radius * dir (angle + 225)) --
+ (centre + sqrt(2) * radius * dir (angle + 315)) --
+ cycle
+enddef;
+
+def triangle(expr centre, radius, angle) =
+ (centre + radius * dir angle) --
+ (centre + radius * dir (angle + 120)) --
+ (centre + radius * dir (angle + 240)) --
+ cycle
+enddef;
+
+def reg_poly_points(suffix $)(expr n, centre, radius, angle) =
+ for i = 0 upto n-1:
+ z$[i] = centre + radius * dir (angle + i/n * 360);
+ endfor;
+enddef;
+
+def dot(expr centre, radius) =
+ circle(centre, radius)
+enddef;
+
+% Draw macros
+
+def draw_straight(expr orig, dest, thick, extend) =
+ begingroup;
+ pair p[].l, p[].r;
+
+ theta := angle (dest - orig);
+ if extend:
+ 1/2[p1.l,p1.r] = orig - 1/2thick * dir theta;
+ 1/2[p2.l,p2.r] = dest + 1/2thick * dir theta;
+ else:
+ 1/2[p1.l,p1.r] = orig;
+ 1/2[p2.l,p2.r] = dest;
+ fi
+ p1.l - p1.r = p2.l - p2.r = thick * dir (theta + 90);
+ fill stroke p1.e -- p2.e;
+ endgroup;
+enddef;
+
+def draw_line(expr orig, dest, extend) =
+ draw_straight(orig, dest, line_thickness, extend);
+enddef;
+
+def draw_line_linethick(expr orig, dest, lt, extend) =
+ draw_straight(orig, dest, lt, extend);
+enddef;
+
+def draw_line_cut_linethick(suffix $, $$)(expr lt)=
+ if (abs(angle(z$-z$$))<45) or (abs(angle(z$-z$$))>135) :
+ ppos_cut_linethick($)(lt,angle(z$-z$$),90);
+ ppos_cut_linethick($$)(lt,angle(z$-z$$),90);
+ else:
+ ppos_cut_linethick($)(lt,angle(z$-z$$),0);
+ ppos_cut_linethick($$)(lt,angle(z$-z$$),0);
+ fi
+ penstroke z$e .. z$$e;
+ penlabels($,$$);
+enddef;
+
+def draw_line_cut(suffix $, $$)=
+ draw_line_cut_linethick($,$$)(line_thickness);
+enddef;
+
+def draw_circle(expr centre, radius, thick) =
+ fill circle(centre, radius + 1/2thick);
+ unfill circle(centre, radius - 1/2thick);
+enddef;
+
+def filldraw_circle(expr centre, radius, thick) =
+ fill circle(centre, radius + 1/2thick);
+enddef;
+
+def draw_square(expr centre, radius, angle, thick) =
+ fill square(centre, radius + 1/2thick, angle);
+ unfill square(centre, radius - 1/2thick, angle);
+enddef;
+
+def filldraw_square(expr centre, radius, angle, thick) =
+ fill square(centre, radius + 1/2thick, angle);
+enddef;
+
+def draw_triangle(suffix $)(expr centre, radius, angle, thick) =
+ fill triangle(centre, radius + thick, angle);
+ unfill triangle(centre, radius - thick, angle);
+enddef;
+
+def filldraw_triangle(suffix $)(expr centre, radius, angle, thick) =
+ fill triangle(centre, radius + thick, angle);
+enddef;
+
+def draw_sim(suffix $)(expr lc, rc, spread, thick) =
+ theta := angle (length(rc - lc), 10spread);
+ signum := cosd (angle (rc - lc)) + sind (angle (lc - rc));
+
+ z0$.l = lc;
+ z4$.r = rc;
+ z2$ = 1/2[lc, rc];
+ z4$.r = rc;
+ 1/2[z1$,z3$] = z2$;
+ z1$ = 1/4[lc, rc] + 1/6thick * dir (angle (rc - lc)) +
+ signum * spread * dir (angle (rc - lc) + 90);
+
+ penpos0$(thick, angle(rc - lc) - signum * (90 - theta));
+ penpos1$(thick, angle(rc - lc) - signum * 90);
+ penpos2$(thick, angle(rc - lc) - signum * (theta + 90 - 5));
+ penpos3$(thick, angle(rc - lc) - signum * 90);
+ penpos4$(thick, angle(rc - lc) - signum * (90 - theta));
+
+ fill stroke z0$.e{dir (angle(rc - lc) + signum * theta)} .. {dir angle(rc - lc)}z1$.e .. {dir (angle(rc - lc) - signum * (theta - 5))}z2$.e .. {dir angle(rc - lc)}z3$.e .. {dir (angle(rc - lc) + signum * theta)}z4$.e;
+
+ penlabels(0$,1$,3$,4$);
+enddef;
+
+def draw_bump(suffix $)(expr sign, lc, rc, rad, thick) =
+ z0$ = lc;
+ z1$ = rc;
+ z2$ = 1/2[lc, rc] + sign * rad * dir (angle (rc - lc) + 90);
+ z3$ = 1/2[lc, rc] - rad * dir (angle (rc - lc));
+ 1/2[z3$,z4$] = 1/2[lc, rc];
+
+ penpos0$(thick, angle (rc - lc) + sign * 90);
+ penpos1$(thick, angle (rc - lc) + sign * 90);
+ penpos2$(thick, angle (rc - lc) + sign * 90);
+ penpos3$(thick, angle (rc - lc));
+ penpos4$(thick, angle (rc - lc));
+
+ z5$ = z3$.r;
+ z6$ = z4$.l;
+
+ penpos5$(thick, angle (rc - lc) + sign * 90);
+ penpos6$(thick, angle (rc - lc) + sign * 90);
+
+ path p$, q$;
+ numeric s$, t$;
+
+ p$ = z3$.l{dir (angle(rc - lc) + sign * 90)} .. {rc - lc}z2$.r;
+ q$ = z2$.r{rc - lc} .. {dir (angle(rc - lc) - sign * 90)}z4$.r;
+ s$ = xpart (p$ intersectiontimes (z0$.r -- z1$.r));
+ t$ = xpart (q$ intersectiontimes (z0$.r -- z1$.r));
+
+ fill z0$.r -- point s$ of p$ & subpath (s$,1) of p$ & subpath (0,t$) of q$ & point t$ of q$ -- z1$.r -- z1$.l -- z6$l. -- z6${dir (angle (rc - lc) + sign * 90)} .. z2$.l{lc - rc} .. {dir (angle (rc - lc) - sign * 90)}z5$ -- z5$.l -- z0$.l -- cycle;
+
+ penlabels(0$,1$,2$,3$,4$,5$,6$);
+enddef;
+
+def draw_less(suffix $)(expr lc, rc, spread, thick, closed, straight) =
+ put_less($)(lc, rc, spread, thick, closed, straight);
+ fill z0$.l -- z3$.l -- z4$.l -- z1$.l -- z1$.r -- z5$ -- z0$.r -- cycle;
+
+ if closed:
+ fill z0$.l -- z6$.l -- z7$.l -- z1$.l -- z7$.r -- z6$.r -- cycle;
+ fi;
+enddef;
+
+def put_less(suffix $)(expr lc, rc, spread, thick, closed, straight) =
+ theta := angle((length(rc - lc) - thick/2) * right + spread/2 * up);
+
+ z2$ = lc + 1/2thick * dir (angle (rc - lc));
+ 1/2[z0$.r,z1$.r] = rc;
+ z0$ = z2$ + whatever * dir (angle (rc - lc) + theta);
+ z1$ = z2$ + whatever * dir (angle (rc - lc) - theta);
+
+ if straight:
+ penpos0$(thick/cosd(theta), angle(rc - lc) - 90);
+ penpos1$(thick/cosd(theta), angle(rc - lc) + 90);
+ else:
+ penpos0$(thick, angle(rc - lc) - 90 + theta);
+ penpos1$(thick, angle(rc - lc) + 90 - theta);
+ fi;
+ penpos3$(thick, angle(rc - lc) - 90 + theta);
+ penpos4$(thick, angle(rc - lc) + 90 - theta);
+
+ z3$.l = z0$.l + whatever * (z2$ - z0$);
+ z4$.l = z1$.l + whatever * (z2$ - z1$);
+ 1/2[z3$.l,z4$.l] = lc;
+ z5$ = z0$.r + whatever * (z2$ - z0$);
+ z5$ = z1$.r + whatever * (z2$ - z1$);
+
+ if closed:
+ penpos6$(thick, angle(rc - lc));
+ penpos7$(thick, angle(rc - lc));
+ z6$.l = whatever[z0$.l,z3$.l];
+ z6$.r = whatever[z0$.r,z1$.r];
+ z7$.l = whatever[z1$.l,z4$.l];
+ z7$.r = whatever[z0$.r,z1$.r];
+ fi;
+
+ penlabels(0$,1$,3$,4$,5$,6$,7$);
+enddef;
+
+def draw_prec(suffix $)(expr lc, rc, spread, thick, closed) =
+ theta := 43;
+
+ z0$ - z1$ = spread * dir (angle (rc - lc) + 90);
+ 1/2[z0$.r,z1$.l] = rc;
+ z2$ = lc;
+ z2$' = lc + 1/2thick * dir angle(rc - lc);
+
+ penpos0$(thick, angle(rc - lc) - theta);
+ penpos1$(thick, angle(rc - lc) + 180 + theta);
+ penpos2$(thick, angle(rc - lc) - 90);
+ penpos2$'(thick, angle(rc - lc) - 90);
+
+ fill stroke z2$.e -- z2$'.e{dir angle(rc - lc)} .. {dir (angle (rc - lc) + 90 - theta)}z0$.e;
+ fill stroke z2$.e -- z2$'.e{dir angle(rc - lc)} .. {dir (angle (rc - lc) - 90 + theta)}z1$.e;
+
+ if closed:
+ z3$ = point 1/2 of (z0${dir (angle (rc - lc) - 90 - theta + 10)}
+ .. {dir (angle (rc - lc) - 90 + theta - 10)}z1$);
+ penpos3$(thick, angle(rc - lc));
+
+ fill z0$.l .. z3$.l .. z1$.r -- z1$.l .. z3$.r .. z0$.r -- cycle;
+ fi;
+
+ penlabels(0$,1$,2$,3$);
+enddef;
+
+def draw_subset(suffix $)(expr lc, rc, spread, thick) =
+ 1/2[z0$,z1$] = rc;
+ 1/2[z2$,z3$] = (4spread / 9abs(rc - lc))[z4$, rc];
+ z0$ - z1$ = z2$ - z3$ = spread * dir (angle (rc - lc) + 90);
+ z4$ = lc + 1/2thick * dir (angle (rc - lc));
+
+ penpos0$(thick, angle(rc - lc) - 90);
+ penpos1$(thick, angle(rc - lc) + 90);
+ penpos2$(thick, angle(rc - lc) - 90);
+ penpos3$(thick, angle(rc - lc) + 90);
+ penpos4$(thick, angle(rc - lc));
+
+ fill stroke z0$.e -- z2$.e{lc - rc} .. z4$.e .. {rc - lc}z3$.e -- z1$.e;
+
+ penlabels(0$,1$,2$,3$,4$)
+enddef;
+
+def draw_smile(suffix $)(expr sign, lc, rc, spread, thick, round) =
+ z0$ = lc + sign * 1/2spread * dir (angle(rc - lc) + 90) +
+ whatever * (rc - lc);
+ z0$.l = lc + whatever * dir (angle(rc - lc) + 90);
+ z1$ = rc + sign * 1/2spread * dir (angle(rc - lc) + 90) +
+ whatever * (rc - lc);
+ z1$.l = rc + whatever * dir (angle(rc - lc) + 90);
+ z2$ = 1/2[lc,rc] - sign * 1/2spread * dir (angle(rc - lc) + 90);
+
+ if round:
+ theta := angle (length(lc - rc), 5spread);
+ else:
+ theta := angle (length(lc - rc), 2spread);
+ fi;
+
+ penpos0$(thick, angle(rc - lc) + sign * (90 - theta));
+ penpos1$(thick, angle(rc - lc) + sign * (90 + theta));
+
+ if round:
+ penpos2$(thick, angle(rc - lc) + sign * 90);
+
+ fill stroke z0$.e{dir (angle(rc - lc) - sign * theta)} ..
+ {rc - lc}z2$.e{rc - lc} .. {dir (angle(rc - lc) + sign * theta)}z1$.e;
+ else:
+ penpos2$(thick / cosd theta, angle(rc - lc) + sign * 90);
+
+ fill stroke z0$.e -- z2$.e -- z1$.e;
+ fi;
+
+ penlabels(0$, 1$, 2$);
+enddef;
+
+def stroke_through_angle(expr pos, spread, angle) =
+ begingroup;
+ stroke_len := 1/2spread / cosd (90 - angle);
+ z100 = pos + stroke_len * dir angle;
+ z101 = pos - stroke_len * dir angle;
+ draw_line_cut_linethick(100,101)(stroke_through_thickness);
+ endgroup;
+enddef;
+
+def stroke_through(expr pos, spread) =
+ stroke_through_angle(pos, spread, 75);
+enddef;
+
+def stroke_through_arrow(expr pos, alpha, spread)(text angles) =
+ begingroup;
+ stroke_dir := alpha + select(alpha / 45)(angles);
+ stroke_len := 1/2spread / sind (stroke_dir - alpha);
+
+ z102 = pos + stroke_len * dir stroke_dir;
+ z103 = pos - stroke_len * dir stroke_dir;
+ draw_line_cut_linethick(102,103)(stroke_through_thickness);
+ endgroup;
+enddef;
+
+def put_product_points(expr centre, width, height, sign, thick) =
+ thin := thick;
+
+ z1r - z0r = z3r - z2r = width * right;
+ z2r - z0r = sign * (height - thin) * up;
+ 1/2[1/2[z0l,z1l], 1/2[z2r,z3r]] = centre;
+ z4 = z0 + min(5thin, 2/5width) * right;
+ z5 = z1 + min(5thin, 2/5width) * left;
+ z6 = 1/2[z0l,z4l];
+ z7 = 1/2[z1l,z5l];
+ x8 = 1/2[x0,x4];
+ x9 = 1/2[x1,x5];
+ y8 = y9 = y2l;
+
+ penpos0(thin, sign * 90);
+ penpos1(thin, sign * 90);
+ penpos2(thin, sign * 90);
+ penpos3(thin, sign * 90);
+ penpos4(thin, sign * 90);
+ penpos5(thin, sign * 90);
+ penpos6(thick, 0);
+ penpos7(thick, 0);
+ penpos8(thick, 0);
+ penpos9(thick, 0);
+
+ y10 = y11 = y2r - sign * 1/2[thin,thick];
+ x10 = x6r;
+ x11 = x7l;
+
+ penlabels(0,1,2,3,4,5,6,7,8,9,10,11);
+enddef;
+
+
+def draw_product(expr centre, width, height, sign, thick) =
+
+ put_product_points(centre, width, height, sign, thick)
+
+ fill z6r -- z8r -- z9l -- z7l -- z7r -- z9r -- z3l -- z3r -- z2r -- z2l -- z8l -- z6l --cycle;
+
+enddef;
+
+def draw_productintegral(expr centre, width, height, sign, thick) =
+
+ put_product_points(centre, width, height, sign, thick);
+
+ z8''=0.3[z2l,z3l];
+ z9''=0.7[z2l,z3l];
+
+ x6'=x6; y6'-y6=sign*(x6-x0+1/2thick);
+ penpos6'(sign*thick/sind(angle(z8''-z0)),0);
+ penpos8''(thick, 0);
+ penpos9''(thick, 0);
+
+ z0r = z0'r;
+ penpos0'(thick,sign*76);
+
+ z2 - z2' = sign* 1/35height * up;
+ penpos2'(thin,sign*90);
+ z8''l = z8'l;
+ penpos8'(thick,sign*90);
+
+ x7'=x7; y7'-y7=sign*(x1-x7+1/2thick);
+ penpos7'(sign*thick/sind(angle(z9''-z1)),0);
+
+ z7'' = z7' + whatever*(z1-z9'');
+ y7'' = y7;
+ penpos7''(sign*thick/sind(angle(z7'-z7'')),0);
+
+ fill z8''r -- z9''l{sign*down} .. {z1-z9''}z7'l -- z7''l -- z7''r -- z7'r{z9''-z1} .. {sign*up}z9''r -- z3l -- z3r -- z8'r{left} .. z2'r -- z2'l .. {right}z8''l{sign*down} ... {z0-z8''}z6'l{z0-z8''} ... {left}z0r -- z0'l{left} .. {right}z0l{right} ... {z8''-z0}z6'r{z8''-z0} ... {sign*up}cycle;
+
+ penlabels(0',2',6',7',7'',8',8'',9'');
+enddef;
+
+def draw_sum(suffix $)(expr centre, width, height, thick) =
+ thin := 4/5thick;
+
+ z1$l - z0$l = z3$l - z2$l = width * right;
+ z2$l - z0$l = height * up;
+ 1/2[1/2[z0$l,z1$l], 1/2[z2$l,z3$l]] = centre = z4$;
+
+ penpos0$(thin, 90);
+ penpos1$(thick, 90);
+ penpos2$(thin, -90);
+ penpos3$(thick, -90);
+
+ penpos4$(thick/sind(angle(z4$-z0$)), 0);
+
+ y5$r = y0$l + thick; y6$r = y2$l - thick;
+ z5$r = whatever[z0$r,z4$l]; z6$r = whatever[z2$r,z4$l];
+
+ penpos5$(thick/sind(angle(z4$-z0$)), 180);
+ penpos6$(thick/sind(angle(z4$-z0$)), 180);
+
+ fill z1$r -- z1$l -- z0$l -- z0$r -- z4$l -- z2$r -- z2$l -- z3$l -- z3$r -- z6$l -- z4$r -- z5$l -- cycle;
+
+ penlabels(0$,1$,2$,3$,4$,5$,6$);
+enddef;
+
+def draw_integral(suffix $)(expr scale, centre, thick) =
+ penpos0$(thick, 0);
+ penpos1$(thick, 0);
+ penpos2$(6/7thick, -90);
+ penpos3$(thick, 0);
+ penpos4$(6/7thick, -90);
+
+ z0$ = 1/2[z1$,z3$] = 1/2[z2$,z4$];
+ z1$ - z3$ = whatever * dir 79;
+ z2$ - z4$ = whatever * dir 70;
+
+ x0$ = xpart centre;
+ y2$l = h;
+ y4$r = -d;
+ y1$ = 1/2[y0$,y2$];
+
+ penpos5$(1.05*6/7thick/sind 70,-105);
+ penpos6$(1.05*6/7thick/sind 70,-105);
+
+ y5$l = y2$l - 0.2thick;
+ x5$r = 5/4[x1$, x2$] + 0.2thick;
+ y6$r = y4$r + 0.2thick;
+ x6$r = 6/4[x3$, x4$] - 0.2thick;
+
+ ucorr := max (x2$r, x1$r + 1/4thick) - x2$r;
+ x2$ := x2$ + ucorr;
+ x2$l := x2$l + ucorr;
+ x2$r := x2$r + ucorr;
+ x5$ := x5$ + ucorr;
+ x5$r := x5$r + ucorr;
+ x5$l := x5$l + ucorr;
+
+ lcorr := min (x4$l, x1$l - 1/4thick) - x4$l;
+ x4$ := x4$ + lcorr;
+ x4$l := x4$l + lcorr;
+ x4$r := x4$r + lcorr;
+ x6$ := x6$ + lcorr;
+ x6$r := x6$r + lcorr;
+ x6$l := x6$l + lcorr;
+
+ fill z5$l .. {left}z2$l{left} .. {dir angle(z0$-z1$)}z1$l -- z3$l{dir angle(z0$-z1$)} ... z4$l{left} .. z6$l -- z6$r
+ .. {right}z4$r{right} .. {dir angle(z1$-z0$)}z3$r -- z1$r{dir angle(z1$-z0$)} ... z2$r{right} .. z5$r -- cycle;
+
+ penlabels(0$,1$,2$,3$,4$,5$,6$);
+enddef;
+
+def draw_arrowhead_left(expr pos, angle, spread, thick) =
+ begingroup;
+ pair p[], p[].l, p[].r;
+
+ p1 = pos;
+ p2 = pos + sqrt(2) * (spread + thick)/2 * dir (angle + 135);
+ 1/2[p1.l, p1.r] = p1;
+ 1/2[p2.l, p2.r] = p2;
+ p1.r - p1 = thick/(2 * sind 45) * dir angle;
+ p2.r - p2 = thick/(2 * sind 45) * dir angle;
+ p3.l = whatever[p2.l,p1.l];
+ p3.l = pos + 1/2thick * dir (angle - 90) + whatever * dir angle;
+ p3.r - p1.r = whatever * dir (angle - 90);
+ p3.r = pos + 1/2thick * dir (angle - 90) + whatever * dir angle;
+ fill p1.r -- p2.r -- p2.l -- p3.l -- p3.r -- cycle;
+ endgroup;
+enddef;
+
+def draw_arrowhead_right(expr pos, angle, spread, thick) =
+ begingroup;
+ pair p[], p[].l, p[].r;
+
+ p1 = pos;
+ p2 = pos + sqrt(2) * (spread + thick)/2 * dir (angle - 135);
+ 1/2[p1.l, p1.r] = p1;
+ 1/2[p2.l, p2.r] = p2;
+ p1.r - p1 = thick/(2 * sind 45) * dir angle;
+ p2.r - p2 = thick/(2 * sind 45) * dir angle;
+ p3.l = whatever[p2.l,p1.l];
+ p3.l = pos + 1/2thick * dir (angle + 90) + whatever * dir angle;
+ p3.r - p1.r = whatever * dir (angle + 90);
+ p3.r = pos + 1/2thick * dir (angle + 90) + whatever * dir angle;
+ fill p1.r -- p3.r -- p3.l -- p2.l -- p2.r -- cycle;
+ endgroup;
+enddef;
+
+def draw_arrowhead(expr pos, angle, spread, thick) =
+ begingroup;
+ pair p[], p[].l, p[].r;
+
+ p1 = pos;
+ p2 = pos + sqrt(2) * (spread+thick)/2 * dir (angle + 135);
+ p3 = pos + sqrt(2) * (spread+thick)/2 * dir (angle - 135);
+ 1/2[p1.l, p1.r] = p1;
+ 1/2[p2.l, p2.r] = p2;
+ 1/2[p3.l, p3.r] = p3;
+ p1.r - p1 = thick/(2 * sind 45) * dir angle;
+ p2.r - p2 = thick/(2 * sind 45) * dir (angle);
+ p3.r - p3 = thick/(2 * sind 45) * dir (angle);
+
+ fill p1.r -- p2.r -- p2.l -- p1.l -- p3.l -- p3.r -- cycle;
+ endgroup;
+enddef;
+
+% intersect the arrowhead curve with a path
+def arrowhead_intersection(expr pos, angle, spread, p) =
+ (p intersectionpoint
+ ((pos + sqrt(2) * spread/2 * dir (angle + 135)) --
+ pos -- (pos + sqrt(2) * spread/2 * dir (angle - 135)))
+ )
+enddef;
+
+def draw_bracket(expr sign, thick, draw_top, draw_mid, draw_bot, draw_double) =
+ penpos0(thick, 90 - sign * 90);
+ penpos1(thick, 90 - sign * 90);
+ penpos2(thick, 90);
+ penpos3(thick, 90);
+ penpos4(thick, 90);
+ penpos5(thick, 90);
+ penpos6(thick, 0);
+ penpos7(thick, 0);
+
+ x3 - x2 = x5 - x4 = sign * (w - 2side_bearing);
+ 1/2[x2,x3] = w/2;
+
+ if draw_top:
+ y1 = h;
+ else:
+ y1 = h + 1/2line_thickness;
+ fi;
+
+ if draw_bot:
+ y0 = -d;
+ else:
+ y0 = -d - 1/2line_thickness;
+ fi;
+
+ x1 = x0;
+ z6 = 1/2[z2l,z3l] + sign * 1/2thick * right;
+ z7 = 1/2[z4r,z5r] + sign * 1/2thick * right;
+ y2l = y3l;
+ y4r = y5r;
+ z2l = z0l;
+ z4r = z1l;
+
+ if draw_mid:
+ fill stroke z0e -- z1e;
+ else:
+ if draw_bot: fill stroke z0e -- z0e + (w - 2side_bearing) * up; fi;
+ if draw_top: fill stroke z1e -- z1e + (w - 2side_bearing) * down; fi;
+ fi;
+ if draw_top: fill stroke z4e -- z5e; fi;
+ if draw_bot: fill stroke z2e -- z3e; fi;
+ if draw_double: fill stroke z6e -- z7e; fi;
+enddef;
+
+def draw_angle(suffix $)(expr shift, sign, thick) =
+ x0$ = x1$ = x2$ + sign * (w - 2side_bearing -2abs shift - thick);
+
+ top y1$ = h;
+ bot y0$ = -d;
+ 1/2[y0$,y1$] = y2$;
+ 1/2[x0$,x2$] = w/2 + shift;
+
+ theta := angle(z0$ - z2$);
+
+ penpos0$ (thick, 0);
+ penpos1$ (thick, 0);
+ penpos2$ (thick / abs(sind theta), 0);
+
+ fill stroke z0$e -- z2$e -- z1$e;
+
+ penlabels(0$, 1$, 2$);
+enddef;
+
+def draw_paren(expr sign, thick) =
+ penpos0(thick, 90 - sign * 90);
+ penpos1(thick, -90 + sign * 90);
+ penpos2(1.1thick, 90 - sign * 90);
+
+ if sign = 1:
+ x2l = side_bearing;
+ x1r = x0r = w - side_bearing;
+ else:
+ x1r = x0r = side_bearing;
+ x2l = w - side_bearing;
+ fi
+ y1.l = h;
+ y0.l = -d;
+ 1/2[y0,y1] = y2;
+
+ fill stroke z0e .. z2e .. z1e;
+
+ penlabels(0,1,2);
+enddef;
+
+def draw_brace(expr centre, size, width, alpha, thick, top_size, mid_size, bot_size) =
+ penpos1(5/6thick, alpha + 90);
+ penpos2(thick, alpha);
+ penpos2'(thick,alpha);
+ penpos3(thick, alpha);
+ penpos3'(thick,alpha);
+ penpos4(11/12thick, alpha+90);
+ penpos5(thick, alpha+180);
+ penpos5'(thick, alpha+180);
+ penpos6(thick, alpha+180);
+ penpos6'(thick, alpha+180);
+ penpos7(5/6thick, alpha+90);
+
+ z1r - z7l = size * dir (alpha + 90);
+
+ centre - 1/2[z1,z7] = z4 - centre = width/2 * dir alpha;
+
+ z0 = centre;
+
+ z3 = z0 + (1/3width + 1/2thick) * dir (alpha + 90);
+ z5 = z0 - (1/3width + 1/2thick) * dir (alpha + 90);
+
+ z2 = z0 + (size/2 - 1/3width - thick) * dir (alpha + 90);
+ z6 = z0 - (size/2 - 1/3width - thick) * dir (alpha + 90);
+
+ z3' = z0 + (mid_size/2 + 1/2line_thickness) * dir (alpha + 90);
+ z5' = z0 - (mid_size/2 + 1/2line_thickness) * dir (alpha + 90);
+
+ z2' = z0 + (size/2 - top_size - 1/2line_thickness) * dir (alpha + 90);
+ z6' = z0 - (size/2 - bot_size - 1/2line_thickness) * dir (alpha + 90);
+
+ beta := 0;
+
+ if top_size > 0:
+ fill stroke z1e{dir alpha} .. {dir (alpha - 90)}z2e -- z2'e;
+ penlabels(1,2,2');
+ elseif bot_size > 0:
+ fill stroke z7e{dir alpha} .. {dir (alpha + 90)}z6e -- z6'e;
+ penlabels(6',6,7);
+ elseif mid_size > 0:
+ fill stroke z3'e -- z3e{dir (alpha - 90)} .. {dir alpha}z4e;
+ fill stroke z5'e -- z5e{dir (alpha + 90)} .. {dir alpha}z4e;
+ penlabels(3',3,4,5,5');
+ else:
+ fill stroke z1e{dir alpha} .. z2e{dir (alpha - 90)} -- z3e{dir (alpha - 90)} .. z4e{dir alpha};
+ fill stroke z7e{dir alpha} .. {dir (alpha + 90)}z6e -- z5e{dir (alpha + 90)} .. {dir alpha}z4e;
+ penlabels(1,2,3,4,5,6,7);
+ fi;
+enddef;
+
+def draw_root(expr thick) =
+ penpos0(rule_thickness, -90);
+ penpos0'(rule_thickness, -90);
+
+ y0l = h;
+ x0 = w;
+ z0' = z0 + 1/2line_thickness * right;
+ y1 = -d;
+ x1 = 4/9w;
+ x2r = 2/9w + 1/2thick;
+ y2r = 1/2[y0, y1];
+ z1' = z1 + thick * right;
+ y6 = h;
+ z6 = z0r + thick/sind(angle(z0r - z1')) * left + whatever * (z0r - z1');
+
+ penpos2(thick/abs(sind(angle(z1'-z2r))), 0);
+ penpos3(1/2thick, angle (z1 - z2l));
+
+ z1'' = z1' - thick/abs(sind(angle(z1' - z2r))) * right;
+
+ z3l = z2r + 3/2thick * dir (angle (z1 - z2l) - 90);
+ z4 = z6 + whatever * (z0r - z1') = z2r + whatever * (z2r - z1');
+ z5 = whatever[z2l, z1''] = z3r + whatever * dir (angle (z1'' - z2l) - 90);
+
+ fill z3r -- z5 -- z1'' -- z1' -- z0r -- z0'r -- z0'l -- z6 -- z4 -- z2r -- z3l -- cycle;
+
+ penlabels (0,0',1,1',1'',2,3,4,5,6);
+enddef;
+
+def draw_root_top(expr thick) =
+ y0 = h - 1/2rule_thickness;
+ x0 = w;
+ y1 = -d;
+ x1 = x2 = 4/9w + 1/2thick;
+ y2 = h - 1/2thick;
+
+ draw_straight(z1, z2, thick, true);
+ draw_straight((x1,y0), z0, rule_thickness, true);
+enddef;
+
+def draw_root_bot(expr thick) =
+ penpos0(thick, 0);
+ penpos0'(thick, -90);
+
+ y0 = h + 1/2thick;
+ x0l = x1;
+ y1 = -d;
+ x1 = 4/9w;
+ x2r = 2/9w + 1/2thick;
+ y2r = 1/2[y0, y1];
+ z1' = z1 + whatever * right;
+ x1' = x0r;
+
+ penpos2(thick/abs(sind(angle(z1'-z2r))), 0);
+ penpos3(1/2thick, angle (z1 - z2l));
+
+ z1'' = z1' - thick/abs(sind(angle(z1' - z2r))) * right;
+
+ z3l = z2r + 3/2thick * dir (angle (z1 - z2l) - 90);
+ z4 = z0l + whatever * up = z2r + whatever * (z2l - z1);
+ z5 = whatever[z2l, z1''] = z3r + whatever * dir (angle (z1'' - z2l) - 90);
+
+ fill z3r -- z5 -- z1 -- z1' -- z0r -- z0l -- z4 -- z2r -- z3l -- cycle;
+
+ penlabels (0,1,1',1'',2,3,4,5);
+enddef;
+
+% Weierstrass macros
+
+def ellipse_set(suffix $,@,@@,$$) =
+ % given |z$,x@,z$$|, find |y@| and |z@@|
+ % such that the path |z${x@-x$,0}..z@{0,y@-y$}..{z$$-z@@}z@@|
+ % is consistent with an ellipse
+ % and such that the line |z@@--z$$| has a given |slope|
+ alpha_ := slope * (x@ - x$);
+ beta_ := y$$ - y$ - slope * (x$$ - x$);
+ gamma_ := alpha_ / beta_;
+ y@ - y$ = .5(beta_ - alpha_ * gamma_);
+ x@@ - x$ = -2gamma_ * (x@ - x$) / (1 + gamma_ * gamma_);
+ y@@ - y$$ = slope * (x@@ - x$$)
+enddef;
+
+vardef super_arc.r(suffix $,$$) =
+ % outside of super-ellipse
+
+ pair centre, corner;
+
+ if y$ = y$r:
+ centre = (x$$r, y$r);
+ corner = (x$r, y$$r);
+ else:
+ centre = (x$r, y$$r);
+ corner = (x$$r, y$r);
+ fi
+ z$.r{corner - z$.r} ... superness[centre,corner]{z$$.r - z$.r}
+ ... {z$$.r - corner}z$$.r
+enddef;
+
+vardef super_arc.l(suffix $,$$) =
+ % inside of super-ellipse
+
+ pair centre, corner;
+ if y$ = y$r:
+ centre = (x$$l, y$l);
+ corner = (x$l, y$$l);
+ else:
+ centre = (x$l, y$$l);
+ corner = (x$$l, y$l);
+ fi
+ z$l{corner - z$l} ... superness[centre,corner]{z$$l - z$l}
+ ... {z$$l - corner}z$$l
+enddef;
+
+vardef pulled_super_arc.r(suffix $,$$)(expr superpull) =
+ pair centre, corner;
+
+ if y$ = y$r:
+ centre = (x$$r, y$r);
+ corner = (x$r, y$$r);
+ else:
+ centre = (x$r, y$$r);
+ corner = (x$$r, y$r);
+ fi
+ z$r{corner - z$r} ... superness[centre,corner]{z$$r - z$r}
+ ... {z$$r - corner}z$$r
+enddef;
+
+vardef pulled_super_arc.l(suffix $,$$)(expr superpull) =
+ pair centre, corner, outer_point;
+
+ if y$ = y$r:
+ centre = (x$$l, y$l);
+ corner = (x$l, y$$l);
+ outer_point = superness[(x$$r, y$r), (x$r, y$$r)];
+ else:
+ centre = (x$l, y$$l);
+ corner = (x$$l, y$l);
+ outer_point = superness[(x$r, y$$r), (x$$r, y$r)];
+ fi
+ z$l{corner - z$l}
+ ... superpull[superness[centre,corner], outer_point]{z$$l - z$l}
+ ... {z$$l - corner}z$$l
+enddef;
+
+vardef pulled_arc@#(suffix $,$$) =
+ pulled_super_arc@#($,$$)(superpull)
+enddef;
diff --git a/fonts/mdsymbol/source/mddelims.mf b/fonts/mdsymbol/source/mddelims.mf
new file mode 100644
index 0000000000..b6164ff9b6
--- /dev/null
+++ b/fonts/mdsymbol/source/mddelims.mf
@@ -0,0 +1,616 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+% thickness factor for delimiters
+def dthick(expr scale) =
+%option 1: make symbols thicker with scale
+% sqrt sqrt scale
+%option 2: keep same thickness
+ 1
+enddef;
+
+% parenthesis
+
+lparen_char = current_char + 1;
+rparen_char = current_char + 7;
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 2.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "parenthesis";
+ draw_paren(sign, dthick(scale) * line_thickness);
+ endchar;
+ endfor;
+endfor;
+
+for sign = 1, -1:
+ beginsymbol((6 + 4.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(3delim_height#)); "parenthesis -- top";
+ thick := dthick(3) * line_thickness;
+
+ penpos1(thick, -90 + sign * 90);
+ penpos2(1.1thick, 90 - sign * 90);
+ penpos2'(1.1thick, 90 - sign * 90);
+
+ if sign = 1:
+ x2l = side_bearing;
+ x1r = w - side_bearing;
+ else:
+ x1r = side_bearing;
+ x2l = w - side_bearing;
+ fi
+ x2 = x2';
+ y1 = h;
+ y2 = -d + 1/2line_thickness;
+ y2' = -d - 1/2line_thickness;
+
+ fill stroke z2'.e -- z2e{up} ... z1e;
+
+ penlabels(1,2,2');
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginsymbol((6 + 4.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(3delim_height#)); "parenthesis -- bot";
+ thick := dthick(3) * line_thickness;
+
+ penpos0(thick, 90 - sign * 90);
+ penpos2(1.1thick, 90 - sign * 90);
+ penpos2'(1.1thick, 90 - sign * 90);
+
+ if sign = 1:
+ x2l = side_bearing;
+ x0r = w - side_bearing;
+ else:
+ x0r = side_bearing;
+ x2l = w - side_bearing;
+ fi
+ x2 = x2';
+ y2 = h - 1/2line_thickness;
+ y2' = h + 1/2line_thickness;
+ y0 = -d;
+
+ fill stroke z0e ... {up}z2e -- z2'.e;
+
+ penlabels(1,2,2');
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginsymbol((6 + 4.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "parenthesis -- module";
+ thick := dthick(3) * line_thickness;
+
+ penpos2(1.1thick, 90 - sign * 90);
+ penpos3(1.1thick, 90 - sign * 90);
+
+ if sign = 1:
+ x2l = x3l = side_bearing;
+ else:
+ x2l = x3l = w - side_bearing;
+ fi
+ y2 = h + 1/2line_thickness;
+ y3 = -d - 1/2line_thickness;
+
+ fill stroke z2e -- z3e;
+ endchar;
+endfor;
+
+extensible current_char - 1: current_char - 5, 0, current_char - 3, current_char - 1; %left parenthesis
+extensible current_char: current_char - 4, 0, current_char - 2, current_char; %right parenthesis
+
+charlist lparen_char: lparen_char + 1: lparen_char + 2: lparen_char + 3: lparen_char + 4: lparen_char + 5: current_char - 1;
+charlist rparen_char: rparen_char + 1: rparen_char + 2: rparen_char + 3: rparen_char + 4: rparen_char + 5: current_char;
+
+% brackets
+
+lsquare_char = current_char + 1;
+rsquare_char = current_char + 7;
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "square bracket";
+ draw_bracket(sign, dthick(scale) * line_thickness, true, true, true, false);
+ endchar;
+ endfor;
+endfor;
+
+lfloor_char = current_char + 1;
+rfloor_char = current_char + 7;
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "floor";
+ draw_bracket(sign, dthick(scale) * line_thickness, false, true, true, false);
+ endchar;
+ endfor;
+endfor;
+
+lceil_char = current_char + 1;
+rceil_char = current_char + 7;
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "ceiling";
+ draw_bracket(sign, dthick(scale) * line_thickness, true, true, false, false);
+ endchar;
+ endfor;
+endfor;
+
+ulcorner_char = current_char + 1;
+urcorner_char = current_char + 7;
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "upper corner";
+ draw_bracket(sign, dthick(scale) * line_thickness, true, false, false, false);
+ endchar;
+ endfor;
+endfor;
+
+charlist ulcorner_char: ulcorner_char + 1: ulcorner_char + 2: ulcorner_char + 3: ulcorner_char + 4: ulcorner_char + 5;
+charlist urcorner_char: urcorner_char + 1: urcorner_char + 2: urcorner_char + 3: urcorner_char + 4: urcorner_char + 5;
+
+llcorner_char = current_char + 1;
+lrcorner_char = current_char + 7;
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "lower corner";
+ draw_bracket(sign, dthick(scale) * line_thickness, false, false, true, false);
+ endchar;
+ endfor;
+endfor;
+
+charlist llcorner_char: llcorner_char + 1: llcorner_char + 2: llcorner_char + 3: llcorner_char + 4: llcorner_char + 5;
+charlist lrcorner_char: lrcorner_char + 1: lrcorner_char + 2: lrcorner_char + 3: lrcorner_char + 4: lrcorner_char + 5;
+
+ullcorner_char = current_char + 1;
+ulrcorner_char = current_char + 7;
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "upper/lower corner";
+ draw_bracket(sign, dthick(scale) * line_thickness, true, false, true, false);
+ endchar;
+ endfor;
+endfor;
+
+charlist ullcorner_char: ullcorner_char + 1: ullcorner_char + 2: ullcorner_char + 3: ullcorner_char + 4: ullcorner_char + 5;
+charlist ulrcorner_char: ulrcorner_char + 1: ulrcorner_char + 2: ulrcorner_char + 3: ulrcorner_char + 4: ulrcorner_char + 5;
+
+for sign = 1, -1:
+ beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "square bracket -- top";
+ draw_bracket(sign, dthick(3) * line_thickness, true, true, false, false);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "square bracket -- bot";
+ draw_bracket(sign, dthick(3) * line_thickness, false, true, true, false);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "square bracket -- module";
+ draw_bracket(sign, dthick(3) * line_thickness, false, true, false, false);
+ endchar;
+endfor;
+
+extensible current_char - 1: current_char - 5, 0, current_char - 3, current_char - 1; %left square bracket
+extensible current_char: current_char - 4, 0, current_char - 2, current_char; %right square bracket
+extensible current_char - 3: 0, 0, current_char - 3, current_char - 1; %left floor
+extensible current_char - 2: 0, 0, current_char - 2, current_char; %right floor
+extensible current_char - 5: current_char - 5, 0, 0, current_char - 1; %left ceiling
+extensible current_char - 4: current_char - 4, 0, 0, current_char; %right ceiling
+
+charlist lsquare_char: lsquare_char + 1: lsquare_char + 2: lsquare_char + 3: lsquare_char + 4: lsquare_char + 5: current_char - 1;
+charlist rsquare_char: rsquare_char + 1: rsquare_char + 2: rsquare_char + 3: rsquare_char + 4: rsquare_char + 5: current_char;
+charlist lfloor_char: lfloor_char + 1: lfloor_char + 2: lfloor_char + 3: lfloor_char + 4: lfloor_char + 5: current_char - 3;
+charlist rfloor_char: rfloor_char + 1: rfloor_char + 2: rfloor_char + 3: rfloor_char + 4: rfloor_char + 5: current_char - 2;
+charlist lceil_char: lceil_char + 1: lceil_char + 2: lceil_char + 3: lceil_char + 4: lceil_char + 5: current_char - 5;
+charlist rceil_char: rceil_char + 1: rceil_char + 2: rceil_char + 3: rceil_char + 4: rceil_char + 5: current_char - 4;
+
+% semantic brackets
+
+lsem_char = current_char + 1;
+rsem_char = current_char + 7;
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 4)/2 * u# + 2line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "semantic bracket";
+ draw_bracket(sign, dthick(scale) * line_thickness, true, true, true, true);
+ endchar;
+ endfor;
+endfor;
+
+for sign = 1, -1:
+ beginsymbol(5u# + 2line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "semantic bracket -- top";
+ draw_bracket(sign, dthick(3) * line_thickness, true, true, false, true);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginsymbol(5u# + 2line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "semantic bracket -- bot";
+ draw_bracket(sign, dthick(3) * line_thickness, false, true, true, true);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "semantic bracket -- module";
+ draw_bracket(sign, dthick(3) * line_thickness, false, true, false, true);
+ endchar;
+endfor;
+
+extensible current_char - 1: current_char - 5, 0, current_char - 3, current_char - 1; %left semantic bracket
+extensible current_char: current_char - 4, 0, current_char - 2, current_char; %right semantic bracket
+
+charlist lsem_char: lsem_char + 1: lsem_char + 2: lsem_char + 3: lsem_char + 4: lsem_char + 5: current_char - 1;
+charlist rsem_char: rsem_char + 1: rsem_char + 2: rsem_char + 3: rsem_char + 4: rsem_char + 5: current_char;
+
+% curly braces
+
+lcurly_char = current_char + 1;
+rcurly_char = current_char + 7;
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "curly brace";
+ thick := dthick(scale) * line_thickness;
+
+ draw_brace((w/2, (h-d)/2), h + d, w - 2side_bearing, 90 + sign * 90, thick, 0, 0, 0)
+ endchar;
+ endfor;
+endfor;
+
+beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "curly brace -- top";
+ thick := dthick(3) * line_thickness;
+
+ draw_brace((w/2, h - 3delim_height), 6delim_height, w - 2side_bearing, 180, thick, 0, 0, h + d);
+endchar;
+
+beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "curly brace -- top";
+ thick := dthick(3) * line_thickness;
+
+ draw_brace((w/2, h - 3delim_height), 6delim_height, w - 2side_bearing, 0, thick, h + d, 0, 0);
+endchar;
+
+beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "curly brace -- bot";
+ thick := dthick(3) * line_thickness;
+
+ draw_brace((w/2, 3delim_height - d), 6delim_height, w - 2side_bearing, 180, thick, h + d, 0, 0)
+endchar;
+
+beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "curly brace -- bot";
+ thick := dthick(3) * line_thickness;
+
+ draw_brace((w/2, 3delim_height - d), 6delim_height, w - 2side_bearing, 0, thick, 0, 0, h + d)
+endchar;
+
+for sign = 1, -1:
+ beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "curly brace -- middle";
+ thick := dthick(3) * line_thickness;
+
+ draw_brace((w/2, (h-d)/2), 6delim_height, w - 2side_bearing, 90 + sign * 90, thick, 0, h + d, 0);
+ endchar;
+endfor;
+
+beginsymbol((6 + 5.5)/2 * u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "curly brace -- module";
+ thick := dthick(3) * line_thickness;
+
+ x2 = x3 = w/2;
+ y2 = h + 1/2line_thickness;
+ y3 = -d - 1/2line_thickness;
+
+ draw_straight(z2, z3, thick, false);
+endchar;
+
+extensible current_char - 6: current_char - 6, 0, current_char - 4, current_char; %sharp left parenthesis
+extensible current_char - 5: current_char - 5, 0, current_char - 3, current_char; %sharp right parenthesis
+extensible current_char - 3: current_char - 6, 0, current_char - 3, current_char; %left moustache
+extensible current_char - 4: current_char - 5, 0, current_char - 4, current_char; %right moustache
+extensible current_char - 2: current_char - 6, current_char - 2, current_char - 4, current_char; %left curly brace
+extensible current_char - 1: current_char - 5, current_char - 1, current_char - 3, current_char; %right curly brace
+extensible current_char: 0, 0, 0, current_char; %vertical line
+
+charlist lcurly_char: lcurly_char + 1: lcurly_char + 2: lcurly_char + 3: lcurly_char + 4: lcurly_char + 5: current_char - 2;
+charlist rcurly_char: rcurly_char + 1: rcurly_char + 2: rcurly_char + 3: rcurly_char + 4: rcurly_char + 5: current_char - 1;
+
+% angle brackets
+
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "angle bracket";
+ draw_angle(a, 0, sign, dthick(scale) * line_thickness);
+ endchar;
+ endfor;
+ charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 8)/2 * u# + 2line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "double angle bracket";
+ thick := dthick(scale) * line_thickness;
+
+ draw_angle(a, -5/4thick, sign, thick);
+ draw_angle(b, 5/4thick, sign, thick);
+ endchar;
+ endfor;
+ charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((2scale + 4)/2 * u# + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "angle bracket with dot";
+ thick := dthick(scale) * line_thickness;
+
+ draw_angle(a, 0, sign, thick);
+
+ if sign > 0:
+ x3 = w - side_bearing - 3/4dot_size;
+ else:
+ x3 = side_bearing + 3/4dot_size;
+ fi
+ y3 = 1/2(h - d);
+
+ fill dot(z3, 3/4dot_size);
+ endchar;
+ endfor;
+ charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
+endfor;
+
+% slash
+
+for sign = 1, -1:
+ for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol(6scale * u# + line_thickness# + side_bearing#, vcentre(2scale * delim_height#)); "slash";
+ x1 - x0 = sign * (w - 2side_bearing - line_thickness);
+ y1 = h;
+ y0 = -d;
+ 1/2[x0,x1] = w/2;
+
+ draw_line_cut(0, 1);
+ endchar;
+ endfor;
+ charlist current_char - 5: current_char - 4: current_char - 3: current_char - 2: current_char - 1: current_char;
+endfor;
+
+% vertical bars
+
+for negated = false, true:
+ for scale = 0.5, 1, 1.2:
+ beginsymbol(2u# + if negated: 2u# + floor scale * u# else: 0u# fi + line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "vertical bar";
+ x0 = x1 = w/2;
+ y0 = h;
+ y1 = -d;
+
+ draw_line(z0, z1, false);
+
+ if negated:
+ if scale < 1: theta := 30; else: theta := 45; fi
+ len := 1/2(4u + floor scale * u) / cosd theta;
+
+ draw_straight(1/2[z0,z1] + len * dir theta, 1/2[z0,z1] - len * dir theta, stroke_through_thickness, true);
+ fi
+ endchar;
+ endfor;
+endfor;
+
+beginsymbol(2u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "vertical bar -- module";
+ x0 = x1 = w/2;
+ y0 = h + 1/2line_thickness;
+ y1 = -d - 1/2line_thickness;
+
+ draw_line(z0, z1, false);
+endchar;
+
+extensible current_char: 0, 0, 0, current_char; % vertical bar
+charlist current_char - 5: current_char - 4: current_char;
+
+for negated = false, true:
+ for scale = 0.5, 1, 1.2:
+ beginsymbol(5u# + if negated: 2u# + floor scale * u# else: 0u# fi + 2line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "double vertical bar";
+ x0 = x1;
+ x2 = x3;
+ 1/2[x0,x2] = w/2;
+ x2 - x0 = 3u + line_thickness;
+ y0 = y2 = h;
+ y1 = y3 = -d;
+
+ draw_line(z0, z1, false);
+ draw_line(z2, z3, false);
+
+ if negated:
+ if scale < 1: theta := 30; else: theta := 45; fi
+ len := 1/2(7u + floor scale * u + line_thickness) / cosd theta;
+ pair centre;
+ centre := 1/2[1/2[z0,z1],1/2[z2,z3]];
+
+ draw_straight(centre + len * dir theta, centre - len * dir theta, stroke_through_thickness, true);
+ fi
+ endchar;
+ endfor;
+endfor;
+
+beginsymbol(5u# + 2line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "double vertical bar -- module";
+ x0 = x1;
+ x2 = x3;
+ 1/2[x0,x2] = w/2;
+ x2 - x0 = 3u + line_thickness;
+ y0 = y2 = h + 1/2line_thickness;
+ y1 = y3 = -d - 1/2line_thickness;
+
+ draw_line(z0, z1, false);
+ draw_line(z2, z3, false);
+endchar;
+
+extensible current_char: 0, 0, 0, current_char; % double vertical line
+charlist current_char - 5: current_char -4: current_char;
+
+for scale = 1, 1.2:
+ beginsymbol(8u# + 3line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "triple vertical bar";
+ x0 = x1;
+ x2 = x3;
+ x4 = x5;
+ 1/2[x0,x4] = w/2;
+ x2 - x0 = x4 - x2 = 3u + line_thickness;
+ y0 = y2 = y4 = h;
+ y1 = y3 = y5 = -d;
+
+ draw_line(z0, z1, false);
+ draw_line(z2, z3, false);
+ draw_line(z4, z5, false);
+ endchar;
+endfor;
+
+beginsymbol(8u# + 3line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "triple vertical bar -- module";
+ x0 = x1;
+ x2 = x3;
+ x4 = x5;
+ 1/2[x0,x4] = w/2;
+ x2 - x0 = x4 - x2 = 3u + line_thickness;
+ y0 = y2 = y4 = h + 1/2line_thickness;
+ y1 = y3 = y5 = -d - 1/2line_thickness;
+
+ draw_line(z0, z1, false);
+ draw_line(z2, z3, false);
+ draw_line(z4, z5, false);
+endchar;
+
+extensible current_char: 0, 0, 0, current_char; % triple vertical line
+charlist current_char - 2: current_char -1: current_char;
+
+% Arrows
+
+for arrow_dir = 90, 270:
+ beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "arrow up/down";
+ pair foot, head;
+
+ if arrow_dir = 90:
+ head = (w/2, h - 1/2line_thickness);
+ foot = (w/2, -d);
+ else:
+ head = (w/2, -d + 1/2line_thickness);
+ foot = (w/2, h + 1/2line_thickness);
+ fi;
+
+ draw_line(foot, head, false);
+ draw_arrowhead(head, arrow_dir, arrow_spread, line_thickness);
+ endchar;
+endfor;
+
+beginsymbol(5u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "arrow module";
+ z0 = (w/2, h);
+ z1 = (w/2, -d);
+
+ draw_line(z0, z1, true);
+endchar;
+
+extensible current_char-2: current_char-2, 0, current_char, current_char;
+extensible current_char-1: current_char, 0, current_char-1, current_char;
+extensible current_char: current_char-2, 0, current_char-1, current_char;
+
+for arrow_dir = 90, 270:
+ beginsymbol(7u# + line_thickness# + 2side_bearing#, vcentre(1.2delim_height#)); "double arrow up/down";
+ pair foot, head;
+
+ if arrow_dir = 90:
+ head = (w/2, h - 1/2line_thickness);
+ foot = (w/2, -d - 1/2line_thickness);
+ else:
+ head = (w/2, -d + 1/2line_thickness);
+ foot = (w/2, h + 1/2line_thickness);
+ fi;
+
+ z1 - z0 = z3 - z2 = equal_spread * dir (arrow_dir + 90);
+ 1/2[z0,z1] = foot;
+ 1/2[z2,z3] = head;
+
+ draw_line(z0, arrowhead_intersection(head, arrow_dir, 13/10arrow_spread, z0 -- z2), false);
+ draw_line(z1, arrowhead_intersection(head, arrow_dir, 13/10arrow_spread, z1 -- z3), false);
+ draw_arrowhead(head, arrow_dir, 13/10arrow_spread, line_thickness);
+ endchar;
+endfor;
+
+beginsymbol(7u# + line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "double arrow module";
+ z1 - z0 = z3 - z2 = equal_spread * right;
+ 1/2[z0,z1] = (w/2, h);
+ 1/2[z2,z3] = (w/2, -d);
+
+ draw_line(z0, z2, true);
+ draw_line(z1, z3, true);
+endchar;
+
+extensible current_char-2: current_char-2, 0, current_char, current_char;
+extensible current_char-1: current_char, 0, current_char-1, current_char;
+extensible current_char: current_char-2, 0, current_char-1, current_char;
+
+% horizontal curly braces
+
+beginsymbol(1/2delim_height#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- left";
+ draw_brace((3delim_height, (h-d)/2), 6delim_height, h + d, 90, line_thickness, w, 0, 0);
+endchar;
+
+beginsymbol(1/2delim_height#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- left";
+ draw_brace((3delim_height, (h-d)/2), 6delim_height, h + d, -90, line_thickness, 0, 0, w);
+endchar;
+
+beginsymbol(1/2delim_height#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- right";
+ draw_brace((w - 3delim_height, (h-d)/2), 6delim_height, h + d, 90, line_thickness, 0, 0, w);
+endchar;
+
+beginsymbol(1/2delim_height#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- right";
+ draw_brace((w - 3delim_height, (h-d)/2), 6delim_height, h + d, -90, line_thickness, w, 0, 0);
+endchar;
+
+for sign = 1, -1:
+ beginsymbol(delim_height#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- middle";
+ draw_brace((w/2, (h-d)/2), 6delim_height, h + d, sign * 90, line_thickness, 0, w, 0);
+ endchar;
+endfor;
+
+beginsymbol(u#, vcentre((6 + 5.5)/2 * u# + line_thickness#)); "horizontal curly brace -- module";
+ y2 = y3 = (h - d)/2;
+ x2 = -1/2line_thickness;
+ x3 = w + 1/2line_thickness;
+
+ draw_line(z2, z3, false);
+endchar;
+
+% roots
+
+root_char = current_char + 1;
+
+for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((4scale + 2) * u# + 3/2line_thickness# + 2side_bearing#, rule_thickness#, 2scale * delim_height# - rule_thickness#); "root";
+ draw_root(line_thickness);
+ endchar;
+endfor;
+
+beginsymbol(14u# + 3/2line_thickness# + 2side_bearing#, rule_thickness#, 1.2delim_height# - rule_thickness#); "root -- top";
+ draw_root_top(line_thickness);
+endchar;
+
+beginsymbol(14u# + 3/2line_thickness# + 2side_bearing#, 0, 2.4delim_height#); "root -- bottom";
+ draw_root_bot(line_thickness);
+endchar;
+
+beginsymbol(14u# + 3/2line_thickness# + 2side_bearing#, vcentre(0.6delim_height#)); "root -- module";
+ x0 = x1 = 4/9w + 1/2line_thickness;
+ y0 = h;
+ y1 = -d;
+
+ draw_line(z0, z1, true);
+endchar;
+
+extensible current_char - 2: current_char - 2, 0, current_char - 1, current_char;
+charlist root_char: root_char + 1: root_char + 2: root_char + 3: root_char + 4: root_char + 5: current_char - 2;
+
+% more roots
+
+for scale = 1, 1.2, 1.5, 1.8, 2.4, 3:
+ beginsymbol((4scale + 2) * u# + 5/2line_thickness# + 2side_bearing#, vcentre(2scale * delim_height#)); "root";
+ draw_root(line_thickness);
+ endchar;
+endfor;
+
+beginsymbol(14u# + 5/2line_thickness# + 2side_bearing#, 1.2delim_height#, 0); "root -- top";
+ draw_root_top(line_thickness);
+endchar;
+
+beginsymbol(14u# + 5/2line_thickness# + 2side_bearing#, 2.4delim_height#, 0); "root -- bottom";
+ draw_root_bot(line_thickness);
+endchar;
diff --git a/fonts/mdsymbol/source/mdgeometric.mf b/fonts/mdsymbol/source/mdgeometric.mf
new file mode 100644
index 0000000000..7d608a1d6f
--- /dev/null
+++ b/fonts/mdsymbol/source/mdgeometric.mf
@@ -0,0 +1,1918 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+beginsymbol(2dot_size# + 2side_bearing#, vcentre(2dot_size#)); "centre dot";
+ fill dot((w/2, (h-d)/2), dot_size);
+endchar;
+
+for alpha = 0, 90, 45, 135:
+ beginsymbol((4dot_size# + equal_spread#) * abs (cosd alpha) + 2dot_size# * abs (sind alpha) + 2side_bearing#, vcentre(2dot_size# * abs (cosd alpha) + (4dot_size# + equal_spread#) * abs (sind alpha))); "colon (" & decimal alpha & ")";
+ pair centre;
+ centre := (w/2, (h-d)/2);
+
+ z1 - z0 = (2dot_size + equal_spread) * dir alpha;
+ 1/2[z0,z1] = centre;
+
+ fill dot(z0, dot_size);
+ fill dot(z1, dot_size);
+ endchar;
+endfor;
+
+for alpha = 0, 90, 45, 135:
+ beginsymbol((6dot_size# + 2equal_spread#) * abs (cosd alpha) + 2dot_size# * abs (sind alpha) + 2side_bearing#, vcentre(2dot_size# * abs (cosd alpha) + (6dot_size# + 2equal_spread#) * abs (sind alpha))); "triple colon (" & decimal alpha & ")";
+ pair centre;
+ centre := (w/2, (h-d)/2);
+
+ z1 - z0 = (2dot_size + equal_spread) * dir alpha;
+ z2 - z1 = (2dot_size + equal_spread) * dir alpha;
+ z1 = centre;
+
+ fill dot(z0, dot_size);
+ fill dot(z1, dot_size);
+ fill dot(z2, dot_size);
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginoperator(plus_size#, 1); "therefore (" & decimal alpha & ")";
+ r := 1/2plus_size - dot_size;
+ r := r * 1/3[1, sqrt 2];
+
+ z1 = z0 + r * dir alpha;
+ z2 = z0 + r * dir (alpha + 120);
+ z3 = z0 + r * dir (alpha + 240);
+
+ 1/2[z1,1/2[z2,z3]] = centre;
+
+ fill dot(z1, dot_size);
+ fill dot(z2, dot_size);
+ fill dot(z3, dot_size);
+ endchar;
+endfor;
+
+beginoperator(plus_size#, 1); "double colon";
+ r := (1/2plus_size - dot_size) * sqrt(2);
+
+ fill dot(centre + r * dir 45, dot_size);
+ fill dot(centre + r * dir 135, dot_size);
+ fill dot(centre + r * dir 225, dot_size);
+ fill dot(centre + r * dir 315, dot_size);
+endchar;
+
+beginoperator(plus_size#, 1); "minus";
+ draw_line(centre + radius * right, centre + radius * left, true);
+endchar;
+
+beginoperator(plus_size#, 1); "medium slash";
+ draw_line(centre + 4/3radius * dir 45, centre + 4/3radius * dir 225, true);
+endchar;
+
+beginoperator(plus_size#, 1); "medium backslash";
+ draw_line(centre + 4/3radius * dir 135, centre + 4/3radius * dir 315, true);
+endchar;
+
+beginoperator(plus_size#, 1); "plus";
+ draw_line(centre + radius * right, centre + radius * left, true);
+ draw_line(centre + radius * up, centre + radius * down, true);
+endchar;
+
+beginoperator(plus_size#, 1); "times";
+ r := 4/3radius;
+
+ draw_line(centre + r * dir 45, centre + r * dir 225, true);
+ draw_line(centre + r * dir 135, centre + r * dir 315, true);
+endchar;
+
+for angle = 0, 180:
+ beginoperator(plus_size#, 1); "dot minus (" & decimal angle & ")";
+ draw_line(centre - radius * dir angle, centre + radius * dir angle, true);
+ fill dot(centre + equal_spread * dir (angle + 90), 3/4dot_size);
+ endchar;
+endfor;
+
+beginoperator(plus_size#, 1); "divide";
+ draw_line(centre + radius * right, centre + radius * left, true);
+ fill dot(centre + equal_spread * up, 3/4dot_size);
+ fill dot(centre + equal_spread * down, 3/4dot_size);
+endchar;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "minus with two dots";
+ draw_line(centre + radius * right, centre + radius * left, true);
+ fill dot(centre + sign * (radius - 3/4dot_size) * left + equal_spread * up, 3/4dot_size);
+ fill dot(centre + sign * (radius - 3/4dot_size) * right + equal_spread * down, 3/4dot_size);
+ endchar;
+endfor;
+
+beginoperator(plus_size#, 1); "minus with four dots";
+ draw_line(centre + radius * right, centre + radius * left, true);
+ fill dot(centre + (radius - 3/4dot_size) * left + equal_spread * up, 3/4dot_size);
+ fill dot(centre + (radius - 3/4dot_size) * right + equal_spread * up, 3/4dot_size);
+ fill dot(centre + (radius - 3/4dot_size) * left + equal_spread * down, 3/4dot_size);
+ fill dot(centre + (radius - 3/4dot_size) * right + equal_spread * down, 3/4dot_size);
+endchar;
+
+for angle = 0, 180:
+ beginoperator(plus_size#, 1.25); "plus minus (" & decimal angle & ")";
+ centre := centre + 0.125plus_size * dir (angle + 90);
+ pair bt;
+ bt := centre + (radius + 0.25plus_size) * dir (angle - 90);
+
+ draw_line(centre + radius * right, centre + radius * left, true);
+ draw_line(centre + radius * up, centre + radius * down, true);
+ draw_line(bt + radius * right, bt + radius * left, true);
+ endchar;
+endfor;
+
+for angle = 0, 180:
+ beginoperator(plus_size#, 1.25); "dot plus (" & decimal angle & ")";
+ centre := centre + 0.125plus_size * dir (angle - 90);
+ pair tp;
+ tp := centre + (radius + 0.25plus_size) * dir (angle + 90);
+
+ draw_line(centre + radius * right, centre + radius * left, true);
+ draw_line(centre + radius * up, centre + radius * down, true);
+ fill dot(tp, 3/4dot_size);
+ endchar;
+endfor;
+
+beginoperator(plus_size#, 1.25); "dot times";
+ centre := centre + 0.125plus_size * down;
+ pair tp;
+ tp := centre + (radius + 0.2plus_size) * up;
+ r := 4/3radius;
+
+ draw_line(centre + r * dir 45, centre + r * dir 225, true);
+ draw_line(centre + r * dir 135, centre + r * dir 315, true);
+ fill dot(tp, 3/4dot_size);
+endchar;
+
+beginoperator(plus_size#, 1.25); "times bar";
+ centre := centre + 0.125plus_size * up;
+ pair bt;
+ bt := centre + (radius + 0.25plus_size) * down;
+ r := 4/3radius;
+
+ draw_line(centre + r * dir 45, centre + r * dir 225, true);
+ draw_line(centre + r * dir 135, centre + r * dir 315, true);
+ draw_line(bt + radius * right, bt + radius * left, true);
+endchar;
+
+beginoperator(plus_size#, 1); "divide on times";
+ r := 4/3radius;
+
+ draw_line(centre + radius * right, centre + radius * left, true);
+ draw_line(centre + r * dir 45, centre + r * dir 225, true);
+ draw_line(centre + r * dir 135, centre + r * dir 315, true);
+ fill dot(centre + equal_spread * up, 3/4dot_size);
+ fill dot(centre + equal_spread * down, 3/4dot_size);
+endchar;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "logical not";
+ draw_line(centre + radius * left, centre + radius * right, true);
+ draw_line(centre + sign * radius * right, centre + sign * radius * right + equal_spread * down, true);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "upside down logical not";
+ draw_line(centre + radius * left, centre + radius * right, true);
+ draw_line(centre + sign * radius * right, centre + sign * radius * right + equal_spread * up, true);
+ endchar;
+endfor;
+
+for sign = -1, 1:
+ beginoperator(plus_size#, 1); "three times";
+ r := 4/3radius;
+
+ z0 = centre + r * dir (sign * 45);
+ z1 = centre + r * dir (sign * 225);
+ z2 = centre + r * dir (270 + sign * 45);
+ z3 = centre + 1/4line_thickness * dir (270 + sign * 45);
+
+ draw_line(z0, z1, true);
+ draw_line(z3, z2, true);
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginoperator(plus_size#, 1); "closed times (" & decimal alpha & ")";
+ thick := line_thickness;
+ r := 4/3radius;
+
+ z0 = centre + (r + 1/2line_thickness) * dir (alpha + 45);
+ z1 = centre + r * dir (alpha + 315);
+ z2 = centre + r * dir (alpha + 225);
+ z3 = centre + (r + 1/2line_thickness) * dir (alpha + 135);
+
+ penpos0(thick,alpha + 315);
+ penpos1(thick,alpha + 45);
+ penpos2(thick,alpha + 315);
+ penpos3(thick,alpha + 45);
+
+ z5 = z1r + whatever * dir (270 + alpha - 15);
+ z6 = z2l + whatever * dir (270 + alpha + 15);
+ z5 = whatever[z1r + thick * dir (270 + alpha), z2l + thick * dir (270 + alpha)];
+ z6 = whatever[z1r + thick * dir (270 + alpha), z2l + thick * dir (270 + alpha)];
+
+ fill stroke z0e -- z2e;
+ fill stroke z1e -- z3e;
+ fill z1r -- z5 -- z6 -- z2l -- cycle;
+
+ penlabels(0,1,2,3,5,6);
+ endchar;
+endfor;
+
+for alpha = 0, 90:
+ beginoperator(plus_size#, 1); "bowtie (" & decimal alpha & ")";
+ thick := line_thickness;
+ r := 4/3radius;
+
+ z0 = centre + r * dir (alpha + 135);
+ z1 = centre + r * dir (alpha + 45);
+ z2 = centre + r * dir (alpha + 315);
+ z3 = centre + r * dir (alpha + 225);
+
+ penpos0(thick,alpha + 45);
+ penpos1(thick,alpha + 135);
+ penpos2(thick,alpha + 45);
+ penpos3(thick,alpha + 135);
+
+ z4 = z0r + whatever * dir (180 + alpha + 15);
+ z5 = z1r + whatever * dir (alpha - 15);
+ z6 = z2l + whatever * dir (alpha + 15);
+ z7 = z3l + whatever * dir (180 + alpha - 15);
+ z4 = whatever[z0r + thick * dir (180 + alpha), z3l + thick * dir (180 + alpha)];
+ z5 = whatever[z1r + thick * dir alpha, z2l + thick * dir alpha];
+ z6 = whatever[z1r + thick * dir alpha, z2l + thick * dir alpha];
+ z7 = whatever[z0r + thick * dir (180 + alpha), z3l + thick * dir (180 + alpha)];
+
+ fill stroke z0e -- z2e;
+ fill stroke z1e -- z3e;
+ fill z1r -- z5 -- z6 -- z2l -- cycle;
+ fill z0r -- z4 -- z7 -- z3l -- cycle;
+
+ penlabels(0,1,2,3,4,5,6,7);
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginoperator(plus_size#, 1); "Y (" & decimal alpha & ")";
+ s := 1/15plus_size;
+
+ draw_line(centre - s * dir alpha, centre + radius * dir alpha, true);
+ draw_line(centre - s * dir alpha, centre - s * dir alpha + (radius + s) * dir (alpha + 135), true);
+ draw_line(centre - s * dir alpha, centre - s * dir alpha + (radius + s) * dir (alpha + 225), true);
+ endchar;
+endfor;
+
+% operators
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "wedge";
+ draw_less(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false, true);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "wedge dot";
+ draw_less(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false, true);
+ fill dot(centre - sign * 1/3plus_size * up, 3/4dot_size);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginsymbol(13/9plus_size# + 2side_bearing#, vcentre(plus_size#)); "double wedge";
+ 1/2[z0,z1] = (w/2, (h-d)/2);
+ z1 - z0 = 4/9plus_size * right;
+
+ draw_less(a, z0 + sign * plus_size/2 * up, z0 - sign * plus_size/2 * up, 2radius, line_thickness, false, true);
+ draw_less(b, z1 + sign * plus_size/2 * up, z1 - sign * plus_size/2 * up, 2radius, line_thickness, false, true);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "curly wedge";
+ draw_prec(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1.25); "bar wedge";
+ centre := centre - sign * 0.125plus_size * up;
+ pair tp;
+ tp := centre + sign * (radius + 0.25plus_size) * up;
+
+ draw_less(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false, true);
+ draw_line(tp + radius * left, tp + radius * right, true);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1.5); "double bar wedge";
+ centre := centre - sign * 0.25plus_size * up;
+ pair tpa, tpb;
+ tpa := centre + sign * (radius + 0.25plus_size) * up;
+ tpb := centre + sign * (radius + 0.5plus_size) * up;
+
+ draw_less(a, centre + sign * plus_size/2 * up, centre - sign * plus_size/2 * up, 2radius, line_thickness, false, true);
+ draw_line(tpa + radius * left, tpa + radius * right, true);
+ draw_line(tpb + radius * left, tpb + radius * right, true);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "union";
+ draw_subset(a,centre - sign * plus_size/2 * up, centre + sign * plus_size/2 * up, 2radius, line_thickness);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(4/3plus_size#, 1); "double union";
+ draw_subset(a, centre - sign * 5/18plus_size * up, centre + sign * 2/3plus_size * up, 5/6radius, line_thickness);
+ draw_subset(b, centre - sign * 2/3plus_size * up, centre + sign * 2/3plus_size * up, 2radius, line_thickness);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "union dot";
+ draw_subset(a, centre - sign * plus_size/2 * up, centre + sign * plus_size/2 * up, 2radius, line_thickness);
+ fill dot(centre + sign * 1/6plus_size * up, 3/4dot_size);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "union plus";
+ draw_subset(a, centre - sign * plus_size/2 * up, centre + sign * plus_size/2 * up, 2radius, line_thickness);
+
+ r := 1/6plus_size;
+
+ draw_line(centre + sign * 1/6plus_size * up + r * right, centre + sign * 1/6plus_size * up + r * left, true);
+ draw_line(centre + (r + sign * 1/6plus_size) * up, centre + (r - sign * 1/6plus_size) * down, true);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "square union";
+ z3 - z0 = z2 - z1 = 2radius * right;
+ z0 - z1 = sign * 2radius * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw_line(z0, z1, true);
+ draw_line(z1, z2, false);
+ draw_line(z2, z3, true);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(4/3plus_size#, 1); "double square union";
+ z3a - z0a = z2a - z1a = 2radius * right;
+ z0a - z1a = sign * 2radius * up;
+ 1/2[1/2[z0a,z1a], 1/2[z2a,z3a]] = centre;
+ z3b - z0b = z2b - z1b = 5/9plus_size * right;
+ z0b - z1b = sign * 17/12radius * up;
+ y0b = y0a;
+ 1/2[x0b, x3b] = xpart centre;
+
+ draw_line(z0a, z1a, true);
+ draw_line(z1a, z2a, false);
+ draw_line(z2a, z3a, true);
+ draw_line(z0b, z1b, true);
+ draw_line(z1b, z2b, false);
+ draw_line(z2b, z3b, true);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "square union dot";
+ z3 - z0 = z2 - z1 = 2radius * right;
+ z0 - z1 = sign * 2radius * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw_line(z0, z1, true);
+ draw_line(z1, z2, false);
+ draw_line(z2, z3, true);
+ fill dot(centre + sign * 1/6plus_size * up, 3/4dot_size);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "square union plus";
+ z3 - z0 = z2 - z1 = 2radius * right;
+ z0 - z1 = sign * 2radius * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw_line(z0, z1, true);
+ draw_line(z1, z2, false);
+ draw_line(z2, z3, true);
+
+ r := 1/6plus_size;
+
+ draw_line(centre + sign * 1/6plus_size * up + r * right, centre + sign * 1/6plus_size * up + r * left, true);
+ draw_line(centre + (r + sign * 1/6plus_size) * up, centre + (r - sign * 1/6plus_size) * down, true);
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginoperator(plus_size#, 1); "corner with dot";
+ z3 - z0 = z2 - z1 = 2radius * dir alpha;
+ z0 - z1 = 2radius * dir (alpha + 90);
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw_line(z1, z2, true);
+ draw_line(z2, z3, true);
+ fill dot(centre, 3/4dot_size);
+ endchar;
+endfor;
+
+% triangles
+
+for alpha = 0, 90, 180, 270:
+ beginsymbol((3/4small_op_size# + 3/2line_thickness#) * abs(cosd alpha) + sqrt(3) * (small_op_size#/2 + line_thickness#) * abs(sind alpha) + 2side_bearing#, vcentre(sqrt(3) * (small_op_size#/2 + line_thickness#) * abs(cosd alpha) + (3/4small_op_size# + 3/2line_thickness#) * abs(sind alpha))); "small triangle (" & decimal alpha & ")";
+ thick := line_thickness;
+ radius := small_op_size/2;
+ centre := (w/2, (h - d)/2) - 1/4(radius + thick) * dir alpha;
+
+ draw_triangle(a, centre, radius, alpha, thick);
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginsymbol((3/4small_op_size# + 3/2line_thickness#) * abs(cosd alpha) + sqrt(3) * (small_op_size#/2 + line_thickness#) * abs(sind alpha) + 2side_bearing#, vcentre(sqrt(3) * (small_op_size#/2 + line_thickness#) * abs(cosd alpha) + (3/4small_op_size# + 3/2line_thickness#) * abs(sind alpha))); "small filled triangle (" & decimal alpha & ")";
+ thick := line_thickness;
+ radius := small_op_size/2;
+ centre := (w/2, (h - d)/2) - 1/4(radius + thick) * dir alpha;
+
+ filldraw_triangle(a, centre, radius, alpha, thick);
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginsymbol((3/4med_op_size# + 3/2line_thickness#) * abs(cosd alpha) + sqrt(3) * (med_op_size#/2 + line_thickness#) * abs(sind alpha) + 2side_bearing#, vcentre(sqrt(3) * (med_op_size#/2 + line_thickness#) * abs(cosd alpha) + (3/4med_op_size# + 3/2line_thickness#) * abs(sind alpha))); "medium triangle (" & decimal alpha & ")";
+ thick := line_thickness;
+ radius := med_op_size/2;
+ centre := (w/2, (h - d)/2) - 1/4(radius + thick) * dir alpha;
+
+ draw_triangle(a, centre, radius, alpha, thick);
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginsymbol((3/4med_op_size# + 3/2line_thickness#) * abs(cosd alpha) + sqrt(3) * (med_op_size#/2 + line_thickness#) * abs(sind alpha) + 2side_bearing#, vcentre(sqrt(3) * (med_op_size#/2 + line_thickness#) * abs(cosd alpha) + (3/4med_op_size# + 3/2line_thickness#) * abs(sind alpha))); "medium filled triangle (" & decimal alpha & ")";
+ thick := line_thickness;
+ radius := med_op_size/2;
+ centre := (w/2, (h - d)/2) - 1/4(radius + thick) * dir alpha;
+
+ filldraw_triangle(a, centre, radius, alpha, thick);
+ endchar;
+endfor;
+
+for alpha = 90, 270:
+ beginsymbol(sqrt(3) * (large_op_size#/2 + line_thickness#) + 2side_bearing#, vcentre(3/4large_op_size# + 3/2line_thickness#)); "large triangle (" & decimal alpha & ")";
+ thick := line_thickness;
+ radius := large_op_size/2;
+ centre := (w/2, (h - d)/2) - 1/4(radius + thick) * dir alpha;
+
+ draw_triangle(a, centre, radius, alpha, thick);
+ endchar;
+endfor;
+
+% circles
+
+beginoperator(4/5small_op_size#, 1); "small circle";
+ draw_circle(centre, radius, line_thickness);
+endchar;
+
+beginoperator(4/5small_op_size#, 1); "small filled circle";
+ filldraw_circle(centre, radius, line_thickness);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle";
+ draw_circle(centre, radius, line_thickness);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium filled circle";
+ filldraw_circle(centre, radius, line_thickness);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle minus";
+ draw_circle(centre, radius, line_thickness);
+ draw_line(centre + radius * left, centre + radius * right, false);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle bar";
+ draw_circle(centre, radius, line_thickness);
+ draw_line(centre + radius * up, centre + radius * down, false);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle slash";
+ draw_circle(centre, radius, line_thickness);
+ draw_line(centre + radius * dir 45, centre + radius * dir 225, false);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle backslash";
+ draw_circle(centre, radius, line_thickness);
+ draw_line(centre + radius * dir 135, centre + radius * dir 315, false);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle plus";
+ draw_circle(centre, radius, line_thickness);
+ draw_line(centre + radius * left, centre + radius * right, false);
+ draw_line(centre + radius * up, centre + radius * down, false);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle times";
+ draw_circle(centre, radius, line_thickness);
+ draw_line(centre + radius * dir 45, centre + radius * dir 225, false);
+ draw_line(centre + radius * dir 135, centre + radius * dir 315, false);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle dot";
+ draw_circle(centre, radius, line_thickness);
+ fill dot(centre, dot_size);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle circle";
+ draw_circle(centre, radius, line_thickness);
+ draw_circle(centre, 2/5radius, line_thickness);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle asterisk";
+ thick := line_thickness;
+
+ draw_circle(centre, radius, thick);
+
+ penpos a0(4/3thick, 0);
+ penpos a1(4/3thick, 60);
+ penpos a2(4/3thick, 120);
+ penpos a3(4/3thick, 180);
+ penpos a4(4/3thick, 240);
+ penpos a5(4/3thick, 300);
+
+ penpos b0(2/3thick, 0);
+ penpos b1(2/3thick, 60);
+ penpos b2(2/3thick, 120);
+ penpos b3(2/3thick, 180);
+ penpos b4(2/3thick, 240);
+ penpos b5(2/3thick, 300);
+
+ reg_poly_points(a)(6, centre, radius, 90);
+
+ z.b0 = z.b1 = z.b2 = z.b3 = z.b4 = z.b5 = centre;
+
+ fill stroke z.a0e -- z.b0e;
+ fill stroke z.a1e -- z.b1e;
+ fill stroke z.a2e -- z.b2e;
+ fill stroke z.a3e -- z.b3e;
+ fill stroke z.a4e -- z.b4e;
+ fill stroke z.a5e -- z.b5e;
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle dash";
+ draw_circle(centre, radius, line_thickness);
+ draw_line(centre + 2/3radius * left, centre + 2/3radius * right, false);
+endchar;
+
+beginoperator(4/5med_op_size#, 1); "medium circle equal";
+ draw_circle(centre, radius, line_thickness);
+ draw_line(centre + 2/5equal_spread * up + 2/3radius * left, centre + 2/5equal_spread * up + 2/3radius * right, false);
+ draw_line(centre + 2/5equal_spread * down + 2/3radius * left, centre + 2/5equal_spread * down + 2/3radius * right, false);
+endchar;
+
+for sign = 1,-1:
+ beginoperator(4/5med_op_size#, 1); "negated medium circle";
+ r := 4/3radius;
+
+ draw_circle(centre, radius, line_thickness);
+ draw_line(centre + r * dir (sign * 45), centre + r * dir (sign * 225), true);
+ endchar;
+endfor;
+
+beginoperator(4/5large_op_size#, 1); "large circle";
+ draw_circle(centre, radius, line_thickness);
+endchar;
+
+beginoperator(4/5large_op_size#, 1); "large filled circle";
+ filldraw_circle(centre, radius, line_thickness);
+endchar;
+
+% squares
+
+beginoperator(small_op_size#/sqrt(2), 1); "small square";
+ draw_square(centre, radius, 0, line_thickness);
+endchar;
+
+beginoperator(small_op_size#/sqrt(2), 1); "small filled square";
+ filldraw_square(centre, radius, 0, line_thickness);
+endchar;
+
+beginoperator(med_op_size#/sqrt(2), 1); "medium square";
+ draw_square(centre, radius, 0, line_thickness);
+endchar;
+
+beginoperator(med_op_size#/sqrt(2), 1); "medium filled square";
+ filldraw_square(centre, radius, 0, line_thickness);
+endchar;
+
+beginoperator(med_op_size#/sqrt(2), 1); "medium square minus";
+ draw_square(centre, radius, 0, line_thickness);
+ draw_line(centre + radius * right, centre + radius * left, false);
+endchar;
+
+beginoperator(med_op_size#/sqrt(2), 1); "medium square vert";
+ draw_square(centre, radius, 0, line_thickness);
+ draw_line(centre + radius * up, centre + radius * down, false);
+endchar;
+
+beginoperator(med_op_size#/sqrt(2), 1); "medium square slash";
+ r := radius * sqrt(2);
+
+ draw_square(centre, radius, 0, line_thickness);
+ draw_line(centre + r * dir 45, centre + r * dir 225, false);
+endchar;
+
+beginoperator(med_op_size#/sqrt(2), 1); "medium square backslash";
+ r := radius * sqrt(2);
+
+ draw_square(centre, radius, 0, line_thickness);
+ draw_line(centre + r * dir 135, centre + r * dir 315, false);
+endchar;
+
+beginoperator(med_op_size#/sqrt(2), 1); "medium square plus";
+ draw_square(centre, radius, 0, line_thickness);
+ draw_line(centre + radius * right, centre + radius * left, false);
+ draw_line(centre + radius * up, centre + radius * down, false);
+endchar;
+
+beginoperator(med_op_size#/sqrt(2), 1); "medium square times";
+ r := radius * sqrt(2);
+
+ draw_square(centre, radius, 0, line_thickness);
+ draw_line(centre + r * dir 45, centre + r * dir 225, false);
+ draw_line(centre + r * dir 135, centre + r * dir 315, false);
+endchar;
+
+beginoperator(med_op_size#/sqrt(2), 1); "medium square dot";
+ draw_square(centre, radius, 0, line_thickness);
+ fill dot(centre, dot_size);
+endchar;
+
+beginoperator(med_op_size#/sqrt(2), 1); "medium square square";
+ draw_square(centre, radius, 0, line_thickness);
+ draw_square(centre, 2/5radius, 0, 4/5line_thickness);
+endchar;
+
+beginoperator(large_op_size#/sqrt(2), 1); "large square";
+ draw_square(centre, radius, 0, line_thickness);
+endchar;
+
+beginoperator(large_op_size#/sqrt(2), 1); "large filled square";
+ filldraw_square(centre, radius, 0, line_thickness);
+endchar;
+
+beginoperator(small_op_size#, 1); "small diamond";
+ draw_square(centre, radius / sqrt(2), 45, line_thickness);
+endchar;
+
+beginoperator(small_op_size#, 1); "small filled diamond";
+ filldraw_square(centre, radius / sqrt(2), 45, line_thickness);
+endchar;
+
+beginoperator(med_op_size#, 1); "medium diamond";
+ draw_square(centre, radius / sqrt(2), 45, line_thickness);
+endchar;
+
+beginoperator(med_op_size#, 1); "medium filled diamond";
+ filldraw_square(centre, radius / sqrt(2), 45, line_thickness);
+endchar;
+
+beginoperator(med_op_size#, 1); "medium diamond minus";
+ draw_square(centre, radius / sqrt(2), 45, line_thickness);
+ draw_line(centre + radius * right, centre + radius * left, false);
+endchar;
+
+beginoperator(med_op_size#, 1); "medium diamond vert";
+ draw_square(centre, radius / sqrt(2), 45, line_thickness);
+ draw_line(centre + radius * up, centre + radius * down, false);
+endchar;
+
+beginoperator(med_op_size#, 1); "medium diamond slash";
+ r := radius / sqrt(2);
+
+ draw_square(centre, r, 45, line_thickness);
+ draw_line(centre + r * dir 45, centre + r * dir 225, false);
+endchar;
+
+beginoperator(med_op_size#, 1); "medium diamond backslash";
+ r := radius / sqrt(2);
+
+ draw_square(centre, r, 45, line_thickness);
+ draw_line(centre + r * dir 135, centre + r * dir 315, false);
+endchar;
+
+beginoperator(med_op_size#, 1); "medium diamond plus";
+ draw_square(centre, radius / sqrt(2), 45, line_thickness);
+ draw_line(centre + radius * right, centre + radius * left, false);
+ draw_line(centre + radius * up, centre + radius * down, false);
+endchar;
+
+beginoperator(med_op_size#, 1); "medium diamond times";
+ r := radius / sqrt(2);
+
+ draw_square(centre, r, 45, line_thickness);
+ draw_line(centre + r * dir 45, centre + r * dir 225, false);
+ draw_line(centre + r * dir 135, centre + r * dir 315, false);
+endchar;
+
+beginoperator(med_op_size#, 1); "medium diamond dot";
+ draw_square(centre, radius / sqrt(2), 45, line_thickness);
+ fill dot(centre, dot_size);
+endchar;
+
+beginoperator(med_op_size#, 1); "medium diamond diamond";
+ draw_square(centre, radius / sqrt(2), 45, line_thickness);
+ draw_square(centre, 2/5radius / sqrt(2), 45, 4/5line_thickness);
+endchar;
+
+beginoperator(5/6small_op_size#, 8/5); "small lozenge";
+ x0 = w - x2 = side_bearing;
+ y0 = y2 = ypart centre;
+ x1 = x3 = xpart centre;
+ y1 = h;
+ y3 = -d;
+
+ theta := angle(z1 - z0);
+
+ x0' = x0 + line_thickness / sind theta;
+ x2' = x2 - line_thickness / sind theta;
+ y0' = y2' = y0;
+ y1' = y1 - line_thickness / cosd theta;
+ y3' = y3 + line_thickness / cosd theta;
+ x1' = x3' = x1;
+
+ fill z0 -- z1 -- z2 -- z3 -- cycle;
+ unfill z0' -- z1' -- z2' -- z3' -- cycle;
+endchar;
+
+beginoperator(5/6small_op_size#, 8/5); "small filled lozenge";
+ x0 = w - x2 = side_bearing;
+ y0 = y2 = ypart centre;
+ x1 = x3 = xpart centre;
+ y1 = h;
+ y3 = -d;
+
+ fill z0 -- z1 -- z2 -- z3 -- cycle;
+endchar;
+
+beginoperator(1/sqrt(2)*med_op_size#, 8/5); "medium lozenge";
+ x0 = w - x2 = side_bearing;
+ y0 = y2 = ypart centre;
+ x1 = x3 = xpart centre;
+ y1 = h;
+ y3 = -d;
+
+ theta := angle(z1 - z0);
+
+ x0' = x0 + line_thickness / sind theta;
+ x2' = x2 - line_thickness / sind theta;
+ y0' = y2' = y0;
+ y1' = y1 - line_thickness / cosd theta;
+ y3' = y3 + line_thickness / cosd theta;
+ x1' = x3' = x1;
+
+ fill z0 -- z1 -- z2 -- z3 -- cycle;
+ unfill z0' -- z1' -- z2' -- z3' -- cycle;
+endchar;
+
+beginoperator(1/sqrt(2)*med_op_size#, 8/5); "medium filled lozenge";
+ x0 = w - x2 = side_bearing;
+ y0 = y2 = ypart centre;
+ x1 = x3 = xpart centre;
+ y1 = h;
+ y3 = -d;
+
+ fill z0 -- z1 -- z2 -- z3 -- cycle;
+endchar;
+
+beginoperator(1/sqrt(2)*med_op_size#, 8/5); "medium lozenge minus";
+ thick := line_thickness;
+
+ x0 = w - x2 = side_bearing;
+ y0 = y2 = ypart centre;
+ x1 = x3 = xpart centre;
+ y1 = h;
+ y3 = -d;
+
+ theta := angle(z1 - z0);
+
+ x0' = x0 + thick / sind theta;
+ x2' = x2 - thick / sind theta;
+ y0' = y2' = y0;
+ y1' = y1 - thick / cosd theta;
+ y3' = y3 + thick / cosd theta;
+ x1' = x3' = x1;
+
+ fill z0 -- z1 -- z2 -- z3 -- cycle;
+ unfill z0' -- z1' -- z2' -- z3' -- cycle;
+ draw_line(z0', z2', true);
+endchar;
+
+beginoperator(5/4small_op_size#, 1); "small star";
+ r := radius + line_thickness;
+ t := 1/11r;
+
+ reg_poly_points(a)(5, centre - t * up, r, 90);
+ reg_poly_points(b)(5, centre - t * up, .4r, 126);
+
+ s := r - 4/5line_thickness / sind (270 - angle (z.b0 - z.a0));
+
+ reg_poly_points(c)(5, centre - t * up, s, 90);
+ reg_poly_points(d)(5, centre - t * up, .4s, 126);
+
+ fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle;
+ unfill z.c0 -- z.d0 -- z.c1 -- z.d1 -- z.c2 -- z.d2 -- z.c3 -- z.d3 -- z.c4 -- z.d4 -- cycle;
+endchar;
+
+beginoperator(small_op_size#, 1); "small filled star";
+ r := radius + line_thickness;
+ t := 1/11r;
+
+ reg_poly_points(a)(5, centre - t * up, r, 90);
+ reg_poly_points(b)(5, centre - t * up, .4r, 126);
+
+ fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle;
+endchar;
+
+beginoperator(med_op_size#, 1); "medium star";
+ r := radius + line_thickness;
+ t := 1/11r;
+
+ reg_poly_points(a)(5, centre - t * up, r, 90);
+ reg_poly_points(b)(5, centre - t * up, .4r, 126);
+
+ s := r - line_thickness / sind (270 - angle (z.b0 - z.a0));
+
+ reg_poly_points(c)(5, centre - t * up, s, 90);
+ reg_poly_points(d)(5, centre - t * up, .4s, 126);
+
+ fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle;
+ unfill z.c0 -- z.d0 -- z.c1 -- z.d1 -- z.c2 -- z.d2 -- z.c3 -- z.d3 -- z.c4 -- z.d4 -- cycle;
+endchar;
+
+beginoperator(med_op_size#, 1); "medium filled star";
+ r := radius + line_thickness;
+ t := 1/11r;
+
+ reg_poly_points(a)(5, centre - t * up, r, 90);
+ reg_poly_points(b)(5, centre - t * up, .4r, 126);
+
+ fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle;
+endchar;
+
+beginoperator(large_op_size#, 1); "large star";
+ r := radius + line_thickness;
+ t := 1/11r;
+
+ reg_poly_points(a)(5, centre - t * up, r, 90);
+ reg_poly_points(b)(5, centre - t * up, .4r, 126);
+
+ s := r - line_thickness / sind (270 - angle (z.b0 - z.a0));
+
+ reg_poly_points(c)(5, centre - t * up, s, 90);
+ reg_poly_points(d)(5, centre - t * up, .4s, 126);
+
+ fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle;
+ unfill z.c0 -- z.d0 -- z.c1 -- z.d1 -- z.c2 -- z.d2 -- z.c3 -- z.d3 -- z.c4 -- z.d4 -- cycle;
+endchar;
+
+beginoperator(large_op_size#, 1); "large filled star";
+ r := radius + line_thickness;
+ t := 1/11r;
+
+ reg_poly_points(a)(5, centre - t * up, r, 90);
+ reg_poly_points(b)(5, centre - t * up, .4r, 126);
+
+ fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle;
+endchar;
+
+beginoperator(small_op_size#, 1); "asterisk";
+ r := w/2 - side_bearing;
+
+ penpos a0(4/3line_thickness, 0);
+ penpos a1(4/3line_thickness, 60);
+ penpos a2(4/3line_thickness, 120);
+ penpos a3(4/3line_thickness, 180);
+ penpos a4(4/3line_thickness, 240);
+ penpos a5(4/3line_thickness, 300);
+
+ penpos b0(2/3line_thickness, 0);
+ penpos b1(2/3line_thickness, 60);
+ penpos b2(2/3line_thickness, 120);
+ penpos b3(2/3line_thickness, 180);
+ penpos b4(2/3line_thickness, 240);
+ penpos b5(2/3line_thickness, 300);
+
+ reg_poly_points(a)(6, centre, r, 90);
+
+ z.b0 = z.b1 = z.b2 = z.b3 = z.b4 = z.b5 = centre;
+
+ fill stroke z.a0e -- z.b0e;
+ fill stroke z.a1e -- z.b1e;
+ fill stroke z.a2e -- z.b2e;
+ fill stroke z.a3e -- z.b3e;
+ fill stroke z.a4e -- z.b4e;
+ fill stroke z.a5e -- z.b5e;
+endchar;
+
+beginsymbol(18/10order_width# + 2side_bearing#, vcentre(2equal_spread# + line_thickness#)); "infinity";
+ pair centre;
+ centre := (w/2, (h-d)/2);
+ thick := line_thickness;
+ thin := letter_line_thickness;
+ alpha := 0;
+
+ z0 = centre - (9/10order_width - 1/2thin) * dir alpha;
+ z1 = centre + (9/10order_width - 1/2thin) * dir alpha;
+ z6 = 1/5[z0,z1];
+ z7 = 4/5[z0,z1];
+ z2 = z6 + equal_spread * dir (alpha + 90);
+ z3 = z6 - equal_spread * dir (alpha + 90);
+ z4 = z7 + equal_spread * dir (alpha + 90);
+ z5 = z7 - equal_spread * dir (alpha + 90);
+ z8 = z9 = centre;
+
+ penpos0(thin, alpha);
+ penpos1(thin, alpha);
+ penpos2(thick, alpha - 90);
+ penpos3(thick, alpha + 90);
+ penpos4(thick, alpha + 90);
+ penpos5(thick, alpha - 90);
+ penpos8(thin, alpha - 135);
+ penpos9(thin, alpha + 135);
+
+ fill stroke z4.e{dir (alpha + 180)}
+ .. {dir (alpha + 225)}z9.e
+ .. {dir (alpha + 180)}z3.e
+ .. {dir (alpha + 90)}z0.e
+ .. {dir alpha}z2.e
+ .. {dir (alpha - 45)}z8.e
+ .. {dir alpha}z5.e
+ .. {dir (alpha + 90)}z1.e
+ .. cycle;
+
+ penlabels (0,1,2,3,4,5,6,7,8,9);
+endchar;
+
+for alpha = 0, 180:
+ beginsymbol(16/10order_width# + 2side_bearing#, vcentre(2equal_spread# + line_thickness#)); "proportional";
+ pair centre;
+ centre := (w/2, (h-d)/2);
+ thick := line_thickness;
+
+ z0 = centre - (8/10order_width - 1/2thick) * dir alpha;
+ z1 = centre + (7/10order_width - 1/2thick) * dir alpha;
+ z4 = z1 + equal_spread * dir (alpha + 90);
+ z5 = z1 - equal_spread * dir (alpha + 90);
+ z6 - z4 = z7 - z5 = (1/10order_width + 1/2thick) * dir alpha;
+ z10 = 1/4[z0,z1];
+ z2 = z10 + equal_spread * dir (alpha + 90);
+ z3 = z10 - equal_spread * dir (alpha + 90);
+ z8 = z9 = centre + 1/10order_width * dir alpha;
+
+ penpos0(thick, alpha);
+ penpos2(thick, alpha - 90);
+ penpos3(thick, alpha + 90);
+ penpos4(thick, alpha + 90);
+ penpos5(thick, alpha - 90);
+ penpos6(thick, alpha + 90);
+ penpos7(thick, alpha - 90);
+ penpos8(thick, alpha + 225);
+ penpos9(thick, alpha + 135);
+
+ fill stroke z6.e
+ -- z4.e{dir (alpha + 180)}
+ .. {dir (alpha + 225)}z9.e
+ .. {dir (alpha + 180)}z3.e
+ .. {dir (alpha + 90)}z0.e
+ .. {dir alpha}z2.e
+ .. {dir (alpha - 45)}z8.e
+ .. {dir alpha}z5.e
+ -- z7.e;
+
+ penlabels (0,1,2,3,4,5,6,7,8,9);
+ endchar;
+endfor;
+
+beginsymbol(14/10order_width# + 2side_bearing#, vcentre(2equal_spread# + line_thickness#)); "crossing";
+ pair centre;
+ centre := (w/2, (h-d)/2);
+ thick := line_thickness;
+ alpha := 0;
+
+ z0 = centre - (6/10order_width - 1/2thick) * dir alpha;
+ z1 = centre + (6/10order_width - 1/2thick) * dir alpha;
+ z2 = z0 + equal_spread * dir (alpha + 90);
+ z3 = z0 - equal_spread * dir (alpha + 90);
+ z4 = z1 + equal_spread * dir (alpha + 90);
+ z5 = z1 - equal_spread * dir (alpha + 90);
+ z6 - z4 = z7 - z5 = (1/10order_width + 1/2thick) * dir alpha;
+ z2 - z8 = z3 - z9 = (1/10order_width + 1/2thick) * dir alpha;
+ z10 = z11 = 1/2[z0,z1];
+
+ penpos2(thick, alpha + 90);
+ penpos3(thick, alpha + 90);
+ penpos4(thick, alpha + 90);
+ penpos5(thick, alpha + 90);
+ penpos6(thick, alpha + 90);
+ penpos7(thick, alpha + 90);
+ penpos8(thick, alpha + 90);
+ penpos9(thick, alpha + 90);
+ penpos10(thick, alpha + 45);
+ penpos11(thick, alpha + 135);
+
+ fill stroke z6.e
+ -- z4.e{dir (alpha + 180)}
+ .. {dir (alpha + 225)}z11.e
+ .. {dir (alpha + 180)}z3.e
+ -- z9.e;
+ fill stroke z8.e
+ -- z2.e{dir alpha}
+ .. {dir (alpha - 45)}z10.e
+ .. {dir alpha}z5.e
+ -- z7.e;
+
+ penlabels (0,1,2,3,4,5,6,7,8,9,10,11);
+endchar;
+
+beginsymbol(equal_spread# + line_thickness# + 2side_bearing#, vcentre(med_op_size#)); "between";
+ pair centre;
+ centre := (w/2, (h-d)/2);
+ r := med_op_size/2;
+
+ z0 = centre;
+ z1 = centre;
+
+ draw_smile(a, 1, z0 - r * up, z0 + r * up, equal_spread, line_thickness, true);
+ draw_smile(b, -1, z1 - r * up, z1 + r * up, equal_spread, line_thickness, true);
+endchar;
+
+beginsymbol(2equal_spread# + 2side_bearing#, x_height#, desc_depth#); "intercalate";
+ z1 - z0 = z3 - z2 = (2equal_spread - line_thickness) * right;
+ z2 - z0 = (h + d - line_thickness) * up;
+
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = (w/2, (h-d)/2);
+
+ draw_line(z2, z3, true);
+ draw_line(1/2[z0,z1], 1/2[z2,z3], true);
+endchar;
+
+beginsymbol(2/3equal_spread# + line_thickness# + 2side_bearing#, vcentre(plus_size#)); "wreath";
+ pair centre;
+ centre := (w/2, (h-d)/2);
+
+ draw_sim(a, centre + 1/2plus_size * up, centre - 1/2plus_size * up, 1/3equal_spread, thick);
+endchar;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "angle";
+ z0 = centre + (plus_size - line_thickness)/2 * down;
+ z1 = z0 + sign * 1/2plus_size * right;
+ z2 = z0 + sign * 1/2plus_size * left;
+ x3 = xpart centre + sign * 1/2plus_size;
+ y3 = ypart centre + 2/3plus_size;
+ z4 = 4/5[z2,z3];
+ z5 = z4l + whatever * (z2 - z4);
+ z5 = z1r + whatever * right;
+ z6 = z4r + whatever * (z2 - z4);
+ z6 = z1r + whatever * right;
+ z7 = z1l + whatever * right;
+ z7 = z6 + whatever * dir (90 + sign * 17);
+
+ penpos1(line_thickness, 90);
+ penpos4(line_thickness, angle(z3 - z2) + sign * 90);
+
+ fill z1r -- z5 -- z4l -- z4r -- z6 -- z7 -- z1l -- cycle;
+
+ penlabels(1,2,3,4,5,6,7);
+ endchar;
+endfor;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "measured angle";
+ z0 = centre + (plus_size - line_thickness)/2 * down;
+ z1 = z0 + sign * 1/2plus_size * right;
+ z2 = z0 + sign * 1/2plus_size * left;
+ x3 = xpart centre + sign * 1/2plus_size;
+ y3 = ypart centre + 2/3plus_size;
+ z4 = 4/5[z2,z3];
+ z5 = z4l + whatever * (z2 - z4);
+ z5 = z1r + whatever * right;
+ z6 = z4r + whatever * (z2 - z4);
+ z6 = z1r + whatever * right;
+ z7 = z1l + whatever * right;
+ z7 = z6 + whatever * dir (90 + sign * 17);
+ z8 = 2/3[z2,z1];
+ z9 = z2 + sign * ((z8 - z2) rotated angle (z3 - z2));
+
+ penpos1(line_thickness, 90);
+ penpos4(line_thickness, angle(z3 - z2) + sign * 90);
+ penpos8(line_thickness, 90 - sign * 90);
+ penpos9(line_thickness, angle(z3 - z2));
+
+ fill z1r -- z5 -- z4l -- z4r -- z6 -- z7 -- z1l -- cycle;
+ fill stroke z8.e{up} .. {dir (angle (z3 - z2) + sign * 90)}z9.e;
+
+ penlabels(1,2,3,4,5,6,7,8,9);
+ endchar;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginoperator(plus_size#, 1); "spherical angle (" & decimal alpha & ")";
+ draw_less(a, centre - 1/2plus_size * dir alpha, centre + 1/2plus_size * dir alpha, 2radius, line_thickness, false, false);
+ z3 = 2/3[z2a, z0a];
+ z4 = 2/3[z2a, z1a];
+
+ penpos3(line_thickness, alpha + 35);
+ penpos4(line_thickness, alpha - 35);
+
+ fill stroke z4.e{dir (alpha + 55)} .. {dir (alpha + 125)}z3.e;
+
+ penlabels(3,4);
+ endchar;
+endfor;
+
+beginoperator(plus_size#, 1); "right angle";
+ z3 - z0 = z2 - z1 = 2radius * right;
+ z0 - z1 = 2radius * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw_line(z0, z1, true);
+ draw_line(z1, z2, true);
+endchar;
+
+beginoperator(plus_size#, 1); "measured right angle";
+ thick := line_thickness;
+
+ z3 - z0 = z2 - z1 = 2radius * right;
+ z0 - z1 = 2radius * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+ z4 = 3/5[z1,z0] + (1/2thick - eps) * right;
+ z5 = 3/5[z1,z2] + (1/2thick - eps) * up;
+
+ penpos4(thick, 90);
+ penpos5(thick, 0);
+
+ draw_line(z0, z1, true);
+ draw_line(z1, z2, true);
+ fill stroke z4.e{right} .. {down}z5.e;
+
+ penlabels(0,1,2,3,4,5);
+endchar;
+
+beginoperator(plus_size#, 1); "squared right angle";
+ z3 - z0 = z2 - z1 = 2radius * right;
+ z0 - z1 = 2radius * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+ z4 = 1/2[z1,z0];
+ z5 = 1/2[z1,z2];
+
+ penpos4(line_thickness, 90);
+ penpos5(line_thickness, 0);
+
+ draw_line(z0, z1, true);
+ draw_line(z1, z2, true);
+ draw_line(z4, centre, true);
+ draw_line(z5, centre, true);
+
+ penlabels(0,1,2,3,4,5);
+endchar;
+
+beginoperator(plus_size#, 1); "right angle with dot";
+ thick := line_thickness;
+
+ z3 - z0 = z2 - z1 = 2radius * right;
+ z0 - z1 = 2radius * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+ z4 = 3/5[z1,z0] + (1/2thick - eps) * right;
+ z5 = 3/5[z1,z2] + (1/2thick - eps) * up;
+ z6 = 1/4[z1,z3];
+
+ penpos4(line_thickness, 90);
+ penpos5(line_thickness, 0);
+
+ draw_line(z0, z1, true);
+ draw_line(z1, z2, true);
+ fill stroke z4.e{right} .. {down}z5.e;
+ fill dot(z6, 1/2dot_size);
+
+ penlabels(0,1,2,3,4,5);
+endchar;
+
+beginsymbol(3u# + line_thickness#, 3/5asc_height#, 0); "prime";
+ z0 = (w, h);
+ z1 = z0 + (3/4u + line_thickness) * left;
+ z2 = (1u, 1/9h);
+ z3 = z2 + 5/4line_thickness * right;
+
+ fill z0 -- z1 -- z2 -- z3 -- cycle;
+ labels(0,1,2,3);
+endchar;
+
+beginsymbol(3u# + line_thickness#, 3/5asc_height#, 0); "backprime";
+ z0 = (0, h);
+ z1 = z0 + (3/4u + line_thickness) * right;
+ z2 = (w - 1u, 1/9h);
+ z3 = z2 + 5/4line_thickness * left;
+
+ fill z0 -- z1 -- z2 -- z3 -- cycle;
+ labels(0,1,2,3);
+endchar;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "product";
+ draw_product(centre, plus_size, plus_size, sign, letter_line_thickness);
+ endchar;
+endfor;
+
+beginsymbol(2/5asc_height# + 2side_bearing# + line_thickness#, asc_height#, 0); "small integral";
+ pair centre;
+ centre := (w/2, (h - d)/2);
+
+ draw_integral(a, 1/2, centre, line_thickness);
+endchar;
+
+beginsymbol(11u# + line_thickness# + 2side_bearing#, asc_height#, 0); "check mark";
+ thick := line_thickness;
+
+ x1l = side_bearing;
+ y1 = math_axis;
+ x2 = side_bearing + 3u;
+ y2 = -d;
+ x3 = w -x2;
+ y3 = h;
+ x4r = w - side_bearing;
+ y4l = h;
+ z5r = 1/10[z4r,z1r];
+
+ theta := angle(z3 - z2);
+
+ penpos1(4/3thick, 30);
+ penpos2(thick, 0);
+ penpos3(thick, -90 + theta);
+ penpos4(1/3thick, -80);
+ penpos5(thick, -50);
+
+ z6 = z1r + whatever * (z2l - z1l);
+ z6 = z3l + whatever * (z3r - z2r);
+
+ fill z1l -- z2l -- z2r{z3r - z2r} .. {dir 40}z5r .. z4r -- z4l{dir 180} ... z5l{dir 220} .. {z2l - z3l}z6 -- z1r -- cycle;
+
+ penlabels(1,2,3,4,5,6);
+endchar;
+
+beginsymbol(6u# + line_thickness# + 2side_bearing#, 5/4asc_height#, 1/8asc_height#); "lightning";
+ thick := line_thickness;
+
+ x3r = w - side_bearing;
+ x2l = side_bearing + u;
+ x4 = 1/3w;
+ y1l = h;
+ y3r = 14/24h;
+ y4 = -d + 1/2thick;
+ z6 - z5 = whatever * dir 15;
+
+ penpos1(3/2thick, -20);
+ penpos2(3/2thick, 15);
+ penpos3(2thick, 15);
+ penpos4(thick, -20);
+ penpos5(thick, -75);
+ penpos6(thick, -75);
+
+ z1 - z2 = whatever * (z4 - z3);
+ z5r = z2;
+ z6l = z3;
+ z7 = whatever[z1r,z2r];
+ z7 = whatever[z5l,z6l];
+ z8 = whatever[z4l,z3l];
+ z8 = whatever[z6r,z5r];
+
+ fill z1l -- z2l -- z8 -- z4l -- z4r -- z3r -- z7 -- z1r -- cycle;
+ draw_arrowhead(z4, angle (z4l - z3l), 4/5arrow_spread, thick);
+
+ penlabels(1,2,3,4,7,8);
+endchar;
+
+for filled = false, true:
+ beginsymbol(13u#, cap_height#, 0); "diamond suit";
+ thick := line_thickness;
+ bend := 5;
+
+ x0 = x2 = x4 = x6 = w/2;
+ 1/2[y0,y2] = 1/2[y4,y6] = h/2;
+ y2 - y0 = h;
+ 1/2[x1,x3] = 1/2[x5,x7] = w/2;
+ x3 - x1 = w - 2side_bearing;
+ y1 = y3 = y5 = y7 = h/2;
+
+ theta := angle(z2 - z1);
+
+ y6 - y4 = h - 2thick / cosd theta;
+ x7 - x5 = w - 2side_bearing - 2thick / sind theta;
+
+ fill z0{dir (180-theta-bend)} .. {dir (180-theta+bend)}z1{dir (theta-bend)} .. {dir (theta+bend)}z2{dir (-theta-bend)} .. {dir (-theta+bend)}z3{dir (180+theta-bend)} .. {dir (180+theta+bend)}z0 & cycle;
+ if not filled:
+ unfill z4{dir (180-theta-bend)} .. {dir (180-theta+bend)}z5{dir (theta-bend)} .. {dir (theta+bend)}z6{dir (-theta-bend)} .. {dir (-theta+bend)}z7{dir (180+theta-bend)} .. {dir (180+theta+bend)}z4 & cycle;
+ fi;
+ labels(0,1,2,3,4,5,6,7);
+ endchar;
+endfor;
+
+for filled = false, true:
+ beginsymbol(14u#, cap_height#, 0); "heart suit";
+ thick := line_thickness;
+
+ x0 = x1l = x1'l = w/2;
+ y0 = 0;
+ 1/2[x2l,x3l] = w/2;
+ x3l - x2l = w - 2side_bearing;
+ y1r = y1'r;
+ y2l = y3l = 3/4h;
+ x4 = 1/2[x1,x2];
+ x5 = 1/2[x1',x3];
+ y4l = y5l = h;
+ h - y2 = 2(h - y1l);
+
+ penpos1(thick, 180+45);
+ penpos1'(thick, -45);
+ penpos2(thick, 0);
+ penpos3(thick, 180);
+ penpos4(thick, -90);
+ penpos5(thick, -90);
+
+ path p[];
+ numeric t[];
+
+ z6 = z1r + whatever * dir (270+45);
+ z6 = z1'r + whatever * dir (270-45);
+ z7 = z0 + thick * dir 20;
+ z8 = z0 + thick * dir (180-20);
+ p1 = z7{dir (90+35)} .. {dir 90}z2r;
+ p2 = z3r{dir 270} .. {dir (270-35)}z8;
+ (t1,t2) = p1 intersectiontimes p2;
+
+ fill z0{dir (90+35)} .. {dir 90}z2l .. {dir 0}z4l .. {dir (270+45)}z1l{dir (90-45)} .. {dir 0}z5l .. {dir 270}z3l .. {dir (270-35)}z0 & cycle;
+ if not filled:
+ unfill subpath (t1,1) of p1 & z2r{dir 90} .. {dir 0}z4r .. {dir (270+45)}z1r -- z6 -- z1'r{dir (90-45)} .. {dir 0}z5r .. {dir 270}z3r & subpath (0,t2) of p2 -- cycle;
+ fi;
+
+ penlabels(0,1,1',2,3,4,5,6,7,8,10);
+ endchar;
+endfor;
+
+beginsymbol(13u#, cap_height#, 0); "spade suit";
+ x0 = x1 = w/2;
+ y0 = h;
+ 1/2[x2,x3] = w/2;
+ x3 - x2 = w - 2side_bearing;
+ y2 = y3;
+ x4 = 1/2[x1,x2];
+ x5 = 1/2[x1,x3];
+ y4 = y5 = 1/6h;
+ y2 - y4 = x4 - x2;
+ y1 = 3/5[y2,y4];
+ x6 = x0;
+ y6 = 0;
+
+ penpos1(2u, 0);
+ penpos6(3u, 0);
+
+ fill z0{dir (270-30)} .. z2 .. z4 .. {dir (90-30)}z1l -- z6l --
+ z6r -- z1r{dir (270+30)} .. z5 .. z3 .. {dir (90+30)}z0 -- cycle;
+
+ penlabels(0,1,2,3,4,5,6);
+endchar;
+
+beginsymbol(14u#, cap_height#, 0); "club suit";
+ r := 1/4(w - 2side_bearing);
+
+ x0 = w/2;
+ y0 = h - 2.5r;
+ x1 = w - x3 = side_bearing + r;
+ y1 = y3 = y0;
+ x2 = x4 = x0;
+ y2 = h - r;
+ y4 = 0;
+
+ penpos0(3/2u, 0);
+ penpos2(3/2u, 0);
+ penpos4(3u, 0);
+
+ fill circle(z1, r);
+ fill circle(z2, r);
+ fill circle(z3, r);
+ fill stroke z2e -- z0e -- z4e;
+
+ penlabels(0,1,2,3,4);
+endchar;
+
+beginoperator(med_op_size#, 1); "maltese";
+ r := 1/2med_op_size;
+ thick := line_thickness;
+
+ 1/2[z0,z1] = centre + r * left;
+ 1/2[z2,z3] = centre + r * down;
+ 1/2[z4,z5] = centre + r * right;
+ 1/2[z6,z7] = centre + r * up;
+ z0 - z1 = z5 - z4 = r * up;
+ z3 - z2 = z6 - z7 = r * right;
+ 1/2[z8,z9] = centre + 1/2thick * up;
+ 1/2[z10,z11] = centre - 1/2thick * up;
+ z9 - z8 = z11 - z10 = 2thick * right;
+ 1/2[z12,z13] = centre + thick * up;
+ 1/2[z14,z15] = centre - thick * up;
+ z13 - z12 = z15 - z14 = thick * right;
+
+ fill z0 -- z1 -- z10 -- z11 -- z4 -- z5 -- z9 -- z8 -- cycle;
+ fill z6 -- z7 -- z12 -- z14 -- z2 -- z3 -- z15 -- z13 -- cycle;
+
+ labels(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15);
+endchar;
+
+beginoperator(med_op_size#, 2/sqrt(3)); "star of david";
+ r := med_op_size/sqrt(3);
+
+ reg_poly_points(a)(6, centre, r, 90);
+
+ s := r - 4/5line_thickness / sind (270 - angle (z.a2 - z.a0));
+
+ reg_poly_points(b)(6, centre, s, 90);
+
+ z0.r = z.a0; z0.l = z.b0;
+ z1.r = z.a2; z1.l = z.b2;
+ z2.r = z.a4; z2.l = z.b4;
+ z3.r = z.a1; z3.l = z.b1;
+ z4.r = z.a3; z4.l = z.b3;
+ z5.r = z.a5; z5.l = z.b5;
+
+ fill stroke z0.e -- z1.e -- z2.e -- cycle;
+ fill stroke z4.e -- z5.e -- z3.e -- cycle;
+
+ penlabels(0,1,2,3,4,5);
+endchar;
+
+beginoperator(plus_size#, 1); "sector";
+ path p;
+ numeric r,s;
+
+ thick := line_thickness;
+ alpha := 90;
+
+ z0 = centre - 1/2plus_size * dir alpha;
+ z1 = z0 + 9/10plus_size * dir alpha;
+
+ put_less(a, z0, z1, 9/10plus_size, thick, false, false);
+
+ z9 = whatever[z3a.l, z0a.l] = whatever[z4a.l,z1a.l];
+
+ penpos1'(thick, 90);
+
+ z1'r = z9 + length(z0a.l - z9)*up;
+ z4r = z0a.l - line_thickness*(dir(angle(z0a.l-z9)));
+ z5r = z1a.l - line_thickness*(dir(angle(z1a.l-z9)));
+
+ theta := angle(z0a.l - z9);
+
+ p = (z4r{dir(theta -90)} .. z1'l .. {dir(-theta +90)}z5r);
+ r = ypart ((z5a -- z0a.r) intersectiontimes p);
+ s = ypart ((z5a -- z1a.r) intersectiontimes p);
+ show(-theta-90);
+ fill z0a.l{dir(theta -90)} .. z1'.r .. {dir(-theta +90)}z1a.l -- z4a.l -- z3a.l -- cycle;
+ unfill subpath (r,s) of p -- z5a -- cycle;
+
+ penlabels(1',4,5,9);
+endchar;
+
+beginsymbol(5/4order_width# + 2side_bearing#, cap_height#, 0); "forall";
+ thick := line_thickness;
+
+ x0 = side_bearing + 1/2thick;
+ x1 = w - side_bearing - 1/2thick;
+ x2 = w/2 - 1/4thick;
+ x3 = w/2 + 1/4thick;
+ y0 = y1 = h;
+ y2 = y3 = 0;
+
+ penpos0(thick / sind(abs(angle(z2 - z0))), 0);
+ penpos1(thick / sind(abs(angle(z2 - z0))), 0);
+
+ z4 = z0l + whatever * (z2 - z0) = z2 + whatever * right;
+ z5 = z1r + whatever * (z3 - z1) = z2 + whatever * right;
+ z6 = z0r + whatever * (z2 - z0) = z1l + whatever * (z3 - z1);
+ z7 = whatever [z0,z2];
+ z8 = whatever [z1,z2];
+ y7 = y8 = 0.6 * y0;
+
+ fill z0l -- z4 -- z5 -- z1r -- z1l -- z6 -- z0r -- cycle;
+ draw_line(z7, z8, false);
+
+ penlabels(0,1,2,3,4,5,6,7,8);
+endchar;
+
+for negated = 0, 1:
+ beginsymbol(order_width# + 2side_bearing#, if negated = 0: cap_height# else: cap_height# + 2/3equal_spread# fi, if negated = 0: 0 else: 2/3equal_spread# fi); "exists";
+ thick := line_thickness;
+
+ x1 = x3 = w - side_bearing - thick/2;
+ y1 = cap_height;
+ y3 = 0;
+ x1' = x3' = w - side_bearing;
+ x0 = x2 = side_bearing;
+ y0 = y1' = cap_height - line_thickness/2;
+ y2 = y3' = line_thickness/2;
+ z4 = 1/8[1/2[z0,z2], 1/2[z1,z3]];
+
+ draw_straight(z1, z3, thick, false);
+ draw_line(z0, z1', false);
+ draw_line(z4, 1/2[z1,z3], false);
+ draw_line(z2, z3', false);
+
+ if negated = 1:
+ stroke_through(1/2[1/2[z0,z2], 1/2[z1,z3]], h + d - stroke_through_thickness)
+ fi;
+ endchar;
+endfor;
+
+beginsymbol(order_width# + 2side_bearing#, cap_height#, 0); "exists finitely many";
+ thick := line_thickness;
+
+ x1 = x3 = w - side_bearing - thick/2;
+ y1 = cap_height;
+ y3 = 0;
+ x3' = w - side_bearing;
+ x0 = x2 = side_bearing;
+ y0 = cap_height - line_thickness/2;
+ y2 = y3' = line_thickness/2;
+ z4 = 1/8[1/2[z0,z2], 1/2[z1,z3]];
+
+ draw_straight(z1, z3, thick, false);
+ draw_line(z4, 1/2[z1,z3], false);
+ draw_line(z2, z3', false);
+endchar;
+
+beginsymbol(5/4order_width# + 2side_bearing#, cap_height#, 0); "game quantifier";
+ thick := line_thickness;
+
+ x0 = x1 = 1/2order_width + side_bearing;
+ y0 = cap_height - 1/2thick;
+ y1 = 1/2line_thickness;
+ x2 = w - side_bearing - 1/2thick;
+ y2 = (h - d)/2;
+ x3r = x4r = side_bearing;
+ y3 = 5/6cap_height;
+ y4 = 1/6cap_height;
+
+ penpos0(thick, 90);
+ penpos1(thick, -90);
+ penpos2(thick, 0);
+ penpos3(thick, 125);
+ penpos4(thick, -125);
+
+ fill stroke z3.e .. z0.e .. z2.e{down} .. z1.e{left} .. z4.e;
+ draw_straight(z4r + 1/2thick * right, 2/5[z4r,z3r] + 1/2thick * right, thick, false);
+ draw_line(2/5[z4r,z3r], 2/5[z4r,z3r] + 1/2order_width * right, false);
+
+ penlabels(0,1,2,3,4);
+endchar;
+
+beginsymbol(7/8order_width# + 2side_bearing#, cap_height#, 0); "complement";
+ thick := line_thickness;
+
+ z0 - z1 = (cap_height - thick) * up;
+ z3 - z2 = (w - 2side_bearing - thick) * right;
+ 1/2[z0,z1] = 1/2[z2,z3] = (w/2,(h-d)/2);
+ x4 = x6 = x2;
+ x5 = x7 = x3;
+ y4 = y5 = 1/4[y0,y1];
+ y6 = y7 = 3/4[y0,y1];
+
+ penpos0(thick, 90);
+ penpos1(thick, -90);
+ penpos4(thick, -180);
+ penpos5(thick, 0);
+ penpos6(thick, -180);
+ penpos7(thick, 0);
+
+ fill stroke z5.e{up} .. z0.e .. {down}z4.e -- z6.e{down} .. z1.e .. {up}z7.e;
+
+ penlabels(0,1,2,3,4,5,6,7);
+endchar;
+
+beginsymbol(4u# + line_thickness# + 2side_bearing#, asc_height#, 0); "flat";
+ thick := line_thickness;
+
+ x0l = x1l = side_bearing;
+ x4l = x5 = side_bearing + thick;
+ y0 = -d;
+ y1 = h;
+ x2r = w - side_bearing;
+ x3 = w/2;
+ y3r = x_height;
+ y2 = 1/2[y0,y1];
+ y4r = 5/6x_height;
+ y5 = thick / cosd 35 - d;
+
+ penpos0(thick, 0);
+ penpos1(thick, 0);
+ penpos2(thick, 0);
+ penpos3(7/8thick, 90);
+ penpos4(2/3thick, 130);
+
+ fill z1.l -- z0.l -- z0.r{dir 35} ... {up}z2.r .. {left}z3.r ..{dir 230}z4.r -- z4.l{dir 50} .. {right}z3.l .. {down}z2.l .. {dir 215}z5 -- z1.r -- cycle;
+
+ penlabels (0,1,2,3,4,5);
+endchar;
+
+beginsymbol(4u# + line_thickness# + 2side_bearing#, asc_height#, desc_depth#); "natural";
+ thick := line_thickness;
+
+ x0l = x1l = w - x2r = w - x3r = side_bearing;
+ x4 = x5 = w - x6 = w - x7 = side_bearing;
+ y1 = y3 = h;
+ y7r = x_height;
+ y4l = 0;
+ y0 = y2 = -d;
+ z6 = z4 + whatever * dir 15;
+ z5 = z7 + whatever * dir 15;
+
+ penpos0(thick, 0);
+ penpos1(thick, 0);
+ penpos2(thick, 0);
+ penpos3(thick, 0);
+ penpos4(thick/cosd(15), 90);
+ penpos5(thick/cosd(15), 90);
+ penpos6(thick/cosd(15), 90);
+ penpos7(thick/cosd(15), 90);
+
+ z8 = whatever[z0,z1] = whatever[z4,z6];
+ z9 = whatever[z2,z3] = whatever[z5,z7];
+
+ penpos8(thick, 0);
+ penpos9(thick, 0);
+
+ fill stroke z1e -- z8e;
+ fill stroke z9e -- z2e;
+ fill stroke z4e -- z6e;
+ fill stroke z5e -- z7e;
+
+ penlabels(1,2,4,5,6,7);
+endchar;
+
+beginsymbol(4u# + line_thickness# + 2side_bearing#, asc_height#, desc_depth#); "sharp";
+ thick := line_thickness;
+
+ x0l - x4 = x1l - x5 = x6 - x2r = x7 - x3r;
+ x2l - x0r = x3l - x1r = 2(x0l - x4);
+ x4 = x5 = w - x6 = w - x7 = side_bearing;
+ y3 = h;
+ y7r = x_height;
+ y4l = 0;
+ y0 = -d;
+ z2 = z0 + whatever * dir 20;
+ z1 = z3 + whatever * dir 20;
+ z6 = z4 + whatever * dir 15;
+ z5 = z7 + whatever * dir 15;
+
+ penpos0(thick, 0);
+ penpos1(thick, 0);
+ penpos2(thick, 0);
+ penpos3(thick, 0);
+ penpos4(thick/cosd(15), 90);
+ penpos5(thick/cosd(15), 90);
+ penpos6(thick/cosd(15), 90);
+ penpos7(thick/cosd(15), 90);
+
+ fill stroke z0e -- z1e;
+ fill stroke z2e -- z3e;
+ fill stroke z4e -- z6e;
+ fill stroke z5e -- z7e;
+
+ penlabels (0,1,2,3,4,5,6,7);
+endchar;
+
+beginsymbol(8u# + letter_line_thickness# + 2side_bearing#, cap_height#, 0); "aleph";
+ thick := letter_line_thickness;
+
+ x0l = x2l = side_bearing;
+ x1r = x3r = w - side_bearing;
+ y0l = h;
+ y1 = h;
+ y2 = 0;
+ y3r = 0;
+
+ penpos0(thick/sind(abs(angle(z3r-z0l))), 0);
+ penpos1(thick, 0);
+ penpos2(thick, 0);
+ penpos3(thick/sind(abs(angle(z3r-z0l))), 0);
+
+ path p;
+ p = z0{dir -70} .. {dir -70}z3;
+
+ z4 = point 3/10 of p;
+ z5 = point 5/8 of p;
+ z6 = point 1/2 of p;
+
+ penpos4(8/9thick, -40);
+ penpos5(8/9thick, -45);
+
+ penpos6(thick/sind(abs(angle(z3r-z0l))),0);
+
+ fill stroke z0.e{dir -70} .. z6.e .. {dir -70}z3.e;
+ fill stroke z2.e{up} .. {dir 50}z4.e;
+ fill stroke z5.e{dir 45} .. {up}z1.e;
+
+ penlabels(0,1,2,3,4,5,6);
+endchar;
+
+beginsymbol(8u# + letter_line_thickness# + 2side_bearing#, cap_height#, 0); "beth";
+ thick := letter_line_thickness;
+
+ x0 = u + side_bearing;
+ x1 = 5/8[x2,x4];
+ x2 = side_bearing;
+ x3 = w - side_bearing;
+ y0r = h;
+ y1r = h;
+ y2l = 0;
+ y3l = 0;
+ z4r = 7/8[z2,z3];
+ x5 = x4;
+ y5 = 2/3h;
+
+ penpos0(thick, 90);
+ penpos1(thick, 90);
+ penpos2(thick, 90);
+ penpos3(thick, 90);
+ penpos4(thick, 0);
+ penpos5(thick, 0);
+
+ fill stroke z2.e -- z3.e;
+ fill stroke z0.e -- z1.e{right} ..tension3/4.. {down}z5.e -- z4.e;
+
+ penlabels(0,1,2,3,4,5);
+endchar;
+
+beginsymbol(6u# + letter_line_thickness# + 2side_bearing#, cap_height#, 0); "gimel";
+ thick := letter_line_thickness;
+
+ x0 = x2 = side_bearing;
+ x2'r = 1/8[x0,x1];
+ x1 = x3r = w - side_bearing;
+ x4 = 1/4[x0,x1];
+ x5 = 1/2[x0,x1];
+ x6 = 2/3[x0,x1];
+ y0 = y1 = h;
+ y2l = y3 = 0;
+ y2' = y2;
+ y4r = h + 1/4thick;
+ z5 = z4 + whatever * dir -30;
+ y6 = 2/3h;
+
+ penpos2(thick, 90);
+ penpos2'(thick * sind 80, 90);
+ penpos3(thick, 0);
+ penpos4(thick, 60);
+ penpos5(thick, 60);
+ penpos6(thick, 0);
+
+ path p;
+ p = z6{dir -82} .. {dir -67}z3;
+ z7 = point 1/4 of p;
+ x8 = 2/5[x0,x1];
+ z7 = z8 + whatever * dir 60;
+
+ penpos7(5/6thick, 150);
+ penpos8(thick, 125);
+
+ fill stroke z4.e -- z5.e{dir -30} .. {dir -82}z6.e .. {dir -67}z3.e;
+ fill stroke z2.e -- z2'.e{right} ... {dir 60}z8.e -- z7.e;
+
+ penlabels(0,1,2,2',3,4,5,6,7,8);
+endchar;
+
+beginsymbol(7u# + letter_line_thickness# + 2side_bearing#, cap_height#, 0); "daleth";
+ thick := letter_line_thickness;
+
+ x0 = side_bearing;
+ x1 = w - side_bearing;
+ y0r = y1r = h;
+ x3r = x2r = 4/5[x0,x1];
+ y2 = y0;
+ y3 = 0;
+
+ penpos0(thick, 90);
+ penpos1(thick, 90);
+ penpos2(thick, 0);
+ penpos3(thick, 0);
+
+ fill stroke z0.e -- z1.e;
+ fill stroke z2.e -- z3.e;
+
+ penlabels(0,1,2,3);
+endchar;
+
+begingroup;
+save slant;
+save currenttransform;
+slant := 0.212557;
+transform currenttransform;
+currenttransform := identity slanted slant yscaled aspect_ratio scaled granularity shifted (-u,0);
+
+beginsymbol(9u# + 2letter_line_thickness#, x_height#, desc_depth#); "Weierstrass p";
+ numeric theta;
+ theta = 90 - angle(8u,h);
+ slope := -h/8u; % angle at middle
+ superness := 1/sqrt 2;
+ superpull := 1/6;
+
+ penpos2(letter_line_thickness, -60);
+ penpos1(letter_line_thickness, theta);
+ penpos7(letter_line_thickness, -90);
+
+ x2 + 1/2u = x1 = x7 - 1/2u = 3u;
+ y2l = h;
+ y7r = -d;
+ y1 = 2/5[-d, h];
+ x3l = 1/2u;
+ x6r = max(x7 + letter_line_thickness, 1/2w - 1/4u);
+ x3r - x3l = x6r - x6l =letter_line_thickness;
+
+ ellipse_set(2l,3l,4l,1l);
+ ellipse_set(2r,3r,4r,1r);
+ ellipse_set(7l,6l,5l,1l);
+ ellipse_set(7r,6r,5r,1r);
+
+ y3 = y3r;
+ y6 = y6r;
+
+ fill stroke super_arc.e(2,3) & z3e{down} .. z4e .. z5e .. z6e{down} & super_arc.e(6,7); % flourish
+
+ penpos8(letter_line_thickness, 180);
+ penpos9(letter_line_thickness, 90);
+ penpos10(letter_line_thickness, 0);
+ penpos11(letter_line_thickness, -90);
+ penpos12(letter_line_thickness, -100);
+
+ x10r = w - 3/2u + 1/2letter_line_thickness;
+ x8r = u;
+ x9 = x11 = 1/2w + 3/2u;
+ x12l = max(x6r, .5w + .5u);
+ y8 = y11r = 0;
+ y9r = 19/20h;
+ y10 = 1/2[y9,y11];
+ y12r = 1/4[y11r,y1l];
+
+ fill stroke z7e{left} ... z8e{up} ... z9e .. z10e .. z11e .. z12.e; % stem and bowl
+
+ penlabels(1,2,3,4,5,6,7,8,9,10,11,12);
+endchar;
+endgroup;
+
+beginsymbol(8u# + letter_line_thickness# + 2side_bearing#, cap_height#, 0); "nabla";
+ thick:=letter_line_thickness;
+ thin := 4/5thick;
+ thicker := thick;
+
+ y0r = y1r = h;
+ y2 = 0;
+
+ x0r = side_bearing;
+ x1r = w - side_bearing;
+ x2 = w/2;
+
+ penpos0(thin, 90);
+ penpos1(thin,90);
+ penpos2(thicker,0);
+
+ y3 = y4 = h-thick;
+ z3 = z2r + whatever*(z0l-z2l);
+ z4 = z2l + whatever*(z1l-z2r);
+
+ z5 = whatever[z3,z2r] = whatever[z4,z2l];
+
+ fill z0r -- z0l -- z2l -- z2r -- z1l -- z1r -- cycle;
+ unfill z3 -- z4 -- z5 -- cycle;
+
+ penlabels(0,1,2,3,4,5);
+endchar;
+
+for sign = 1, -1:
+ beginoperator(plus_size#, 1); "product integral";
+ draw_productintegral(centre, plus_size, plus_size, sign, letter_line_thickness);
+ endchar;
+endfor;
diff --git a/fonts/mdsymbol/source/mdoperators.mf b/fonts/mdsymbol/source/mdoperators.mf
new file mode 100644
index 0000000000..8158d56ed0
--- /dev/null
+++ b/fonts/mdsymbol/source/mdoperators.mf
@@ -0,0 +1,478 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+def sthick(expr scale) =
+%option 1: make symbols thicker with scale
+ sqrt scale
+%option 2: keep same thickness
+% 1
+enddef;
+
+def bop_line_thickness(expr scale) =
+ bop_thickness_fac * letter_line_thickness * sqrt sthick(scale)
+enddef;
+def bop_part_line_thickness(expr scale) =
+ bop_thickness_fac * line_thickness * sqrt sthick(scale)
+enddef;
+def bop_dot_size(expr scale) =
+ bop_thickness_fac * 3/4dot_size * sqrt sthick(scale)
+enddef;
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big plus";
+ draw_line_linethick(centre + op_height/2 * right, centre + op_height/2 * left, bop_line_thickness(scale), false);
+ draw_line_linethick(centre + op_height/2 * up, centre + op_height/2 * down, bop_line_thickness(scale), false);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big times";
+ z1 - z0 = z3 - z2 = (op_width - bop_line_thickness(scale) / sqrt(2)) * right;
+ z2 - z0 = (op_width - bop_line_thickness(scale) / sqrt(2)) * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw_line_linethick(z0, z3, bop_line_thickness(scale), false);
+ draw_line_linethick(z1, z2, bop_line_thickness(scale), false);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big wedge";
+ draw_less(a, centre + sign * op_height/2 * up, centre - sign * op_height/2 * up, op_width - bop_line_thickness(scale), bop_line_thickness(scale), false, true);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big wedge dot";
+ draw_less(a, centre + sign * op_height/2 * up, centre - sign * op_height/2 * up, op_width - bop_line_thickness(scale), bop_line_thickness(scale), false, true);
+ fill dot(centre - sign * 1/4op_height * up, bop_dot_size(scale));
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(4/3scale, scale); "double big wedge";
+ z0 = centre - 1/8op_width * right;
+ z1 = centre + 1/8op_width * right;
+
+ draw_less(a, z0 + sign * op_height/2 * up, z0 - sign * op_height/2 * up, 3/4op_width - bop_line_thickness(scale), bop_line_thickness(scale), false, true);
+ draw_less(b, z1 + sign * op_height/2 * up, z1 - sign * op_height/2 * up, 3/4op_width - bop_line_thickness(scale), bop_line_thickness(scale), false, true);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big curly wedge";
+ draw_prec(a, centre + sign * op_height/2 * up, centre - sign * op_height/2 * up, op_width - bop_line_thickness(scale), bop_line_thickness(scale), false);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big union";
+ draw_subset(a, centre + sign * op_height/2 * up, centre - sign * op_height/2 * up, op_width - bop_line_thickness(scale), bop_line_thickness(scale));
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big union dot";
+ draw_subset(a, centre + sign * op_height/2 * up, centre - sign * op_height/2 * up, op_width - bop_line_thickness(scale), bop_line_thickness(scale));
+ fill dot(centre - sign * 1/8op_height * up, bop_dot_size(scale));
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big union plus";
+ draw_subset(a, centre + sign * op_height/2 * up, centre - sign * op_height/2 * up, op_width - bop_line_thickness(scale), bop_line_thickness(scale));
+
+ r := 1/4op_width;
+
+ draw_line_linethick(centre - sign * 1/8op_width * up + r * right, centre - sign * 1/8op_width * up + r * left, bop_line_thickness(scale), false);
+ draw_line_linethick(centre + (r - sign * 1/8op_width) * up, centre + (r + sign * 1/8op_width) * down, bop_line_thickness(scale), false);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big square union";
+ z3 - z0 = z2 - z1 = (op_width - bop_line_thickness(scale)) * right;
+ z1 - z0 = sign * (op_height - bop_line_thickness(scale)) * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw_line_linethick(z0, z1, bop_line_thickness(scale), true);
+ draw_line_linethick(z1, z2, bop_line_thickness(scale), true);
+ draw_line_linethick(z2, z3, bop_line_thickness(scale), true);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big square union dot";
+ z3 - z0 = z2 - z1 = (op_width - bop_line_thickness(scale)) * right;
+ z1 - z0 = sign * (op_height - bop_line_thickness(scale)) * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw_line_linethick(z0, z1, bop_line_thickness(scale), true);
+ draw_line_linethick(z1, z2, bop_line_thickness(scale), true);
+ draw_line_linethick(z2, z3, bop_line_thickness(scale), true);
+ fill dot(centre - sign * 1/8op_height * up, bop_dot_size(scale));
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(scale, scale); "big square union plus";
+ z3 - z0 = z2 - z1 = (op_width - bop_line_thickness(scale)) * right;
+ z1 - z0 = sign * (op_height - bop_line_thickness(scale)) * up;
+ 1/2[1/2[z0,z1], 1/2[z2,z3]] = centre;
+
+ draw_line_linethick(z0, z1, bop_line_thickness(scale), true);
+ draw_line_linethick(z1, z2, bop_line_thickness(scale), true);
+ draw_line_linethick(z2, z3, bop_line_thickness(scale), true);
+
+ r := 1/4op_width;
+
+ draw_line_linethick(centre - sign * 1/8op_width * up + r * right, centre - sign * 1/8op_width * up + r * left, bop_line_thickness(scale), false);
+ draw_line_linethick(centre + (r - sign * 1/8op_width) * up, centre + (r + sign * 1/8op_width) * down, bop_line_thickness(scale), false);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for alpha = 0, 45:
+ for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle plus";
+ r := (op_height - bop_line_thickness(scale))/2;
+
+ draw_circle(centre, r, bop_line_thickness(scale));
+ draw_line_linethick(centre - r * dir alpha, centre + r * dir alpha, bop_line_thickness(scale), false);
+ draw_line_linethick(centre - r * dir (alpha + 90), centre + r * dir (alpha + 90), bop_line_thickness(scale), false);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle dot";
+ draw_circle(centre, (op_height - bop_line_thickness(scale))/2, bop_line_thickness(scale));
+ fill dot(centre, bop_dot_size(scale));
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.4:
+ beginsquarebigop(scale, scale); "big circle asterisk";
+ thick := bop_line_thickness(scale);
+ r := (op_height - bop_line_thickness(scale))/2;
+
+ draw_circle(centre, r, bop_line_thickness(scale));
+
+ penpos a0(4/3thick, 0);
+ penpos a1(4/3thick, 60);
+ penpos a2(4/3thick, 120);
+ penpos a3(4/3thick, 180);
+ penpos a4(4/3thick, 240);
+ penpos a5(4/3thick, 300);
+
+ penpos b0(thick, 0);
+ penpos b1(thick, 60);
+ penpos b2(thick, 120);
+ penpos b3(thick, 180);
+ penpos b4(thick, 240);
+ penpos b5(thick, 300);
+
+ reg_poly_points(a)(6, centre, r, 90);
+
+ z.b0 = z.b1 = z.b2 = z.b3 = z.b4 = z.b5 = centre;
+
+ fill stroke z.a0e -- z.b0e;
+ fill stroke z.a1e -- z.b1e;
+ fill stroke z.a2e -- z.b2e;
+ fill stroke z.a3e -- z.b3e;
+ fill stroke z.a4e -- z.b4e;
+ fill stroke z.a5e -- z.b5e;
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(1.3scale, scale); "product";
+ draw_product(centre, op_width, op_height, sign, bop_line_thickness(scale));
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for scale = 1, 1.4:
+ beginbigop(scale, scale); "sum";
+ draw_sum(a)(centre, op_width, op_height, bop_line_thickness(scale));
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.4:
+ beginbigop(scale, scale); "sum modulo two";
+ draw_sum(a)(centre, op_width, op_height, bop_line_thickness(scale));
+ draw_circle(z4a, sqrt scale * 1/4op_width, bop_part_line_thickness(scale));
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for number = 0, 1, 2, 3:
+ for scale = 1, 1.8:
+ beginsymbol(scale * (5number + 4) * u# + (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness# + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "integral";
+ italcorr scale * 3u# - (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness#; % kerning between upper limit and lower limit
+
+ pair centre;
+
+ for i = 0 upto number:
+ centre := (side_bearing + scale * (5i + 7/2) * u, (h - d)/2);
+ draw_integral([i])(scale, centre, bop_line_thickness(scale));
+ endfor;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for scale = 1, 1.8:
+ beginsymbol(scale * 9u# + 4(equal_spread# + sqrt sthick(scale) * bop_thickness_fac*dot_size#) + (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness# + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "integral dots";
+ italcorr scale * 3u# - (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness#; % kerning between upper limit and lower limit
+
+ pair centre;
+ centre := (side_bearing + scale * 7/2u, (h - d)/2);
+
+ draw_integral([0])(scale, centre, bop_line_thickness(scale));
+
+ centre := (side_bearing + scale * 6u + 4(equal_spread + bop_dot_size(scale)), (h - d)/2);
+
+ draw_integral([1])(scale, centre, bop_line_thickness(scale));
+
+ z0 = 1/4[z0[0],z0[1]];
+ z1 = 2/4[z0[0],z0[1]];
+ z2 = 3/4[z0[0],z0[1]];
+
+ fill dot(z0, bop_dot_size(scale));
+ fill dot(z1, bop_dot_size(scale));
+ fill dot(z2, bop_dot_size(scale));
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for sign = 1, -1:
+ for scale = 1, 1.8:
+ beginsymbol(scale * 6u# + if scale > 1: (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness# else: scale * 3u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "oriented integral";
+ if scale > 1:
+ italcorr scale * 3u# - (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness#; % kerning between upper limit and lower limit
+ fi
+
+ pair centre;
+ centre := (side_bearing + scale * 9/2u, (h - d)/2);
+
+ draw_integral(a)(scale, centre, bop_line_thickness(scale));
+
+ thick := bop_part_line_thickness(scale);
+ r := 4u;
+
+ penpos0(thick, 135);
+ penpos1(thick, 90);
+ penpos2(thick, 45);
+
+ z0 = z0a + sign * scale * (-r, -1/4r);
+ z1 = z0a + sign * scale * (0, 1/4r);
+ z2 = z0a + sign * scale * (r, -1/4r);
+
+ if sign > 0:
+ fill stroke z0.e{dir 45} .. {dir 0}z1.e .. {dir -45}z2.e;
+ draw_arrowhead(z2, -40, 2/3scale * arrow_spread, 5/6thick);
+ else:
+ fill stroke z0.e{dir -135} .. {dir 180}z1.e .. {dir 135}z2.e;
+ draw_arrowhead(z0, 40, 2/3scale * arrow_spread, 5/6thick);
+ fi
+
+ penlabels(0,1,2);
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for scale = 1, 1.8:
+ beginsymbol(scale * 4u# + if scale > 1: (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness# else: scale * 3u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "integral with horizontal bar";
+ if scale > 1:
+ italcorr scale * 3u# - (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness#; % kerning between upper limit and lower limit
+ fi
+
+ pair centre;
+ centre := (side_bearing + scale * 7/2u, (h - d)/2);
+
+ draw_integral(a)(scale, centre, bop_line_thickness(scale));
+
+ r := scale * 5/2u;
+ thick := bop_part_line_thickness(scale);
+
+ draw_straight(z0a + r * left, z0a + r * right, thick, true);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.8:
+ beginsymbol(scale * 4u# + if scale > 1: (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness# else: scale * 3u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "integral with double horizontal bar";
+ if scale > 1:
+ italcorr scale * 3u# - (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness#; % kerning between upper limit and lower limit
+ fi
+
+ pair centre;
+ centre := (side_bearing + scale * 7/2u, (h - d)/2);
+
+ draw_integral(a)(scale, centre, bop_line_thickness(scale));
+
+ z1 - z0 = equal_spread * up;
+ 1/2[z0, z1] = z0a;
+
+ r := scale * 5/2u;
+ thick := bop_part_line_thickness(scale);
+
+ draw_straight(z0 + r * left, z0 + r * right, thick, true);
+ draw_straight(z1 + r * left, z1 + r * right, thick, true);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for scale = 1, 1.8:
+ beginsymbol(scale * 4u# + (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness# + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "stroked integral";
+ italcorr scale * 3u# - (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness#; % kerning between upper limit and lower limit
+
+ pair centre;
+ centre := (side_bearing + scale * 7/2u, (h - d)/2);
+
+ draw_integral(a)(scale, centre, bop_line_thickness(scale));
+
+ r := scale * 7/2u;
+ thick := bop_part_line_thickness(scale);
+
+ draw_straight(z0a - r * dir 35, z0a + r * dir 35, thick, true);
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for number = 0, 1, 2:
+ for scale = 1, 1.8:
+ beginsymbol(scale * (5number + 5) * u# + if scale > 1: (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness# else: scale * 3u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "contour integral";
+ if scale > 1:
+ italcorr scale * 3u# - (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness#; % kerning between upper limit and lower limit
+ fi
+
+ pair centre;
+
+ centre := (side_bearing + scale * (5number/2 + 4) * u, (h - d)/2);
+ thick := bop_part_line_thickness(scale);
+ r := scale * 4u;
+ s := scale * (5number + 8)/2 * u;
+
+ if number = 0:
+ fill circle(centre, r);
+ unfill circle(centre, r - thick);
+ else:
+ fill superellipse(centre + s * dir 0, centre + r * dir 90, centre - s * dir 0, centre - r * dir 90, 3/4);
+ unfill superellipse(centre + (s - thick) * dir 0, centre + (r - thick) * dir 90, centre - (s - thick) * dir 0, centre - (r - thick) * dir 90, 3/4);
+ fi
+
+ % Integral must come after unfill when processed with MetaPost!
+ for i = 0 upto number:
+ centre := (side_bearing + scale * (5i + 4) * u, (h - d)/2);
+ draw_integral([i])(scale, centre, bop_line_thickness(scale));
+ endfor;
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+for alpha = 0, 180:
+ for sign = 1, -1:
+ for scale = 1, 1.8:
+ beginsymbol(scale * 6u# + if scale > 1: (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness# else: scale * 3u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "oriented contour integral";
+ if scale > 1:
+ italcorr scale * 3u# - (sthick(scale)) * 3/4bop_thickness_fac*letter_line_thickness#; % kerning between upper limit and lower limit
+ fi
+
+ pair centre;
+ centre := (side_bearing + scale * (4u + if alpha > 90: u else: 0 fi), (h - d)/2);
+
+ draw_integral(a)(scale, centre, bop_line_thickness(scale));
+
+ thick := bop_part_line_thickness(scale);
+ r := scale * 4u;
+
+ reg_poly_points(a)(8, z0a, r, alpha + 25);
+ reg_poly_points(b)(8, z0a, r - thick, alpha + 25);
+ z.a8 = z0a + r * dir alpha;
+ z.b8 = z0a + (r - thick) * dir alpha;
+
+ if sign > 0:
+ fill z.a0 .. z.a1 .. z.a2 .. z.a3 .. z.a4 .. z.a5 .. z.a6 .. z.a7 .. z.a8 -- z.b8 .. z.b7 .. z.b6 .. z.b5 .. z.b4 .. z.b3 .. z.b2 .. z.b1 .. z.b0 -- cycle;
+ draw_arrowhead(1/2[z.a8, z.b8], alpha + 75, 2/3scale * arrow_spread, 5/6thick);
+ else:
+ fill z.a8 .. z.a0 .. z.a1 .. z.a2 .. z.a3 .. z.a4 .. z.a5 .. z.a6 .. z.a7 -- z.b7 .. z.b6 .. z.b5 .. z.b4 .. z.b3 .. z.b2 .. z.b1 .. z.b0 .. z.b8 -- cycle;
+ draw_arrowhead(1/2[z.a8, z.b8], alpha - 75, 2/3scale * arrow_spread, 5/6thick);
+ fi
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+ endfor;
+endfor;
+
+for scale = 1, 1.8:
+ beginsymbol(scale * 13/2u# + if scale > 1: 0 else: scale * u# fi + 2side_bearing#, vcentre(scale * 1.6asc_height#)); "sum integral";
+ if scale > 1:
+ italcorr scale * u#; % kerning between upper limit and lower limit
+ fi
+
+ pair centre;
+ centre := (side_bearing + scale * 4u, (h - d)/2);
+
+ draw_integral(a)(scale, centre, bop_line_thickness(scale));
+ draw_sum(b, 1/4[z0a.l,z0a.r], scale * 7u, scale * 3/4asc_height, bop_line_thickness(scale));
+
+ endchar;
+endfor;
+charlist current_char - 1: current_char;
+
+for sign = 1, -1:
+ for scale = 1, 1.4:
+ beginbigop(1.3scale, scale); "product integral";
+ draw_productintegral(centre, op_width, op_height, sign, bop_line_thickness(scale));
+ endchar;
+ endfor;
+ charlist current_char - 1: current_char;
+endfor;
+
+
diff --git a/fonts/mdsymbol/source/mdrelations.mf b/fonts/mdsymbol/source/mdrelations.mf
new file mode 100644
index 0000000000..a424440460
--- /dev/null
+++ b/fonts/mdsymbol/source/mdrelations.mf
@@ -0,0 +1,1184 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+vardef ifneg(text values) =
+ select(negated)(values)
+enddef;
+
+% equal signs
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(1,3) * equal_spread#); "equal";
+ s := 1/2equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+
+ if negated = 1:
+ stroke_through(centre, 3equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(4/2,7/2) * equal_spread#); "equiv";
+ s := equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex, right_ex, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(1/2,5/2) * equal_spread#); "sim";
+ draw_sim(a, left_ex, right_ex, 1/4equal_spread, line_thickness);
+
+ if negated = 1:
+ stroke_through(centre, 5/2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(3/2,6/2) * equal_spread#); "approx";
+ s := 1/2equal_spread;
+
+ draw_sim(a, left_ex + s * up, right_ex + s * up, 1/4equal_spread, line_thickness);
+ draw_sim(b, left_ex - s * up, right_ex - s * up, 1/4equal_spread, line_thickness);
+
+ if negated = 1:
+ stroke_through(centre, 3equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(5/2,7/2) * equal_spread#); "triple sim";
+ s := equal_spread;
+
+ draw_sim(a, left_ex + s * up, right_ex + s * up, 1/4equal_spread, line_thickness);
+ draw_sim(b, left_ex, right_ex, 1/4equal_spread, line_thickness);
+ draw_sim(c, left_ex - s * up, right_ex - s * up, 1/4equal_spread, line_thickness);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(3/2,6/2) * equal_spread#); "sim equal";
+ s := 1/2equal_spread;
+
+ draw_sim(a, left_ex + s * up, right_ex + s * up, 1/4equal_spread, line_thickness);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+
+ if negated = 1:
+ stroke_through(centre, 3equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(3/2,6/2) * equal_spread#); "equal sim";
+ s := 1/2equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_sim(a, left_ex - s * up, right_ex - s * up, 1/4equal_spread, line_thickness);
+
+ if negated = 1:
+ stroke_through(centre, 3equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(5/2,7/2,6/2) * equal_spread#); "cong";
+ s := equal_spread;
+
+ draw_sim(a, left_ex + s * up, right_ex + s * up, 1/4equal_spread, line_thickness);
+ draw_line(left_ex, right_ex, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ elseif negated = 2:
+ if sign = 1:
+ stroke_through(centre - 5/8s * up, 7/4equal_spread);
+ else:
+ stroke_through(centre - 1/2s * up, 2equal_spread);
+ fi;
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(5/2,7/2) * equal_spread#); "approx equal";
+ s := equal_spread;
+
+ draw_sim(a, left_ex + s * up, right_ex + s * up, 1/4equal_spread, line_thickness);
+ draw_sim(b, left_ex, right_ex, 1/4equal_spread, line_thickness);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(1,3) * equal_spread# + ifneg(1,0) * 2/5order_width#); "bump equal";
+ s := 1/2equal_spread;
+
+ draw_bump(a, 1, left_ex + s * up, right_ex + s * up, order_width/5, line_thickness);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+
+ if negated = 1:
+ stroke_through(centre, 3equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(4/2,7/2) * equal_spread# + ifneg(1,0) * 2/5order_width#); "bump over equal";
+ s := equal_spread;
+
+ draw_bump(a, 1, left_ex + s * up, right_ex + s * up, order_width/5, line_thickness);
+ draw_line(left_ex, right_ex, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(2/2,7/2) * equal_spread# + ifneg(1,0) * 2/5order_width#); "double bump equal";
+ s := 1/2equal_spread;
+
+ draw_bump(a, 1, left_ex + s * up, right_ex + s * up, order_width/5, line_thickness);
+ draw_bump(b, -1, left_ex - s * up, right_ex - s * up, order_width/5, line_thickness);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(6/2,7/2) * equal_spread# + ifneg(1,0) * 3/4dot_size#); "dot equal";
+ s := 1/2equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+ fill dot(centre + 3s * up, 3/4dot_size);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(6/2,7/2) * equal_spread# + ifneg(1,0) * 3/4dot_size#); "equal dot";
+ s := 1/2equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+ fill dot(centre - 3s * up, 3/4dot_size);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(6/2,7/2) * equal_spread# + ifneg(1,0) * 3/4dot_size#); "dot equal dot";
+ s := 1/2equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+ fill dot(centre + 3s * up, 3/4dot_size);
+ fill dot(centre - 3s * up, 3/4dot_size);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(6/2,7/2) * equal_spread# + ifneg(1,0) * 3/4dot_size#); "falling dot equal";
+ s := 1/2equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+ fill dot(left_ex + sign * 3/4dot_size * right + 3s * up, 3/4dot_size);
+ fill dot(right_ex - sign * 3/4dot_size * right - 3s * up, 3/4dot_size);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 1:
+ for sign = 1, -1:
+ beginorder(sign, 4/3order_width# + 3/4dot_size#, equal_spread# + dot_size#); "colon equal";
+ s := 1/2equal_spread;
+ pair left_sep;
+ left_sep := left_ex + sign * (3/4dot_size + 1/3order_width) * right;
+
+ fill dot(left_ex + s * up + sign * 3/4dot_size * right, 3/4dot_size);
+ fill dot(left_ex - s * up + sign * 3/4dot_size * right, 3/4dot_size);
+ draw_line(left_sep + s * up, right_ex + s * up, false);
+ draw_line(left_sep - s * up, right_ex - s * up, false);
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(1, order_width#, ifneg(1/2,5/2) * equal_spread#); "smile";
+ draw_smile(a, sign, left_ex, right_ex, 1/2equal_spread, line_thickness, true);
+
+ if negated = 1:
+ stroke_through(centre, 5/2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(1, order_width#, ifneg(11/6,7/2) * equal_spread#); "smile frown";
+ s := 2/3equal_spread;
+
+ draw_smile(a, sign, left_ex + s * up, right_ex + s * up, 1/2equal_spread, line_thickness, true);
+ draw_smile(b, -sign, left_ex - s * up, right_ex - s * up, 1/2equal_spread, line_thickness, true);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(1, order_width#, ifneg(5/2,7/2) * equal_spread#); "smile over equal";
+ s := 1equal_spread;
+
+ draw_smile(a, sign, left_ex + s * up, right_ex + s * up, 1/2equal_spread, line_thickness, true);
+ draw_line(left_ex, right_ex, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+
+ if negated = 1:
+ stroke_through(centre, 7/2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(1,3) * equal_spread#); "equal circ";
+ s := 1/2equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+ draw_circle(centre, 5/6s, 3/4line_thickness);
+
+ if negated = 1:
+ stroke_through(centre, 3equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, ifneg(9/2,10/2) * equal_spread#); "circ equal";
+ s := 1/2equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+ draw_circle(centre + 7/2s * up, 5/6s, 3/4line_thickness);
+
+ if negated = 1:
+ stroke_through(centre + s * up, 4equal_spread);
+ fi;
+ endchar;
+fi;
+
+for sign = 1, -1:
+ if negated < 2:
+ beginorder(1, order_width#, 5equal_spread#); "wedge equal";
+ s := 1/2equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+
+ draw_less(a, centre + (7/2 + sign * 3/2) * s * up, centre + (7/2 - sign * 3/2) * s * up, 4s, line_thickness, false, true);
+
+ if negated = 1:
+ stroke_through(centre + s * up, 4equal_spread);
+ fi;
+ endchar;
+ fi;
+endfor;
+
+if negated < 2:
+ beginorder(1, order_width#, 5equal_spread#); "star equal";
+ s := 1/2equal_spread;
+ r := 5/4s + 3/4line_thickness;
+ t := 1/11r;
+
+ reg_poly_points(a)(5, centre + 7/2s * up, r, 90);
+ reg_poly_points(b)(5, centre + 7/2s * up, .4r, 126);
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+ %draw_triangle(a, centre + 7/2s * up, 3/2s, 90, 3/4line_thickness);
+
+ fill z.a0 -- z.b0 -- z.a1 -- z.b1 -- z.a2 -- z.b2 -- z.a3 -- z.b3 -- z.a4 -- z.b4 -- cycle;
+
+ if negated = 1:
+ stroke_through(centre + s * up, 4equal_spread);
+ fi;
+ endchar;
+fi;
+
+if negated < 2:
+ beginorder(1, order_width#, 5equal_spread#); "triangle equal";
+ s := 1/2equal_spread;
+
+ draw_line(left_ex + s * up, right_ex + s * up, false);
+ draw_line(left_ex - s * up, right_ex - s * up, false);
+ draw_triangle(a, centre + 7/2s * up, 3/2s, 90, 3/4line_thickness);
+
+ if negated = 1:
+ stroke_through(centre + s * up, 4equal_spread);
+ fi;
+ endchar;
+fi;
+
+% element signs
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(0,3/2) * equal_spread# + greater_spread#); "element";
+ draw_subset(a, left_ex, right_ex, greater_spread, line_thickness);
+ draw_line(z4a, 1/2[z0a,z1a], false);
+
+ if negated = 1:
+ stroke_through(centre, 3/2equal_spread + greater_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+% orderings
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(0,1) * equal_spread# + greater_spread#); "less than";
+ draw_less(a, left_ex, right_ex, greater_spread, line_thickness, false, true);
+
+ if negated = 1:
+ stroke_through(centre, equal_spread + greater_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(2/3,6/3,5/3) * equal_spread# + 3/4greater_spread#); "less than or equal";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = 1/3equal_spread * up;
+
+ draw_less(a, z0, z1, s, line_thickness, false, true);
+ draw_line(z2, z3, false);
+
+ if negated = 1:
+ stroke_through(centre, 6/3equal_spread + 3/4greater_spread);
+ elseif negated = 2:
+ stroke_through(1/2[z2,z3], equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(1,2) * equal_spread# + 3/4greater_spread#); "less than or slanted equal";
+ s := 3/4greater_spread;
+ t := 1/2equal_spread;
+
+ draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false, true);
+
+ if sign = 1:
+ z6 = z4a.l + 1/2line_thickness*up - 2t * up;
+ z7 = z1a - 2t * up;
+ draw_line_cut(6,7);
+ else:
+ z6 = z3a.l + 1/2line_thickness*up - 2t * up;
+ z7 = z0a - 2t * up;
+ draw_line_cut(6,7);
+ fi;
+
+ if negated = 1:
+ stroke_through(centre, 2equal_spread + s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(5/3,8/3,8/3) * equal_spread# + 3/4greater_spread#); "less than or double equal";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = 5/6equal_spread * up;
+ z2 - z4 = z3 - z5 = equal_spread * up;
+
+ draw_less(a, z0, z1, s, line_thickness, false, true);
+ draw_line(z2, z3, false);
+ draw_line(z4, z5, false);
+
+ if negated = 1:
+ stroke_through(centre, 8/3equal_spread + 3/4greater_spread);
+ elseif negated = 2:
+ stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(2/2,4/2,3/2) * equal_spread# + 3/4greater_spread#); "less sim";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (3/4equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = 1/2equal_spread * up;
+
+ draw_less(a, z0, z1, s, line_thickness, false, true);
+ if sign > 0:
+ draw_sim(b, z2, z3, 1/4equal_spread, line_thickness);
+ else:
+ draw_sim(b, z3, z2, 1/4equal_spread, line_thickness);
+ fi
+
+ if negated = 1:
+ stroke_through(centre, 2equal_spread + s);
+ elseif negated = 2:
+ stroke_through(1/2[z2,z3], equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(4/2,5/2,5/2) * equal_spread# + 3/4greater_spread#); "less approx";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (3/4equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = equal_spread * up;
+ z2 - z4 = z3 - z5 = equal_spread * up;
+
+ draw_less(a, z0, z1, s, line_thickness, false, true);
+
+ if sign > 0:
+ draw_sim(b, z2, z3, 1/4equal_spread, line_thickness);
+ draw_sim(c, z4, z5, 1/4equal_spread, line_thickness);
+ else:
+ draw_sim(b, z3, z2, 1/4equal_spread, line_thickness);
+ draw_sim(c, z5, z4, 1/4equal_spread, line_thickness);
+ fi
+
+ if negated = 1:
+ stroke_through(centre, 5/2equal_spread + s);
+ elseif negated = 2:
+ stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(1,if sign > 0: 2 else: 3/2 fi) * equal_spread# + 9/8greater_spread#); "less greater";
+ s := 3/4greater_spread;
+ t := 1/2equal_spread + 1/4s;
+
+ draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false, true);
+ draw_less(b, right_ex - t * up, left_ex - t * up, s, line_thickness, false, true);
+
+ if negated = 1:
+ stroke_through(centre, if sign > 0: 2 else: 3/2 fi * equal_spread + 3/2s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(4/3,11/6 + 1/2sign) * equal_spread# + 3/2greater_spread#); "less equal greater";
+ s := 3/4greater_spread;
+ t := 2/3equal_spread + 1/2s;
+
+ draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false, true);
+ draw_less(b, right_ex - t * up, left_ex - t * up, s, line_thickness, false, true);
+ draw_line(left_ex, right_ex, false);
+
+ if negated = 1:
+ stroke_through(centre, (11/6 + 1/2sign) * equal_spread + 2s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(7/3,17/6 + 1/2sign, 7/3) * equal_spread# + 3/2greater_spread#); "less double equal greater";
+ s := 3/4greater_spread;
+ t := 7/6equal_spread + 1/2s;
+ u := 1/2equal_spread;
+
+ draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false, true);
+ draw_less(b, right_ex - t * up, left_ex - t * up, s, line_thickness, false, true);
+ draw_line(left_ex + u * up, right_ex + u * up, false);
+ draw_line(left_ex - u * up, right_ex - u * up, false);
+
+ if negated = 1:
+ stroke_through(centre, (17/6 + 1/2sign) * equal_spread + 2s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(2,5/2 + 1/2sign) * equal_spread# + 9/8greater_spread#); "less slanted equal greater";
+ s := 3/4greater_spread;
+ t := equal_spread + 1/4s;
+
+ draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false, true);
+ draw_less(b, right_ex - t * up, left_ex - t * up, s, line_thickness, false, true);
+
+ if sign = 1:
+ z6 = z4a.l + 1/2line_thickness*up - equal_spread * up;
+ z7 = z1a - equal_spread * up;
+ draw_line_cut(6,7);
+ else:
+ z6 = z3a.l + 1/2line_thickness*up - equal_spread * up;
+ z7 = z0a - equal_spread * up;
+ draw_line_cut(6,7);
+ fi;
+
+ if negated = 1:
+ stroke_through(centre, (5/2 + 1/2sign) * equal_spread + 3/2s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width# + 2equal_spread# + line_thickness#, ifneg(0,1) * equal_spread# + greater_spread#); "less less";
+ s := 2equal_spread;
+
+ draw_less(a, left_ex, right_ex - sign * s * right, greater_spread, line_thickness, false, true);
+ draw_less(b, left_ex + sign * s * right, right_ex, greater_spread, line_thickness, false, true);
+
+ if negated = 1:
+ stroke_through(centre, equal_spread + greater_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width# + 4equal_spread# + line_thickness#, ifneg(0,1) * equal_spread# + greater_spread#); "less less less";
+ s := 2equal_spread;
+
+ draw_less(a, left_ex, right_ex - sign * 2s * right, greater_spread, line_thickness, false, true);
+ draw_less(b, left_ex + sign * s * right, right_ex - sign * s * right, greater_spread, line_thickness, false, true);
+ draw_less(c, left_ex + sign * 2s * right, right_ex, greater_spread, line_thickness, false, true);
+
+ if negated = 1:
+ stroke_through_angle(centre, equal_spread + greater_spread, 50);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(0,1) * equal_spread# + greater_spread#); "closed less than";
+ draw_less(a, left_ex, right_ex, greater_spread, line_thickness, true, true);
+
+ if negated = 1:
+ stroke_through(centre, equal_spread + greater_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(2/3,6/3) * equal_spread# + 3/4greater_spread#); "closed less than or equal";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = 1/3equal_spread * up;
+
+ draw_less(a, z0, z1, s, line_thickness, true, true);
+ draw_line(z2, z3, false);
+
+ if negated = 1:
+ stroke_through(centre, 6/3equal_spread + s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width# * sqrt(5/4), ifneg(0,1) * equal_spread# + greater_spread#); "round less than";
+ path p;
+ numeric r,s;
+ thick := line_thickness;
+
+ z0 = left_ex;
+ z1 = z0 + order_width * dir angle(right_ex - left_ex);
+
+ put_less(a, z0, z1, greater_spread, thick, false, false);
+
+ z9 = whatever[z3a.l, z0a.l] = whatever[z4a.l,z1a.l];
+
+ penpos1'(thick, 90 - sign*90);
+
+ z1'r = z9 + sign*length(z0a.l - z9)*right;
+ z4r = z0a.l - line_thickness*(dir(angle(z0a.l-z9)));
+ z5r = z1a.l - line_thickness*(dir(angle(z1a.l-z9)));
+
+ theta := angle(z0a.l - z9);
+
+ p = (z4r{dir(theta -90)} .. z1'l .. {dir(-theta -90)}z5r);
+ r = ypart ((z5a -- z0a.r) intersectiontimes p);
+ s = ypart ((z5a -- z1a.r) intersectiontimes p);
+
+ fill z0a.l{dir(theta -90)} .. z1'.r .. {dir(-theta -90)}z1a.l -- z4a.l -- z3a.l -- cycle;
+ unfill subpath (r,s) of p -- z5a -- cycle;
+
+ if negated = 1:
+ stroke_through(centre, equal_spread + greater_spread);
+ fi;
+
+ penlabels(1',4,5,9);
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width# * sqrt(7/6), ifneg(1,2) * equal_spread# + 3/4greater_spread#); "round less than or slanted equal";
+ path p;
+ numeric u,v;
+
+ thick := line_thickness;
+ s := 3/4greater_spread;
+ t := 1/2equal_spread;
+
+ z0 = left_ex + t * up;
+ z1 = z0 + order_width * dir angle(right_ex - left_ex);
+
+ put_less(a, z0, z1, s, thick, false, false);
+
+ penpos1'(thick, 90 - sign*90);
+
+ z9 = whatever[z3a.l, z0a.l] = whatever[z4a.l,z1a.l];
+
+ z1'r = z9 + sign*length(z0a.l - z9)*right;
+ z4r = z0a.l - line_thickness*(dir(angle(z0a.l-z9)));
+ z5r = z1a.l - line_thickness*(dir(angle(z1a.l-z9)));
+
+ theta := angle(z0a.l - z9);
+
+ p = (z4r{dir(theta -90)} .. z1'l .. {dir(-theta -90)}z5r);
+ u = ypart ((z5a -- z0a.r) intersectiontimes p);
+ v = ypart ((z5a -- z1a.r) intersectiontimes p);
+
+ fill z0a.l{dir(theta -90)} .. z1'.r .. {dir(-theta -90)}z1a.l -- z4a.l -- z3a.l -- cycle;
+ unfill subpath (u,v) of p -- z5a -- cycle;
+
+ if sign = 1:
+ draw_line(z1a - 2t * up, z4a - 2t * up, false);
+ else:
+ draw_line(z0a - 2t * up, z3a - 2t * up, false);
+ fi;
+
+ if negated = 1:
+ stroke_through(centre, 2equal_spread + 3/4greater_spread);
+ fi;
+
+ penlabels(1',4,5,9);
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(0,3/2) * equal_spread# + greater_spread#); "square subset";
+ s := greater_spread;
+
+ draw_line(left_ex + s/2 * up, right_ex + s/2 * up, false);
+ draw_line(left_ex - s/2 * up, right_ex - s/2 * up, false);
+ draw_line(left_point + s/2 * up, left_point - s/2 * up, false);
+
+ if negated = 1:
+ stroke_through(centre, 3/2equal_spread + s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(1,5/2,2) * equal_spread# + 3/4greater_spread#); "square subset equal";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (equal_spread + s/2) * up;
+ z0 - left_ex = z0' - left_point = z1 - right_ex = 1/2equal_spread * up;
+
+ draw_line(z0 + s/2 * up, z1 + s/2 * up, false);
+ draw_line(z0 - s/2 * up, z1 - s/2 * up, false);
+ draw_line(z0' + s/2 * up, z0' - s/2 * up, false);
+ draw_line(z2, z3, false);
+
+ if negated = 1:
+ stroke_through(centre, 5/2equal_spread + s);
+ elseif negated = 2:
+ stroke_through(1/2[z2,z3] + 1/2equal_spread * up, 2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(2,3,3) * equal_spread# + 3/4greater_spread#); "square subset double equal";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (equal_spread + s/2) * up;
+ z0 - left_ex = z0' - left_point = z1 - right_ex = equal_spread * up;
+ z2 - z4 = z3 - z5 = equal_spread * up;
+
+ draw_line(z0 + s/2 * up, z1 + s/2 * up, false);
+ draw_line(z0 - s/2 * up, z1 - s/2 * up, false);
+ draw_line(z0' + s/2 * up, z0' - s/2 * up, false);
+ draw_line(z2, z3, false);
+ draw_line(z4, z5, false);
+
+ if negated = 1:
+ stroke_through(centre, 3equal_spread + s);
+ elseif negated = 2:
+ stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(0,3/2) * equal_spread# + greater_spread#); "double square subset";
+ s := greater_spread;
+ t := greater_spread - 3/2equal_spread;
+
+ z0 - left_ex = z0' - left_point = 3/4equal_spread * dir (90 - sign * 90);
+
+ draw_line(left_ex + s/2 * up, right_ex + s/2 * up, false);
+ draw_line(left_ex - s/2 * up, right_ex - s/2 * up, false);
+ draw_line(left_point + s/2 * up, left_point - s/2 * up, false);
+
+ draw_line(z0 + t/2 * up, right_ex + t/2 * up, false);
+ draw_line(z0 - t/2 * up, right_ex - t/2 * up, false);
+ draw_line(z0' + t/2 * up, z0' - t/2 * up, false);
+
+ if negated = 1:
+ stroke_through(centre, 3/2equal_spread + s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(0,3/2) * equal_spread# + greater_spread#); "subset";
+ draw_subset(a, left_ex, right_ex, greater_spread, line_thickness);
+
+ if negated = 1:
+ stroke_through(centre, 3/2equal_spread + greater_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(1,5/2,2) * equal_spread# + 3/4greater_spread#); "subset or equal";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (equal_spread + s/2) * up;
+ z0 - left_ex = z0' - left_point = z1 - right_ex = 1/2equal_spread * up;
+
+ draw_subset(a, z0, z1, s, line_thickness);
+ draw_line(z2, z3, false);
+
+ if negated = 1:
+ stroke_through(centre, 5/2equal_spread + s);
+ elseif negated = 2:
+ stroke_through(1/2[z2,z3] + 1/2equal_spread * up, 2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(2,3,3) * equal_spread# + 3/4greater_spread#); "subset or double equal";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (equal_spread + s/2) * up;
+ z0 - left_ex = z0' - left_point = z1 - right_ex = equal_spread * up;
+ z2 - z4 = z3 - z5 = equal_spread * up;
+
+ draw_subset(a, z0, z1, s, line_thickness);
+ draw_line(z2, z3, false);
+ draw_line(z4, z5, false);
+
+ if negated = 1:
+ stroke_through(centre, 3equal_spread + s);
+ elseif negated = 2:
+ stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(0,3/2) * equal_spread# + greater_spread#); "double subset";
+ s := greater_spread;
+ t := greater_spread - 3/2equal_spread;
+
+ z0 - left_ex = 3/4equal_spread * dir (90 - sign * 90);
+
+ draw_subset(a, left_ex, right_ex, s, line_thickness);
+ draw_subset(b, z0, right_ex, t, line_thickness);
+
+ if negated = 1:
+ stroke_through(centre, 3/2equal_spread + s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(0,1) * equal_spread# + greater_spread#); "curly less than";
+ draw_prec(a, left_ex, right_ex, greater_spread, line_thickness, false);
+
+ if negated = 1:
+ stroke_through(centre, equal_spread + greater_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(2/3,6/3,5/3) * equal_spread# + 3/4greater_spread#); "curly less than or equal";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = 1/3equal_spread * up;
+
+ draw_prec(a, z0, z1, s, line_thickness, false);
+ draw_line(z2, z3, false);
+
+ if negated = 1:
+ stroke_through(centre, 6/3equal_spread + s);
+ elseif negated = 2:
+ stroke_through(1/2[z2,z3], equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(1,2) * equal_spread# + 3/4greater_spread#); "curly less than or curly equal";
+ s := 3/4greater_spread;
+
+ z0 - z2 = equal_spread * up;
+ z1 - z3 = (7/5equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = 1/2equal_spread * up;
+ z2' - z2 = line_thickness * dir (90 - sign * 90);
+
+ draw_prec(a, z0, z1, s, line_thickness, false);
+
+ if sign > 0:
+ theta := angle (z1a.l - z1a);
+ else:
+ theta := angle (z0a.r - z0a);
+ fi;
+
+ penpos2(line_thickness, 90);
+ penpos2'(line_thickness, 90);
+ penpos3(line_thickness, theta);
+ penpos5(line_thickness, theta);
+
+ path p, q;
+
+ p = z2.l -- z2'.l{dir (90 - sign * 90)} .. {dir (theta - sign * 90)}z3.l;
+ q = z2.r -- z2'.r{dir (90 - sign * 90)} .. {dir (theta - sign * 90)}z3.r;
+
+ z5.r = point 1.8 of q;
+ t := xpart (p intersectiontimes (z5.l -- z5.r));
+
+ fill (subpath (0,t) of p) -- (reverse (subpath (0,1.8) of q)) -- cycle;
+
+ penlabels(2,5);
+
+ if negated = 1:
+ stroke_through(centre, 2equal_spread + s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(5/3,8/3,8/3) * equal_spread# + 3/4greater_spread#); "curly less than or double equal";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = 5/6equal_spread * up;
+ z2 - z4 = z3 - z5 = equal_spread * up;
+
+ draw_prec(a, z0, z1, s, line_thickness, false);
+ draw_line(z2, z3, false);
+ draw_line(z4, z5, false);
+
+ if negated = 1:
+ stroke_through(centre, 8/3equal_spread + 3/4greater_spread);
+ elseif negated = 2:
+ stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(1,4/2,3/2) * equal_spread# + 3/4greater_spread#); "curly less sim";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (3/4equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = 1/2equal_spread * up;
+
+ draw_prec(a, z0, z1, s, line_thickness, false);
+ if sign > 0:
+ draw_sim(b, z2, z3, 1/4equal_spread, line_thickness);
+ else:
+ draw_sim(b, z3, z2, 1/4equal_spread, line_thickness);
+ fi
+
+ if negated = 1:
+ stroke_through(centre, 4/2equal_spread + s);
+ elseif negated = 2:
+ stroke_through(1/2[z2,z3], equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 3:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(2,5/2,5/2) * equal_spread# + 3/4greater_spread#); "curly less approx";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (3/4equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = equal_spread * up;
+ z2 - z4 = z3 - z5 = equal_spread * up;
+
+ draw_prec(a, z0, z1, s, line_thickness, false);
+
+ if sign > 0:
+ draw_sim(b, z2, z3, 1/4equal_spread, line_thickness);
+ draw_sim(c, z4, z5, 1/4equal_spread, line_thickness);
+ else:
+ draw_sim(b, z3, z2, 1/4equal_spread, line_thickness);
+ draw_sim(c, z5, z4, 1/4equal_spread, line_thickness);
+ fi
+
+ if negated = 1:
+ stroke_through(centre, 5/2equal_spread + s);
+ elseif negated = 2:
+ stroke_through(1/2[1/2[z2,z3], 1/2[z4,z5]], 2equal_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(0,1) * equal_spread# + greater_spread#); "less than dot";
+ draw_less(a, left_ex, right_ex, greater_spread, line_thickness, false, true);
+ fill dot(right_ex - sign * 3/4dot_size * right, 3/4dot_size);
+
+ if negated = 1:
+ stroke_through(centre, equal_spread + greater_spread);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(2/3,6/3) * equal_spread# + 3/4greater_spread#); "less than or equal dot";
+ s := 3/4greater_spread;
+
+ z0 - z2 = z1 - z3 = (2/3equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = 1/3equal_spread * up;
+
+ draw_less(a, z0, z1, s, line_thickness, false, true);
+ fill dot(z1 - sign * 3/4dot_size * right, 3/4dot_size);
+ draw_line(z2, z3, false);
+
+ if negated = 1:
+ stroke_through(centre, 6/3equal_spread + s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(1,2) * equal_spread# + 3/4greater_spread#); "less than or slanted equal dot";
+ s := 3/4greater_spread;
+ t := 1/2equal_spread;
+
+ draw_less(a, left_ex + t * up, right_ex + t * up, s, line_thickness, false, true);
+ fill dot(right_ex + t * up - sign * 3/4dot_size * right, 3/4dot_size);
+
+ if sign = 1:
+ z6 = z4a.l + 1/2line_thickness*up - 2t * up;
+ z7 = z1a - 2t * up;
+ draw_line_cut(6,7);
+ else:
+ z6 = z3a.l + 1/2line_thickness*up - 2t * up;
+ z7 = z0a - 2t * up;
+ draw_line_cut(6,7);
+ fi;
+
+ if negated = 1:
+ stroke_through(centre, 2equal_spread + s);
+ fi;
+ endchar;
+ endfor;
+fi;
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(1,2) * equal_spread# + 3/4greater_spread#); "slanted equal or less than";
+ s := 3/4greater_spread;
+ t := 1/2equal_spread;
+
+ draw_less(a, left_ex - t * up, right_ex - t * up, s, line_thickness, false, true);
+
+ if sign = 1:
+ z6 = z3a.l - 1/2line_thickness*up + 2t * up;
+ z7 = z0a + 2t * up;
+ draw_line_cut(6,7);
+ else:
+ z6 = z4a.l - 1/2line_thickness*up + 2t * up;
+ z7 = z1a + 2t * up;
+ draw_line_cut(6,7);
+ fi;
+
+ if negated = 1:
+ stroke_through(centre, 2equal_spread + s);
+ fi;
+ endchar;
+ endfor;
+fi
+
+if negated < 2:
+ for sign = 1, -1:
+ beginorder(sign, order_width#, ifneg(1,2) * equal_spread# + 3/4greater_spread#); "curly equal or curly less than";
+ s := 3/4greater_spread;
+
+ z0 - z2 = -equal_spread * up;
+ z1 - z3 = -(7/5equal_spread + s/2) * up;
+ z0 - left_ex = z1 - right_ex = -1/2equal_spread * up;
+ z2' - z2 = line_thickness * dir (90 - sign * 90);
+
+ draw_prec(a, z0, z1, s, line_thickness, false);
+
+ if sign > 0:
+ theta := angle (z1a.l - z1a);
+ else:
+ theta := angle (z0a.r - z0a);
+ fi;
+
+ penpos2(line_thickness, -90);
+ penpos2'(line_thickness, -90);
+ penpos3(line_thickness, -theta);
+ penpos5(line_thickness, -theta);
+
+ path p, q;
+
+ p = z2.l -- z2'.l{dir (90 - sign * 90)} .. {dir (sign * 90 - theta)}z3.l;
+ q = z2.r -- z2'.r{dir (90 - sign * 90)} .. {dir (sign * 90 - theta)}z3.r;
+
+ z5.r = point 1.8 of q;
+ t := xpart (p intersectiontimes (z5.l -- z5.r));
+
+ fill (subpath (0,t) of p) -- (reverse (subpath (0,1.8) of q)) -- cycle;
+
+ penlabels(2,5);
+
+ if negated = 1:
+ stroke_through(centre, 2equal_spread + s);
+ fi;
+ endchar;
+ endfor;
+fi
diff --git a/fonts/mdsymbol/source/mdturnstile.mf b/fonts/mdsymbol/source/mdturnstile.mf
new file mode 100644
index 0000000000..b4917e2f41
--- /dev/null
+++ b/fonts/mdsymbol/source/mdturnstile.mf
@@ -0,0 +1,102 @@
+%
+% Copyright (c) 2011, 2012, Sebastian Schubert <schubert.seb@googlemail.com>
+%
+% This Font Software is licensed under the SIL Open Font License,
+% Version 1.1. This license is in the accompanying file OFL.txt, and
+% is also available with a FAQ at: http://scripts.sil.org/OFL
+%
+
+for factor = 1, 7/10:
+ for alpha = 0, 90, 180, 270:
+ beginturnstile(alpha, factor); "turnstile (" & decimal alpha & ")";
+ draw_line(foot, foot + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(foot + 1/2len * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+ endfor;
+endfor;
+
+for factor = 1, 7/10:
+ for alpha = 0, 90, 180, 270:
+ beginturnstile(alpha, factor); "double turnstile (" & decimal alpha & ")";
+ z1 - z0 = equal_spread * dir (alpha + 90);
+ 1/2[z0,z1] = foot;
+
+ draw_line(z0, z0 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(z1, z1 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(foot + 1/2len * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+ endfor;
+endfor;
+
+for factor = 13/10, 1:
+ for alpha = 0, 90, 180, 270:
+ beginturnstile(alpha, factor); "bar with turnstile (" & decimal alpha & ")";
+ z0 = foot + 3/10turnstile_width * dir alpha;
+
+ draw_line(z0, foot + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+ draw_line(z0 - spread/2 * dir (alpha + 90), z0 + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(z0 + 1/2(len - 3/10turnstile_width) * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+ endfor;
+endfor;
+
+for alpha = 0, 90, 180, 270:
+ beginturnstile(alpha, 13/10); "bar with double turnstile (" & decimal alpha & ")";
+ z0 = foot + 3/10turnstile_width * dir alpha;
+ z2 - z1 = z4 - z3 = equal_spread * dir (alpha + 90);
+ 1/2[z1,z2] = foot;
+ 1/2[z3,z4] = z0;
+
+ draw_line(z3, z1 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(z4, z2 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+ draw_line(z0 - spread/2 * dir (alpha + 90), z0 + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(z0 + 1/2(len - 3/10turnstile_width) * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginturnstile(alpha, 13/10); "double bar with turnstile (" & decimal alpha & ")";
+ z0 = foot + 3/10turnstile_width * dir alpha;
+ z1 = z0 + 3/10turnstile_width * dir alpha;
+
+ draw_line(z1, foot + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+ draw_line(z0 - spread/2 * dir (alpha + 90), z0 + spread/2 * dir (alpha + 90), true);
+ draw_line(z1 - spread/2 * dir (alpha + 90), z1 + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(z1 + 1/2(len - 3/5turnstile_width) * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+endfor;
+
+for alpha = 0, 180:
+ beginturnstile(alpha, 1); "triple turnstile (" & decimal alpha & ")";
+ z0 - foot = foot - z1 = equal_spread * dir (alpha + 90);
+
+ draw_line(z0, z0 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot, foot + (len - line_thickness/2) * dir alpha, false);
+ draw_line(z1, z1 + (len - line_thickness/2) * dir alpha, false);
+ draw_line(foot - spread/2 * dir (alpha + 90), foot + spread/2 * dir (alpha + 90), true);
+
+ if negated:
+ stroke_through_arrow(foot + 1/2len * dir alpha, alpha, spread)(75, 75, 110, 110, 75, 75, 110, 110);
+ fi
+ endchar;
+endfor;
diff --git a/fonts/mdsymbol/tfm/MdSymbolA-Bold.tfm b/fonts/mdsymbol/tfm/MdSymbolA-Bold.tfm
new file mode 100644
index 0000000000..71e4c22d48
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolA-Bold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolA-Light.tfm b/fonts/mdsymbol/tfm/MdSymbolA-Light.tfm
new file mode 100644
index 0000000000..5f336cc9a1
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolA-Light.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolA-Regular.tfm b/fonts/mdsymbol/tfm/MdSymbolA-Regular.tfm
new file mode 100644
index 0000000000..176a8c7219
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolA-Regular.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolA-Semibold.tfm b/fonts/mdsymbol/tfm/MdSymbolA-Semibold.tfm
new file mode 100644
index 0000000000..a18a94201a
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolA-Semibold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolB-Bold.tfm b/fonts/mdsymbol/tfm/MdSymbolB-Bold.tfm
new file mode 100644
index 0000000000..a420b793e9
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolB-Bold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolB-Light.tfm b/fonts/mdsymbol/tfm/MdSymbolB-Light.tfm
new file mode 100644
index 0000000000..5472482cc3
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolB-Light.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolB-Regular.tfm b/fonts/mdsymbol/tfm/MdSymbolB-Regular.tfm
new file mode 100644
index 0000000000..5cf0c3b873
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolB-Regular.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolB-Semibold.tfm b/fonts/mdsymbol/tfm/MdSymbolB-Semibold.tfm
new file mode 100644
index 0000000000..7902d1073e
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolB-Semibold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolC-Bold.tfm b/fonts/mdsymbol/tfm/MdSymbolC-Bold.tfm
new file mode 100644
index 0000000000..d6da411a8e
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolC-Bold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolC-Light.tfm b/fonts/mdsymbol/tfm/MdSymbolC-Light.tfm
new file mode 100644
index 0000000000..fb9eca93f7
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolC-Light.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolC-Regular.tfm b/fonts/mdsymbol/tfm/MdSymbolC-Regular.tfm
new file mode 100644
index 0000000000..614e33e994
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolC-Regular.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolC-Semibold.tfm b/fonts/mdsymbol/tfm/MdSymbolC-Semibold.tfm
new file mode 100644
index 0000000000..ff32882c94
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolC-Semibold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolD-Bold.tfm b/fonts/mdsymbol/tfm/MdSymbolD-Bold.tfm
new file mode 100644
index 0000000000..b2092ccf16
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolD-Bold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolD-Light.tfm b/fonts/mdsymbol/tfm/MdSymbolD-Light.tfm
new file mode 100644
index 0000000000..351eecd30e
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolD-Light.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolD-Regular.tfm b/fonts/mdsymbol/tfm/MdSymbolD-Regular.tfm
new file mode 100644
index 0000000000..3ae7203013
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolD-Regular.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolD-Semibold.tfm b/fonts/mdsymbol/tfm/MdSymbolD-Semibold.tfm
new file mode 100644
index 0000000000..d667179fa1
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolD-Semibold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolE-Bold.tfm b/fonts/mdsymbol/tfm/MdSymbolE-Bold.tfm
new file mode 100644
index 0000000000..efad6c5e20
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolE-Bold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolE-Light.tfm b/fonts/mdsymbol/tfm/MdSymbolE-Light.tfm
new file mode 100644
index 0000000000..477631bb78
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolE-Light.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolE-Regular.tfm b/fonts/mdsymbol/tfm/MdSymbolE-Regular.tfm
new file mode 100644
index 0000000000..14866e7306
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolE-Regular.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolE-Semibold.tfm b/fonts/mdsymbol/tfm/MdSymbolE-Semibold.tfm
new file mode 100644
index 0000000000..bbc39b17db
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolE-Semibold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolF-Bold.tfm b/fonts/mdsymbol/tfm/MdSymbolF-Bold.tfm
new file mode 100644
index 0000000000..1d3125a11c
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolF-Bold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolF-Light.tfm b/fonts/mdsymbol/tfm/MdSymbolF-Light.tfm
new file mode 100644
index 0000000000..d81e90b034
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolF-Light.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolF-Regular.tfm b/fonts/mdsymbol/tfm/MdSymbolF-Regular.tfm
new file mode 100644
index 0000000000..f9eb3b9ef3
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolF-Regular.tfm
Binary files differ
diff --git a/fonts/mdsymbol/tfm/MdSymbolF-Semibold.tfm b/fonts/mdsymbol/tfm/MdSymbolF-Semibold.tfm
new file mode 100644
index 0000000000..52377a3c73
--- /dev/null
+++ b/fonts/mdsymbol/tfm/MdSymbolF-Semibold.tfm
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolA-Bold.pfb b/fonts/mdsymbol/type1/MdSymbolA-Bold.pfb
new file mode 100644
index 0000000000..9a048d1d31
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolA-Bold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolA-Light.pfb b/fonts/mdsymbol/type1/MdSymbolA-Light.pfb
new file mode 100644
index 0000000000..f070f12a5c
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolA-Light.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolA-Regular.pfb b/fonts/mdsymbol/type1/MdSymbolA-Regular.pfb
new file mode 100644
index 0000000000..ca88754905
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolA-Regular.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolA-Semibold.pfb b/fonts/mdsymbol/type1/MdSymbolA-Semibold.pfb
new file mode 100644
index 0000000000..7356e54537
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolA-Semibold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolB-Bold.pfb b/fonts/mdsymbol/type1/MdSymbolB-Bold.pfb
new file mode 100644
index 0000000000..30fc02952e
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolB-Bold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolB-Light.pfb b/fonts/mdsymbol/type1/MdSymbolB-Light.pfb
new file mode 100644
index 0000000000..00ba687073
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolB-Light.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolB-Regular.pfb b/fonts/mdsymbol/type1/MdSymbolB-Regular.pfb
new file mode 100644
index 0000000000..d9f2019d09
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolB-Regular.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolB-Semibold.pfb b/fonts/mdsymbol/type1/MdSymbolB-Semibold.pfb
new file mode 100644
index 0000000000..3e99321b99
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolB-Semibold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolC-Bold.pfb b/fonts/mdsymbol/type1/MdSymbolC-Bold.pfb
new file mode 100644
index 0000000000..14d9596f51
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolC-Bold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolC-Light.pfb b/fonts/mdsymbol/type1/MdSymbolC-Light.pfb
new file mode 100644
index 0000000000..8ebd88cc29
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolC-Light.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolC-Regular.pfb b/fonts/mdsymbol/type1/MdSymbolC-Regular.pfb
new file mode 100644
index 0000000000..58c224951e
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolC-Regular.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolC-Semibold.pfb b/fonts/mdsymbol/type1/MdSymbolC-Semibold.pfb
new file mode 100644
index 0000000000..5aec2e31af
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolC-Semibold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolD-Bold.pfb b/fonts/mdsymbol/type1/MdSymbolD-Bold.pfb
new file mode 100644
index 0000000000..2037f06962
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolD-Bold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolD-Light.pfb b/fonts/mdsymbol/type1/MdSymbolD-Light.pfb
new file mode 100644
index 0000000000..539c24af48
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolD-Light.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolD-Regular.pfb b/fonts/mdsymbol/type1/MdSymbolD-Regular.pfb
new file mode 100644
index 0000000000..32a57d95cf
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolD-Regular.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolD-Semibold.pfb b/fonts/mdsymbol/type1/MdSymbolD-Semibold.pfb
new file mode 100644
index 0000000000..c6e8256cda
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolD-Semibold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolE-Bold.pfb b/fonts/mdsymbol/type1/MdSymbolE-Bold.pfb
new file mode 100644
index 0000000000..f7b227aab9
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolE-Bold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolE-Light.pfb b/fonts/mdsymbol/type1/MdSymbolE-Light.pfb
new file mode 100644
index 0000000000..5fd7891625
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolE-Light.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolE-Regular.pfb b/fonts/mdsymbol/type1/MdSymbolE-Regular.pfb
new file mode 100644
index 0000000000..1a19fd1f34
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolE-Regular.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolE-Semibold.pfb b/fonts/mdsymbol/type1/MdSymbolE-Semibold.pfb
new file mode 100644
index 0000000000..bc5288d6fc
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolE-Semibold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolF-Bold.pfb b/fonts/mdsymbol/type1/MdSymbolF-Bold.pfb
new file mode 100644
index 0000000000..4a84396032
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolF-Bold.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolF-Light.pfb b/fonts/mdsymbol/type1/MdSymbolF-Light.pfb
new file mode 100644
index 0000000000..5cce1a6af5
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolF-Light.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolF-Regular.pfb b/fonts/mdsymbol/type1/MdSymbolF-Regular.pfb
new file mode 100644
index 0000000000..772c0ec6b8
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolF-Regular.pfb
Binary files differ
diff --git a/fonts/mdsymbol/type1/MdSymbolF-Semibold.pfb b/fonts/mdsymbol/type1/MdSymbolF-Semibold.pfb
new file mode 100644
index 0000000000..ef2769f089
--- /dev/null
+++ b/fonts/mdsymbol/type1/MdSymbolF-Semibold.pfb
Binary files differ