From cb2b57ca95d65bf9d9d21ec4a0109380f1e50fc0 Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Wed, 9 Jan 2019 22:44:11 +0000
Subject: fontspec (9jan19)

git-svn-id: svn://tug.org/texlive/trunk@49650 c570f23f-e606-0410-a88d-b1316a301751
---
 .../source/latex/fontspec/fontspec-code-math.dtx   | 255 +++++++++++++++++++++
 1 file changed, 255 insertions(+)
 create mode 100644 Master/texmf-dist/source/latex/fontspec/fontspec-code-math.dtx

(limited to 'Master/texmf-dist/source/latex/fontspec/fontspec-code-math.dtx')

diff --git a/Master/texmf-dist/source/latex/fontspec/fontspec-code-math.dtx b/Master/texmf-dist/source/latex/fontspec/fontspec-code-math.dtx
new file mode 100644
index 00000000000..aedef402cd8
--- /dev/null
+++ b/Master/texmf-dist/source/latex/fontspec/fontspec-code-math.dtx
@@ -0,0 +1,255 @@
+%%^^A%%  fontspec-code-math.dtx -- part of FONTSPEC <wspr.io/fontspec>
+%
+% \section{Selecting maths fonts}
+% Here, the fonts used in math mode are redefined to correspond to the
+% default roman, sans serif and typewriter fonts. Unfortunately, you
+% can only define maths fonts in the preamble, otherwise I'd run this
+% code whenever \cs{setmainfont} and friends was run.
+%
+% \iffalse
+%    \begin{macrocode}
+%<*fontspec>
+%    \end{macrocode}
+% \fi
+%
+% \begin{macro}{\fontspec_setup_maths:}
+% Everything here is performed \cs{AtBeginDocument} in order to
+% overwrite \pkg{euler}'s attempt. This means \pkg{fontspec} must be
+% loaded \emph{after} \pkg{euler}. We set up a conditional to return
+% an error if this rule is violated.
+%
+% Since every maths setup is slightly different, we also take
+% different paths for defining various math glyphs depending which
+% maths font package has been loaded.
+%
+%    \begin{macrocode}
+\@ifpackageloaded{euler}
+  { \bool_gset_true:N  \g_@@_pkg_euler_loaded_bool }
+  { \bool_gset_false:N \g_@@_pkg_euler_loaded_bool }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\cs_new:Nn \fontspec_setup_maths:
+ {
+  \@ifpackageloaded{euler}
+   {
+    \bool_if:NTF \g_@@_pkg_euler_loaded_bool
+     { \bool_gset_true:N \g_@@_math_euler_bool }
+     { \@@_error:n {euler-too-late} }
+   }
+   {}
+  \@ifpackageloaded{lucbmath}{ \bool_gset_true:N \g_@@_math_lucida_bool }{}
+  \@ifpackageloaded{lucidabr}{ \bool_gset_true:N \g_@@_math_lucida_bool }{}
+  \@ifpackageloaded{lucimatx}{ \bool_gset_true:N \g_@@_math_lucida_bool }{}
+%    \end{macrocode}
+% Knuth's CM fonts fonts are all squashed together, combining letters,
+% accents, text symbols and maths symbols all in the one font,
+% \texttt{cmr}, plus other things in other fonts. Because we are
+% changing the roman font in the document, we need to redefine all of
+% the maths glyphs in \LaTeX's \texttt{operators} maths font to still
+% go back to the legacy \texttt{cmr} font for all these random glyphs,
+% unless a separate maths font package has been loaded instead.
+%
+% In every case, the maths accents are always taken from the
+% \texttt{operators} font, which is generally the main text
+% font. (Actually, there is a \cmd\hat\ accent in
+% \texttt{EulerFractur}, but it's \emph{ugly}. So I ignore it. Sorry
+% if this causes inconvenience.)
+%    \begin{macrocode}
+  \DeclareSymbolFont{legacymaths}{OT1}{cmr}{m}{n}
+  \SetSymbolFont{legacymaths}{bold}{OT1}{cmr}{bx}{n}
+  \DeclareMathAccent{\acute}   {\mathalpha}{legacymaths}{19}
+  \DeclareMathAccent{\grave}   {\mathalpha}{legacymaths}{18}
+  \DeclareMathAccent{\ddot}    {\mathalpha}{legacymaths}{127}
+  \DeclareMathAccent{\tilde}   {\mathalpha}{legacymaths}{126}
+  \DeclareMathAccent{\bar}     {\mathalpha}{legacymaths}{22}
+  \DeclareMathAccent{\breve}   {\mathalpha}{legacymaths}{21}
+  \DeclareMathAccent{\check}   {\mathalpha}{legacymaths}{20}
+  \DeclareMathAccent{\hat}     {\mathalpha}{legacymaths}{94} % too bad, euler
+  \DeclareMathAccent{\dot}     {\mathalpha}{legacymaths}{95}
+  \DeclareMathAccent{\mathring}{\mathalpha}{legacymaths}{23}
+%    \end{macrocode}
+% \paragraph{\cmd\colon: what's going on?} Okay, so \verb":" and \cmd\colon\ in maths mode are defined in a few places, so I need to work out what does what. Respectively, we have:
+% \begin{Verbatim}
+% % fontmath.ltx:
+% \DeclareMathSymbol{\colon}{\mathpunct}{operators}{"3A}
+% \DeclareMathSymbol{:}{\mathrel}{operators}{"3A}
+%
+% % amsmath.sty:
+% \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
+%  \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
+%
+% % euler.sty:
+% \DeclareMathSymbol{:}\mathrel  {EulerFraktur}{"3A}
+%
+% % lucbmath.sty:
+% \DeclareMathSymbol{\@tempb}{\mathpunct}{operators}{58}
+% \ifx\colon\@tempb
+%   \DeclareMathSymbol{\colon}{\mathpunct}{operators}{58}
+% \fi
+% \DeclareMathSymbol{:}{\mathrel}{operators}{58}
+% \end{Verbatim}
+% ($\mathrm{3A_{16}}=\mathrm{58_{10}}$) So I think, based on this summary, that it is fair to tell \pkg{fontspec} to `replace' the operators font with legacymaths for this symbol, except when \pkg{amsmath} is loaded since we want to keep its definition.
+%
+%
+%    \begin{macrocode}
+  \group_begin:
+    \mathchardef\@tempa="603A \relax
+    \ifx\colon\@tempa
+      \DeclareMathSymbol{\colon}{\mathpunct}{legacymaths}{58}
+    \fi
+  \group_end:
+%    \end{macrocode}
+% The following symbols are only defined specifically in \pkg{euler}, so skip them
+% if that package is loaded.
+%    \begin{macrocode}
+  \bool_if:NF \g_@@_math_euler_bool
+   {
+    \DeclareMathSymbol{!}{\mathclose}{legacymaths}{33}
+    \DeclareMathSymbol{:}{\mathrel}  {legacymaths}{58}
+    \DeclareMathSymbol{;}{\mathpunct}{legacymaths}{59}
+    \DeclareMathSymbol{?}{\mathclose}{legacymaths}{63}
+%    \end{macrocode}
+% And these ones are defined both in \pkg{euler} and \pkg{lucbmath},
+% so we only need to run this code if no extra maths package has been
+% loaded.
+%    \begin{macrocode}
+    \bool_if:NF \g_@@_math_lucida_bool
+     {
+      \DeclareMathSymbol{0}{\mathalpha}{legacymaths}{`0}
+      \DeclareMathSymbol{1}{\mathalpha}{legacymaths}{`1}
+      \DeclareMathSymbol{2}{\mathalpha}{legacymaths}{`2}
+      \DeclareMathSymbol{3}{\mathalpha}{legacymaths}{`3}
+      \DeclareMathSymbol{4}{\mathalpha}{legacymaths}{`4}
+      \DeclareMathSymbol{5}{\mathalpha}{legacymaths}{`5}
+      \DeclareMathSymbol{6}{\mathalpha}{legacymaths}{`6}
+      \DeclareMathSymbol{7}{\mathalpha}{legacymaths}{`7}
+      \DeclareMathSymbol{8}{\mathalpha}{legacymaths}{`8}
+      \DeclareMathSymbol{9}{\mathalpha}{legacymaths}{`9}
+      \DeclareMathSymbol{\Gamma}{\mathalpha}{legacymaths}{0}
+      \DeclareMathSymbol{\Delta}{\mathalpha}{legacymaths}{1}
+      \DeclareMathSymbol{\Theta}{\mathalpha}{legacymaths}{2}
+      \DeclareMathSymbol{\Lambda}{\mathalpha}{legacymaths}{3}
+      \DeclareMathSymbol{\Xi}{\mathalpha}{legacymaths}{4}
+      \DeclareMathSymbol{\Pi}{\mathalpha}{legacymaths}{5}
+      \DeclareMathSymbol{\Sigma}{\mathalpha}{legacymaths}{6}
+      \DeclareMathSymbol{\Upsilon}{\mathalpha}{legacymaths}{7}
+      \DeclareMathSymbol{\Phi}{\mathalpha}{legacymaths}{8}
+      \DeclareMathSymbol{\Psi}{\mathalpha}{legacymaths}{9}
+      \DeclareMathSymbol{\Omega}{\mathalpha}{legacymaths}{10}
+      \DeclareMathSymbol{+}{\mathbin}{legacymaths}{43}
+      \DeclareMathSymbol{=}{\mathrel}{legacymaths}{61}
+      \DeclareMathDelimiter{(}{\mathopen} {legacymaths}{40}{largesymbols}{0}
+      \DeclareMathDelimiter{)}{\mathclose}{legacymaths}{41}{largesymbols}{1}
+      \DeclareMathDelimiter{[}{\mathopen} {legacymaths}{91}{largesymbols}{2}
+      \DeclareMathDelimiter{]}{\mathclose}{legacymaths}{93}{largesymbols}{3}
+      \DeclareMathDelimiter{/}{\mathord}{legacymaths}{47}{largesymbols}{14}
+      \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths}{36}
+      \renewcommand{\hbar}{{\mathchar"AF\mkern-9mu h}}% TODO: test with other fonts
+    }
+  }
+%    \end{macrocode}
+% Finally, we change the font definitions for \cmd\mathrm\ and so
+% on. These are defined using the \cmd\g_@@_mathrm_tl\ (\dots) macros,
+% which default to \cmd\rmdefault\ but may be specified with the
+% \cmd\setmathrm\ (\dots) commands in the preamble.
+%
+% Since \LaTeX\ only generally defines one level of boldness, we omit
+% \cmd\mathbf\ in the \textsf{bold} maths series. It can be specified
+% as per usual with \cmd\setboldmathrm, which stores the appropriate
+% family name in \cmd\g_@@_bfmathrm_tl.
+%    \begin{macrocode}
+  \DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\updefault
+  \SetSymbolFont{operators}{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\updefault
+  \DeclareSymbolFontAlphabet\mathrm{operators}
+  \SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\itdefault
+  \SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\updefault
+  \SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g_@@_mathsf_tl\mddefault\updefault
+  \SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g_@@_mathtt_tl\mddefault\updefault
+  \SetSymbolFont{operators}{bold}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\updefault
+  \tl_if_empty:NTF \g_@@_bfmathrm_tl
+   {
+    \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\itdefault
+   }
+   {
+    \SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\mddefault\updefault
+    \SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\bfdefault\updefault
+    \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\mddefault\itdefault
+   }
+  \SetMathAlphabet\mathsf{bold}\g_fontspec_encoding_tl\g_@@_mathsf_tl\bfdefault\updefault
+  \SetMathAlphabet\mathtt{bold}\g_fontspec_encoding_tl\g_@@_mathtt_tl\bfdefault\updefault
+ }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_maybe_setup_maths:}
+% We're a little less sophisticated about not executing the maths setup if various other maths font packages are loaded. This list is based on the wonderful `\LaTeX Font Catalogue': \url{http://www.tug.dk/FontCatalogue/mathfonts.html}. I'm sure there are more I've missed. Do the \TeX\ Gyre fonts have maths support yet?
+%
+% Untested: would |\unless\ifnum\Gamma=28672\relax\bool_set_false:N \g_@@_math_bool\fi| be a better test?
+% This needs more cooperation with euler and lucida, I think.
+%    \begin{macrocode}
+\cs_new:Nn \fontspec_maybe_setup_maths:
+ {
+  \@ifpackageloaded{anttor}
+   {
+    \ifx\define@antt@mathversions a\bool_gset_false:N \g_@@_math_bool\fi
+   }{}
+  \@ifpackageloaded{arevmath}       {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{eulervm}        {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{mathdesign}     {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{concmath}       {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{cmbright}       {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{mathesf}        {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{gfsartemisia}   {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{gfsneohellenic} {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{iwona}
+   {
+    \ifx\define@iwona@mathversions a\bool_set_false:N \g_@@_math_bool\fi
+   }{}
+  \@ifpackageloaded{kpfonts}{\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{kmath}  {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{kurier}
+   {
+    \ifx\define@kurier@mathversions a\bool_set_false:N \g_@@_math_bool\fi
+   }{}
+  \@ifpackageloaded{fouriernc}    {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{fourier}      {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{lmodern}      {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{mathpazo}     {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{mathptmx}     {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{MinionPro}    {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{unicode-math} {\bool_gset_false:N \g_@@_math_bool}{}
+  \@ifpackageloaded{breqn}        {\bool_gset_false:N \g_@@_math_bool}{}
+  \bool_if:NT \g_@@_math_bool
+   {
+    \@@_info:n {setup-math}
+    \fontspec_setup_maths:
+   }
+ }
+\AtBeginDocument{\fontspec_maybe_setup_maths:}
+%    \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+%    \begin{macrocode}
+%</fontspec>
+%    \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package  <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright  2004-2019  Will Robertson, LPPL "maintainer"
+% Copyright  2009-2015  Khaled Hosny
+% Copyright  2013       Philipp Gesang
+% Copyright  2013-2016  Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
-- 
cgit v1.2.3

