Dear all,

I'm writing to continue some recent discussions in other forums on unicode
math and how:
* unicode-math.sty current (incorrectly) deals with it, and
* how we envisage official support for unicode math in LaTeX into the
future.

* * *

In short, here's the issue as I see it.

LaTeX has a default maths font plus families such as \mathrm, \mathit, and
\mathbf to choose new alphabets. These maths fonts are expressly and
strictly only allowed to be text fonts, contrary to their name. This allows
people to write things like \mathit{Re} for Reynolds number and
\mathbf{Set} in category theory (thanks David C for the example).

The \mathbf command in particular has been abused in physics to denote
vectors and matrices, such as \mathbf{B} for magnetic field. I suspect the
situation is similar for sans math, with tensors using sans on occasion but
no doubt in other contexts used for multi-letter identifiers. (Examples
more than welcome; in fact, requested.)

In contrast, Unicode math defines a number of alphabets in a single Unicode
font, including mathematical italic and bold mathematical italic and many
more variations. In OpenType maths fonts to date, these symbols are all
designed as single-letter identifiers and not to be used for strings of
characters such as "Re" in italic or "Set" in bold.

So originally unicode-math simply mapped the unicode alphabets onto the
LaTeX commands (with nice options and so on for choosing your style of bold
and ensuring greek "just works"), and while all the style options and
normalisation were nice and work (IMO) well, the choice of overwriting
\mathbf and so on has led to obvious problems.

* * *

I'd first like to apologise for the inconvenience that unicode-math has
caused up until this point -- I do hope to "fix" it soon, whatever "fix"
means now. The rest of this email is largely a summary of approach taken by
unicode-math and how it can be fixed, expressed in plain (Unicode-)TeX (see
attached and run it through XeTeX; you'll need Linux Libertine installed
but feel free to replace it with any font with both roman and greek text
glyphs).

0. Colours are used to ensure what you're seeing is correct and not a
side-effect of the underlying Plain math machinery.

1. \mathbf and friends go back to simply selecting a text font. Note that
they still need to remap \mathcode{}s in this case because normal unicode
math glyphs exist all the way up in Plane 1 where text fonts daren't to
tread.

2. Greek input into \mathbf and friends does "work" -- if what you were
after were Greek letters from a text font.

3. To get proper bold symbols, including Greek, we'll need a whole new set
of commands. These will need sensible names of some sort. Below I've chosen
\symbf, etc., which doesn't look too bad to me.

4. If how I've implemented unicode-math looks wrong to you, I'd appreciate
suggestions :) Switching \mathcode{}s like this isn't super fun but
* doesn't seem too slow, and
* I'm not aware of anything else flexible and cross-platform enough that
will work instead.

5. I'm largely happy to make a breaking change to unicode-math.sty itself,
but comments on whether an "overwrite" mode which functions as the package
currently does would be sensible as a long term thing would be appreciated.
IMO, it doesn't make much sense to have a separate text font that is only
used for bold math identifiers that aren't real single-letter symbols -- in
such cases it would surely be sensible to use (perhaps a variation on)
\textbf.

Best regards,
Will

\newfam\bfmathfam
\newfam\itmathfam

\font\rm = "Linux Libertine O:color=000000" at 10pt\relax
\font\bf = "Linux Libertine O Bold:color=0000FF" at 10pt\relax
\font\it = "Linux Libertine O Italic:color=00AA00" at 10pt\relax
\font\mm = "[latinmodern-math.otf]:color=FF0000" at 10pt\relax

\textfont\bfmathfam\bf
\textfont\itmathfam\it
\textfont1\mm

\def\alpha{α}
\def\beta{β}
\def\gamma{γ}

\def\codemathhigh{%
 \Umathcode`\a = 7 1 "1D44E\relax
 \Umathcode`\b = 7 1 "1D44F\relax
 \Umathcode`\c = 7 1 "1D450\relax
 \Umathcode"03B1 = 7 1 "1D6FC\relax
 \Umathcode"03B2 = 7 1 "1D6FD\relax
 \Umathcode"03B3 = 7 1 "1D6FE\relax
}
\def\codemathlow{%
 \Umathcode`\a = 7 1 `\a\relax
 \Umathcode`\b = 7 1 `\b\relax
 \Umathcode`\c = 7 1 `\c\relax
 \Umathcode"03B1 = 7 1 "03B1\relax
 \Umathcode"03B2 = 7 1 "03B2\relax
 \Umathcode"03B3 = 7 1 "03B3\relax
}
\def\codemathsymbf{%
 \Umathcode`\a = 7 1 "1D41A\relax
 \Umathcode`\b = 7 1 "1D41B\relax
 \Umathcode`\c = 7 1 "1D41C\relax
 \Umathcode"03B1 = 7 1 "1D6C2\relax
 \Umathcode"03B2 = 7 1 "1D6C3\relax
 \Umathcode"03B3 = 7 1 "1D6C4\relax
}

\def\mathit#1{{\codemathlow\fam\itmathfam #1}}
\def\mathbf#1{{\codemathlow\fam\bfmathfam #1}}
\def\symbf#1{{\codemathsymbf #1}}

\parindent=0pt\relax
\hsize=6cm\relax
\hrule
\bigskip

\rm
\codemathhigh

Regular symbols:
$$
 a + b + c \quad \alpha + \beta + \gamma
$$
Bold and italic math families:
$$
 \mathit{abc\alpha\beta\gamma} \quad \mathbf{abc\alpha\beta\gamma}
$$
Bold math symbols:
$$
 a+b+c \quad \symbf{a+b+c}
$$
$$
 \alpha + \beta + \gamma \quad \symbf{\alpha + \beta + \gamma}
$$

\bye