diff --git a/lib/matplotlib/_mathtext.py b/lib/matplotlib/_mathtext.py
index 927a315da8ae..0f92d60f29b7 100644
--- a/lib/matplotlib/_mathtext.py
+++ b/lib/matplotlib/_mathtext.py
@@ -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._subsuper_flag = False
+
def parse(self, s, fonts_object, fontsize, dpi):
"""
Parse expression *s* using the given *fonts_object* for
@@ -1965,6 +1968,8 @@ def parse(self, s, fonts_object, fontsize, dpi):
" " * (err.column - 1) + "^",
str(err)])) from err
self._state_stack = None
+ self._subsuper_flag = False
+ # prevent operator spacing from leaking into a new expression
self._em_width_cache = {}
self._expression.resetCache()
return result[0]
@@ -2159,11 +2164,19 @@ def operatorname(self, s, loc, toks):
next_char = next((c for c in s[next_char_loc:] if c != ' '), '')
delimiters = self._left_delim | self._ambi_delim | self._right_delim
delimiters |= {'^', '_'}
+
if (next_char not in delimiters and
toks[0] not in self._overunder_functions):
# 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._subsuper_flag = True
+ else:
+ self._subsuper_flag = False
+
return Hlist(hlist_list)
def start_group(self, s, loc, toks):
@@ -2394,8 +2407,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._subsuper_flag:
+ spaced_nucleus += [self._make_space(self._space_widths[r'\,'])]
+ self._subsuper_flag = False
+
+ result = Hlist(spaced_nucleus)
return [result]
def _genfrac(self, ldelim, rdelim, rule, style, num, den):
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.pdf
deleted file mode 100644
index 503cd69d37ec..000000000000
Binary files a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.pdf and /dev/null differ
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.png
deleted file mode 100644
index c160c75b2d2c..000000000000
Binary files a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.png and /dev/null differ
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.svg
deleted file mode 100644
index c0d0e3b91162..000000000000
--- a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_30.svg
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-
-
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_30.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_30.pdf
deleted file mode 100644
index 1783edfa14e6..000000000000
Binary files a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_30.pdf and /dev/null differ
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_30.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_30.png
deleted file mode 100644
index 05b1e65e1419..000000000000
Binary files a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_30.png and /dev/null differ
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_30.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_30.svg
deleted file mode 100644
index 13ba043bf787..000000000000
--- a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_30.svg
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_30.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_30.pdf
deleted file mode 100644
index 35697c58a00e..000000000000
Binary files a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_30.pdf and /dev/null differ
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_30.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_30.png
deleted file mode 100644
index 718302dfb8ca..000000000000
Binary files a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_30.png and /dev/null differ
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_30.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_30.svg
deleted file mode 100644
index eb8e7376d155..000000000000
--- a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_30.svg
+++ /dev/null
@@ -1,142 +0,0 @@
-
-
-
-
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_30.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_30.pdf
deleted file mode 100644
index 49ad0e80b04a..000000000000
Binary files a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_30.pdf and /dev/null differ
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_30.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_30.png
deleted file mode 100644
index 7001c4f0e3dd..000000000000
Binary files a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_30.png and /dev/null differ
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_30.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_30.svg
deleted file mode 100644
index 70746902f681..000000000000
--- a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_30.svg
+++ /dev/null
@@ -1,155 +0,0 @@
-
-
-
-
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_30.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_30.pdf
deleted file mode 100644
index ab1a2ee082ae..000000000000
Binary files a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_30.pdf and /dev/null differ
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_30.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_30.png
deleted file mode 100644
index 58bb828044e7..000000000000
Binary files a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_30.png and /dev/null differ
diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_30.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_30.svg
deleted file mode 100644
index 7bc674a36430..000000000000
--- a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_30.svg
+++ /dev/null
@@ -1,157 +0,0 @@
-
-
-
-
diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py
index 9f196a29216f..196258fa625d 100644
--- a/lib/matplotlib/tests/test_mathtext.py
+++ b/lib/matplotlib/tests/test_mathtext.py
@@ -47,7 +47,7 @@
r"$\arccos((x^i))$",
r"$\gamma = \frac{x=\frac{6}{8}}{y} \delta$",
r'$\limsup_{x\to\infty}$',
- r'$\oint^\infty_0$',
+ None,
r"$f'\quad f'''(x)\quad ''/\mathrm{yr}$",
r'$\frac{x_2888}{y}$',
r"$\sqrt[3]{\frac{X_2}{Y}}=5$",
@@ -333,6 +333,9 @@ def test_operator_space(fig_test, fig_ref):
fig_test.text(0.1, 0.6, r"$\operatorname{op}[6]$")
fig_test.text(0.1, 0.7, r"$\cos^2$")
fig_test.text(0.1, 0.8, r"$\log_2$")
+ # Check spacing after Sub/Super scripts
+ # Github issue 17852
+ fig_test.text(0.1, 0.7, r"$\sin^2 \cos$")
fig_ref.text(0.1, 0.1, r"$\mathrm{log\,}6$")
fig_ref.text(0.1, 0.2, r"$\mathrm{log}(6)$")
@@ -342,6 +345,7 @@ def test_operator_space(fig_test, fig_ref):
fig_ref.text(0.1, 0.6, r"$\mathrm{op}[6]$")
fig_ref.text(0.1, 0.7, r"$\mathrm{cos}^2$")
fig_ref.text(0.1, 0.8, r"$\mathrm{log}_2$")
+ fig_ref.text(0.1, 0.7, r"$\mathrm{sin}^2 \mathrm{\,cos}$")
def test_mathtext_fallback_valid():