Skip to content

Fix spacing after mathtext operators with sub/superscripts #23243

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

Merged
merged 1 commit into from
Jun 12, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion lib/matplotlib/_mathtext.py
Original file line number Diff line number Diff line change
Expand Up @@ -1947,6 +1947,9 @@ def __init__(self):
self._expression = p.main
self._math_expression = p.math

# To add space to nucleus operators after sub/superscripts
self._in_subscript_or_superscript = False

def parse(self, s, fonts_object, fontsize, dpi):
"""
Parse expression *s* using the given *fonts_object* for
Expand All @@ -1965,6 +1968,8 @@ def parse(self, s, fonts_object, fontsize, dpi):
" " * (err.column - 1) + "^",
str(err)])) from err
self._state_stack = None
self._in_subscript_or_superscript = False
# prevent operator spacing from leaking into a new expression
self._em_width_cache = {}
self._expression.resetCache()
return result[0]
Expand Down Expand Up @@ -2164,6 +2169,13 @@ def operatorname(self, s, loc, toks):
# Add thin space except when followed by parenthesis, bracket, etc.
hlist_list += [self._make_space(self._space_widths[r'\,'])]
self.pop_state()
# if followed by a super/subscript, set flag to true
# This flag tells subsuper to add space after this operator
if next_char in {'^', '_'}:
self._in_subscript_or_superscript = True
else:
self._in_subscript_or_superscript = False

return Hlist(hlist_list)

def start_group(self, s, loc, toks):
Expand Down Expand Up @@ -2394,8 +2406,15 @@ def subsuper(self, s, loc, toks):

if not self.is_dropsub(last_char):
x.width += constants.script_space * xHeight
result = Hlist([nucleus, x])

# Do we need to add a space after the nucleus?
# To find out, check the flag set by operatorname
spaced_nucleus = [nucleus, x]
if self._in_subscript_or_superscript:
spaced_nucleus += [self._make_space(self._space_widths[r'\,'])]
self._in_subscript_or_superscript = False

result = Hlist(spaced_nucleus)
return [result]

def _genfrac(self, ldelim, rdelim, rule, style, num, den):
Expand Down
Binary file not shown.
Binary file not shown.
188 changes: 0 additions & 188 deletions lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.svg

This file was deleted.

Binary file not shown.
Binary file not shown.

This file was deleted.

Binary file not shown.
Binary file not shown.
Loading