From 42e9b974028c08e2fed145107426734d161676aa Mon Sep 17 00:00:00 2001 From: Matthew Petroff Date: Sat, 11 Jul 2020 19:03:20 +0000 Subject: [PATCH 1/6] Properly use thin space after math text operator. A thin space should follow a math operator except when it is followed by something like a parenthesis or a bracket. This should fix issue #17852. --- lib/matplotlib/mathtext.py | 9 ++++++++- lib/matplotlib/tests/test_mathtext.py | 12 ++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/mathtext.py b/lib/matplotlib/mathtext.py index 02428615ae50..5633690772d8 100644 --- a/lib/matplotlib/mathtext.py +++ b/lib/matplotlib/mathtext.py @@ -2876,7 +2876,14 @@ def function(self, s, loc, toks): self.push_state() state = self.get_state() state.font = 'rm' - hlist = Hlist([Char(c, state) for c in toks[0]]) + hlist_list = [Char(c, state) for c in toks[0]] + next_char = next((c for c in s[loc+len(toks[0])+1:] if c != ' '), '') + delimiters = self._left_delim | self._ambi_delim | self._right_delim + 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'\,'])] + hlist = Hlist(hlist_list) self.pop_state() hlist.function_name = toks[0] return hlist diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py index 6bc84b19f1eb..6000dd9d5be1 100644 --- a/lib/matplotlib/tests/test_mathtext.py +++ b/lib/matplotlib/tests/test_mathtext.py @@ -285,6 +285,18 @@ def test_spaces(fig_test, fig_ref): fig_ref.subplots().set_title(r"$1\/2\:3~4$") +@check_figures_equal(extensions=["png"]) +def test_operator_space(fig_test, fig_ref): + fig_test.text(0.1, 0.1, r"$\log 6$") + fig_test.text(0.1, 0.2, r"$\log(6)$") + fig_test.text(0.1, 0.3, r"$\arcsin 6$") + fig_test.text(0.1, 0.4, r"$\arcsin|6|$") + fig_ref.text(0.1, 0.1, r"$\mathrm{log\,}6$") + fig_ref.text(0.1, 0.2, r"$\mathrm{log}(6)$") + fig_ref.text(0.1, 0.3, r"$\mathrm{arcsin\,}6$") + fig_ref.text(0.1, 0.4, r"$\mathrm{arcsin}|6|$") + + def test_mathtext_fallback_valid(): for fallback in ['cm', 'stix', 'stixsans', 'None']: mpl.rcParams['mathtext.fallback'] = fallback From bcc2748a22f67b7ac79d6a6dc93bcc151900886a Mon Sep 17 00:00:00 2001 From: Matthew Petroff Date: Sun, 12 Jul 2020 01:38:19 +0000 Subject: [PATCH 2/6] Don't add space before subscript / superscript. --- lib/matplotlib/mathtext.py | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/matplotlib/mathtext.py b/lib/matplotlib/mathtext.py index 5633690772d8..398062adc90d 100644 --- a/lib/matplotlib/mathtext.py +++ b/lib/matplotlib/mathtext.py @@ -2879,6 +2879,7 @@ def function(self, s, loc, toks): hlist_list = [Char(c, state) for c in toks[0]] next_char = next((c for c in s[loc+len(toks[0])+1:] if c != ' '), '') delimiters = self._left_delim | self._ambi_delim | self._right_delim + delimiters |= set(r"^_".split()) if (next_char not in delimiters and toks[0] not in self._overunder_functions): # Add thin space except when followed by parenthesis, bracket, etc. From 71adb180ee953c615df2633ee9617c8d34ea306e Mon Sep 17 00:00:00 2001 From: Matthew Petroff Date: Sun, 12 Jul 2020 17:36:41 +0000 Subject: [PATCH 3/6] Extend operator thin space insertion to `\operatorname{}`. --- lib/matplotlib/mathtext.py | 32 ++++++++++++++------------- lib/matplotlib/tests/test_mathtext.py | 4 ++++ 2 files changed, 21 insertions(+), 15 deletions(-) diff --git a/lib/matplotlib/mathtext.py b/lib/matplotlib/mathtext.py index 398062adc90d..17594a3bd261 100644 --- a/lib/matplotlib/mathtext.py +++ b/lib/matplotlib/mathtext.py @@ -28,7 +28,7 @@ from pyparsing import ( Combine, Empty, FollowedBy, Forward, Group, Literal, oneOf, OneOrMore, Optional, ParseBaseException, ParseFatalException, ParserElement, - QuotedString, Regex, StringEnd, Suppress, ZeroOrMore) + ParseResults, QuotedString, Regex, StringEnd, Suppress, ZeroOrMore) from matplotlib import cbook, colors as mcolors, rcParams from matplotlib.afm import AFM @@ -2873,19 +2873,7 @@ def accent(self, s, loc, toks): ]) def function(self, s, loc, toks): - self.push_state() - state = self.get_state() - state.font = 'rm' - hlist_list = [Char(c, state) for c in toks[0]] - next_char = next((c for c in s[loc+len(toks[0])+1:] if c != ' '), '') - delimiters = self._left_delim | self._ambi_delim | self._right_delim - delimiters |= set(r"^_".split()) - 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'\,'])] - hlist = Hlist(hlist_list) - self.pop_state() + hlist = self.operatorname(s, loc, toks) hlist.function_name = toks[0] return hlist @@ -2893,13 +2881,27 @@ def operatorname(self, s, loc, toks): self.push_state() state = self.get_state() state.font = 'rm' + hlist_list = [] # Change the font of Chars, but leave Kerns alone for c in toks[0]: if isinstance(c, Char): c.font = 'rm' c._update_metrics() + hlist_list.append(c) + else: + hlist_list.append(Char(c, state)) + next_char_loc = loc + len(toks[0]) + 1 + if isinstance(toks[0], ParseResults): + next_char_loc += 14 # Skip `operatorname{}` + next_char = next((c for c in s[next_char_loc:] if c != ' '), '') + delimiters = self._left_delim | self._ambi_delim | self._right_delim + delimiters |= set(r"^_".split()) + 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() - return Hlist(toks[0]) + return Hlist(hlist_list) def start_group(self, s, loc, toks): self.push_state() diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py index 6000dd9d5be1..2b8adee08f7c 100644 --- a/lib/matplotlib/tests/test_mathtext.py +++ b/lib/matplotlib/tests/test_mathtext.py @@ -291,10 +291,14 @@ def test_operator_space(fig_test, fig_ref): fig_test.text(0.1, 0.2, r"$\log(6)$") fig_test.text(0.1, 0.3, r"$\arcsin 6$") fig_test.text(0.1, 0.4, r"$\arcsin|6|$") + fig_test.text(0.1, 0.5, r"$\operatorname{op} 6$") + fig_test.text(0.1, 0.6, r"$\operatorname{op}[6]$") fig_ref.text(0.1, 0.1, r"$\mathrm{log\,}6$") fig_ref.text(0.1, 0.2, r"$\mathrm{log}(6)$") fig_ref.text(0.1, 0.3, r"$\mathrm{arcsin\,}6$") fig_ref.text(0.1, 0.4, r"$\mathrm{arcsin}|6|$") + fig_ref.text(0.1, 0.5, r"$\mathrm{op\,}6$") + fig_ref.text(0.1, 0.6, r"$\mathrm{op}[6]$") def test_mathtext_fallback_valid(): From f5907f3b020d899075e17702d28587df21b8855e Mon Sep 17 00:00:00 2001 From: Matthew Petroff Date: Sun, 12 Jul 2020 17:45:03 +0000 Subject: [PATCH 4/6] Don't change behavior for Kerns. --- lib/matplotlib/mathtext.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/matplotlib/mathtext.py b/lib/matplotlib/mathtext.py index 17594a3bd261..46c56accf38d 100644 --- a/lib/matplotlib/mathtext.py +++ b/lib/matplotlib/mathtext.py @@ -2888,8 +2888,10 @@ def operatorname(self, s, loc, toks): c.font = 'rm' c._update_metrics() hlist_list.append(c) - else: + elif isinstance(c, str): hlist_list.append(Char(c, state)) + else: + hlist_list.append(c) next_char_loc = loc + len(toks[0]) + 1 if isinstance(toks[0], ParseResults): next_char_loc += 14 # Skip `operatorname{}` From 8fd1c6291874948145bd5b59d99b083948fb23d7 Mon Sep 17 00:00:00 2001 From: Matthew Petroff Date: Sun, 12 Jul 2020 19:07:25 +0000 Subject: [PATCH 5/6] Drop failing test, since it is tested elsewhere. The reference rendering for `$\operatorname{cos} x$` was incorrect. Since this is also tested with `test_operator_space`, it can be safely dropped. --- .../test_mathtext/mathtext_cm_66.pdf | Bin 6786 -> 0 bytes .../test_mathtext/mathtext_cm_66.png | Bin 1376 -> 0 bytes .../test_mathtext/mathtext_cm_66.svg | 202 ------------------ .../test_mathtext/mathtext_dejavusans_66.pdf | Bin 5955 -> 0 bytes .../test_mathtext/mathtext_dejavusans_66.png | Bin 1564 -> 0 bytes .../test_mathtext/mathtext_dejavusans_66.svg | 115 ---------- .../test_mathtext/mathtext_dejavuserif_66.pdf | Bin 5987 -> 0 bytes .../test_mathtext/mathtext_dejavuserif_66.png | Bin 1473 -> 0 bytes .../test_mathtext/mathtext_dejavuserif_66.svg | 122 ----------- .../test_mathtext/mathtext_stix_66.pdf | Bin 6353 -> 0 bytes .../test_mathtext/mathtext_stix_66.png | Bin 1344 -> 0 bytes .../test_mathtext/mathtext_stix_66.svg | 154 ------------- .../test_mathtext/mathtext_stixsans_66.pdf | Bin 4542 -> 0 bytes .../test_mathtext/mathtext_stixsans_66.png | Bin 1288 -> 0 bytes .../test_mathtext/mathtext_stixsans_66.svg | 115 ---------- lib/matplotlib/tests/test_mathtext.py | 12 +- 16 files changed, 8 insertions(+), 712 deletions(-) delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.pdf delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.png delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.svg delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_66.pdf delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_66.png delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_66.svg delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_66.pdf delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_66.png delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_66.svg delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.pdf delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.png delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.svg delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.pdf delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.png delete mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.svg diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.pdf deleted file mode 100644 index 1447f1a5a6ee989fc002455d29b8a4c370f94597..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6786 zcmd5>d0bQ1w!SS=A=+xOU=hWwLRA!Vk~1W6po)xIKp<36xe`JM0YWf@$y~7F09HVY zTB{bSLS=9S6dZ8G83+6U&fr+3K5+u4BHXw3A%O_3x3}+)zW6(wbJpH_?X|wW&f4Ez z+D>zFvFDAUIJR4Fpe_42JVYQ>P#9P`@o#k*nWWfrFqbeRu$LdLe z5YZGi(MJ}oicw1e77T-rUJphJ<^=mdNi-6%ZJjpacfE-&iU`06aa|(7Q74&H6$~T4 zl10ijp@@eUgT*>pqn1gOocJHJwnSvZUHgGT(c zeC5%=tS8OQJ=XRhKffBeFc6ihCRu4KYCh7#h?>U4M2RJ9Gy#OYNGXH3vL&t0kU7oQ1e#Q9G zvls6AXIzjixLQ}7aiK^w+HLnz;o!Z|*46eeOS$!>*5`s2$JnhNR50$j#i#0*9+^kZ zm3+2wMyd2-imk|KVsT+vWmAmmb?$24?=;0dQd45k-nfV6Cr%9V?9+edwJ&adotPA~ zaMll{1&M7**`mrf4kfFN3a=!kA3nWc*d5blie>W>r@yrH^KATwcMbE6&8;Edn4Fb+ zH4Ji|w`h%D#S>GpjmH+BB}20!!gfWMZTX0N*fb(@*KV)x))ty(Sq?p9cJteLIssk5$S3ZSySc|d9G}_xQD8@=fn@!c?;uY(p70A%Y;Kq zoNnDgC-)66=qJuCG9P!tAkab$5F0_5neAb{d;CJ<23|@3C1L==Ht7t^Yt%7x%S; z!!K&n`(QT8y55=YXf)!nNteU*jS14QIT>eW5|oEZ)Htg`4>rf@^G~}H7lk@ngS#Nz{EqD@%$}r? zJ)b5JkATlj01p8iu5%=$9-Lfpwsca2gvfAagv2%rW+xCg9;dtZ4WXkePLy9sbaU`& z+F(~;LC^z)!NJ+oo)2cSNc^!Skef9!<<|fWPKokpMDjV@8E!I#JXC`y3Y=~?0=sAc zI;+(Xam4kI#Ix{$n*;zbSrVnwA|M#pW?)lONGC54N$nQmrp`Rg!j7Go#iE3f z`afQrzdD{k44;oEhC#H5hlG3~hvo?o$?y>aI}!G<>mR;Afbc~_(|@=)hVA-s0^L~s zohJ3(L(K3fut9(Xq!2N%CITUYgd`79q=-X7zO z_qXZ_=pZvV)#_7QJYu5JF-1vc9I<*_Y9j!Ci@?ZdVSbUGI{iy>;W$d z9{l@qk!kH|liol4To~jO^7csT(X_&T^Plakk8RZoJ!f6%+waXspZ?TSx^%Go*gWYF zVoH4wDej}SOtmdbFSyqGpd$A9YVESUn|FI2*;zd3V zwhPa@yDo`0%gh^dUgBLUwx9DNC-}gb{rhabq}{@n415&k;+(sC!qQ4~NOWu4P-Q^v zmBec^?~jyQ`MrqucYl`g>dxbJrCUSdoTeOqFm+?>IMpU?m5S9`(6C2PVSPBU|yv**>5 zaS5#z-l~GDd+ojtsdk>T>nlQgr1bIAX(RhAKbV+acj?L9oU3+UT29ziQ?;pAZF1{p z7TO}OuwMI1&GF8r#TTP-J(_8LFAn-nZ8t6Tr%=kh(GpQ;-2 z8b|E3eqE^!BG-Fg>oYR%OiOZ~B8Q3Po~yF%9lIY{KPbdP{P0IB%hwMIcfPvnbgb|6 zJO!u4Y_IS$LSfdL+}||qSLNY82m75VXh^TzWP3{^-=DtX=8}!F*}L6#)GvTz;&$utgN)}BB&o15+ z>6|z6IfvWJ|5#stdH(dG#s2+{Y)T#$5+Pl5!}IjL28Y~TGZc^Za=e2BDg*gx?gP$f zUgX-Giq7Bfb!62*eqhS31zTN0o2Q7k^u6haZr^EX&a}92ZQ737nL{_z6_q>x^;YH8 zGW_a|Q`-VO8z+aZeYI5{cxAD7TyViJqGi@$zRqfXa{0B}A$`L9#;+|iAHIXvwCbr( zTgvL3m#HYy=Q!>;=__5sg9q&I$)%*JR4eKc`JJ_ z?R#^9g_&=F?QQ#p0d7_ws8=w-bvdg(I{r&$e#JROIg_8wo3bXYq3ZIy4Sq+RpQfAJ zzepaiZ{OX|Hdp68OjJ)QNIdcKTdR{?GRIe()~mVPXtPz%j4_^r#VGx$M_QtHYlXJw zu=1qrsz9@gj&c7ez5LXUXS96f=S?oJ?tM(IIzGhpn``mgwDtD_d;NCGI`-_`l`WSf z?sH8R=6DUhTY4&MM#PW*9RJBZg}o;=k#hTV?n3M6O^KH$9-9(%LrKNXu1XQybve1f z`0Et<2kG^|pbhOBU2F#Gd@-g5-Sgzx(?Tk?` zGZ4~1DOT$qcq9Eku94ttk?0nUdxGY!v}#R3mwSuKy`;J%ov ziGZN6WAHolWp!Xy3+#i{q2q2m0uy@O3j-mibCjdIv+w$6JQ$Nn{hb6-$vOmb+=qP! zefXIL3gj3p+@A(H35OUG2rLFnFT=**Hhi(V^=BGAQhMXy{9DZkO=OK0{fiW(C zDO+MTIQttEcsdIL2F$-xXi(ei6zX#pR8u;IhGcWHDh4Vdkl3dxg4rSqyNz^a_x57D z!B_)>xRaq8tWl^Uop5n{gwt3)!J`QtACBb&NmBL%HJl)Zk7O(E!7)-OFON`4G*J;M zO@tx{MFoeTAc-^_>b1~?RRvWm!yddb^q62-EN?Ul)o7x|a=D$O$Eeiukp?cst7Rb^ zIBL@zC_(6ckdA05F@>NG89pQ7ABxn=Xb~JgyUK)c9PKI-;UWzF8IFaIr<)AQ4&7t| zSTOwS97_;z6z(b`A+>gu@gc=_mC>SZ^YVl^4)L#Z4jzL8uZs-UrK^lDgv8OMAAw6F zU1U((=r#vM3%co}_}yi+5RUL&^znsI80jJ-Nq#q5NFm*AEJM%+{WNNcB0{ES|Fg(F rG6cRj9HsC@`KVMlxY=i4#XK1VNIO@Ss5NZJFnmJ5v9)#fa^d_ht7|j~ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.png deleted file mode 100644 index fb9f1ce54186f15310fbae214b554b03424e19ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1376 zcmd5+jW^p@82$|{TIN)D)JN&rC>x5QOd@UPqhu*cicw!H^^;^`nqwHr?`$lkHJg}* zNTWT7j|pc;)B4sbHNh119oA`yuh0-e#IF4l+k4Kv_qpdh?>+DPywADWSAD&-j~O0= zAV?eQ?GXS$D%t?!G>(E@N^cZ`Lyh8wy`}*oT_Yw7+%>=P4xvDh&R2))y~>Lf1PD5! zg7x_PS_*r08kaSAVA8WOrX}|CX|OY5>JsU8WPG=ErtZD2+^`${m)*&@J3j^Bo%Gf` z?HlYgeIAAd=#`D+OcNP)bOT+AUWLQiiUByWTQSJ)iI!85J!P9@ra>av+Y8hJp$5%e ztUSGD1VKvYtfSC_tT+g|^FIMOCZI0*tDc|F3{Ot7I2?|nqhrj*>*pB_$r4dHk9RJz zoz~Adi?b)as_C4V5+n={4dsbMB0!t(W7-mkL_;>Rv;LtodHRL0$iV^7Txp8W!o$Nu z_{6~O90RFWvYJxM&oD}@nX=#;RP$w?3*~K$^ld+ZK z$;MAk*+vN4sCx`E@Wuq66dY6+ai4cxz%4B`g$FstEo2ymLqkJfj*l14G$$`~e6O0i zx#+(()686*66o~RcKmr#+s$Nt`S18Jy5Kp2VapBEOZx<9}B%R2G^ zs6wSui%>~KOG`^yF;%H>!B_b9SNfMS6jH04rKP1!nT!iqcQFA~Cf`g+v5Mg8y( D!%TAZ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.svg deleted file mode 100644 index 68674dc6ae48..000000000000 --- a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_cm_66.svg +++ /dev/null @@ -1,202 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_66.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_66.pdf deleted file mode 100644 index b67c465c0f744fb376b302b47b0e34e22b9d2300..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5955 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 diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_66.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_66.png deleted file mode 100644 index 4355536a39a7d6a6cda78882a07a4db37ad08d0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1564 zcmeAS@N?(olHy`uVBq!ia0y~yVB!U`y*b!`Sb4sfi58emQ%#^!YPBKzIB%c$ znUm|E{bph~)A#OOp6X;zUVeUU89r^XZcV9PzsS#@o_cTHzFm9%`PI92Mcv+(JNbEK z@UR91h-_N5N{hSwu-ZvBHnuZo-aJ1)zwE&Q#>puU3vMV) z?C{)lcDDKL6DK?#TA1hE+2Ej%;5}V$E3dTKjZ;&#&wj7X&dxSA-n?<6VYiFYwz|K+ zG@s{ZWo-f~FboVtgNg{3!U4ic&L>8`SDTm zzI4OSqsI8Q$RT=n@`@2l6Z>!o=fKYm>G{oP!%+*=`E{y5dv?mc$=_|=;?HP3(E zl6_t8=;Ok-H#Ry?*N+bi4-dcivF3ibja<0a)Jq4O*-L+Y$!ucO2n2?O)4tl@%TAv3 z3=IqWS9bRM`}?VBQCl(sFWyi)6;aN zWM!|e4qyM}*VpW;SFdIQLwQ%(+gab<-CfH3kyQDmI8BttaX`>tgLKSX6D5A zzon$4f}EY3-`(H8e&0U3)XkB1cNV+r$L$Ho&0T9(^J4)p@vPpqEi8O}+|=ilS-H8P zdebkra*IFv8O&gy{p{m>X@<0ui{1NmqKc`b4_M;_U2QkP93TNW`S$h zt{ti|o4s{w_VroMD_c!dQ&YFq|F3)f{{40jl_XPB(`l!lE}QfF!^6X3JZ!pi{m$R4 zV?4uKH;=(9B0PNhrkiUHJ=~x)(c|KuBS%`StgWY>f4(*As+Mldjtv>Uz+@L6KmUx+ z>FN66uC7O8VyqhM1ugC!foJ@dhb(g`-{G`9JLRD>T8do&Xu?(KBelF{r G5}E+P>4W$H diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_66.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_66.svg deleted file mode 100644 index 89e96a72bc99..000000000000 --- a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavusans_66.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_66.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_66.pdf deleted file mode 100644 index 7249772bd5977a5960cce2be36d13bbf948624d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5987 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 diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_66.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_66.svg deleted file mode 100644 index 2c3d08c82b2b..000000000000 --- a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_dejavuserif_66.svg +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.pdf deleted file mode 100644 index da794b5b7bda9be994ea4acd6956f2726b8103f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6353 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 DcpE!U diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stix_66.png deleted file mode 100644 index 7c75c289383731cfb7faa7923698670067cc6280..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1344 zcmd5+i#Hoq9KNQ^+N#sDLp$3-D_h1K&w6BJIju*9<8fAmRge-vijrj^9MSHqn8m#M z2o>`6sWH9~TOsXWi{VTTLIrsj)d(S=hyT9-Iom(0acHaE3 z^=^(8{Eb0`|NjFdi>}xJ-GNhFU&RUM_!d6j$2~<9M5R(492~Y( zbDcdr-pYpTL7sL!s=d8kB9TO=$;ikk)bF$X zijR?Gy%}r|N_05_Q;U?|Pdb0oF}A9_y!^+HeLOGrUY_hGPrEU8)_Qt-Te)1ai*@{P z0h=4%u=@K|W2IUxE`1**kxJPnN30-AW1#s_7`vy66wS@ec6FW^!tEE+?&-64k&|r~ zxRTk~8lh0=NEkSiB_G6vhK5$Pbapyxwc51IO!(-0H`@B_LSMGsz35+sZ+0~^GFcs( zx_WfjPFH_d??=Px5jW9Sv11r>mumz;A%?|beK%5p#$grU)B(!o6HlV4)158mu@ySj3MT#z_FKfiPe#ho~MXapEQlTqMr zdcA%}t38nMGztLb~xkZ|j1TBfZe<>hyaX_2@u8|%E^&IicT)3V6e1dear|qYyq8a)5GxPJc&I!ZG z&}z02LLpngC zs2BOSV3~0P-=y^gn&`n}U>5`B5jS8PI2?}S#a>6KCfhsvQglZg+cjxodHwHuN{wdv zpA8vwfc;Y1jk@KWfEc7N?I>r`D3mGIhh7r7oRjpheC64ASzAYk_{Qh>F5=jA$M`|- z>Q6(3@Ph8-$toh}q^{lRpR!UtIj$)iUuxiib134$u5 z4Yp8JY+>_uOBdpY$KzW=>pXRPa=AP*DvAW9W2V?9#*~ - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.pdf b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.pdf deleted file mode 100644 index 4e72c0fd146aa5660fd107ed599d7b997b8ddafe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4542 zcmb_g2~-qE8h&^@Vyl6;AYRc@f`B?qAJa380xArHC<+1+1w5LWW*CGS($fg&DjUy@ zXcqAZy8ApJPorosXtIh2`VciM60aCH;A*_0ViH|qaCc?d`g^8f1T^oNg;%et{`%{y z|LXedAD>|7_eEu46!l}SPGws<-;I0q?Oj%WrVpbqTZZ=ZG@Ei46LY*H&~5$XB2NSiD`%e zXGpfTi2~1M61jg_`{8+FX^i`d<|dD(Zr4+PEYBId^3aClgPzosgCsGx%74dWnG5|^&6?$9cs!(K(1lxJk31XQgU!OxZXTu>m&e`w%VrIR7;%X1h!#mD(4Eq# zTy}~m#iHISWVV|}OUnj#1RkLbwR=gS)sRTRkSwB9v=&h$&0u$7540JQ zjT!f5*zi8}+7-$e|NOIgTd(Xs)|%+LyZg1mYk_+`R#|Iu!ab5TA)}N3TYEOWI=Z_4 z=2ow5yzN%ShBA#$WkpHSJVi`GZDUD7G(X^N)!C=TD_eL)8CTUOx1Y|D36d-J+IHQT2EfpBQzg)X!ztgRP4%1r-=W=|7Y;7@5A` z-@Y?(^V`RhpO-dxZQj#Tv0ry*O!%qXn$$n_EXf!P>G^=@ir4-YT ztgRvYG%`KC0w?4rH3i+Qtgi~5oEILNIN2|D$)(-_ORG%9Ur$V|ZdkYFLddfqe?k$S zyz1MD#?pedk99twOWlt8p)p5hzwv0!^O#Y>&8D<^_o?C2_1~3V51KtB;bX6Kk4d$= z`m37zAJd;Y=>Dlkj!s)vF-bY-+z2xna9*AA!#g+Xw1e3yzsny)jT%_()^u@alG~mE zPrmk~m)!n7w&sg*lawuV!JM3(kN!DcA6z=Rc42Xt*VCv5o@z9Xx;xf-%hPbBIyvCx z&V4EKQm+)QySx0o{D{;3U!41{#c$CL#_0Xz<5gwFPuXwWU6}g)l^=b!qp=`oY*p)z z?A+!qyzr~n)l0mfRlU9!*x1Mqdr)s2`DXO92~)UU?>BEy?b_Tr_sqzLVHH`vjpM`8%66~^9aqsN-$$Ga@ zL#P?=?O!(U%M+KDyUy?u_MY0_ZH*?q`oPJdH(k~nlewOiXVx~y--&yFoAU&9t@H}|h)t~(Uvz6rxq z&NVBJef8D&g%7P%7p{Ut*>(xw^rPc#2Em*qS_MSeGo^AGmx(h>Tzurr2;RaAT!tbN z=XbM#P(nVP%87zm%5woE3F!y_w~cVZ3*~IQly|#Cc-L$c(`<;czY&yeaRCnr1}DTc zPJl-M=8&EQa(LJQ^=82)0t+JTvb^dpCzRn9oGalq0O?(4PEF+@mE%mD1c}-HbZO&( zlpe)7;Axh1dcR0^k!=R{g1oO#VIIjKuMz^AQRFidu#F&nn{c966Uv#Bc(W-@1fpFC z(9X#Z66(vHFqO-dtca68g>SJiE~_2S?x=|tQwDw#Fn9RpVEO)YKZJq3O0cjG@6^l}bgZ@jA<@Q6QefSmu>`=`6f1&m}&L4SS$5fm%dk znQ>33FfQ=hb(8dlGb9@Hz$eQNV`wrR@Z~j@R7pAlwu}#JzzZ@$4-M8-m`-E;p=VW; zWJBNuTS_`=XhPBt^UC-@mqHB)Fwuf=cmpuXP6s+PSy7f|B%uO9DAL_iIi;Ydu)Sd3-khB$I}v(0 z806lL@xn*Y7W8m_7wb|$03GmVLz;lQK)Q1s7hQWT0$D-6{qz)mF5|g#dFPZ-+Bd=N z-3iI*72nS3{3>@sVB{B2 zV^EqXW{p)U+jj?81(Uy1Cd(E0R04lU6hXHAAvMb~EJ{UfG_WQ7A&X370vT+L4m36p zd%gor-NjxtgDu;UkHzljNYh{^zepoVH4dZ>G)B`&7Lq1A;gM=w(RJ8Mv*6_y@o1<4 zJJ2Ytwi6%2sym;nR&_dq)T%qlLQ(ko>v#r>3(yWUd<#0AAqt#1gBPS9S|Tl}R)iCk j^b=q!u1Fw12PwkbV<5-u*C38@Pe zB08sDt>_f)oZu(Rw6QbczyuLC9i_5G52mhIpwKnFgClB1ghoZTVdj+^DSwYPHYOB? zO@3l;c|LgERjL=+uEO>RIRM67H!>XYL<6L;%b)Zzdt{NZ_CTc^=;d>O=GIp z#k+T9FJHbaC}?P9C1qXyuIKsr`R*=9zI-VGf+HUvAAeqEk#MeqE#kpEyIQH&*Vp%d z{P@wL>`la$EnALERCZ4)DKUxLUneVVmeav6Z+GP4V)x|V-`-xld|6oCe_l^VNAdG> zuHoU~Z|?86|MvE__;UaGeVv`19UU3DxxM20aW47!`7SOcWo5^>zG}g38 zCb2aeH*UOggw!lpaU}t3JiRGeV0Ca_AF#&NLoy=-t^12wq^%=X-@T88lpEn zyZZaPyR!?oEnlv#8@I=zw6t_-TU*-~pp}tx*kvwpq4l$6w>&6_uG3kwey zXXlgY;1<_A^5jX%9IMi-W2UF4>-SFya&cJ`wN(qKc~Q{HBj4ZOPrkh^*ZADD(@!Hd zrFio2@EqxtHc$Hc>gr~D5rcdeW}O6OW#x^jr>8}1dGX%;@430w8!JCQTd{uq{Ec=0 z|NV`UnPXpX$0uha(cIj8@zN!s_xJbDFZ_0GZM31Osc5T{V%O0}Z+MyhXaj@zfSQ`x zq5zFE5wBmr?$!=pcLb<*@w#<+$L=k5?|*c#nf>CudvfRJ*>?Z>^~<9ATaHc54}*QR zzs3CL*{qzqxAu40l+#avvEC01Ite+sd6Q>0{8W}oVAK}tF8uiDXvLo&g*AVFnflGK z5Co=!S+i#+UtZ>0`1#q{9aUem{`~l;tQWseW_S7fzIX55X#n;7`0#K?$;%)gKfhzZ zkV$@dY3apl*Te+>|9pOAo^5qfLV^OHtd)p$*_#gI^mAA0t}%$M_*u7-X@+h7y*-}U z*VcFnPE=CLy}QeFZ`D_=rBg1gkKcc3UF`0xYG6EOW@M}=dwXwhb#^t-qdw*D@A+yj z{qpYaZcv=Bx|;R&&508pT^%KVe|_C4D=;ItRP$#B19zmCrd{1131FyA(~bUi{ojut z6@UKxG@dnU*1xLn4=*qGpBU67svUOb>RYD&NsAa6PCS~+#-Pxh!N9PoV{kD3Fu&jS WZ-O0@M-Q+lWAJqKb6Mw<&;$UGLp34* diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.svg b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.svg deleted file mode 100644 index 56641fa94ea7..000000000000 --- a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext_stixsans_66.svg +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py index 2b8adee08f7c..a605f18a16bc 100644 --- a/lib/matplotlib/tests/test_mathtext.py +++ b/lib/matplotlib/tests/test_mathtext.py @@ -11,6 +11,7 @@ from matplotlib import mathtext +# If test is removed, use None as placeholder math_tests = [ r'$a+b+\dot s+\dot{s}+\ldots$', r'$x \doteq y$', @@ -91,7 +92,7 @@ r"$\left( \xi \left( 1 - \xi \right) \right)$", # Bug 2969451 r"$\left(2 \, a=b\right)$", # Sage bug #8125 r"$? ! &$", # github issue #466 - r'$\operatorname{cos} x$', # github issue #553 + None, r'$\sum _{\genfrac{}{}{0}{}{0\leq i\leq m}{0 Date: Wed, 15 Jul 2020 22:59:48 +0000 Subject: [PATCH 6/6] Fix bug with space between operator and sub / superscripts. Also add tests for it. A thin space should not be inserted in math text between the operator and subscript / superscript. --- lib/matplotlib/mathtext.py | 4 ++-- lib/matplotlib/tests/test_mathtext.py | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/matplotlib/mathtext.py b/lib/matplotlib/mathtext.py index 46c56accf38d..fe7138fedec0 100644 --- a/lib/matplotlib/mathtext.py +++ b/lib/matplotlib/mathtext.py @@ -2894,10 +2894,10 @@ def operatorname(self, s, loc, toks): hlist_list.append(c) next_char_loc = loc + len(toks[0]) + 1 if isinstance(toks[0], ParseResults): - next_char_loc += 14 # Skip `operatorname{}` + next_char_loc += len('operatorname{}') next_char = next((c for c in s[next_char_loc:] if c != ' '), '') delimiters = self._left_delim | self._ambi_delim | self._right_delim - delimiters |= set(r"^_".split()) + 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. diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py index a605f18a16bc..285841f7277b 100644 --- a/lib/matplotlib/tests/test_mathtext.py +++ b/lib/matplotlib/tests/test_mathtext.py @@ -297,12 +297,17 @@ def test_operator_space(fig_test, fig_ref): fig_test.text(0.1, 0.4, r"$\arcsin|6|$") fig_test.text(0.1, 0.5, r"$\operatorname{op} 6$") # GitHub issue #553 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$") + fig_ref.text(0.1, 0.1, r"$\mathrm{log\,}6$") fig_ref.text(0.1, 0.2, r"$\mathrm{log}(6)$") fig_ref.text(0.1, 0.3, r"$\mathrm{arcsin\,}6$") fig_ref.text(0.1, 0.4, r"$\mathrm{arcsin}|6|$") fig_ref.text(0.1, 0.5, r"$\mathrm{op\,}6$") 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$") def test_mathtext_fallback_valid():