GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — mathtext: Fetch quad width & axis height from font metrics by QuLogic · Pull Request #31110 · matplotlib/matplotlib

Conversation

@QuLogic

@QuLogic QuLogic commented Feb 7, 2026

Copy link
Copy Markdown
Member

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=True output.

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-figures branch so that the subsequent commits only show the relevant changes, but that does inflate the "Files changed" count.

PR checklist

  • [n/a] "closes #0000" is in the body of the PR description to link the related issue
  • new and changed code is tested
  • [n/a] Plotting related features are demonstrated in an example
  • [n/a] New Features and API Changes are noted with a directive and release note
  • [n/a] Documentation complies with general and docstring guidelines

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

All reactions
@QuLogic QuLogic added this to the v3.11.0 milestone Feb 7, 2026
@QuLogic QuLogic added the topic: text/mathtext label Feb 7, 2026
@QuLogic QuLogic added this to Font and text overhaul Feb 7, 2026
@github-project-automation github-project-automation Bot moved this to Waiting for other PR in Font and text overhaul Feb 7, 2026
@QuLogic QuLogic moved this from Waiting for other PR to Ready for Review in Font and text overhaul Feb 7, 2026
@github-actions github-actions Bot added the topic: mplot3d label Feb 7, 2026
@QuLogic QuLogic mentioned this pull request Feb 7, 2026
mathtext: add support for unicode mathematics fonts #31064
Open
5 tasks
@anntzer

anntzer commented Feb 7, 2026

Copy link
Copy Markdown
Contributor

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).
I suspect that fontforge just has its own algorithm for filling in these values, although I couldn't actually find them from a quick skim over their source tree. I guess that for fonts like DejaVu Sans with no math metrics it makes sense to just fall back to our own guesses (use "m" and "x" metrics; align fraction bar midway of equal sign).

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@llohse

llohse commented Feb 10, 2026

Copy link
Copy Markdown
Contributor

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.
For OpenType math, they can be easily converted from the MATH table.

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.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@QuLogic

QuLogic commented Feb 18, 2026

Copy link
Copy Markdown
Member Author

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.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

tacaswell
tacaswell approved these changes Feb 20, 2026
View reviewed changes
@tacaswell

tacaswell commented Feb 20, 2026

Copy link
Copy Markdown
Member

It looks like 3 more images need to be updated.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

ksunden
ksunden approved these changes Feb 20, 2026
View reviewed changes
QuLogic added 2 commits February 28, 2026 01:54
@QuLogic
mathtext: Fetch axis height from font metrics
692df3f
This mostly has a minimal change to results as the axis height is fairly
closely aligned with the minus sign as previously implemented.
@QuLogic
mathtext: Fetch quad width from font metrics
383028b
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.
@QuLogic
QuLogic force-pushed the space-axisheight-metrics branch from 0744ec9 to 383028b Compare February 27, 2026 20:27
@github-actions github-actions Bot removed the topic: mplot3d label Feb 27, 2026
@QuLogic

QuLogic commented Feb 27, 2026

Copy link
Copy Markdown
Member Author

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 text-overhaul-figures branch and rebased this without image changes before merging.

All reactions

Sorry, something went wrong.

Uh oh!

There was an error while loading. Please reload this page.

@QuLogic
QuLogic merged commit d4bace4 into matplotlib:text-overhaul Mar 1, 2026
33 of 48 checks passed

Uh oh!

There was an error while loading. Please reload this page.

@github-project-automation github-project-automation Bot moved this from Ready for Review to Done in Font and text overhaul Mar 1, 2026
@QuLogic
QuLogic deleted the space-axisheight-metrics branch March 1, 2026 18:19
@llohse llohse mentioned this pull request Mar 2, 2026
mathtext: add mathnormal and distinguish between normal and italic family #31121
Merged
1 of 5 tasks
wavebyrd pushed a commit to wavebyrd/matplotlib that referenced this pull request Mar 13, 2026
@QuLogic
Merge pull request matplotlib#31110 from QuLogic/space-axisheight-met…
921c3b8
…rics

mathtext: Fetch quad width & axis height from font metrics
QuLogic added a commit to QuLogic/matplotlib that referenced this pull request Apr 10, 2026
@QuLogic
Update test images for font/text overhaul
12d2a4d
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)
@QuLogic QuLogic mentioned this pull request Apr 10, 2026
Font and text overhaul #30161
Merged
4 tasks done
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Reviewers

@tacaswell tacaswell tacaswell approved these changes
@ksunden ksunden ksunden approved these changes

Uh oh!

There was an error while loading. Please reload this page.

Assignees

No one assigned

Labels

topic: text/mathtext

Projects

Font and text overhaul
Status: Done

Milestone

v3.11.0

Development

Successfully merging this pull request may close these issues.

Uh oh!

There was an error while loading. Please reload this page.

5 participants

@QuLogic @anntzer @llohse @tacaswell @ksunden
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.