summaryrefslogtreecommitdiff
path: root/macros/luatex/optex/base/math-unicode.opm
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/optex/base/math-unicode.opm')
-rw-r--r--macros/luatex/optex/base/math-unicode.opm102
1 files changed, 60 insertions, 42 deletions
diff --git a/macros/luatex/optex/base/math-unicode.opm b/macros/luatex/optex/base/math-unicode.opm
index 01595975ab..f857deb175 100644
--- a/macros/luatex/optex/base/math-unicode.opm
+++ b/macros/luatex/optex/base/math-unicode.opm
@@ -1,14 +1,14 @@
-%% This is part of OpTeX project, see http://petr.olsak.net/optex
+%% This is part of the OpTeX project, see http://petr.olsak.net/optex
\_codedecl \loadmath {Unicode Math fonts <2020-06-06>} % preloaded in format
\_doc -----------------------------
- \`\loadmath` `{<Unicode-math font>}` loads given font. It does:
+ \`\loadmath` `{<Unicode-math font>}` loads the given font. It does:
\begitems
* define \`\_unimathfont` as `<Unicode-math font>`,
* redefine `\normalmath` and `\boldmath` macros to their Unicode counterparts,
* load the `\_unimathfont` by `\normalmath`,
- * print information about loaded font on the terminal,
+ * print information about the loaded font on the terminal,
* redefine all encoding dependent setting by `\input unimath-codes.opm`,
* protect new loading by setting \`\_ifmathloading` to false.
\enditems
@@ -28,7 +28,7 @@
\_opwarning{Math font "#1" not found, skipped...}%
\_else
\_def\_unimathfont{#1}%
- \_let\_normalmath = \_normalunimath \_let\_boldmath = \_boldunimath
+ \_let\_normalmath = \_normalunimath \_let\_boldmath = \_boldunimath
\_normalmath
\_wterm {MATH-FONT: "#1" -- unicode math prepared.}%
\_ifx\_ncharrmA\_undefined \_opinput {unimath-codes.opm}\_fi
@@ -40,7 +40,7 @@
\_doc -----------------------------
\`\loadboldmath` `{<bold-font>} \to {<normal-font>}`
defines \`\_unimathboldfont` as `<bold-font>` only if `\_unimathfont` is
- defined as `<normal-font>`. It is used when `\boldmath` macro is run.
+ defined as `<normal-font>`. It is used when \^`\boldmath` macro is run.
When no `\_unimathboldfont` is defined then the `\boldmath` macro
use \"fake bold" generated by `embolden` \LuaTeX/ font feature.
\_cod -----------------------------
@@ -48,7 +48,7 @@
\_def\_loadboldmath#1#2\to #3{%
\_def\_tmp{#3}\_ifx\_unimathfont\_tmp % do work only if #3 is loaded as normal Math
\_isfont{#1}\_iffalse
- \_opwarning{Bold-Math font "#1" not found, skipped...}
+ \_opwarning{Bold-Math font "#1" not found, skipped...}
\_else
\_def\_unimathboldfont{#1}%
\_wterm {MATH-FONT: "#1" -- unicode math bold prepared.}%
@@ -59,8 +59,15 @@
\_doc -----------------------------
The Unicode version of the \^`\normalmath` and \^`\boldmath` macros
are defined here as \`\_normalunimath` and \`\_boldunimath` macros.
- They are using \`\_setunimathdimens` in similar sense as
+ They are using \`\_setunimathdimens` in a similar sense as
\^`\_setmathdimens`.
+ \nl
+ You can combine more fonts if you register them to another
+ math families (5, 6, 7, etc.) in the \^`\normalmath` macro.
+ \nl
+ The default value of \^`\_normalunimath` shows a combination of base Unicode-math
+ font with 8bit Math font at family 4. See definition of `\script` macro where
+ `\fam4` is used.
\_cod -----------------------------
\_def\_normalunimath{%
@@ -69,7 +76,7 @@
\_setunimathdimens
}%
\_def\_boldunimath{%
- \_ifx\_unimathboldfont \_undefined
+ \_ifx\_unimathboldfont \_undefined
\_loadumathfamily 1 {\_unimathfont}{embolden=1.7;} % Base faked bold
\_else
\_loadumathfamily 1 {\_unimathboldfont}{} % Base real bold font
@@ -86,20 +93,36 @@
}
\_doc -----------------------------
- \`\_loadumathfamily` `<number> {<font>}{<font features>}`
- loads the given Unicode-math fonts in three sizes given by the
+ If you try the example above about
+ \~`\loadboldmath``{[xitsmath-bold]} \to {[xitsmath-regular]}`
+ then you can find a bug in XITSMath-Bold font: the symbols for norm
+ $\|x\|$ are missing. So, we have to define `\_boldmath` macro manually.
+ The missing symbol is loaded from family 5 as no-bold variant in our example:
+ \begtt
+ \loadmath{[xitsmath-regular]}
+ \def\_boldmath{%
+ \_loadumathfamily 1 {[xitsmath-bold]}{} % Base font
+ \_loadmathfamily 4 rsfs % script
+ \_loadumathfamily 5 {[xitsmath-regular]}{}
+ \_def\|{\_Udelimiter 0 5 "02016 }% % norm delimiter from family 5
+ \_setmathdimens
+ }
+ \endtt
+
+ \`\_loadumathfamily` `<number> {<font>}{<font features>}`
+ loads the given Unicode-math fonts in three sizes given by the
\^`\setmathsizes` macro and sets it as the math family `<number>`.
The `<font features>` are added to the default
- \`\_mfontfeatures` and to the size dependent features `+ssty=0`
+ \`\_mfontfeatures` and to the size-dependent features `+ssty=0`
if script size is asked or `+ssty=1` if scriptscriptsize is asked.
- If the fath family 1 is loaded then the family 2 and 3 is set by the same
- font because \TeX/ needs to read dimension information about generating
+ If the math family 1 is loaded then the family 2 and 3 are set by the same
+ font because \TeX/ needs to read dimension information about generating
math formulae from these three math families. All information needed by
\TeX/ is collected in single Unicode-math font.
\_cod -----------------------------
\_def\_umathname#1#2{"#1:\_mfontfeatures#2"}
-\_def\_mfontfeatures{mode=base;script=math;}
+\_def\_mfontfeatures{mode=base;script=math;}
\_def\_loadumathfamily #1 #2#3 {%
\_edef\_optsizesave{\_the\_optsize}%
@@ -108,35 +131,35 @@
\_optsize=\_sizemscript \_font\_mF=\_umathname{#2}{+ssty=0;#3} at\_optsize \_scriptfont#1=\_mF
\_ifnum#1=1 \_scriptfont2=\_mF \_scriptfont3=\_mF \_fi
\_optsize=\_sizemsscript \_font\_mF=\_umathname{#2}{+ssty=1;#3} at\_optsize\_scriptscriptfont#1=\_mF
- \_ifnum#1=1 \_scriptscriptfont2=\_mF \_scriptscriptfont3=\_mF \_fi
+ \_ifnum#1=1 \_scriptscriptfont2=\_mF \_scriptscriptfont3=\_mF \_fi
\_optsize=\_optsizesave \_relax
}
\_doc -----------------------------
Unicode math font includes all typical math alphabets together, user needs not to
- load more \TeX/ math families. These math aphabets are encoded by
+ load more \TeX/ math families. These math alphabets are encoded by
different parts of Unicode table. We need auxiliary macros for setting
mathcodes by selected math alphabet.
- \nl
+ \nl
\`\_umathrange` `{<from->-<to>}<class><family>\<first>` sets `\Umathcode`s
- of the characters in the interval `<from>-<to>` to `\<first>`,
+ of the characters in the interval `<from>-<to>` to `\<first>`,
`\<first>+1`, `\<first>+2`
- etc., but \`\_umathcharholes` are skipped
+ etc., but \`\_umathcharholes` are skipped
(`\_umathcharholes` are parts of the Unicode table not designed for math
- alphabets but they causes that the math alphabets are
+ alphabets but they cause that the math alphabets are
not continuously spread out in the table; I mean that the
designers were under the influence of drugs when they created
this part of the Unicode table).
- The `<from>-<to>` clause includes normal letters like `A-Z`.
+ The `<from>-<to>` clause includes normal letters like `A-Z`.
\nl
- \`\_umahrangegreek` `\<first>` is the same as
+ \`\_umahrangegreek` `\<first>` is the same as
`\_umathrange {<alpha>-<omega>}\<first>`.
\nl
- \`\_umahrangeGREEK` `\<first>` is the same as
+ \`\_umahrangeGREEK` `\<first>` is the same as
`\_umathrange {<Alpha>-<Omega>}\<first>`.
\nl
\`\_greekdef` `<control sequences> \_relax` defines each control sequence
- as a normal character with codes `\_umathnumB`, `\_umathnumB+1`,
+ as a normal character with codes `\_umathnumB`, `\_umathnumB+1`,
`\_umathnumB+2` etc. It is used for redefinig the contol sequences for
math Greek `\alpha`, `\beta`, `\gamma` etc.
\_cod -----------------------------
@@ -176,47 +199,42 @@
The \^`\loadmath` `{<Unicode-math font>}` macro loads math fonts and
-redefines all default math-codes using `\input unimath-codes.opm`.
+redefines all default math-codes using `\input unimath-codes.opm`.
If Unicode-math font is loaded then \^`\_mathloadingfalse`
-is set, so new UnicodeMath font isn't loaded until \^`\doloadmath` is used.
+is set, so the new Unicode-math font isn't loaded until \^`\doloadmath` is used.
\^`\loadboldmath` `{<bold-font>} \to {<normal-font>}` loads bold variant only
-if `<normal-font>` was sucessully loaded by the `\loadmath`. For example:
+if `<normal-font>` was sucessully loaded by the previous `\loadmath`. For example:
\begtt
\loadmath {[xitsmath-regular]}
\loadboldmath {[xitsmath-bold]} \to {[xitsmath-regular]}
\endtt
-
-You can combine more fonts, if you register them to another
-math families (5, 6, 7, etc.) in the `\normalmath` macro.
-
-The default value of `\normalmath` shows a combination of base Unicode Math
-font with 8bit Math font at family 4. See definition of `\script` macro where
-`\fam4` is used. Of course, we need to set `\rmvariables` too, because 8bit font
-accepts only codes less than 255.
-
-See \url{http://tex.stackexchange.com/questions/308749/} for more technical details.
+There are very few Unicode-math fonts with full \^`\boldmath` support.
+I know only XITSMath-Bold and KpMath-Bold. If \^`\loadboldmath` is not used
+then \"faked bold" created from \^`\normalmath` is used by default.
The \^`\loadmath` macro was succesfully tested on:
\begtt
\loadmath{[XITSMath-Regular]} ... XITS MATH
\loadmath{[latinmodern-math]} ... Latin Modern Math
-\loadmath{[texgyretermes-math]} ... TeXGyre Termes Math
-\loadmath{[texgyrebonum-math]} ... TeXGyre Bonum Math
-\loadmath{[texgyrepagella-math]} ... TeXGyre Pagella Math
+\loadmath{[texgyretermes-math]} ... TeXGyre Termes Math
+\loadmath{[texgyrebonum-math]} ... TeXGyre Bonum Math
+\loadmath{[texgyrepagella-math]} ... TeXGyre Pagella Math
\loadmath{[texgyreschola-math]} ... TeXGyre Schola Math
-\loadmath{[texgyredejavu-math]} ... TeXGyre DeJaVu Math
-\loadmath{[LibertinusMath-Regular]} ... Libertinus Math
+\loadmath{[texgyredejavu-math]} ... TeXGyre DeJaVu Math
+\loadmath{[LibertinusMath-Regular]} ... Libertinus Math
\loadmath{[FiraMath-Regular]} ... Fira Math
\loadmath{[Asana-Math]} ... Asana Math
+\loadmath{[KpMath-Regular]} ... KP fonts Math
\endtt
\secc Unicode-math macros preloaded in the format
\printdoc math-unicode.opm
+
\secc[unimath-codes] Macros and codes set when \code{\\loadmatfont} is processed
The file `unimath-codes.opm` is loaded when the \^`\loadmath` is used. The