Title: [Bug]: undefined \mathdefault · Issue #27907 · matplotlib/matplotlib · GitHub
Open Graph Title: [Bug]: undefined \mathdefault · Issue #27907 · matplotlib/matplotlib
X Title: [Bug]: undefined \mathdefault · Issue #27907 · matplotlib/matplotlib
Description: Bug summary If we \input the pgf file created by matplotlib with pgf backend, it assumes \mathdefault to exist. But unfortunately, this command is not provided by any of the recommended packages as far as I see: to produce the actual pdf...
Open Graph Description: Bug summary If we \input the pgf file created by matplotlib with pgf backend, it assumes \mathdefault to exist. But unfortunately, this command is not provided by any of the recommended packages as...
X Description: Bug summary If we \input the pgf file created by matplotlib with pgf backend, it assumes \mathdefault to exist. But unfortunately, this command is not provided by any of the recommended packages as...
Opengraph URL: https://github.com/matplotlib/matplotlib/issues/27907
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"[Bug]: undefined \\mathdefault","articleBody":"### Bug summary\r\n\r\nIf we `\\input` the pgf file created by matplotlib with pgf backend, it assumes `\\mathdefault` to exist. But unfortunately, this command is not provided by any of the recommended packages as far as I see: to produce the actual `pdf` file, matplotlib seems to actually define it manually like:\r\n```\r\n\\def\\mathdefault#1{#1}\r\n```\r\nas can be read from the automatically generated .pgf file… Manually adding this line in the .tex file before the `\\input` works as a workaround, but this seems like a dirty workaround as this is not documented as far as I can see.\r\n\r\nWould it be possible to either document it or provide these commands in a properly packaged latex library?\r\n\r\nSee also this discussion https://github.com/leo-colisson/robust-externalize/issues/31\r\n\r\n### Code for reproduction\r\n\r\n```Python\r\nimport matplotlib.pyplot as plt\r\nimport matplotlib\r\nmatplotlib.use('pgf')\r\n\r\n\r\nplt.rcParams.update({ \r\n \"text.usetex\": True, \r\n})\r\nplt.rcParams.update({ \r\n \"pgf.preamble\": \"\\n\".join([\r\n r\"\\usepackage{fontspec}\",\r\n r\"\\usepackage{amsmath}\",\r\n r\"\\usepackage{amssymb}\",\r\n ]),\r\n})\r\n\r\nplt.rcParams['text.latex.preamble'] = r'\\newcommand{\\mathdefault}[1][]{}' # doesn't seem to work.\r\n\r\nyear = [2014, 2015, 2016, 2017, 2018, 2019]\r\ntutorial_count = [39, 117, 111, 110, 67, 29]\r\nplt.plot(year, tutorial_count, color=\"#6c3376\", linewidth=2)\r\nplt.title(\"Simple plot\")\r\nplt.xlabel('Year')\r\nplt.ylabel('Number of futurestud.io Tutorials')\r\n\r\nplt.savefig(\"foo.pgf\", bbox_inches=\"tight\")\r\n```\r\n\r\n\r\n### Actual outcome\r\n\r\nI would expect `\\input` of the pgf file to work, but it is not. Here is the full file I use to both compile the python and include it (using the recent robust-externalize library, you might need to copy the .sty from to install it and you might want to compile with `-shell-escape` for simplicity)\r\n\r\n```\r\n\\documentclass{article} \r\n\\usepackage{lipsum}\r\n\\usepackage{tikz}\r\n\\usepackage{robust-externalize}\r\n\\robExtConfigure{enable fallback to manual mode} % prints a helpful message in the document if you forgot --shell-escape\r\n%% If you do not add this line, this will return an error:\r\n%\\def\\mathdefault#1{#1}\r\n\\begin{document}\r\n\r\n\\lipsum[1]\r\n\r\n\\begin{figure}[ht]\r\n \\centering\r\n \\begin{CacheMeCode}{python, custom include command={\\input{\\robExtAddCachePathAndName{\\robExtFinalHash.pgf}}}, set placeholder eval={__LINEWIDTH__}{\\lenToCmNoUnit[in]{\\linewidth}}}\r\n import matplotlib.pyplot as plt\r\n import matplotlib\r\n from matplotlib.pyplot import figure\r\n matplotlib.use(\"pgf\")\r\n # See this link for details on how to preview the image in jupyter\r\n # https://matplotlib.org/stable/users/explain/text/pgf.html\r\n matplotlib.rcParams.update({\r\n \"font.family\": \"serif\",\r\n \"font.serif\": [], # Use LaTeX default serif font.\r\n \"text.usetex\": True, # use inline math for ticks\r\n })\r\n\r\n figure(figsize=(__LINEWIDTH__, 0.7*__LINEWIDTH__))\r\n year = [2014, 2015, 2016, 2017, 2018, 2019]\r\n tutorial_count = [39, 117, 111, 110, 67, 29]\r\n plt.plot(year, tutorial_count, color=\"#6c3376\", linewidth=2)\r\n plt.title(\"Simple plot for $\\delta = 2$\")\r\n plt.xlabel('Year')\r\n plt.ylabel('Number of futurestud.io Tutorials')\r\n print(get_filename_from_extension(\".pgf\"))\r\n # https://stackoverflow.com/a/52587591/4987648\r\n plt.savefig(get_filename_from_extension(\".pgf\"), bbox_inches=\"tight\")\r\n \\end{CacheMeCode}\r\n \\caption{Test}%\r\n\\end{figure}\r\n\r\n\\end{document}\r\n\r\n% Local Variables:\r\n% TeX-command-extra-options: \"--shell-escape -halt-on-error\"\r\n% End:\r\n```\r\n\r\n### Expected outcome\r\n\r\nI expect the use of `\\def\\mathdefault#1{#1}` to be at least documented, ideally automatically defined in the `.pgf` file if the command does not already exist with something like:\r\n```\r\n\\providecommand\\mathdefault[1]{#1}\r\n```\r\n\r\n### Additional information\r\n\r\nThis seems to be a regression, as it used not to be a problem on 3.7 I think.\r\n\r\n### Operating system\r\n\r\nNixOs\r\n\r\n### Matplotlib Version\r\n\r\n3.8.2\r\n\r\n### Matplotlib Backend\r\n\r\npgf\r\n\r\n### Python version\r\n\r\n3.11.8\r\n\r\n### Jupyter version\r\n\r\nNot using jupyter\r\n\r\n### Installation\r\n\r\nLinux package manager","author":{"url":"https://github.com/tobiasBora","@type":"Person","name":"tobiasBora"},"datePublished":"2024-03-11T13:24:28.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":12},"url":"https://github.com/27907/matplotlib/issues/27907"}
| 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:13b36829-39d3-8aa4-8e1f-39c9d101dd59 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | 8092:20B94F:A39041:DAB195:6A51A786 |
| html-safe-nonce | c47d09e21ed702bfc57209d2479479deedd6b8cd20e1a7ce8dbb2418f0846438 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiI4MDkyOjIwQjk0RjpBMzkwNDE6REFCMTk1OjZBNTFBNzg2IiwidmlzaXRvcl9pZCI6Ijg4NjY5NjIyMzkyMzM1NjY1OTgiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 2b32a14643a2df0d9b9cd41dd7c68939d378bc5c08b27024d2e39bfbb0d1ed9d |
| hovercard-subject-tag | issue:2179130055 |
| 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/27907/issue_layout |
| twitter:image | https://opengraph.githubassets.com/83caf3f3149280fa5412dcd12fc5334d3ec3f77ba15d9cbac8b3dfd89dbf75a6/matplotlib/matplotlib/issues/27907 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/83caf3f3149280fa5412dcd12fc5334d3ec3f77ba15d9cbac8b3dfd89dbf75a6/matplotlib/matplotlib/issues/27907 |
| og:image:alt | Bug summary If we \input the pgf file created by matplotlib with pgf backend, it assumes \mathdefault to exist. But unfortunately, this command is not provided by any of the recommended packages as... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | tobiasBora |
| 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