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 — ps/pdf: Override font height metrics to support AFM files by QuLogic · Pull Request #31371 · matplotlib/matplotlib

Conversation

@QuLogic

@QuLogic QuLogic commented Mar 25, 2026

Copy link
Copy Markdown
Member

PR summary

When outputting files using the "core 14 fonts" (e.g., rcParams['pdf.use14corefonts'] = True), text will be measured using our internal AFM files instead of any external files.

While we don't have a full API decided for how to pass full Text objects through backends, add in a small internal helper to allow the PS/PDF backends to override font height metrics with the AFM files.

Note, because there is still some small difference in how we calculated line spacing, there is some small difference in the result from before. But it no longer changes results depending on whether Helvetica is installed globally.

AI Disclosure

None

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
@github-actions github-actions Bot added topic: text backend: ps backend: pdf labels Mar 25, 2026
@QuLogic QuLogic mentioned this pull request Mar 25, 2026
TST: Restore some tolerances for some arch/platform-specific failures #31343
Merged
1 task done
@QuLogic QuLogic added this to Font and text overhaul Mar 25, 2026
@QuLogic QuLogic moved this to Ready for Review in Font and text overhaul Mar 25, 2026
@QuLogic QuLogic added this to the v3.11.0 milestone Mar 25, 2026
@QuLogic

QuLogic commented Mar 25, 2026

Copy link
Copy Markdown
Member Author

Test failures should just be from #31343.

All reactions

Sorry, something went wrong.

Uh oh!

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

anntzer
anntzer reviewed Mar 25, 2026
View reviewed changes
Comment thread lib/matplotlib/text.py Resolved

Uh oh!

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

anntzer
anntzer approved these changes Mar 25, 2026
View reviewed changes

@anntzer anntzer left a comment

Copy link
Copy Markdown
Contributor

There was a problem hiding this comment.

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I didn't check the failing tests, but the change makes sense.

Sorry, something went wrong.

Uh oh!

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

All reactions
@QuLogic
QuLogic force-pushed the afm-height-metrics branch from beec09b to 853aef9 Compare March 25, 2026 20:12
@QuLogic

QuLogic commented Mar 25, 2026

Copy link
Copy Markdown
Member Author

Side note, as this is the only time this test image has changed, feel free to merge after enough approvals without waiting for me.

All reactions

Sorry, something went wrong.

Uh oh!

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

@QuLogic
ps/pdf: Override font height metrics to support AFM files
e0913d4
When outputting files using the "core 14 fonts" (e.g.,
`rcParams['pdf.use14corefonts'] = True`), text will be measured using
our internal AFM files instead of any external files.

While we don't have a full API decided for how to pass full `Text`
objects through backends, add in a small internal helper to allow the
PS/PDF backends to override font height metrics with the AFM files.
@QuLogic
QuLogic force-pushed the afm-height-metrics branch from 853aef9 to e0913d4 Compare March 26, 2026 02:42
tacaswell
tacaswell approved these changes Mar 26, 2026
View reviewed changes
@tacaswell

tacaswell commented Mar 26, 2026

Copy link
Copy Markdown
Member
    def get_active_overrides() -> GlobalOverrides:
42503
        """Get the currently active GlobalOverrides instance.
42504
    
42505
        If no context is active, creates one from the current environment
42506
        using SETUPTOOLS_SCM prefix for legacy compatibility.
42507
    
42508
        Note: The auto-created instance reads from os.environ at call time,
42509
        so it will pick up environment changes (e.g., from pytest monkeypatch).
42510
    
42511
        Returns:
42512
            GlobalOverrides instance
42513
        """
42514
        global _auto_create_warning_issued
42515
    
42516
        overrides = _active_overrides.get()
42517
        if overrides is None:
42518
            # Auto-create context from environment for backwards compatibility
42519
            # Note: We create a fresh instance each time to pick up env changes
42520
            if not _auto_create_warning_issued:
42521
>               warnings.warn(
42522
                    "No GlobalOverrides context is active. "
42523
                    "Auto-creating one with SETUPTOOLS_SCM prefix for backwards compatibility. "
42524
                    "Consider using 'with GlobalOverrides.from_env(\"YOUR_TOOL\"):' explicitly.",
42525
                    UserWarning,
42526
                    stacklevel=2,
42527
                )
42528
E               UserWarning: No GlobalOverrides context is active. Auto-creating one with SETUPTOOLS_SCM prefix for backwards compatibility. Consider using 'with GlobalOverrides.from_env("YOUR_TOOL"):' explicitly.

This seems unrelated and new 😞 .

All reactions

Sorry, something went wrong.

Uh oh!

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

@QuLogic

QuLogic commented Mar 26, 2026

Copy link
Copy Markdown
Member Author

Yea, I reported that to pypa/setuptools-scm#1314

All reactions

Sorry, something went wrong.

Uh oh!

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

@tacaswell

tacaswell commented Mar 26, 2026

Copy link
Copy Markdown
Member

I have

diff --git a/lib/matplotlib/__init__.py b/lib/matplotlib/__init__.py
index b4f3cc7d21..137a6bd760 100644
--- a/lib/matplotlib/__init__.py
+++ b/lib/matplotlib/__init__.py
@@ -227,7 +227,7 @@ def _get_version():
             return setuptools_scm.get_version(
                 root=root,
                 dist_name="matplotlib",
-                version_scheme="release-branch-semver",
+                version_scheme="semver-pep440-release-branch",
                 local_scheme="node-and-date",
                 fallback_version=_version.version,
             )
diff --git a/pyproject.toml b/pyproject.toml
index 112528dc9d..74a3af9fe2 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -82,7 +82,7 @@ requires = [
 install = ['--tags=data,python-runtime,runtime']
 
 [tool.setuptools_scm]
-version_scheme = "release-branch-semver"
+version_scheme = "semver-pep440-release-branch"
 local_scheme = "node-and-date"
 parentdir_prefix_version = "matplotlib-"
 fallback_version = "0.0+UNKNOWN"

sitting uncommited on my machine (working on a PR), but that produced a different warning->error.

All reactions

Sorry, something went wrong.

Uh oh!

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

@tacaswell

tacaswell commented Mar 26, 2026

Copy link
Copy Markdown
Member

#31387 is PR.

All reactions

Sorry, something went wrong.

Uh oh!

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

@QuLogic
QuLogic merged commit e0913d4 into matplotlib:text-overhaul Mar 27, 2026
20 of 36 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 27, 2026
@QuLogic
QuLogic deleted the afm-height-metrics branch March 27, 2026 18:21
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
@anntzer anntzer anntzer approved these changes

Uh oh!

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

Assignees

No one assigned

Labels

backend: pdf backend: ps topic: text

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.

3 participants

@QuLogic @tacaswell @anntzer
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.