Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Fix spacing in r"$\max f$".#30715

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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Merged
QuLogic merged 2 commits intomatplotlib:text-overhaulfromanntzer:opspace
Nov 6, 2025
Merged

Conversation

@anntzer
Copy link
Contributor

First commit (main implementation):

Previously, in a mathtext string liker"$\sin x$", a thin space would
(correctly) be added between "sin" and "x", but that space would be
missing in expressions liker"$\max f$". The difference arose because
of the slightly different handling of subscripts and superscripts
after the\sin and\max operators:\sin^n puts the superscript as
a normal exponent, but\max_x puts the subscript centered below the
operator name ("overunder symbol). The previous code for inserting the
thin space did not handle the "overunder" case; fix that. The new
behavior is tested by the change in test_operator_space, as well as by
mathtext1_dejavusans_06.

The change in mathtext_foo_29 arises because the extra thin space now
inserted after\limsup slightly shifts the centering of the whole
string. Ideally that thin space should be suppressed if there's no
token after the operator, but that's not something currently implemented
either for e.g.\sin (compare e.g. the right-alignments in
text(.5, .9, r"$\sin$", ha="right"); text(.5, .8, r"$\mathrm{sin}$", ha="right"); axvline(.5)
where the extra thin space after\sin is visible), so this patch just
makes things more consistent.

Second commit (cleanup):

Rename _in_subscript_or_superscript to the more descriptive
_needs_space_after_subsuper; simplify its setting in operatorname();
avoid the need to introduce an extra explicitly-typed spaced_nucleus
variable.

(See previous work in#17890 and#23243.)
@QuLogic This PR also changes a few baseline images so maybe it could get folded into the text-overhaul branch (for now I labeled it as such), but the changes are limited and standalone so it could also go in as a normal PR if that makes things simpler for you, I don't mind either way.

PR summary

PR checklist

@anntzeranntzer added this to thev3.11.0 milestoneNov 1, 2025
Copy link
Member

@timhoffmtimhoffm left a comment

Choose a reason for hiding this comment

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

LGTM, still some tests are failing.

Comment on lines 2496 to 2502
result=Hlist([
vlt,
*([self._make_space(self._space_widths[r'\,'])]
ifself._needs_space_after_subsuperelse []),
])
self._needs_space_after_subsuper=False
return [result]
Copy link
Member

Choose a reason for hiding this comment

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

Optional alternative spelling. Choose whichever you like.

Suggested change
result=Hlist([
vlt,
*([self._make_space(self._space_widths[r'\,'])]
ifself._needs_space_after_subsuperelse []),
])
self._needs_space_after_subsuper=False
return [result]
spacing_nodes= (
[self._make_space(self._space_widths[r'\,'])]
ifself._needs_space_after_subsuperelse []
)
self._needs_space_after_subsuper=False
return [Hlist([vlt,*spacing_nodes])]

Copy link
Member

@oscargusoscargus left a comment
edited
Loading

Choose a reason for hiding this comment

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

Possibly update *_29 to include a text after? f(x)? To establish that there should be a space etc.

@anntzeranntzer changed the base branch fromtext-overhaul tomainNovember 2, 2025 21:16
@anntzer
Copy link
ContributorAuthor

anntzer commentedNov 2, 2025
edited
Loading

Testing for the space is already provided by mathtext1_dejavusans_06 (after themax).
I'm a bit confused as to why the tests are failing given that they fail for some of the baselines that had been updated just for this purpose. Maybe resetting the target branch to main instead of text-overhaul will help? Let's try... Edit: indeed, that worked.
Also included a variant of@timhoffm's proposed change.

Copy link
Member

@timhoffmtimhoffm left a comment

Choose a reason for hiding this comment

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

I'll leave this open, so that you can decide yourself on which branch this should go.

@anntzer
Copy link
ContributorAuthor

Mostly that's a decision for@QuLogic, I'd say.

timhoffm reacted with thumbs up emoji

Previously, in a mathtext string like `r"$\sin x$"`, a thin space would(correctly) be added between "sin" and "x", but that space would bemissing in expressions like `r"$\max f$"`.  The difference arose becauseof the slightly different handling of subscripts and superscriptsafter the `\sin` and `\max` operators: `\sin^n` puts the superscript asa normal exponent, but `\max_x` puts the subscript centered below theoperator name ("overunder symbol).  The previous code for inserting thethin space did not handle the "overunder" case; fix that.  The newbehavior is tested by the change in test_operator_space, as well as bymathtext1_dejavusans_06.The change in mathtext_foo_29 arises because the extra thin space nowinserted after `\limsup` slightly shifts the centering of the wholestring.  Ideally that thin space should be suppressed if there's notoken after the operator, but that's not something currently implementedeither for e.g. `\sin` (compare e.g. the right-alignments in`text(.5, .9, r"$\sin$", ha="right"); text(.5, .8, r"$\mathrm{sin}$", ha="right"); axvline(.5)`where the extra thin space after `\sin` is visible), so this patch justmakes things more consistent.
Rename _in_subscript_or_superscript to the more descriptive_needs_space_after_subsuper; simplify its setting in operatorname();avoid the need to introduce an extra explicitly-typed spaced_nucleusvariable.
@QuLogic
Copy link
Member

There shouldn't be any reason why it can't go on thetext-overhaul branch...

anntzer reacted with thumbs up emoji

@QuLogicQuLogic changed the base branch frommain totext-overhaulNovember 6, 2025 10:29
@QuLogicQuLogicforce-pushed theopspace branch 2 times, most recently from905fd51 to17428e3CompareNovember 6, 2025 17:26
@QuLogicQuLogic merged commite952f23 intomatplotlib:text-overhaulNov 6, 2025
30 of 31 checks passed
@anntzeranntzer deleted the opspace branchNovember 6, 2025 19:25
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment

Reviewers

@timhoffmtimhoffmtimhoffm approved these changes

@oscargusoscargusoscargus approved these changes

Assignees

No one assigned

Projects

None yet

Milestone

v3.11.0

Development

Successfully merging this pull request may close these issues.

4 participants

@anntzer@QuLogic@timhoffm@oscargus

[8]ページ先頭

©2009-2025 Movatter.jp