ntg-context - mailing list for ConTeXt users
 help / color / mirror / Atom feed
From: Hans Hagen via ntg-context <ntg-context@ntg.nl>
To: mailing list for ConTeXt users <ntg-context@ntg.nl>
Cc: Hans Hagen <j.hagen@xs4all.nl>
Subject: Re: Math prime issues for some fonts
Date: Sat, 27 Nov 2021 13:28:49 +0100	[thread overview]
Message-ID: <7a90fbcc-0e26-cda1-5d0a-fd26131ef89e@xs4all.nl> (raw)
In-Reply-To: <CAHy-LL8=9CXJwV_nuz0-bVdtu9x2dBcNW6ZezTg6N-QpU4Tkaw@mail.gmail.com>

On 11/26/2021 10:05 PM, Mikael Sundqvist via ntg-context wrote:
> Hi Jack,
> 
> I've been working with Hans on math in general and primes in
> particular in the last week. I do not understand all the details, but
> I think primes are handled differently now, and that one essentially
> need to have some tuning in goodie files (the reason is that they are
> done differently in different fonts, and that there was not simple
> one-fits-all solution). We have not touched eulernova yet.
It's not easy to explain in a few sentences so here we go.

In unicode, math is a script. There are plenty scripts supported and 
unicode supports their properties. Unicode tries to avoid duplicates 
but we have an latin A and a greek A, and we have plenty of nukta in 
indic scripts even if the shapes are the same. In math however, for some 
reason, we have ended up with some math code points being shared. So, we 
don't have a small italic h (because every italic h is supposed to be 
plank constant) and we don't have primes because minutes are primes. 
Maybe today some strong arguing could avoid those anomalities but i fear 
that we're stuck with it forever now (math legacy stuff etc).

This results of for instance holes in math alphabets (less such holes in 
other scripts) that every application has to deal with and we end up 
with symbols that depending on their usage need some interpretation and 
handling. Btw, a side effect is that where an one can distinguish 
between f as variable or function by using an indicator this is not 
possible with h so in copy/paste or interpretation one has to guess what 
it is. The same is true for prime like symbols: are they minutes or primes.

So, as the unicode slot for a prime is used for minutes (in text) the 
symbols in a font ends up as superscript but in math text mode it would 
not be in the right spot. Keep in mind that we have specific math fonts 
so ther ei sno real reason for not making primes consistent in text, 
script and scriptscript (ssty features): it simply is not done which in 
turn is probably a side effect of cmr being uses as template even if for 
other properties cmr fundamentally differs from open type math fonts.

Anyway, in the traditional tex approach to primes, the prime symbol is 
taken from the script variant, where is has a different size (or not), 
different boundingbox (or not) and/or is already raised (or not). Also, 
in tex the ' is made into an "active in math mode" character (one of 
few, an dit might even be that the reason for active math characters is 
in primes) in order to ease input. It effectively being a macro means 
that it can do some lookahead in order to (1) position itself as well as 
(2) make it possible to be followed by a superscript and/or subscript.

And, because the way math is coded and dealt with in tex basically has 
been chisseled in stone early after tex showed up, that situation is 
supposed to be dealt with: a multi-purpose shape with somewhat weird 
properties, parsing preferably in a robust way, positioning in a 
superscript like position (before or after a script), i fpossible 
intercepting interference etc. And ... all that is resembled in unicode 
math as well as all these math fonts out there.

But it is not the way i want to deal with it in context, also because 
there is even more involved (which i happily let you guess about). I 
want clean solution with no fancy (and somewhat obscure) tex macro doing 
magic that only a few are supposed to understand.

When we started with luatex, and thereby mkiv, we immediately went full 
unicode math (also with old fonts) and primes (plus a few other things) 
were a pain in the butt from the start due to fonts. For more than a 
decade I tried to catch this automagically by runtime patching and that 
works ok for most fonts but as recently more opentype math fonts showed 
up, some actually more opentypish than what we had, the decision was 
made to delegate this to the goodies mechanism than Mikael refers to. It 
means that we can control individual fonts (and users can patch that 
themselves if needed) because in the end, as always with fonts, scripts, 
languages and probably most of tex, heuristics tend to fail and clash.

It means that, as Wolfgang explained, you need to specify a goodie file 
with \definefontfamily (could be your own copy with personal 
preferences). Just for the record, some more is done on goodies and some 
more runtime patching might move that goodie control. It actually does 
mean that when a font (if ever) gets updated we need to check things 
which is why a mismatch in version will be reported on your console. 
Among the things we still need to discuss are if we wil freeze fonts in 
the distribution (only explicit updates) and if we drop official support 
for obsolete or (just) bad (looking) math fonts.

So to summarize: with primes we have to deal with (1) frozen tex math 
expectations that won't change (although in context we're free to do 
so), which (2) have found their way in unicode, and (3) also in fonts 
due to the way traditional tex does it, and (4) with which we cannot 
deal with in the engine, so (5) we do it our own contexty way, in the 
hope that (6) in the end it all looks good and (7) also gives us some of 
the benefits that i don't even dare to bring up here in order not to 
make it sound more complex.

As a note: if you notice suboptional things in math fonts, don't 
hesitate to make a good minimal example and then ask Mikael to look into 
is because he deals with and coordinates the tuning of goodie files.

Hans

-----------------------------------------------------------------
                                           Hans Hagen | PRAGMA ADE
               Ridderstraat 27 | 8061 GH Hasselt | The Netherlands
        tel: 038 477 53 69 | www.pragma-ade.nl | www.pragma-pod.nl
-----------------------------------------------------------------
___________________________________________________________________________________
If your question is of interest to others as well, please add an entry to the Wiki!

maillist : ntg-context@ntg.nl / http://www.ntg.nl/mailman/listinfo/ntg-context
webpage  : http://www.pragma-ade.nl / http://context.aanhet.net
archive  : https://bitbucket.org/phg/context-mirror/commits/
wiki     : http://contextgarden.net
___________________________________________________________________________________

  reply	other threads:[~2021-11-27 12:28 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-26 17:18 Jack Hill via ntg-context
2021-11-26 17:39 ` Wolfgang Schuster via ntg-context
2021-11-26 18:53   ` Jack Hill via ntg-context
2021-11-26 21:05     ` Mikael Sundqvist via ntg-context
2021-11-27 12:28       ` Hans Hagen via ntg-context [this message]
2021-11-27  8:21     ` Wolfgang Schuster via ntg-context
2021-11-29 17:40 Jack Hill via ntg-context

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7a90fbcc-0e26-cda1-5d0a-fd26131ef89e@xs4all.nl \
    --to=ntg-context@ntg.nl \
    --cc=j.hagen@xs4all.nl \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).