mathtext: Fetch quad width & axis height from font metrics#31110
mathtext: Fetch quad width & axis height from font metrics#31110QuLogic merged 2 commits intomatplotlib:text-overhaulfrom
Conversation
|
Re: DejaVu's font constants: I think you can't actually believe the values that fontforge gives you, because they appear to be nonstandard tables that I believe are "autofilled" by fontforge -- see https://fontforge.org/docs/techref/non-standard.html; also opening e.g. DejaVuSans.ttf with fontTools shows that there isn't actually a "TeX " table in that file (if I got that correctly). |
|
Doesn't it make sense to also add underline thickness and x-height while you are at it? For the LaTeX fonts and STIX, these should be very reliable, as LaTeX uses them. This only leaves DejaVu, for which one can measure the values once, and all other "custom" fonts, for which one can fall back to the old behavior. |
|
Probably we should do those as well, but maybe that should wait for the refactoring in #31121 as it makes it easier to fetch from the constants where necessary. |
|
It looks like 3 more images need to be updated. |
This mostly has a minimal change to results as the axis height is fairly closely aligned with the minus sign as previously implemented.
These are mostly wider than the previous calculation of the 'm' width. The values are invalid in the DejaVu fonts (-2048), so those still use the old method.
0744ec9 to
383028b
Compare
|
I checked the test images and it looks like i just missed updating them; they are similar differences in that the quad width spacing is a little different for CM fonts. Anyway, I've done the usual commit to the |
…rics mathtext: Fetch quad width & axis height from font metrics
This includes images changes for the following pull requests / commits: * [Fix center of rotation with rotation_mode='anchor'](matplotlib#29199) (c44db77) * [Remove ttconv backwards-compatibility code](matplotlib#30145) (8caff88) * [Remove kerning_factor from tests](matplotlib#29816) (7b4d725) * [Set text hinting to defaults](matplotlib#29816) (8255ae2) * [Update FreeType to 2.13.3](matplotlib#29816) (89c054d) * [Implement text shaping with libraqm](matplotlib#30000) (b0ded3a, 9813523) * [Add language parameter to Text objects](matplotlib#29794) (7ce8eae) * [Fix auto-sized glyphs with BaKoMa fonts](matplotlib#29936) (3ba2c13) * [pdf: Improve text with characters outside embedded font limits](matplotlib#30512) (b70fb88, 6cedcf7) * [Prepare `CharacterTracker` for advanced font features](matplotlib#30608) (8274e17, 70dc388, df670cf, ed5e074) * [Add font feature API to Text](matplotlib#29695) (972a688) * [Fix spacing in r"$\max f$"](matplotlib#30715) (4a99a83) * [Implement libraqm for vector outputs](matplotlib#30607) (bd17cd4) * [Drop the FT2Font intermediate buffer](matplotlib#30059) (9d7d7b4) * [Rasterize dvi files without dvipng](matplotlib#30039) (7627118) * [Update bundled FreeType and HarfBuzz libraries](matplotlib#30938) (a161658, 9619bcc) * [Fix positioning of wide mathtext accents](matplotlib#31069) (c2fa7ba) * [Refactor RendererAgg.draw_{mathtext,text,tex} to use same base algorithm](matplotlib#31085) (931bcf3) * [Implement TeX's fraction and script alignment](matplotlib#31046) (94ff452, 4bfa0f9, 1cd8510) * [Fix confusion between text height and ascent in metrics calculations](matplotlib#31107) (60f2310) * [mathtext: Fetch quad width & axis height from font metrics](matplotlib#31110) (692df3f, 383028b) * [mathtext: add mathnormal and distinguish between normal and italic family](matplotlib#31121) (a6913f3) * [ENH: Ignore empty text for tightbbox](matplotlib#31285) (d772043) * [Drop axis_artist tickdir image compat, due to text-overhaul merge](matplotlib#31281) (2057583) * [text: Use font metrics to determine line heights](matplotlib#31291) (3ab6a27, d961462, 97f4943) * [ps/pdf: Override font height metrics to support AFM files](matplotlib#31371) (e0913d4) * [TST: Cleanup back-compat code in tests touched by text overhaul](matplotlib#31295) (7c33379) * [TST: Set tests touched by text overhaul to mpl20 style](matplotlib#31300) (41c4d8d)
PR summary
As a followup to #31046 that @anntzer requested, this fetches the quad width and axis height from the font metrics, either the TFM or the TeX table in FontForge.
For Computer Modern and STIX, the axis height metric is very close to the previous calculation and there are minuscule changes. The quad width is a bit bigger than the old 'm' calculation, but it does appear closer to
usetex=Trueoutput.For DejaVu however, I'm not super happy with the embedded metrics. In #22852, @tfpf originally intended to calculate the axis height so that fraction bars aligned with the minus sign. This is not the case with the metric embedded in the font, and it's a pixel or two lower. Additionally, the quad space is completely bogus since it's -2048, so I didn't even bother adding it. I have left the axis height metric in for review here, but we may want to revert that for this font, especially since this is our default.
Note, I have based this PR on the
text-overhaul-figuresbranch so that the subsequent commits only show the relevant changes, but that does inflate the "Files changed" count.PR checklist