-
Notifications
You must be signed in to change notification settings - Fork 14
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Define fallback for OpenType MATH parameters #116
Comments
Some publishers (specially K12 oriented), would like to use any font for the mathematics. In this regards, be able to render a font without OpenType table where formulas look great, would be appreciated. In addition, in the above context usually the font of the text and the font of the mathematics are the same. |
As someone mentioned in a previous call, "look great" is not possible without a math font unless you have very low expectation on the quality of the math rendering (which might be the case for K12 people). This issue is just about about providing sensible fallback values. I would oppose any choice that makes implementation too complicate or non-interoperable (e.g. custom per-font tables as in early firefox implementation).
I guess this is off topic for this discussion, authors are free to specify the font-family they want via CSS, like for any HTML elements whether or not we provide acceptable fallback values. There is w3c/mathml#37 though to improve default font selection. |
I disagree that you can't achieve good layout unless you have font tables. What you need is access to the bounding box of the characters to know the math axis. MathPlayer, which predates math tables, used the context's font for common characters; it falls back on specialized math fonts for stretchy chars and chars not in the base font. Its output looks quite good. It is able to do good layout because it can measure properties of characters based on the bounding box. E.g, the axis height is precisely determined by the "-" or "=" character's bounding box. Other properties are based on the font size, x-height, or ems. All of these things are part of a OS's standard API for fonts. There is no magic in the math font's parameters, they are based on properties of the font and some characters in the font and can be closely estimated if you look at those properties. @fred-wang: are you able to get to these properties? If so, I can provide some default values for script shifts, etc., based on them. |
You can't achieve "great look" without proper math font. There is also much more parameters in the OpenType than what is suggested in TeX, there are stretchy variants/constructions in the MathVariant table, OpenType rtlm, ssty, mathvariant characters etc Anyway, it's probably not worth discussing this as good math rendering is subjective. What I can say for sure is that several people have reported bugs in the Firefox implementation that could only be solved by more OpenType math support, not simple heuristics. So I strongly disagree with some of the claims made in this thread.
Again Firefox was implemented in the past without MATH table support and users complained about rendering bugs. A long time ago, I think it also had per-font TeX parameters, suggesting that the simple heuristics you mention was not enough back to that time. I guess Murray and @davidcarlisle can comment better about the TeX / MATH parameters and why standard font metrics is generally not enough. In any case, accessing font-size, x-height and ems is ok in web engines (Firefox/WebKit and Igalia's Chromium fork do that). Regarding measuring the bounding box of a character, Firefox does that for some characters (and there are source code comments saying it is a slow path) but at this point I don't know if that's an acceptable approach in all web engines and if Mozilla people are happy with that (remember this is very old code). So I'm not going to comment further on this... In general, I don't think we should add anything in the Core spec until someone knowledgeable with web engines' design can confirm it is ok (does not add complexity, performance issue, too much code etc).
As I said in the initial comment, there are some stuff in Gecko/WebKit/OpenType MATH/TeX book so I can get the list of default values. https://www.scribd.com/document/74681377/OpenType-Math-Illuminated is also useful to compare TeX and OpenType MATH parameters. |
The CSS definition of ex ( https://drafts.csswg.org/css-values-4/#ex ) contains the following:
So it seems acceptable to rely on the bounding boxes of characters in some cases. I wonder what browser vendors consider "impossible or impractical" cases. |
CFF fonts do not define glyph bounding box, it has to be calculated on the fly from the glyph outlines which means the application needs a way to decode and parse the CFF table, and I can imagine that being a big task in some situations (but probably not for web browsers). |
I created a table to compare the suggested default values: https://mathml-refresh.github.io/math-constants.html |
That's very useful. I'll try to see if I an add a column for MathPlayer
which should provide an independent set of fallback values.
There is something wrong/poor with the display of the page. The left column
(the header) takes up way too much space in Chrome and Firefox under
windows, so the table values are way to the right. Scrolling them back on
causes overlap with the header.
Neil
…On Fri, Apr 26, 2019 at 2:42 PM Frédéric Wang ***@***.***> wrote:
I created a table to compare the suggested default values:
https://mathml-refresh.github.io/math-constants.html
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<https://github.com/mathml-refresh/mathml/issues/69#issuecomment-487210410>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AALZM3B5LLYPZU2UBNDT37LPSNZK3ANCNFSM4G3YJSKA>
.
|
That would be great.
Yes I noticed that too. Maybe @davidcarlisle knows why. I haven't changed the default layout. |
@NSoiffer I removed the default style. Hopefully the table should now show up correctly. |
@Frédéric Wang <fwang@igalia.com>: much better!
…On Thu, May 2, 2019 at 1:20 AM Frédéric Wang ***@***.***> wrote:
@NSoiffer <https://github.com/NSoiffer> I removed the default style.
Hopefully the table should now show up correctly.
—
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
<https://github.com/mathml-refresh/mathml/issues/69#issuecomment-488587978>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AALZM3DNZZY6FQEWPEGCV23PTKP2ZANCNFSM4G3YJSKA>
.
|
The spec has an appendix but the fallback values still need to be defined: https://mathml-refresh.github.io/mathml-core/#layout-constants-mathconstants |
CSS inline has an appendix mentioning mathematical baseline: |
As agreed last year, I added fallback for the values that are from the OpenType MATH spec. Microsoft opened MicrosoftDocs/typography-issues#285 so I guess we can continue discussions there. |
The fallback values listed in the spec are:
which are reversed from the recommendations from the OT MathConstants table. |
I should add it's not just the OT MathConstants recommendations they mismatch; they also don't match the values in your table at https://mathml-refresh.github.io/math-constants.html The only other ones I could find are:
|
@faceless2 thanks, I fixed the mfrac. I guess I'll have to review this. I think https://mathml-refresh.github.io/math-constants.html is probably more reliable from the time being. |
Thanks - the good news is we didn't find any others! Also wanted to flag up an OpenType font constant which may be applicable but isn't listed anywhere: |
I fixed two more. Hopefully, these were the only ones remaing.
Sounds a good idea. I see it is also supposed to match OS/2.yStrikeoutSize which might be another option. I'll add this to the agenda for next week. |
Consensus from 2020/03/23: use 1/24em for spaceAfterScript. |
Given that it is unlikely that there will be any progress or consensus on this in the short term, I propose to stick with a simple option to clean up the current text:
|
The text has been updated to always provide a fallback values. probably not ideal but we can improve later. Additionally, I have updated the text for stretchy operator shaping to address feedback from Google during upstreaming (basically unify measuring & painting). The special handling of unicode-based fallback was causing issue during review, so it has not been upstreamed (and Igalia removed it from downstream). I've updated the spec so that the suggested unicode constructions are non-normative. |
Writing tests for these is going to be difficult because values are highly dependent, you cannot just set arbitrary values like what we did for fonts using the OpenType MATH table. |
consensus from 2020-06: consider a better fallback in level-2, for level-1, keep current text. |
For some constants, the OpenType MATH specification suggests to use the same value as another constant when designing a font. However it does not make sense to use it as a fallback value when the MATH.MathConstants is not accessible at all. Instead, use the same suggested fallback value as the other constant. https://github.com/mathml-refresh/mathml/issues/69
…nderlineThickness is not available. https://github.com/mathml-refresh/mathml/issues/69
Having moved this I remmbered why we didn't move originally: potential link issues this from tests or elsewhere. I'll hold off moving more, although it would be good to get the issues in the mathml repository in a better state at some point |
This is needed when MathML is rendered without a font with an OpenType table.
Gecko, WebKit, OpenType MATH and TeX have some values. We need to check whether they are consistent and easily usable: https://mathml-refresh.github.io/math-constants.html
I think this might be difficult to test as some parameters interact between each other in the layout but we don't have much freedom to set independent values without a MATH font (most of the suggested fallbacks are based on font em or x-height IIRC).
The text was updated successfully, but these errors were encountered: