Skip to content

\genfrac should accept a unit for thickness #19001

Description

@QuLogic

In LaTeX, the third parameter (bar thickness) to genfrac requires a unit, but Matplotlib's mathtext parser does not accept it. This causes an inconsistency in the docs between Matplotlib and LaTeX, cf https://github.com/matplotlib/matplotlib/pull/18948/files#diff-9d1b2ab4b8a5e77dc635425c7e7ec00af5667d684d0809e46a973185e8f9918fR97

Code for reproduction

import matplotlib.pyplot as plt

plt.text(0, 0, r'$\genfrac{(}{)}{3pt}{0}{foo}{bar}$')
plt.draw()

Actual outcome

Traceback (most recent call last):
  File "/usr/lib64/python3.8/tkinter/__init__.py", line 1883, in __call__
    return self.func(*args)
  File "/usr/lib64/python3.8/tkinter/__init__.py", line 804, in callit
    func(*args)
  File "/usr/lib64/python3.8/site-packages/matplotlib/backends/_backend_tk.py", line 270, in idle_draw
    self.draw()
  File "/usr/lib64/python3.8/site-packages/matplotlib/backends/backend_tkagg.py", line 9, in draw
    super(FigureCanvasTkAgg, self).draw()
  File "/usr/lib64/python3.8/site-packages/matplotlib/backends/backend_agg.py", line 393, in draw
    self.figure.draw(self.renderer)
  File "/usr/lib64/python3.8/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/usr/lib64/python3.8/site-packages/matplotlib/figure.py", line 1735, in draw
    mimage._draw_list_compositing_images(
  File "/usr/lib64/python3.8/site-packages/matplotlib/image.py", line 137, in _draw_list_compositing_images
    a.draw(renderer)
  File "/usr/lib64/python3.8/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/usr/lib64/python3.8/site-packages/matplotlib/axes/_base.py", line 2630, in draw
    mimage._draw_list_compositing_images(renderer, self, artists)
  File "/usr/lib64/python3.8/site-packages/matplotlib/image.py", line 137, in _draw_list_compositing_images
    a.draw(renderer)
  File "/usr/lib64/python3.8/site-packages/matplotlib/artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "/usr/lib64/python3.8/site-packages/matplotlib/text.py", line 685, in draw
    bbox, info, descent = textobj._get_layout(renderer)
  File "/usr/lib64/python3.8/site-packages/matplotlib/text.py", line 299, in _get_layout
    w, h, d = renderer.get_text_width_height_descent(
  File "/usr/lib64/python3.8/site-packages/matplotlib/backends/backend_agg.py", line 209, in get_text_width_height_descent
    self.mathtext_parser.parse(s, self.dpi, prop)
  File "/usr/lib64/python3.8/site-packages/matplotlib/mathtext.py", line 3354, in parse
    box = self._parser.parse(s, font_output, fontsize, dpi)
  File "/usr/lib64/python3.8/site-packages/matplotlib/mathtext.py", line 2583, in parse
    raise ValueError("\n".join(["",
ValueError: 
\genfrac{(}{)}{3pt}{0}{foo}{bar}
        ^
Expected \genfrac{ldelim}{rdelim}{rulesize}{style}{num}{den}, found '{'  (at char 8), (line:1, col:9)

Expected outcome

Draws as if passing 3 instead of 3pt, though possibly slightly different spacing, as I'm not sure in what unit we treat the 3 right now.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    keepItems to be ignored by the “Stale” Github Actiontopic: text/mathtext

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions