From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/mathastext/INSTALL.txt | 44 + macros/latex/contrib/mathastext/README.md | 128 + macros/latex/contrib/mathastext/mathastext.dtx | 8276 ++++++++++++++++++++ macros/latex/contrib/mathastext/mathastext.pdf | Bin 0 -> 464529 bytes .../contrib/mathastext/mathastexttestalphabets.pdf | Bin 0 -> 43063 bytes 5 files changed, 8448 insertions(+) create mode 100644 macros/latex/contrib/mathastext/INSTALL.txt create mode 100644 macros/latex/contrib/mathastext/README.md create mode 100644 macros/latex/contrib/mathastext/mathastext.dtx create mode 100644 macros/latex/contrib/mathastext/mathastext.pdf create mode 100644 macros/latex/contrib/mathastext/mathastexttestalphabets.pdf (limited to 'macros/latex/contrib/mathastext') diff --git a/macros/latex/contrib/mathastext/INSTALL.txt b/macros/latex/contrib/mathastext/INSTALL.txt new file mode 100644 index 0000000000..721c3009fb --- /dev/null +++ b/macros/latex/contrib/mathastext/INSTALL.txt @@ -0,0 +1,44 @@ +The simplest for most users is to use the manager script of the TeX +installation to either install or upgrade mathastext to its current +version. + +Else, for manual install, grab mathastext.tds.zip from CTAN then run + + unzip -d mathastext.tds.zip + +where could be ~/texmf or, on mac os x, ~/Library/texmf. + +Else, download mathastext.dtx and follow these instructions: + +- Run tex or etex on mathastext.dtx to generate the package style + file mathastext.sty as well as additional files: + + mathastext.tex, README.md, ChangeLog.md, and some test files. + +- Move the style file mathastext.sty to a location where TeX can + find it. In a TDS compliant hierarchy this will be + + :tex/latex/mathastext/mathastext.sty + +For the documentation: + +- Follow the above steps, then run latex thrice on mathastext.tex + then dvipdfmx on mathastext.dvi. The file mathastext.tex can be + customized to change the font size or set other options therein. + The produced file mathastext.pdf will by default include the + commented source code. + +It is also possible to run pdflatex (thrice) directly on mathastext.dtx. +In that case mathastext.pdf is produced without the commented source code. + +One can NOT use lualatex or xelatex to compile the documentation. + +The test files + + mathastexttestmathversions.tex + mathastexttestunicodemacos.tex + mathastexttestunicodelinux.tex + mathastexttestalphabets.tex + +illustrate some features of the package and are an addendum to the +main documentation mathastext.pdf. diff --git a/macros/latex/contrib/mathastext/README.md b/macros/latex/contrib/mathastext/README.md new file mode 100644 index 0000000000..95e70dd8ea --- /dev/null +++ b/macros/latex/contrib/mathastext/README.md @@ -0,0 +1,128 @@ + + +-------------------------------------------+ + + + + + mathastext + + + + + + 'Use the text font in math mode' + + + + + +-------------------------------------------+ + +This Work may be distributed and/or modified under the conditions +of the [LPPL1.3c](http://www.latex-project.org/lppl/lppl-1-3c.txt) + +The Author of this Work is Jean-Francois Burnol + +Copyright (C) 2011-2019 Jean-Francois Burnol (`jfbu at free dot fr`) + + Source: mathastext.dtx 1.3u 2019/08/20 + + +DESCRIPTION +=========== + +Optimal typographical results for documents containing +mathematical symbols can only be hoped for with math fonts +specifically designed to match a given text typeface. +Although the list of freely available math fonts (alongside +the Computer Modern and AMS extension fonts) is slowly +expanding (fourier, kpfonts, mathdesign, pxfonts, txfonts, +newpx, newtx, ...) it remains limited, and the situation is +even worse with Unicode fonts (XeTeX/LuaTeX). So if you can't +find a math font which fits well with your favorite text +font, and wish to still be able to typeset mathematical +documents, perhaps not of the highest typographical quality, +but at least not subjected to obvious visual incompatibilities +between your text font and the math fonts, try out mathastext: +it will simply use the text font also for the math! + +- http://jf.burnol.free.fr/mathastext.html +- http://jf.burnol.free.fr/showcase.html + +USAGE +===== + +`mathastext` is a LaTeX package + + \usepackage{mathastext} + +The document will use in math mode the text font as configured at +package loading time, for these characters: + + abcdefghijklmnopqrstuvwxyz + ABCDEFGHIJKLMNOPQRSTUVWXYZ + 0123456789 + !?,.:;+-=()[]/#$%&<>|{}\ + +Main options: `italic`, `subdued`, `LGRgreek`. +- Use the `italic` option to get the Latin letters in math mode + be in italics. Digits and log-like operator names (pre-defined + as well as user-defined) will be in the same shape as the text + font (usually this means upright). +- each `\Mathastext[]` in the preamble defines a math version + to be later activated in the document body via the command + `\MTversion{}`. +- With the `subdued` option, mathastext will be active + only inside such math versions. +- For documents needing Greek letters the following is + possible: + - no option: Greek letters defined by other packages, + - `eulergreek`: use the Euler font for the Greek letters, + - `symbolgreek`: use the Postscript Symbol font for the + Greek letters. + - `LGRgreek`: use the document text font in LGR encoding. + Further options specify the shape of the lowercase + and uppercase Greek glyphs; starting with v1.15c it is + possible to use multiple distinct LGR fonts in the + same document. +- Commands are provided to scale the Euler and Symbol fonts by an + arbitrary factor to let them fit better with the document text + font. +- `\MTsetmathskips` allows to set up extra spacings around letters. + +RECENT CHANGES +============== + +1.3u (2019/08/20) +--- + +* new feature: the initial release dealt with only one font, and + although shortly thereafter the 1.11 version added support for + extended math versions, it was documented that some font-dependent + set-up (minus as endash, dotless i and j, hbar, math accents) was + done only once. This release makes the relevant characters font + encoding savvy in each mathastext-extended math version. Thus, + they should render correctly even with multiple math versions + using fonts with varying encodings. + + This reinforces importance of using `\MTversion` and not the + LaTeX `\mathversion` when switching to a new math version (which + got declared via the package interface). The implementation is + compatible with Unicode engines and mixed usage of `TU` encoding + (OpenType fonts) with traditional 8bits TeX font encodings. For + all engines, all used (8bits) encodings must have been passed as + options to the `fontenc` package. + + Thanks to Falk Hanisch for feature request and code suggestions. + +* new option `unimathaccents`: this adds to option `mathaccents` + the demand to use the text font accents for OpenType fonts in math + mode via the `\Umathaccent` primitive. Indeed, as my testing + showed that this gave non-satisfactory results both with XeTeX + and LuaTeX regarding the horizontal placement of the accents, + the main option `mathaccents` acts only on 8bits encoded fonts. + +* bugfix: the `\Mathastext` without optional argument forgot to + repeat some font-encoding dependent initialization set-up done + originally during package loading. + +* bugfix: under the `subdued` option macros `\MTmathactiveletters` + or `\MTnonlettersobeymathxx` now act like no-ops if + issued explicitly while in the `normal` or `bold` math version. + Formerly, this was not the case and could cause bugs such as a + disappearing minus sign in math mode. + +* bugfix: the letter `h` used in the `\hbar` obeyed the extra + skips as set-up by `\MTsetmathskips`, badly interfering with the + horizontal positioning of the bar accent. They are now ignored + (as well as the added italic correction). + diff --git a/macros/latex/contrib/mathastext/mathastext.dtx b/macros/latex/contrib/mathastext/mathastext.dtx new file mode 100644 index 0000000000..8978450469 --- /dev/null +++ b/macros/latex/contrib/mathastext/mathastext.dtx @@ -0,0 +1,8276 @@ +% -*- coding: iso-latin-1; time-stamp-format: "%02d-%02m-%:y at %02H:%02M:%02S %Z" -*- +% N.B.: this dtx file does NOT use \DocInput, it only uses docstrip. +% The LaTeX source of the documentation is NOT prefixed with percent characters. +%<*dtx> +\def\dtxtimestamp {Time-stamp: <20-08-2019 at 11:13:40 CEST>}% +\def\docdate{2019/08/20} +% +%<*drv> +\def\MSTpkgdate {2019/08/20} +\def\MSTpkgversion {1.3u} +% +%<*dtx> +\iffalse % meta-comment +% +%<*readme> + + +-------------------------------------------+ + + + + + mathastext + + + + + + 'Use the text font in math mode' + + + + + +-------------------------------------------+ + +This Work may be distributed and/or modified under the conditions +of the [LPPL1.3c](http://www.latex-project.org/lppl/lppl-1-3c.txt) + +The Author of this Work is Jean-Francois Burnol + +Copyright (C) 2011-2019 Jean-Francois Burnol (`jfbu at free dot fr`) + + Source: mathastext.dtx 1.3u 2019/08/20 + +% +%<*dtx> +Generating the documentation from source: + +1a) tex (or etex) mathastext.dtx to extract generated files +1b) then latex mathastext.tex (thrice) and dvipdfmx mathastext.dvi +2) alternative to 1a)+1b): pdflatex mathastext.dtx. The documentation does +not include the documented source code then, in contrast to 1a)+1b) method +\fi % end of meta-comment +% +%<*!readme&!changelog> +%%---------------------------------------------------------------- +%% Package: mathastext +%% Info: Use the text font in math mode (JFB) +%% Version: 1.3u 2019/08/20 +%% License: LPPL 1.3c (http://www.latex-project.org/lppl/lppl-1-3c.txt) +%% Copyright (C) 2011-2019 Jean-Francois Burnol +%% Examples of use of mathastext: +%% http://jf.burnol.free.fr/mathastext.html +%% http://jf.burnol.free.fr/showcase.html +%%---------------------------------------------------------------- +% +%<*dtx> +\chardef\noetex 0 +\ifx\numexpr\undefined\chardef\noetex 1 \fi +\ifnum\noetex=1 \chardef\extractfiles 0 % extract files, then stop +\else + \ifx\ProvidesFile\undefined + \chardef\extractfiles 0 % etex etc.. on mathastext.dtx + \else % latex/pdflatex on mathastext.tex or on mathastext.dtx + \ifx\Withdvipdfmx\undefined + % latex run is on mathastext.dtx, we will extract all files + \chardef\extractfiles 1 % 1 = extract all and typeset doc + \chardef\Withdvipdfmx 0 % 0 = pdflatex or latex+dvips + \chardef\NoSourceCode 1 % + \NeedsTeXFormat{LaTeX2e}% + \PassOptionsToClass{a4paper,fontsize=11pt}{scrdoc}% + \else % latex run is on mathastext.tex, + \chardef\extractfiles 2 % no extractions + \fi + \ProvidesFile{mathastext.dtx}% + [bundle source (\MSTpkgversion, \MSTpkgdate) and documentation (\docdate)]% + \fi +\fi +\ifnum\extractfiles<2 % extract files +\def\MessageDeFin{\newlinechar10 \let\Msg\message +\Msg{^^J}% +\Msg{********************************************************************^^J}% +\Msg{*^^J}% +\Msg{* To finish the installation you have to move the following^^J}% +\Msg{* file into a directory searched by TeX:^^J}% +\Msg{*^^J}% +\Msg{*\space\space\space\space mathastext.sty^^J}% +\Msg{*^^J}% +\Msg{* To produce the documentation with source code included run latex^^J}% +\Msg{* thrice on file mathastext.tex and then dvipdfmx on mathastext.dvi^^J}% +\Msg{*^^J}% +\Msg{* Happy TeXing!^^J}% +\Msg{*^^J}% +\Msg{********************************************************************^^J}% +}% +\begingroup +\input docstrip.tex +\askforoverwritefalse +\def\testfilepreamble{\string\def\string\testfileincipit{Test file + to accompany \string\texttt{mathastext}^^J% + version \string\texttt{\MSTpkgversion} of \string\texttt{\MSTpkgdate}}} +\generate{\nopreamble\nopostamble + \file{README.md}{\from{mathastext.dtx}{readme}} + \file{ChangeLog.md}{\from{mathastext.dtx}{changelog}} + \usepostamble\defaultpostamble + \file{mathastext.tex}{\from{mathastext.dtx}{drv}} + \usepreamble\testfilepreamble + \file{mathastexttestmathversions.tex}{\from{mathastext.dtx}{mathversions}} + \file{mathastexttestunicodemacos.tex}{\from{mathastext.dtx}{macos}} + \file{mathastexttestunicodelinux.tex}{\from{mathastext.dtx}{linux}} + \file{mathastexttestalphabets.tex}{\from{mathastext.dtx}{alphabets}} + \usepreamble\defaultpreamble + \file{mathastext.sty}{\from{mathastext.dtx}{package}}% +} +\endgroup +\fi % end of file extractions +\ifnum\extractfiles=0 +% tex/etex/xetex/etc on mathastext.dtx, files are now extracted, stop + \MessageDeFin\expandafter\end +\fi +% no file extractions if latex compilation was on mathastext.tex +\ifdefined\MessageDeFin\AtEndDocument{\MessageDeFin}\fi +\begingroup\catcode1 0 \catcode`\\ 12 +% this is to fool TeX's recognition of \if/\else/\fi like tokens in test files +^^Aiffalse +% +%<*readme> + +DESCRIPTION +=========== + +Optimal typographical results for documents containing +mathematical symbols can only be hoped for with math fonts +specifically designed to match a given text typeface. +Although the list of freely available math fonts (alongside +the Computer Modern and AMS extension fonts) is slowly +expanding (fourier, kpfonts, mathdesign, pxfonts, txfonts, +newpx, newtx, ...) it remains limited, and the situation is +even worse with Unicode fonts (XeTeX/LuaTeX). So if you can't +find a math font which fits well with your favorite text +font, and wish to still be able to typeset mathematical +documents, perhaps not of the highest typographical quality, +but at least not subjected to obvious visual incompatibilities +between your text font and the math fonts, try out mathastext: +it will simply use the text font also for the math! + +- http://jf.burnol.free.fr/mathastext.html +- http://jf.burnol.free.fr/showcase.html + + +USAGE +===== + +`mathastext` is a LaTeX package + + \usepackage{mathastext} + +The document will use in math mode the text font as configured at +package loading time, for these characters: + + abcdefghijklmnopqrstuvwxyz + ABCDEFGHIJKLMNOPQRSTUVWXYZ + 0123456789 + !?,.:;+-=()[]/#$%&<>|{}\ +%$ because emacs buffer fontification + +Main options: `italic`, `subdued`, `LGRgreek`. +- Use the `italic` option to get the Latin letters in math mode + be in italics. Digits and log-like operator names (pre-defined + as well as user-defined) will be in the same shape as the text + font (usually this means upright). +- each `\Mathastext[]` in the preamble defines a math version + to be later activated in the document body via the command + `\MTversion{}`. +- With the `subdued` option, mathastext will be active + only inside such math versions. +- For documents needing Greek letters the following is + possible: + - no option: Greek letters defined by other packages, + - `eulergreek`: use the Euler font for the Greek letters, + - `symbolgreek`: use the Postscript Symbol font for the + Greek letters. + - `LGRgreek`: use the document text font in LGR encoding. + Further options specify the shape of the lowercase + and uppercase Greek glyphs; starting with v1.15c it is + possible to use multiple distinct LGR fonts in the + same document. +- Commands are provided to scale the Euler and Symbol fonts by an + arbitrary factor to let them fit better with the document text + font. +- `\MTsetmathskips` allows to set up extra spacings around letters. + + +RECENT CHANGES +============== + +1.3u (2019/08/20) +--- + +* new feature: the initial release dealt with only one font, and + although shortly thereafter the 1.11 version added support for + extended math versions, it was documented that some font-dependent + set-up (minus as endash, dotless i and j, hbar, math accents) was + done only once. This release makes the relevant characters font + encoding savvy in each mathastext-extended math version. Thus, + they should render correctly even with multiple math versions + using fonts with varying encodings. + + This reinforces importance of using `\MTversion` and not the + LaTeX `\mathversion` when switching to a new math version (which + got declared via the package interface). The implementation is + compatible with Unicode engines and mixed usage of `TU` encoding + (OpenType fonts) with traditional 8bits TeX font encodings. For + all engines, all used (8bits) encodings must have been passed as + options to the `fontenc` package. + + Thanks to Falk Hanisch for feature request and code suggestions. + +* new option `unimathaccents`: this adds to option `mathaccents` + the demand to use the text font accents for OpenType fonts in math + mode via the `\Umathaccent` primitive. Indeed, as my testing + showed that this gave non-satisfactory results both with XeTeX + and LuaTeX regarding the horizontal placement of the accents, + the main option `mathaccents` acts only on 8bits encoded fonts. + +* bugfix: the `\Mathastext` without optional argument forgot to + repeat some font-encoding dependent initialization set-up done + originally during package loading. + +* bugfix: under the `subdued` option macros `\MTmathactiveletters` + or `\MTnonlettersobeymathxx` now act like no-ops if + issued explicitly while in the `normal` or `bold` math version. + Formerly, this was not the case and could cause bugs such as a + disappearing minus sign in math mode. + +* bugfix: the letter `h` used in the `\hbar` obeyed the extra + skips as set-up by `\MTsetmathskips`, badly interfering with the + horizontal positioning of the bar accent. They are now ignored + (as well as the added italic correction). + +% +%<*changelog> +MATHASTEXT CHANGE LOG +===================== + +1.3u \[2019/08/20\] +---- + +* new feature: the initial release dealt with only one font, and + although shortly thereafter the 1.11 version added support for + extended math versions, it was documented that some font-dependent + set-up (minus as endash, dotless i and j, hbar, math accents) was + done only once. This release makes the relevant characters font + encoding savvy in each mathastext-extended math version. Thus, + they should render correctly even with multiple math versions + using fonts with varying encodings. + + This reinforces importance of using `\MTversion` and not the + LaTeX `\mathversion` when switching to a new math version (which + got declared via the package interface). The implementation is + compatible with Unicode engines and mixed usage of `TU` encoding + (OpenType fonts) with traditional 8bits TeX font encodings. For + all engines, all used (8bits) encodings must have been passed as + options to the `fontenc` package. + + Thanks to Falk Hanisch for feature request and code suggestions. + +* new option `unimathaccents`: this adds to option `mathaccents` + the demand to use the text font accents for OpenType fonts in math + mode via the `\Umathaccent` primitive. Indeed, as my testing + showed that this gave non-satisfactory results both with XeTeX + and LuaTeX regarding the horizontal placement of the accents, + the main option `mathaccents` acts only on 8bits encoded fonts. + +* bugfix: the `\Mathastext` without optional argument forgot to + repeat some font-encoding dependent initialization set-up done + originally during package loading. + +* bugfix: under the `subdued` option macros `\MTmathactiveletters` + or `\MTnonlettersobeymathxx` now act like no-ops if + issued explicitly while in the `normal` or `bold` math version. + Formerly, this was not the case and could cause bugs such as a + disappearing minus sign in math mode. + +* bugfix: the letter `h` used in the `\hbar` obeyed the extra + skips as set-up by `\MTsetmathskips`, badly interfering with the + horizontal positioning of the bar accent. They are now ignored + (as well as the added italic correction). + + +1.3t \[2018/08/22\] +---- + +* bugfix: the 1.3s bugfix about `subdued` compatibility with + `fontspec` was deficient. + +* bugfix: very old (v1.2, 2012/12/20) bug causing low-level TeX error + during package loading (with pdflatex) when setting up the math minus + sign to be the text font endash character, in cases with + `\encodingdefault` other than OT1, T1 or LY1, e.g. something like + T2A. + +* `\imath` and `\jmath` obey the `subdued` regime. And the minus sign + is now handled especially to ensure perfect compatibility with the + `subdued` option. + +* breaking change: `mathastext` does not redefine anymore + `\i` and `\j` to let them be usable both in text and math mode. + + +1.3s \[2018/08/21\] +---- + +* fix to an issue with `subdued` option in a `fontspec` context. + +% https://tex.stackexchange.com/q/444565/4686 + +1.3r \[2016/11/06\] +---- + +* documentation tweaks. + + +1.3q \[2016/10/31\] +---- + +* new option `unicodeminus`. + +* the `Recent Changes` section of the documentation has been removed as it + was a duplicate of information available in the `Change Log`. + +* some other + changes in the documentation, in particular the use of straight quotes + in verbatim. + + +1.3p \[2016/05/13\] +---- + +* bugfix: release `1.3n` had forgotten to activate by default its new + customization of the amsmath macro `\newmcodes@` (it was done from + using `\MTversion` in the document body but not by default at start + of body.) + +* public name `\MTfixmathfonts` for a `1.3o` macro. + + +1.3o \[2016/05/03\] +---- + +* `mathastext` fixes an issue related to a feature of `LuaLaTeX` and + `luaotfload` that OpenType fonts are declared in one of two modes: + `node` and `base`, and only the latter is functional in math mode. But + by default text fonts are declared in mode `node`. Thus `mathastext` + now intervenes to make it so that the font it declares in math mode + will use mode `base`. This fixes issues with for example old style + figures being used while the text font used lining figures (or vice + versa, depending on the font). But see the code comments for more. + + +1.3n \[2016/04/22\] +---- + +* at long last, `mathastext` takes care properly of annoying and perplexing + amsmath's `\newmcodes@`. The very recent change in `amsopn.sty` finally + made it compatible with Unicode engines, but anyhow, `mathastext` must do + its own patch to use the correct font. All of this taking into account + the various options passed to the package. Lots of trouble for a tiny thing. + + +1.3m \[2016/04/02\] +---- + +* minor code maintenance before annual TL freeze. + + +1.3l \[2016/01/29\] +---- + +* compatibility with fontspec's upcoming switch from `EU1/EU2` to + `TU` common to both Unicode engines. + + +1.3k \[2016/01/24\] +---- + +* typos fixed in the documentation. In particular, the README link to + the package homepage had remained broken from day one of the package + releases: `mathastext.html` therein was misspelled as + `mathsastext.html` ! (but the pdf documentation had the correct link; + as well as the CTAN catalogue). + + +1.3j \[2016/01/15\] +---- + +* renamed and modified recent `1.3i`'s `\MTactivemathoff` into + `\MTeverymathoff`. Added `\MTeverymathdefault`. + +* `subdued` mode is a bit stronger: also the asterisk reverts to the + default (if it was modified due to option `asterisk`), the added + extra `\mskip`'s (useful with upright fonts) for `'`, `\exists`, + and `\forall` are suppressed rather than re-configured to use `0mu`. + Related new commands `\MTexistsdoesskip`, `\MTforalldoesskip`, + `\MTprimedoesskip`, `\MTnormalexists`, `\MTnormalforall`, + `\MTnormalprime`. + +* the toggle for using mathematically active letters is only emitted + once during package loading; the `\Mathastext` command does not do + it anymore; the use in the preamble of `\MTmathstandardletters`, + or `\MTnoicinmath` and related commands is not overruled by later + use of `\Mathastext`. + +* quite a few documentation improvements and rewrites, particularly + in the description of commands which are related to the + modifications of mathcodes (mainly for math activation of + characters or letters) as done by mathastext at `\everymath` or + `\everydisplay`. + + +1.3i \[2016/01/06\] +---- + +* `\url` from `url.sty` as well as `\url` and `\nolinkurl` from + `hyperref.sty` use math mode and (by default) the monospace text + font. To avoid mathastext overwriting the special preparation done + by `{url,hyperref}.sty` the commands `\url/\nolinkurl` are patched + to do automatically `\MTactivemathoff` (now `\MTeverymathoff`) + before entering math mode. + +* the extra skips specified by `\MTsetmathskips` are not inserted + around letters if inside the arguments of math alphabet commands, + or within operator names. + +* the added explicit italic corrections (for non-oblique fonts) were + disabled within math alphabet scopes, except `mathnormal`; they + are now disabled within all math alphabets, inclusive of + `mathnormal`. + + +1.3h \[2015/10/31\] +---- + +* bugfixes: since `1.3d 2014/05/23` the option `symbolgreek` caused + `\ell` to become undefined, and, similarly but far worse, options + `selfGreek`, `selfGreeks` caused all lowercase Greek letters + `\alpha`, `\beta`, etc.. to become undefined. + + +1.3g \[2015/10/15\] +---- + +* following `2015/10/01` LaTeX release, removal of the `"luatex"` + prefix from the names of the LuaLaTeX math primitives. Compatibility + maintained with older LaTeX formats. + + +1.3f \[2015/09/12\] +---- + +* the replacement of amsmath's `\resetMathstrut@`, when it is + done, emits an Info rather than a Warning as this could be + potentially stressful to some users. + +* the `README` self-extracts from the `dtx` source, as a text + file `README.md` with Markdown syntax. + + +1.3e \[2015/09/10\] +---- + +* bugfix: under option nosmalldelims, `\lbrace` and `\rbrace` were + redefined as math symbols and could not be used as delimiters. + + +1.3d \[2015/02/26\] +---- + +* the documentation mentions the improved compatibility of mathastext + with the latest (3.34) beamer release: no more need for + `\usefonttheme{professionalfonts}`. + +1.3d \[2014/05/23\] +---- + +* new commands `\MTstandardgreek` and `\MTcustomgreek`. + +* The Greek letters, in case of use of one of the package related + options, are left to their defaults in the normal and bold math + versions if the subdued option was also used (this was so far + the case only with options LGRgreek/LGRgreeks). + +* `\newmcodes@` of amsmath is left untouched if package + lualatex-math is detected. + +1.3c \[2013/12/14\] +---- + +* added a starred variant to `\MTversion` which tells mathastext to + only do the math set-up and not modify the text fonts. + +* added second optional version name argument to `\Mathastext` and + to `\MTDeclareVersion`, to transfer settings for things not + otherwise changed by mathastext from a math version to the one + declared. This is mainly for symbols and large symbols to be the + bold ones when the user sets up the series of a mathastextified + font to be bold in a mathastext-declared version. + +* renamed `\defaultprod` to `\MToriginalprod`, `\defaultsum` to + `\MToriginalsum`, (this is in case of option symbolmisc). + +* changes to the dtx organization; options for generating the + documentation can be customized in generated mathastext.tex file. + +* 1.2d code for `\#`, `\$`, `\%`, and `\&` modified erroneously the + earlier correct 1.2c code and created a bug showing up with more + than 16 math families (a possibility only with lualatex or + xelatex). + +1.3a \[2013/09/04\] +---- + +* the somewhat silly `\string`'s are removed from the + `\MTsetmathskips` command of release 1.3, thus allowing its first + argument to be a macro, or any expandable code, giving a letter. + +* the amsmath `\resetMathstrut@`, which is incompatible with a + mathematically active parenthesis ( is now modified only if + necessary (i.e. only when `\MTnonlettersobeymathxx` is issued) and + is restored to its original value if not needed anymore (i.e. + after `\MTnonlettersdonotobeymathxx`, as for example when + switching to the normal version under option subdued). + +* improved documentation. + +1.3 \[2013/09/02\] +---- + +* commands `\MTsetmathskips` and `\MTunsetmathskips` added. + +* commands `\MTmathactiveletters` and `\MTmathstandardletters` to + govern the math activation of letters independently of its use + for insertion of the italic corrections (`\MTicinmath` and + `\MTnoicinmath` correspondingly modified). + +* the new `\luatexUmathcodenum` as available since TL2013 allows + identical treatment by mathastext of = and - under both LuaTeX + and XeTeX. + +* `\newmcodes@` of amsmath is left untouched in case of option basic. + +* a sentence containing | which was written to the log during the + loading caused a problem if | was active (typically if + `\MakeShortVerb`{\|} was added to the preamble prior to the + loading of mathastext). + +* some preemptive measures taken regarding things such as `\mid`, + `\lbrace`, and `\rbrace`, as some packages define these things in + manners which made the re-definitions done by mathastext issue + errors. + +1.2f \[2013/01/21\] +---- + +* minor code improvements. Change log added to the user manual. + +1.2e \[2013/01/10\] +---- + +This version should be the last one in the 1.2 series as it seems to +correct most of the main problems which were introduced with the massive +use of mathematically active characters in versions 1.2 and 1.2b. + +* It is indeed a thorny point when one wants to modify an active character in + math mode only (without breaking usage in label's and ref's for example). + The package now does that _only_ if the activation originated in the Babel + system as it is then possible to modify appropriately the Babel macros + `\user@active` and `\normal@char`, at the time of entering math + mode (mathastext does all its activation job at `\everymath` and + `\everydisplay`). + + The relevant issues are discussed in section 2.10 of the user manual, in the + test file mathastexttestalphabets.tex, and in the source code comments for + macro `\mst@mathactivate`. The inherent incompatibility of Babel with + packages having made mathematically active the characters itself makes + document active is circumvented by this interference of mathastext. A + generally applicable Babel patch could be derived from the method used by + mathastext. + + For the non catcode active characters, mathematical activation is used. + This is done at the entrance in math mode. + +* Sadly, the feature of added italic corrections introduced in + version 1.2b did not behave as described in the user manual, due to + forgotten group braces. Fixed. + +* The command `\MTlowerast` from the user manual of v1.2d was not the + one implemented in the source code. Fixed. + +* The test files automatically extracted from a latex run on the dtx + file have been revised and extended. + +* The code is better documented. + +1.2d \[2013/01/02\] +---- + +* an incompatibility with amsmath (its macro `\resetMathstrut@`), + exists since version 1.2 of the package. This is fixed + here. + +* various improvements in dealing with the asterisk and in the + mechanism of letting non-letter symbols obey the math alphabet + commands. + +* documentation extended and improved. + +1.2c \[2012/12/31\] +---- + +* mathastext now inserts automatically after all (latin) + letters in math mode their italic corrections, if the font + used is upright (sic). This improves the spacings for the + positioning of subscripts. The feature is de-activated + inside the math alphabets commands (apart from `\mathnormal`), + so as to not prohibit the formation of ligatures. + +* the documentation has been extended to explain in detail the + issues which are relevant to the new feature of added italic + corrections. + +* version 1.2 had some bad bugs when confronted to active + characters. This is corrected and additionally + `\MTnonlettersdonotobeymathxx` is made the default, as the user + input is too much constrained in its absence. + +* a less fatal, but still annoying, typo had made the dot in 1.2 + of type `\mathpunct` rather than `\mathord`. + +* the inner namespace has been rationalized a bit. + +1.2 \[2012/12/20\] +---- + +* a new command sets up the amount of space to be automatically + inserted before the derivative glyph (useful when using an + upright font). + +* the scope of the math alphabets has been extended to apply + to the non-alphabetical characters, and also to operator + names. + +* the format of the dtx file has changed. The package file + is self-extracting from the dtx, and four additional test + files are also produced during `latex mathastext.dtx`. + +1.15f and 1.15g \[2012/10/25\] +---- + +* `\$`, `\#`, `\&`, and `\%` had been re-defined by mathastext since its + inception in a rather strange (but working) way, which + could cause surprises to other packages. Fixed. + +* the subdued mechanism for the math alphabets is implemented + in a simpler and more efficient manner than in 1.15e. + +* the `defaultxx` options act a bit differently, and are more + useful in case of a `too many math alphabets` situation. + +* various improvements in the documentation. + +* general clean up and better commenting of the source code. + +1.15e \[2012/10/22\] +---- + +* new user commands to specify skip or glue to be + inserted after the math symbols `\exists` and `\forall` + +* complete (user transparent) rewrite of the code + implementing the subdued option; and its action has + been extended to apply also to the `\mathbf`, `\mathit`, + `\mathsf`, `\mathtt` alphabets and not only to `\mathrm` and + `\mathnormal` as in the previous versions. + +* improvements in the documentation. + +1.15d \[2012/10/13\] +---- + +* the Unicode situation is now correctly treated, throughout the + code (this had been left in a half-done way from version 1.14 of + April 2011). + +* this includes an issue related to amsmath and its + DeclareMathOperator macro which has been fixed, + +* and the code related to `\relbar` and `\Relbar` (and + `\models`) has been revised. + +1.15c \[2012/10/05\] +---- + +* it is now possible to use distinct fonts in LGR encoding + for the Greek letters according to the current math + version. + +* improvements to the documentation. + +1.15b +---- + +* corrected a 'feature' of 1.15 which was backward-incompatible + +* improvements to the pdf documentation + +1.15 \[2012/09/26\] +---- + +* the subdued option allows the mathastextification to + act only locally. + +* some measures taken to deal with amsmath related + issues when using xetex or luatex. + +1.14c +---- + +* a bug is fixed: the `\Mathastext` macro reinitializes + the fonts in the normal and bold math versions, but it + also erroneously redeclared the math alphabet changing + commands which could have been set up in previously + defined math versions (via earlier calls to + `\Mathastext`\[version_name\]). + +1.14b \[2011/04/03\] +---- + +* there was a bug with `\$`, `\#`, `\&`, `\%` in math mode which + showed up when ten or more math families had been + declared. This bug affected also the minus sign under + the same circumstances, when Unicode engines were + used. Fixed. + +* the options LGRgreek and selfGreek act now a bit + differently, and new options LGRgreeks and selfGreeks + have been defined. + +* I also cleaned up a bit the code, for a more + structured namespace. + +1.14 +---- + +* mathastext now modifies also the math alphabets `\mathit`, + `\mathsf` and `\mathtt`, thus making it a quite generic + complete manner to adapt the math configuration to fonts + provided with no math support. + +1.13b +---- + +* when the Symbol font is used for `\prod` and `\sum` this + will be only for inline math; display math will use the + default glyphs + +1.13 \[2011/03/11\] +---- + +* the LGRgreek option is added. + +* internal changes for better readability of the code. + +1.12 +---- + +* various bugs have been corrected. + +* the endash and alldelims options are active by default. + +* the package is more Unicode aware. + +* the `\Mathastext` command has been improved to + facilitate the mechanism of math versions also when + using XeTeX or LuaTeX (with package fontspec.) + +* the en-dash and dotless i and j now work with all + encodings, Unicode inclusive. + +1.11 \[2011/02/06\] +---- + +* optional argument to `\Mathastext` macro. + +1.1 \[2011/02/01\] +---- + +* options italic and frenchmath. + +1.0 \[2011/01/25\] +---- + +* Initial version. + +% +%<*drv> +%% This is a generated file. Run latex thrice on this file mathastext.tex then +%% run dvipdfmx on mathastext.dvi to produce the documentation mathastext.pdf, +%% with the package source code included. +%% +%% Customize as desired the class options and the two toggles below. +%% +%% See mathastext.dtx for the copyright and the conditions for distribution +%% and/or modification of this work. +%% +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{mathastext.tex}% +[\MSTpkgdate\space v\MSTpkgversion\space + driver file for mathastext documentation (JFB)]% +\PassOptionsToClass{a4paper,fontsize=11pt}{scrdoc} +\chardef\Withdvipdfmx 1 % replace 1 by 0 for using latex/pdflatex +\chardef\NoSourceCode 0 % replace 0 by 1 for no source code +\input mathastext.dtx +%%% Local Variables: +%%% mode: latex +%%% End: +% +%<*mathversions> +%% This file `mathastexttestversions.tex' is for testing the enhanced +%% concept of math versions provided by the package `mathastext'. +%% +%% See `mathastext.dtx' for the copyright and conditions of distribution or +%% modification. +%% +\documentclass{article} +\usepackage[T1]{fontenc} +\usepackage{newcent} +\usepackage[subdued]{mathastext} +\Mathastext[newcent] +\renewcommand\familydefault\ttdefault +\Mathastext[courier] +\renewcommand\familydefault\sfdefault +\Mathastext[avantgarde] +\renewcommand\familydefault\rmdefault +\begin{document} +\testfileincipit + +text in NewCentury and $math\ as\ in\ default$,% +\MTversion{courier} text in Courier and $math\ in\ Courier$,% +\MTversion{avantgarde} text in AvantGarde and $math\ in\ AvantGarde$,% +\MTversion[newcent]{courier} text in NewCentury and $math\ in\ +Courier$,\MTversion{bold} text in bold NewCentury and $math\ as\ in\ +bold\ default$,\MTversion[courier]{avantgarde} text in Courier and +$math\ in\ AvantGarde$. +\end{document} +% +%<*macos> +%% This file `mathastexttestunicodemacos.tex' is for testing the use +%% of the package `mathastext' with the unicode engines XeTeX or LuaLaTeX. +%% +%% Mac OS X specific fonts are used (initially tested on 10.8.2). +%% +%% See `mathastext.dtx' for the copyright and conditions of distribution or +%% modification. +%% +\documentclass{article} +\usepackage[hscale=0.85]{geometry} +\usepackage{multicol} +\usepackage[no-math]{fontspec} +\usepackage{lmodern} +\usepackage{metalogo} +\usepackage{iftex} +\ifXeTeX +\expandafter\def\expandafter\testfileincipit\expandafter + {\testfileincipit\ (compiled with \XeLaTeX)} +\else +\ifLuaTeX +\expandafter\def\expandafter\testfileincipit\expandafter + {\testfileincipit\ (compiled with \LuaLaTeX)} +\fi\fi +\usepackage[subdued,italic,asterisk]{mathastext} +\setmainfont[Color=FF0000]{Hoefler Text} \Mathastext[Hoefler] +\setmainfont[Color=336633]{American Typewriter}\Mathastext[Typewriter] +\setmainfont[Color=0000FF]{Herculanum} \Mathastext[Herculanum] +\setmainfont[Color=FF00FF]{Didot} \Mathastext[Didot] +\setmainfont[Color=999999]{Comic Sans MS} \Mathastext[Comic] +\MTDeclareVersion{Times}{T1}{ptm}{m}{n} +\begin{document} +\MTversion{normal} +\testfileincipit + +This test uses \verb|mathastext| with its \emph{italic}, \emph{asterisk}, and +\emph{subdued} options. The base document fonts are the Latin Modern ones (in +OpenType format). The other OpenType fonts were chosen from those available on +a Mac OS machine. We also used the Times font in traditional \TeX\ font T1 +encoding, to demonstrate the removal since release \texttt{1.3u} of a former +limitation that all math versions had to share the same font encoding, else +some characters such as the dotless \texttt{i} ($\imath$), or the minus sign +could well vanish from the output in the non-normal math versions. + +Furthermore we test (last line of each block, on the left) if the non-letter +characters obey the math alphabet \verb|\mathbf|. In the normal and bold math +versions, this feature is de-activated, as option \emph{subdued} was used; and +if activated we should then use in these math versions the package +\verb|\Mathbf| rather than \verb|\mathbf| which is there still the original +one, which will use encoding \verb|OT1| in the normal and bold versions, as we +loaded \verb|fontspec| with its option \emph{no-math}. + +Some among the fonts tested have no bold variant or no italic variant. + +Note (tested 2013/09/03): for some reason the \verb|Color| specifications in the +\verb|\setmainfont| commands work only +with \XeLaTeX{}, not with \LuaLaTeX{}; a few months back I had not noticed +such a difference between the two engines. + +Update (tested 2016/01/15 with reasonably up-to-date TL2015): \verb|Color| +spec in use of \verb|\setmainfont| command now functional again with +\LuaLaTeX. + +Note (tested 2019/08/11, reasonably up-to-date TL2019): spacing with the Didot +font differs widely between \XeLaTeX\ and \LuaLaTeX{} (perhaps related to +italic corrections, see the package documentation), and also it seems +\LuaLaTeX{} will not find (from our generic usage of the \verb|fontspec| +interface, at least) bold variants of the Hoefler Text and American Typewriter +fonts, contrarily to \XeLaTeX. Also, the \emph{italic} option remains +seemingly without effect with \LuaLaTeX{} in the case of the Hoefler Text font +(see the package source code comments on some problems with the two ``modes'' +for text fonts under \LuaLaTeX, which may be related with this specific issue +here). + +\newcommand\TEST[1]{\MTversion{#1}\def\tmpa{#1}% + \def\tmpb{normal}\def\tmpc{bold}% + \ifx\tmpa\tmpb\else\ifx\tmpa\tmpc\else \MTnonlettersobeymathxx + \MTexplicitbracesobeymathxx\fi\fi +\begin{multicols}{2} +\hbox to\columnwidth{\hbox to\columnwidth{\hfil + $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}} + \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ } + \centerline{ $0123456789$ } + \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ } + \centerline{ $\mathbf{!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash}$ } +\columnbreak + \centerline{ abcdefghijklmnopqrstuvwxyz } + \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ } + \centerline{ 0123456789 } + \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } + \centerline{\bfseries !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } +\end{multicols}} +\begin{multicols}{2} + \centerline{\textbf{math mode}} +\columnbreak + \centerline{ \textbf{text} } +\end{multicols} +\TEST{Didot}\TEST{Comic}\TEST{normal}\TEST{Herculanum} +\TEST{Hoefler}\TEST{Typewriter}\TEST{bold}\TEST{Times} +\end{document} +% +%<*linux> +%% This file `mathastexttestunicodelinux.tex' is for testing the use +%% of the package `mathastext' with the unicode engines XeTeX or LuaLaTeX. +%% +%% Fonts which were available on a Linux machine are used. Beware that +%% compilation with LuaLaTeX will abort with errors if specified fonts do not +%% exist on your system. +%% +%% See `mathastext.dtx' for the copyright and conditions of distribution or +%% modification. +%% +\documentclass{article} +\usepackage[hscale=0.8]{geometry} +\usepackage{multicol} +\usepackage[no-math]{fontspec} +\usepackage{lmodern} +\usepackage{metalogo} +\usepackage{iftex} +\ifXeTeX +\expandafter\def\expandafter\testfileincipit\expandafter + {\testfileincipit\ (compiled with \XeLaTeX)} +\else +\ifLuaTeX +\expandafter\def\expandafter\testfileincipit\expandafter + {\testfileincipit\ (compiled with \LuaLaTeX)} +\fi\fi +\usepackage[subdued,italic,asterisk]{mathastext} +\setmainfont[Color=999999]{Verdana} \Mathastext[Verdana] +\setmainfont[Color=0000FF]{Arial} \Mathastext[Arial] +\setmainfont[Color=00C000]{DejaVu Serif} \Mathastext[DejaVu] +\setmainfont[Color=FF0000]{Andale Mono} \Mathastext[Andale] +%% commented out as these fonts do not exist anymore on the Linux box +%% I have access to (test last done 2016/01/15) +%%\setmainfont[Color=C000C0]{URW Chancery L} \Mathastext[Chancery] +%%\setmainfont[Color=800080]{URW Palladio L} \Mathastext[Palladio] +\setmainfont[Color=808000]{Liberation Serif} \Mathastext[Liberation] +\MTDeclareVersion{Times}{T1}{ptm}{m}{n} +\begin{document} +\MTversion{normal} +\testfileincipit + +This test uses \verb|mathastext| with its \emph{italic}, \emph{asterisk}, and +\emph{subdued} options. The base document fonts are the Latin Modern ones (in +OpenType format). The other OpenType fonts were chosen from those available on +a Linux machine. We also used the Times font in traditional \TeX\ font T1 +encoding, to demonstrate the removal since release \texttt{1.3u} of a former +limitation that all math versions had to share the same font encoding, else +some characters such as the dotless \texttt{i} ($\imath$), or the minus sign +could well vanish from the output in the non-normal math versions. + +Furthermore we test (last line of each block, on the left) if the non-letter +characters obey the math alphabet \verb|\mathbf|. In the normal and bold math +versions, this feature is de-activated, as option \emph{subdued} was used; and +if activated we should then use in these math versions the package +\verb|\Mathbf| rather than \verb|\mathbf| which is there still the original +one, which will use encoding \verb|OT1| in the normal and bold versions, as we +loaded \verb|fontspec| with its option \emph{no-math}. + +Some among the fonts tested have no bold variant or no italic variant. + +Note: the two unicode engines \XeLaTeX\ and \LuaLaTeX\ give likely not fully +identical results particularly for the math mode. At least this is what I +observed regularly over the years with the variant of this file prepared for +fonts available on Mac OS, which is my main system where I develop +|\mathastext|. Lastly for example (TL2019, august 2019), \LuaLaTeX\ could not +find the bold variant of some system font, but \XeLaTeX\ did. And the spacing +for the letters of the Didot font was vastly different between the two +engines. + +\newcommand\TEST[1]{\MTversion{#1}\def\tmpa{#1}% + \def\tmpb{normal}\def\tmpc{bold}% + \ifx\tmpa\tmpb\else\ifx\tmpa\tmpc\else \MTnonlettersobeymathxx + \MTexplicitbracesobeymathxx\fi\fi +\begin{multicols}{2} +\hbox to\columnwidth{\hbox to\columnwidth{\hfil + $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}} + \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ } + \centerline{ $0123456789$ } + \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ } + \centerline{ $\mathbf{!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash}$ } +\columnbreak + \centerline{ abcdefghijklmnopqrstuvwxyz } + \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ } + \centerline{ 0123456789} + \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } + \centerline{\bfseries !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } +\end{multicols}} +\begin{multicols}{2} + \centerline{\textbf{math mode}} +\columnbreak + \centerline{ \textbf{text} } +\end{multicols} +\TEST{DejaVu} +\TEST{Verdana} +\TEST{Andale} +%%\TEST{Palladio} +\TEST{Arial} +%%\TEST{Chancery} +\TEST{Liberation} +\TEST{bold}\TEST{normal}\TEST{Times} +\end{document} +% +%<*alphabets> +%% This file `mathastexttestalphabets.tex' is for testing the extended +%% scope of the math alphabet commands with package `mathastext', via +%% the package command \MTnonlettersobeymathxx. +%% +%% Compile either with latex, pdflatex, lualatex (pdf output) or xelatex. +%% +%% See `mathastext.dtx' for the copyright and conditions of distribution or +%% modification. +%% +\documentclass{article} +\usepackage[hscale=0.66, vscale=0.72]{geometry} +\usepackage{amsmath} +\usepackage{mathtools}\mathtoolsset{centercolon} +%% WARNING THIS IS INCOMPATIBLE WITH BABEL+FRENCHB +%% BUT WITH MATHASTEXT LOADED THIS IS CORRECTED +%% *IF* \MTnonlettersobeymathxx IS MADE USE OF. +\usepackage{iftex} +\ifXeTeX +\expandafter\def\expandafter\testfileincipit\expandafter + {\testfileincipit\ (compiled with \XeLaTeX)} +\usepackage[no-math]{fontspec} +\setmainfont[ExternalLocation, + Mapping=tex-text, + BoldFont=texgyretermes-bold, + ItalicFont=texgyretermes-italic, + BoldItalicFont=texgyretermes-bolditalic]{texgyretermes-regular} +\setmonofont[ExternalLocation, + Mapping=tex-text]{texgyrecursor-regular} +\setsansfont[ExternalLocation, + Mapping=tex-text]{texgyreheros-regular} +\else +\ifLuaTeX % for pdf output +\expandafter\def\expandafter\testfileincipit\expandafter + {\testfileincipit\ (compiled with \LuaLaTeX)} +\usepackage[no-math]{fontspec} +\setmainfont[Ligatures=TeX]{TeX Gyre Termes} +\setmonofont[Ligatures=TeX]{TeX Gyre Cursor} +\setsansfont[Ligatures=TeX]{TeX Gyre Heros} +\else +\usepackage[utf8]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{tgtermes} +\usepackage{tgcursor} +\usepackage{tgheros} +\fi\fi +\usepackage{metalogo} % must be loaded /after/ [no-math]fontspec +\usepackage[french]{babel} +\usepackage[italic,asterisk]{mathastext} +\MTlettershape{n}\Mathastext[upright] +\MTnonlettersobeymathxx +\MTexplicitbracesobeymathxx +\delimitershortfall-1pt +\usepackage{color} +\begin{document} +\testfileincipit + +\begin{center} + \bfseries Two features of \texttt{mathastext}:\\ +extended scope of the math alphabets and added italic corrections\par +\end{center} + +The package makes +${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}\,{\{}\,{\}}$, +the asterisk $*$, and $.\,/\,\vert\,\backslash\,{\#}\,{\$}\,{\%}\,{\&}$ obey the +math alphabet commands (this is the maximal list, some characters may have been +excluded by the corresponding package options). For the characters listed first +the mechanism involves a `mathematical activation'. + +As this process may create incompatibilities, it will be put into action +for +${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}$ +only if the user makes use of the package command +\verb|\MTnonlettersobeymathxx| (and the braces necessitate +\verb|\MTexplicitbracesobeymathxx|). + +It could be that one such character has been made `active' in the entire +document by some other package, typically a language definition file for the +\verb|babel| system. Here for example we have used \verb|babel| with the +\verb|french| option, which makes the high punctuation characters !?:; active +throughout the document (extra spacing is put in front of the character when +used in text; no change in math but perhaps for other languages and characters +this could happen, it is up to the language definition file to decide). + +When \verb|mathastext| detects that a character it wants to `mathematically +activate' is already `active', it does not go further except if it seems that +the activation was done by Babel. If the activation was done by Babel, then +\verb|mathastext| replaces the expansion of the active character in math mode by +what is necessary to achieve its goal. It does not additionally mathematically +activate the character; rather it makes sure that the character is \emph{not} +mathematically active. In the present document the colon was made mathematically +active by \verb|mathtools| but this was already canceled in the preamble by +\verb|mathastext| as it was loaded later. And it is better so, because the +combination \verb|babel| (with option \verb|frenchb|) +\verb|mathtools| (with +\verb|centercolon|) makes \verb|$:$| create an infinite loop! + +But even if someone had mathematically activated the colon after the preamble, +or after the loading of \verb|mathastext|, this would be canceled again +automatically for each inline or displayed mathematical formula (if the user +does \verb|\MTnonlettersobeymathxx|). + +The conclusion with \verb|\MTnonlettersobeymathxx| is: if some package has tried +to make the character mathematically active, this will be overruled by +\verb|mathastext|; if some package has made the character globally active, then +the package wins except if it is Babel, as \verb|mathastext| may in the latter +case safely modify the action in math mode (paying attention to the fact that +the character should be usable in \verb|\label| and \verb|\ref| in and outside +of math mode). + +The displayed equations next illustrate the extended scope of the math alphabets +which now apply to $=$, $-$, $($, $)$, $[$, $]$ (but not to the large delimiters +of course). Furthermore, for testing purposes the equations were labeled using +such characters, for example the last one has label \verb|eq=7|, to check that +the mathematical activation of $=$ does not cause problems with +\verb|\label/\ref|. + +\def\testformula{\quad\Biggl\lbrace\biggl(\left(\left[[\sin(a) + \cos(b) - \log(c) = +\sec(d)]\right]\right)\biggr)\Biggr\rbrace} +\begin{equation}\testformula\label{eq:1}\end{equation} +\begin{equation}\mathnormalbold{mathnormalbold:\testformula}\label{eq;2}\end{equation} +\begin{equation}\mathrm{mathrm:\testformula}\label{eq?3}\end{equation} +\begin{equation}\mathbf{mathbf:\testformula}\label{eq!4}\end{equation} +\begin{equation}\mathit{mathit:\testformula}\label{eq(5}\end{equation} +\begin{equation}\mathtt{mathtt:\testformula}\label{eq)6}\end{equation} +\begin{equation}\mathsf{mathsf:\testformula}\label{eq=7}\end{equation} + +Equations above are numbered \ref{eq:1}, \ref{eq;2}, \ref{eq?3}, \ref{eq!4}, and +$\ref{eq(5}$, $\ref{eq)6}$, and $\ref{eq=7}$. + +\def\testline#1{$#1$&$\mathnormalbold{#1}$&$\mathrm{#1}$&$\mathbf{#1}$&$\mathit{#1}$&$\mathtt{#1}$&$\mathsf{#1}$} + +\centerline{\begin{tabular}{ccccccc} +\testline{a!b}\\ +\testline{a?b}\\ +\testline{a,b}\\ +\testline{a;b}\\ +\testline{a:b}\\ +\testline{a:=b}\\ +\testline{a\vcentcolon= b}\\ +\testline{a\colon b}\\ +\testline{a.b}\\ +\testline{a-b}\\ +\testline{a+b}\\ +\testline{a=b}\\ +\testline{ab}\\ +\testline{}\\ +\testline{\mathopen{<} x,y\mathclose{>}}\\ +\testline{\left< x,y\right>}\\ +\testline{a/b}\\ +\testline{a\backslash b}\\ +\testline{a\setminus b}\\ +\testline{a|b}\\ +\testline{a\mid b}\\ +\testline{(a,b)}\\ +\testline{[a,b]}\\ +\testline{\{a,b\}} +\end{tabular}} + +The question mark has been made active by \verb|babel+frenchb|. +\verb|mathastext| has imposed in math mode its ways (now \verb|$\mathbf{???}$| +gives $\mathbf{???}$). As the extra spacing is added by \verb|frenchb| only in +text, we had to use the math alphabet to check that indeed \verb|mathastext| +overruled Babel. + +To double-check we will now make \string? mathematically active: +\verb|\mathcode`?="8000|\mathcode`?="8000. This is a sure cause for disaster +normally with Babel (don't do this at home without \verb|mathastext|!). But here +with \verb|$?$| no bad surprise (infinite loop!) awaits us: just $?$. + +Let's take some other character, for example the opening parenthesis, and make +it catcode active: +\verb|\catcode`(=\active \def ({X}|. +Let's try the input +\verb|( and $($|. +\begingroup +\catcode`(=\active \gdef ({X} +This gives ( and $($. We see that \verb|mathastext| does not attempt to modify +the definition of the active character, as this activation was not done via the +\verb|babel| services. \catcode`\(=12 \mathcode`(="8000 We now revert the +parenthesis to catcode other (but maintain \verb|\def ({X}| as definition of its +active version), and then make it mathematically active using the command +\verb|\mathcode`(="8000|. If we try \verb|$((($| we see that the parenthesis is +not converted into an $X$: $((($. The mathematically active character was +overruled by \verb|mathastext|. + +Issuing \verb|\MTnonlettersdonotobeymathxx|\MTnonlettersdonotobeymathxx\ we do +get the $X$'s from the input \verb|$((($|: $((($ +\endgroup +This shows that \verb|mathastext| now does not modify in math mode the +non-letter \verb|(|. + +\MTversion{upright}\MTnonlettersobeymathxx +We defined in the preamble of the document a \verb|mathastext|-enhanced +math version (named \verb|upright|) having the Latin letters upright in +math mode. Let's switch to +it: \newline +\hbox to\linewidth{\hss\verb|\MTversion{upright}|\hss} + +With a font which is neither italic nor slanted, \verb|mathastext| automatically +inserts italic corrections for better positioning of the subscript: +\verb|$f_i^i$| gives +$f_i^i$. +After \verb|\MTnoicinmath| which turns off this feature\MTnoicinmath{}, the same +input gives $f_i^i$, which is different. +\footnote{last time I tried, this only worked with PDF\LaTeX{}, not with + \LuaLaTeX{} or \XeTeX{}.} + +Again with italic corrections on (\verb|\MTicinmath|)\MTicinmath{} +\verb|$f_{abc}^{def}$| gives $f_{abc}^{def}$, and here is another one: +$f^{f_{abc}^{def}}_u$. Without italic corrections\MTnoicinmath: $f_{abc}^{def}$, +and respectively $f^{f_{abc}^{def}}_u$. + +\MTicinmath + +\verb|mathastext| does not add these italic corrections inside arguments of +math alphabets, as this would prevent the formation of ligatures: +$\mathnormal{ff}$, $\mathrm{ff}$, $\mathit{ff}$, $\mathbf{ff}$, $\mathtt{ff}$ +(no ligature in teletype) and $\mathsf{ff}$.\footnote{\llap{\textcolor{magenta}{\bfseries Changed!\kern3em}}Prior to 1.3i, + italic corrections were added to the \string\mathnormal\ arguments.} + +\centerline{\begin{tabular}{ccccccc} +\testline{a!b}\\ +\testline{a?b}\\ +\testline{a,b}\\ +\testline{a;b}\\ +\testline{a:b}\\ +\testline{a:=b}\\ +\testline{a\vcentcolon= b}\\ +\testline{a\colon b}\\ +\testline{a.b}\\ +\testline{a-b}\\ +\testline{a+b}\\ +\testline{a=b}\\ +\testline{ab}\\ +\testline{}\\ +\testline{\mathopen{<} x,y\mathclose{>}}\\ +\testline{\left< x,y\right>}\\ +\testline{a/b}\\ +\testline{a\backslash b}\\ +\testline{a\setminus b}\\ +\testline{a|b}\\ +\testline{a\mid b}\\ +\testline{(a,b)}\\ +\testline{[a,b]}\\ +\testline{\{a,b\}} +\end{tabular}} + +\end{document} +% +%<*dtx> +^^Afi^^Aendgroup % end of big \iffalse block including generated files +% customization should be done in mathastext.tex, not here. +\documentclass[abstract]{scrdoc} +\ifnum\NoSourceCode=1 \OnlyDescription\fi +\makeatletter +\ifnum\Withdvipdfmx=1 +% peut-être je devrais plutôt passer dvipdfmx en option à la classe. + \@for\@tempa:=hyperref,bookmark,graphicx,color\do + {\PassOptionsToPackage{dvipdfmx}\@tempa} + % + \PassOptionsToPackage{dvipdfm}{geometry} + \PassOptionsToPackage{bookmarks=true}{hyperref} + \PassOptionsToPackage{dvipdfmx-outline-open}{hyperref} + \PassOptionsToPackage{dvipdfmx-outline-open}{bookmark} + % + \def\pgfsysdriver{pgfsys-dvipdfm.def} +\else + \PassOptionsToPackage{bookmarks=true}{hyperref} +\fi +\makeatother + +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{amsmath}\allowdisplaybreaks +\usepackage{lmodern} +\usepackage{enumitem} + +\DeclareSymbolFont{largesymbols}{OMX}{txex}{m}{n} +\SetSymbolFont{largesymbols}{bold}{OMX}{txex}{bx}{n} +\DeclareFontSubstitution{OMX}{txex}{m}{n} + +% in order to cancel the removal done by ltxdoc +% of comment characters inside verbatim blocks. +\makeatletter\let\check@percent\relax\makeatother + +\usepackage{color} +\definecolor{DarkMagenta}{RGB}{139,0,139} +\definecolor{joli}{RGB}{225,95,0} +\usepackage{xspace} +\usepackage{metalogo} +\usepackage{framed} + +\usepackage[hscale=0.66]{geometry} + +\usepackage[pdfencoding=pdfdoc]{hyperref} + +\hypersetup{linktoc=all,% +%hidelinks,% +colorlinks=true,% +breaklinks=true,% +linkcolor={blue},% +urlcolor={joli}, +pdfauthor={Jean-Fran\c cois Burnol},% +pdftitle={The mathastext package},% +pdfsubject={LaTeX, math fonts},% +pdfkeywords={LaTeX, Fonts},% +pdfstartview=FitH,% +pdfpagemode=UseOutlines,% +} + +\usepackage{bookmark} + +% ---- \centeredeline: OUR OWN LITTLE MACRO FOR CENTERING LINES (fait +% initialement pour la documentation de mes autres paquetages etoc et xint) + +% 7 mars 2013 +% This macro allows to conveniently center a line inside a paragraph and still +% use therein \verb or other commands changing catcodes. +% A proposito, the \LaTeX \centerline uses \hsize and not \linewidth ! +% (which in my humble opinion is bad) + +% \ignorespaces ajouté le 9 juin. Cela m'aurait évité des dizaines de % lorsque +% plusieurs \centeredline se suivent (car on reste en mode horizontal si on y +% est au début). + +\makeatletter +\newcommand*\centeredline {% + \ifhmode \\\relax + \def\centeredline@{\hss\egroup\hskip\z@skip\ignorespaces }% + \else + \def\centeredline@{\hss\egroup }% + \fi + \afterassignment\@centeredline + \let\next=} +\def\@centeredline + {\hbox to \linewidth \bgroup \hss \bgroup \aftergroup\centeredline@ } +\makeatother + +\DeclareRobustCommand\cs[1]% j'utilisais avant 189, j'ai essayé 23 + {{\ttfamily\hyphenchar\font=127 \char`\\#1}} +\DeclareRobustCommand\csb[1]% + {\hyperref[#1]{\ttfamily\hyphenchar\font=127 \char`\\#1}} + +\newcommand*\blueit[1]{\texorpdfstring{\blueitaux #1\relax}{#1}} +\def\blueitaux #1#2\relax{\hyperref[#2]{\ttfamily #1#2}} + +% 2 septembre 2013, 22:25 +% je réussis avec un minimum de modifs dans la source à convertir tous mes +% mots-clés bleus en hyperliens; les labels sont créés simplement en modifiant +% plus loin \@jfendshrtverb +\catcode`\§=13 +\makeatletter +\def§{\begingroup + \let\do\@makeother\dospecials + \@jfendshrtverb } +\def\@jfendshrtverb #1#2§{\hyperref[#2]{\ttfamily\hyphenchar\font=127 #1#2}\endgroup} +\makeatother + +\newcommand\mst{% +\texorpdfstring{{\color{joli}\ttfamily\bfseries mathastext}} +{mathastext}\xspace} + +\let\oldexists\exists\let\oldforall\forall + +\usepackage[italic,subdued,asterisk,defaultmathsizes,symbolmisc,symbolre, +LGRgreek]{mathastext} + +\Mathastext[italic] +\MTlettershape{\updefault} +\Mathastext[upright] + +\MTupgreek +\MTgreekfont{cmtt} +\MTDeclareVersion[n]{lmvtt}{T1}{lmvtt}{m}{n} + +\MTlettershape{\itdefault} + +\usepackage{newcent} +\Mathastext[newcent] +\MTseries{b} +\Mathastext[boldnewcent][bold] + +\MTseries{m} +\MTitgreek\MTupGreek +\MTgreekfont{txr} +\usepackage{times} +\Mathastext[times] +\MTlettershape{\updefault} +\MTseries{bx} +\Mathastext[timesbold][bold] + +\MTlettershape{\itdefault} +\MTseries{m} +\usepackage[scaled]{helvet} +\renewcommand\familydefault\sfdefault +\MTgreekfont{cmss} +\Mathastext[helvet] + +\usepackage{etoc} + +% - à partir de 1.3j: _très très_ peu satisfaisant mais pas envie d'y passer +% du temps. +% +% - je refais très vite pour 1.3q: \RLNote remplace \RightNote et est fait +% différemment, \CHANGED aussi a été refait. Finalement 1.3r utilise ttfamily. + +\def\RLNote #1#2{\leavevmode\strut\vadjust{\kern-\dp\strutbox + \hbox to\textwidth + {\vtop to \dp\strutbox{}% + \footnotesize\normalfont\ttfamily + \color{magenta}% + \llap{\smash{#1\kern10pt}}\kern\textwidth\rlap{\smash{\kern10pt(#2)}}% + }% + }% +} + +\def\RightNote {\RLNote {}} + +% modifié pour la doc de 1.3q. Bordel de Koma-Script. Il utilise des em. +% À droite je vais normaliser à 10pt pour que ça soit coordonné avec \RightNote. +% refait pour 1.3r +% ** À utiliser au tout début d'une footnote ** +\def\CHANGED #1{\leavevmode\kern-1em + {\ttfamily\color{magenta}\llap{changed:\kern10pt}% + \kern\textwidth\rlap{\kern10pt(#1)}\kern-\textwidth}% + \kern1em } + +% pour 1.3q +% attention que doc.sty n'utilise pas \@noligs +% or upquote ne patche que \@noligs +\usepackage{textcomp} +\begingroup\makeatletter + \catcode`'=\active + \catcode``=\active + \g@addto@macro\verbatim@nolig@list{\let'\textquotesingle\let`\textasciigrave} +\endgroup + +% KOMA-script est HORRIPILANT. +\def\rm {\normalfont} +\def\bf {\normalfont\bfseries} +\def\tt {\normalfont\ttfamily} +% mais bon, en fait je ne les utilise pas. + +\begin{document} +\MTversion{normal} +\renewcommand\familydefault\sfdefault +\pdfbookmark[1]{Title page}{TOP} + +\frenchspacing + +\begin{center} + {\normalfont\LARGE The \mst package}\\ +\textsc{\small Jean-François Burnol}\par + \footnotesize \ttfamily + jfbu (at) free (dot) fr\par + \let\thefootnote\empty + Package version: \MSTpkgversion\ (\MSTpkgdate)% + \footnote{Documentation generated from the + source file with \dtxtimestamp.}\par +\end{center} +\setcounter{footnote}{0} + + + \begin{small} + \noindent The \mst package changes the fonts which are used in math + mode for letters, digits and a few other punctuation and symbol signs + to replace them with the font as used for the document text. Thus, + the package makes it possible to use a quite arbitrary font without + worrying too much that it does not have specially designed + accompanying math fonts. Also, \mst provides a simple mechanism in + order to use more than one math-as-text font in the same + document.\baselineskip.9\baselineskip\par + \end{small} + +\medskip + +\begin{verbatim} + `mathastext' is a LaTeX package + + \usepackage{mathastext} + + The document will use in math mode the text font + as configured at package loading time, for these + characters: + + abcdefghijklmnopqrstuvwxyz + ABCDEFGHIJKLMNOPQRSTUVWXYZ + 0123456789 + !?,.:;+-=()[]/#$%&<>|{}\ + + The command \MTsetmathskips allows to set up extra + spacings around each given letter. + + Use multiple \Mathastext[name]'s to define in the + preamble various math versions using each a given + text font, to be later activated in the document + body via the command \MTversion{name}. + + With the subdued option, mathastext will be active + only inside such math versions distinct from the + normal and bold. + + Main options: italic, defaultmathsizes, subdued, + asterisk, LGRgreek. +\end{verbatim} + +\clearpage + +\etoctoclines +\renewcommand\etocaftertitlehook + {\hypersetup{hidelinks}% added 1.3 + \setlength{\columnseprule}{.4pt}% + \renewcommand{\columnseprulecolor}{\color{DarkMagenta}}% + } +\renewcommand\etocbelowtocskip{1ex} +\etocruledstyle{\color{DarkMagenta}\normalfont\large\bfseries\contentsname } +% pdfbookmark added 2013/12/11. Attention si je le mets dans ruled style +% il est exécuté deux fois et ça cause un problème. +% et le aftertitlehook est trop bas. +\pdfbookmark[1]{Table of contents}{MAINTOC} +\tableofcontents +{\color{DarkMagenta}\hrule}% +\vskip 5ex plus 2ex minus 1ex + + +\section{What \mst does} + +For changes see \autoref{sec:changelog}. + +\subsection{Examples} + +\mst's basic aim is to have the same font for text and mathematics. With +hundreds of free text fonts packaged for \LaTeX{} and only a handful of +math ones, chances are your favorite text font does not mix so well with +the available math ones; \mst may then help. Note that \mst was initially +developed for the traditional \TeX{} fonts and engines, and that compatibility +with Unicode engines and OpenType fonts is partial. + +Here is an example with +Latin Modern typewriter proportional: + +{\advance\leftskip.1\linewidth\advance\rightskip.1\linewidth + \MTversion{lmvtt} +Let $(X,Y)$ be two functions of a variable $a$. If they obey the differential +system $(VI_{\nu,n})$: + \begin{align*} + a\frac{d}{da} X &= \nu + X - (1 - X^2)\frac{2n a}{1 - a^2}\frac{aX+Y}{1+a XY} \\ +a\frac{d}{da} Y &= -(\nu+1) Y + + (1 - Y^2)\frac{2n a}{1 - a^2}\frac{X+aY}{1+a XY} + \end{align*} +then the quantity $q = a \frac{aX+Y}{X+aY}$ +satisfies as function of $b= a^2$ the $P_{VI}$ differential equation: +\begin{equation*} +\begin{split} + \frac{d^2 q}{db^2} = \frac12\left\{\frac1q+\frac1{q-1} + +\frac1{q-b}\right\}\left(\frac{dq}{db}\right)^2 - \left\{\frac1b+\frac1{b-1} + +\frac1{q-b}\right\}\frac{dq}{db}\\+\frac{q(q-1)(q-b)}{b^2(b-1)^2}\left\{\alpha+\frac{\beta + b}{q^2} + \frac{\gamma (b-1)}{(q-1)^2}+\frac{\delta + b(b-1)}{(q-b)^2}\right\} +\end{split} +\end{equation*} +with +parameters +$(\alpha,\beta,\gamma,\delta) = (\frac{(\nu+n)^2}2, +\frac{-(\nu+n+1)^2}2, \frac{n^2}2, \frac{1 - n^2}2)$.\par +} +Notice that the Latin (and Greek letters) are in upright shape. But perhaps we +insist on obeying the standardized habits: + + +{\advance\leftskip.1\linewidth\advance\rightskip.1\linewidth +\MTversion{times} +Let $(X,Y)$ be two functions of a variable $a$. If they obey the differential +system $(VI_{\nu,n})$: + \begin{align*} + a\frac{d}{da} X &= \nu + X - (1 - X^2)\frac{2n a}{1 - a^2}\frac{aX+Y}{1+a XY} \\ +a\frac{d}{da} Y &= -(\nu+1) Y + + (1 - Y^2)\frac{2n a}{1 - a^2}\frac{X+aY}{1+a XY} + \end{align*} +then the quantity $q = a \frac{aX+Y}{X+aY}$ +satisfies as function of $b= a^2$ the $P_{VI}$ differential equation: +\begin{equation*} +\begin{split} + \frac{d^2 q}{db^2} = \frac12\left\{\frac1q+\frac1{q-1} + +\frac1{q-b}\right\}\left(\frac{dq}{db}\right)^2 - \left\{\frac1b+\frac1{b-1} + +\frac1{q-b}\right\}\frac{dq}{db}\\+\frac{q(q-1)(q-b)}{b^2(b-1)^2}\left\{\alpha+\frac{\beta + b}{q^2} + \frac{\gamma (b-1)}{(q-1)^2}+\frac{\delta + b(b-1)}{(q-b)^2}\right\} +\end{split} +\end{equation*} +with +parameters +$(\alpha,\beta,\gamma,\delta) = (\frac{(\nu+n)^2}2, +\frac{-(\nu+n+1)^2}2, \frac{n^2}2, \frac{1 - n^2}2)$.\par +} + + This was typeset using the Times font (available in any \TeX{} + distribution). Let us now be a bit more original and have our mathematics + with italic letters from the sans serif font Helvetica, while the letters in + text use New Century Schoolbook. + + +{\advance\leftskip.1\linewidth\advance\rightskip.1\linewidth +\MTversion[newcent]{helvet} +Let $(X,Y)$ be two functions of a variable $a$. If they obey the differential +system $(VI_{\nu,n})$: + \begin{align*} + a\frac{d}{da} X &= \nu + X - (1 - X^2)\frac{2n a}{1 - a^2}\frac{aX+Y}{1+a XY} \\ +a\frac{d}{da} Y &= -(\nu+1) Y + + (1 - Y^2)\frac{2n a}{1 - a^2}\frac{X+aY}{1+a XY} + \end{align*} +then the quantity $q = a \frac{aX+Y}{X+aY}$ +satisfies as function of $b= a^2$ the $P_{VI}$ differential equation: +\begin{equation*} +\begin{split} + \frac{d^2 q}{db^2} = \frac12\left\{\frac1q+\frac1{q-1} + +\frac1{q-b}\right\}\left(\frac{dq}{db}\right)^2 - \left\{\frac1b+\frac1{b-1} + +\frac1{q-b}\right\}\frac{dq}{db}\\+\frac{q(q-1)(q-b)}{b^2(b-1)^2}\left\{\alpha+\frac{\beta + b}{q^2} + \frac{\gamma (b-1)}{(q-1)^2}+\frac{\delta + b(b-1)}{(q-b)^2}\right\} +\end{split} +\end{equation*} +with +parameters +$(\alpha,\beta,\gamma,\delta) = (\frac{(\nu+n)^2}2, +\frac{-(\nu+n+1)^2}2, \frac{n^2}2, \frac{1 - n^2}2)$.\par +} + +And after all that, we may wish to return to the default math typesetting (let's +shorten the extract here in case the reader makes an indigestion \dots): + +{\advance\leftskip.1\linewidth\advance\rightskip.1\linewidth +Let $(X,Y)$ be two functions of a variable $a$. If they obey the differential +system $(VI_{\nu,n})$: + \begin{align*} + a\frac{d}{da} X &= \nu + X - (1 - X^2)\frac{2n a}{1 - a^2}\frac{aX+Y}{1+a XY} \\ +a\frac{d}{da} Y &= -(\nu+1) Y + + (1 - Y^2)\frac{2n a}{1 - a^2}\frac{X+aY}{1+a XY} + \end{align*} +then the quantity $q = a \frac{aX+Y}{X+aY}$ +satisfies as function of $b= a^2$ the $P_{VI}$ differential equation with +parameters +$(\alpha,\beta,\gamma,\delta) = (\frac{(\nu+n)^2}2, +\frac{-(\nu+n+1)^2}2, \frac{n^2}2, \frac{1 - n^2}2)$.\par +} + + \vskip\baselineskip Notice that the Greek letters also changed + according to the \emph{math version}: \mst has indeed some (limited) + capabilities to this effect, with its §LGRgreek§ option. This + document uses the |LGR| encoded fonts |cmtt|, |cmss|, and |txr|, + which are part of standard \TeX{} + distributions.\footnote{The first two are available (with no need to + load explicitly any package in the document) via the combination + |cbfonts| (|cbgreek-complete|) \& |babel|, and the |LGR| encoded |txr| font + (again no package loading is necessary) is part of the files of the + |txfontsb| package.} + +% \href{http://mirrors.ctan.org/help/Catalogue/entries/cbgreek-complete.html}{cbfonts}, +% \href{http://mirrors.ctan.org/help/Catalogue/entries/txfontsb.html}{txfontsb}. + +\subsection{Overview} + +\subsubsection{Basic use} + +The initial ideology of \mst was to produce mathematical texts with +a very uniform look, not separating math from text as strongly as +is usually done. + +As soon as one tries out other fonts for text than the Computer Modern +ones one realizes how extremely ``thin'' are the default \TeX{} fonts +for mathematics: they definitely do not fit well visually with the +majority of text fonts. With \mst one can get one's (simple\dots{} or +not) mathematics typeset in a manner more compatible with the text, +without having to look for an especially designed font. + +Here is a minimal example of what may go into +the preamble: +\begin{verbatim} +\usepackage[T1]{fontenc} +\usepackage{times} +\usepackage[italic]{mathastext} +\end{verbatim} +The package records which font is set up for text, at the time it is +loaded,\footnote{alternatively it is possible to configure the text font after + loading \mst, and then the command \cs{Mathastext} will accomplish the + necessary changes to the font for letters, digits and a few extra ascii + symbols in math mode.} and +then arranges things in order for this text font to be used in math mode as +well. So, with the preamble as above +all letters, digits, and punctuation signs inside math mode will then be +typeset in Times.\footnote{let's do as if we did not know the excellent + |txfonts| package which employs Times for text and has a very complete + math support, including many additional mathematical glyphs in + comparison to the CM fonts.} The exact list of characters concerned by +\mst is a subset of the basic |ASCII| set: + + \begin{framed}\centering\MTversion{timesbold}% + \begingroup\color{joli}% + $abcdefghijklmnopqrstuvwxyz$\par + $ABCDEFGHIJKLMNOPQRSTUVWXYZ$\par + $0123456789$\par + \DeleteShortVerb{\|}% global! + ${!}\,{?}\,{*}\,{,}\,{.}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\, + {[}\,{]}\,{/}\,{\#}\,{\$}\,{\%}\,{\&}\,{<}\,{>}\,{|}\,{\{}\,{\}} + \textrm{ \color{black}\mdseries and }{\backslash}$% + \endgroup\par\MakeShortVerb{\|}% + \end{framed} + +As one can see, this is a very limited list! some possibilities are offered by +\mst for Greek letters and will be described later. + +The text characters {}'{} and {}-{} are not used, and the asterisk is +done optionally: +\begin{itemize} +\item the derivative sign ${}'$ is left to its default as the text font + glyph {}'{} is not, as a rule, a satisfying alternative.\footnote{|v1.2| adds + a customizable tiny space before ${}'$ to separate it from the previous + letter, this is really needed when using upright letters in math mode with + the CM derivative glyph.{\MTversion{upright}\sffamily\MTprimeskip{.5mu}% + Compare $f'$ with \MTprimeskip{0mu}$f'$.} } +\item for the minus sign \mst uses the endash character + \textendash, if available, and not the hyphen character -.% +% +\footnote{see the §unicodeminus§ option if using an OpenType font.} +% +\item the §asterisk§ option is mandatory for \mst to replace the binary math + operator $*$ (and the equivalent control sequence \cs{ast}) with a version + which uses the text asterisk * suitably lowered\footnote{the amount of + lowering can be customized.} (and with the correct spaces around it as + binary operator). The reason is that after this inputs such as |$R^*$| + or |$R^\ast$| raise errors and \emph{must} be written |$R^{*}$| or |$R^{\ast}$|. +\end{itemize} + +Nothing is changed to the ``large'' math symbols, except for +$\MToriginalprod$ and $\MToriginalsum$ in inline math which, like here: +$\prod\sum$, will be taken from the Symbol Font if option §symbolmisc§ +was used. + +The left and right delimiters are taken from +the text font only for the base size: any |\big|, |\bigl|, |\bigr|, +etc\dots reverts to the original math symbols. + + +\subsubsection{always load \mst last} + +The ``large'' math symbols are not modified in any way by \mst. Only loading +some math font packages such as |fourier|, |kpfonts|, |mathabx|, |mathdesign|, +|txfonts|, |newtxmath|, etc\dots{} will change them. Think of loading these +packages before \mst, else they might undo what \mst did. + +More generally any package (such as |amsmath|) dealing with math mode should be +loaded \emph{before} \mst. + +\subsubsection{sans in math} + +The following set-up often gives esthetically pleasing results: it is to +use the sans-serif member of the font family for math, and the serif for +text. +\begin{verbatim} +\renewcommand\familydefault\sfdefault +\usepackage{mathastext} +\renewcommand\familydefault\rmdefault +\begin{document} +\end{verbatim} + +\subsubsection{using \mst with \texttt{beamer}}\label{ssec:beamer} + +%\noindent\llap{\textcolor{green}{\bfseries 2015/02/26}\hspace{1em}} + +Starting +with release |3.34| of |beamer|, \mst is recognized as a ``math font package''. + +\emph{Only with \emph{{\bfseries earlier} |beamer| versions} is it necessary to issue} +\centeredline{|\usefonttheme{professionalfonts}|} +\emph{in the preamble.} Example: + +\begin{verbatim} +\documentclass{beamer} +%\usefonttheme{professionalfonts}% obsolete for mathastext since beamer 3.34 +\usepackage{newcent} +\usepackage[scaled=.9]{helvet} +\renewcommand{\familydefault}{\rmdefault} +\usepackage[defaultmathsizes,symbolgreek]{mathastext} +\renewcommand{\familydefault}{\sfdefault} +\begin{document} +\begin{frame} + This is some text and next comes some math: $E=mc^2$ + \[ + E=mc^2=a^n+b^n-c^n=\alpha\beta\gamma + \] + \begin{align} + E&=mc^2\\ + E&=h\nu + \end{align} + And again some text. +\end{frame} +\end{document} +\end{verbatim} + +\subsubsection{option \blueit{LGRgreek}} + + There is the issue of Greek letters. Sometimes the text font has + Greek glyphs, in |LGR| encoding (this will be mentioned in the + documentation of the font package). Then option §LGRgreek§ tells + \mst to pick up these Greek letters. And it is possible to specify + whether the Greek letters should be upright, or + ``italic''.% +% +\footnote{the default CM and its replacement Latin Modern for european + languages are (transparently to the user) extended with |LGR| + encoded fonts from the |cbfonts| (|cbgreek-complete|) + package.} + +It is naturally possible to leave the + responsability to set up Greek letters to some other packages + loaded previously to \mst. And even if \mst has been loaded with one of its +Greek related options the command §\MTstandardgreek§ will locally cancel its +customization of Greek letters. See also §\MTcustomgreek§. + + % \href{http://mirrors.ctan.org/help/Catalogue/entries/cbgreek-complete.html}{cbfonts} + +\subsubsection{avoid \texorpdfstring{\texttt{OT1}}{OT1} encoding} + + We specified in our minimal working example a |T1| encoding (|LY1| would + have been ok, too) because the default |OT1| does not have the + {\color{joli}\DeleteShortVerb{\|} + $\mathord{<}\,\mathord{>}\,\mathord{|}$\,\{\,\}} and + {\color{joli}$\backslash$\MakeShortVerb{\|}} glyphs. If + \mst detects |OT1| as the default encoding it will leave these characters to + their defaults from the math fonts.\footnote{the §subdued§ option, described next, + acts a bit otherwise, it forces, contrarily to its usual low-key character, + the replacement of |OT1| by |T1| for the fonts ultimately used with letters + and digits in math mode.} +\begin{framed} + If \mst detects the obsolete |OT1| encoding it does not do anything with + \DeleteShortVerb{\|}<, >, |, \{, and \} which (except for monospace fonts) + are not available in that encoding.\MakeShortVerb{\|} + To fully benefit from \mst it is + recommended to use some other encoding having these glyphs such as |T1| or + |LY1|. +\end{framed} + +\subsection{Main options} + + \subsubsection{The \blueit{italic} option} + +In the initial version |1.0|, the Latin letters in +mathematical mode assumed the exact same shape as in +text mode, and this meant, generally speaking, that +they would turn up upright. Doing this gives a very +uniform look to the document, so that one has to make +an effort and read it with attention, and this was +one of the design goals of \mst. + +Nevertheless, soon after I posted the initial version +of the package to CTAN, I was overwhelmed by +numerous\footnote{this means ``more then one.''} +questions\footnote{I thank in particular +\textsc{Tariq~Perwez} and \textsc{Kevin~Klement} for +their kind remarks (chronological order).} on how to +have the letters be in italic shape. + +The default is still, as in version |1.0|, for everything to be in +upright shape, but it suffices to pass to the package the option +§italic§\RightNote{1.1} to have the Latin letters in math mode in italic +shape.\footnote{more precisely stated, the value of \cs{itdefault} +is used.} There is also an option §frenchmath§ to make the +uppercase letters nevertheless upright, because this is the way of +traditional French mathematical typography.\footnote{more precisely +stated, the value of \cs{shapedefault} is used.} + + +\subsubsection{The \blueit{defaultmathsizes} option} + +The default sizes give for subscripts of subscripts barely legible glyphs +(author's opinion!). So \mst makes more reasonable choices. It also +redefines \cs{Huge} and defines a \cs{HUGE} size, copied from +the |moresize| package. To cancel all of this use option +§defaultmathsizes§. + +\subsubsection{The \blueit{subdued} option}\label{sec:subdued} + +This option was introduced in |v1.15|.\RightNote{1.15} It provides a manner to +switch on the \mst-\emph{ification} only for limited portions of +the document, with the help of the mechanism of math versions. Without the +§subdued§ option, the \emph{mathastextification} applies by default +to the whole of the document (and one may also define additional +math versions in the preamble); with the §subdued§ option the +\emph{mathastextification} is done only in \emph{math versions} distinct from +the standard and bold ones. + +Despite some limitations I will now partially describe, the §subdued§ option +has its utility, as I think is illustrated enough by the examples given at the +start of this document and it works reasonably well. + +\begin{framed} + \mst was not written initially in order to allow its action to + be completely canceled. It does not store (all) mathcodes nor + does it set them (all) when changing math versions; only that would + allow a perfect subdued mode (and \LaTeX\ is rather obstinate in + making that tricky or at least uneasy if sticking to its + official interface to math mode, as it is almost entirely + preamble only). + + Releases |1.3t| and |1.3u| do this kind of things to maintain + usability across multiple \mst-ified math versions of characters + which are obviously font encoding dependent such as the minus + sign as en-dash (or unicode minus), the dotless i, the |\hbar|, + the text accents. + + But this should be extended to all \mst-ified characters which + basically would amount to an extensive rewrite of large legacy + portions of the code. Currently the support for the |subdued| + mode and to multiple math versions amounts to some kind of a + kludge, added to an initial design which handled a single unique + text font. +\end{framed} + +To get the displayed math +(almost) as if \mst had not been loaded, one must also +use the option §defaultmathsizes§. But this does not quite suffice, +as, for example, the colon, the dot, and the minus sign belong +in the default \LaTeX{} math mode set-up to three distinct fonts +whereas \mst will pick (even subdued) the three of them in the same +font,% +\footnote{\CHANGED{1.3t}The minus sign is now perfectly subdued, +because its original mathcode is stored and restored; this was only +way to handle the case with Unicode engines +where the math operator font is in a classic +\TeX\ encoding, but the minus sign is configured by \mst to use a Unicode +en-dash or minus character in non-subdued math versions.} +% +and although it will make a reasonable choice of this font, +this is not an exact re-installement of the previously prevailing situation. And +then other packages could have done arbitrary things regarding character +mathcodes, so to +be on the safe side one needs the §basic§ option which limits the +mathastextification to letters and digits.% +% +\footnote{\CHANGED{1.3d}The §subdued§ mode does extinguish +in the normal and bold math versions the action of options §selfGreek§, +§eulergreek§, and §symbolgreek§ (previously only §LGRgreek§ was +subdue-able).} +\footnote{\CHANGED{1.3t}The \texttt{\string\imath} and +\texttt{\string\jmath} now obey the subdued regime.} +\footnote{\CHANGED{1.3u}Also \texttt{\string\hbar} +and the math accents (see §mathaccents§ option) obey the subdued regime.} +% +Even then, in some circumstances, this +may not suffice: for example the \emph{euler} package puts +the digits in the same font as the Latin letters in math mode, but +the subdued \mst will pick them up in the same font as used for +operator names, which for example in the case of the \emph{euler} package, is +the main document font. + + + + +\subsection{Math versions}\label{sec:mathversions} + +\LaTeX{} has the concept of \emph{math versions}, but most font packages +do not define any such version beyond the default normal and bold (that +they possibly customize to use such or such math font). The package +|unicode-math| for unicode engines fruitfully uses this concept. \mst +uses math versions in order to allow the math mode fonts (for letters, +digits, punctuation and a few other ascii symbols) used in the different +parts of the document to be kept in sync with the text fonts. However +the other math symbols (sums, products, integrals, logical signs, +etc\dots) will be the same throughout the document as it is not in \mst +power to modify them. There are some possibilities to use different sets +of fonts for the Greek letters, though. + +The present document illustrated the use of various fonts, here is its +preamble (slightly stripped-down): +\begin{center} + \begin{minipage}{.8\linewidth} +\begin{verbatim} +\usepackage{lmodern} +\usepackage[T1]{fontenc} +\usepackage[subdued,italic,defaultmathsizes]{mathastext} +\MTDeclareVersion[n]{lmvtt}{T1}{lmvtt}{m}{n} +\usepackage{newcent} +\Mathastext[newcent] +\usepackage{times} +\Mathastext[times] +\usepackage[scaled]{helvet} +\renewcommand\familydefault\sfdefault +\Mathastext[helvet] +\begin{document}\MTversion{normal} +\end{verbatim} + \end{minipage} +\end{center} +Let us examine this code: it uses once the command §\MTDeclareVersion§ +and three times the command §\Mathastext§, thus defining four +|math versions|\footnote{|math versions| are discussed in the document +|fntguide.pdf| from your \TeX{} distribution.}: |lmvtt|, |newcent|, +|times|, and |helvet|. The names can be taken arbitrarily (they only +need to be suitable arguments to the \LaTeX{} \cs{DeclareMathVersion} +command which is invoked internally). Two +additional math versions preexist: the |normal| and |bold|, which, +because there was the §subdued§ option, were left untouched by \mst. + +Once these |math versions| are defined, §\MTversion§|{name_of_version}|, or +equivalently §\Mathastextversion§|{name_of_version}|, enacts the font switches +in the body of the document. As is usual with \LaTeX{} one can limit the scope +to the inside of a group, or also switch back to the main set-up through issuing +\cs{Mathastextversion\{normal\}}. + +When \cs{Mathastext} is used in the preamble, it records the current font +defaults and (except for the |normal| and |bold| versions under the §subdued§ +regime) sets up the math font to be used in that version to be the text font +as found in \cs{familydefault}. But it is still possible for a \mst-declared +math version to have distinct fonts for text and math: +\begin{enumerate} +\item in the body of the \TeX{} source, an optional argument (the name + of a \mst-declared math version) to \cs{MTversion} is allowed, and + for example we used in the source of this document + \cs{MTversion[newcent]\{helvet\}} meaning ``New Century Schoolbook + for the text and Helvetica for the math.'' +\item there are preamble-only commands \cs{MTencoding}, \cs{MTfamily}, + \cs{MTseries}, \cs{MTshape}, \cs{MTlettershape} which tell \mst what + to do (for math \emph{only}) in each math version declared + \emph{afterwards}, independently of the text fonts. +\end{enumerate} + +The native \LaTeX{} command +\cs{mathversion}\marg{version\_name} would change only the fonts used in math +mode. It is important to use rather the package command +\csb{MTversion} (or one of its synonyms \cs{mathastextversion}, +\cs{Mathastextversion}, \cs{MTVersion}), with its mandatory argument +\marg{version\_name}, as it does additional actions: +\begin{itemize} +\item it sets the font for math mode (letters, math operator names, digits, + punctuations, some other symbols) according to the version name given as + mandatory argument, +\item it resets the text font of the document and the + |\(family,rm,sf,...)default|s to their values as registered at the time of + definition of the version. \emph{Use the starred variant in case this is not + desired.} It is possible to also specify within brackets an extra optional + version name, and the text font will be set according to it. +\end{itemize} +For all math versions if not using the §subdued§ option, or only +for the non-\emph{normal} and non-\emph{bold} math versions if +using the §subdued§ option, \cs{MTversion} does further additional tasks: +\begin{itemize} +\item it resets\RLNote{NEW FEATURE!}{1.3u} the §\hbar§, \cs{imath} + (see §\inodot§), \cs{jmath}, math accents (see option + §mathaccents§) and minus sign as en dash according to the used + font encoding for the \mst-ified text font, +\item (see sections \ref{sec:mathskips} and \ref{sec:ic}) it re-issues the + command §\MTmathactiveletters§ to let a to z, A to Z, be mathematically + active in order to automatically insert the skips as defined by the user + with §\MTsetmathskips§, and the italic corrections (if the font is not + italic or slanted), +\item (see section \ref{sec:extraskips}) it resets the extra spaces after the + symbols $\exists$, $\forall$ and before the derivative ${}'$ to the values as + decided by the user in the preamble on a \emph{per version} basis, +\item (see section \ref{sec:mathxx}) it re-issues the commands + §\MTmathoperatorsobeymathxx§ and §\MTeasynonlettersobeymathxx§ to let + the math operator names and (`easy') non letter characters obey the math + alphabets, +\item in case of option §asterisk§, it re-issues §\MTactiveasterisk§, +\item it does the additional set-up for Greek letters in case of the package + received one of the Greek related options. +\end{itemize} +The scope is limited to the current \LaTeX{} +environment or group. +% When switching to the \emph{normal} or \emph{bold} math +% versions under option §subdued§ most of the above is canceled. + + +It is sometimes not compatible with \mst to load a font package after it, as the +font package may contain instructions which will modify the math set-up. This +may be a bit hidden to the user: for example the |epigrafica| package loads +|pxfonts|. Hence it will interfere with \mst if it is loaded after +it.\footnote{may typically give a `too many math alphabets' error message.} But +one can use instead |\renewcommand{\rmdefault}{epigrafica}|,\footnote{sometimes + one needs to look in the |.sty| file of the font package to figure out the + font name (it is rarely as |epigrafica|, the same as the package name), and, + if one does not know the arcanes of finding |.fd| files in one's \TeX{} + distribution, one should look at the log file of a test document to see if for + example |T1| is available for that font; for |epigrafica| it is not, only + |OT1| and |LGR| are possible.} followed with \cs{Mathastext}, or also +|\MTfamily{epigrafica}\Mathastext| which will only change the font in math. + +To use |epigrafica| for Greek in math mode one can use the +package option §LGRgreek§ and the command +|\MTgreekfont{epigrafica}\Mathastext|. Or +\cs{usepackage}|{epigrafica}| followed with +|\usepackage[LGRgreek]{mathastext}|. + +\subsection{Extra spaces around letters} +\label{sec:mathskips} + +This is a new feature added with release |1.3|: the command §\MTsetmathskips§ +allows the user to set up some spaces (more precisely, `mu glue'; but stretch +and shrink are discarded) to be +automatically inserted around the letters in math mode. Some (very) unrealistic +uses: +\begin{verbatim} +% this may be anywhere in the document (also within a math group): +\MTsetmathskips{x}{20.33mu}{15.66mu}% 20.33mu before all x's and 15.66mu after. +\MTsetmathskips{y}{\thickmuskip}{\thickmuskip}% +\MTsetmathskips{z}{10mu}{5mu}% stretch and shrink are anyhow without effect. +\MTsetmathskips{A}{\muexpr \thickmuskip*2}{\muexpr \medmuskip-\thinmuskip/2}% +\end{verbatim} +Here is what |$wxtytz^{wxtytz}=BAC^{BAC}$| then gives using the Times font: +\begingroup +\MTsetmathskips{x}{20.33mu}{15.66mu}% +\MTsetmathskips{y}{\thickmuskip}{\thickmuskip}% +\MTsetmathskips{z}{10mu}{5mu}% +\MTsetmathskips{A}{\muexpr \thickmuskip*2}{\muexpr \medmuskip-\thinmuskip/2}% +\MTversion{times}% +$wxtytz^{wxtytz}=BAC^{BAC}$.\endgroup{} Any \TeX{} group or \LaTeX{} environment +limits as usual the scope of this command. Furthermore the command +§\MTunsetmathskips§ cancels previous use of \cs{MTsetmathskips} for a given +letter. + +The implementation relies on the `mathematical activation' of letters, which is +done by default by the package since release |1.2b|. Should this cause +compatibility problems, the command §\MTmathstandardletters§ cancels it +entirely. To reactivate it, there is §\MTmathactiveletters§. Note that +\cs{MTmathactiveletters} is done automatically by \mst when loaded, and also +each time the package enhanced math-version-switch command §\MTversion§ is used, +except for the normal and bold math versions under the §subdued§ option. + +% Earlier this `mathematical activation' of letters had been used by the package +% only to add automatically italic corrections, as described in the next +% section. + +\begin{framed} + The extra skips are set at natural width; they do not contribute to the + overall stretchability or shrinkability of the math formula and do not + create break points. + + \textcolor{magenta}{\bfseries Changed with |1.3i|}: they are \emph{not} + applied within the scope of math alphabet commands. +\end{framed} + +\subsection{Italic corrections} +\label{sec:ic} + +{\small Note: this is somewhat technical discussion which may well be skipped in + its entirety on first reading.\par} + +\begingroup +\fboxsep0pt\fboxrule.1pt + +With the §italic§ option the letters in math will be generally in italic shape +(and, normally, upright in operator names). + +For the built-in placement routines of \TeX{} in math mode to work as well as +they usually do, the characters from the math italic font obviously should have +their bounding boxes wide enough for the glyphs not to collide with other +symbols. A letter from a text italic font such as \emph{f} +extends way out of its declared bounding box; let us +compare the bounding boxes\footnote{let's be honest, we are lying here about + what exactly the first of these is bounding; this is explained later!} for the +letter $f$ in the math italic font to the one from the text italic font: +\fbox{$f$} vs. {\itshape\fbox{f}}. + +This could make us think that attempting to use in math a text italic font will +lead to disaster. Well, surprisingly the situation is not that bad. Sure +|$f(x)$| is wider with the standard math italic \fbox{$f(x)$} +(\setbox0=\hbox{$f(x)$}\texttt{\the\wd0}) than it is with the text italic font +used in math:\footnote{we used simply \texttt{\$\string\mathit\{f(x)\}\$}.} +\fbox{$\mathit{f(x)}$} (\setbox0=\hbox{$\mathit{f(x)}$}\texttt{\the\wd0}) but we +should be surprised that our text italic {\itshape f} did not end up even closer +to the opening parenthesis. Why is it so? + +The explanation is that \TeX{} uses in such a situation the \emph{italic + correction} for the letter {\itshape f}. The italic correction also exists and +is used for the math italic font, it was inserted in |$f$| without us having to +ask anything. Its value is \texttt{1.17865pt} for the math italic $f$ and +\texttt{1.8919pt} for the text italic \emph{f}.\footnote{these values are for + the Latin Modern fonts of course.} With the italic corrections included our +bounding boxes are indeed more alike: \fbox{\usefont{OML}{lmm}{m}{it}f\/} vs +\fbox{\itshape f\/}. + +Without the italic corrections\footnote{here we give correctly the bounding box + for the math italic $f$... without its italic correction!} it is +\fbox{\usefont{OML}{lmm}{m}{it}f} +vs \fbox{\itshape f}. I said that |$f$| included the italic correction +automatically, +but if we tell \TeX{} to use the text italic in math, and typeset the alphabet, +we obtain something exactly identical to typing the letters in text, hence +without any italic +correction:\par +{\leftskip2cm\rightskip5cm% + \noindent{\itshape abcdefghijklmnopqrstuvwxyz}\hfill\rlap{\texttt{text italic + in text}}\break $\mathit{abcdefghijklmnopqrstuvwxyz}$\hfill +\rlap{\texttt{text italic in math}}\break +$abcdefghijklmnopqrstuvwxyz$\hfill +\rlap{\texttt{math italic in math}}\break + {\usefont{OML}{cmm}{m}{it}abcdefghijklmnopqrstuvwxyz}\hfill +\rlap{\texttt{math italic in text}}\par} +Where are our italic corrections gone? the last line +was done with \cs{usefont\{OML\}\{lmm\}\{m\}\{it\}} and confirms that italic +corrections have been used for the math italic in math. + +Turning to the \TeX book (and its Appendix G) we learn that in such +circumstances, for the italic corrections to be put in from the font, one of its +parameters, the interword space (aka \cs{fontdimen2}), should +be zero. It is indeed zero for the math italic font, not for the text italic. + +It is possible to make \TeX{} believe it is. Doing so, we obtain in math mode +with the text italic:\par +{\leftskip2cm\rightskip5cm% +\noindent{\mathastextversion{italic}% +$\xdef\mstrestorefontdimen{\fontdimen2\textfont\symmtletterfont= +\the\fontdimen2\textfont\symmtletterfont}% +\fontdimen2\textfont\symmtletterfont=0pt% + abcdefghijklmnopqrstuvwxyz$}\hfill\rlap{\texttt{text italic in math}}\break + $abcdefghijklmnopqrstuvwxyz$\hfill\rlap{\texttt{math italic in math}}\par} + + + We saw that the italic correction was taken into acount automatically + (independently of the value of the interword space font parameter) in + expressions such as |$f(x)$|. Another clever thing done by \TeX{} is to use it + for the placement of superscripts; the next examples systematically + use the text italic in math. We see that + {\mathastextversion{italic}$\mstrestorefontdimen f^j$} is very different + from $\hbox{\itshape f}^j$... where the latter was coded with +|$\hbox{\itshape f}^j$|. The inputs |$\mathit{\hbox{\itshape f\/}^j}$| and +|$\mathit{f^j}$| give almost identical results: \fbox{$\mathit{\hbox{\itshape + f\/}^j}$} vs. + \fbox{$\mathit{f^j}$}. Close examination reveals + that the horizontal spacing is exactly identical, however the exponent in the + second case is a bit lower. Anyway, the point is that in the second case the + italic correction for $\mathit f$ was indeed used. + + Subscripts are another matter: they do \emph{not} take into + account the italic correction. For example |$\mathit{f_i}$| + gives the same horizontal positions as + |$\mathit{\hbox{\itshape f}_i}$|: $\mathit{f_i}$ vs. + $\mathit{\hbox{\itshape f}_i}$. Printing them one on another + gives \rlap{$\mathit{f_i}$}$\mathit{\hbox{\itshape f}_i}$ and + reveals (use the zoom of your viewer!) that only the vertical + placement was affected, not the horizontal placement. + +We learn in Appendix G of the \TeX book that the italic correction is used for +the horizontal shift of the superscript with respect to the position of +the subscript: $\mathit{f_i^j}$, or, +going back now to the standard math italics $f_i^j$. In the next paragraphs +we use $f_i^i$ for more accurate comparison of the positioning of the sub- and superscript. + +If we try something like this: |${f\/}_i^i$| we obtain ${f\/}_i^i$. Our +overlapping game with |\rlap{$f_i^i$}${f\/}_i^i$| gives +\rlap{$f_i^i$}${f\/}_i^i$. We discover that the effect of the explicit italic +correction has mainly been to translate the subscript horizontally to be +positioned exactly below the superscript!\footnote{there are also some tiny + vertical displacements of the sub- and superscripts.} We most probably do +\emph{not} want this to happen for our indices and exponents in math mode. So +perhaps we can rejoice in how astute \TeX{} has been in judiciously using the +italic correction data, and there seems to be no need into fiddling with this +algorithm which seems to work well even when applied to a text italic font. Actually we may even be of the opinion that the text italic +version $\mathit{f_i^i}$ is a bit better-looking than the +true math italic $f_i^i$ . . . + + +But wait... \mst was initially developed to easily use in math mode the document +text font not in its italic variant, but as is, so, usually, upright. And +upright \TeX{} fonts may also have italic correction data! And what I just said +about the shift of the superscript with respect to the subscript apply equally +well to such a font, if \TeX{} has been told to use it. Let's try Latin Modern +Upright for letters in math: |$f_i^i$| now gives\footnote{we just use + \texttt{\$\string\mathrm\{f\_i\^{}i\}\$}.} $\mathrm{f_i^i}$. We see the italic +correction in action for the positioning of the superscript! Compare with +|$\mathrm{\hbox{f}_i^i}$|: $\mathrm{\hbox{f}_i^i}$. Overlapping with +|\rlap{$\mathrm{f_i^i}$}$\mathrm{\hbox{f}_i^i}$| gives +\rlap{$\mathrm{f_i^i}$}$\mathrm{\hbox{f}_i^i}$ and shows that the upright +$\mathrm{f}$ has an italic correction which was used to shift the superscript to +the right (and it is now in a slightly lower position). Let's now do +|$\mathrm{{f\/}_i^i}$|: this gives $\mathrm{{f\/}_i^i}$ and the subscript is +shifted to the right, and is now on the same vertical axis as the superscript. +There are also some slight vertical displacements, +|\rlap{$\mathrm{f_i^i}$}$\mathrm{{f\/}_i^i}$| gives +\rlap{$\mathrm{f_i^i}$}$\mathrm{{f\/}_i^i}$. + +People will tell me crazy, but if we decide for using upright fonts in math, +wouldn't it be satisfying to have the subscript and superscript positioned +on the same vertical axis? the letter has no slant, why should the indices +display one? + +We end up in this strange situation that it is attractive to systematically +incorporate the italic corrections after the upright Latin letters in math! But +we don't want to do this inside the arguments to math alphabets as this would +make impossible the formation of ligatures (the standard |$\mathrm{ff}$|, +|$\mathit{ff}$|, |$\mathbf{ff}$|, |$\mathsf{ff}$| all give ligatures +$\mathrm{ff}$, $\mathit{ff}$, $\mathbf{ff}$, and $\mathsf{ff}$ and we would like +to preserve this behavior). +% http://tex.stackexchange.com/questions/35298/error-with-hyperref-tabular-footnotes-in-tabular +% pas le temps aujourd'hui de regarder plus, j'ai déjà rencontré ce problème, +% j'avais peut-être autre chose. Voir aussi +% http://tex.stackexchange.com/questions/6090/clickable-table-footnote + +\makeatletter +\begin{framed}\kern-.75\baselineskip + \begin{framed} + Starting with version |v1.2b|, \mst adds the italic correction automatically + after each letter of the Latin alphabet in math mode, \emph{except} when + these letters are italic or slanted.\footnotemark\par + \global\let\saved@Href@A\Hy@footnote@currentHref + These + italic corrections are canceled inside the arguments to the math alphabet + commands, to allow the formation of ligatures as + is expected in the standard default \TeX{} font set-up in math.% +\footnotemark + \global\let\saved@Href@B\Hy@footnote@currentHref + \end{framed}\vskip-.75\baselineskip +\end{framed} +\addtocounter{footnote}{-1}% +\let\Hy@footnote@currentHref\saved@Href@A +% +\footnotetext{the situation is rather ironical! by the way, the warnings in + section \ref{sec:mathxx} with \texttt{\$x\^{}?\$} or similar are less of an + issue here, because the letter is only \emph{followed} by \texttt{\char92/} + and anyhow the whole is put by \mst within group braces, so no surprises + with \texttt{\$x\^{}y\$} or \texttt{\$\char92mathbin x\$}. Nevertheless it + is still true that (in math mode only) the letters |a-z|, |A-Z|, expand to + composite objects, something which could surprise other packages. The + command \csb{MTmathstandardletters} cancels this mechanism.} +% +\addtocounter{footnote}{1}% +\let\Hy@footnote@currentHref\saved@Href@B +% +\footnotetext{\CHANGED{1.3i}Formerly, italic corrections were added to the + \cs{mathnormal} arguments.} + +\makeatother + +The feature-implementing commands §\MTicinmath§, §\MTnoicinmath§, +§\MTicalsoinmathxx§ are described in section \ref{sec:cmds}. +\endgroup + +\textbf{\hbox{Note:}} \emph{from brief testing on 2012/12/28, \XeTeX{} seems not + to obey in math mode italic corrections for OpenType fonts. Hence the \TeX{} + placement algorithms for math mode described in this section do not work well + when an OpenType (text) font is used for the letters in math mode, and the + document is compiled with the \XeTeX{} engine. On the other hand \LuaLaTeX{} + seems to implement the italic corrections when using OpenType fonts, but only + with italic fonts (as far as I could tell). Try the following (which will use + the OpenType Latin Modern font) on a recent \TeX{} + installation and compare the output of both engines:}\par +\kern-.5\baselineskip +\indent\vbox{\begin{verbatim} +\documentclass{article} +\usepackage{fontspec} +\begin{document} +\Huge +$\mathit{f_i^i}$\par $\mathrm{f_i^i}$ +\end{document}\end{verbatim} +\kern-.75\baselineskip}\\%\end{verbatim} FIX DU FONT-LOCKING DE AUCTEX (11.89.6) +\emph{Comment out the} |fontspec| \emph{line and use pdf\LaTeX{}. All + three outputs are different on my \TeX{} installation. \XeTeX{} does not have + the italic corrections. \LuaLaTeX{} does, but only for the italic font. + pdf\LaTeX{} has them for both the italic and the upright font.% +\footnotemark } + +\footnotetext {2016/11/04: the situation hasn't changed a iota since, +at least on current TL2016.} + +% For more see +% \url{http://tex.stackexchange.com/a/337076} which explores also the differences +% between the two Unicode engines regarding italic corrections in pure text mode.} + +\subsection{Extra glue after \texorpdfstring{\cs{exists}}{\textbackslash +exists}, \texorpdfstring{\cs{forall}}{\textbackslash forall}, and before the prime glyph} +\label{sec:extraskips} + +\begingroup\MTversion{upright}\renewcommand\familydefault\sfdefault +\makeatletter % c'est parce que sinon ils sont pris dans Symbol +\let\mst@stdexists\oldexists +\let\mst@stdforall\oldforall +\makeatother + +\csb{MTforallskip}, \csb{MTexistsskip}, and \csb{MTprimeskip} are three +commands with each a mandatory argument like for example +|3mu plus 1mu minus 1mu| or just |2.5mu|. They are especially useful +when using an +upright font in math mode. {The |mu| is a unit length used in + math mode (`math unit', 1/18th of the `quad' value of the symbol font + in the current style). Its value is relative to the current math + style. Its use is \textcolor{DarkMagenta}{mandatory} in the commands + described here.} +\begin{itemize} +\item compare $\forall B$ with\MTforallskip{2mu} $\forall B$, typeset after +|\MTforallskip{2mu}|, +\item compare $\exists N$ with\MTexistsskip{2mu} $\exists N$, typeset after +|\MTexistsskip{2mu}|, +\item and finally compare $f'$ with\MTprimeskip{2mu} $f'$, typeset after +|\MTprimeskip{2mu}|. +\end{itemize} + +These three commands may be used throughout the document, or also in the +preamble, in which case the declared math versions will record the then current +values of the skips. \mst applies the following (small) default skips: +|0.6667mu| for the skip after $\forall$, |1mu| for the skip after $\exists$, and +|0.5mu| for the skip before the prime. The examples above become +\MTforallskip{.6667mu}\MTexistsskip{1mu}\MTprimeskip{.5mu}$\forall B$, $\exists +N$ and $f'$.\footnote{the derivative glyph from the |txfonts| math symbols + adapts itself better to an upright letter, no skip seems to be needed then.} + +With the §italic§ option the defaults are set to zero. +\MTversion{italic}\renewcommand\familydefault\sfdefault Indeed +$\forall B$, $\exists N$ and $f'$ look fine without additional skips. If the +document decides then to declare in the preamble a math version with an upright +font it is thus recommended to use the commands in the preamble before the +\cs{Mathastext}\oarg{version\_name} (or \cs{MTDeclareVersion}) command defining +the version. They will be remembered when this math version is entered in the +document. The commands may also be used directly in the document body. + +Under the §subdued§ option, the \emph{normal} math version (at the start of +the document body, or after |\MTversion{normal}|) and the \emph{bold} math +version (either at the start of the document body after \cs{boldmath}, or after +|\MTversion{bold}|) do not have any extra skip inserted (even one of zero +width) after $\oldforall$, $ \oldexists$, or before the ${}'$.% +% +\footnote{\CHANGED{1.3j}Formerly, skips of zero widths were inserted.} + +\endgroup + + +\subsection{Extended scope of the math alphabets commands} +\label{sec:mathxx} + +\begingroup +\MTversion{italic}\renewcommand\familydefault\sfdefault +% il faudra peut-être que j'annule cette façon qu'à mathastext de tripatouiller +% \familydefault... +\makeatletter\let\mst@doasterisk\relax\makeatother + +Ever since the initial version of the package, some characters usually +unaffected by the math alphabet commands \cs{mathbf}, \cs{mathtt}, +\cs{mathsf}\dots{} are declared to be of `variable family type', in order for +them to obey these commands: for example the hash sign $\#$ gives $\mathbf{\#}$ +if input as |$\mathbf{\#}$| (\mst, especially in its beginnings, wanted as many +characters as possible to be picked up from the text font and to behave +similarly to letters and digits). + +So it was especially frustrating that mathematical characters such as $+$, or +$<$, or $]$ could not be declared of `variable family' (in addition to being +picked up in the text font) as this would, for reasons of the inner workings of +\TeX{}, not be compatible with the automatically inserted spaces around them. + +A revolutionary\RightNote{1.2} ;-) novelty is introduced with version |1.2| of the package: +\begin{enumerate} +\item the pre-declared or user-declared (using the |amsmath| + \cs{DeclareMathOperator} or equivalent) operator names obey the math + alphabet commands,\footnote{contrarily to the next feature, this one is not + likely to create incompatibilities with other packages, so it is + activated by default.} +\item and, \emph{optionally}, all non alphabetical + characters\footnote{of course some of them are input preceded by a + backslash, and the backslash itself is input as \cs{backslash}.} treated by + \mst, \emph{i.e.}, if not disabled by options, + ${!}\,{?}\,{,}\,{:}\,{;}\,{+}\,{-}\,{=}\,{(}\,{)}\,{[}\,{]}\,{<}\,{>}\,{\{}\,{\}}$, + the asterisk $*$, and + $.\,/\,\vert\,\backslash\,{\#}\,{\$}\,{\%}\,{\&}$\footnote{% + ${\#}\,{\$}\,{\%}\,{\&}$ + obey the math alphabets since the initial version of \mst; the dot + $.$, the slash $/$, the vertical bar $\vert$ and the backslash + $\backslash$ do not have specific spacings inserted by \TeX{} around + them, and the procedure is then not a devilish one, this is why it + is made the default for these characters which are listed apart. The + math symbols \cs{mid} (which is $\vert$ with type \cs{mathrel}) and + \cs{setminus} ($\backslash$ with type \cs{mathbin}) are counted + among the `difficult' cases, not the `easy non-letters'.} will also obey + the math alphabet commands (when not used as delimiters). The + important thing is that the spaces added by \TeX{} before and after + are not modified. + +\end{enumerate} +Let us compare, for example, the new behavior of \cs{mathtt} and \cs{mathbf} +\MTmathoperatorsobeymathxx\MTnonlettersobeymathxx\MTeasynonlettersobeymathxx +\[ \mathtt{(\sin(n!)<\cos(m-p)?)}\qquad \mathbf{[\sin(x+y)=\cos(z-t)]}\] +with the traditional default behavior: +\MTmathoperatorsdonotobeymathxx\MTnonlettersdonotobeymathxx +\MTeasynonlettersdonotobeymathxx +\[ \mathtt{(\sin(n!)<\cos(m-p)?)}\qquad \mathbf{[\sin(x+y)=\cos(z-t)]}\] + +The first feature is activated by default, except of course for the normal and +bold math versions when the package was given the \emph{subdued} option. The +second feature is \emph{off} by default for the characters listed first. It is +\emph{on} for the `easy' cases +${\#}\,{\$}\,{\%}\,{\&}\,.\,/\,\vert\,\backslash$ (activating the feature for +them puts no constraint on the user input and should not be too upsetting to +other packages), and also for $*$ but only if this was required explicitly by +the option §asterisk§, as the user then is supposed to know that |$R^*$| is no +valid input anymore and should be replaced by |$R^{*}$|. The remaining `difficult' +cases create similar +constraints, which will be commented more upon next. The relevant commands are\\ +\mbox{}\hspace{2cm}\csb{MTmathoperatorsdonotobeymathxx}\\ +\mbox{}\hspace{2cm}\csb{MTnonlettersdonotobeymathxx}\\ +\mbox{}\hspace{2cm}\csb{MTeasynonlettersdonotobeymathxx}\\ +for deactivation and \\ +\mbox{}\hspace{2cm}\csb{MTmathoperatorsobeymathxx}\\ +\mbox{}\hspace{2cm}\csb{MTnonlettersobeymathxx}\\ +\mbox{}\hspace{2cm}\csb{MTeasynonlettersobeymathxx}\\ +for activation.\footnote{these commands are to be used outside of math mode. + Their scope is limited to the current \LaTeX{} environment or group. They use + the \cs{everymath} and \cs{everydisplay} mechanism so if the document needs to + modify these token lists it has to do so in a responsible manner, extending + not annihilating their previous contents.} +%% suppression de cette note de bas de page à 1.3u car elle est obsolète +%% (pas sûr si à 100%, mais en tout cas l'exemple avec \mathbf{-} n'a plus +%% de problème. +% \footnote{when in subdued mode, the +% math alphabets are the default ones, not the ones modified by \mst to use the +% document text fonts. As a result, matters of font encodings may then give +% unexpected results, for example for $-$. On the present document page we +% switched to a math version to escape from the |subdued| mode and avoid the +% problem with \cs{mathbf\{-\}} giving in the normal (subdued) math version +% {\MTversion{normal}\MTnonlettersobeymathxx$\mathbf-$\sffamily, when +% `non-letters' are declared to obey math alphabets.}} + +\begin{framed} + \textbf{Important:} the package does \csb{MTnonlettersdonotobeymathxx} by + default. The reason is that activating the mechanism adds some constraints to + the way things must be input, adding +\centeredline{|\usepackage{mathastext}|\csb{MTnonlettersobeymathxx}} + to a pre-existing + document might well create errors: + all these characters treated by \mst, such + as |?|, |[|, |<| now represent (in math mode only!) \emph{two} `tokens' and + this will utterly confuse \TeX{} if some precautions are not taken: |$x^?$|, + |$R^+$| or |$\mathopen$| \emph{must} now be coded as |$x^{?}$|, + |$R^{+}$| and |$\mathopen{<}A\mathclose{>}$| (the rule is to do as if |?|, + |+|, |<| or |>| were each really \emph{two} characters). + + Even if this rule is respected in the document source, it is still a + possibility that incompatibilities with other packages will arise because + \mst does a \emph{mathematical activation} of the characters which could be + unexpected and unchecked for by other packages. This is precisely the case + with the |amsmath| package, and the problem goes away by just making sure + that |amsmath| is loaded before \mst{} (generally speaking, \mst should be + loaded last after all packages dealing with math things). +\end{framed} + +The braces |\{| and |\}| remain unresponsive to the alphabet changing commands +even after \csb{MTnonlettersobeymathxx}. One must issue also +\csb{MTexplicitbracesobeymathxx}, but it has the disadvantage that |\{| and +|\}| become then unusable as variable-size delimiters: |\big\{| or |\big\}| +create errors and one must make use of |\big\lbrace| and |\big\rbrace|. But +\MTmathoperatorsobeymathxx\MTnonlettersobeymathxx\MTexplicitbracesobeymathxx +one can now enjoy $\mathtt{\{a, a>b\}}$, $\mathbf{\{a, a>b\}}$, +$\mathsf{\{a, a>b\}}$, or even $\mathnormalbold{\{a, a>b\}}$.\footnote{this + last example uses the \cs{mathnormalbold} additional alphabet defined by + \mst.}\footnote{Let me recall that braces will anyhow not be handled at all + by \mst if the document + font encoding is |OT1|, except under option |alldelims|.} + +Even with \csb{MTnonlettersobeymathxx}, the parenthese-like symbols $($, $)$, +$[$, $]$, $<$ and $>$ and the slashes $/$, $\backslash$, \emph{if used as + left/right delimiters} (i.e. with |\left/\right|) do not react to math +alphabet commands. This is mainly explained by the fact that the text font +will not contain suitable glyphs, hence no attempt was made to make the +delimiters pick up their glyphs there. + +But \mst does try to pick up most of the `small variants' of the delimiters +from the text font: |$\left$| gives $\left$ (but +|$\left$| gives $\left$.) Notice that this differs from +standard \LaTeX{} for which |$\left< x\right>$| gives $\langle x\rangle$. As +it is perhaps a bit strange to have $\left< x\right>$ next to +$\left< X\right>$ there is option §nosmalldelims§: with this option the +small-sized variants of the delimiters are not modified by \mst (option +§nosmalldelims§ has the side effect that, for the non-delimiter uses of +|\{, \}| +to be \mst-ified it is necessary to issue \csb{MTnonlettersobeymathxx} and +\csb{MTexplicitbracesobeymathxx}.) + +At any rate, as said above, whether `small' or not, delimiters are +unresponsive to math alphabet commands, due to technical aspects of \TeX, and +the way \mst handles these things. Examples: |\mathbf{}| gives +$\mathbf{}$ +%{\setbox0\hbox{$\mathbf{}$}\typeout{ICI}\showboxdepth\maxdimen +% \showboxbreadth\maxdimen \showbox0} +(no use of |\left/\right|, hence brackets do obey the math alphabets --- as we +issued §\MTnonlettersobeymathxx§ a bit earlier), |\mathbf{\left}| +gives $\mathbf{\left}$ (brackets used with |\left/\right| do not +obey the math alphabets), |\mathbf{\mathopen{<}a,b \mathclose{>}}| gives +$\mathbf{\mathopen{<} a,b \mathclose{>}}$ (no |\left/\right|, brackets +do obey the math alphabets). + +\endgroup +For comparison, the \LaTeX{} standard behavior for +\centeredline{|\mathbf{\mathopen{<}a,b\mathclose{>}}|} +is $\mathbf{\mathopen{<} a,b + \mathclose{>}}$ (neither brackets nor the comma do respond). + +\subsection{Greek letters} + +The Computer Modern fonts are very light and thin in comparison +to many text fonts, and as a result rarely mix +well with them (particularly if the Latin letters in +math mode are upright). The following options are +provided by \mst: +\begin{description} +\item[no option:] nothing is done by the + package, Greek letters are the default Computer + Modern ones or have been set-up by other packages; + for example by the |fourier| package with option + `upright', which gives upright Greek letters. +\item[§LGRgreek§:] this is for fonts which additionally to Latin + letters also provide Greek letters in |LGR| encoding. Here is + a list from a 2012 standard \TeX{} installation: the Computer + Modern, Latin Modern, and the CM-LGC fonts; the Greek Font + Society fonts (such as GFS Didot), the epigrafica and kerkis + packages, the txfontsb package which extends the txfonts + package with LGR-encoded Greek letters; the Droid fonts, the + DejaVu fonts, the Comfortaa font, and the Open Sans font. The + |LGR| encoded |CM/LM| fonts (in serif, sans-serif and typewriter + family) give the nice Greek letters in upright shape from the + |cbfonts| package. To get these letters in your \mst math + mode, you can do the following: +\begin{verbatim} +% instructions to load the document fonts: +\usepackage{nice_font} +% and then the following: +\renewcommand{\familydefault}{cmr} % or cmss or cmtt for sans resp. mono +\usepackage[LGRgreek]{mathastext} +\renewcommand{\familydefault}{\rmdefault} +\Mathastext % this re-initializes mathastext with the nice_font, +% without changing the LGR font cmr/cmss/cmtt used for Greek letters +% in math mode. +\begin{document} +\end{verbatim} + If you use the §italic§ option note that the italic Greek + letters from the |cbfonts| are not the same glyphs as + the default Greek letters from the |OML| encoded font |cmmi|. +\item[§eulergreek§:] the Greek letters will be taken from the Euler font (the + document does not have to load the eulervm package, \mst directly uses + some file included in this package, as it provides a mechanism to scale + by an arbitrary factor the Euler font.) The letters are upright. +\item[§symbolgreek§:] the Greek letters will be taken + from the (Adobe Postscript) Symbol font. A command is provided + so that the user can scale the Symbol font to let it + better fit with the text font. The letters are upright. +\item[§selfGreek§:] this option concerns only the eleven Greek + capitals from the |OT1|-encoding. It does nothing for the + lowercase Greek letters. The encoding used in the document does + not have to be |OT1|. +\end{description} + +There is also §LGRgreeks§ which tells \mst to pick up in each math +version the letters from the |LGR| encoded font used in that version, +and §selfGreeks§ to tell \mst to do as for §selfGreek§ but +separately in all math versions. + +Under the §subdued§ option the Greek letters in the normal and bold math +versions are kept to their defaults as found at the time of loading the +package. + +The commands §\MTstandardgreek§ allow at any point +in the document to turn inactive any Greek related option passed to \mst. And +conversely §\MTcustomgreek§ reactivates it. + + +\subsubsection{Shape of Greek letters} + +Classic \TeX{} uses in math mode italic lowercase and +upright uppercase Greek letters. French typography uses +upright shape for both lowercase and uppercase. And the +ISO standard is to use italic shape for both lowercase +and uppercase. + +The Euler and Symbol fonts not being available in other than their +default upright shape, this question of shapes for Greek letters +raises issues only in the case of the options §LGRgreek§ and +§selfGreek§. + +The options §frenchmath§, §itgreek§, §upgreek§, §itGreek§ and §upGreek§ +modify the Greek letter shapes according to the following rules, listed +from the lowest to the highest priority: +\begin{description} +\item[no option:] the lowercase Greek letters are in the same shape as + Latin letters, and the uppercase in the same shape as applied to digits + and operator names, +\item[§frenchmath§:] both lowercase and uppercase are in the same shape as + the digits and operator names (most of the time this means ``upright + shape'', but it can be otherwise), +\item[§itgreek§, §upgreek§:] both lowercase and uppercase are in the + \cs{itdefault}, respectively the \cs{updefault} shape (at the time of + loading the package or at the time of a subsequent call to + \cs{Mathastext} or \cs{MathastextWillUse}), +\item[§itGreek§, §upGreek§:] same as above, but only for the uppercase + letters. +\end{description} + +So, the default gives the classic \TeX{} behavior when option §italic§ +was passed. Each call to \cs{Mathastext} (or \cs{MathastextWillUse}) +macros (described in a later section) reinitializes the computation of +the shapes. + +As mentioned already the package allows to define various ``math +versions''. In the case of §eulergreek§ or §symbolgreek§ they apply +to all these versions. In the case of the options §LGRgreeks§ or +§selfGreeks§ (notice the additional ``s''), each math version is +assumed to have its text font available in |LGR| (or |OT1| +encoding) and also the shapes will be local to the math version. + +Finally version |1.15c| of \mst introduces new preamble-only +commands to change the shapes, and even the font, used for Greek +letters, in case of package options §LGRgreek§/§selfGreek§. They +are §\MTitgreek§, §\MTupgreek§, §\MTitGreek§, §\MTupGreek§: these +are used like the options and change only the shapes for the math +versions which will be declared \emph{next} in the preamble; and +§\MTgreekfont§|{name_of_font}| will tell the \emph{next} math +versions to use that font family. To use this command you need to +know the (little) name of a suitable font family available in |LGR| +encoding: for example |lmr|, |txr| (needs |txfontsb| +package on your system), |DejaVuSerif-TLF| (needs |dejavu| package +on your system), etc\dots + +\enlargethispage{\baselineskip} + +\subsection{Unicode engines} + +\mst is minimally Unicode aware since |1.12| and can be used with \XeTeX{} or +\LuaLaTeX{}. Starting with release |1.3|, it needs |luatex| to be at least +as recent as the one which was provided with the TL2013 distribution. + +\subsubsection{Caveat emptor} + +With \XeTeX{} the user is strongly advised to first consider using the +|mathspec| package, which is designed for Unicode, with a key-value interface. +With both \XeTeX{} and \LuaLaTeX{}, |unicode-math| is recommended for OpenType +math fonts. + +Particularly in the latter case (\emph{i.e.} using |unicode-math|) you probably don't need, don't want, and should +not use \mst: it is extremely far from being able to define a math font, as it +applies basically only to a subset of the |32-127| ascii range, and in particular +it does not know how to use a given Unicode font simultaneously for Latin and +Greek letters. Again the user is strongly advised to look at |mathspec| and +|unicode-math|. + +Let me point out explicitly that \mst has not been tested in any systematic +manner under the Unicode engines; and that it is expected to be most definitely +incompatible with |unicode-math|, although your mileage may vary and some +features may appear to work. + +When using \mst with either \XeTeX{} or \LuaLaTeX{} it is recommended to use +the |fontspec| package (see remark below on \cs{encodingdefault}). +Furthermore, it is \emph{necessary} to load |fontspec| with its |no-math| +option, and this \emph{must} happen before loading \mst. + +\begin{framed} +\begin{itemize}[label=$\bullet$, leftmargin=1em] +\item + Use |fontspec| with its + \emph{no-math} option, and load it \emph{prior} to \mst. As some packages + load |fontspec| themselves (for example |polyglossia|), a + \centeredline{|\PassOptionsToPackage{no-math}{fontspec}|} early in the + preamble might be needed. + +\item + The |amsmath| package, if used, \emph{must} be loaded \emph{prior} to \mst. + +\item + Under |lualatex| engine, it has long been recommended to also load the package + |lualatex-math|. Please check its documentation as possibly it has now + been incorporated upstream (I am not following up on the situation). +\end{itemize} +\end{framed} + +% obsolete with release 1.3: +% A little piece of the functionality of \mst is less fully +% realized under the \LuaLaTeX{} engine than it is with +% \XeTeX{}. This is a temporary situation as the needed feature +% of \LuaLaTeX{} has been implemented in its latest development +% release. I will update \mst when these binaries will have +% reached the distribution stage. + +I already mentioned in the section \ref{sec:ic} the fact that +the italic corrections were not available for OpenType fonts +under the \XeTeX{} engine and only partially available for the +\LuaLaTeX{} engine, with the result that the spacings in math +mode when using for the letters an upright text font will be +less satisfying than with the standard PDF\TeX{} engine (the +OpenType fonts not being usable with the latter engine, this is +not a criterion of choice anyhow). + +To define math versions when using unicode fonts, use |fontspec|'s +\cs{setmainfont} before the \cs{Mathastext}\oarg{version} command, or simply +before loading \mst for the default math versions. + +It is possible to mix usage of Unicode fonts and classical \TeX{} +fonts. All used 8bits font encoding must have been passed as +options to the |fontenc| package. + +\subsubsection{The unicodeminus option} + +For legacy reason, \mst uses by default the |EN DASH U+2013| for the minus +sign in math mode, if the font is determined to be a ``Unicode'' font. + +There is now the §unicodeminus§\RightNote{1.3q} to use rather +% BORDEL DE BORDEL DE FAIT CHIER \verb ET Text for \verb command ended by end +% of line. je l'ai patché dans etoc et xint mais pas ici encore. +|MINUS SIGN U+2212|.% +\footnote{Thanks to \textsc{Tobias~Brink} who asked for this feature.} +% +Check \hyperref[nicodeminus]{\ttfamily\hyphenchar\font=189 its documentation} +on page \pageref{nicodeminus}. + +\subsubsection{Two examples} + +I include +here two examples which compiled successfully with \XeTeX{} and +\LuaLaTeX{}, the first one on a Linux machine, the second one on a Mac +OS X machine.\footnote{A |tex mathastext.dtx| (in a temporary repertory) on a + copy of |kpsewhich mathastext.dtx| will extract extended versions of + these examples as test files.} +\begin{verbatim} +\documentclass{article} +\usepackage[hscale=0.8]{geometry} +\usepackage{multicol} +\usepackage[no-math]{fontspec} +\usepackage{lmodern} +\usepackage[subdued,italic]{mathastext} +\setmainfont[Color=999999]{Verdana} \Mathastext[Verdana] +\setmainfont[Color=0000FF]{Arial} \Mathastext[Arial] +\setmainfont[Color=00FF00]{DejaVu Serif} \Mathastext[DejaVu] +\MTDeclareVersion{times}{T1}{ptm}{m}{n} +\setmainfont[Color=FF0000]{Andale Mono} \Mathastext[Andale] +\begin{document} +\newcommand\TEST[1]{\MTversion{#1}% +\begin{multicols}{2} +\hbox to\columnwidth{\hbox to\columnwidth{\hfil + $abcdefghijklmnopqrstuvwxyz$\hfil}\kern-2.5em{#1}} + \centerline{ $ABCDEFGHIJKLMNOPQRSTUVWXYZ$ } + \centerline{ $0123456789$ } + \centerline{ $!\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\backslash$ } +\columnbreak + \centerline{ abcdefghijklmnopqrstuvwxyz } + \centerline{ ABCDEFGHIJKLMNOPQRSTUVWXYZ } + \centerline{ 0123456789} + \centerline{ !\,?\,*\,,\,.\,:\,;\,+\,-\,=\,(\,)\,[\,]\,/\,\#\,% + \$\,\%\,\&\,<\,>\,|\,\{\,\}\,\char92 } +\end{multicols}} +\begin{multicols}{2} + \centerline{\textbf{math mode}} +\columnbreak + \centerline{ \textbf{text} } +\end{multicols} +\TEST{DejaVu}\TEST{Verdana}\TEST{times}\TEST{Andale} +\TEST{Arial}\TEST{bold}\TEST{normal} +\end{document} +\end{verbatim} +And now the same thing with fonts available on Mac OS X: +\begin{verbatim} +\documentclass{article} +\usepackage[hscale=0.8]{geometry} +\usepackage{multicol} +\usepackage[no-math]{fontspec} +\usepackage{lmodern} +\usepackage[subdued,italic]{mathastext} +\setmainfont[Color=FF0000]{Hoefler Text} \Mathastext[Hoefler] +\setmainfont[Color=336633]{American Typewriter}\Mathastext[Typewriter] +\setmainfont[Color=0000FF]{Herculanum} \Mathastext[Herculanum] +\setmainfont[Color=FF00FF]{Didot} \Mathastext[Didot] +\setmainfont[Color=999999]{Comic Sans MS} \Mathastext[Comic] +\begin{document} + --- copy here the code from the previous example --- +\TEST{Didot}\TEST{Comic}\TEST{normal}\TEST{Herculanum} +\TEST{Hoefler}\TEST{Typewriter}\TEST{bold} +\end{document} +\end{verbatim} +% The test files which will be produced by running |latex| on +% |mathastext.dtx| are more extent. + +\subsection{Compatibility issues}\label{sec:compat} + +Compatibility issues (or just questions of who decides last) are naturally to +be expected with packages dealing with the math setting; the fix is simply to +load \mst last. And one should always load |amsmath| before \mst (this is +especially true when using Unicode engines but applies in general as well). + +Any definition made in a package loaded before \mst of the font to be +used for letters or for the common characters in the |ascii| basic range +will be overruled by the loading of \mst (this includes the case +when the earlier package had made the character `mathematically active'). +Conversely most of the set-up done by \mst may well be overruled by +packages loaded later which do math related things. + +In case of a `too many math alphabets' message try the |defaultalphabets| +option or one of its |defaultnormal|, |defaulttt|, etc\dots sub-options. + +Starting with version |1.2|, \mst makes some characters `mathematically +active' to achieve certain effects: automatic insertion of the italic +corrections when using an upright text font in math, extended scope of +the math alphabet commands which now apply to non-letter symbols (and +also to math operator names, but this is much easier to achieve). And +the (already mathematically active) right quote is modified to have some +extra space added before the derivative glyph ${}'$. + +This is compatible with using \cs{label} and \cs{ref} in and outside of +math mode. But a difficulty arises when some other package has made the +character `globally active' everywhere in the document. The action of +\mst is made anew at each mathematical inline or displayed formula. If +it is detected that a character has been activated then nothing further +will be done (so the \mst feature\footnote{italic correction insertion + for the latin letters, receptivity to the math alphabet action for the + other characters.} for that character is lost) \emph{except} if it +appears that this activation was done by the Babel system. In that case +\mst does not make the character mathematically active but it modifies +in the appropriate manner the action of Babel for that character in math +mode. Furthermore \mst makes the character mathematically +\emph{inactive}.\footnote{only the characters + {{;}\,{,}\,{:}\,{!}\,{?}\,{+}\,{\textendash}\,{=}\,{<}\,{>}\,{(}\,{)}\,{[}\,{]}\,*} + mentioned in section \ref{sec:mathxx} as `difficult non letters' (and + the right quote {'}) and + the latin letters are concerned here; it seems highly unprobable that + a latin letter ${\in}\{a\mbox{--}z,A\mbox{--}Z\}$ will have been made + globally active (only letters never being used in command names are + possible candidates), but \mst has been + designed to cope with it, should it happen ...} + +Here is indeed some code that you should \textbf{not} try at +home: +\begin{verbatim} + \documentclass{article} + \usepackage[french]{babel} + \usepackage{mathtools}\mathtoolsset{centercolon} + \begin{document} + $:$ + \end{document} +\end{verbatim} +\fbox{DO NOT DO THIS AT HOME}\thinspace: it creates an infinite +loop.\footnote{This seems to still be the case with Babel |3.9f| and + frenchb.ldf |2.6e|, as tested on Sep. 2, 2013. Again tested with up-to-date + TL2015 Jan. 15, 2016 with same result.} This is due +to the fact that the colon is simultaneously active (this is made by +|babel+frenchb| at begin document) and mathematically active (done by +|mathtools| in the preamble). The interaction gives an infinite loop. Such a +situation will be cured by |mathastext|, even loaded before |mathtools|, +\emph{if} use is made of \cs{MTnonlettersobeymathxx}. At each math formula +\mst will detect that Babel has activated the colon, and will cancel the +mathematical activation (the precise definition done by |mathtools| was +already lost at begin document due to overwriting by |babel| but the fact that +the character was mathematically active remained true). + + + + So far I have briefly described the problem of document active + characters (see the test file |mathastexttestalphabets.tex| for more + explanations and illustrations, and the commented source code of the + package). Pure mathematical activation revealed an incompatibility of + another type with |amsmath|. To fix it, \mst now replaces + an inner macro of |amsmath| + (\cs{resetMathstrut@}) with its own version.\\ + \null\hspace{1cm}\fbox{Always load |amsmath| before \mst.}\\ + Actually this last commandment was already made necessary by the use of the + text endash to represent the minus sign in math mode, and, especially for + Unicode engines, some aspects of the \cs{DeclareMathOperator} macro from + |amsmath|. + + \begin{framed}\kern-.75\baselineskip + \begin{framed} + \textbf{Important!} As is mentioned in the section \ref{sec:mathxx}, + after command §\MTnonlettersobeymathxx§, characters such as + |?|, or |[|, now represent \emph{two} `tokens' and this will utterly + confuse \TeX{} if some precautions are not taken. Examples: |$0^+$| or + |$x\mathrel?y$| or |$R^*$| \emph{must} be input now as |$0^{+}$| + and, respectively, + |$x\mathrel{?}y$| or |$R^{*}$|. This is why the package does + §\MTnonlettersdonotobeymathxx§ by default. + \end{framed}\vskip-.75\baselineskip + \end{framed} + One thing to take note of is that this mechanism uses the \cs{everymath} + and \cs{everydisplay}, so if it is needed to add to these \TeX{} `token + lists' some additional things this should be done in a way preserving the + former contents. + + If one issues (after |\begin{document}|) |\everymath={}| and + |\everydisplay={}| this annihilates not only all the \mst (evil ?) doings + with math active characters but also everything else some other package + might have put in these token registers, so it is better, if the need + arises to cancel the math activation of characters done by \mst to use the + command §\MTeverymathoff§, which does all of + §\MTmathoperatorsdonotobeymathxx§, §\MTnonlettersdonotobeymathxx§ (already + default), §\MTmathstandardletters§, §\MTnormalprime§, and + §\MTnormalasterisk§. This is supposed to be used in a group or + environment (as there is no |\MTactivemathon|). It must be used prior to + entering math mode. + + \begin{framed} + \textcolor{magenta}{\bfseries New with 1.3i:} \mst patches |\url| of + packages |url| and |hyperref|, and also |\nolinkurl|, to force them + to do automatically §\MTeverymathoff§. Indeed they use math mode, and it + is better to turn \mst off for their dealings. + \end{framed} + +\section{Package options and commands} + +\subsection{Summary of main options} + \begin{description} +\item[{§italic§, §frenchmath§}:] italic letters in +math, upright uppercase if §frenchmath§. + \item[{§subdued§}:] acts in a subdued way. The \LaTeX{} normal and bold + math versions are left (quasi) unchanged. With version |1.15e| of + the package this statement applies also to the math alphabets + \cs{mathbf}, \cs{mathit}, \cs{mathsf}, and \cs{mathtt} (and not + only to \cs{mathnormal} and \cs{mathrm} as in previous versions.) +\item[{§LGRgreek§, §eulergreek§, §symbolgreek§}:] the + Greek letters will be taken, respectively from the + text font itself (in |LGR| encoding), or from the Euler + font, or from the Postscript Symbol font. +\item[{§symbolmax§}:] all characters + other than letters and digits, are taken from the + Symbol font. This option also makes a number of + further glyphs available, such as some basic + mathematical arrows, and the sum and product + signs. For documents with very simple needs in + mathematical symbols, \mst with option + §symbolmax§ may give in the end a PDF file quite + smaller than the one one would get without the + package. +\item[{§defaultmathsizes§}:] \mst sets up bigger sizes +for subscripts (it also copies code from the |moresize| package to redefine + \cs{Huge} and define \cs{HUGE}). Use this option to prevent it from + doing so. +\item[{§defaultalphabets§}:] by default, \mst redeclares the math + alphabets \cs{mathrm}, \cs{mathit}, \cs{mathtt} etc\dots{} (but not + \cs{mathcal} of course) to refer to the current document text fonts (at the + time of loading the package and in each \mst math version). Use + this option to prevent it from doing so (each alphabet also has + its own disabling option). +\end{description} + +\subsection{Miscellaneous} + +\begin{description} +\item[the en-dash as minus sign:] very often the - + character from the text font does not give a good + minus sign. So by default, the package uses the + en-dash sign \textendash{}. Use §noendash§ to + deactivate it. Starting with version |1.12| of the + package this `en-dash as minus' should work in all + encodings, including Unicode (if |fontspec| has been + loaded); see also |unicodeminus| for OpenType fonts. + +\item[amsmath:] \strut the behaviour of the + \cs{DeclareMathOperator}\RLNote{changed:}{1.3n} command + of |amsmath| is modified by \mst for it to use the correct font. + Additionally, release |1.3n| of \mst at long last also handles an extra + operation done by |amsmath| for |'.:/-*| to be used in operator names + without the extra math spacing.% +% +\footnote{To the experts: there is a long story here that \cs{newmcodes@} + hardcodes the font, that it was not compatible with Unicode engines, that + during some time (2013-2016) \texttt{lualatex-math} fixed that and very + recently |amsopn.sty 2016/03/08 v2.02| also, so now \texttt{lualatex-math + 1.6} does nothing as it is already fixed ``upstream'' in |amsopn.sty|, but + anyhow in both cases, this still hardcoded the font, so finally \mst does + the right thing from its point of view. See the code comments for more, + there is an issue here with \LuaLaTeX\ not applying the curly right quote + contrarily to \XeLaTeX.} +% +This customization is suppressed in §subdued§ mode for the |normal| and |bold| +math versions. + +\item[hbar:] the default \LaTeX\ definition of §\hbar§ would in our context + make use of the |h| of the current math font (so for us, it is also the text + font, perhaps in italic shape), but with a bar accross the |h| from the + original default math font for letters (usually |cmmi|). We redefine + \cs{hbar} to use the text font macron accent (|\=|) as a mock math accent + (this takes into account the §italic§ option and is compatible with + subscripts and superscripts). + + Since |1.12| \mst when dealing with a Unicode font sets the \cs{hbar} + to be the character from the font having hexadecimal codepoint |U+0127|. + + Since |1.3u| the general 8bits font encoding is + supported\RLNote{changed:}{1.3u} (see discussion of the |mathaccents| option + at end of this list for the shared limitations). Brief testing with + various usual \TeX\ fonts shows that the vertical positioning of + the bar isn't satisfying. It is planned to either add a parameter to + adjust it or to modify altogether the mode of construction of the |\hbar|. + + Use §nohbar§ to tell \mst not do provide its own |\hbar|. + + +\item[dotless i and j:] by default the package redefines \cs{imath} and + \cs{jmath} to give (in math mode) the dotless i and j (if it exists at + all) from the text font.% +% +\footnote{\CHANGED{1.3t}Since \texttt{1.12} it also redefined \cs{i} and + \cs{j} for usability both in text and math modes, but this has been + dropped at \texttt{1.3t}. Breaking change!} + +\item[asterisk:] versions of \mst earlier than |1.2d [2013/01/02]| + did not do anything + with the \cs{ast} control sequence but did pick the asterisk + $*$ in the document text font, and this often was a rather + silly thing as the text asterisk is generally in a raised + position. Furthermore, the $*$ lost its status of a binary + operator and was treated as an `ordinary' symbol. An option + |noasterisk| turned this feature off. Starting with |1.2d|, + the |noasterisk| option is deprecated and the new default is + to do nothing. But when option §asterisk§ is received by the + package, then both \cs{ast} and $*$ are simultaneously + modified to use (as binary operators) the text asterisk, + slightly lowered. The amount of lowering\footnote{with the + option \texttt{symbolmisc}, the asterisk is picked from + the Symbol font, and the amount of lowering is + non-customizable; however if a math alphabet command is + used, the asterisk is then again from a text font and the + lowering will be as specified by \cs{MTlowerast}.} is + decided by the mandatory argument to the command + \csb{MTlowerast}\marg{dimen}. The package initially does + \cs{MTlowerast}|{.3\height}|. Doing \cs{MTlowerast}|{.5ex}| is + not a good idea as it does not scale properly in the script + and scriptscript styles. With an argument given as a + multiple of |\height|, the asterisk will behave as expected + in subscripts and subscripts of subscripts. But $*$ is now + `mathematically active'\thinspace\footnote{in a hopefully + safe way, for example {\ttfamily\$\string\label\{eq*1\}\$} + is ok.} and |$R^*$| or |$R^\ast$| \emph{must} be input as + |$R^{*}$| and |$R^{\ast}$|. Furthermore, they will obey the + math alphabet commands. + +\item[\XeTeX{} and \LuaLaTeX{}:] regarding the en-dash and the + dotless i and j, the package is now under the Unicode engines + compatible not only with the ``Unicode'' \LaTeX\ font encodings + EU1 (\XeTeX, old fontspec), EU2 (\LuaLaTeX, old fontspec), TU + (\XeTeX\ and \LuaLaTeX, modern fontspec), but also with + traditional 8bits-encodings declared as a |fontenc| + option.\RLNote{NEW FEATURE!}{1.3u} Formerly, with a Unicode engine, + only OT1, T1 and LY1 were supported by \mst as the 8bit encoding + of the document text font, regarding the minus as en-dash and + the dotless i and j. + + \item[fontspec:] one more note to users of +\XeTeX{}/\LuaLaTeX{} with |fontspec|:\newline +\fbox{it has to be +loaded {with the option} |no-math|}, +and \emph{before} \mst. + +\item[vec accent:] The default \cs{vec} accent is not + appropriate for upright letters, so \mst + provides a \cs{fouriervec} which takes its glyph in a + Fourier font, and an Ersatz \cs{pmvec} + which is reasonably good looking on upright letters + and works with the \cs{rightarrow} glyph. Contrarily + to version |1.0|, the default \cs{vec} is not + overwritten with \cs{fouriervec}. And contrarily to + version |1.1|, one now needs to pass the option + §fouriervec§ to have the math accent \cs{fouriervec} + defined by the package.% +% +\footnote{this costs a math family, as I never came back to this to try to + do otherwise.} + + +\item[math alphabets:] + \begin{itemize} + \item We define a new math alphabet command + \cs{mathnormalbold} which gives direct access to + the bold version of the \cs{mathnormal} alphabet + (rather than using either the \cs{bm} command from + the |bm| package or the \cs{boldsymbol} command + from the |amsbsy| package). As it does not + exist in the default \LaTeX{} math font set-up, this + alphabet is \emph{not} subjected to the {subdued option} action. + \item The other math alphabet changing commands + defined by the package are \cs{MathEulerBold}, + \cs{MathEuler} and \cs{MathPSymbol}. + \item \cs{mathnormal}, \cs{mathrm}, \cs{mathbf}, + \cs{mathit}, \cs{mathsf} and \cs{mathtt} are modified + to make reference to the document text fonts (this + can be disabled by suitable package options). +\item version |1.2| of \mst has extended the scope of the math + alphabets to apply to non-alphabetical characters and to + operator names. This respects the automatic white spaces + added by \TeX{} around math symbols. +\item the\RightNote{1.3i} + extra skips around letters (see \autoref{sec:mathskips} and + \autoref{sec:ic}) are removed in the scope of the math alphabets. + \end{itemize} + +\item[math accents:] if option §mathaccents§ is used then \mst attempts to let + the math accents |\acute|, |\grave|, etc... use the suitable glyphs from the + text font. Prior to |1.3u| only |OT1|, |T1|, and |LY1| were supported (via + hardcoded slots). It should now work with any 8bits font + encoding\RLNote{NEW FEATURE!}{1.3u} having been declared as an option to the + |fontenc| package (and of course providing the ten needed text accents which + will mock math accents).% + % + \footnote{The code will raise low-level \TeX\ errors if the user attempts to + use an 8bits font encoding whose \LaTeX\ definition file is lacking the + suitable uses of \cs{DeclareTextAccent} or if the low level \LaTeX\ macro + implementation of text accents changes significantly; in such cases please + report the problem to the author, so that it can be documented in future + releases!} + + The |\vec| math accent is not handled here, as it is not available in the + usual 8bits font encodings. See the §fouriervec§ option or the §\pmvec§ + command. + + The math accents obey the §subdued§ option\RLNote{NEW FEATURE!}{1.3u} + and will change in sync with the \mst-ified text font used in + each non subdued math version. + + (Very) brief testing during |1.3u| development with \XeTeX\ and \LuaTeX\ let + the author conclude that usage with the \cs{Umathaccent} primitive of an + OpenType accent glyph slot (which in the text font is for usage as a + postpended combining character) gives definitely bad horizontal placements + for both engines (each in its own way). Thus, the redefinitions of accents + for a \mst declared math version with an OpenType font is by default + canceled.% +% +\footnote{I.e., the \cs{grave} etc... control sequences will, in math versions + with an OpenType \mst-ified font, expand to macros holding their initial + meanings, unmodified by \mst, which was in force at the + |\string\begin\string{document\string}|.} +% + Use §unimathaccents§ to force usage of the OpenType font text + accents glyph slots with the \cs{Umathaccent} primitive. Expert users are + invited to check out the code and to contribute suggestions if some extras + can improve it. + +\item[varying font encodings:] the very first release of \mst dealt with only + one font; very soon thereafter it acquired the capacity to define multiple + math versions, each one using its own text font. But, as was documented at + this location formerly, various encoding dependent decisions were done once + and for all during package loading. + + This meant in particular that the minus sign (using the text endash), the + dotless |i| and |j|, the |\hbar|, the math accents were all set up for only + one unique font encoding. It was thus recommended that all math versions + share the same font encoding. + + The |1.3u| release has lifted this restriction.\RLNote{NEW FEATURE!}{1.3u} +\end{description} + +% 2 septembre 2013; finalisé 22:58 +\makeatletter +\def\@jfendshrtverb #1#2§{\@ifundefined{FLAG#2}% + {\color{blue}\ttfamily #1#2\endgroup + \global\@namedef{FLAG#2}{}\label{#2}}% + {\hyperref[#2]{\ttfamily #1#2}\endgroup}} +\makeatother + +\subsection{Commands} + +A few preliminary comments, mainly destined to advanced users aware of some +\TeX\ innards (more extensive explanations are to be found in the code +comments). + +The timing for actions of \mst falls into three cases: + +\begin{enumerate} +\item things done during the loading of the package, or delayed to + |\AtBeginDocument|, +\item things done as the result of user commands, either in the preamble or in + the body of the document, +\item things done everytime math mode is entered. +\end{enumerate} + +The second category overlaps with the others, as the (preamble) use of some +commands can have either immediate effect or only trigger some actions in +|\AtBeginDocument| or perhaps only influence the things done later by \mst +each time math mode is entered. + +The third category deserves some brief additional comments: it mainly (but not +exclusively) regards the ``math activation'' of characters, and conversely all +``math activations'' fall into this category. The package re-checks each time +math mode is entered if some characters have been made in-between catcode +active, or math active, and takes appropriate decisions: one important aspect +of this issue is that |babel|'s mechanism for activating character was not, last +time I checked, very robust against math active characters. I now checked +again (on January 15, 2016) that +\begin{verbatim} + \documentclass{article} + \usepackage[french]{babel} + \usepackage{mathtools}\mathtoolsset{centercolon} + \begin{document} + $:$ + \end{document} +\end{verbatim} +creates an infinite loop (see section \ref{sec:compat} where this was +mentioned already, some years ago). Thus \mst has (since |1.2e 2013/01/10|) a +somewhat elaborate mechanism related to these issues (see the code comments), +installed into the list of things done by \TeX\ systematically each time +it enters math mode. For some legacy reason the package also puts into +this list a few other things which could arguably be done elsewhere once and +for all. The command \csb{MTeverymathoff} cancels all actions done by +\mst. + + +\newsavebox\boite + +\subsubsection{Preamble-only commands} +These commands mainly facilitate the definition of math versions, in a \mst +extended sense. It is not necessary to use them to activate the package +basic functionalities, as loading \mst is enough (except with the |subdued| +option). +\begin{enumerate}[label=$\bullet$, leftmargin=1em] +\item §\Mathastext§ (or §\mathastext§) reinitializes \mst: it sets the + fonts used in math mode (in versions |normal| and |bold|) for letters, + digits and a few ascii symbols to the \emph{current} defaults of encoding, + family, series and shape.\footnote{\texttt{\char92Mathastext} updates also + the font and shapes for the Greek letters (|LGRgreek| option), and the + skips to be inserted after the symbols $\oldforall$ and $\oldexists$, + see \emph{infra.}} Both the normal and bold math version are modified by + this action of §\Mathastext§. + \begin{enumerate}[label=$\bullet$] + \item \textbf{math versions:} + \csb{Mathastext} accepts an optional argument \oarg{name}. With + this (within square brackets) argument, rather than redefining the + fonts for math mode, §\Mathastext§ declares a new \emph{math version}, and + it is this + math version which will use the then current text font in math + mode.\footnote{The allowed version names are as for + the \LaTeX{} \cs{DeclareMathVersion} macro. \emph{Do not use} + |\string\Mathastext[foo]| \emph{with + |foo| equal to ``normal'' or ``bold'';} this is already taken care of by the + initial loading of the package or a later command \cs{Mathastext} + without any optional argument.} + \item \textbf{inheritance:} starting\RightNote{1.3c} with version |1.3c| a second optional + argument \oarg{other\_version} will transfer its set-up for things not + affected by \mst action, like large symbols, to the declared math + version whose name was given as first optional argument. The main use + will be with |[bold]| in order for the symbols and large symbols to be + typeset as in the |bold| math version. For example, this document has in + its preamble:\hfill\break\begingroup\small + \begin{lrbox}{\boite}|\usepackage{newcent}% this package makes New Century the roman font|\end{lrbox}\rlap{\usebox{\boite}}\hfill\break + |\Mathastext[newcent]% this math version will use New Century|\hfill\break + |\MTseries{b} % next \Mathastext will use a bold font|\hfill\break + \begin{lrbox}{\boite}|\Mathastext[boldnewcent][bold]% large symbols, etc, will be bold too|\end{lrbox}\rlap{\usebox{\boite}}\hfill\break\endgroup + We can check that it does work: + \centeredline{|\MTversion{newcent}:|\MTversion{newcent} + $abcde\displaystyle\ointop\bigvee\biguplus\bigotimes\bigoplus$} + \centeredline{|\MTversion{boldnewcent}:|\MTversion{boldnewcent} + $abcde\displaystyle\ointop\bigvee\biguplus\bigotimes\bigoplus$} + Naturally, for this one needs an initial math font setup with some nice + bold fonts also for large symbols. This is the case with the excellent + |txfonts| package of \textsc{Young~Ryu}. As the present document must + use many fonts and declares many math alphabets, we did not load the full + package and fonts but only the |largesymbols|:\hfill\break + |\DeclareSymbolFont{largesymbols}{OMX}{txex}{m}{n}|\hfill\break + |\SetSymbolFont{largesymbols}{bold}{OMX}{txex}{bx}{n}|\hfill\break + |\DeclareFontSubstitution{OMX}{txex}{m}{n}| + \end{enumerate} + + \item §\Mathastext§ may be preceded optionally by one or + more of\footnote{these commands exist also with + long names: \texttt{\char92Mathastextencoding}, + etc\dots{} The same applies to the other commands + mentioned in this section.} + §\MTencoding§\marg{enc}, + §\MTfamily§\marg{fam}, + §\MTseries§\marg{ser}, + §\MTshape§\marg{sh}, and §\MTlettershape§\marg{sh}. For + example valid values are, respectively, \meta{T1}, + \meta{phv}, \meta{m}, \meta{n}, and \meta{it}: this + is the Helvetica font in T1-encoding, regular + (medium) series, upright shape, and the letters + will be in italic shape. Once used their effect applies to all + succeeding calls to \cs{Mathastext}, and can only be undone by using + them again. + + \item + §\MTWillUse§\oarg{ltsh}\marg{enc}\marg{fam}\marg{ser}\marg{sh} + tells \mst to use the font with the + specified encoding, family, series, and shape for + the letters and digits (and all other afflicted + characters) in math mode. The optional argument + \meta{ltsh} specifies a shape for the letters, for + example \cs{itdefault}, or directly \meta{it} or + \meta{sc}. + +\item §\MTDeclareVersion§\oarg{ltsh}\marg{name}\marg{enc}\marg{fam}\marg{ser}\marg{sh}\oarg{other\_version}: + declares that the document will have access to the font + with the specified characteristics, under the math version name + \meta{name}. For example: + \centeredline{|\MTDeclareVersion[sc]{palatino}{T1}{ppl}{b}{sl}|} + declares under the name |palatino| a version where + mathematics will be typeset using the Palatino font in + T1-encoding, bold, slanted, and the letters will in fact be + in caps and small caps (and bold).\footnote{I do not + especially recommend to use this in real life!} When the initial + optional argument is absent, and \mst was loaded + with the \blueit{italic} option, then the default letter shape + will be |it|,\footnote{more precisely, the shape is the + latest value passed in one of the previously used package + commands to specify the shape of letters, or the \cs{itdefault} + of the time of loading the package.} else letters will + have the same shape as used for digits and operator-names. + + Another optional argument may be used as last argument.\RightNote{1.3c} + Similarly as its + use with §\Mathastext§ this makes the declared math version inherit, for + things not modified by \mst like large symbols, the font set up of the math + version whose name was passed as optional argument (typical use will be + with |[bold]|). + +\item §\MTboldvariant§\marg{var}: when used before §\Mathastext§, + specifies which bold + (|b|, |sb|, |bx|, \dots) to be used by \cs{mathbf} (and + \cs{boldmath}). Default is the \cs{bfdefault} at the time of + loading \mst. When used before the declaration + of a version, decides the way \cs{mathbf} will act in this version. +\item §\MTEulerScale§\marg{factor}: scales the Euler font by + \meta{factor}. +\item §\MTSymbolScale§\marg{factor}: scales the Symbol font by + \meta{factor}. +\item §\MTitgreek§, §\MTupgreek§, §\MTitGreek§, §\MTupGreek§: +optional commands, active only in +the case of the \blueit{LGRgreek} option, to decide the shape of the +Greek letters in the versions which will be declared next. + \item §\MTgreekfont§\marg{fontfamily}: optional command with a mandatory + argument which specifies the font for Greek letters in all \mst math + versions declared afterwards via \cs{Mathastext} or \cs{MTDeclareVersion}. Only effective with \blueit{LGRgreek} option. +\end{enumerate} + +\subsubsection{Commands usable only outside of math mode}\label{sec:cmdsoutmath} + +They are usable only from outside math mode because they act via turning on +or off the execution, each time math mode is entered, of certain macros added +by \mst to the \cs{everymath} and \cs{everydisplay} token list variables. + +\begin{enumerate}[label=$\bullet$, leftmargin=1em] + +\item §\MTmathactiveletters§: activates the `math activation' of Latin + letters. This is done by the package during loading, except under the + |subdued| option.\footnote{\CHANGED{1.3j}Formerly, it was also executed + from each \cs{Mathastext} in the preamble.} It is again executed in the + body at each \cs{MTversion}, except under the |subdued| option when + switching to the \emph{normal} or \emph{bold} math versions. + + The letters are made mathematically active\footnote{the |mathcode|'s are + only modified at the time of execution of \cs{everymath}, + \cs{everydisplay}.} to insert the extra skips as specified by + \csb{MTsetmathskips} (see section \ref{sec:mathskips}), and also possibly + the italic corrections when using upright fonts (see section \ref{sec:ic}). + +\item §\MTmathstandardletters§: cancels the `math activation' of the letters. + Must be re-issued after each \csb{MTversion}, but see + \csb{MTeverymathdefault}. + +\item §\MTicinmath§: this command is executed by default by \mst except in + case of option |subdued| or if the user chosen letter shape is oblique (|it| + or |sl|). It tells \mst to add italic corrections after all letters in math + mode, except within the scope of math alphabets.\footnote{\CHANGED{1.3i}% +Formerly, italic corrections were added to the (non-oblique) letters of + \cs{mathnormal} arguments.} + + This command and the next ones in this item can be used in the preamble as + well as in the body of the document (in case of |subdued| option, using the + commands from within the preamble will remain without effect, as the + document body will start in the subdued normal math version anyhow.) But + each \cs{MTversion} in the body will re-emit \cs{MTicinmath} (in case of + non-oblique letter shape), except if the + |subdued| option was used and the chosen math version is \emph{normal} or + \emph{bold}. + + The effect of this and the other commands of this item is local to the group + or environment in which it has been issued. + +{\footnotesize + + It may theoretically be used from inside math mode, but the included + §\MTmathactiveletters§ will have an effect only if issued prior to + entering math mode. + + §\MTnoicinmath§: this command deactivates the package added + italic corrections. It can be used inside as well as outside + of math mode (or in the preamble of the document). + + §\MTICinmath§, §\MTnoICinmath§: these commands activate the italic + corrections only for the uppercase letters (but recall that \cs{MTicinmath} + is done by default, thus this will typically have to follow + \cs{MTnoicinmath}.) + +% obsolète 1.3i + % Following some decision of the package author whose rationale has been + % forgotten, afer \cs{MTICinmath} italic corrections for uppercase letters in + % arguments to all math alphabets (\emph{i.e.} also \cs{mathnormal}) are + % suppressed (with \cs{MTicinmath} the italic corrections are suppressed + % inside the scope of math alphabets \emph{except} \cs{mathnormal}.) + % No italic corrections are explicitly added inside arguments of math + % alphabets. + + §\MTicalsoinmathxx§: this command de-activates the de-activation of + the italic corrections inside the arguments to the math alphabet + commands. +% apart from \cs{mathnormal}. + It can be issued inside as well as outside of math mode. Will be effective + only if §\MTicinmath§ or §\MTICinmath§ is in force. +% obsolète 1.3i + % \footnote{it is provided + % for the \mst defined math alphabet \cs{mathnormalbold} which + % contrarily to \cs{mathnormal} is not treated apart from the other + % math alphabets.} + To cancel its effect either enclose it in a group or + environment or re-issue §\MTicinmath§ after it. + +} + +\item §\MTnormalasterisk§, §\MTactiveasterisk§: the latter will use for |*| + and |\ast| the text font asterisk, suitably lowered; the former tells \mst + to not modify the \LaTeX\ default. Both are no-op without option + §asterisk§. + +\item §\MTeasynonlettersobeymathxx§, §\MTeasynonlettersdonotobeymathxx§: the + former is done by default, it makes characters \verb+.+, \verb+/+, \verb+|+, + \verb+\+, \verb+#+, \verb+$+, \verb+%+, and \verb+&+ + (if not excluded by package options) obey math alphabet commands. See also + section \ref{sec:mathxx}. This functionality does \emph{not} make the + characters ``math active'' (but it does modify |\mathcode|'s, naturally). + +\item §\MTnonlettersobeymathxx§, §\MTnonlettersdonotobeymathxx§: the former + will make (except if excluded by relevant package options) \verb|!|, + \verb|?|, \verb|,|, \verb|:|, \verb|;|, \verb|+|, \verb|-|, \verb|=|, + \verb|(|, \verb|)|, \verb|[|, \verb|]|, \verb|<|, and \verb|>| obey the math + alphabet commands (when not used as delimiters). These characters are made + ``math active'', and each one now expands to two + tokens. This makes for example |$a^!$| illegal input and + it will have to be coded |$a^{!}$|. Hence, by default, the package does + §\MTnonlettersdonotobeymathxx§. + + \begin{framed} + Under |subdued| option, \cs{MTnonlettersobeymathxx} effect is of course + canceled in the \emph{normal} and \emph{bold} math versions; but please + note that when switching back to a non-subdued math version it will be + mandatory to issue again \cs{MTnonlettersobeymathxx} explicitly if its + effect is to be re-activated. + + In particular, executing \cs{MTnonlettersobeymathxx} in the preamble or at + the start of the document body serves nothing, because the document is in + the subdued \emph{normal} math version regime then. It must thus be + executed after the first usage of \cs{Mtversion} switching to a + non-subdued math version, and again on each successive exit from the + \emph{normal} or \emph{bold} math versions. + \end{framed} + + {\footnotesize +§\MTexplicitbracesobeymathxx§ extends an earlier §\MTnonlettersobeymathxx§ + to also treat \verb|\{| and \verb|\}|. But then |\left\{|, |\right\}| must + be coded |\left\lbrace|, |\right\rbrace| rather. There is also + §\MTexplicitbracesdonotobeymathxx§.\par} + +\item \RightNote{1.3j}§\MTnormalprime§, §\MTprimedoesskip§: the latter (done by default if not + |subdued|, and also on each use of \csb{MTversion} in the body of the document + except for the |subdued| \emph{normal} and \emph{bold} math version) + makes it so that $'$ takes into account the math glue as specified by + \csb{MTprimeskip}. The former is its opposite. In all cases the right quote + |'| is a mathematically active character producing ${}'$ as is the default + in \TeX, it is only its meaning which changes to include or not an extra + skip. For some (legacy) reason, this change of meaning is done anew + by \mst each time math mode is entered. The commands of this item are thus + no-op from inside math mode. + + +\item \RightNote{1.3j}§\MTeverymathdefault§: this hook is executed by + \csb{MTversion}\marg{version\_name}, except under option |subdued| + when switching to the \emph{normal} or \emph{bold} math versions. Its + default meaning is: +\begin{verbatim} + \MTactiveasterisk % this has no effect without option asterisk + \MTprimedoesskip % this makes prime glyph obey extra space + \MTeasynonlettersobeymathxx + \MTicinmath % this does \MTmathactiveletters, hence also skips from + % \MTsetmathskips are obeyed. + \MTfixfonts % only operant under LuaLaTeX. +\end{verbatim} + {\footnotesize Notice that under |subdued| option, switching to the + \emph{normal} or \emph{bold} version does \csb{MTeverymathoff} which + includes \cs{MTnonlettersdonotobeymathxx}. + + The default + §\MTeverymathdefault§ which is issued when going back to a + non-\emph{normal} or \emph{bold} math version doesn't do + \cs{MTnonlettersobeymathxx}: thus it is up to the user to correct this if + needed (no issue without |subdued| option). + + +Notice also that \csb{MTversion}\marg{version\_name}, except for \emph{normal} +or \emph{bold} if |subdued| does \csb{MTforalldoesskip} and +\csb{MTexistsdoesskip}, which are not included in \cs{MTeverymathdefault} +actions as they are not related to \cs{everymath} and \cs{everydisplay}.\par} + +\item \RightNote{1.3j}§\MTeverymathoff§: does §\MTnormalasterisk§, + §\MTnormalprime§, §\MTnonlettersdonotobeymathxx§, + §\MTeasynonlettersdonotobeymathxx§, §\MTmathstandardletters§ and + §\MTdonotfixfonts§. + + {\footnotesize \RightNote{1.3i}The commands + |\url/\nolinkurl| of package |hyperref| and |url| from |url.sty| (which + use math mode under the hood) are patched by \mst to do §\MTeverymathoff§ + automatically: this is needed because \mst modifies anew some mathcodes + \emph{each time math mode is entered,} hence may overwrite to some extent + the specific preparation done by |{url,hyperref}.sty|. + % {\parfillskip0pt\hfill + % \rlap{\kern10pt\textcolor{magenta}{\bfseries New! (1.3i)}}\par} + + Automatically done by \csb{MTversion} under option |subdued| + if switching to the \emph{normal} or \emph{bold} math versions; and + \csb{MTversion} then does also \csb{MTnormalexists} and + \csb{MTnormalforall}. +\par} + +\small + +\item \RightNote{1.3o}§\MTfixfonts§: this is operant only under + \LuaLaTeX{}. It has the effect that each time math mode is entered macro + \csb{MTfixmathfonts} will be executed. The latter forces so-called |base| + mode for the used text font in math mode, in an effort to (only partially, + see code comments) fix the fact that OpenType features such as Lining + Figures were in some cases not being applied in math mode when one uses text + fonts there (text fonts are declared by \LuaTeX+|luaotfload| to use |node| + mode, which is non-functional in math.) It is invoked automatically by the + package (except for |normal| and |bold| math versions under §subdued§ + option), and in normal situations, there is no reason to use it directly. + +% pas envie de perdre mon temps là-dessus. D'ailleurs peut-être déjà pour +% commencer bm ne fonctionne pas avec fontes OpenType. + +% Notice (not tested) that package |bm| is presumably not compatible. + +\item \RightNote{1.3o}§\MTdonotfixfonts§: cancels the job of + |\MTfixfonts|. Done automatically in §subdued§ mode when in the |normal| or + |bold| math version; in normal contexts, there is no reason to use this + command. Only operant under \LuaLaTeX. + +\end{enumerate} + +\footnotesize + +\subsubsection{Commands usable only in math mode}\label{sec:mathonlycmds} + +%\begin{enumerate} +%\item +\RightNote{1.3p}§\MTfixmathfonts§: this used to be an inner macro + but it is given a public name by |1.3p| because I discovered that + |$..\hbox{\mathversion{foo}$..$}..$| causes an + issue and one needs to invoke again \cs{MTfixmathfonts} \emph{after} the + \verb|\hbox|, for some reason. To be used \emph{only} under \LuaLaTeX{} and only for + such rare cases where it may be needed. +%\end{enumerate} + +\normalsize + +\subsubsection{Commands usable everywhere}\label{sec:cmds} + +\begin{enumerate}[label=$\bullet$, leftmargin=1em] + +\DeleteShortVerb{\|}% + +\item §\MTsetmathskips§\marg{a-z|A-Z}\marg{muglue\_before}\marg{muglue\_after}: + \MakeShortVerb{\|}is\RightNote{1.3a} used to specify extra skips (or rather mu glue) to be + inserted in math mode, before and after a letter. The rationale is that + standard text fonts used in math mode may sometimes cause glyph (near-) + collisions with math symbols, as \TeX{} has some implicit expectations on the + design of fonts for math letters. + + \begin{framed} + These extra skips around letters are set at their natural width and do not + add any stretchability or shrinkability to the math formula as a whole, + nor do they result in extra potential break points. + \end{framed} + + Random (silly) examples: + \centeredline{|\MTsetmathskips{x}{\medmuskip}{\thickmuskip}|} \centeredline + {|\MTsetmathskips{A}{.5mu}{2.3mu}|} and the effect: + \begingroup\MTversion{italic}\MTsetmathskips{x}{\medmuskip}{\thickmuskip}% + \MTsetmathskips{A}{.5mu}{2.3mu}% + $vwxyzABC^{vwxyzABC}$\endgroup. The effect obeys the usual \LaTeX{} scoping + rules. + + The first argument of §\MTsetmathskips§ may be any expandable code giving a + letter; this facilitates use of |\MTsetmathskip| in |\@for| loops such as + this one: +\begin{verbatim} +\makeatletter +\@for\@tempa:=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\do{% + \MTsetmathskips{\@tempa}{2mu}{2mu}}% +\makeatother +\end{verbatim} + + \begin{framed} + \emph{\color{magenta}\bfseries Starting with |v1.3i|:} the extra skips are + \emph{not} applied to the letters within the scope of math alphabet + commands, or the letters from operator names (pre-defined or user + declared). + \end{framed} + +{\footnotesize + Note that contrarily to the \csb{MTexistsskip}, \csb{MTforallskip}, and + \csb{MTprimeskip} commands described next, these extra skips (which may be + specified in the preamble) are not recorded in the definition of the math + version (as defined via §\Mathastext§ with its optional argument or via + §\MTDeclareVersion§). The declared skips hold thoughout the document + until modified or canceled, independently of math versions (of + course, \mst cancels the skips in the normal and bold math versions if + package option \blueit{subdued} was used).\par} + +\DeleteShortVerb{\|} + +\item §\MTunsetmathskips§\marg{a-z|A-Z}: \MakeShortVerb{\|} cancels the skips + for that letter (they are not set to |0mu| but completely removed). + + + % setting the skips to |0mu| which prevents formation of ligatures + % when the letter is used inside a \cs{mathbf} for example). Example (using a + % version with upright Latin Modern): \centeredline + % {|\MTsetmathskips{f}{8mu}{0mu}$gffg\MTunsetmathskips{f}ff\mathbf{ff}$|} + % gives: \begingroup\MTversion{upright}% + % \MTsetmathskips{f}{8mu}{0mu}$gffg\MTunsetmathskips{f}ff\mathbf{ff}$\endgroup. + % The ligature was correctly formed. + + The argument may be a macro (or any expandable code) expanding to a letter. + + +\item §\MTexistsskip§\marg{math glue}: specifies the amount of skip or more + generally glue to put after each $\oldexists$ math symbol. Indeed, upright + letters (or digits for that matter) often appear to be positioned a bit too + close to the quantifier: $\oldexists\mathrm{B}$. The package default is to + add a |1mu| skip (this default is set to zero in the case of |italic|): + $\oldexists\mskip 1mu\mathrm{B}$. One can change the default with the + following syntax: |\MTexistsskip{2mu plus 1mu minus 1mu}|, which if used in + the preamble and followed with a \csb{Mathastext} command (or + \csb{MTDeclareVersion}), will be recorded in the definition of this math + version (and subsequent ones). One may also use the command at any time in + the document. In the case of the option |subdued|, the skip is canceled in + the \emph{normal} and \emph{bold} math versions.\footnote{\CHANGED{1.3j}% +Formerly, it was set to |0mu|.} In the case of the option |italic|, the + default skip is set to zero. + +\item \RightNote{1.3j}§\MTnormalexists§, §\MTexistsdoesskip§: the + latter (done by default if not |subdued|, and also on each use of + |\MTversion| in the body of the document) makes it so that $\oldexists$ + takes into account the math glue as specified by \csb{MTexistsskip}. The + former is its opposite. + +\item §\MTforallskip§\marg{math glue}: the default is to add a |.6667mu| math + skip after each $\oldforall$ (except with the option |italic| for which the + default skip is set to zero). Compare $\oldforall\mskip.6667mu\mathrm{F}$ + (has the skip) with $\oldforall\mathrm{F}$ (has no skip). Use this command + in the preamble to set up the skip or glue to be used in the \emph{next to + be declared} math versions. In the case of the option |subdued|, the skip + is canceled in the \emph{normal} and \emph{bold} math + versions.\footnote{\CHANGED{1.3j}Formerly, it was set to |0mu|.} In the + case of the option |italic|, the default skip is zero for all math versions. + One may use the command at any location in the document. + +\item \RightNote{1.3j}§\MTnormalforall§, §\MTforalldoesskip§: the + latter (done by default if not |subdued|, and also on each use of + |\MTversion| in the body of the document) makes it so that $\oldforall$ + takes into account the math glue as specified by \csb{MTforallskip}. The + former is its opposite. + +\item §\MTprimeskip§\marg{math glue}: the default is to add a |0.5mu| skip + before the derivative glyph, except for the |italic| option. In the case of + the option |subdued|, the skip is canceled in the \emph{normal} and + \emph{bold} math versions.\footnote{\CHANGED{1.3j}Formerly, it was set to + |0mu|.} + +% obsolete et même faux avec 1.3j +% \footnote{if \cs{begin\{document\}} is not followed +% with \cs{MTversion\{normal\}}, the latest values set in the preamble by +% these commands are used at the beginning of the document, +% even under option \texttt{subdued}.} + +\item §\MTlowerast§\marg{dimen}: a \cs{raisebox} command is + used to lower the text asterisk to produce a reasonable math + asterisk. The package uses this command initially with + argument |0.3\height|, this will have to be fine-tuned for + each given text font but worked out ok with the fonts we + tried. Note that the dimension argument will be used also in + sub-scripts and sub-sub-scripts, so it is best not to use an + absolute dimension. + +\item §\MTmathoperatorsobeymathxx§, §\MTmathoperatorsdonotobeymathxx§: the + former is done by default, it makes operator names obey math alphabets. See + also section \ref{sec:mathxx}. This functionality \emph{does + {\normalfont\bfseries not} rely} + on ``math active characters''. Automatically issued by each \cs{MTversion}, + except under option |subdued| when switching to \emph{normal} or \emph{bold}. + + \item §\MTcustomgreek§:\RightNote{1.3d} in case \mst has been loaded with one of its + Greek related options, this activates the corresponding + customization of Greek letters in math mode. It is issued + automatically by the package in the preamble (except if loaded with + |subdued| option) and at each switch of math version via + |\MTversion| or |\MTversion*| (except for the normal and bold math + versions in subdued mode). Also available as + |\Mathastextcustomgreek|. May be used even inside of math mode. + + \item §\MTstandardgreek§:\RightNote{1.3d} in case \mst was loaded with one of the Greek + related options this command reverts the customization, it resets the Greek + letters to their definitions in force at package loading time. Can be used + in the preamble, but is mainly for the document body (may even be used + inside math mode ...). Done automatically + under the |subdued| option when switching to the normal or bold math + version. Also available as |\Mathastextstandardgreek|. + +\end{enumerate} + +\subsubsection{Body-only commands} + +\begin{enumerate}[label=$\bullet$, leftmargin=1em] +\item §\MTversion§\oarg{nametext}\marg{namemath}, + §\MTversion§$\ast$\marg{namemath}, also known as + §\Mathastextversion§ (and as \cs{MTVersion}, and + \cs{mathastextversion}): + \begin{enumerate}[label=$\bullet$] + \item the non-starred version changes + \emph{both} the document text fonts and the math fonts (for those characters + treated by \mst): the mandatory argument is the math version to be used + for math; the optional argument is the name of (another) \mst-declared math + version, the font which was chosen during its declaration will be set as + document text font (and |\familydefault| etc\dots also are + redefined). In the absence of the optional argument, the mandatory one is + used. The versions \emph{must} be either |normal|, or |bold|, or previously + declared ones via §\Mathastext§ or §\MTDeclareVersion§. + \item the starred variant\RightNote{1.3c} does the math set-up, but changes \emph{nothing} to + the text fonts (see \autoref{sec:mathversions} for a description of the math + set-up, which summarizes + what is done additionally to only using \LaTeX{}'s |\mathversion|). + \end{enumerate} + \cs{MTversion}\oarg{nametext}\marg{namemath} does §\MTeverymathdefault§ + (except for |\MTversion{normal}| and |\MTversion{bold}| under package option + |subdued|), which in particular activates the insertion of skips around + letters specified by §\MTsetmathskips§ and also, if the font used is not + oblique the insertion of italic corrections (for better positioning of + subscripts; see the discussion in \autoref{sec:ic}). Under the |frenchmath| + option the package checks separately the letter shape for lowercase and + uppercase. + + \RightNote{1.3j}\cs{MTversion} also does §\MTexistsdoesskip§, + §\MTforalldoesskip§, and also §\MTprimedoesskip§, + \csb{MTmathoperatorsobeymathxx}, except under the |subdued| option for + \emph{normal} and \emph{bold}, in which case it does the opposite actions. +\end{enumerate} + +All further commands are usable only inside math mode. +\begin{enumerate}[label=$\bullet$] +\item §\hbar§: this macro is by default redefined (in a way compatible with + the |italic| option) combining the |h| letter and the \={ } accent from the + \mst font. Note that \cs{mathrm}|{\hbar}| and \cs{mathbf}|{\hbar}| will + work and that \cs{hbar} does scale in subscripts and exponents. Since + |1.3u|, this is a priori compatible with all 8bits text font + encodings\RLNote{changed:}{1.3u} supporting the |\=| text accent in + the LaTeX way.% +% +\footnote{\CHANGED{1.3u}The horizontal skips for letter |h| from + \cs{MTsetmathskips} are ignored for \cs{hbar}. Formerly, a positive + ``before'' skip was not properly taken into account for the horizontal + positioning of the accent and thus gave a bad result. The user can extend + the package \cs{hbar} definition to add skips.} +\footnote{\CHANGED{1.3u}The \cs{hbar} redefinition is canceled in normal and + bold math versions under the |subdued| option.} + +\item §\fouriervec§: this is a |\vec| accent taken from the Fourier font; +the |fourier| package need not be loaded. Active only +if option §fouriervec§. +\item §\pmvec§: this provides a poor man \cs{vec} accent command, for +upright letters. It uses the right arrow. Does not change +size in subscripts and exponents. + \item §\mathnormal§, §\mathrm§, §\mathbf§, §\mathit§, §\mathsf§, +§\mathtt§: modifications of the original \cs{mathnormal}, +\cs{mathrm}, \cs{mathbf}, \cs{mathit}, \cs{mathsf}, \cs{mathtt} to +use the mathastextified font. The +underlying internal \LaTeX{} structures related to the original +commands are not overwritten, so the original commands can be saved under +other names before |\usepackage{mathastext}|, to be used in case of +necessity (this is what option |subdued| does.) + \item §\mathnormalbold§: a bold version of \cs{mathnormal}. Differs +from §\mathbf§ when the |italic| option has been used, or when use +has been made of §\MTlettershape§ to specify a shape for letters +distinct from the one for digits and operator names, or similarly +when the math version has been declared via §\MTDeclareVersion§ with +its optional parameter for shape of letters. +\item §\inodot§, §\jnodot§: the corresponding glyphs in the \mst-ified + font for use in math mode. By default, |\imath| and |\jmath| are redefined to use + them. Since \texttt{1.3t}, these macros obey the \texttt{subdued} + regime. +% +\footnote{\CHANGED{1.3t}Formerly (i.e. since \texttt{1.12}) \mst + redefined the \texttt{\string\i} and \texttt{\string\j} as robust + commands usable both in text and math mode and using the above macros + in the latter. I have decided it wasn't such a good idea and there is + from now on \texttt{1.3t} no such redefinition of \texttt{\string\i} + and \texttt{\string\j}!} +\item §\MathEuler§, §\MathEulerBold§: math alphabets to access +all the glyphs of the Euler font, if option |eulergreek| (or +|eulerdigits| was passed to the package. +\item §\MathPSymbol§: math alphabet to access the Symbol font. +\item when one of the options \blueit{symbolgreek}, + \blueit{eulergreek}, or \blueit{selfGreek} is passed to the package + the capital Greek letters which look like their Latin + counterparts acquire names: \cs{Digamma}, + \cs{Alpha}, \cs{Beta}, \cs{Epsilon}, \cs{Zeta}, + \cs{Eta}, \cs{Iota}, \cs{Kappa}, \cs{Mu}, \cs{Nu}, + \cs{Omicron}, \cs{Rho}, \cs{Tau}, \cs{Chi} (no + \cs{Digamma} for Symbol). Also an \cs{omicron} + control sequence is provided. +\item |LGR| Greek and `var'-letters: only the + \cs{varsigma} is available in this encoding, so using + for example \cs{varphi} will load the previous default math + font. It might thus be suitable when recompiling + already written \LaTeX{} sources to add to the preamble + \cs{let}\cs{varphi}$=$\cs{phi}, + \cs{let}\cs{varepsilon}$=$\cs{epsilon}, etc\dots, + in case only the `variant' form of the letter was used + in the documents. +\item \hypertarget{symbolmisc}{Miscelleneous mathematical symbols} from the + postscript Symbol font are made available (or replaced) by option + §symbolmisc§.\footnote{option \blueit{asterisk} is also required to treat the + $*$. + Recall from \autoref{sec:mathxx} that the asterisk in math mode (also + when using the control sequence \cs{ast}) appears then to \TeX{} to be + a composite object.} + \makeatletter\let\mst@doasterisk\mst@@doasterisk\makeatother They are + \cs{prod}~$\prod$ \cs{sum}~$\sum$ \cs{implies}~$\implies$ + \cs{impliedby}~$\impliedby$ \cs{iff}~$\iff$ \cs{shortiff}~$\shortiff$ + \cs{to}~$\to$ \cs{longto}~$\longto$ \cs{mapsto}~$\mapsto$ + \cs{longmapsto}~$\longmapsto$ \cs{aleph}~$\aleph$ \cs{inftypsy}~$\inftypsy$ + \cs{emptyset}~$\emptyset$ \cs{surd}~$\surd$ \cs{nabla}~$\nabla$ + \cs{angle}~$\angle$ \cs{forall}~$\forall$ \cs{exists}~$\exists$ + \cs{neg}~$\neg$ \cs{clubsuit}~$\clubsuit$ \cs{diamondsuit}~$\diamondsuit$ + \cs{heartsuit}~$\heartsuit$ \cs{spadesuit}~$\spadesuit$ + \cs{smallint}~$\smallint$ \cs{wedge}~$\wedge$ \cs{vee}~$\vee$ \cs{cap}~$\cap$ + \cs{cup}~$\cup$ \cs{bullet}~$\bullet$ \cs{div}~$\div$ \cs{otimes}~$\otimes$ + \cs{oplus}~$\oplus$ \cs{pm}~$\pm$ \cs{ast}~$\ast$ \cs{times}~$\times$ + \cs{proptopsy}~$\proptopsy$ \cs{mid}~$\mid$ \cs{leq}~$\leq$ \cs{geq}~$\geq$ + \cs{approx}~$\approx$ \cs{supset}~$\supset$ \cs{subset}~$\subset$ + \cs{supseteq}~$\supseteq$ \cs{subseteq}~$\subseteq$ \cs{in}~$\in$ + \cs{sim}~$\sim$ \cs{cong}~$\cong$ \cs{perp}~$\perp$ \cs{equiv}~$\equiv$ + \cs{notin}~$\notin$ \cs{langle}~$\langle$ \cs{rangle}~$\rangle$. And a + \cs{DotTriangle}~$\DotTriangle$ is made available by option §symbolre§ (which + overwrites \cs{Re} and \cs{Im}: $\Re,\Im$). The \cs{inftypsy} and + \cs{proptopsy} have these names to leave up to the user the choice to replace + (or no) the original (larger) \cs{infty} $\infty$ and \cs{propto} $\propto$. + + Regarding the \cs{prod} and \cs{sum} commands: they will use the Symbol + glyphs $\prod\sum$ in inline math, and in display math the Computer Modern + ones (or whatever is set up by other packages; here we have the symbols from + |txfonts|): \[\prod\sum\] The package + provides \cs{prodpsy} and \cs{sumpsy}: if one really wants in all + situations the Symbol glyphs, one can do \cs{let}\cs{prod}\cs{prodpsy} and + \cs{let}\cs{sum}\cs{sumpsy}. Also \cs{MToriginalprod} and \cs{MToriginalsum} + will refer to the \cs{prod} and \cs{sum} before redefinition by the + package: this is to allow constructs such as |$\displaystyle\MToriginalprod$| + or |\[\textstyle\MToriginalprod\]|, because they would not work with the + \cs{prod} and \cs{sum} as re-defined by the package. +\end{enumerate} + + \subsection{Complete list of options} + + \begin{enumerate}[label=$\bullet$, leftmargin=1em] + \item §basic§: only mathastextify letters and digits. + \item §subdued§: do not change the default fonts or the math alphabets in math + mode for the normal and bold math versions, turn on the \mst-ification only + after an explicit \csb{MTversion} (or \cs{mathastextversion}) command + activating an additional math version as declared in the preamble. With + option |subdued| \cs{MTversion\{normal\}} and \cs{MTversion\{bold\}} do + \csb{MTmathoperatorsdonotobeymathxx}, \csb{MTeasynonlettersdonotobeymathxx}, + \csb{MTnonlettersdonotobeymathxx}, \csb{MTmathstandardletters}. + \item §italic§: the letters default to italic shape in + math mode. + \item §frenchmath§: italic lowercase Latin letters, but + uppercase Latin letters in the same font as for digits and + operator names. In general this means that they will be + upright. In case of the \blueit{LGRgreek} option, §frenchmath§ + influences also the shape of the Greek letters. +\item §endash§, §emdash§: use the text font en-dash (\textendash) or even + the em-dash (\textemdash, but this seems crazy) for the minus sign + rather than {}-{}. §endash§ option is default for the package. +\item §unicodeminus§:\RightNote{1.3q} use the |MINUS SIGN U+2212| (requires + |fontspec|.) Or, in the form |unicodeminus=HHHH| with four \emph{uppercased} + hexadecimal digits: use the |U+HHHH| code point. As §noendash§ really means + ``use the hyphen from the text font'', §unicodeminus§ remains without effect + under it, or, naturally, under §nominus§. Without this option, + \mst uses the |EN DASH U+2013| by default for OpenType fonts. +\item §asterisk§: use the text font (or the Symbol font) asterisk in math mode. +\item §nohbar§: prevents \mst from defining its own + \cs{hbar}. +\item §noendash§: the minus sign will be the - from the + text font, not the en-dash \textendash. +\item §nolessnomore§: besides + !\,?\,,\,.\,:\,;\,+\,\textendash\,=\,(\,)\,[\,]\,/\,\#\,\$\,\%\,\& + \mst treats also \DeleteShortVerb{\|} + $\mathord{<}\,\mathord{>}\,\mathord{|}$\, \{\,\} and + $\backslash$.\MakeShortVerb{\|} Use this option to let it not + do it. This is the default + in case of |OT1|-encoding. +\item further excluding options: §noexclam§ !\,?\ +\ §nopunctuation§ ,\,.\,:\,;\ §noplus§, +§nominus§, §noplusnominus§\ +\,\textendash{} §noequal§ =\ +§noparenthesis§ (\,)\,[\,]\,/\ §nospecials§ +\#\,\$\,\%\,\&\ and §nodigits§. + \item §alldelims§: true by default, means that the +characters excluded by §nolessnomore§ are +treated. Use this option in case of a mono-width +|OT1|-encoded font. +\item §nosmalldelims§: this prevents \mst from trying to pick up in the text + font the `small variants' of some math delimiters; it only affects what + happens when a character such as a left parenthesis $($ or $[$ is used as a + delimiter, and in the event that \TeX{} has chosen the smallest sized + variant. This has no impact on what happens when they are not used as + delimiters: then, and if not disabled by the corresponding options, these + characters are always picked up from the text font.\footnote{in this very + special situation of option nosmalldelims, the braces are an exception to + this rule and they require both of \csb{MTnonlettersobeymathxx} and + \csb{MTexplicitbracesobeymathxx} for being picked up from the text font + when not used as delimiters.} + \item §symbolgreek§, §symboldigits§: to let Greek letters (digits) use the +Symbol font. + \item §symbolre§: replaces \cs{Re} and \cs{Im} by the + Symbol glyphs $\Re, \Im$ and defines a +\cs{DotTriangle} command ($\DotTriangle$). +\item §symbolmisc§: takes quite a few glyphs, including logical arrows, product + and sum signs from Symbol. They are listed + \hyperlink{symbolmisc}{\emph{supra}}. Doing + \cs{renewcommand\{\string\int\}\{\string\smallint\}} will maximize + even more the use of the Symbol font. + \item §symboldelimiters§: the characters apart from + letters and digits will be taken from the Symbol font. + \item §symbol§: combines §symbolgreek§, §symbolre§, and §symbolmisc§. + \item §symbolmax§: combines §symbol§ and §symboldelimiters§. + \item §eulergreek§, §eulerdigits§: to let Greek letters (digits) use the +Euler font. + \item §LGRgreek§: this is for a font which is also available in + LGR-encoding. It is possible to change the font per math version, via + the use of the §\MTgreekfont§ command in the preamble. + \item §LGRgreeks§: each declared math version will be supposed to be with a + font which is also available in LGR-encoding. + \item §selfGreek§: this is for a font which is also available in + |OT1|-encoding and contains the glyphs for the default eleven capital Greek +letters. + \item §selfGreeks§: each declared math version will be supposed to be with + a font with the eleven capital Greek letters in its |OT1|-encoded + version. + \item §upgreek§, §itgreek§, §upGreek§, §itGreek§: + options to tell to use \cs{itdefault} or \cs{updefault} for the lowercase + and uppercase (or only the uppercase) Greek letters. Only operant + in the case of the |LGRgreek(s)| and |selfGreek(s)| options. + \item §mathaccents§: use the text font also for the math +accents. As in vanilla \LaTeX{}, they are taken from the font +for the digits and \cs{log}-like names. Obey the alphabet +changing commands. + \item §unimathaccents§:\RLNote{new:}{1.3u} extends |mathaccents| to +OpenType fonts. Gave bad results in my brief testing. + \item §defaultbf§, §defaultit§, §defaultsf§, §defaulttt§: do not +set up, respectively, the \cs{mathbf}, \cs{mathit}, \cs{mathsf}, +and \cs{mathtt} commands to use the mathastext-ified +font. This also prevents \mst to create internally +\cs{Mathxx} alphabets (it never overwrites the original +\cs{mathxx} things but let \cs{mathxx} point to \cs{Mathxx} +instead), so one can use these options if one encounters a `too +many math alphabets' \LaTeX{} error. +\item §defaulnormal§, §defaultrm§: do not identify the default +\cs{mathnormal} (resp. \cs{mathrm}) with the newly created +\cs{Mathnormal} (resp. \cs{Mathrm}) commands which use the +mathastextified fonts in each math version. +\item §defaultalphabets§: all the §defaultxx§ options together, and +additionally tells \mst not to create the \cs{mathnormalbold} alphabet either. + \item §defaultimath§: do not overwrite \cs{imath} and + \cs{jmath} to use \cs{inodot} and \cs{jnodot}. + \item §defaultmathsizes§: do not change the \LaTeX{} defaults for the sizes + of exponents and subscripts. + \item §fouriervec§: provides a \cs{fouriervec} command. The user can then + add in the preamble \cs{let}\cs{vec}$=$\cs{fouriervec}. There is also + always available a ``poor man'' vec accent \cs{pmvec} for upright letters. + \end{enumerate} + +Thanks to Kevin~\textsc{Klement}, Tariq~\textsc{Perwez} +and Ricard~\textsc{Torres} for sending bug reports and feature requests when +the first version of the package was issued. + + \begin{center} +Numerous examples will be found there:\\ + \url{http://jf.burnol.free.fr/mathastext.html}\\ + \url{http://jf.burnol.free.fr/showcase.html} + \end{center} + +\catcode`\§=12 + +% ATTENTION +\clearpage + + +\normalsize + +\section{Change log} +\label{sec:changelog} + +\begingroup + +\def\MacroFont{\footnotesize\normalfont} +% utilisé par verbatim en classe scrdoc +% (rappel: macrocode utilise \macro@font qui est MacroFont at begin document) + +\makeatletter + +\def\@verbatim{% +\parindent \z@ \parfillskip \@flushglue \parskip \tw@\p@ +\let \do \@makeother \dospecials \catcode`\ =10 } + +% et donc on ne fait pas \obeylines +\def\endverbatim{} +\let\@vobeyspaces\relax + +\begingroup \catcode `|=0 \catcode `[= 1 \catcode`]=2 +\catcode `\{=12 \catcode `\}=12 \catcode`\\=12 +|long|gdef|@xverbatim#1\end{verbatim}[#1|end[verbatim]] +|endgroup + +% \end{verbatim} Fix du font-locking de AUCTeX (11.89.6) +% 2015/09/10 -- 2015/09/12 +% Dorénavant README.md (et possiblement un CHANGES.txt ou CHANGES.md) +% sont auto-extraits du .dtx. +% +% Ici je dois faire un input approprié. + +% 2019/08/12: le ChangeLog.md est directement disponible, alors qu'auparavant +% il était inclus dans le README.md. +% +% Les items sont initiés par des * +% Il faut se débarrasser des ---- et remplacer les \[, \] +% Il faut aussi gérer les `. + +\catcode`*=\active +\def*{\ifvmode\smallskip + \leavevmode\kern.5em\smash{\raisebox{-.3\height}{\char42}}\kern1em + \else\smash{\raisebox{-.3\height}{\char42}}\fi }% + +\begingroup + \lccode`\~`1 +\lowercase{\endgroup\def~}{\ifvmode\medskip\expandafter\@DTXLOGhelper\fi 1} + +\begingroup + \catcode`\| 0 + \catcode`\\ 12 +|long|gdef|@DTXLOGhelper #1 ----#2|par{|@@DTXLOGhelper #1\[\]|par} +|long|gdef|@@DTXLOGhelper #1\[#2\]#3|par% + {|textbf{#1}% le #1 ici contient un espace + |ifx|relax #2|relax|else [#2]|fi + |par|nopagebreak} +|endgroup + +\catcode`-=\active +\def-{% + \catcode`M\active + \begingroup + \lccode`\-`M % MATHASTEXT CHANGE LOG est la première ligne... + \lowercase{\endgroup\long\def-}##1\par{\catcode`\M=12 \catcode`\-=12 }% + \catcode`1=\active + \catcode`\` 9 % légèrement ennuyeux mais bon, c'est le plus simple. + \input ChangeLog.md +} + +\makeatother + +\begin{multicols}{2} +\begin{verbatim} +- +\end{verbatim} +\end{multicols} +\endgroup + + +\ifnum\NoSourceCode=1 +\bigskip +\begin{framed} +\def\givesomestretch{% +\fontdimen2\font=0.33333\fontdimen6\font +\fontdimen3\font=0.16666\fontdimen6\font +\fontdimen4\font=0.11111\fontdimen6\font +}% + \ttfamily\small\givesomestretch\hyphenchar\font45 This documentation + has been compiled without the source code. To produce the + documentation with the source code included, run "tex mathastext.dtx" to + generate mathastext.tex (if not already available), then thrice latex on + mathastext.tex and finally dvipdfmx on mathastext.dvi. +\end{framed} +\fi + + +\makeatletter +\StopEventually{\end{document}\endinput} +\makeatother + +\cleardoublepage +\newgeometry{hmarginratio=3:2} +\small + +\section{Implementation} +% The catcode hackery next is to avoid to have <*package> to be listed +% in the commented source code... +% (c) 2012/11/19 jf burnol ;-) +\MakePercentIgnore +% +% \catcode`\<=0 \catcode`\>=11 \catcode`\*=11 \catcode`\/=11 +% \let\relax +% \def<*package>{\catcode`\<=12 \catcode`\>=12 \catcode`\*=12 \catcode`\/=12} +% +% +%<*package> +% The usual catcode regime for letters and digits is assumed and some characters +% such as |*|, |`|, |"|, |=| are supposed to be of catcode other at the time of loading +% of \mst. The source of \mst takes precautions for some other characters such +% as the right quote |'|, which may thus be active with no harm at the time of +% loading. By the way, I think \LaTeX2e should have provided to authors a +% standard macro to be used at the beginning of a style file to make sure the +% catcodes are standard. Shorthands created by Babel should be mostly no problem +% as Babel does the activation only at the |\begin{document}|. +% +% The comments have been accumulating through successive versions with only +% partial efforts to achieve some sort of coherence; as a result some are a +% bit strange or obsolete to various degrees. And the similar remark +% applies to some ancient parts of the code itself! +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage {mathastext} + [2019/08/20 v1.3u Use the text font in math mode (JFB)] +% \end{macrocode} +% Testing for \XeTeX\ and \LuaLaTeX. +% +% |1.3g 2015/10/15|: update for the naming of primitives, the situation has +% evolved both on \XeTeX\ side and on the \LuaLaTeX\ side (LaTeX base +% |2015/10/01|): I was told "U" named math primitives were always available +% for \LuaLaTeX. For \XeTeX, the XeTeX prefix got replaced by U prefix with +% 0.99.. a certain number of 9. I opted for rather simple approach of just +% trying the "modern" names and if they don't exist fall back on earlier (and +% in danger of being deprecated) names. +% \begin{macrocode} + \let\mst@Umathcharnumdef\Umathcharnumdef + \let\mst@Umathcodenum \Umathcodenum + \let\mst@Umathcode \Umathcode + \let\mst@Umathchardef \Umathchardef + \let\mst@Umathaccent \Umathaccent +\newif\ifmst@XeTeX +\ifx\XeTeXinterchartoks\@undefined + \mst@XeTeXfalse +\else + \mst@XeTeXtrue + \ifx\mst@Umathcharnumdef\@undefined + \let\mst@Umathcharnumdef\XeTeXmathcharnumdef + \let\mst@Umathcodenum \XeTeXmathcodenum + \let\mst@Umathcode \XeTeXmathcode + \let\mst@Umathchardef \XeTeXmathchardef + \let\mst@Umathaccent \XeTeXmathaccent + \fi +\fi +\newif\ifmst@LuaTeX +\ifx\directlua\@undefined + \mst@LuaTeXfalse +\else + \mst@LuaTeXtrue + \ifx\mst@Umathcharnumdef\@undefined + \let\mst@Umathcharnumdef\luatexUmathcharnumdef + \let\mst@Umathcodenum \luatexUmathcodenum + \let\mst@Umathcode \luatexUmathcode + \let\mst@Umathchardef \luatexUmathchardef + \let\mst@Umathaccent \luatexUmathaccent + \fi +\fi +\newif\ifmst@XeOrLua +\ifmst@LuaTeX\mst@XeOrLuatrue\fi +\ifmst@XeTeX \mst@XeOrLuatrue\fi +% \end{macrocode} +% |1.2|: all inner macros of \mst now starts with |\mst@| for a cleaner +% name-space. +% +% |1.3l 2016/01/29|: hmmm... at this late stage where nobody would expect me +% to still look at the code, I have found at least two macros which still +% didn't: \cs{do@the@endashstuff} and \cs{do@the@emdashstuff}. +% +% Ok, doing something more serious: compatibility with upcoming TL2016 +% fontspec and its switch to |`TU'| NFSS font encoding in replacement of +% |`EU1/EU2'| Anyhow, the code in \mst has been common to the two Unicode +% engines for a while, hence it is not hard to adapt to the replacement of +% |EU1/EU2| by |TU|, maintaining compatibility with legacy installations. +% +% \begin{macro}{\mst@OneifUniEnc} +% The \cs{mst@OneifUniEnc} is expandable but must be used after +% having set \cs{mst@tmp@enc}... +% \begin{macrocode} +\def\mst@oti{OT1} +\def\mst@eui{EU1}\def\mst@euii{EU2}\def\mst@tu{TU} +\def\mst@OneifUniEnc {% + \ifx \mst@tmp@enc\mst@tu 1\else + \ifx \mst@tmp@enc\mst@eui 1\else + \ifx \mst@tmp@enc\mst@euii 1\else 0\fi\fi\fi } +\newif\ifmst@goahead +\newif\ifmst@abort +% \end{macrocode} +% \end{macro} +% \begin{macro}{\mst@enc} +% \begin{macro}{\mst@fam} +% \begin{macro}{\mst@ser} +% \begin{macro}{\mst@opsh} +% \begin{macro}{\mst@bold} +% \begin{macro}{\mst@ltsh} +% Macros to store the font settings, each math version will store its +% own records. +% \begin{macrocode} + \def\mst@enc{\encodingdefault} + \def\mst@fam{\familydefault} + \def\mst@ser{\seriesdefault} + \def\mst@opsh{\shapedefault} %% will be default shape for operator names + \def\mst@bold{\bfdefault} + \def\mst@ltsh{\shapedefault} %% will be default shape for letters +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\mst@greekfont} +% |1.15c|: for use by the LGRgreek and selfGreek options. Defined as +% an \cs{edef} in order to be able to set-up once and for all the +% Greek at the time of \cs{usepackage}. Modifiable in the preamble +% via \cs{MTgreekfont}\marg{font\_name}\cs{Mathastext}. +% \begin{macrocode} + \edef\mst@greekfont{\familydefault} %% v 1.15c +% \end{macrocode} +% \end{macro} +% \begin{macro}{Package options} +% |2011/03/09|: |1.13| introduces the option LGRgreek and systematic use +% of \cs{if...} conditionals, for better readability (by myself) of +% the code. +% \begin{macrocode} +\newif\ifmst@italic +\newif\ifmst@frenchmath + \DeclareOption{italic}{\mst@italictrue + \def\mst@ltsh{\itdefault}} + \DeclareOption{frenchmath}{\mst@frenchmathtrue\mst@italictrue + \def\mst@ltsh{\itdefault}} +\newif\ifmst@endash\mst@endashtrue + \DeclareOption{endash}{\mst@endashtrue} + \DeclareOption{noendash}{\mst@endashfalse} +\newif\ifmst@emdash + \DeclareOption{emdash}{\mst@emdashtrue\mst@endashfalse} +\newif\ifmst@alldelims +\edef\mst@tmp{\encodingdefault}\ifx\mst@oti\mst@tmp\else\mst@alldelimstrue\fi + \DeclareOption{alldelims}{\mst@alldelimstrue} + \DeclareOption{nolessnomore}{\mst@alldelimsfalse} +\newif\ifmst@nosmalldelims + \DeclareOption{nosmalldelims}{\mst@nosmalldelimstrue} +\newif\ifmst@noplus + \DeclareOption{noplus}{\mst@noplustrue} +\newif\ifmst@nominus + \DeclareOption{nominus}{\mst@nominustrue} +\DeclareOption{noplusnominus}{\ExecuteOptions{noplus,nominus}} +\newif\ifmst@noparen + \DeclareOption{noparenthesis}{\mst@noparentrue} +\newif\ifmst@nopunct + \DeclareOption{nopunctuation}{\mst@nopuncttrue} +\newif\ifmst@noequal + \DeclareOption{noequal}{\mst@noequaltrue} +\newif\ifmst@noexclam + \DeclareOption{noexclam}{\mst@noexclamtrue} +\newif\ifmst@asterisk + \DeclareOption{noasterisk}{\PackageWarningNoLine{mathastext} + {option `noasterisk\string' is deprecated.^^J\space\space\space + Check the documentation}} + \DeclareOption{asterisk}{\mst@asterisktrue} +\newif\ifmst@nospecials + \DeclareOption{nospecials}{\mst@nospecialstrue} +\newif\ifmst@basic % 1.3 to avoid unnecessary patch of amsmath \newmcodes@ + \DeclareOption{basic}{\mst@basictrue + \ExecuteOptions{noparenthesis,nopunctuation,% + noplusnominus,noequal,noexclam,nospecials,nolessnomore}} +\newif\ifmst@nohbar + \DeclareOption{nohbar}{\mst@nohbartrue} +\newif\ifmst@nodigits + \DeclareOption{nodigits}{\mst@nodigitstrue} +\newif\ifmst@defaultimath + \DeclareOption{defaultimath}{\mst@defaultimathtrue} +\newif\ifmst@mathaccents + \DeclareOption{mathaccents}{\mst@mathaccentstrue} +\newif\ifmst@unimathaccents % 1.3u + \DeclareOption{unimathaccents}{\mst@mathaccentstrue\mst@unimathaccentstrue} +\newif\ifmst@needsymbol +\newif\ifmst@symboldelimiters + \DeclareOption{symboldelimiters}{\mst@needsymboltrue\mst@symboldelimiterstrue} +\newif\ifmst@symboldigits + \DeclareOption{symboldigits}{\mst@needsymboltrue\mst@symboldigitstrue} +\newif\ifmst@symbolgreek +\newif\ifmst@customgreek %% new with 1.3d + \DeclareOption{symbolgreek}{\mst@needsymboltrue\mst@symbolgreektrue + \mst@customgreektrue } +\newif\ifmst@symbolre + \DeclareOption{symbolre}{\mst@needsymboltrue\mst@symbolretrue} +\newif\ifmst@symbolmisc + \DeclareOption{symbolmisc}{\mst@needsymboltrue\mst@symbolmisctrue} + \DeclareOption{symbol}{\ExecuteOptions{symbolgreek,symbolmisc,symbolre}} + \DeclareOption{symbolmax}{\ExecuteOptions{symbol,symboldelimiters}} +\newif\ifmst@needeuler +\newif\ifmst@eulerdigits + \DeclareOption{eulerdigits}{\mst@needeulertrue\mst@eulerdigitstrue} +\newif\ifmst@eulergreek + \DeclareOption{eulergreek}{\mst@needeulertrue\mst@eulergreektrue + \mst@customgreektrue } +\newif\ifmst@selfGreek + \DeclareOption{selfGreek}{\mst@selfGreektrue\mst@customgreektrue} +\newif\ifmst@selfGreeks + \DeclareOption{selfGreeks}{\mst@selfGreekstrue\mst@selfGreektrue + \mst@customgreektrue } +\newif\ifmst@LGRgreek + \DeclareOption{LGRgreek}{\mst@LGRgreektrue\mst@customgreektrue} +\newif\ifmst@LGRgreeks + \DeclareOption{LGRgreeks}{\mst@LGRgreekstrue\mst@LGRgreektrue + \mst@customgreektrue} +\def\mst@greek@select{0} +\newif\ifmst@itgreek +\newif\ifmst@upgreek + \DeclareOption{itgreek}{\mst@itgreektrue} + \DeclareOption{upgreek}{\mst@upgreektrue} + \DeclareOption{itGreek}{\def\mst@greek@select{1}} + \DeclareOption{upGreek}{\def\mst@greek@select{2}} +% \end{macrocode} +% Starting with |1.15f| the meaning of the `defaultxx' options has changed. They +% now prevent |mathastext| from defining additional alphabets rather than +% prevent it from identifying the `mathxx' with the new `Mathxx'. The +% `Mathnormal' and `Mathrm' alphabet commands are always created as they are +% SymbolFontAlphabets. +% \begin{macrocode} +\newif\ifmst@defaultnormal + \DeclareOption{defaultnormal}{\mst@defaultnormaltrue} +\newif\ifmst@defaultrm + \DeclareOption{defaultrm}{\mst@defaultrmtrue} +\newif\ifmst@defaultbf + \DeclareOption{defaultbf}{\mst@defaultbftrue} +\newif\ifmst@defaultit + \DeclareOption{defaultit}{\mst@defaultittrue} +\newif\ifmst@defaultsf + \DeclareOption{defaultsf}{\mst@defaultsftrue} +\newif\ifmst@defaulttt + \DeclareOption{defaulttt}{\mst@defaulttttrue} +\newif\ifmst@nonormalbold +\DeclareOption{defaultalphabets}{\ExecuteOptions{defaultnormal,defaultrm,% +defaultbf,defaultit,defaultsf,defaulttt}\mst@nonormalboldtrue} +% \end{macrocode} +% |mathastext| considers the default script and especially scriptscript sizes to +% be far too small, and it will modify them. An option maintains the default. +% \begin{macrocode} +\newif\ifmst@defaultsizes + \DeclareOption{defaultmathsizes}{\mst@defaultsizestrue} +\newif\ifmst@twelve + \DeclareOption{12pt}{\mst@twelvetrue} +\newif\ifmst@fouriervec + \DeclareOption{fouriervec}{\mst@fouriervectrue} +% \end{macrocode} +% |1.15|: the subdued option. +% \begin{macrocode} +\newif\ifmst@subdued + \DeclareOption{subdued}{\mst@subduedtrue} +% \end{macrocode} +% |1.3q|: the unicode option. Thanks to \textsc{Tobias~Brink} for suggesting its +% incorporation. The parsing of |\CurrentOption| does not seek any robustness, +% it just does its job if the option is used correctly. +% \begin{macrocode} +\def\mst@unicodeminus {2013} +\def\mst@checkoption #1unicodeminus#2\mst@#3\mst@@ + {\ifx\\#3\\\PackageWarningNoLine{mathastext} + {Unknown option `\CurrentOption\string'}\else + \ifx\\#2\\\def\mst@unicodeminus {2212}\else + \expandafter\def\expandafter\mst@unicodeminus\expandafter{\@secondoftwo#2}% + \fi\fi} +\DeclareOption*% + {\expandafter\mst@checkoption\CurrentOption\mst@ unicodeminus\mst@\mst@@} +% \end{macrocode} +% \end{macro} +% \begin{macrocode} +\ProcessOptions\relax +% \end{macrocode} +% \begin{macro}{\exists} \begin{macro}{\mst@exists@skip} +% \begin{macro}{\forall} \begin{macro}{\mst@forall@skip} +% \begin{macro}{\MTnormalexists} +% \begin{macro}{\MTexistsdoesskip } +% \begin{macro}{\MTnormalforall} +% \begin{macro}{\MTforalldoesskip } +% +% |1.15e| |2012/10/21|: math skip/glue \emph{after} \cs{exists} and +% \cs{forall}, this is useful with upright letters in math mode. +% Each math version has its own user defined values for the skips, +% stored as macros. The redefinitions of $\exists$ and $\forall$ are +% done only at the end of the package as the |symbol| option will +% also want to redefine these math symbols. +% +% The subdued option (later and only for the normal and bold math +% version) and the italic option (here) set to zero the package +% default skips. With |1.2| the skips can be modified on the fly in +% the document, they are not necessarily set in the preamble once +% and for all for each math version. +% +% |1.3j| adds \cs{MTnormalexists}, \cs{MTexistsdoesskip}, +% \cs{MTnormalforall}, \cs{MTforalldoesskip}. +% +% Earlier to |1.3j|, |\let\mst@stdexists\exists| was done at End of +% Package, now it is done at Begin Document, and same for |\forall|. We +% pay attention that use of \cs{MTnormalexists} etc... inside the +% preamble does not create self-let's. +% +% Also |subdued| mode will do \cs{MTnormalexists}, \cs{MTnormalforall} +% (earlier than |1.3j|, it only set the muskips to |0mu|.) Same when +% using |\MTversion{normal}|, if |subdued|. +% +% For some (random, legacy) reason, the handling of $\exists$ and +% $\forall$ is part of the things +% not included inside |\everymath/\everydisplay|. +% \begin{macrocode} +\newmuskip\mst@exists@muskip %% v 1.15e +\newmuskip\mst@forall@muskip +\def\mst@exists@skip{1mu} +\def\mst@forall@skip{.6667mu} +\ifmst@italic\ifmst@frenchmath\else + \def\mst@exists@skip{0mu} + \def\mst@forall@skip{0mu} + \def\mst@prime@skip {0mu} +\fi\fi +\def\mst@exists{\mst@stdexists\mskip\mst@exists@muskip} +\def\mst@forall{\mst@stdforall\mskip\mst@forall@muskip} +\AtBeginDocument{% + \let\mst@stdexists\exists + \let\mst@stdforall\forall + \def\MTnormalexists {\let\exists\mst@stdexists }% + \def\MTexistsdoesskip {\let\exists\mst@exists }% + \def\MTnormalforall {\let\forall\mst@stdforall }% + \def\MTforalldoesskip {\let\forall\mst@forall }% +% \end{macrocode} +% The document body starts in the normal math version, whether or not +% \cs{Mathastext} command as been used in the preamble (which either re-defines +% the normal/bold math version or defines another one in case of optional +% argument), and in case of |subdued| option should use the standard $\forall$ +% and $\exists$. +% \begin{macrocode} + \ifmst@subdued + \else + \MTexistsdoesskip + \MTforalldoesskip + \fi +}% +\newcommand*\MTnormalexists {\AtBeginDocument {\MTnormalexists }} +\newcommand*\MTexistsdoesskip {\AtBeginDocument {\MTexistsdoesskip }} +\newcommand*\MTnormalforall {\AtBeginDocument {\MTnormalforall }} +\newcommand*\MTforalldoesskip {\AtBeginDocument {\MTforalldoesskip }} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro} +% \end{macro}\end{macro}\end{macro}\end{macro} +% \begin{macro}{\prime} +% \begin{macro}{\mst@prime@skip} +% \begin{macro}{\active@math@prime} +% \begin{macro}{\MTnormalprime} +% \begin{macro}{\MTprimedoesskip} +% +% |1.2| |2012/12/17|: math skip/glue \emph{before} the \cs{prime} +% glyph. This is useful with the default CM glyph and upright letters +% (in contrast the prime from |txfonts| works fine with upright +% letters). For this we replace the \LaTeX{} kernel \cs{active@math@prime} +% with our own skip-enhanced version \cs{mst@active@math@prime}. +% +% |1.2b| |2012/12/31|: doing\\ +% \null\hspace{1cm}|{\catcode`\'=\active \global\let'\mst@active@math@prime}|\\ +% is awfully wrong when the right quote is made active at begin document by +% some other package (as happens with |babel| for some languages). So \mst +% treats now the right quote with the same method as applied to the other +% characters it makes mathematically active. This uses the macro +% \cs{mst@mathactivate} which is defined later in the package. +% +% Babel does |\let\prim@s\bbl@prim@s| when |'| is made active via its +% services (the czech and slovak languages also store the initial +% version of \cs{prim@s}, else the quote would not work correctly +% when being again of |catcode 12|), and it doesn't matter if \mst is +% loaded before or after this happens, as the \cs{mst@mathactivate} +% does its job only as part of the \cs{everymath} and +% \cs{everydisplay} token lists. +% +% |1.2e| being paranoid, we take precautions against a possibly +% catcode active right quote at +% the time of loading mathastext. +% +% |1.3i| adds \cs{MTactiveprime}. +% +% |1.3j| renames it to \cs{MTprimedoesskip}. Besides, it makes use in the +% preamble of \cs{MTnormalprime} or \cs{MTprimedoesskip}. +% \begin{macrocode} +\newmuskip\mst@prime@muskip %% v 1.2 +\def\mst@prime@skip{.5mu} +\ifmst@italic\ifmst@frenchmath\else\def\mst@prime@skip{0mu}\fi\fi +\def\mst@active@math@prime{\sp\bgroup\mskip\mst@prime@muskip\prim@s} +{\catcode`\'=12 +\gdef\mst@@modifyprime{\mst@mathactivate'{}\mst@active@math@prime}} +\newcommand*\MTnormalprime {\let\mst@modifyprime\@empty } +\newcommand*\MTprimedoesskip {\let\mst@modifyprime\mst@@modifyprime} +\ifmst@subdued + \MTnormalprime +\else + \MTprimedoesskip +\fi +\AtBeginDocument{% + \everymath\expandafter + {\the\everymath \mst@modifyprime \MTnormalprime}% + \everydisplay\expandafter + {\the\everydisplay \mst@modifyprime \MTnormalprime}% +} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \begin{macro}{\MTexistsskip} +% \begin{macro}{\MTforallskip} +% \begin{macro}{\MTprimeskip} +% |1.15e|: These user macros set up the amount of muglue after +% \cs{exists} or \cs{forall}. The normal and +% bold math versions inherit the same skips; these skips are set to +% zero in case of the subdued, or the italic option. Each command +% \cs{Mathastext}\oarg{version\_name} stores the current values in +% the definition of the math version. +% +% |1.2|: \cs{MTprimeskip} added, the silly \cs{@onlypreamble} are removed +% and the macros are modified to have immediate effect in the document, +% independently of their possible use in the preamble for the math +% versions to store values. +% +% Note (september 2013): the names were badly chosen; \cs{MTsetprimeskipto} +% for example would have been a better choice. +% \begin{macrocode} +\newcommand*\MTexistsskip[1]{\edef\mst@exists@skip{#1}% + \mst@exists@muskip\mst@exists@skip\relax} +\newcommand*\MTforallskip[1]{\edef\mst@forall@skip{#1}% + \mst@forall@muskip\mst@forall@skip\relax} +\newcommand*\MTprimeskip[1]{\edef\mst@prime@skip{#1}% + \mst@prime@muskip\mst@prime@skip\relax} +\let\Mathastextexistsskip\MTexistsskip +\let\Mathastextforallskip\MTforallskip +\let\Mathastextprimeskip\MTprimeskip +\let\mathastextexistsskip\MTexistsskip +\let\mathastextforallskip\MTforallskip +\let\mathastextprimeskip\MTprimeskip +% \end{macrocode} +% \end{macro}\end{macro} +% \end{macro} +% \begin{macro}{\resetMathstrut@} +% |2012/12/31|: The |amsmath| macro \cs{resetMathstrut@} is not compatible +% with a +% mathematically active opening parenthesis: it does \\ +% \null\hspace{1cm}|\mathchardef\@tempa\mathcode`\(\relax|\\ +% and is made a part of the hook \cs{every@math@size} inside +% \cs{glb@settings}. +% This is called from \cs{check@mathfonts} which is done in +% particular in \cs{frozen@everymath}, hence \emph{before} (but wait) +% what \mst puts in \cs{everymath}. Also, \cs{glb@settings} is triggered +% by \cs{mathversion} which must be done outside of math mode. +% +% Alas, with things such as |$...\hbox{...$..$..}...$| \mst will have +% already made the parenthesis (mathematically) active. And +% \cs{boldsymbol} from |amsbsy| disables the \cs{@nomath} switch and +% executes \cs{mathversion\{bold\}} directly in math mode. So we have a +% problem with \cs{resetMathstrut@}. +% +% |lualatex-math| replaces \cs{resetMathstrut@} with its own version +% (which also looks at |)|) and no error is signaled when \mst has done +% |\mathcode`(="8000|, but the \cs{Mathstrutbox@} created by \mst is then +% wrong. +% +% The replacement macro avoids a potentially math active |(|. It +% assumes that there is still some appropriate glyph in slot |40| of +% |operators| and it sets the height and depth of \cs{Mathstrutbox@} +% to be large enough to accomodate both this glyph and the one from the +% mathastext font (both in the current math version). If option +% |noparenthesis| was used, we leave everything untouched. +% +% In |1.3a|, |2013/09/04|, the modification is done only at the time of +% \cs{MTnonlettersobeymathxx}. It is canceled by +% \cs{MTnonlettersdonotobeymathxx}. So the code has been moved to these +% macros and here we just store at the begin document the then meaning of +% \cs{resetMathstrut@}, and check also if \cs{MTnonlettersobeymathxx} has +% been invoked in the preamble. +% +% |1.3f| |2015/09/12| issues only an Info message not a Warning, as I am +% becoming aware from another context (etoc) that Warnings are stressful to +% users, in some integrated environments for editing and compiling \LaTeX{} +% source files. +% \begin{macrocode} +\ifmst@noparen\else +\AtBeginDocument{% + \@ifundefined{resetMathstrut@}{% nothing to do, no amsmath + }{% amsmath loaded, and possibly patched by things such as lualatex-math + \let\mst@savedresetMathstrut@\resetMathstrut@ + \PackageInfo{mathastext}{current meaning of amsmath + \string\resetMathstrut@\space saved}% + \ifx\mst@the\the % means that \MTnonlettersobeymathxx was used in preamble + \let\mst@the\@gobble\MTnonlettersobeymathxx + \fi}} +\fi +% \end{macrocode} +% \end{macro} +% +% |1.2| |2012/12/20| does some rather daring \emph{math} activation of +% \verb$; , : ! ? + - = < > ( ) [ ]$ in +% math mode to achieve something I wanted to do since a long time: overcome +% the mutually excluding relation between the variable-family concept and +% the automatic spacing concept. After loading \mst, these characters now +% obey the math alphabets commands but still have the automatic spacing. +% The use as delimiters for those concerned is also ok. +% +% The activation is done via setting the \cs{mathcode} to |"8000| through the +% macro \cs{mst@mathactivate} which in turn is put into the \cs{everymath} +% and \cs{everydisplay} token lists. No character is made active in the sense +% of the \cs{catcode} (the issues with catcode active characters at +% the entrance of the math mode are discussed later),\\ +% \null\hspace{1cm}\fbox{but the concerned characters will now expand in math +% mode to \emph{two} tokens.}\\ +% |1.2c| |2012/12/31|: hence, this current +% implementation puts constraints on the input: |$x^?$| or |$x\mathrel?y$| +% now create errors. They must be input +% |$x^{?}$|, respectively |$x\mathrel{?}y$|.\\ +% \null\hspace{1cm} \fbox{The disactivating +% macro \cs{MTnonlettersdonotobeymathxx} is made the default.} +% +% The mechanism is (even more) off by default for |\{| and |\}| as this +% is not compatible with their use as delimiters (|\lbrace| and |\rbrace| +% should be used instead) but it can be activated for them too. +% +% +% \begin{macro}{\mst@mathactivate} +% |1.2b| |2012/12/30|: there were bad oversights in the |1.2| code +% for \cs{mst@mathactivate} related to the possibility for some +% characters to have been made active (in the sense of the catcode) +% elsewhere (something which often is done by language definition +% files of the |babel| system). The code from |v1.2b| tried to +% provide correct behavior using a prefix called \cs{mst@fork} (its +% definition and its use has since been modified) which let the +% active character expand to the \mst re-definition \emph{only} in +% math mode and \emph{only} if \cs{protect} was +% \cs{@typeset@protect}. This indeed took care of situations such as +% |$\hbox{?}$| with an active |?| or |$\label{eq:1}$| with an active +% |:| (assuming for the latter that things would have worked ok before +% the twiddling by \mst). +% +% |1.2e| |2013/01/09|: alas |$\ref{eq:1}$| still was a problem. +% Indeed in that case the \mst prefix had no means to know it was +% inside a \cs{ref} so it made the character expand to its \mst +% redefinition, which is not acceptable inside a +% |\csname...\endcsname|. What happens with Babel is that it patches +% things such as \cs{ref}, \cs{newlabel},... we can test the +% \cs{if@safe@actives} flag to detect it in that case, but this is +% Babel specific. After having thought hard about this I see no +% general solution except patching all macros such as \cs{ref}...(in +% an imitation of what Babel does). So the final decision is to not +% do anything when the character is catcode active \emph{except} it +% it seems that Babel is behind the scenes. +% +% Incidently, Babel and TikZ are buggy with characters which are +% mathcode actives. For example the combination of |[french]{babel}| +% and |mathtools| with its |centercolon| turns |$:$| into an +% \emph{infinite loop} !! +% +% In the case of Babel the reason is that, generally (but not always, +% the right quote |'| is an exception), the +% \cs{normal@char}\meta{char} fall-back is \cs{string}\meta{char}. +% But this is wrong if the mathcode is |32768|! The fall-back becomes +% the default if the user switches to a language where \meta{char} is +% `normal' and then an infinite loop arises. +% +% As a further example (I am not familiar with other languages from +% the Babel system) with |frenchb| the active |!?;:| expand in math +% mode to \cs{string}|! or ? or ; or :|. This creates an infinite +% loop if the mathcode is |32768|. +% +% For the special case of the right quote |'| when it is made active +% by Babel, its fall-back does not invoke |\string'| so being still +% of mathcode |32768| is not a problem. +% +% I have posted online ^^A on TeX StackExchange +% how Babel should possibly modify +% its definitions and I use this here. I simplify a bit my proposed +% replacement of \cs{normal@char}\meta{char} as the check for +% \cs{protect} is superfluous, I think, having been +% done already at the level of the Babel prefix. +% +% Replacing \cs{user@active}\meta{char} is indeed not enough, and +% \cs{normal@char}\meta{char} also must be changed, because when the +% user switches back to a language where the character is `normal' it +% remains catcode active. The crucial thing is the test of +% \cs{if@safe@actives} in the replacement of the +% \cs{normal@char}\meta{char}, besides of course the test for math +% mode in both replacements. +% +% When the character is not catcode active, then \mst uses the math +% activation method. As the mathcode is not looked at in \cs{edef}, +% \cs{write} or inside |\csname...\endcsname| nothing special needs +% to be done, I think, in terms of protection against premature +% expansion. (I did not know that initially). +% +% So, to recapitulate, \mst will use the mechanism of the active +% |mathcode| if the character is not |catcode| active, and in the +% opposite case will do something only in the context of Babel, +% modifying directly its \cs{user@active}\meta{char} and its +% \cs{normal@char}\meta{char} macros and \fbox{it does NOT then set +% the mathcode to 32768!!}, rather it makes \emph{sure} the character +% is not mathematically active. +% +% As |1.2e| is a bit paranoid it takes precautions against +% the possibility of characters it treats being active at +% the time of its loading. Excepted from the scope of the +% paranoia are the latin letters (that would be crazy!) and +% also |*|, |"| and the left quote |`|. +% +% |1.2f| |2013/01/21| with earlier versions (*) it was important not +% to do twice the business of \cs{mst@mathactivate} (think +% |$\hbox{$?$}$|), so I used (this was a bit wasteful) some sort of +% boolean macro for each character. But now that there are the +% |\mst@the..| prefixes, let's just use them! (don't know why I did +% not think of that earlier; perhaps I had in mind some more general +% character per character customization initially, which I just dropped.) +% +% (*) it is still important to not do twice the thing when the +% character is active, in which case the |babel| macros are patched. +% +% As an aside, |$\hbox{\catcode`?=\active $?$}$| for an |?| which was +% unactive at the first |$| will just make \mst overwrite the +% definition (assumed here to have been done earlier) of an active +% |?|, but the result is that the inner |?| can not be used in +% |\label| or |\ref|. So testing for active characters should be done +% always... many things should be done always... I leave as is. +% +% |1.3i| |2016/01/06| removes a spurious end of line space in +% \cs{mst@mathactivate} (did not show as anyhow done in math mode). +% +% \begin{macro}{\mst@do@az} +% \begin{macro}{\mst@do@AZ} +% \begin{macro}{\mst@addtodo@az} +% \begin{macro}{\mst@addtodo@AZ} +% \begin{macro}{\mst@the} +% |1.2b| |2012/12/28| now that we understand the great advantages of |"8000| +% we do it also for all letters a-z and A-Z to insert automatically the +% italic corrections. See the \hyperref[sec:ic]{discussion} in the user +% manual. Ironically I wrote the code initially for the |italic| option only +% to realize later it was more suitable to using an \emph{upright} text font +% in math mode! So this mathematical activation of the letters is not done if +% the font shape is detected to be |it| or |sl|; to bypass this the command +% \cs{MTicinmath} is provided. +% +% |1.2e| |2013/01/10| corrects a bad oversight of |1.2b| in +% \cs{mst@mathactivate} which made the reproduction of the user manual +% illustrations with |$f_i^i$| impossible. As \cs{mst@mathactivate} was +% originally used also to get the non-letters obey math alphabet while +% maintaining the \TeX{} spacings, it added no extra braces. The braces +% should however be added for expansion of math active letters, in order of +% things like |x^y| to work as expected. (the group braces do not prevent +% ligatures when the letters are arguments to the math alphabet commands, +% the added macros \cs{mst@itcorr} and \cs{mst@before} expanding to +% nothing). +% +% Added note |2016/01/06|: it should be explicitly said that the extra +% |{..}| in |\mst@mathactivate| for letters end up creating |\hbox|'es +% around each letter with its extra skips and explicit italic correction, +% when present. These skips are thus set at natural width and do not add +% any break point. +% +% \begin{macro}{\MTmath-}\begin{macro}{activeletters} +% \begin{macro}{\MTmath-}\begin{macro}{standardletters} +% |1.3| |2013/09/02| extends the use of mathematically active letters to +% allow the user to specify muglue before and after the letter itself (see +% \cs{MTsetmathskips}, below). +% Mathematically active letters were previously used only to add the italic +% correction; the math activation has now been separated and put in +% \cs{MTmathactiveletters}. There is also \cs{MTmathactiveLetters} to allow +% math activation only for the uppercase letters. To cancel the (now default, +% even with option |italic|) math +% activation of letters, there is \cs{MTmathstandardletters}. Version |1.3a| +% removes some silly |\string|'s from the code, which prevented to pass +% macros as first argument to the command. +% \begin{macro}{\MTnonletters-}\begin{macro}{obeymathxx} +% \begin{macro}{\MTnonletters-}\begin{macro}{donotobeymathxx} +% \begin{macro}{\resetMathstrut@} +% These macros are modified in version |1.3a| |2013/09/04| in order to +% cleverly adjust, or not, the |amsmath| \cs{resetMathstrut@}. When used in +% the preamble, they just modify \cs{mst@the}. And there is code at begin +% document to check the status there of \cs{mst@the} and if its meaning is +% \cs{the}, then \cs{MTnonlettersobeymathxx} is activated again to do the +% patch. When used in the body they adjust \cs{resetMathstrut@}. +% +% Notice that the saved meaning is the one at begin document (thus, +% possibly patched by |lualatex-math| --- not anymore since 1.5 of March +% 2016, as |amsmath.sty| now maintained by LaTeX team has modified +% \cs{resetMathStrut@} to make it compatible to Unicode engines) but +% modifications done after that would not be seen in +% |\mst@savedresetMathstrut@|. +% +% The new version of \cs{resetMathStrut@} from LaTeX team release +% |2016/03/03 v2.15a| of |amsmath.sty| is still not compatible with a math +% active opening parenthesis. Hence my patch here is still needed. +% +% At |1.3u| \cs{MTnonlettersobeymathxx} and \cs{MTeasynonlettersobeymathxx} +% are made no-ops under subdued mode. This fixes some bug if for example +% the former was used in preamble or immediately after |\begin{document}| +% making the minus sign math active although the \mst action was +% supposedly subdued. Similarly \cs{MTmathactiveletters} is now a no-op +% if issued under subdued mode in the \emph{normal} or \emph{bold} math +% versions. +% \begin{macrocode} +\newtoks\mst@do@nonletters +\newtoks\mst@do@easynonletters +\newtoks\mst@do@az +\newtoks\mst@do@AZ +\let\mst@the\@gobble +\newcommand*\MTnonlettersdonotobeymathxx{% + \ifx\mst@the\@gobble + \else + \@ifundefined{mst@savedresetMathstrut@}{}{% + \PackageInfo{mathastext}{restoring (for this group or environment) amsmath \string\resetMathstrut@}% + \let\resetMathstrut@\mst@savedresetMathstrut@}% + \fi + \let\mst@the\@gobble +}% +% \end{macrocode} +% |1.3u| adds this check that we are not in a subdued normal or bold math +% version. No need for expandable coding. +% \begin{macrocode} +\def\mst@OnlyIfNotSubdued#1{% + \ifmst@subdued + \def\mst@tmpa{normal}% + \ifx\math@version\mst@tmpa + \else + \def\mst@tmpa{bold}% + \ifx\math@version\mst@tmpa + \else + #1% + \fi + \fi + \else + #1% + \fi +}% +\def\mst@nonlettersobeymathxx{% + \ifx\mst@the\the + \else + \@ifundefined{mst@savedresetMathstrut@}{}{% + \ifmst@symboldelimiters + \def\resetMathstrut@{% + \setbox\z@\hbox{\the\textfont\symmtpsymbol\char40 + \the\textfont\symmtoperatorfont\char40 + \the\textfont\symoperators\char40}% + \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@}% + \else + \def\resetMathstrut@{% + \setbox\z@\hbox{\the\textfont\symmtoperatorfont\char40 + \the\textfont\symoperators\char40}% + \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@}% + \fi + \PackageInfo{mathastext}{\string\resetMathstrut@\space + from amsmath replaced (for this group or environment)}}% + \fi + \let\mst@the\the +}% +\newcommand*\MTnonlettersobeymathxx + {\mst@OnlyIfNotSubdued\mst@nonlettersobeymathxx}% +\newcommand*\MTeasynonlettersdonotobeymathxx{\let\mst@theeasy\@gobble}% +\def\mst@easynonlettersobeymathxx{\let\mst@theeasy\the}% +\newcommand*\MTeasynonlettersobeymathxx + {\mst@OnlyIfNotSubdued\mst@easynonlettersobeymathxx}% +\MTeasynonlettersobeymathxx % no-op here if subdued mode +\def\mst@mathactiveletters{\let\mst@thef\the \let\mst@theF\the}% +\newcommand*\MTmathactiveletters + {\mst@OnlyIfNotSubdued\mst@mathactiveletters}% +\MTmathactiveletters % no-op here if subdued mode +\def\mst@mathactiveLetters{\let\mst@theF\the}% +\newcommand*\MTmathactiveLetters + {\mst@OnlyIfNotSubdued\mst@mathactiveLetters}% +\newcommand*\MTmathstandardletters{\let\mst@thef\@gobble \let\mst@theF\@gobble}% +% \end{macrocode} +% \begin{macro}{\MTicinmath} +% \begin{macro}{\MTICinmath} +% \begin{macro}{\MTnoicinmath} +% \begin{macro}{\MTicalsoinmathxx} +% \cs{MTnoicinmath} can also be used from inside math mode. +% +% \cs{MTicalsoinmathxx} is destined to be used inside +% \cs{mathnormalbold} as I didn't want to add the complication of +% extracting the family number used inside \cs{mathnormalbold} (will +% perhaps come back if I have time to spend on +% |source2e|). Added note |2016/01/06|: this number is a priori simply +% |symmtletterfont+1|. +% +% \cs{MTicinmath} can also be used inside math mode, to revert an +% earlier \cs{MTnoicinmath} from inside the same math group: the math mode +% had to be entered with the math activation of letters allowed. +% +% |1.3i| |2016/01/06|: For some reason which I have now forgotten I did +% until now: +% \begin{verbatim} +% \def\mst@itcorr{\ifnum\fam=\m@ne\/\else\ifnum\fam=\symmtletterfont\/\fi\fi}% +% \end{verbatim} +% hence italic corrections were also applied inside \cs{mathnormal} (for +% upright fonts; \cs{mathnormalbold} math alphabet was not treated like +% \cs{mathnormal}). I now drop this to be more in sync with the handling +% of the extra skips around letters. Everything gets suppressed inside +% all math alphabets, allowing ligatures, even for \cs{mathnormal}. +% +% \begin{macrocode} +\newcommand*\MTicinmath{% + \MTmathactiveletters + \def\mst@itcorr{\ifnum\fam=\m@ne\/\fi}% + \let\mst@ITcorr\mst@itcorr} +\newcommand*\MTICinmath{% + \MTmathactiveLetters + \def\mst@ITcorr{\ifnum\fam=\m@ne\/\fi}} +\newcommand*\MTnoicinmath{\let\mst@itcorr\@empty\let\mst@ITcorr\@empty} +\newcommand*\MTnoICinmath{\let\mst@ITcorr\@empty} +\newcommand*\MTicalsoinmathxx{% + \ifx\mst@itcorr\@empty\else\def\mst@itcorr{\/}\fi + \ifx\mst@ITcorr\@empty\else\def\mst@ITcorr{\/}\fi} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \begin{macro}{\MTsetmathskips} +% \begin{macro}{\MTunsetmathskips} +% |1.3| |2013/09/02|: user level command to specify extra spaces in math mode +% around the letters (only the 7bit a,b,..,z and A,B,..,Z). First parameter is +% the letter, second is the math skip to be inserted before, and third the +% skip to be inserted after; for example \cs{thickmuskip} or explicitly +% |0.1mu|. +% +% For this, letters are made mathematically active. This is now the package +% default (version |1.2| did this only in the absence of option |italic|, or +% more precisely when the font used was not of shape |it| or |sl|). But if +% \cs{MTsetmathskips} has not been used for that letter, the only effect of +% the math activation is, as in |1.2|, to add the italic correction +% automatically, except when the font shape is detected to be |it| or |sl|; in +% these latter cases, although mathematically active, the letter acts in the +% standard way. +% +% The command \cs{MTmathstandardletters} turns off math activation and its +% effects for all letters. +% +% Ligatures within the argument of a math alphabet command are impeached by +% skips; so \cs{MTunsetmathskips} is provided to cancel the skips for one +% specific letter (|f| for example). +% +% |1.3a| |2013/09/04|: I strangely had |\string#1| inside \cs{MTsetmathskips}. +% Phobic of catcode active letters... but with |\string| one needs some +% |\expandafter| to use \cs{MTsetmathskips} in an |\@for| loop for example. It +% is better to allow the first argument to be a macro or anything expanding to +% a letter, and to not be paranoid about improbable catcode active letters +% (the user just has to tame them at the time of the \cs{MTsetmathskip}) so I +% take out these |\string|'s. +% +% |1.3i| |2016/01/06|: the extra skips are suppressed for the arguments of +% math alphabet commands. This applies in particular for amsmath's +% \cs{DeclareMathOperator}. +% +% \begin{macrocode} +\newcommand*\MTsetmathskips[3]{% + \@namedef{mst@before#1}{\ifnum\fam=\m@ne\mskip#2\relax\fi }% + \@namedef{mst@after#1}{\ifnum\fam=\m@ne\mskip#3\relax\fi }% +} +\newcommand*\MTunsetmathskips[1]{% + \@namedef{mst@before#1}{}% + \@namedef{mst@after#1}{}% +} +% \end{macrocode} +% \end{macro}\end{macro} +% \begin{macro}{\mst@mathactivate} +% \begin{macro}{\mst@addtodo@nonletters} +% \begin{macro}{\mst@addtodo@easynonletters} +% \begin{macro}{\mst@addtodo@az} +% \begin{macro}{\mst@addtodo@AZ} +% Added note |2016/01/06|: +% Notice that the initially |\relax| tokens \verb+\mst@[before|after]@+ +% formed with |\csname...\endcsname| do not modify TeX's math layout: +% |{\relax f\relax}| is like |f| (also for ligatures inside |\mathrm| for +% example). +% \begin{macrocode} +\def\mst@magic@v #1#2#3#4#5{#1#3#4} +\def\mst@magic@vi #1#2#3#4#5#6{#1#2#4#5} +\def\mst@fork{\ifmmode\mst@magic@v\fi\@thirdofthree} +\def\mst@safefork{\ifmmode\if@safe@actives\else\mst@magic@vi\fi\fi\@thirdofthree} +\def\mst@do@activecase#1#2#3{% #1 is a category 11 or 12 character token + \@ifundefined{active@char#1}{}{% + \ifcat #1a\mathcode`#1=#2\else + \ifx\relax #2\relax\mathcode`#1=`#1 \else\mathcode`#1=#3\fi\fi + \expandafter\expandafter\expandafter\let\expandafter\expandafter + \csname mst@orig@user@active#1\endcsname + \csname user@active#1\endcsname + \expandafter\expandafter\expandafter\let\expandafter\expandafter + \csname mst@orig@normal@char#1\endcsname + \csname normal@char#1\endcsname + \ifcat #1a% + \expandafter\edef\csname user@active#1\endcsname + {\noexpand\mst@fork {{#2\noexpand#3}}{}\expandafter + \noexpand\csname mst@orig@user@active#1\endcsname + }% + \expandafter\edef\csname normal@char#1\endcsname + {\noexpand\mst@safefork {{#2\noexpand#3}}{}\expandafter + \noexpand\csname mst@orig@normal@char#1\endcsname + }% + \else + \expandafter\edef\csname user@active#1\endcsname + {\noexpand\mst@fork {#2}\noexpand#3\expandafter + \noexpand\csname mst@orig@user@active#1\endcsname + }% + \expandafter\edef\csname normal@char#1\endcsname + {\noexpand\mst@safefork {#2}\noexpand#3\expandafter + \noexpand\csname mst@orig@normal@char#1\endcsname + }% + \fi}} +\begingroup + \catcode`\~=\active + \def\x{\endgroup + \def\mst@mathactivate##1##2##3{% ##1 guaranteed of cat 11 or 12 + \begingroup + \lccode`~=`##1 + \lccode`##1=`##1 + \lowercase{\endgroup + \ifnum\catcode`##1=\active + \mst@do@activecase ##1{##2}##3% + % careful as ##2 is empty in the asterisk and + % prime case! + \else + \mathcode`##1="8000 + % version 1.3 adds the possibility of extra skips around letters, + % (only if non catcode active at the time of use). + \ifcat##1a\edef~{% extra braces for a^b for example + {\expandafter\noexpand\csname mst@before##1\endcsname + ##2\noexpand##3% + \expandafter\noexpand\csname mst@after##1\endcsname}}% + \else\def~{##2##3}\fi + \fi}}} +\x +\def\mst@addtodo@nonletters#1#2#3{% + % #1 will be of cat 11 or 12. + % #2 is empty for asterisk and right quote + \mst@do@nonletters\expandafter + {\the\mst@do@nonletters \mst@mathactivate#1{#2}#3}% +} +\def\mst@addtodo@easynonletters#1#2{% #1 is a one char control sequence + \mst@do@easynonletters\expandafter{\the\mst@do@easynonletters\mathcode`#1=#2}% +} +\def\mst@addtodo@az#1#2{% + \mst@do@az\expandafter{\the\mst@do@az\mst@mathactivate#1#2\mst@itcorr} +} +\def\mst@addtodo@AZ#1#2{% + \mst@do@AZ\expandafter{\the\mst@do@AZ\mst@mathactivate#1#2\mst@ITcorr}% +} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \begin{macro}{\newmcodes@} +% \begin{macro}{\mst@newmcodes@} +% \begin{macro}{\MTresetnewmcodes} +% \begin{macro}{\MTcustomizenewmcodes} +% |1.15d|: the \cs{newmcodes@} amsmath macro causes an error in Unicode engines as soon +% someone assigns a Unicode mathcode to the minus sign, and then makes a +% \cs{DeclareMathOperator} declaration. Furthermore it hard-codes the font +% family 0 as being the one to be used. Moreover just putting the concerned +% signs |-|, |:|, |.|, |\| ,|'|, |*| inside braces emulates enough the +% behavior (although the tick will give a prime). +% +% |1.3|: now tests if `basic' option was used. +% +% |1.3d|: I should re-examine the situation with |\newmcodes@|. In the +% meantime its relaxification will not be done if lualatex-math is +% loaded. And the whole thing is put at begin document. +% +% |1.3m|: |lualatex-math 1.5| n'a pas modifié son traitement de |\newmcodes@| +% mais par contre a supprimé le patch de \cs{resetMathstrut@}. Mais la date +% de release est restée à |2015/09/22| (date de |1.4a|) au lieu de quelque +% chose comme |2016/03/13| (date pour l'annonce sur CTAN). Il faudra suivre +% l'évolution future de |amsmath.sty| maintenant assurée par D.C. +% +% |1.3n 2016/04/22|: there is no more a patch of |\newmcodes@| by +% |lualatex-math 1.6| |(2016/04/16)|, as |amsmath 2016/03/10 v2.15b| has now +% a version compatible with \LuaLaTeX. +% +% My very radical |\let\newmcodes@\relax| was only a temporary measure I +% adopted for lack of time on October 13, 2012, and apart from avoiding to +% do that in case |lualatex-math| was detected, I never came back... finally +% I handle it myself for |1.3n|. The remaining problem of this macro (now +% that it does not anymore crash |lualatex| or vice versa) is that (also +% with |amsmath| version |2016/03/10 v2.15b|) it hardcodes the font used. +% The aim of the macro is to modify the type of spacing affected to symbols +% |'|, |*|, |.|, |-|, |/|, |:|, in case they are used in operator names. +% +% \begin{itemize} +% \item As I don't want to monopolize a count register only for +% computations, let's just be mean if \eTeX\ not there. +% \item \mst makes (or not, depending on commands issued by the user) these +% characters math active (the right tick already is), which complicates +% recovery of former mathcode. We have mathchar type \emph{macros}, but +% then the complication is in diverging behaviours of the engines: +% |\numexpr\mst@varfam@minus\relax| works with \LuaTeX, not with \XeTeX. +% \item the |*| must presumably really be the non-lowered text glyph. +% \item for the |-| I hesitated but do use the hyphen in the end. +% \item seems I simply don't understand what the amsmath code does with +% \cs{std@minus}. It is used in \cs{relbar} and it escapes me why +% \cs{newmcodes@} would ever want to redefine it, and more importantly why +% on earth it tests the mathcode of |-| for that ? yes, \cs{std@minus} is +% defined (at begin document) using the mathcode of |-|, but what's the +% connexion to \cs{newmcodes@} ?? Any way \mst defines \cs{relbar} with +% \cs{mst@minus@sign}. Thus I just drop this conditional. +% \item things are complicated by the options such as |nominus|, +% |noparenthesis|. +% \item the \cs{newmcodes@} macro is anyhow assuming that if a new math font +% is used it occupies math groups |0| and |1| !! very bad; fixing it in +% passing if the character has not been handled by \mst could be +% envisioned, but that's not \mst's job. +% \item years go by, and I remain as baffled as ever about the story of +% ``more than 16 math families''. I will not test again, but I am pretty +% sure that \cs{DeclareMathSymbol} does not work with more than 16 +% families, thus when I try to be a good boy and use \cs{Umathcode} syntax +% with |symmtoperatorfont| I am perhaps doing unnecessary efforts. +% \item I noticed that \LuaLaTeX\ does not apply the ``TeX Ligature'' (bad +% name) regarding the right tick APOSTROPHE being transformed into RIGHT +% SINGLE QUOTATION MARK in math mode, but \XeLaTeX\ does. From the point +% of view of \mst, the behaviour of \XeLaTeX\ is the coherent one. It +% appears that \LuaLaTeX\ use in math mode of a text font does not obey +% the set features.^^A like this +%^^A \url{http://tex.stackexchange.com/questions/208688/oldstylefigure-issue-with-lualatex-and-mathastext} +%^^A perhaps illustrates. +% I opened a ticket at +% \url{https://github.com/wspr/fontspec/issues/238}, but as usual it is +% hard to figure out the best place where to report font matters. +% \emph{This item might be obsolete -- not checked (1.3q).} +% \item Some hesitation about what to do under option |symboldelimiters|. I +% temporarily used |\symmtpsymbol|, except for the right quote and for the +% hyphen, but finally I drop that and use |\symmtoperatorfont| always. +% (after testing how it looked like). +% \end{itemize} +% All in all this is a great deal of trouble and I understand I postponed back +% in 2012! I spent some hours on this small thing, with consequent testing and +% for example this TeX Ligature issue with Unicode engines. +% \begin{macrocode} +\ifmst@basic\else +\ifx\numexpr\undefined +\else + \ifmst@XeOrLua + \AtBeginDocument {% + \ifx\newmcodes@\@undefined\else + \edef\mst@newmcodes@{% + \mst@Umathcode `\noexpand\' 0 \symmtoperatorfont 39\relax + \ifmst@asterisk + \mst@Umathcode `\noexpand\* 0 \symmtoperatorfont 42\relax + \else\mathcode`\noexpand\* 42 + \fi + \ifmst@nopunct\mathcode `\noexpand\."613A \mathcode `\noexpand\: "603A + \else + \mst@Umathcode `\noexpand\. 6 \symmtoperatorfont 46\relax + \mst@Umathcode `\noexpand\: 6 \symmtoperatorfont 58\relax + \fi + \ifmst@nominus\mathcode`\noexpand\- 45 + \else + \mst@Umathcode `\noexpand\- 0 \symmtoperatorfont 45\relax + \fi + \ifmst@noparen\mathcode `\noexpand\/ 47 + \else + \mst@Umathcode `\noexpand\/ 0 \symmtoperatorfont 47\relax + \fi + }% + \let\mst@originalnewmcodes@\newmcodes@ + \fi + } + \else + \AtBeginDocument {% + \ifx\newmcodes@\@undefined\else + \edef\mst@newmcodes@{% + \mathcode`\noexpand\' \the\numexpr\symmtoperatorfont*\@cclvi+39\relax + \mathcode`\noexpand\* + \the\numexpr\ifmst@asterisk\symmtoperatorfont*\@cclvi\fi+42\relax + \ifmst@nopunct\mathcode `\noexpand\."613A \mathcode `\noexpand\: "603A + \else + \mathcode`\noexpand\. \the\numexpr\mst@varfam@dot-"1000\relax + \mathcode`\noexpand\: \the\numexpr\mst@varfam@colon-"1000\relax + \fi + \mathcode`\noexpand\- + \the\numexpr\unless\ifmst@nominus\symmtoperatorfont*\@cclvi\fi+45\relax + \mathcode`\noexpand\/ + \the\numexpr\unless\ifmst@noparen\symmtoperatorfont*\@cclvi\fi+47\relax\relax + }% + \let\mst@originalnewmcodes@\newmcodes@ + \fi + } + \fi +\fi\fi +\newcommand*\MTresetnewmcodes{\ifx\mst@originalnewmcodes@\undefined\else + \let\newmcodes@\mst@originalnewmcodes@\fi} +\newcommand*\MTcustomizenewmcodes{\ifx\mst@originalnewmcodes@\undefined\else + \let\newmcodes@\mst@newmcodes@\fi} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro} +% \begin{macro}{mtoperatorfont} +% Declaration of the current default font as our math +% font. The characteristics of the used font can be +% changed by a user call to the macros \cs{Mathastext} or +% \cs{Mathastextwilluse}, which will be defined next. We +% will also make one internal call to \cs{Mathastext} to +% set up the normal and bold math versions, so we will +% also employ \cs{SetSymbolFont} later. +% \begin{macrocode} +\DeclareSymbolFont{mtoperatorfont}{\mst@enc}{\mst@fam}{\mst@ser}{\mst@opsh} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\operator@font} +% We modify this \LaTeX{} internal variable in order for the +% predefined \cs{cos}, \cs{sin}, etc\dots to be typeset with the +% |mathastext| font. This will also work for things declared +% through the |amsmath| package command +% \cs{DeclareMathOperator}. The alternative would have been to +% redefine the `operators' Math Symbol Font. Obviously people +% who expect that \cs{operator@font} will always refer to the +% `operators' math font might be in for a surprise\dots{} well, +% we'll see. +% \begin{macro}{\MTmathoperators-}\begin{macro}{obeymathxx} +% \begin{macro}{\MTmathoperators-}\begin{macro}{donot-}\begin{macro}{obeymathxx} +% |1.2|: rather than just replacing \cs{symoperators} by +% \cs{symmtoperatorfont} I add a modification which makes the +% declared operator names sensitive to the math alphabets... ouh le +% vilain! +% \begin{macrocode} +\newcommand*{\MTmathoperatorsobeymathxx} +{\def\operator@font{\mathgroup\ifnum\fam=\m@ne\symmtoperatorfont\else\fam\fi}} +\newcommand*{\MTmathoperatorsdonotobeymathxx} +{\def\operator@font{\mathgroup\symmtoperatorfont}} +\MTmathoperatorsobeymathxx +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% \begin{macro}{mtletterfont} +% At version |1.1|, we add the possibility to mimick the standard +% behavior, that is to have italic letters and upright +% digits. Thanks to Tariq~\textsc{Perwez} and +% Kevin~\textsc{Klement} who asked for such a feature. +% \begin{macrocode} +\DeclareSymbolFont{mtletterfont}{\mst@enc}{\mst@fam}{\mst@ser}{\mst@ltsh} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\MTfixmathfonts} +% There is a long-standing issue +% \url{https://github.com/lualatex/luaotfload/issues/204} on \LuaLaTeX{} not +% applying OpenType features in math mode (this impacts |\url| macro too, as +% it uses math mode.) Lua\TeX{} has two modes for handling of OpenType +% fonts, the default in text being to use the |node| mode, and this mode is +% non-working in math, thus \mst needs to force use of |base| mode. Else one +% sees old style figures where one does not expect them, or the opposite, +% depending on the default font feature. +%^^A see for example \url{http://tex.stackexchange.com/questions/208688/oldstylefigure-issue-with-lualatex-and-mathastext/277628}. +% +% Once we know the cause, the fix is relatively easy. I will go for the +% |\everymath| way, because I don't want to dwelve at all with the details +% of \LaTeX's handling of math fonts, of size changes, of math versions +% etc... perhaps in the future \LaTeX{} will fix the issue upstream by modifying +% \cs{DeclareSymbolFont} under \LuaLaTeX{} + |luaotfload| regime, then the +% present patch by \mst will be unneeded. Naturally, here we care only about +% the two maths fonts used by \mst: |mtoperatorfont| and |mtletterfont|. +% +% For the |\url| situation, I have posted online a patch. +%^^A \url{http://tex.stackexchange.com/questions/264206/cant-get-oldstyle-figures-in-url-with-lualatex}. +% +% Not all is resolved, as I comment online +%^^A \url{http://tex.stackexchange.com/a/307585/4686} and at +% at \url{https://github.com/lualatex/luaotfload/issues/204#issuecomment-216465680} +% that with |TeX Gyre Termes| for example I can not get simultaneously Old +% Style and Tabular Figures to work in math mode, although the font name as +% constructed by my patch (which is like the code below, only simpler as we +% only have to consider |\textfont0|) is the correct one. Similarly with +% |Vollkorn|: I can then not get the two features |lnum| and |tnum| to work +% simultaneously when specified with |mode=base|. It does work with +% |mode=node| but this mode ``does not work in math mode.'' +% +% Done for |1.3o| of |2016/05/03|. +% +% |1.3p| renames the macro to \cs{MTfixmathfonts} for public access. +% \begin{macrocode} +\begingroup +\catcode`N 12 +\catcode`O 12 +\catcode`D 12 +\catcode`E 12 +\lowercase{\gdef\mst@fixmathfonts@ #1=NODE;#2#3\relax #4\@empty #5}% + {\ifx#2\empty\else\font\mst@mathfont=#1=base;#2#3\relax#5=\mst@mathfont\fi} +\lowercase{\gdef\MTfixmathfonts +{\expandafter\mst@fixmathfonts@ + \fontname\textfont\symmtoperatorfont\relax\relax=NODE;\empty\relax\@empty + {\textfont\symmtoperatorfont}% + \expandafter\mst@fixmathfonts@ + \fontname\scriptfont\symmtoperatorfont\relax\relax=NODE;\empty\relax\@empty + {\scriptfont\symmtoperatorfont}% + \expandafter\mst@fixmathfonts@ + \fontname\scriptscriptfont\symmtoperatorfont\relax\relax=NODE;\empty\relax\@empty + {\scriptscriptfont\symmtoperatorfont}% + \expandafter\mst@fixmathfonts@ + \fontname\textfont\symmtletterfont\relax\relax=NODE;\empty\relax\@empty + {\textfont\symmtletterfont}% + \expandafter\mst@fixmathfonts@ + \fontname\scriptfont\symmtletterfont\relax\relax=NODE;\empty\relax\@empty + {\scriptfont\symmtletterfont}% + \expandafter\mst@fixmathfonts@ + \fontname\scriptscriptfont\symmtletterfont\relax\relax=NODE;\empty\relax\@empty + {\scriptscriptfont\symmtletterfont}% + }% +}% +\endgroup +\ifmst@LuaTeX + \everymath\expandafter{\the\everymath\mst@fixmathfonts}% + \everydisplay\expandafter{\the\everydisplay\mst@fixmathfonts}% +\fi +\newcommand*\MTfixfonts{\let\mst@fixmathfonts\MTfixmathfonts}% +\newcommand*\MTdonotfixfonts{\let\mst@fixmathfonts\empty}% +\MTfixfonts +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Mathnormal} +% \begin{macro}{\Mathrm} +% \begin{macro}{\Mathbf} +% \begin{macro}{\Mathit} +% \begin{macro}{\Mathsf} +% \begin{macro}{\Mathtt} +% \begin{macro}{\mathnormalbold} +% We redefine the default normal, rm, bf, it, sf, and tt alphabets, +% but this will be done via |\renewcommand{\mathrm}{\Mathrm}| etc\dots +% and (|1.15f|) the previous status of the math alphabets is recorded for the +% sake of the |subdued| option. +% +% We follow the standard \LaTeX{} behavior for \cs{mathbf}, which is +% to pick up the bold series of the roman font (digits and operator +% names). +% +% We will access (if no option is passed for Greek) the \cs{omicron} +% via \cs{mathnormal}. But unfortunately the |fourier| package with the +% upright option does not have an upright omicron obtainable by simply +% typing \cs{mathnormal}|{o}|. So if |fourier| is loaded we use +% \cs{mathrm} and not \cs{mathnormal}. +% \begin{macrocode} +\let\mst@alph@omicron\mathnormal +\@ifpackageloaded{fourier}{\ifsloped\else\let\mst@alph@omicron\mathrm\fi}{} +\DeclareSymbolFontAlphabet{\Mathnormal}{mtletterfont} +\DeclareSymbolFontAlphabet{\Mathrm}{mtoperatorfont} +\ifmst@nonormalbold\else + \DeclareMathAlphabet{\mathnormalbold}{\mst@enc}{\mst@fam}{\mst@bold}{\mst@ltsh} +\fi +\ifmst@defaultbf\else + \DeclareMathAlphabet{\Mathbf}{\mst@enc}{\mst@fam}{\mst@bold}{\mst@opsh} +\fi +\ifmst@defaultit\else + \DeclareMathAlphabet{\Mathit}{\mst@enc}{\mst@fam}{\mst@ser}{\itdefault} +\fi +\ifmst@defaultsf\else + \DeclareMathAlphabet{\Mathsf}{\mst@enc}{\sfdefault}{\mst@ser}{\mst@opsh} +\fi +\ifmst@defaulttt\else + \DeclareMathAlphabet{\Mathtt}{\mst@enc}{\ttdefault}{\mst@ser}{\mst@opsh} +\fi +\let\mst@original@normal\mathnormal +\let\mst@original@rm\mathrm +\let\mst@original@bf\mathbf +\let\mst@original@it\mathit +\let\mst@original@sf\mathsf +\let\mst@original@tt\mathtt +\def\mst@restorealphabets{% for subdued + \let\mathnormal\mst@original@normal + \let\mathrm\mst@original@rm + \let\mathbf\mst@original@bf + \let\mathit\mst@original@it + \let\mathsf\mst@original@sf + \let\mathtt\mst@original@tt} +\def\mst@setalphabets{% + \ifmst@defaultnormal\else\renewcommand{\mathnormal}{\Mathnormal}\fi + \ifmst@defaultrm\else\renewcommand{\mathrm}{\Mathrm}\fi + \ifmst@defaultbf\else\renewcommand{\mathbf}{\Mathbf}\fi + \ifmst@defaultit\else\renewcommand{\mathit}{\Mathit}\fi + \ifmst@defaultsf\else\renewcommand{\mathsf}{\Mathsf}\fi + \ifmst@defaulttt\else\renewcommand{\mathtt}{\Mathtt}\fi} +\ifmst@subdued\else\mst@setalphabets\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{LGRgreek} +% \begin{macro}{selfGreek} +% \begin{macro}{mtlgrfontupper} +% \begin{macro}{mtlgrfontlower} +% \begin{macro}{mtselfGreekfont} +% |1.14b|: We can not move the \cs{DeclareSymbolFont} to the +% \cs{Mathastext} macro because it resets the font family in *all* +% math versions, and some could have been defined by the user with +% previous calls to \cs{Mathastext}. So we have to have them here. +% The problem is that at this stage it is impossible to know if we +% really need (in the case of LGRgreek) two separate shapes for +% upper and lowercase, and (in the case of selfGreek) a shape +% distinct from the one used in |mtoperatorfont|. So I opted in the +% end for declaring possibly one too many font. To achieve more +% economy the only way would be to keep cumulative track of all +% previously declared math versions and to redeclare appropriately +% the LGR or self greek fonts at each call to \cs{Mathastext} (with +% no optional argument): a bit painful, and as I am possibly the +% sole user in the world of this possibility of multiple math +% versions with this package. Also the advantage to systematically +% allocate a font for the selfGreek option is that we can force the +% use of the OT1 encoding. +% +% First we establish the cumulative effect of the greek related options. +% +% |1.15c| introduces some possibilities to change the shapes of Greek letters +% in each math versions, and even the Greek font (in LGR encoding). The +% commands \cs{MTitgreek} etc... will be used in-between calls to +% \cs{Mathastext} and re-adjust the shapes. And the command \cs{MTgreekfont} +% changes the Greek font family. +% \begin{macrocode} +\def\mst@update@greeksh{ + \def\mst@greek@lsh{\mst@ltsh} %% default behavior + \def\mst@greek@ush{\mst@opsh} + \ifmst@itgreek\def\mst@greek@lsh{\itdefault} + \def\mst@greek@ush{\itdefault}\fi + \ifmst@upgreek\def\mst@greek@lsh{\updefault} + \def\mst@greek@ush{\updefault}\fi + \ifmst@frenchmath + \ifmst@itgreek\else + \ifmst@upgreek\else + \def\mst@greek@lsh{\mst@opsh} + \def\mst@greek@ush{\mst@opsh} + \fi\fi + \fi + \ifcase\mst@greek@select + \or\def\mst@greek@ush{\itdefault} + \or\def\mst@greek@ush{\updefault} + \fi} +\mst@update@greeksh +\ifmst@LGRgreek + \DeclareFontEncoding{LGR}{}{} + \DeclareSymbolFont{mtlgrfontlower}{LGR}{\mst@fam}{\mst@ser}{\mst@greek@lsh} + \DeclareSymbolFont{mtlgrfontupper}{LGR}{\mst@fam}{\mst@ser}{\mst@greek@ush} +\else +\ifmst@selfGreek + \DeclareSymbolFont{mtselfGreekfont}{OT1}{\mst@fam}{\mst@ser}{\mst@greek@ush} +\fi\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{mteulervm} +% \begin{macro}{\MathEuler} +% \begin{macro}{\MathEulerBold} +% In case we need the Euler font, we declare it here. It will use +% |uzeur.fd| from the |eulervm| package of Walter~\textsc{Schmidt} +% \begin{macrocode} +\ifmst@needeuler\typeout{** will use Euler font; command \string\MTEulerScale} +\DeclareSymbolFont{mteulervm}{U}{zeur}{m}{n} +\DeclareSymbolFontAlphabet{\MathEuler}{mteulervm} +\DeclareMathAlphabet{\MathEulerBold}{U}{zeur}{\mst@bold}{n} +\fi +\newcommand*\MTEulerScale[1]{\edef\zeu@Scale{#1}} +\let\MathastextEulerScale\MTEulerScale +% \end{macrocode} +% \LaTeXe{} has a strange initial configuration where the +% capital Greek letters are of type |mathalpha|, but the +% lower Greek letters of type |mathord|, so that \cs{mathbf} +% does not act on them, although lowercase Greek letters and +% Latin letters are from the same font. This is because +% \cs{mathbf} is set up to be like a bold version of +% \cs{mathrm}, and \cs{mathrm} uses the `operators' font, by +% default |cmr|, where there are NO lowercase greek +% letters. This set-up is ok for the Capital Greek letters +% which are together with the Latin letters in both |cmmi| +% and |cmr|. +% +% The package eulervm sets the lowercase Greek letters to be +% of type |mathalpha|, the default \cs{mathbf} and +% \cs{mathrm} will act wierdly on them, but a \cs{mathbold} +% is defined which will use the bold series of the Euler +% roman font, it gives something coherent for Latin and +% Greek \emph{lowercase} letters, and this is possible +% because the same font contains upright forms for them all. +% +% Here in |mathastext|, Latin letters and Greek letters (lower and upper case) +% must be (generally) assumed to come from two different fonts, as a result the +% standard \cs{mathbf} (and \cs{mathrm}) will give weird results when used for +% Greek letters. We could coerce \cs{mathbf} to do something reasonable (cf +% |http://tug.org/pipermail/texhax/2011-January/016605.html|) but at this time +% |30-01-2011 09:42:27 CET| I decided I would not try to implement it here. I +% prefer to respect the default things. +% +% I followed the simpler idea of the |eulervm| package and +% defineed \cs{MathEuler} and \cs{MathEulerBold} alphabet +% commands (the |eulervm| package does this only for the +% bold font). +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{mtpsymbol} +% \begin{macro}{\MathPSymbol} +% In case we need the Symbol font, we declare it here. The macro +% \cs{psy@scale} will be used to scale the font (see at the +% very end of this file). +% \begin{macrocode} +\ifmst@needsymbol\typeout{** will use Symbol font; command \string\MTSymbolScale} + \def\psy@scale{1} + \DeclareSymbolFont{mtpsymbol}{U}{psy}{m}{n} + \DeclareSymbolFontAlphabet{\MathPSymbol}{mtpsymbol} +\AtBeginDocument{% + \DeclareFontFamily{U}{psy}{}% + \DeclareFontShape{U}{psy}{m}{n}{<->s*[\psy@scale] psyr}{}% +} +\fi +\newcommand*\MTSymbolScale[1]{\edef\psy@scale{#1}} +\let\MathastextSymbolScale\MTSymbolScale +% \end{macrocode} +% I did not choose for name \cs{MathSymbol} as this may +% be defined somewhere for another thing. There is no bold +% for the postscript Symbol font distributed with the +% \LaTeXe{} |psnffs| core package. +% \end{macro} +% \end{macro} +% \begin{macro}{\pmvec} +% Definition of a poor man version of the \cs{vec} accent +% \begin{macrocode} +\DeclareRobustCommand*\pmvec[1]{\mathord{\stackrel{\raisebox{-.5ex}% +{\tiny\boldmath$\mathord{\rightarrow}$}}{{}#1}}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\fouriervec} +% The glyph is taken from the Fourier font of +% Michel~\textsc{Bovani}. Note: (oct 2012) I should not allocate an +% entire symbol font just for one glyph! But I have not given any +% serious thought to what one can do to simulate a math accent +% without doing such a wasteful thing. +% \begin{macrocode} +\ifmst@fouriervec + \DeclareFontEncoding{FML}{}{} + \DeclareFontSubstitution{FML}{futm}{m}{it} + \DeclareSymbolFont{mathastextfourier}{FML}{futm}{m}{it} + \SetSymbolFont{mathastextfourier}{bold}{FML}{futm}{b}{it} + \DeclareMathAccent{\fouriervec}{\mathord}{mathastextfourier}{"7E} +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\MTencoding} +% \begin{macro}{\MTfamily} +% \begin{macro}{\MTseries} +% \begin{macro}{\MTshape} +% \begin{macro}{\MTboldvariant} +% \begin{macro}{\MTlettershape} +% Some public macros to modify our private internals, and +% we will use them also ourself. +% +% In version |1.1| we add the possibility to have two +% distinct font shapes for letters and digits. So in fact +% we could as well have two really unrelated fonts but +% this is really not the spirit of the package. +% +% Note that using these macros in the preamble allows \cs{Mathastext} +% to set up math versions with a given font for math mode, and at the +% same time not modifying the \cs{familydefault} or \cs{romandefault} +% etc\dots +% \begin{macrocode} +\newcommand*\MTencoding[1]{\def\mst@enc{#1}} +\newcommand*\MTfamily[1]{\def\mst@fam{#1}} +\newcommand*\MTseries[1]{\def\mst@ser{#1}} +\newcommand*\MTshape[1]{\def\mst@opsh{#1} + \ifmst@italic\else\def\mst@ltsh{#1}\fi} +\newcommand*\MTboldvariant[1]{\def\mst@bold{#1}} +\newcommand*\MTlettershape[1]{\def\mst@ltsh{#1}} +\let\Mathastextencoding\MTencoding +\let\Mathastextfamily\MTfamily +\let\Mathastextseries\MTseries +\let\Mathastextshape\MTshape +\let\Mathastextboldvariant\MTboldvariant +\let\Mathastextlettershape\MTlettershape +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\MTitgreek} +% \begin{macro}{\MTupgreek} +% \begin{macro}{\MTitGreek} +% \begin{macro}{\MTupGreek} +% \begin{macro}{\MTgreekfont} +% |1.15c|: These new macros can be used in-between calls to \cs{Mathastext}. +% They reset the shapes for Greek letters (applies to LGRgreek(s) and +% selfGreek(s) options). The \cs{MTgreekfont} presupposes either LGRgreek or +% selfGreek. |\MTgreekfont{\familydefault}| acts like turning on LGRgreeks or +% selfGreeks. +% \begin{macrocode} + \newcommand*\MTitgreek{% +\mst@itgreektrue\mst@upgreekfalse\def\mst@greek@select{0}} + \newcommand*\MTupgreek{% +\mst@upgreektrue\mst@itgreekfalse\def\mst@greek@select{0}} + \newcommand*\MTitGreek{\def\mst@greek@select{1}} + \newcommand*\MTupGreek{\def\mst@greek@select{2}} +\let\Mathastextitgreek\MTitgreek +\let\Mathastextupgreek\MTupgreek +\let\MathastextitGreek\MTitGreek +\let\MathastextupGreek\MTupGreek + \newcommand*\MTgreekfont[1]{\def\mst@greekfont{#1}} +\let\Mathastextgreekfont\MTgreekfont +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% At (long...) last we now change the font for the letters of the +% latin alphabet. In version |1.1|, Latin letters have their own font +% (shape). +% +% |1.2b| initiated the use of mathematically active letters to insert the italic +% corrections. With version |1.3| the use of math active letters is also for +% extra muglue added before and after the letters. Use of |\@for| to shorten the +% code initiated with release |1.3|. +% \begin{macrocode} +\def\mst@DeclareMathLetter #1{% + \DeclareMathSymbol {#1}{\mathalpha}{mtletterfont}{`#1}% + \expandafter + \DeclareMathSymbol \csname mst@#1\endcsname{\mathalpha}{mtletterfont}{`#1}% + \expandafter\mst@addtodo@az\expandafter #1\csname mst@#1\endcsname +}% +\@tfor\mst@tmp:=abcdefghijklmnopqrstuvwxyz\do + {\expandafter\mst@DeclareMathLetter\mst@tmp}% +\ifmst@frenchmath \def\mst@font@tbu{mtoperatorfont}% + \else \def\mst@font@tbu{mtletterfont}% +\fi +\def\mst@DeclareMathLetter #1{% + \DeclareMathSymbol {#1}{\mathalpha}{\mst@font@tbu}{`#1}% + \expandafter + \DeclareMathSymbol \csname mst@#1\endcsname{\mathalpha}{\mst@font@tbu}{`#1}% + \expandafter\mst@addtodo@AZ\expandafter #1\csname mst@#1\endcsname +}% +\@tfor\mst@tmp:=ABCDEFGHIJKLMNOPQRSTUVWXYZ\do + {\expandafter\mst@DeclareMathLetter\mst@tmp}% +\let\mst@DeclareMathLetter\relax +\ifmst@nodigits\else +\def\mst@font@tbu{mtoperatorfont}% +% \end{macrocode} +% In version |1.1|, we have now separated digits from letters, so paradoxically +% it is less problematic to give them the |mathalpha| type. +% \begin{macrocode} +\ifmst@symboldigits \def\mst@font@tbu{mtpsymbol} \fi +\ifmst@eulerdigits \def\mst@font@tbu{mteulervm} \fi +\DeclareMathSymbol{0}{\mathalpha}{\mst@font@tbu}{`0}% +\DeclareMathSymbol{1}{\mathalpha}{\mst@font@tbu}{`1}% +\DeclareMathSymbol{2}{\mathalpha}{\mst@font@tbu}{`2}% +\DeclareMathSymbol{3}{\mathalpha}{\mst@font@tbu}{`3}% +\DeclareMathSymbol{4}{\mathalpha}{\mst@font@tbu}{`4}% +\DeclareMathSymbol{5}{\mathalpha}{\mst@font@tbu}{`5}% +\DeclareMathSymbol{6}{\mathalpha}{\mst@font@tbu}{`6}% +\DeclareMathSymbol{7}{\mathalpha}{\mst@font@tbu}{`7}% +\DeclareMathSymbol{8}{\mathalpha}{\mst@font@tbu}{`8}% +\DeclareMathSymbol{9}{\mathalpha}{\mst@font@tbu}{`9}% +\fi +% \end{macrocode} +% When |symboldelimiters| is passed as an option, we use the +% Symbol font for the printable characters other than +% letters and digits. +% \begin{macrocode} +\ifmst@symboldelimiters +\def\mst@font@tbu{mtpsymbol}% +\mst@endashfalse +\mst@emdashfalse +\else +\def\mst@font@tbu{mtoperatorfont}% +\fi +% \end{macrocode} +% |1.2| adds the tricks to let non letters/digits obey math alphabets. We have +% to double the definitions for easy switch on-off of the mechanism, via a token +% list which is put into \cs{everymath} and \cs{everydisplay}. +% \begin{macrocode} +\ifmst@noexclam\else\typeout{** \string! and \string?}% +\DeclareMathSymbol{!}{\mathclose}{\mst@font@tbu}{"21}% +\DeclareMathSymbol{\mst@varfam@exclam}{\mathalpha}{\mst@font@tbu}{"21}% +\expandafter\mst@addtodo@nonletters\string!\mathclose\mst@varfam@exclam +\DeclareMathSymbol{?}{\mathclose}{\mst@font@tbu}{"3F}% +\DeclareMathSymbol{\mst@varfam@question}{\mathalpha}{\mst@font@tbu}{"3F}% +\expandafter\mst@addtodo@nonletters\string?\mathclose\mst@varfam@question +\fi +% \end{macrocode} +% \begin{macro}{\MTlowerast} +% \begin{macro}{\mst@doasterisk} +% \begin{macro}{\mst@@doasterisk} +% \begin{macro}{\MTnormalasterisk} +% \begin{macro}{\MTactiveasterisk} +% |1.12d| The \cs{ast} or |*| is defined in |fontmath.ltx| as a binary +% operator from the |symbols| font. Usually the asterisk from the text +% font is in a raised position. Previous versions of \mst did nothing +% with \cs{ast} but strangely defined |*| to be the one from the text +% font, with type \cs{mathalpha}. The package now leaves by default +% both |*| and |\ast| untouched, and if passed option |asterisk| +% replaces both of them with a lowered text asterisk (or the one from +% the Symbol font), and of type \cs{mathbin}. A trick is used to +% optionally get both |*| and \cs{ast} obey the math alphabets. +% +% The user macro \cs{MTlowerast} sets the amount +% of lowering to be applied to the text asterisk. +% +% |1.12e| Somehow there was a big omission in |1.12d|, the +% command \cs{MTlowerast} as described in the manual was missing! +% +% nota bene: it is assumed that |*| is of type |other| when \mst +% is loaded... it should neither be active, nor of type |letter|! +% +% |1.3i| adds \cs{MTnormalasterisk} and \cs{MTactiveasterisk}. They do nothing +% without option |asterisk|. +% \begin{macrocode} +\def\mst@@doasterisk{\let\ast\mst@ast\mst@mathactivate*{}\mst@ast}% +\newcommand*\MTnormalasterisk {\let\mst@doasterisk\relax} +\newcommand*\MTactiveasterisk {\let\mst@doasterisk\mst@@doasterisk} +\ifmst@asterisk\typeout{** asterisk: \string\ast\space and *} + \AtBeginDocument{% + \everymath\expandafter + {\the\everymath \mst@doasterisk \MTnormalasterisk }% + \everydisplay\expandafter + {\the\everydisplay\mst@doasterisk \MTnormalasterisk }} + \ifmst@symbolmisc + \def\mst@bin@ast{% + \mathbin{\mathchoice{\raisebox{-.1\height}% + {\the\textfont\symmtpsymbol\char42}}% + {\raisebox{-.1\height}% + {\the\textfont\symmtpsymbol\char42}}% + {\raisebox{-.1\height}% + {\the\scriptfont\symmtpsymbol\char42}}% + {\raisebox{-.1\height}% + {\the\scriptscriptfont\symmtpsymbol\char42}}}}% + \else + \def\mst@bin@ast{% + \mathbin{\mathchoice{\raisebox{-\mst@lowerast}% + {\the\textfont\symmtoperatorfont\char42}}% + {\raisebox{-\mst@lowerast}% + {\the\textfont\symmtoperatorfont\char42}}% + {\raisebox{-\mst@lowerast}% + {\the\scriptfont\symmtoperatorfont\char42}}% + {\raisebox{-\mst@lowerast}% + {\the\scriptscriptfont\symmtoperatorfont\char42}}}}% + \fi + \def\mst@varfam@ast{\ifnum\fam=\m@ne\mst@bin@ast\else + \mathbin{\mathchoice{\raisebox{-\mst@lowerast}% + {\the\textfont\fam\char42}}% + {\raisebox{-\mst@lowerast}% + {\the\textfont\fam\char42}}% + {\raisebox{-\mst@lowerast}% + {\the\scriptfont\fam\char42}}% + {\raisebox{-\mst@lowerast}% + {\the\scriptscriptfont\fam\char42}}}\fi}% + \MTactiveasterisk + \DeclareRobustCommand*{\mst@ast}{\mst@bin@ast} + \newcommand*\MTlowerast[1]{\def\mst@lowerast{#1}} + \MTlowerast{.3\height} + \mst@do@easynonletters\expandafter\expandafter\expandafter + {\expandafter\the\expandafter\mst@do@easynonletters + \expandafter\def\csname mst@ast \endcsname{\mst@varfam@ast}} +\fi +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro}\end{macro} +% (2011) I renounced to try to do things with all the various dots, they are +% defined in many different ways, and there is the amsmath also. Dealing with +% this issue would mean a lot a time for a minuscule result. Better to leave the +% user use the |mathdots| package and accept that we can not avoid the default +% fonts in that case. So here I just treat |.| (in the hope to really lessen by +% 1 the number of fonts embedded at the end in the PDF). +% +% [(Dec. 2012) should I reexamine these definitive sounding remarks?] +% \begin{macrocode} +\ifmst@nopunct\else\typeout{** punctuation\string: \string, \string. \string: \string; and \string\colon} +\DeclareMathSymbol{,}{\mathpunct}{\mst@font@tbu}{"2C} +\DeclareMathSymbol{\mst@varfam@comma}{\mathalpha}{\mst@font@tbu}{"2C} +\expandafter\mst@addtodo@nonletters\string,\mathpunct\mst@varfam@comma +\DeclareMathSymbol{.}{\mathord}{\mst@font@tbu}{"2E} +\DeclareMathSymbol{\mst@varfam@dot}{\mathalpha}{\mst@font@tbu}{"2E} +\mst@addtodo@easynonletters\.\mst@varfam@dot +\DeclareMathSymbol{:}{\mathrel}{\mst@font@tbu}{"3A} % relation spacing +\DeclareMathSymbol{\mst@varfam@colon}{\mathalpha}{\mst@font@tbu}{"3A} +\expandafter\mst@addtodo@nonletters\string:\mathrel\mst@varfam@colon +\@ifpackageloaded{amsmath} +{} % \colon defined in amsmath.sty in terms of : with some enlarged explicit + % spacing. No need to intervene. +{% no amsmath, use standard punctuation spacing +\let\colon\undefined + % the reason is if some package has redefined \colon which then + % can not be used in \cs{DeclareMathSymbol} anymore (we + % shamelessly overwrite...) + \DeclareMathSymbol{\colon}{\mathpunct}{\mst@font@tbu}{"3A} + \mst@do@nonletters\expandafter{\the\mst@do@nonletters + \def\colon{\mathpunct{\mst@varfam@colon}}}} +\DeclareMathSymbol{;}{\mathpunct}{\mst@font@tbu}{"3B} +\DeclareMathSymbol{\mst@varfam@pointvirgule}{\mathalpha}{\mst@font@tbu}{"3B} +\expandafter\mst@addtodo@nonletters\string;\mathpunct\mst@varfam@pointvirgule +\fi +% \end{macrocode} +% \begin{macro}{\relbar} +% Due to the way = and - are used by \LaTeX{} in arrows, we will +% have to redefine \cs{Relbar} and \cs{relbar} in order for +% them to preserve their original meanings. +% +% |1.15d|: Oct 13, 2012. Belated amendment of the code to be compatible +% with Unicode engines in case someone changed the mathcode of -. +% However, for the time being I can do it in an easy way only for +% \XeTeX, not for \LuaLaTeX. Also I do my modifications to \cs{relbar} +% in a manner testing for the presence of amsmath. +% \begin{macrocode} +\ifmst@nominus +\else + \ifmst@XeOrLua + \mst@Umathcharnumdef\mst@minus@sign=\mst@Umathcodenum`\-\relax +%% I used this prior to the new \luatexUmathcodenum, as available since TL2013: +%% \mathchardef\mst@minus@sign=8704\relax % "2200 + \else + \mathchardef\mst@minus@sign=\mathcode`\-\relax + \fi +\@ifpackageloaded{amsmath} +{\def\relbar{\mathrel{\mathpalette\mathsm@sh\mst@minus@sign}}} +{\DeclareRobustCommand\relbar{\mathrel{\smash\mst@minus@sign}}} +\def\rightarrowfill{$\m@th\mathord{\relbar}\mkern-7mu% + \cleaders\hbox{$\mkern-2mu\relbar\mkern-2mu$}\hfill + \mkern-7mu\mathord\rightarrow$} +\def\leftarrowfill{$\m@th\mathord\leftarrow\mkern-7mu% + \cleaders\hbox{$\mkern-2mu\relbar\mkern-2mu$}\hfill + \mkern-7mu\mathord{\relbar}$} +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{endash} +% |1.1| |2011/01/29|: Producing this next piece of code was not a piece +% of cake for a novice like myself!\newline +% |1.11| |2011/02/05|: Compatibility with Unicode (via use of fontspec +% encodings EU1 and EU2)\newline +% |1.12| |2011/02/07|: Improved dealing of Unicode possibility.\newline +% |1.14b| |2011/04/02|: Corrected some very irresponsible bug in the +% Unicode part which caused a problem when 10 or more math families have +% been allocated.\newline +% |1.15| |2012/09/24|: Added AtBeginDocument to circumvent some amsmath +% problem with unicode engines. +% +% |1.3l| |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|. +% +% |1.3t| |2018/08/22|: fix to very ancient (|2012/12/20|) bug with +% |\DeclareMathSymbol| lacking last argument if encoding not T1, OT1 or +% LY1 when setting up math mode to use the en-dash character as minus +% sign (PDF\TeX\ engine). +% +% \begin{macro}{\mst@subduedminus} +% \begin{macro}{\mst@nonsubduedminus} +% |1.3t| Further, new macros |\mst@subduedminus| and |\mst@nonsubduedminus|, +% for the good functioning of the subdued option also in case of +% presence of fontspec. This is the only character for which subdued +% option works (now) by setting the mathcode on each math version +% change. Indeed, a typical issue is when the Unicode EN DASH or MINUS +% is used, but the actual font in subdued normal math version is +% originally in OT1 or T1 encoding. The only reasonable way to address +% this is by actually modifying the assigned mathcode at each version +% change. This means also that |\MTversion| and not |\mathversion| +% must be used for good functioning. +% \begin{macrocode} +\let\mst@subduedminus\empty +\let\mst@nonsubduedminus\empty +\def\mst@dothe@endashstuff#1#2#3{% + \edef\mst@tmp@enc{#3}% + \if1\mst@OneifUniEnc + \mst@Umathchardef#1=2 \symmtoperatorfont "\mst@unicodeminus\relax + \mst@Umathchardef#2=7 \symmtoperatorfont "\mst@unicodeminus\relax + \else + \DeclareMathSymbol{#1}{\mathbin}{mtoperatorfont} + {\csname\mst@tmp@enc\string\textendash\endcsname} + \DeclareMathSymbol{#2}{\mathalpha}{mtoperatorfont} + {\csname\mst@tmp@enc\string\textendash\endcsname} + \fi}% mst@dothe@endashstuff +\def\mst@dothe@emdashstuff#1#2#3{% + \edef\mst@tmp@enc{#3}% + \if1\mst@OneifUniEnc + \mst@Umathchardef#1=2 \symmtoperatorfont "2014\relax + \mst@Umathchardef#2=7 \symmtoperatorfont "2014\relax + \else + \DeclareMathSymbol{#1}{\mathbin}{mtoperatorfont} + {\csname\mst@tmp@enc\string\textemdash\endcsname} + \DeclareMathSymbol{#2}{\mathalpha}{mtoperatorfont} + {\csname\mst@tmp@enc\string\textemdash\endcsname} + \fi}% mst@dothe@emdashstuff +\def\mst@dothe@hyphenstuff#1#2{% + \DeclareMathSymbol{#1}{\mathbin}{\mst@font@tbu}{"2D}% + \DeclareMathSymbol{#2}{\mathalpha}{\mst@font@tbu}{"2D}% +}% +\def\mst@varfam@minus{\@nameuse{mst@varfam@minus@mv\math@version}}% +\ifmst@nominus\else + \expandafter\mst@addtodo@nonletters\string-\mathbin\mst@varfam@minus + \def\mst@nonsubduedminus{% + \edef\mst@tmp@enc{\csname mst@encoding@\math@version\endcsname}% + \if1\mst@OneifUniEnc + \mst@Umathcode`\-=\expandafter + % Working around a bug (or feature...) of XeTeX/LuaTeX: afaict it is + % impossible to use straightforwardly in extended mathcode assignments + % a control sequence as created by \Umathchardef. + % This is counter-intuitive and breaks expectations. + \mst@UmathchardefWorkAround@i + \csname mst@minus@mv\math@version\endcsname + \relax + \else + \mathcode`\-=\@nameuse{mst@minus@mv\math@version}% self-delimiting + \fi + }% \mst@nonsubduedminus +\fi +\def\mst@UmathchardefWorkAround@i + {\expandafter\mst@UmathchardefWorkAround@ii\meaning}% +\def\mst@UmathchardefWorkAround@ii#1"{"}% +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% \begin{macro}{\mst@hbar@mvnormal} +% \begin{macro}{\mst@ltbar@mvnormal} +% |2011/01/31|, |1.1| I decide to settle the question of the |\hbar|. The +% \LaTeX{} definition is |\def\hbar{{\mathchar'26\mkern-9muh}}| +% and its advantage is that |h| is in the correct font. But of course not +% the macron character (|\=|, |\bar|). And anyway |amsfonts| uses a +% \cs{DeclareMathSymbol}. Also there is the kern whose length depends on +% |cmsy| (18mu=1em and em taken from info in |cmsy|). +% +% I will need an |rlap| adapted to math +% mode, and this is provided by code from Alexander~R.~\textsc{Perlis} in +% his TugBoat article 22 (2001), 350--352, which I found by googling |rlap|. +% (as an aside, I am only now (April 2, 2011) aware that the package +% |mathtools| provides the |mathrlap| etc... ) +% +% |1.3l 2016/01/29|: anticipating TL2016 fontspec's switch to |TU|. +% +% |1.3u 2019/08/20|: encoding (8bits) agnostic construct for hbar, using same +% method as for |mathaccents| option. I should add some way to adjust the +% vertical positioning. +% +% On this occasion I replace |h| by |\mst@h| because the mechanism for +% before and after skips does not interact well with the rlap construct. +% \begin{macrocode} +\let\mst@subduedhbar\@empty +\let\mst@nonsubduedhbar\@empty +\ifmst@nohbar\else + \def\mst@subduedhbar{\let\hbar\mst@original@hbar}% + \def\mst@nonsubduedhbar{% + \expandafter\let\expandafter\hbar + \csname mst@hbar@mv\math@version\endcsname + }% +\fi +\def\mst@mathrlap{\mathpalette\mst@mathrlapinternal} +\def\mst@mathrlapinternal#1#2{\rlap{$\mathsurround=0pt#1{#2}$}} +\def\mst@dothe@hbarstuff#1#2#3{% + \edef\mst@tmp@enc{#3}% + \if1\mst@OneifUniEnc % Unicode engine and font + \mst@Umathchardef#1="7 \symmtletterfont "0127 \relax %% or 210F? + \else + \begingroup + \def\@text@composite##1\@text@composite##2{##2}% + \let\add@accent\@firstoftwo + \DeclareMathAccent{#2}{\mathalpha}{mtletterfont}% + {\csname\mst@tmp@enc\string\=\endcsname{}}% + \endgroup + \def#1{\mst@mathrlap{#2{\ }}\mst@h}% + \fi +}% end of \mst@dothe@hbarstuff +% \end{macrocode} +% \end{macro} +% \end{macro} +% |1.15d|: Oct 13, 2012. The \cs{mathcode} thing with = is (belatedly, +% sorry!) made Unicode compatible. +% \begin{macro}{+,=,\Relbar} +% \begin{macrocode} +\ifmst@noplus\else\typeout{** \string+ and \string=} +\DeclareMathSymbol{+}{\mathbin}{\mst@font@tbu}{"2B} +\DeclareMathSymbol{\mst@varfam@plus}{\mathalpha}{\mst@font@tbu}{"2B} +\expandafter\mst@addtodo@nonletters\string+\mathbin\mst@varfam@plus +\fi +\ifmst@noequal\else +\ifmst@XeOrLua + \mst@Umathcharnumdef\mst@equal@sign=\mst@Umathcodenum`\=\relax +\else + \mathchardef\mst@equal@sign=\mathcode`\=\relax +\fi +\@ifpackageloaded{amsmath} +{\def\Relbar{\mathrel\mst@equal@sign}} +{\DeclareRobustCommand\Relbar{\mathrel{\mst@equal@sign}}} +\DeclareMathSymbol{=}{\mathrel}{\mst@font@tbu}{"3D} +\DeclareMathSymbol{\mst@varfam@equal}{\mathalpha}{\mst@font@tbu}{"3D} +% \end{macrocode} +% \begin{macro}{\nfss@catcodes} +% |2012/12/18|: Activating = (only in math mode actually) seems very bad but +% surprisingly works well. However I had a problem with |eu2lmtt.fd| which +% should not be loaded with an active =. +% |2012/12/25|: Since then I had switched to only math activation. And in fact +% the problematic = from |eu2lmtt.fd| end up in \cs{csname}...\cs{endcsname} +% and I have +% learnt since that \TeX{} does not look at the |mathcode| inside a +% \cs{csname}...\cs{endcsname}. Example: +% \begin{verbatim} +% \mathcode`x="8000 +% \begingroup +% \catcode`x=\active +% \global\everymath{\defx{Hello}} +% \endgroup +% \def\foox{World!} +% $x \csname foox\endcsname$ +% \end{verbatim} +% We need nevertheless to inactivate the =, for the following reason. Imagine +% someone did |\catcode`==\active\def={\string=}|, or another definition which +% would not lead to a tragedy in a \cs{csname}...\cs{endcsname}. Then the = is +% active and the re-definition done by |mathastext| will not be compatible with +% loading |eu2lmtt.fd| (for the first time) from math mode, as this +% re-definition can not be expanded inside a +% \cs{csname}...\cs{endcsname}. +% +% |2012/12/28|: to be on the safe side, I add also |;| and |+| and do it +% without discriminating between engines +% \begin{macrocode} +\typeout{** adding \string= \string; and \string+ to \string\nfss@catcodes} +\g@addto@macro\nfss@catcodes{% + \@makeother\=% + \@makeother\;% + \@makeother\+% +} +\expandafter\mst@addtodo@nonletters\string=\mathrel\mst@varfam@equal +\fi +% \end{macrocode} +% \end{macro}\end{macro} +% \begin{macro}{noparenthesis} +% \begin{macro}{(,),[,],/} +% \cs{lbrack} and \cs{rbrack} are defined in |latex.ltx| by +% |\def\lbrack{[}\def\rbrack{]}| so this fits well with what we do here. +% \cs{lparen} and \cs{rparen} are similarly defined in |mathtools|. On the +% other hand in |latex.ltx| with |\{| and |\}| are defined (in math mode) in +% terms of the control sequences \cs{lbrace} and \cs{rbrace}. Such control +% sequences can not be simultaneously math symbols and math delimiters, +% thus, this complicates things for the mathastextification. +% \begin{macrocode} +\ifmst@noparen\else\typeout{** parentheses \string( \string) \string[ \string] and slash \string/} +\ifmst@nosmalldelims + \DeclareMathSymbol{(}{\mathopen}{\mst@font@tbu}{"28} + \DeclareMathSymbol{)}{\mathclose}{\mst@font@tbu}{"29} + \DeclareMathSymbol{[}{\mathopen} {\mst@font@tbu}{"5B} + \DeclareMathSymbol{]}{\mathclose}{\mst@font@tbu}{"5D} + \DeclareMathSymbol{/}{\mathord}{\mst@font@tbu}{"2F} +\else + \DeclareMathDelimiter{(}{\mathopen}{\mst@font@tbu}{"28}{largesymbols}{"00} + \DeclareMathDelimiter{)}{\mathclose}{\mst@font@tbu}{"29}{largesymbols}{"01} + \DeclareMathDelimiter{[}{\mathopen} {\mst@font@tbu}{"5B}{largesymbols}{"02} + \DeclareMathDelimiter{]}{\mathclose}{\mst@font@tbu}{"5D}{largesymbols}{"03} + \DeclareMathDelimiter{/}{\mathord}{\mst@font@tbu}{"2F}{largesymbols}{"0E} +\fi +\DeclareMathSymbol{\mst@varfam@lparen}{\mathalpha}{\mst@font@tbu}{40} +\DeclareMathSymbol{\mst@varfam@rparen}{\mathalpha}{\mst@font@tbu}{41} +\DeclareMathSymbol{\mst@varfam@lbrack}{\mathalpha}{\mst@font@tbu}{"5B} +\DeclareMathSymbol{\mst@varfam@rbrack}{\mathalpha}{\mst@font@tbu}{"5D} +\DeclareMathSymbol{\mst@varfam@slash}{\mathalpha}{\mst@font@tbu}{"2F} +\expandafter\mst@addtodo@nonletters\string(\mathopen\mst@varfam@lparen +\expandafter\mst@addtodo@nonletters\string)\mathclose\mst@varfam@rparen +\expandafter\mst@addtodo@nonletters\string[\mathopen\mst@varfam@lbrack +\expandafter\mst@addtodo@nonletters\string]\mathclose\mst@varfam@rbrack +\mst@addtodo@easynonletters\/\mst@varfam@slash +\fi +% \end{macrocode} +% \end{macro}\end{macro} +% \begin{macro}{alldelims} +% \begin{macro}{<,>,\}\begin{macro}{\setminus}\begin{macro}{\backslash} +% \begin{macrocode} +\ifmst@alldelims\typeout{** alldelims: \string< \string> + \string\backslash\space\string\setminus\space\string| + \string\vert\space\string\mid\space\string\{\space and \string\}} +\ifmst@nosmalldelims +% \end{macrocode} +% Dec 18, 2012. We then want |\let\backslash\mst@varfam@backslash| to do nothing +% when the \cs{backslash} is used as a delimiter. So here the original +% definition from |latex.ltx| is copied, generally speaking when people use +% other math symbol fonts they do respect the encoding of the CM symbols and +% largesymbols, so this is 90\% safe. But in truth I should extract from the +% meaning of \cs{backslash} the |delcode|. +% \begin{macrocode} + \DeclareMathDelimiter{\mst@varfam@backslash} + {\mathalpha}{symbols}{"6E}{largesymbols}{"0F} +\else + \DeclareMathDelimiter{<}{\mathopen}{\mst@font@tbu}{"3C}{largesymbols}{"0A} + \DeclareMathDelimiter{>}{\mathclose}{\mst@font@tbu}{"3E}{largesymbols}{"0B} +% \end{macrocode} +% There is no backslash in the Symbol font hence |mtoperatorfont| here. +% \begin{macrocode} + \DeclareMathDelimiter{\backslash} + {\mathord}{mtoperatorfont}{"5C}{largesymbols}{"0F} + \DeclareMathDelimiter{\mst@varfam@backslash} + {\mathalpha}{mtoperatorfont}{"5C}{largesymbols}{"0F} +\fi +\DeclareMathSymbol{<}{\mathrel}{\mst@font@tbu}{"3C} +\DeclareMathSymbol{>}{\mathrel}{\mst@font@tbu}{"3E} +\DeclareMathSymbol{\mst@varfam@less}{\mathalpha}{\mst@font@tbu}{"3C} +\DeclareMathSymbol{\mst@varfam@more}{\mathalpha}{\mst@font@tbu}{"3E} +\expandafter\mst@addtodo@nonletters\string<\mathrel\mst@varfam@less +\expandafter\mst@addtodo@nonletters\string>\mathrel\mst@varfam@more +\mst@do@easynonletters\expandafter{\the\mst@do@easynonletters + \let\backslash\mst@varfam@backslash} +\DeclareMathSymbol{\setminus}{\mathbin}{mtoperatorfont}{"5C} +\DeclareMathSymbol{\mst@varfam@setminus}{\mathalpha}{mtoperatorfont}{"5C} +\mst@do@nonletters\expandafter{\the\mst@do@nonletters + \def\setminus{\mathbin{\mst@varfam@setminus}}} +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% \begin{macro}{\models} +% |1.15d|: 13 oct 2012. Before modifying \string| we must preserve \cs{models}. +% \begin{macrocode} +\ifmst@XeOrLua + \mst@Umathcharnumdef\mst@vert@bar=\mst@Umathcodenum`\|\relax +\else + \mathchardef\mst@vert@bar=\mathcode`\|\relax +\fi +\DeclareRobustCommand\models{\mathrel{\mst@vert@bar}\joinrel\Relbar} +% \end{macrocode} +% \end{macro} +% \begin{macro}{|,\mid,\vert} +% (2011) I did not do anything then to try to emulate \cs{Vert} with the +% vertical bar from the text font... and now (2012) \mst is not as radical as +% it used to be anyhow, so it is too late. +% \begin{macrocode} +\ifmst@nosmalldelims + \DeclareMathSymbol{|}{\mathord}{\mst@font@tbu}{124} +\else + \DeclareMathDelimiter{|}{\mathord}{\mst@font@tbu}{124}{largesymbols}{"0C} +\fi +\def\vert{|} +\DeclareMathSymbol{\mst@varfam@vbar}{\mathalpha}{\mst@font@tbu}{124} +\mst@addtodo@easynonletters\|\mst@varfam@vbar +\let\mid\undefined % 1.3: to avoid problems with some packages +\DeclareMathSymbol{\mid}{\mathrel}{\mst@font@tbu}{124} +\mst@do@nonletters\expandafter{\the\mst@do@nonletters + \def\mid{\mathrel\mst@varfam@vbar}} +% \end{macrocode} +% \begin{macro}{\MTexplicitbraces-}\begin{macro}{obeymathxx} +% \begin{macro}{\MTexplicitbraces-}\begin{macro}{donotobeymathxx} +% Braces. With version |1.2|, |\{| and |\}| will not be acceptable as +% delimiters anymore if the redefinitions below in \cs{mst@dobraces} are +% enacted. But they will obey math alphabets. Improvements in |1.2a|, to +% preserve robustness. +% +% For |1.3| I make |\lbrace| and |\rbrace| undefined first, else problems +% may arise with some packages. |1.3e| suppresses under option +% |nosmalldelims| the definitions of |\lbrace| and |\rbrace| as math +% symbols as this bug made |\left\lbrace| cause an error, naturally. +% \begin{macrocode} + \ifmst@nosmalldelims + \else + \let\lbrace\undefined \let\rbrace\undefined + \DeclareMathDelimiter{\lbrace} + {\mathopen}{\mst@font@tbu}{123}{largesymbols}{"08} + \DeclareMathDelimiter{\rbrace} + {\mathclose}{\mst@font@tbu}{125}{largesymbols}{"09} + \fi +\DeclareMathSymbol{\mst@varfam@lbrace}{\mathalpha}{\mst@font@tbu}{123} +\DeclareMathSymbol{\mst@varfam@rbrace}{\mathalpha}{\mst@font@tbu}{125} +\DeclareRobustCommand*{\mst@lbrace} + {\ifmmode\mathopen\mst@varfam@lbrace\else\textbraceleft\fi} +\DeclareRobustCommand*{\mst@rbrace} + {\ifmmode\mathclose\mst@varfam@rbrace\else\textbraceright\fi} +\mst@do@nonletters\expandafter{\the\mst@do@nonletters + \mst@dobraces{\let\{\mst@lbrace\let\}\mst@rbrace}} +\fi % end of \ifmst@alldelims +\newcommand*{\MTexplicitbracesobeymathxx}{\let\mst@dobraces\@firstofone} +\newcommand*{\MTexplicitbracesdonotobeymathxx}{\let\mst@dobraces\@gobble} +\MTexplicitbracesdonotobeymathxx +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro} +% \end{macro}\end{macro} +% \begin{macro}{specials} +% \leavevmode\kern\parindent |1.14b| |2011/04/02|: the redefinitions of +% \#, \$, \% and \& were buggy (this showed up when 10 or more math +% families had been created). +% +% |1.15f| |2012/10/23|: the code, although working, was perhaps a bit insane +% and +% had definitions which could surprise other packages. For example, it did:\\ +% \null\hspace{1cm}|\renewcommand{\%}{\ifmmode\mt@mmode@percent\else\char37\relax\fi}|\\ +% But it seems this provokes a problem with |microtype|. Perhaps the problem +% was that the command was not declared robust? For the dollar \LaTeX{} itself does\\ +% \null\hspace{1cm}|\DeclareRobustCommand{\$}{\ifmmode\mathdollar\else\textdollar\fi}|\\ +% So here I just modify \cs{mathdollar}. Then we have in +% |latex.ltx| the same definitions as in |plain.tex|: +% |\chardef\%=`\%|, +% |\chardef\&=`\&|, and +% |\chardef\#=`\#|. It turns out that we can just adjust the mathcodes of these +% characters and achieve exactly what is wanted for the corresponding one char +% control sequences. In math mode the control sequence will use the specified +% mathcode. So here it is \emph{not} a redefinition of the control sequences, +% purely an adjustment of mathcodes. +% +% |1.2d| |2013/01/01|: previous versions imposed the variable family type. I +% hereby make it possible to de-activate this feature with the macro +% \cs{MTeasynonlettersdonotobeymathxx}. Besides, I have absolutely no idea +% why I had different looking code depending on the engine \XeTeX, \LuaTeX\ or +% default. Removed. +% +% |1.3c| |2013/12/14|: I have absolutely no idea why I removed the \XeTeX\ +% and \LuaTeX\ code at the time of |1.2d|! the code for tex/pdftex engine +% could not accomodate more than 16 math families. Code for \XeTeX\ and +% \LuaTeX\ again added. (and since TL2013 no more problems with +% |\luatexUmathcode|.) +% \begin{macrocode} +\ifmst@nospecials +\else + \typeout{** \string\#\space\string\mathdollar\space + \string\%\space\string\&\space} + \ifmst@XeOrLua + \mst@Umathcode`\#=0 \symmtoperatorfont "23 \relax + \mst@Umathchardef\mathdollar=0 \symmtoperatorfont "24 \relax + \mst@Umathcode`\%=0 \symmtoperatorfont "25 \relax + \mst@Umathcode`\&=0 \symmtoperatorfont "26 \relax + \mst@do@easynonletters\expandafter{% + \the\mst@do@easynonletters + \mst@Umathcode`\#=7 \symmtoperatorfont "23 \relax + \mst@Umathchardef\mathdollar=7 \symmtoperatorfont "24 \relax + \mst@Umathcode`\%=7 \symmtoperatorfont "25 \relax + \mst@Umathcode`\&=7 \symmtoperatorfont "26 \relax + } + \else + \count@=\symmtoperatorfont + \multiply\count@ by \@cclvi + \advance\count@ by 35 + \mathcode`\#\count@ + \advance\count@ by \@ne + \mathchardef\mathdollar\count@ + \advance\count@ by \@ne + \mathcode`\%\count@ + \advance\count@ by \@ne + \mathcode`\&\count@ + \count@=\symmtoperatorfont + \multiply\count@ by \@cclvi + \advance\count@ by 28707 % = "7023 + \mathchardef\mst@varfam@mathhash\count@ + \advance\count@ by \@ne + \mathchardef\mst@varfam@mathdollar\count@ + \advance\count@ by \@ne + \mathchardef\mst@varfam@mathpercent\count@ + \advance\count@ by \@ne + \mathchardef\mst@varfam@mathampersand\count@ + \mst@do@easynonletters\expandafter{\the\mst@do@easynonletters + \mathcode`\#=\mst@varfam@mathhash + \let\mathdollar\mst@varfam@mathdollar + \mathcode`\%=\mst@varfam@mathpercent + \mathcode`\&=\mst@varfam@mathampersand} + \fi +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{symbolmisc} +% We construct (with some effort) some long arrows from the Symbol glyphs, of +% almost the same lengths as the standard ones. By the way, I always found the +% \cs{iff} to be too wide, but I follow here the default. Also, although +% there is a \cs{longmapsto} in standard \LaTeX{}, if I am not mistaken, there +% is no \cs{longto}. So I define one here. I could not construct in the same +% manner \cs{Longrightarrow} etc\dots{} as the = sign from Symbol does not +% combine easily with the logical arrows, well, I could have done some box +% manipulations, but well, life is finite. +% \begin{macro}{\prod} +% \begin{macro}{\sum} +% |1.13b|: I correct the brutal re-definitions of \cs{prod} and \cs{sum} from +% the earlier versions of the package; most of the time the Symbol glyphs do +% appear to be too small in display mode. The new redefinitions do have some +% defects: |$\displaystyle\prod_1^2$| changes the position of limits but not +% the glyph itself, and |$$\textstyle\prod_1^2$$| change the limits but +% switches to the CM inline math glyph. So I tried\\ +% |\renewcommand{\prod}{\mathchoice{\mst@prod}{\prodpsy}{\prodpsy}{\prodpsy}}|\\ +% but this did not go well with subscripts and exponents. +% +% Note oct 2012: maybe I should re-examine what I did? +% |1.3c| (|2013/12/14|) renames |\defaultprod| to |\MToriginalprod| and +% |\defaultsum| to +% |\MToriginalsum|. +% \begin{macrocode} +\ifmst@symbolmisc\typeout{** symbolmisc: miscellaneous math symbols from Symbol font} +\let\mst@prod\prod +\let\MToriginalprod\prod +\DeclareMathSymbol{\prodpsy}{\mathop}{mtpsymbol}{213} +\renewcommand*{\prod}{\ifinner\prodpsy\else\mst@prod\fi} +\let\mst@sum\sum +\let\MToriginalsum\sum +\DeclareMathSymbol{\sumpsy}{\mathop}{mtpsymbol}{229} +\renewcommand*{\sum}{\ifinner\sumpsy\else\mst@sum\fi} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macrocode} +\DeclareMathSymbol{\mst@implies}{\mathrel}{mtpsymbol}{222} +\DeclareRobustCommand*{\implies}{\;\mst@implies\;} +\DeclareMathSymbol{\mst@impliedby}{\mathrel}{mtpsymbol}{220} +\DeclareRobustCommand*{\impliedby}{\;\mst@impliedby\;} +\DeclareRobustCommand*{\iff}{\;\mst@impliedby\mathrel{\mkern-3mu}\mst@implies\;} +\DeclareMathSymbol{\mst@iff}{\mathrel}{mtpsymbol}{219} +\DeclareRobustCommand*{\shortiff}{\;\mst@iff\;} +\DeclareMathSymbol{\mst@to}{\mathrel}{mtpsymbol}{174} +\DeclareMathSymbol{\mst@trait}{\mathrel}{mtpsymbol}{190} +\DeclareRobustCommand*\to{\mst@to} +\DeclareRobustCommand*\longto{\mkern2mu\mst@trait\mathrel{\mkern-10mu}\mst@to} +\DeclareRobustCommand*\mapsto{\mapstochar\mathrel{\mkern0.2mu}\mst@to} +\DeclareRobustCommand*\longmapsto{% +\mapstochar\mathrel{\mkern2mu}\mst@trait\mathrel{\mkern-10mu}\mst@to} +\DeclareMathSymbol{\aleph}{\mathord}{mtpsymbol}{192} +\DeclareMathSymbol{\inftypsy}{\mathord}{mtpsymbol}{165} +\DeclareMathSymbol{\emptyset}{\mathord}{mtpsymbol}{198} +\let\varnothing\emptyset +\DeclareMathSymbol{\nabla}{\mathord}{mtpsymbol}{209} +\DeclareMathSymbol{\surd}{\mathop}{mtpsymbol}{214} +\let\angle\undefined +\DeclareMathSymbol{\angle}{\mathord}{mtpsymbol}{208} +\DeclareMathSymbol{\forall}{\mathord}{mtpsymbol}{34} +\DeclareMathSymbol{\exists}{\mathord}{mtpsymbol}{36} +\DeclareMathSymbol{\neg}{\mathord}{mtpsymbol}{216} +\DeclareMathSymbol{\clubsuit}{\mathord}{mtpsymbol}{167} +\DeclareMathSymbol{\diamondsuit}{\mathord}{mtpsymbol}{168} +\DeclareMathSymbol{\heartsuit}{\mathord}{mtpsymbol}{169} +\DeclareMathSymbol{\spadesuit}{\mathord}{mtpsymbol}{170} +\DeclareMathSymbol{\smallint}{\mathop}{mtpsymbol}{242} +\DeclareMathSymbol{\wedge}{\mathbin}{mtpsymbol}{217} +\DeclareMathSymbol{\vee}{\mathbin}{mtpsymbol}{218} +\DeclareMathSymbol{\cap}{\mathbin}{mtpsymbol}{199} +\DeclareMathSymbol{\cup}{\mathbin}{mtpsymbol}{200} +\DeclareMathSymbol{\bullet}{\mathbin}{mtpsymbol}{183} +\DeclareMathSymbol{\div}{\mathbin}{mtpsymbol}{184} +\DeclareMathSymbol{\otimes}{\mathbin}{mtpsymbol}{196} +\DeclareMathSymbol{\oplus}{\mathbin}{mtpsymbol}{197} +\DeclareMathSymbol{\pm}{\mathbin}{mtpsymbol}{177} +\DeclareMathSymbol{\times}{\mathbin}{mtpsymbol}{180} +\DeclareMathSymbol{\proptopsy}{\mathrel}{mtpsymbol}{181} +\DeclareMathSymbol{\mid}{\mathrel}{mtpsymbol}{124} +\DeclareMathSymbol{\leq}{\mathrel}{mtpsymbol}{163} +\DeclareMathSymbol{\geq}{\mathrel}{mtpsymbol}{179} +\DeclareMathSymbol{\approx}{\mathrel}{mtpsymbol}{187} +\DeclareMathSymbol{\supset}{\mathrel}{mtpsymbol}{201} +\DeclareMathSymbol{\subset}{\mathrel}{mtpsymbol}{204} +\DeclareMathSymbol{\supseteq}{\mathrel}{mtpsymbol}{202} +\DeclareMathSymbol{\subseteq}{\mathrel}{mtpsymbol}{205} +\DeclareMathSymbol{\in}{\mathrel}{mtpsymbol}{206} +\DeclareMathSymbol{\sim}{\mathrel}{mtpsymbol}{126} +\let\cong\undefined +\DeclareMathSymbol{\cong}{\mathrel}{mtpsymbol}{64} +\DeclareMathSymbol{\perp}{\mathrel}{mtpsymbol}{94} +\DeclareMathSymbol{\equiv}{\mathrel}{mtpsymbol}{186} +\let\notin\undefined +\DeclareMathSymbol{\notin}{\mathrel}{mtpsymbol}{207} +\DeclareMathDelimiter{\rangle} + {\mathclose}{mtpsymbol}{241}{largesymbols}{"0B} +\DeclareMathDelimiter{\langle} + {\mathopen}{mtpsymbol}{225}{largesymbols}{"0A} +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{symbolre} +% I like the \cs{Re} and \cs{Im} from Symbol, so I overwrite the CM ones. +% \begin{macrocode} +\ifmst@symbolre\typeout{** symbolre: \string\Re\space and \string\Im\space from Symbol font} +\DeclareMathSymbol{\Re}{\mathord}{mtpsymbol}{"C2} +\DeclareMathSymbol{\Im}{\mathord}{mtpsymbol}{"C1} +\DeclareMathSymbol{\DotTriangle}{\mathord}{mtpsymbol}{92} +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{Greek letters} +% LGRgreek $>$ selfGreek $>$ eulergreek $>$ symbolgreek +% +% |1.11| I correct some bugs on how eulergreek and +% symbolgreek interacted. +% +% |1.12b| more bug fixes. +% +% |1.13| +% +% * Option LGRgreek. +% +% * Also, a behavior has been changed: it regards the selfGreek case, +% the default shape is now the one for letters, not for operator-names +% and digits. This complies to the ISO standard. +% +% * bugfix: version |1.12b| did not define the \cs{omicron} in the +% case when no Greek-related option was passed to the package. +% +% |1.13d| has new macros |\MTstandardgreek| and |\MTcustomgreek|. +% And in the subdued case |\MTstandardgreek| is done when switching to +% the normal or bold math versions (previously something like this +% was only done in case of |LGRgreek| option. ) +% \begin{macrocode} +\let\mst@mathord\mathalpha +\mst@goaheadtrue +\ifmst@selfGreek + \def\mst@font@tbu{mtselfGreekfont} +\else + \ifmst@eulergreek + \def\mst@font@tbu{mteulervm} + \else + \ifmst@symbolgreek + \def\mst@font@tbu{mtpsymbol} + \let\mst@mathord\mathord + \else + \ifmst@LGRgreek + \mst@goaheadfalse + \else +% \end{macrocode} +% The \cs{omicron} requires special treatment. By default we use the o from the +% (original) normal alphabet, if eulergreek or symbolgreek we adapt. There is +% also a special adjustment if the package |fourier| was loaded in its +% |upright| variant: we then take \cs{omicron} from the (original) rm alphabet. +% \begin{macrocode} + \mst@goaheadfalse + \def\mst@omicron {\mst@alph@omicron{o}} + \fi + \fi + \fi +\fi +\ifmst@goahead + \DeclareMathSymbol{\mst@Alpha}{\mst@mathord}{\mst@font@tbu}{"41} + \DeclareMathSymbol{\mst@Beta}{\mst@mathord}{\mst@font@tbu}{"42} + \DeclareMathSymbol{\mst@Epsilon}{\mst@mathord}{\mst@font@tbu}{"45} + \DeclareMathSymbol{\mst@Zeta}{\mst@mathord}{\mst@font@tbu}{"5A} + \DeclareMathSymbol{\mst@Eta}{\mst@mathord}{\mst@font@tbu}{"48} + \DeclareMathSymbol{\mst@Iota}{\mst@mathord}{\mst@font@tbu}{"49} + \DeclareMathSymbol{\mst@Kappa}{\mst@mathord}{\mst@font@tbu}{"4B} + \DeclareMathSymbol{\mst@Mu}{\mst@mathord}{\mst@font@tbu}{"4D} + \DeclareMathSymbol{\mst@Nu}{\mst@mathord}{\mst@font@tbu}{"4E} + \DeclareMathSymbol{\mst@Omicron}{\mst@mathord}{\mst@font@tbu}{"4F} + \DeclareMathSymbol{\mst@Rho}{\mst@mathord}{\mst@font@tbu}{"50} + \DeclareMathSymbol{\mst@Tau}{\mst@mathord}{\mst@font@tbu}{"54} + \DeclareMathSymbol{\mst@Chi}{\mst@mathord}{\mst@font@tbu}{"58} +% \end{macrocode} +% When we in fact use Symbol, we have to correct \cs{Rho} and +% \cs{Chi}. And \cs{Digamma} is non-existent in fact (no F +% in Symbol, F codes a \cs{Phi}). +% \begin{macrocode} + \ifx\mst@mathord\mathord +% \end{macrocode} +% symbolgreek but neither eulergreek nor selfGreek +% \begin{macrocode} +%% attention le P de Symbol est un \Pi pas un \Rho + \DeclareMathSymbol{\mst@Rho}{\mathord}{mtpsymbol}{"52} +%% attention le X de Symbol est un \Xi pas un \Chi + \DeclareMathSymbol{\mst@Chi}{\mathord}{mtpsymbol}{"43} +%% attention le F de Symbol est un \Phi. Il n'y a pas de \Digamma + \DeclareMathSymbol{\mst@Gamma}{\mathord}{mtpsymbol}{"47} + \DeclareMathSymbol{\mst@Delta}{\mathord}{mtpsymbol}{"44} + \DeclareMathSymbol{\mst@Theta}{\mathord}{mtpsymbol}{"51} + \DeclareMathSymbol{\mst@Lambda}{\mathord}{mtpsymbol}{"4C} + \DeclareMathSymbol{\mst@Xi}{\mathord}{mtpsymbol}{"58} + \DeclareMathSymbol{\mst@Pi}{\mathord}{mtpsymbol}{"50} + \DeclareMathSymbol{\mst@Sigma}{\mathord}{mtpsymbol}{"53} + \DeclareMathSymbol{\mst@Upsilon}{\mathord}{mtpsymbol}{"A1} + \DeclareMathSymbol{\mst@Phi}{\mathord}{mtpsymbol}{"46} + \DeclareMathSymbol{\mst@Psi}{\mathord}{mtpsymbol}{"59} + \DeclareMathSymbol{\mst@Omega}{\mathord}{mtpsymbol}{"57} + \else % de \mst@mathord=\mathord +% \end{macrocode} +% not symbolgreek but eulergreek or selfGreek. Note |2015/10/31| : apparemment à +% un moment dans le passé je considérais eulergreek et selfGreek comme pouvant +% être utilisés simultanément car j'avais ici "or both". Mais je laisse tomber +% tout effort réel de m'en préoccuper. +% \begin{macrocode} + \DeclareMathSymbol\mst@Digamma {\mathalpha}{\mst@font@tbu}{"46} + \DeclareMathSymbol\mst@Gamma {\mathalpha}{\mst@font@tbu}{"00} + \DeclareMathSymbol\mst@Delta {\mathalpha}{\mst@font@tbu}{"01} + \DeclareMathSymbol\mst@Theta {\mathalpha}{\mst@font@tbu}{"02} + \DeclareMathSymbol\mst@Lambda {\mathalpha}{\mst@font@tbu}{"03} + \DeclareMathSymbol\mst@Xi {\mathalpha}{\mst@font@tbu}{"04} + \DeclareMathSymbol\mst@Pi {\mathalpha}{\mst@font@tbu}{"05} + \DeclareMathSymbol\mst@Sigma {\mathalpha}{\mst@font@tbu}{"06} + \DeclareMathSymbol\mst@Upsilon {\mathalpha}{\mst@font@tbu}{"07} + \DeclareMathSymbol\mst@Phi {\mathalpha}{\mst@font@tbu}{"08} + \DeclareMathSymbol\mst@Psi {\mathalpha}{\mst@font@tbu}{"09} + \DeclareMathSymbol\mst@Omega {\mathalpha}{\mst@font@tbu}{"0A} + \fi % de \mst@mathord=\mathord +\fi % fin de goahead +% \end{macrocode} +% There are differences regarding Euler and Symbol with respect to the +% available var-letters. We include one or two things like the |wp| and the +% |partial|. +% +% The lower case Greek letters in default \LaTeX{} are of type |mathord|. If +% we use the Euler font it is perhaps better to have them be of type +% |mathalpha| +% \begin{macrocode} +\ifmst@goahead + \ifmst@eulergreek + \DeclareMathSymbol{\mst@alpha} {\mathalpha}{mteulervm}{"0B} + \DeclareMathSymbol{\mst@beta} {\mathalpha}{mteulervm}{"0C} + \DeclareMathSymbol{\mst@gamma} {\mathalpha}{mteulervm}{"0D} + \DeclareMathSymbol{\mst@delta} {\mathalpha}{mteulervm}{"0E} + \DeclareMathSymbol{\mst@epsilon}{\mathalpha}{mteulervm}{"0F} + \DeclareMathSymbol{\mst@zeta} {\mathalpha}{mteulervm}{"10} + \DeclareMathSymbol{\mst@eta} {\mathalpha}{mteulervm}{"11} + \DeclareMathSymbol{\mst@theta} {\mathalpha}{mteulervm}{"12} + \DeclareMathSymbol{\mst@iota} {\mathalpha}{mteulervm}{"13} + \DeclareMathSymbol{\mst@kappa} {\mathalpha}{mteulervm}{"14} + \DeclareMathSymbol{\mst@lambda} {\mathalpha}{mteulervm}{"15} + \DeclareMathSymbol{\mst@mu} {\mathalpha}{mteulervm}{"16} + \DeclareMathSymbol{\mst@nu} {\mathalpha}{mteulervm}{"17} + \DeclareMathSymbol{\mst@xi} {\mathalpha}{mteulervm}{"18} + \DeclareMathSymbol{\mst@omicron}{\mathalpha}{mteulervm}{"6F} + \DeclareMathSymbol{\mst@pi} {\mathalpha}{mteulervm}{"19} + \DeclareMathSymbol{\mst@rho} {\mathalpha}{mteulervm}{"1A} + \DeclareMathSymbol{\mst@sigma} {\mathalpha}{mteulervm}{"1B} + \DeclareMathSymbol{\mst@tau} {\mathalpha}{mteulervm}{"1C} + \DeclareMathSymbol{\mst@upsilon}{\mathalpha}{mteulervm}{"1D} + \DeclareMathSymbol{\mst@phi} {\mathalpha}{mteulervm}{"1E} + \DeclareMathSymbol{\mst@chi} {\mathalpha}{mteulervm}{"1F} + \DeclareMathSymbol{\mst@psi} {\mathalpha}{mteulervm}{"20} + \DeclareMathSymbol{\mst@omega} {\mathalpha}{mteulervm}{"21} +% + \DeclareMathSymbol{\mst@varepsilon}{\mathalpha}{mteulervm}{"22} + \DeclareMathSymbol{\mst@vartheta}{\mathalpha}{mteulervm}{"23} + \DeclareMathSymbol{\mst@varpi} {\mathalpha}{mteulervm}{"24} + \let\mst@varrho=\mst@rho + \let\mst@varsigma=\mst@sigma + \DeclareMathSymbol{\mst@varphi} {\mathalpha}{mteulervm}{"27} +% + \DeclareMathSymbol{\mst@partial}{\mathalpha}{mteulervm}{"40} + \DeclareMathSymbol{\mst@wp}{\mathalpha}{mteulervm}{"7D} + \DeclareMathSymbol{\mst@ell}{\mathalpha}{mteulervm}{"60} + \else + \ifmst@symbolgreek + \DeclareMathSymbol{\mst@alpha}{\mathord}{mtpsymbol}{"61} + \DeclareMathSymbol{\mst@beta}{\mathord}{mtpsymbol}{"62} + \DeclareMathSymbol{\mst@gamma}{\mathord}{mtpsymbol}{"67} + \DeclareMathSymbol{\mst@delta}{\mathord}{mtpsymbol}{"64} + \DeclareMathSymbol{\mst@epsilon}{\mathord}{mtpsymbol}{"65} + \DeclareMathSymbol{\mst@zeta}{\mathord}{mtpsymbol}{"7A} + \DeclareMathSymbol{\mst@eta}{\mathord}{mtpsymbol}{"68} + \DeclareMathSymbol{\mst@theta}{\mathord}{mtpsymbol}{"71} + \DeclareMathSymbol{\mst@iota}{\mathord}{mtpsymbol}{"69} + \DeclareMathSymbol{\mst@kappa}{\mathord}{mtpsymbol}{"6B} + \DeclareMathSymbol{\mst@lambda}{\mathord}{mtpsymbol}{"6C} + \DeclareMathSymbol{\mst@mu}{\mathord}{mtpsymbol}{"6D} + \DeclareMathSymbol{\mst@nu}{\mathord}{mtpsymbol}{"6E} + \DeclareMathSymbol{\mst@xi}{\mathord}{mtpsymbol}{"78} + \DeclareMathSymbol{\mst@omicron}{\mathord}{mtpsymbol}{"6F} + \DeclareMathSymbol{\mst@pi}{\mathord}{mtpsymbol}{"70} + \DeclareMathSymbol{\mst@rho}{\mathord}{mtpsymbol}{"72} + \DeclareMathSymbol{\mst@sigma}{\mathord}{mtpsymbol}{"73} + \DeclareMathSymbol{\mst@tau}{\mathord}{mtpsymbol}{"74} + \DeclareMathSymbol{\mst@upsilon}{\mathord}{mtpsymbol}{"75} + \DeclareMathSymbol{\mst@phi}{\mathord}{mtpsymbol}{"66} + \DeclareMathSymbol{\mst@chi}{\mathord}{mtpsymbol}{"63} + \DeclareMathSymbol{\mst@psi}{\mathord}{mtpsymbol}{"79} + \DeclareMathSymbol{\mst@omega}{\mathord}{mtpsymbol}{"77} + \let\mst@varepsilon=\mst@epsilon + \DeclareMathSymbol{\mst@vartheta}{\mathord}{mtpsymbol}{"4A} + \DeclareMathSymbol{\mst@varpi}{\mathord}{mtpsymbol}{"76} + \let\mst@varrho=\mst@rho + \DeclareMathSymbol{\mst@varsigma}{\mathord}{mtpsymbol}{"56} + \DeclareMathSymbol{\mst@varphi}{\mathord}{mtpsymbol}{"6A} + \DeclareMathSymbol{\mst@partial}{\mathord}{mtpsymbol}{"B6} + \DeclareMathSymbol{\mst@wp}{\mathord}{mtpsymbol}{"C3} + \fi + \fi +\fi +\ifmst@LGRgreek +% cf http://milde.users.sourceforge.net/LGR/lgrxenc.def.html +% et greek.ldf du package babel +\DeclareMathSymbol{\mst@Alpha}{\mathalpha}{mtlgrfontupper}{65} +\DeclareMathSymbol{\mst@Beta}{\mathalpha}{mtlgrfontupper}{66} +\DeclareMathSymbol{\mst@Epsilon}{\mathalpha}{mtlgrfontupper}{69} +\DeclareMathSymbol{\mst@Zeta}{\mathalpha}{mtlgrfontupper}{90} +\DeclareMathSymbol{\mst@Eta}{\mathalpha}{mtlgrfontupper}{72} +\DeclareMathSymbol{\mst@Iota}{\mathalpha}{mtlgrfontupper}{73} +\DeclareMathSymbol{\mst@Kappa}{\mathalpha}{mtlgrfontupper}{75} +\DeclareMathSymbol{\mst@Mu}{\mathalpha}{mtlgrfontupper}{77} +\DeclareMathSymbol{\mst@Nu}{\mathalpha}{mtlgrfontupper}{78} +\DeclareMathSymbol{\mst@Omicron}{\mathalpha}{mtlgrfontupper}{79} +\DeclareMathSymbol{\mst@Rho}{\mathalpha}{mtlgrfontupper}{82} +\DeclareMathSymbol{\mst@Tau}{\mathalpha}{mtlgrfontupper}{84} +\DeclareMathSymbol{\mst@Chi}{\mathalpha}{mtlgrfontupper}{81} +% +\DeclareMathSymbol{\mst@Digamma}{\mathalpha}{mtlgrfontlower}{195} +% +\DeclareMathSymbol{\mst@Gamma}{\mathalpha}{mtlgrfontupper}{71} +\DeclareMathSymbol{\mst@Delta}{\mathalpha}{mtlgrfontupper}{68} +\DeclareMathSymbol{\mst@Theta}{\mathalpha}{mtlgrfontupper}{74} +\DeclareMathSymbol{\mst@Lambda}{\mathalpha}{mtlgrfontupper}{76} +\DeclareMathSymbol{\mst@Xi}{\mathalpha}{mtlgrfontupper}{88} +\DeclareMathSymbol{\mst@Pi}{\mathalpha}{mtlgrfontupper}{80} +\DeclareMathSymbol{\mst@Sigma}{\mathalpha}{mtlgrfontupper}{83} +\DeclareMathSymbol{\mst@Upsilon}{\mathalpha}{mtlgrfontupper}{85} +\DeclareMathSymbol{\mst@Phi}{\mathalpha}{mtlgrfontupper}{70} +\DeclareMathSymbol{\mst@Psi}{\mathalpha}{mtlgrfontupper}{89} +\DeclareMathSymbol{\mst@Omega}{\mathalpha}{mtlgrfontupper}{87} +% +\DeclareMathSymbol{\mst@alpha}{\mathalpha}{mtlgrfontlower}{97} +\DeclareMathSymbol{\mst@beta}{\mathalpha}{mtlgrfontlower}{98} +\DeclareMathSymbol{\mst@gamma}{\mathalpha}{mtlgrfontlower}{103} +\DeclareMathSymbol{\mst@delta}{\mathalpha}{mtlgrfontlower}{100} +\DeclareMathSymbol{\mst@epsilon}{\mathalpha}{mtlgrfontlower}{101} +\DeclareMathSymbol{\mst@zeta}{\mathalpha}{mtlgrfontlower}{122} +\DeclareMathSymbol{\mst@eta}{\mathalpha}{mtlgrfontlower}{104} +\DeclareMathSymbol{\mst@theta}{\mathalpha}{mtlgrfontlower}{106} +\DeclareMathSymbol{\mst@iota}{\mathalpha}{mtlgrfontlower}{105} +\DeclareMathSymbol{\mst@kappa}{\mathalpha}{mtlgrfontlower}{107} +\DeclareMathSymbol{\mst@lambda}{\mathalpha}{mtlgrfontlower}{108} +\DeclareMathSymbol{\mst@mu}{\mathalpha}{mtlgrfontlower}{109} +\DeclareMathSymbol{\mst@nu}{\mathalpha}{mtlgrfontlower}{110} +\DeclareMathSymbol{\mst@xi}{\mathalpha}{mtlgrfontlower}{120} +\DeclareMathSymbol{\mst@omicron}{\mathalpha}{mtlgrfontlower}{111} +\DeclareMathSymbol{\mst@pi}{\mathalpha}{mtlgrfontlower}{112} +\DeclareMathSymbol{\mst@rho}{\mathalpha}{mtlgrfontlower}{114} +\DeclareMathSymbol{\mst@sigma}{\mathalpha}{mtlgrfontlower}{115} +\DeclareMathSymbol{\mst@tau}{\mathalpha}{mtlgrfontlower}{116} +\DeclareMathSymbol{\mst@upsilon}{\mathalpha}{mtlgrfontlower}{117} +\DeclareMathSymbol{\mst@phi}{\mathalpha}{mtlgrfontlower}{102} +\DeclareMathSymbol{\mst@chi}{\mathalpha}{mtlgrfontlower}{113} +\DeclareMathSymbol{\mst@psi}{\mathalpha}{mtlgrfontlower}{121} +\DeclareMathSymbol{\mst@omega}{\mathalpha}{mtlgrfontlower}{119} +% +\DeclareMathSymbol{\mst@digamma}{\mathalpha}{mtlgrfontlower}{147} +% only varsigma defined (I should check this again) +\DeclareMathSymbol{\mst@varsigma}{\mathalpha}{mtlgrfontlower}{99} +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\MTstandardgreek} +% \begin{macro}{\MTcustomgreek} +% \begin{macro}{\MTrecordstandardgreek} +% |1.3d 2014/05/23| defines the commands |\MTstandardgreek| and +% |\MTcustomgreek| for package and user. I leave |\MTrecordstandardgreek| +% undocumented as I don't want to encourage people to load math packages +% after \mst. +% +% |1.3h 2015/10/31|: corrected |\MTcustomgreek| as it caused |\ell| to +% become undefined under option |symbolgreek| and, much more catastrophic, +% caused |\alpha|, etc.. to become undefined under option |selfGreek| ! +% \begin{macrocode} +\newcommand*{\MTstandardgreek}{} +\newcommand*{\MTcustomgreek}{} +\newcommand*{\MTrecordstandardgreek}{} +\ifmst@customgreek + \renewcommand*{\MTrecordstandardgreek}{% + \let\mst@origAlpha\Alpha + \let\mst@origBeta\Beta + \let\mst@origGamma\Gamma + \let\mst@origDelta\Delta + \let\mst@origEpsilon\Epsilon + \let\mst@origZeta\Zeta + \let\mst@origEta\Eta + \let\mst@origTheta\Theta + \let\mst@origIota\Iota + \let\mst@origKappa\Kappa + \let\mst@origLambda\Lambda + \let\mst@origMu\Mu + \let\mst@origNu\Nu + \let\mst@origXi\Xi + \let\mst@origOmicron\Omicron + \let\mst@origPi\Pi + \let\mst@origRho\Rho + \let\mst@origSigma\Sigma + \let\mst@origTau\Tau + \let\mst@origUpsilon\Upsilon + \let\mst@origPhi\Phi + \let\mst@origChi\Chi + \let\mst@origPsi\Psi + \let\mst@origOmega\Omega +% + \let\mst@origalpha\alpha + \let\mst@origbeta\beta + \let\mst@origgamma\gamma + \let\mst@origdelta\delta + \let\mst@origepsilon\epsilon + \let\mst@origvarepsilon\varepsilon + \let\mst@origzeta\zeta + \let\mst@origeta\eta + \let\mst@origtheta\theta + \let\mst@origvartheta\vartheta + \let\mst@origiota\iota + \let\mst@origkappa\kappa + \let\mst@origlambda\lambda + \let\mst@origmu\mu + \let\mst@orignu\nu + \let\mst@origxi\xi + \let\mst@origomicron\omicron + \let\mst@origpi\pi + \let\mst@origvarpi\varpi + \let\mst@origrho\rho + \let\mst@origvarrho\varrho + \let\mst@origsigma\sigma + \let\mst@origvarsigma\varsigma + \let\mst@origtau\tau + \let\mst@origupsilon\upsilon + \let\mst@origphi\phi + \let\mst@origvarphi\varphi + \let\mst@origchi\chi + \let\mst@origpsi\psi + \let\mst@origomega\omega + \let\mst@origDigamma\Digamma + \let\mst@origdigamma\digamma +% + \let\mst@origpartial\partial + \let\mst@origwp\wp + \let\mst@origell\ell }% \MTrecordstandardgreek +\MTrecordstandardgreek +\renewcommand*{\MTstandardgreek}{% + \let\Alpha\mst@origAlpha + \let\Beta\mst@origBeta + \let\Gamma\mst@origGamma + \let\Delta\mst@origDelta + \let\Epsilon\mst@origEpsilon + \let\Zeta\mst@origZeta + \let\Eta\mst@origEta + \let\Theta\mst@origTheta + \let\Iota\mst@origIota + \let\Kappa\mst@origKappa + \let\Lambda\mst@origLambda + \let\Mu\mst@origMu + \let\Nu\mst@origNu + \let\Xi\mst@origXi + \let\Omicron\mst@origOmicron + \let\Pi\mst@origPi + \let\Rho\mst@origRho + \let\Sigma\mst@origSigma + \let\Tau\mst@origTau + \let\Upsilon\mst@origUpsilon + \let\Phi\mst@origPhi + \let\Chi\mst@origChi + \let\Psi\mst@origPsi + \let\Omega\mst@origOmega +% + \let\alpha\mst@origalpha + \let\beta\mst@origbeta + \let\gamma\mst@origgamma + \let\delta\mst@origdelta + \let\epsilon\mst@origepsilon + \let\varepsilon\mst@origvarepsilon + \let\zeta\mst@origzeta + \let\eta\mst@origeta + \let\theta\mst@origtheta + \let\vartheta\mst@origvartheta + \let\iota\mst@origiota + \let\kappa\mst@origkappa + \let\lambda\mst@origlambda + \let\mu\mst@origmu + \let\nu\mst@orignu + \let\xi\mst@origxi + \let\omicron\mst@origomicron + \let\pi\mst@origpi + \let\varpi\mst@origvarpi + \let\rho\mst@origrho + \let\varrho\mst@origvarrho + \let\sigma\mst@origsigma + \let\varsigma\mst@origvarsigma + \let\tau\mst@origtau + \let\upsilon\mst@origupsilon + \let\phi\mst@origphi + \let\varphi\mst@origvarphi + \let\chi\mst@origchi + \let\psi\mst@origpsi + \let\omega\mst@origomega + \let\Digamma\mst@origDigamma + \let\digamma\mst@origdigamma +% + \let\partial\mst@origpartial + \let\wp\mst@origwp + \let\ell\mst@origell +}% \MTstandardgreek +\renewcommand*{\MTcustomgreek}{% + \let\Alpha\mst@Alpha + \let\Beta\mst@Beta + \let\Epsilon\mst@Epsilon + \let\Zeta\mst@Zeta + \let\Eta\mst@Eta + \let\Iota\mst@Iota + \let\Kappa\mst@Kappa + \let\Mu\mst@Mu + \let\Nu\mst@Nu + \let\Omicron\mst@Omicron + \let\Rho\mst@Rho + \let\Tau\mst@Tau + \let\Chi\mst@Chi +% 1.3h: \mst@Digamma not defined if symbolgreek option + \ifmst@symbolgreek\else\let\Digamma\mst@Digamma\fi +% + \let\Gamma\mst@Gamma + \let\Delta\mst@Delta + \let\Theta\mst@Theta + \let\Lambda\mst@Lambda + \let\Xi\mst@Xi + \let\Pi\mst@Pi + \let\Sigma\mst@Sigma + \let\Upsilon\mst@Upsilon + \let\Phi\mst@Phi + \let\Psi\mst@Psi + \let\Omega\mst@Omega +% \end{macrocode} +% |1.3h 2015/10/31| adds this conditional to correct the bad bug in +% |1.3d 2014/05/23| which caused |\alpha| etc... to become undefined +% under option |selfGreek|. +% \begin{macrocode} + \ifmst@selfGreek\else + \let\alpha\mst@alpha + \let\beta\mst@beta + \let\gamma\mst@gamma + \let\delta\mst@delta + \let\epsilon\mst@epsilon + \let\zeta\mst@zeta + \let\eta\mst@eta + \let\theta\mst@theta + \let\iota\mst@iota + \let\kappa\mst@kappa + \let\lambda\mst@lambda + \let\mu\mst@mu + \let\nu\mst@nu + \let\xi\mst@xi + \let\omicron\mst@omicron + \let\pi\mst@pi + \let\rho\mst@rho + \let\sigma\mst@sigma + \let\tau\mst@tau + \let\upsilon\mst@upsilon + \let\phi\mst@phi + \let\chi\mst@chi + \let\psi\mst@psi + \let\omega\mst@omega +% 1.3h: digamma only defined with option LGRgreek: + \ifmst@LGRgreek\let\digamma\mst@digamma\fi +% + \let\varsigma\mst@varsigma +% conditional added 1.3h 2015/10/31 + \ifmst@LGRgreek\else + \let\varepsilon\mst@varepsilon + \let\vartheta\mst@vartheta + \let\varpi\mst@varpi + \let\varrho\mst@varrho + \let\varphi\mst@varphi +% + \let\partial\mst@partial + \let\wp\mst@wp +% 1.3h: no \mst@ell if symbolgreek (bugfix 1.3h 2015/10/31) + \ifmst@symbolgreek\else\let\ell\mst@ell\fi + \fi + \fi +}% \MTcustomgreek +\fi +\let\Mathastextstandardgreek\MTstandardgreek +\let\Mathastextcustomgreek\MTcustomgreek +\ifmst@subdued\else\MTcustomgreek\fi +% \end{macrocode} +% \end{macro}\end{macro}\end{macro} +% \begin{macro}{\inodot} +% \begin{macro}{\jnodot} +% In |1.0|, I had them of type |mathord|, here I choose |mathalpha|. If I +% used \cs{i} and \cs{j} from the text font the problem would be with the +% fontsize, if in scriptstyle. The amsmath \cs{text} would do the trick. +% +% |1.14b| |2011/04/02|: again this bug in the EU1/EU2 encoding part, as in the +% code redefining \$ etc in math mode (see above). Fixed. +% +% |1.3l| |2016/01/29|: anticipating TL2016 fontspec's switch to |TU|. +% +% |1.3t| |2018/08/22| removes the definitions done of |\i| and |\j| +% since |1.12| (as robust commands usable both in text and math mode). +% +% |1.3u| lets the \cs{imath} and \cs{jmath} react to the font encoding at each +% math version. +% \begin{macrocode} +\def\mst@subduedinodot{% + \let\inodot\mst@original@imath + \let\jnodot\mst@original@jmath +}% +\def\mst@nonsubduedinodot{% + \expandafter\let\expandafter\inodot + \csname mst@inodot@mv\math@version\endcsname + \expandafter\let\expandafter\jnodot + \csname mst@jnodot@mv\math@version\endcsname +}% +\def\mst@dothe@inodotstuff#1#2#3{% + \edef\mst@tmp@enc{#3}% + \if1\mst@OneifUniEnc + % Unicode engine and font + \mst@Umathchardef#1="7 \symmtletterfont "0131 \relax + \mst@Umathchardef#2="7 \symmtletterfont "0237 \relax + \else + \DeclareMathSymbol{#1}{\mathalpha}{mtletterfont} + {\csname\mst@tmp@enc\string\i\endcsname} + \DeclareMathSymbol{#2}{\mathalpha}{mtletterfont} + {\csname\mst@tmp@enc\string\j\endcsname} + \fi}% \mst@dothe@inodotstuff +\ifmst@defaultimath\else\typeout{** \string\imath\space and \string\jmath\space} + \AtEndOfPackage{\AtBeginDocument{% + \renewcommand*{\imath}{\inodot}% + \renewcommand*{\jmath}{\jnodot}% + }}% +\fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macro}{math accents} +% \emph{Obsolete comments relative to the 2011 code:} +% \begin{quote} +% I don't know how to get from the encoding to the slot +% positions of the accents (apart from going to look at +% all possible encodings definition files and putting this +% info here). In standard \LaTeX{}, the math accents are +% taken from the `operators' font. So we do the same +% here. Of course there is the problem that the user can +% define math versions with different encodings. Here I +% take T1 if it was the default at the time of loading the +% package, else OT1. +% |1.12b|: I add LY1 which is quasi like OT1. +% \end{quote} +% +% At |1.3u 2019/08/20| I decide to remove the hard-coded slot positions +% for OT1, T1 and LY1, and replace them with some hack which assumes +% LaTeX2e way of handling text accents got executed by the encoding +% definition file. If not, some breakage on package loading could occur, but +% this whole thing is conditional on the |mathaccents| option anyway, which +% per default is not executed. +% +% The |\vec| accent is not considered here because it has no suitable +% available glyph in a standard 8bits text font encodings. +% +% Also at |1.3u| the math accents adapt to the font encoding at each math +% version. +% \begin{macrocode} +\let\mst@subduedmathaccents\@empty +\let\mst@nonsubduedmathaccents\@empty +\ifmst@mathaccents +\def\mst@subduedmathaccents{% + \@tfor\@tempa:={grave}{acute}{check}{breve}{bar}% + {dot}{ddot}{mathring}{hat}{tilde}% + \do + {\expandafter\let\csname\@tempa\expandafter\endcsname + \csname mst@original@\@tempa\endcsname}% +}% +\def\mst@nonsubduedmathaccents{% + \@tfor\@tempa:={grave}{acute}{check}{breve}{bar}% + {dot}{ddot}{mathring}{hat}{tilde}% + \do + {\expandafter\let\csname\@tempa\expandafter\endcsname + \csname mst@\@tempa @mv\math@version\endcsname}% +}% +\def\mst@dothe@mathaccentsstuff#1#2{% + \begingroup + \edef\mst@tmp@enc{#2}% + \def\@text@composite##1\@text@composite##2{##2}% + \let\add@accent\@firstoftwo + \let\add@unicode@accent\@firstoftwo + \if1\mst@OneifUniEnc + \ifmst@unimathaccents + % \` -> \grave + \expandafter\xdef\csname mst@grave@mv#1\endcsname + {\mst@Umathaccent + 7 + \number\symmtoperatorfont\space + \csname#2\string\`\endcsname{}\relax}% + % \' -> \acute + \expandafter\xdef\csname mst@acute@mv#1\endcsname + {\mst@Umathaccent + 7 + \number\symmtoperatorfont\space + \csname#2\string\'\endcsname{}\relax}% + % \v -> \check + \expandafter\xdef\csname mst@check@mv#1\endcsname + {\mst@Umathaccent + 7 + \number\symmtoperatorfont\space + \csname#2\string\v\endcsname{}\relax}% + % \u -> \breve + \expandafter\xdef\csname mst@breve@mv#1\endcsname + {\mst@Umathaccent + 7 + \number\symmtoperatorfont\space + \csname#2\string\u\endcsname{}\relax}% + % \= -> \bar + \expandafter\xdef\csname mst@bar@mv#1\endcsname + {\mst@Umathaccent + 7 + \number\symmtoperatorfont\space + \csname#2\string\=\endcsname{}\relax}% + % \. -> \dot + \expandafter\xdef\csname mst@dot@mv#1\endcsname + {\mst@Umathaccent + 7 + \number\symmtoperatorfont\space + \csname#2\string\.\endcsname{}\relax}% + % \" -> \ddot + \expandafter\xdef\csname mst@ddot@mv#1\endcsname + {\mst@Umathaccent + 7 + \number\symmtoperatorfont\space + \csname#2\string\"\endcsname{}\relax}% + % \r -> \mathring + \expandafter\xdef\csname mst@mathring@mv#1\endcsname + {\mst@Umathaccent + 7 + \number\symmtoperatorfont\space + \csname#2\string\r\endcsname{}\relax}% + % \^ -> \hat + \expandafter\xdef\csname mst@hat@mv#1\endcsname + {\mst@Umathaccent + 7 + \number\symmtoperatorfont\space + \csname#2\string\^\endcsname{}\relax}% + % \~ -> \tilde + \expandafter\xdef\csname mst@tilde@mv#1\endcsname + {\mst@Umathaccent + 7 + \number\symmtoperatorfont\space + \csname#2\string\~\endcsname{}\relax}% + \else + \@tfor\@tempa:={grave}{acute}{check}{breve}{bar}% + {dot}{ddot}{mathring}{hat}{tilde}% + \do + {\expandafter\gdef\csname mst@\@tempa @mv#1\expandafter\endcsname + \expandafter{\csname mst@original@\@tempa\endcsname}}% + \fi + \else + % \` -> \grave + \expandafter\DeclareMathAccent\expandafter + {\csname mst@grave@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% + {\csname#2\string\`\endcsname{}} + % \' -> \acute + \expandafter\DeclareMathAccent\expandafter + {\csname mst@acute@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% + {\csname#2\string\'\endcsname{}} + % \v -> \check + \expandafter\DeclareMathAccent\expandafter + {\csname mst@check@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% + {\csname#2\string\v\endcsname{}} + % \u -> \breve + \expandafter\DeclareMathAccent\expandafter + {\csname mst@breve@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% + {\csname#2\string\u\endcsname{}} + % \= -> \bar + \expandafter\DeclareMathAccent\expandafter + {\csname mst@bar@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% + {\csname#2\string\=\endcsname{}} + % \. -> \dot + \expandafter\DeclareMathAccent\expandafter + {\csname mst@dot@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% + {\csname#2\string\.\endcsname{}} + % \" -> \ddot + \expandafter\DeclareMathAccent\expandafter + {\csname mst@ddot@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% + {\csname#2\string\"\endcsname{}} + % \r -> \mathring + \expandafter\DeclareMathAccent\expandafter + {\csname mst@mathring@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% + {\csname#2\string\r\endcsname{}} + % \^ -> \hat + \expandafter\DeclareMathAccent\expandafter + {\csname mst@hat@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% + {\csname#2\string\^\endcsname{}} + % \~ -> \tilde + \expandafter\DeclareMathAccent\expandafter + {\csname mst@tilde@mv#1\endcsname}{\mathalpha}{mtoperatorfont}% + {\csname#2\string\~\endcsname{}} + \fi + \endgroup +}% +\fi % \ifmst@mathaccents +% \end{macrocode} +% \end{macro} +% \begin{macro}{\MTDeclareVersion} +% The \cs{MTDeclareVersion} command is to be used in the preamble +% to declare a math version. A more complicated variant would also +% specify a choice of series for the Euler and Symbol font: anyhow +% Symbol only has the medium series, and Euler has medium and bold, +% so what is lacking is the possibility to create a version with a +% bold Euler. There is already one such version: the default |bold| +% one. And there is always the possibility to add to the preamble +% \cs{SetSymbolFont}|{mteulervm}||{versionname}||{U}{zeur}{bx}{n}| if +% one wants to have a math version with bold Euler characters. +% +% For version |1.1| we add an optional parameter specifying the shape +% to be used for letters. +% +% Note: (|2012/10/24|) I really should check whether the user attempts to +% redefine the `normal' and `bold' versions and issue a warning in +% that case! +% +% |1.3c| (|2013/12/14|) adds an extra optional parameter after all +% previous ones, to inherit the settings from another version. Typically +% to be used with [bold]. I take this opportunity to sanitize a bit some +% line endings to avoid generating (in the preamble, document macros were +% already careful of course) too many space +% tokens, at least inside macros. And I modifiy (correct? perhaps it was on +% purpose) the strange way I used |\@onlypreamble| in earlier +% version. +% +% |1.3u| adds storage of macros holding the needed meanings for +% \cs{imath}, \cs{hbar}, math accents, and the minus symbol, +% version wise. +% \begin{macrocode} +\newcommand*\MTDeclareVersion[6][]{% + \edef\mst@declareversionargs{{#1}{#2}{#3}{#4}{#5}{#6}}% + \edef\mst@version{#2}% + \DeclareMathVersion{\mst@version}% + \MTDeclareVersion@ +}% \MTDeclareVersion +\newcommand*\MTDeclareVersion@[1][]{% + \edef\mst@tmp{#1}% + \ifx\mst@tmp\empty\else + \global\expandafter\let\csname mv@\mst@version\expandafter\endcsname + \csname mv@#1\endcsname + \typeout{** Math version `\mst@version\string' inherits from `#1\string'.}% + \fi + \expandafter\MTDeclareVersion@@\mst@declareversionargs +}% \MTDeclareVersion@ +\newcommand*\MTDeclareVersion@@[6]{% + \expandafter\edef\csname mst@encoding@\mst@version\endcsname{#3}% + \expandafter\edef\csname mst@family@\mst@version\endcsname{#4}% + \expandafter\edef\csname mst@series@\mst@version\endcsname{#5}% + \expandafter\edef\csname mst@shape@\mst@version\endcsname{#6}% + \expandafter\edef\csname mst@boldvariant@\mst@version\endcsname{\mst@bold}% + \expandafter\edef\csname mst@itdefault@\mst@version\endcsname{\itdefault}% + \expandafter\edef\csname mst@rmdefault@\mst@version\endcsname{\rmdefault}% + \expandafter\edef\csname mst@sfdefault@\mst@version\endcsname{\sfdefault}% + \expandafter\edef\csname mst@ttdefault@\mst@version\endcsname{\ttdefault}% + \expandafter\edef\csname mst@exists@skip@\mst@version\endcsname + {\mst@exists@skip}% + \expandafter\edef\csname mst@forall@skip@\mst@version\endcsname + {\mst@forall@skip}% + \expandafter\edef\csname mst@prime@skip@\mst@version\endcsname + {\mst@prime@skip}% + \def\mst@tmp{#1}% + \ifx\mst@tmp\empty + \ifmst@italic + \SetSymbolFont{mtletterfont}{#2}{#3}{#4}{#5}{\mst@ltsh}% + \typeout{** Latin letters in math version `#2\string' will use the font + #3/#4/#5/\mst@ltsh^^J% + ** Other characters (digits, ...) and \protect\log-like names + will be in #6 shape.}% + \expandafter\edef\csname mst@ltshape@\mst@version\endcsname{\mst@ltsh}% + \else + \SetSymbolFont{mtletterfont}{#2}{#3}{#4}{#5}{#6}% + \typeout{** Latin letters in math version `#2\string' will use the fonts + #3/#4/#5(\mst@bold)/#6}% + \expandafter\edef\csname mst@ltshape@\mst@version\endcsname{#6}% + \fi + \else + \SetSymbolFont{mtletterfont}{#2}{#3}{#4}{#5}{#1}% + \typeout{** Latin letters in math version `#2\string' will use the font + #3/#4/#5/#1^^J% + ** Other characters (digits, ...) and \protect\log-like + names will be in #6 shape.}% + \expandafter\edef\csname mst@ltshape@\mst@version\endcsname{#1}% + \fi + \ifmst@nonormalbold\else + \SetMathAlphabet{\mathnormalbold}{#2}{#3}{#4}{\mst@bold}% + {\csname mst@ltshape@\mst@version\endcsname}% + \fi + \SetSymbolFont{mtoperatorfont}{#2}{#3}{#4}{#5}{#6}% + \ifmst@defaultbf\else\SetMathAlphabet{\Mathbf}{#2}{#3}{#4}{\mst@bold}{#6}\fi + \ifmst@defaultit\else\SetMathAlphabet{\Mathit}{#2}{#3}{#4}{#5}{\itdefault}\fi + \ifmst@defaultsf\else\SetMathAlphabet{\Mathsf}{#2}{#3}{\sfdefault}{#5}{#6}\fi + \ifmst@defaulttt\else\SetMathAlphabet{\Mathtt}{#2}{#3}{\ttdefault}{#5}{#6}\fi + \ifmst@needeuler + \SetMathAlphabet{\MathEulerBold}{#2}{U}{zeur}{\mst@bold}{n}% + \fi +% \end{macrocode} +% \begin{macro}{LGRgreeks} +% \begin{macro}{selfGreeks} +% In the case of option LGRgreeks (selfGreeks), it is expected that +% the fonts used in each math versions exist in LGR (OT1) encoding. We +% first recalculate the shapes to be used for lowercase and uppercase +% Greek letters depending on the frenchmath and [it/up][g/G]reek +% options as well as on the (local to this version) shapes for letters +% and digits. +% \begin{macrocode} + \def\mst@greek@lsh@loc{\csname mst@ltshape@\mst@version\endcsname}% + \def\mst@greek@ush@loc{\csname mst@shape@\mst@version\endcsname}% + \ifmst@itgreek\def\mst@greek@lsh@loc{\itdefault}% + \def\mst@greek@ush@loc{\itdefault}% + \fi + \ifmst@upgreek\def\mst@greek@lsh@loc{\updefault}% + \def\mst@greek@ush@loc{\updefault}% + \fi + \ifmst@frenchmath + \ifmst@itgreek\else + \ifmst@upgreek\else + \def\mst@greek@lsh@loc{\csname mst@shape@\mst@version\endcsname}% + \def\mst@greek@ush@loc{\csname mst@shape@\mst@version\endcsname}% + \fi\fi + \fi + \ifcase\mst@greek@select + \or\def\mst@greek@ush@loc{\itdefault}% + \or\def\mst@greek@ush@loc{\updefault}% + \fi + \ifmst@LGRgreeks + \SetSymbolFont{mtlgrfontlower}{#2}{LGR}{#4}{#5}{\mst@greek@lsh@loc}% + \SetSymbolFont{mtlgrfontupper}{#2}{LGR}{#4}{#5}{\mst@greek@ush@loc}% + \typeout{** Greek letters (\mst@greek@lsh@loc/\mst@greek@ush@loc) will use + LGR font #4\ifmst@subdued ^^J** (in non subdued versions)\fi}% + \else + \ifmst@selfGreeks + \SetSymbolFont{mtselfGreekfont}{#2}{OT1}{#4}{#5}{\mst@greek@ush@loc}% + \typeout{** Capital Greek letters (\mst@greek@lsh@loc/\mst@greek@ush@loc) + will use OT1 font #4\ifmst@subdued ^^J** (in non subdued versions)\fi}% + \else + \ifmst@LGRgreek + \SetSymbolFont{mtlgrfontlower}{#2}{LGR}{\mst@greekfont}{#5}{\mst@greek@lsh@loc}% + \SetSymbolFont{mtlgrfontupper}{#2}{LGR}{\mst@greekfont}{#5}{\mst@greek@ush@loc}% + \typeout{** Greek letters (\mst@greek@lsh@loc/\mst@greek@ush@loc) will use + LGR font \mst@greekfont\ifmst@subdued ^^J** (in non subdued versions)\fi}% + \else + \ifmst@selfGreek + \SetSymbolFont{mtselfGreekfont}{#2}{OT1}{\mst@greekfont}{#5}{\mst@greek@ush@loc}% + \typeout{** Capital Greek letters (\mst@greek@lsh@loc/\mst@greek@ush@loc) + will use OT1 font \mst@greekfont\ifmst@subdued ^^J** (in non subdued versions)\fi}% + \fi + \fi + \fi + \fi + \edef\mst@tmp{\expandafter\noexpand\csname mst@hbar@mv#2\endcsname + \expandafter\noexpand\csname mst@ltbar@mv#2\endcsname}% + \expandafter\mst@dothe@hbarstuff\mst@tmp{#3}% + \edef\mst@tmp{\expandafter\noexpand\csname mst@inodot@mv#2\endcsname + \expandafter\noexpand\csname mst@jnodot@mv#2\endcsname}% + \expandafter\mst@dothe@inodotstuff\mst@tmp{#3}% + \ifmst@mathaccents + \mst@dothe@mathaccentsstuff{#2}{#3}% + \fi + \edef\mst@tmp{\expandafter\noexpand\csname mst@minus@mv#2\endcsname + \expandafter\noexpand\csname mst@varfam@minus@mv#2\endcsname}% + \ifmst@endash + \expandafter\mst@dothe@endashstuff\mst@tmp{#3}% + \else + \ifmst@emdash + \expandafter\mst@dothe@emdashstuff\mst@tmp{#3}% + \else + \expandafter\mst@dothe@hyphenstuff\mst@tmp + \fi + \fi +}% \MTDeclareVersion@@ +\let\MathastextDeclareVersion\MTDeclareVersion +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}{\MTversion} +% \begin{macro}{\MTversion@} +% \begin{macro}{\MTversion@s} +% \begin{macro}{\MTversion@@} +% This is a wrapper around \LaTeX{}'s \cs{mathversion}: here we have an +% optional argument allowing a quick and easy change of the text fonts +% additionally to the math fonts. Present already in the initial +% version of the package (January 2011.) +% +% |1.15|: some modifications for the subdued option vs LGRgreek and +% for the math muskips after \cs{exists} and \cs{forall}. +% +% |1.2|: with the subdued option sets the math alphabets in the +% normal and bold math versions do not apply to operator +% names and non-alphabetical symbols. The switch for braces +% is left as it is. +% +% |1.2b|: with the subdued option, the italic corrections are not added. +% Else, we check the shape of letters in this version. Also, there was a bug +% since |1.15|: the values of the math skips were taken not from the +% settings for the math version (\#2) but from those of the optional argument +% (\#1), if present... +% +% |1.3|: activation of italic corrections is now separated from actual math +% activation of letters. +% +% |1.3c|: a starred variant is added which does not modify the text fonts, +% only the math set-tup. +% +% |1.3d|: replaced in |\MTversion@| things like |\edef\mst@encoding{...}| and +% |\renewcommand{\encodingdefault}{\mst@@encoding}| by +% |\edef\encodingdefault{...}| etc\dots All those |\mst@@...| things were +% useless. I also redefine |\seriesdefault| rather than |\mddefault|. +% +% |1.3d|: mechanism of restoration of Greek in subdued normal and bold +% versions has been to all cases, and not only for the +% |LGRgreek| option. +% +% |1.3u|: version savvy (i.e. font-encoding savvy) minus sign, +% \cs{hbar}, \cs{imath}, math accents. +% \begin{macrocode} +\newcommand*\MTversion {\@ifstar\MTversion@s\MTversion@ } +\newcommand*\MTversion@s [1]{\mathversion{#1}\MTversion@@ } +\newcommand*\MTversion@ [2][]{% + \mathversion{#2}% defines \math@version as expanded #2 + \edef\mst@tmpa{#1}% + \ifx\mst@tmpa\empty + \let\mst@tmp\math@version + \else + \let\mst@tmp\mst@tmpa + \fi + \edef\encodingdefault {\csname mst@encoding@\mst@tmp\endcsname}% + \edef\familydefault {\csname mst@family@\mst@tmp\endcsname}% + \edef\seriesdefault {\csname mst@series@\mst@tmp\endcsname}% + \edef\shapedefault {\csname mst@shape@\mst@tmp\endcsname}% + \edef\bfdefault {\csname mst@boldvariant@\mst@tmp\endcsname}% + \edef\itdefault {\csname mst@itdefault@\mst@tmp\endcsname}% + \edef\rmdefault {\csname mst@rmdefault@\mst@tmp\endcsname}% + \edef\sfdefault {\csname mst@sfdefault@\mst@tmp\endcsname}% + \edef\ttdefault {\csname mst@ttdefault@\mst@tmp\endcsname}% + \usefont{\encodingdefault}{\familydefault}{\seriesdefault}{\shapedefault}% + \MTversion@@ +}% \MTversion@ +% \end{macrocode} +% |1.3j| has a stronger subdued which does \cs{MTnormalprime}, +% \cs{MTnormalexists}, \cs{MTnormalforall} rather than setting the skips to +% |0mu|. Hence \cs{MTversion} by default should do \cs{MTprimedoesskip}, +% \cs{MTexistsdoesskip}, \cs{MTforalldoesskip}. +% +% |1.3u| drops the argument, as the info is in \cs{math@version} from +% \LaTeX2e code. +% \begin{macrocode} +\newcommand*\MTversion@@ {% + \MTexistsdoesskip + \MTforalldoesskip + \MTprimedoesskip +% \end{macrocode} +% |v1.15e|: muskips. +% \begin{macrocode} + \mst@exists@muskip\csname mst@exists@skip@\math@version\endcsname\relax + \mst@forall@muskip\csname mst@forall@skip@\math@version\endcsname\relax +% \end{macrocode} +% |v1.2|: muskip for \cs{prime}. +% \begin{macrocode} + \mst@prime@muskip\csname mst@prime@skip@\math@version\endcsname\relax +% \end{macrocode} +% |v1.2b|: italic corrections except for italic/slanted (sic) letters, and of +% course except in the subdued normal and bold math versions. +% +% |v1.3|: by default, letters are made mathematically active, even if italic +% corrections are not used, to allow the action of \cs{MTsetmathskips}. +% \begin{macrocode} + \edef\mst@tmpa{\csname mst@ltshape@\math@version\endcsname}% + \edef\mst@tmpb{\csname mst@shape@\math@version\endcsname}% +% \end{macrocode} +% |v1.15c|: extending subdued to LGRgreek. +% +% |v1.15f|: subdueing math alphabets in a simpler way than in |1.15e|. +% +% |v1.2b|: subdueing the activation of characters in math mode. +% +% |v1.2d|: special treatment of the asterisk. +% +% |v1.3d|: extended LGRgreek mechanism of activation/restoration of Greek to all +% cases. +% +% |v1.3j|: use of \cs{MTeverymathdefault}, which includes \cs{MTicinmath}, but +% must be corrected then according to shape of letters and presence or absence +% of option |frenchmath|. We do only |\def\mst@ITcorr{\ifnum\fam=\m@ne\/\fi}| +% and not \cs{MTICinmath} to not overwrite some user-defined +% \cs{MTeverymathdefault}. Code for italic corrections or not according to +% letter shape is executed after \cs{MTeverymathdefault} which limits a bit +% user customizing possibilities, but if I moved it later, I would possibly +% have to put inside the \cs{MTicinmath} the check for |it| ot |sl|. Similary +% the \cs{MTcustomgreek} always executed (if not |subdued|). +% \begin{macrocode} + \MTmathoperatorsobeymathxx + \MTeverymathdefault + \MTcustomizenewmcodes + \@for\mst@tmpc:=it,sl\do{\ifx\mst@tmpc\mst@tmpa\MTnoicinmath\fi}% + \ifmst@frenchmath + \def\mst@ITcorr{\ifnum\fam=\m@ne\/\fi}% + \@for\mst@tmpc:=it,sl\do{\ifx\mst@tmpc\mst@tmpb\MTnoICinmath\fi}% + \fi +% \end{macrocode} +% |1.3j| has a stronger subdued which does \cs{MTnormalprime}, +% \cs{MTnormalexists}, \cs{MTnormalforall} rather than simply setting the +% skips to |0mu|. Note: \cs{MTnormalprime} is done as part of +% \cs{MTeverymathoff}. +% \begin{macrocode} + \ifmst@subdued + \def\mst@tmpa{normal}% + \ifx\math@version\mst@tmpa + \mst@restorealphabets + \MTstandardgreek + \MTmathoperatorsdonotobeymathxx + \MTnormalexists + \MTnormalforall + \MTeverymathoff + \MTresetnewmcodes +% \end{macrocode} +% |1.3t| adds better compatibility with |subdued| mode for +% |\imath/\jmath| and perfect compatibility for the minus sign. +% +% |1.3u| extends this further to allow per-math-version meanings +% for them. +% \begin{macrocode} + \mst@subduedhbar + \mst@subduedinodot + \mst@subduedmathaccents + \mst@subduedminus + \else + \def\mst@tmpa{bold}% + \ifx\math@version\mst@tmpa + \mst@restorealphabets + \MTstandardgreek + \MTmathoperatorsdonotobeymathxx + \MTnormalexists + \MTnormalforall + \MTeverymathoff + \MTresetnewmcodes + \mst@subduedhbar + \mst@subduedinodot + \mst@subduedmathaccents + \mst@subduedminus + \else + \mst@setalphabets + \MTcustomgreek + \mst@nonsubduedhbar + \mst@nonsubduedinodot + \mst@nonsubduedmathaccents + \mst@nonsubduedminus + \fi + \fi + \else + \MTcustomgreek % new with 1.3d + \mst@nonsubduedhbar + \mst@nonsubduedinodot + \mst@nonsubduedmathaccents + \mst@nonsubduedminus + \fi +}% \MTversion@@ +\let\MathastextVersion\MTversion +\let\Mathastextversion\MTversion +\let\MTVersion\MTversion +\let\mathastextversion\MTversion +% \end{macrocode} +% \end{macro}\end{macro}\end{macro}\end{macro} +% \begin{macro}{\MTWillUse} +% This is a preamble-only command, which can be used more than once, only the +% latest one counts. Sets up the math fonts in the normal and bold +% versions, as does \cs{Mathastext}. +% \begin{macrocode} +\newcommand*\MTWillUse[5][]{ + \MTencoding{#2} + \MTfamily{#3} + \MTseries{#4} + \MTshape{#5} + \ifmst@italic\MTlettershape{\itdefault}\fi % was missing in v 1.14 and prior + \edef\mst@tmp{#1} + \ifx\mst@tmp\empty\else\MTlettershape{#1}\fi + \Mathastext} +\let\MathastextWillUse\MTWillUse +\let\Mathastextwilluse\MTWillUse +% \end{macrocode} +% \end{macro} +% \begin{macro}{\Mathastext} +% The command \cs{Mathastext} can be used anywhere in the +% preamble and any number of time, the last one is the +% one that counts. +% +% In version |1.1| we have two fonts: they only differ in +% shape. The |mtletterfont| is for letters, and the +% |mtoperatorfont| for digits and log-like operator +% names. The default is that both are upright. +% +% Starting with version |1.12|, an optional argument makes +% \cs{Mathastext} act as the declaration of a math +% version, to be later used in the document. +% +% Versions |1.15x| brought some adaptations related to the subdued +% option. +% +% |1.3c| adds a second optional parameter to inherit previous settings +% from another version; mostly done to inherit the bold version fonts for +% symbols and large symbols. This is done in |\MTDeclareVersion|. +% +% |1.3j| moves the code related to \cs{MTicinmath} from \cs{Mathastext@} to +% \cs{AtBeginDocument} (code depending on whether |subdued| option in use). +% But we omit for this from \cs{MTicinmath} the \cs{MTmathactiveletters} +% and issue the latter during loading of package, hence allowing +% \cs{MTmathstandardletters} to be effective in the preamble. +% +% I forgot to document that under |subdued| option the \cs{Mathastext} +% command without optional parameter does not any |\SetSymbolFont| etc... +% but it has a few other tasks to complete nevertheless. +% +% |1.3u| fixes some long-standing bug that \cs{Mathastext} did not repeat some +% font-encoding dependent things: they got done only once during package +% loading (things regarding the \cs{hbar}, \cs{imath}, the math accents and +% the minus sign). They are now part of the contents of \cs{Mathastext} macro +% itself (which is executed during package loading). +% \begin{macrocode} +\def\Mathastext {\@ifnextchar [\Mathastext@declare\Mathastext@ } +\def\Mathastext@declare [#1]{% + \edef\mst@tmp{#1}% + \ifx\mst@tmp\empty + \expandafter\@firstoftwo + \else\expandafter\@secondoftwo + \fi + \Mathastext@ + {\MTDeclareVersion[\mst@ltsh]{#1}{\mst@enc}{\mst@fam}{\mst@ser}{\mst@opsh}}% +}% \Mathastext@declare +\def\Mathastext@ {% + \mst@update@greeksh + \edef\mst@encoding@normal{\mst@enc}% + \edef\mst@family@normal{\mst@fam}% + \edef\mst@series@normal{\mst@ser}% + \edef\mst@shape@normal{\mst@opsh}% + \edef\mst@ltshape@normal{\mst@ltsh}% + \edef\mst@itdefault@normal{\itdefault}% + \edef\mst@rmdefault@normal{\rmdefault}% + \edef\mst@sfdefault@normal{\sfdefault}% + \edef\mst@ttdefault@normal{\ttdefault}% + \edef\mst@boldvariant@normal{\mst@bold}% + \edef\mst@exists@skip@normal{\mst@exists@skip}% + \edef\mst@forall@skip@normal{\mst@forall@skip}% + \edef\mst@prime@skip@normal{\mst@prime@skip}% + \edef\mst@encoding@bold{\mst@enc}% + \edef\mst@family@bold{\mst@fam}% + \edef\mst@series@bold{\mst@bold}% + \edef\mst@shape@bold{\mst@opsh}% + \edef\mst@ltshape@bold{\mst@ltsh}% + \edef\mst@boldvariant@bold{\mst@bold}% + \edef\mst@itdefault@bold{\itdefault}% + \edef\mst@rmdefault@bold{\rmdefault}% + \edef\mst@sfdefault@bold{\sfdefault}% + \edef\mst@ttdefault@bold{\ttdefault}% + \edef\mst@exists@skip@bold{\mst@exists@skip}% + \edef\mst@forall@skip@bold{\mst@forall@skip}% + \edef\mst@prime@skip@bold{\mst@prime@skip}% + \ifmst@subdued +% \end{macrocode} +% Since |1.3j| this branch is actually almost superfluous, as entering +% |normal| or |bold| with \cs{MTversion} does \cs{MTnormalexists}, +% \cs{MTnormalforall}, and \cs{MTnormalprime}. But some default values are +% needed if the user insists on issuing \cs{MTexistsdoesskip}, etc... +% nevertheless. +% \begin{macrocode} + \def\mst@exists@skip@normal{0mu}% + \def\mst@forall@skip@normal{0mu}% + \def\mst@prime@skip@normal{0mu}% + \def\mst@exists@skip@bold{0mu}% + \def\mst@forall@skip@bold{0mu}% + \def\mst@prime@skip@bold{0mu}% + \else % not subdued + \ifmst@italic + \ifmst@frenchmath + \mst@exists@muskip\mst@exists@skip\relax + \mst@forall@muskip\mst@forall@skip\relax + \mst@prime@muskip\mst@prime@skip\relax + \else + \def\mst@exists@skip@normal{0mu}% + \def\mst@forall@skip@normal{0mu}% + \def\mst@prime@skip@normal{0mu}% + \def\mst@exists@skip@bold{0mu}% + \def\mst@forall@skip@bold{0mu}% + \def\mst@prime@skip@bold{0mu}% + \fi + \else + \mst@exists@muskip\mst@exists@skip\relax + \mst@forall@muskip\mst@forall@skip\relax + \mst@prime@muskip\mst@prime@skip\relax + \fi + \fi +%% v1.15f + \ifmst@nonormalbold\else + \SetMathAlphabet{\mathnormalbold}{normal}{\mst@encoding@normal}% + {\mst@family@normal}% + {\mst@boldvariant@normal}% + {\mst@ltshape@normal}% + \SetMathAlphabet{\mathnormalbold}{bold}{\mst@encoding@bold}% + {\mst@family@bold}% + {\mst@boldvariant@bold}% + {\mst@ltshape@bold}% + \fi +%% v1.15f adds \ifmst@default.. checks + \ifmst@subdued\else + \SetSymbolFont{mtletterfont}{normal}{\mst@encoding@normal}% + {\mst@family@normal}% + {\mst@series@normal}% + {\mst@ltshape@normal}% + \SetSymbolFont{mtletterfont}{bold} {\mst@encoding@bold}% + {\mst@family@bold}% + {\mst@series@bold}% + {\mst@ltshape@bold}% + \SetSymbolFont{mtoperatorfont}{normal}{\mst@encoding@normal}% + {\mst@family@normal}% + {\mst@series@normal}% + {\mst@shape@normal}% + \SetSymbolFont{mtoperatorfont}{bold} {\mst@encoding@bold}% + {\mst@family@bold}% + {\mst@series@bold}% + {\mst@shape@bold}% + \ifmst@defaultbf\else + \SetMathAlphabet{\Mathbf}{normal}{\mst@encoding@normal}% + {\mst@family@normal}% + {\mst@series@bold}% + {\mst@shape@normal}% + \SetMathAlphabet{\Mathbf}{bold}{\mst@encoding@bold}% + {\mst@family@bold}% + {\mst@series@bold}% + {\mst@shape@bold}% + \fi + \ifmst@defaultit\else + \SetMathAlphabet{\Mathit}{normal}{\mst@encoding@normal}% + {\mst@family@normal}% + {\mst@series@normal}% + {\mst@itdefault@normal}% + \SetMathAlphabet{\Mathit}{bold}{\mst@encoding@bold}% + {\mst@family@bold}% + {\mst@series@bold}% + {\mst@itdefault@bold}% + \fi + \ifmst@defaultsf\else + \SetMathAlphabet{\Mathsf}{normal}{\mst@encoding@normal}% + {\mst@sfdefault@normal}% + {\mst@series@normal}% + {\mst@shape@normal}% + \SetMathAlphabet{\Mathsf}{bold}{\mst@encoding@bold}% + {\mst@sfdefault@bold}% + {\mst@series@bold}% + {\mst@shape@bold}% + \fi + \ifmst@defaulttt\else + \SetMathAlphabet{\Mathtt}{normal}{\mst@encoding@normal}% + {\mst@ttdefault@normal}% + {\mst@series@normal}% + {\mst@shape@normal}% + \SetMathAlphabet{\Mathtt}{bold}{\mst@encoding@bold}% + {\mst@ttdefault@bold}% + {\mst@series@bold}% + {\mst@shape@bold}% + \fi + \fi % de \ifmst@subdued +% \end{macrocode} +% \begin{macro}{\MathEulerBold} +% |1.14c|: We reset |mteulervm| and \cs{MathEulerBold} here as the +% variant for bold may have been changed by the user via +% \cs{Mathastextboldvariant}|{m}|; and we should keep this local to +% math versions. +% \begin{macrocode} + \ifmst@needeuler + \SetSymbolFont{mteulervm}{bold}{U}{zeur}{\mst@boldvariant@normal}{n}% + \SetMathAlphabet{\MathEulerBold}{normal}% + {U}{zeur}{\mst@boldvariant@normal}{n}% + \SetMathAlphabet{\MathEulerBold}{bold}% + {U}{zeur}{\mst@boldvariant@normal}{n}% + \fi +% \end{macrocode} +% \end{macro} +% \begin{macrocode} + \ifmst@needsymbol\SetSymbolFont{mtpsymbol}{bold}% + {U}{psy}{\mst@boldvariant@normal}{n}% + \fi +% \end{macrocode} +% \begin{macro}{LGRgreek*} +% \begin{macro}{selfGreek*} +% LGRgreek, LGRgreeks, selfGreek, and selfGreeks options. +% \begin{macrocode} + \ifmst@subdued\else + \ifmst@LGRgreek + \SetSymbolFont{mtlgrfontlower}{normal}{LGR}% + {\mst@greekfont}{\mst@series@normal}{\mst@greek@lsh}% + \SetSymbolFont{mtlgrfontlower}{bold}{LGR}% + {\mst@greekfont}{\mst@boldvariant@normal}{\mst@greek@lsh}% + \SetSymbolFont{mtlgrfontupper}{normal}{LGR}% + {\mst@greekfont}{\mst@series@normal}{\mst@greek@ush}% + \SetSymbolFont{mtlgrfontupper}{bold}{LGR}% + {\mst@greekfont}{\mst@boldvariant@bold}{\mst@greek@ush}% + \else + \ifmst@selfGreek + \SetSymbolFont{mtselfGreekfont}{normal}{OT1}% + {\mst@greekfont}{\mst@series@normal}{\mst@greek@ush}% + \SetSymbolFont{mtselfGreekfont}{bold}{OT1}% + {\mst@greekfont}{\mst@boldvariant@bold}{\mst@greek@ush}% + \fi + \fi + \fi +% \end{macrocode} +% \end{macro} +% \end{macro} +% \begin{macrocode} + \ifmst@subdued + \typeout{** subdued mode will be activated for the normal and bold math versions}% + \else + \typeout{** Latin letters in the normal (resp. bold) math versions are now^^J% + ** set up to use the fonts + \mst@encoding@normal/\mst@family@normal/\mst@series@normal% + (\mst@boldvariant@normal)/\mst@ltshape@normal}% + \ifmst@LGRgreek\typeout{** Greek letters (\mst@greek@lsh/\mst@greek@ush) + will use LGR/\mst@greekfont}% + \fi + \ifmst@nodigits\else + \typeout{** Other characters (digits, ...) and \protect\log-like names will be^^J% + ** typeset with the \mst@shape@normal\space shape.}% + \fi + \fi + \ifmst@nohbar\else + \typeout{** \string\hbar}% + \mst@dothe@hbarstuff + \mst@hbar@mvnormal\mst@ltbar@mvnormal\mst@encoding@normal + \let\mst@hbar@mvbold\mst@hbar@mvnormal + \fi + \mst@dothe@inodotstuff\inodot\jnodot\mst@encoding@normal + \let\mst@inodot@mvnormal\inodot + \let\mst@inodot@mvbold\inodot + \let\mst@jnodot@mvnormal\jnodot + \let\mst@jnodot@mvbold\jnodot + \ifmst@mathaccents + \typeout{** math accents}% + \mst@dothe@mathaccentsstuff{normal}\mst@encoding@normal + \fi + \ifmst@nominus\else + \typeout{** minus as endash}% + \ifmst@endash + \mst@dothe@endashstuff\mst@minus@mvnormal\mst@varfam@minus@mvnormal + \mst@encoding@normal + \mst@dothe@endashstuff\mst@minus@mvbold\mst@varfam@minus@mvbold + \mst@encoding@normal + \else + \ifmst@emdash + \mst@dothe@emdashstuff\mst@minus@mvnormal\mst@varfam@minus@mvnormal + \mst@encoding@normal + \mst@dothe@emdashstuff\mst@minus@mvbold\mst@varfam@minus@mvbold + \mst@encoding@normal + \else + \mst@dothe@hyphenstuff\mst@minus@mvnormal\mst@varfam@minus@mvnormal + \let\mst@minus@mvbold\mst@minus@mvnormal + \let\mst@varfam@minus@mvbold\mst@varfam@minus@mvnormal + \fi + \fi + \fi +}% \Mathastext@ +\let\mathastext\Mathastext +\Mathastext +% \end{macrocode} +% \end{macro} +% Additional appropriate messages to the terminal and the log. +% \begin{macrocode} +\ifmst@eulergreek + \typeout{** Greek letters will use the Euler font. Use \protect\MathastextEulerScale{} to scale the + font.}% + \ifmst@subdued{\typeout{** (subdued mode: normal and bold math + version with default Greek letters.)}}\fi +\else +\ifmst@symbolgreek + \typeout{** Greek letters will use the PostScript Symbol font. Use^^J% + ** \protect\MathastextSymbolScale{} to scale the font.}% + \ifmst@subdued{\typeout{** (subdued mode: normal and bold math + version with default Greek letters.)}}\fi +\fi\fi +% \end{macrocode} +% \begin{macro}{Math sizes} +% I took the code for \cs{Huge} and \cs{HUGE} from the |moresize| package of +% Christian~\textsc{Cornelssen} +% \begin{macrocode} +\ifmst@defaultsizes\else +\providecommand\@xxxpt{29.86} +\providecommand\@xxxvipt{35.83} +\ifmst@twelve + \def\Huge{\@setfontsize\Huge\@xxxpt{36}} + \def\HUGE{\@setfontsize\HUGE\@xxxvipt{43}} +\typeout{** \protect\Huge\space and \protect\HUGE\space have been (re)-defined.} +\else + \def\HUGE{\@setfontsize\HUGE\@xxxpt{36}} +\typeout{** \protect\HUGE\space has been (re)-defined.} +\fi +% \end{macrocode} +% I choose rather big subscripts. +% \begin{macrocode} +\def\defaultscriptratio{.8333} +\def\defaultscriptscriptratio{.7} +\DeclareMathSizes{9}{9}{7}{5} +\DeclareMathSizes{\@xpt}{\@xpt}{8}{6} +\DeclareMathSizes{\@xipt}{\@xipt}{9}{7} +\DeclareMathSizes{\@xiipt}{\@xiipt}{10}{8} +\DeclareMathSizes{\@xivpt}{\@xivpt}{\@xiipt}{10} +\DeclareMathSizes{\@xviipt}{\@xviipt}{\@xivpt}{\@xiipt} +\DeclareMathSizes{\@xxpt}{\@xxpt}{\@xviipt}{\@xivpt} +\DeclareMathSizes{\@xxvpt}{\@xxvpt}{\@xxpt}{\@xviipt} +\DeclareMathSizes{\@xxxpt}{\@xxxpt}{\@xxvpt}{\@xxpt} +\DeclareMathSizes{\@xxxvipt}{\@xxxvipt}{\@xxxpt}{\@xxvpt} +\typeout{** mathastext has declared larger sizes for subscripts.^^J% +** To keep LaTeX defaults, use option `defaultmathsizes\string'.} +\fi +% \end{macrocode} +% \end{macro} +% \begin{macro}{\MTeverymathoff} +% |1.3i 2016/01/06| Compatibility patch with |\url| from |url.sty| and +% |\url/\nolinkurl| from |hyperref.sty|. +% +% |1.3j 2016/01/15| renamed the macro from |\MTactivemathoff| to +% |\MTeverymathoff|, as it is not exclusively a matter of math active +% characters due to |\MTeasynonlettersdonotobeymathxx|. +% +% |1.3o 2016/05/03| adds \cs{MTdonotfixfonts}. Operant with \LuaLaTeX\ only. +% \begin{macrocode} +\newcommand*\MTeverymathoff {% + \MTnormalasterisk + \MTnormalprime + \MTnonlettersdonotobeymathxx + \MTeasynonlettersdonotobeymathxx + \MTmathstandardletters + \MTdonotfixfonts +}% +\AtBeginDocument {% + \@ifpackageloaded{hyperref} + {\def\Hurl{\begingroup\MTeverymathoff\Url}} + {\@ifpackageloaded{url}{\DeclareUrlCommand\url{\MTeverymathoff}}{}}% +}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\MTeverymathdefault} +% |1.3j 2016/01/15| Customizable command which gets executed by +% \cs{MTversion} except when switching to |normal/bold| if option |subdued|. +% The included \cs{MTicinmath} does \cs{MTmathactiveletters} which will also +% activate the math skips around letters. +% +% The \cs{MTeverymathdefault} does not include +% \cs{MTmathoperatorsobeymathxx} as the latter does not correspond to +% something done during execution of |\the\everymath|. +% +% Should I put |\let\newmcodes@\mst@newmcodes@| here too ? No, it is not +% done at everymath. +% +% During the loading, the (non subdued) package does \cs{MTactiveasterisk} +% (if option asterisk), \cs{MTprimedoesskip}, \cs{MTeasynonlettersobeymathxx} +% and \cs{MTmathactiveletters}. There is some code at begin document for +% decisions about italic corrections, this code does not emit again +% \cs{MTmathactiveletters}, hence a \cs{MTmathstandardletters} in the +% preamble is not overruled. Furthermore the at begin document code will not +% overrule user emitted \cs{MTnoicinmath} etc... commands in the preamble. +% +% And user can employ \cs{MTnormalexists}, etc..., from inside the preamble, +% it will not be overruled (as it is delayed at begin document to after \mst +% dealings). +% +% |1.3o 2016/05/03| adds \cs{MTfixfonts}. Operant with \LuaLaTeX\ only. +% \begin{macrocode} +\newcommand*\MTeverymathdefault {% + \MTactiveasterisk + \MTprimedoesskip + \MTeasynonlettersobeymathxx + \MTicinmath + \MTfixfonts +}% +% \end{macrocode} +% \end{macro} +% \let\temp~ +% \def~{\rlap} +% \begin{macro}{Things to do last ~{``at begin document''}} +% \let~\temp +% \begin{macrocode} +\AtBeginDocument{% + \everymath\expandafter{\the\everymath + \mst@the\mst@do@nonletters \let\mst@the\@gobble + \mst@theeasy\mst@do@easynonletters \let\mst@theeasy\@gobble + \mst@thef\mst@do@az \let\mst@thef\@gobble + \mst@theF\mst@do@AZ \let\mst@theF\@gobble}% + \everydisplay\expandafter{\the\everydisplay + \mst@the\mst@do@nonletters \let\mst@the\@gobble + \mst@theeasy\mst@do@easynonletters \let\mst@theeasy\@gobble + \mst@thef\mst@do@az \let\mst@thef\@gobble + \mst@theF\mst@do@AZ \let\mst@theF\@gobble}% +% \end{macrocode} +% |1.3j|: moved here to be executed at begin document (and not from inside +% \cs{Mathastext@}.) The \cs{MTeverymathoff} does: \cs{MTnormalasterisk}, +% \cs{MTnormalprime}, \cs{MTnonlettersdonotobeymathxx}, +% \cs{MTeasynonlettersdonotobeymathxx}, \cs{MTmathstandardletters}. +% +% |1.3m|: doing \cs{MTmathactiveletters} in subdued mode immediately after +% |\begin{document}| resulted in errors because \cs{mst@itcorr} had been left +% undefined. We thus add \cs{MTnoicinmath} to the subdued initialization. +% +% Since |1.3n| there is \cs{MTresetnewmcodes} which needs +% \cs{mst@originalnewmcodes@}, itself defined at begin document. Thus we have +% wrapped the whole thing in \cs{AtEndOfPackage} (at |1.3u| whole code +% directly moved at end of package). +% +% And |1.3p| adds here \cs{MTcustomizenewmcodes} which had been regrettably +% forgotten by |1.3n|. +% +% |1.3t| adds some extras to handle correctly the minus sign and +% dotless i and j in subdued mode, even in case of usage with fontspec. +% +% |1.3u| similarly lets math accents be correctly subdued. +% \begin{macrocode} + \MTcustomizenewmcodes + \let\mst@original@hbar\hbar + \let\mst@original@imath\imath + \let\mst@original@jmath\jmath + \@tfor\@tempa:={grave}{acute}{check}{breve}{bar}% + {dot}{ddot}{mathring}{hat}{tilde}% + \do + {\expandafter\let\csname mst@original@\@tempa\expandafter\endcsname + \csname \@tempa\endcsname}% + \ifmst@XeOrLua + \edef\mst@subduedminus + {\mst@Umathcodenum`\noexpand\-=\the\mst@Umathcodenum`\-\relax}% + \else + \edef\mst@subduedminus{\mathcode`\noexpand\-=\the\mathcode`\-\relax}% + \fi + \ifmst@subdued + \MTeverymathoff + \MTresetnewmcodes + \MTnoicinmath + \MTmathoperatorsdonotobeymathxx + %\mst@subduedhbar + \let\inodot\imath + \let\jnodot\jmath + %\mst@subduedmathaccents + \mst@subduedminus + \else + \mst@nonsubduedhbar + \mst@nonsubduedmathaccents + \mst@nonsubduedminus +% \end{macrocode} +% |1.3j|: an earlier version of this code was earlier part of \cs{Mathastext@}. +% As we are now in \cs{AtBeginDocument} we try to be careful not to overwrite +% \cs{MTicinmath}, \cs{MTnoicinmath}, \cs{MTicalsoinmathxx}, ... if issued by +% the user in the preamble, though. And we do not execute +% \cs{MTmathactiveletters}, it is issued by the package at loading time in +% order to allow user to cancel it if desired from inside the preamble. +% \begin{macrocode} + \ifx\mst@itcorr\@undefined + \def\mst@itcorr{\ifnum\fam=\m@ne\/\fi}% + \@for\mst@tmp:=it,sl\do + {\ifx\mst@tmp\mst@ltshape@normal\let\mst@itcorr\@empty\fi }% + \fi + \ifx\mst@ITcorr\@undefined + \let\mst@ITcorr\mst@itcorr + \ifmst@frenchmath + \def\mst@ITcorr{\ifnum\fam=\m@ne\/\fi}% + \@for\mst@tmp:=it,sl\do + {\ifx\mst@tmp\mst@shape@normal\let\mst@ITcorr\@empty\fi }% + \fi + \fi + \fi +}% \AtBeginDocument +% \end{macrocode} +% \end{macro} +% \begin{macro}{subdued} +% |1.15|: The subdued code was initiated in May 2011. I returned to +% |mathastext| on Sep 24, 2012, and decided to complete what I had started +% then, but in the mean time I had forgotten almost all of the little I knew +% about \LaTeX{} macro programming. +% +% The point was to extract the data about how are `letters' and +% `operators' in the normal and bold versions, through obtaining the +% math families of `a' and `1', respectively$^1$. Due to the +% reassignements done for characters by |mathastext| I also had +% decided in 2011 that the OT1 encoding, if detected, should be +% replaced by T1 ($(1)$: but the \emph{euler} package for example +% assigns the digits to the \emph{letters} symbol font...) +% +% |1.15d|: Oct 13, 2012. The \cs{mathcode} thing has to be used with care +% under Unicode engines. Unfortunately the \cs{luatexUmathcode} macro is +% helpless as it is not possible to know if it will return a legacy mathcode +% or a Unicode mathcode. On the other hand the much saner +% \cs{XeTeXmathcodenum} always return a Unicode mathcode. +% +% {UPDATE for \mst\ 1.3 (|2013/09/02|): since the release of lualatex as +% included in +% TL2013, \cs{luatexUmathcodenum} behaves as \cs{XeTeXmathcodenum} so \mst 1.3 +% treats identically under both unicode engines the equal and minus signs (and +% the vertical bar).} +% +% |1.15e|: Oct 22, 2012. I add the necessary things to also subdue the +% \cs{mathbf}, \cs{mathit}, \cs{mathsf} and \cs{mathtt} macros (previous +% version only took care of the symbol alphabets \cs{mathnormal} and +% \cs{mathrm}.) [update: |1.15f| does that in a completely different and much +% simpler way] Notice that the package defines a \cs{mathnormalbold} macro, +% but it will not be subdued in the normal and bold math versions. +% +% |1.15f|: Oct 23, 2012. The previous version of the code queried the math +% family of a, respectively 1, to guess and then extract the fonts to be +% reassigned to mtletterfont and mtoperatorfont (which is done at the end of +% this .sty file). The present code simply directly uses letters and operators +% (so mathastext could not subdue itself... if it was somehow cloned), but +% obtains indeed the corresponding font specifications in normal and bold in a +% cleaner manner. But it is so much shorter (and avoids the \LuaLaTeX{} +% problem with \cs{luatexUmathcode}). Anyhow, for example the euler package +% puts the digits in the letters math family! so the previous method was also +% error prone. In fact there is no way to do this subdued mechanism on the +% basis of the legacy code of mathastext. The only way is to rewrite entirely +% the package to query all mathcodes of things it changes in order to be able +% to revert these changes (and one would have to do even more hacking for +% |\mathversion{normal}| and not only |\MTversion{normal}| to work). +% +% |1.15f|: and also I take this opportunity to do the subdued math +% alphabets things in a much much easier way, see below. +% +% |1.3s 2018/08/21|: I have half-forgotten the reasons for modifiying the +% font encoding to current |\encodingdefault|, but at any rate this should +% not be done in a |fontspec| context, encoding default being (now) |TU| it +% is very unlikely modifying from |TU| or to |TU| from something else will +% do any good.^^A See +%^^A \centeredline{\url{https://tex.stackexchange.com/questions/444565/mathastext-wrong-digits-in-math-mode/}} +%^^A for original report. +% I add workaround here for case of |fontspec| being +% detected via the |\encodingdefault| setting. +% +% |1.3t 2018/08/22|: the |1.3s| fix erroneously removed the +% |OT1->T1| replacement in |TU| context. +% +% |1.3u|: the whole thing will only get executed At Begin Document. +% \begin{macrocode} +\ifmst@subdued +\AtBeginDocument{% + \def\mst@reserved#1\getanddefine@fonts\symletters#2#3\@nil{% + \def\mst@normalmv@letter{#2}}% + \expandafter\mst@reserved\mv@normal\@nil + \def\mst@reserved#1\getanddefine@fonts\symletters#2#3\@nil{% + \def\mst@boldmv@letter{#2}}% + \expandafter\mst@reserved\mv@bold\@nil + \def\mst@reserved#1\getanddefine@fonts\symoperators#2#3\@nil{% + \def\mst@normalmv@operator{#2}}% + \expandafter\mst@reserved\mv@normal\@nil + \def\mst@reserved#1\getanddefine@fonts\symoperators#2#3\@nil{% + \def\mst@boldmv@operator{#2}}% + \expandafter\mst@reserved\mv@bold\@nil + \edef\mst@tmp@enc{\mst@encoding@normal}% + \def\mst@reserved#1/#2/#3/#4/{\gdef\mst@debut{#1}\gdef\mst@reste{#2/#3/#4}}% + \begingroup\escapechar\m@ne + \xdef\mst@funnyoti{\expandafter\string\csname OT1\endcsname}% + \expandafter\expandafter\expandafter + \mst@reserved\expandafter\string\mst@normalmv@operator/% + \endgroup + \ifx\mst@debut\mst@funnyoti\ifx\mst@tmp@enc\mst@oti\def\mst@tmp@enc{T1}\fi\fi + \edef\mst@normalmv@operator{\expandafter\noexpand\csname + \if1\mst@OneifUniEnc + \ifx\mst@debut\mst@funnyoti T1\else\mst@debut\fi + \else + \mst@tmp@enc + \fi/\mst@reste\endcsname}% + \edef\mst@tmp@enc{\mst@encoding@bold}% + \begingroup\escapechar\m@ne + \expandafter\expandafter\expandafter + \mst@reserved\expandafter\string\mst@boldmv@operator/% + \endgroup + \ifx\mst@debut\mst@funnyoti\ifx\mst@tmp@enc\mst@oti\def\mst@tmp@enc{T1}\fi\fi + \edef\mst@boldmv@operator{\expandafter\noexpand\csname + \if1\mst@OneifUniEnc + \ifx\mst@debut\mst@funnyoti T1\else\mst@debut\fi + \else + \mst@tmp@enc + \fi/\mst@reste\endcsname}% + \typeout{** ...entering subdued mode...}% + \expandafter\SetSymbolFont@ \expandafter\mv@normal\mst@normalmv@letter\symmtletterfont + \expandafter\SetSymbolFont@ \expandafter\mv@bold\mst@boldmv@letter\symmtletterfont + \expandafter\SetSymbolFont@ \expandafter\mv@normal\mst@normalmv@operator\symmtoperatorfont + \expandafter\SetSymbolFont@ \expandafter\mv@bold\mst@boldmv@operator\symmtoperatorfont + \typeout{** ...done.}% +}% \AtBeginDocument +\fi % \ifmst@subdued +% \end{macrocode} +%^^A In the short-lived |1.15e| I was doing the following for alphabets:\\ +%^^A |\def\mst@reservedc#1#2#3#4{\def\mst@normalmv@mathbf{#4#3}}|\\ +%^^A |\def\mst@reserveda#1{%|\\ +%^^A |\def\mst@reservedb##1\install@mathalphabet#1##2##3\@nil{\mst@reservedc##2}%|\\ +%^^A |\expandafter\mst@reservedb\mv@normal\@nil}|\\ +%^^A |\expandafter\mst@reserveda\csname mathbf\space\endcsname|\\ +%^^A and later in the code:\\ +%^^A |\expandafter\expandafter\expandafter\SetMathAlphabet@|\\ +%^^A |\expandafter\expandafter\expandafter\mv@normal|\\ +%^^A |\expandafter\mst@normalmv@mathbf\csname Mathbf\space \endcsname\Mathbf|\\ +%^^A It does work! but |\let\mst@original@bf\mathbf| is so +%^^A much simpler. And also safer, because \cs{mathbf} could have been +%^^A redefined using \cs{DeclareSymbolFontAlphabet}... (I could have +%^^A provided the necessary check to the already bloated code...) +% \end{macro} +% \begin{macro}{Preamble-only...} +% ``Only preamble'' restrictions. I was way too much obedient back in 2011, +% particularly taking into account how much of a pain it has been and still is +% that things such as \cs{DeclareMathSymbol} or \cs{DeclareMathAccent} are +% preamble-only. But keeping this for time being, however not using +% \cs{@onlypreamble} which breaks one's heart when tracing to see how much +% place it takes, so we do it in one go. +% \begin{macrocode} +\expandafter \gdef \expandafter \@preamblecmds \expandafter {\@preamblecmds +\do\MTitgreek +\do\MTupgreek +\do\MTitGreek +\do\MTitGreek +\do\Mathastextitgreek +\do\Mathastextupgreek +\do\MathastextitGreek +\do\MathastextitGreek +\do\MTgreekfont +\do\Mathastextgreekfont +\do\MTDeclareVersion +\do\MathastextDeclareVersion +\do\MTWillUse +\do\MathastextWillUse +\do\Mathastextwilluse +\do\Mathastext +\do\mathastext +} +\endinput +% \end{macrocode} +% \end{macro} +% \DeleteShortVerb{\|} +% \MakePercentComment +% +%<*dtx> +\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 \~} + +\CheckSum{6010} +\makeatletter\check@checksum\makeatother +\Finale +%% +%% End of file `mathastext.dtx'. diff --git a/macros/latex/contrib/mathastext/mathastext.pdf b/macros/latex/contrib/mathastext/mathastext.pdf new file mode 100644 index 0000000000..a8bccf1cd4 Binary files /dev/null and b/macros/latex/contrib/mathastext/mathastext.pdf differ diff --git a/macros/latex/contrib/mathastext/mathastexttestalphabets.pdf b/macros/latex/contrib/mathastext/mathastexttestalphabets.pdf new file mode 100644 index 0000000000..76d99b0888 Binary files /dev/null and b/macros/latex/contrib/mathastext/mathastexttestalphabets.pdf differ -- cgit v1.2.3