Title: [Bug]: `\,` and `\mathrm{\,}` are not identical in Mathtext when using CM and STIX · Issue #23474 · matplotlib/matplotlib · GitHub
Open Graph Title: [Bug]: `\,` and `\mathrm{\,}` are not identical in Mathtext when using CM and STIX · Issue #23474 · matplotlib/matplotlib
X Title: [Bug]: `\,` and `\mathrm{\,}` are not identical in Mathtext when using CM and STIX · Issue #23474 · matplotlib/matplotlib
Description: Bug summary Title. Code for reproduction import matplotlib.pyplot as plt # plt.rcdefaults() fig = plt.figure() for (x, fontset) in enumerate(['cm', 'dejavusans', 'dejavuserif', 'stix', 'stixsans']): plt.rc('mathtext', fontset=fontset) fi...
Open Graph Description: Bug summary Title. Code for reproduction import matplotlib.pyplot as plt # plt.rcdefaults() fig = plt.figure() for (x, fontset) in enumerate(['cm', 'dejavusans', 'dejavuserif', 'stix', 'stixsans'])...
X Description: Bug summary Title. Code for reproduction import matplotlib.pyplot as plt # plt.rcdefaults() fig = plt.figure() for (x, fontset) in enumerate(['cm', 'dejavusans', 'dejavuserif...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/23474
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"[Bug]: `\\,` and `\\mathrm{\\,}` are not identical in Mathtext when using CM and STIX","articleBody":"### Bug summary\r\n\r\nTitle.\r\n\r\n### Code for reproduction\r\n\r\n```python\r\nimport matplotlib.pyplot as plt\r\n# plt.rcdefaults()\r\nfig = plt.figure()\r\nfor (x, fontset) in enumerate(['cm', 'dejavusans', 'dejavuserif', 'stix', 'stixsans']):\r\n plt.rc('mathtext', fontset=fontset)\r\n fig.text(x / 5, .4, r'|$\\,$|', size=100, alpha=.4)\r\n fig.text(x / 5, .6, r'|$\\mathrm{\\,}$|', size=100, alpha=.4)\r\n fig.text(x / 5, .9, fontset)\r\nplt.show()\r\n```\r\n\r\n\r\n### Actual outcome\r\n\r\n`\\,` and `\\mathrm{\\,}` do not insert the same amount of space.\r\n\r\n\r\n\r\n### Expected outcome\r\n\r\n`\\,` and `\\mathrm{\\,}` should insert the same amount of space. This is what LaTeX does (as far as I can tell by eye).\r\n\r\n### Additional information\r\n\r\nThe difference is too minute to matter. As the MWE shows, the text has to be blown up to huge sizes to manifest it. At normal sizes, it is inconsequential. (Case in point: `test_mathtext.py::test_operator_space`, which compares `\\sin^2 \\cos` with `\\mathrm{sin}^2 \\mathrm{\\,cos}`, thereby indirectly comparing `\\,` and `\\mathrm{\\,}`.)\r\n\r\nIt can have unexpected side-effects, though; see https://github.com/matplotlib/matplotlib/pull/22852#issuecomment-1163596847.\r\n\r\nThe culprit is the `_make_space` function. For `\\,`, it returns 1/6 of the advance of an italicised 'm'. For `\\mathrm{\\,}`, it returns 1/6 of the advance of a regular 'm'.\r\n\r\nhttps://github.com/matplotlib/matplotlib/blob/37ccdca5028725b3b9d689b42947b6284a73d690/lib/matplotlib/_mathtext.py#L1937-L1948\r\n\r\nMaking the following change does not break any Mathtext tests. (On my system. Though 120 tests get skipped, so I can't be sure.)\r\n```diff\r\ndiff --git a/lib/matplotlib/_mathtext.py b/lib/matplotlib/_mathtext.py\r\nindex 3c4be21445..c630249282 100644\r\n--- a/lib/matplotlib/_mathtext.py\r\n+++ b/lib/matplotlib/_mathtext.py\r\n@@ -1941,7 +1941,7 @@ class Parser:\r\n width = self._em_width_cache.get(key)\r\n if width is None:\r\n metrics = state.font_output.get_metrics(\r\n- state.font, mpl.rcParams['mathtext.default'], 'm',\r\n+ 'it', mpl.rcParams['mathtext.default'], 'm',\r\n state.fontsize, state.dpi)\r\n width = metrics.advance\r\n self._em_width_cache[key] = width\r\n```\r\n\r\nIs it worth fixing?\r\n\r\n### Operating system\r\n\r\nLinux Mint 20.2 Uma\r\n\r\n### Matplotlib Version\r\n\r\n3.5.0.dev5379+g37ccdca502\r\n\r\n### Matplotlib Backend\r\n\r\nGTK3Agg\r\n\r\n### Python version\r\n\r\n3.8.10\r\n\r\n### Jupyter version\r\n\r\n6.0.3\r\n\r\n### Installation\r\n\r\ngit checkout","author":{"url":"https://github.com/tfpf","@type":"Person","name":"tfpf"},"datePublished":"2022-07-22T17:37:34.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/23474/matplotlib/issues/23474"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:0a54a501-c627-0ed8-1266-3d2dd5102483 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | D588:CCF4F:54C06C:720128:6A519A76 |
| html-safe-nonce | 8d5aa51f79adba9a2a5665593bc1570cadfed81f9e5386791eec034866832480 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJENTg4OkNDRjRGOjU0QzA2Qzo3MjAxMjg6NkE1MTlBNzYiLCJ2aXNpdG9yX2lkIjoiMjkwMTIwNDM0MTI4NjI0MjQ2IiwicmVnaW9uX2VkZ2UiOiJpYWQiLCJyZWdpb25fcmVuZGVyIjoiaWFkIn0= |
| visitor-hmac | fe08914bc8344199daef37b2b95b4c1b5663d96524b651b226f6a534a86ce02e |
| hovercard-subject-tag | issue:1315262182 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/matplotlib/matplotlib/23474/issue_layout |
| twitter:image | https://opengraph.githubassets.com/82f62e71b8ff24191452bc3d8d8bc3de70224a589f5a0d0b684ff4c9ca7c9bf5/matplotlib/matplotlib/issues/23474 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/82f62e71b8ff24191452bc3d8d8bc3de70224a589f5a0d0b684ff4c9ca7c9bf5/matplotlib/matplotlib/issues/23474 |
| og:image:alt | Bug summary Title. Code for reproduction import matplotlib.pyplot as plt # plt.rcdefaults() fig = plt.figure() for (x, fontset) in enumerate(['cm', 'dejavusans', 'dejavuserif', 'stix', 'stixsans'])... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | tfpf |
| hostname | github.com |
| expected-hostname | github.com |
| None | b9a586c06a05a7a86fc7e3f4dbd03e42f6869085879aa184aa6369456dbd50fb |
| turbo-cache-control | no-preview |
| go-import | github.com/matplotlib/matplotlib git https://github.com/matplotlib/matplotlib.git |
| octolytics-dimension-user_id | 215947 |
| octolytics-dimension-user_login | matplotlib |
| octolytics-dimension-repository_id | 1385122 |
| octolytics-dimension-repository_nwo | matplotlib/matplotlib |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 1385122 |
| octolytics-dimension-repository_network_root_nwo | matplotlib/matplotlib |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 7aed05249554b889eb33d002851a973eebcc7e91 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width