From 0949b314adb849b2c78be1955ab62e03a901e140 Mon Sep 17 00:00:00 2001 From: Oscar Gustafsson Date: Fri, 23 Jun 2023 15:27:51 +0200 Subject: [PATCH] Add more sizeable delimiters --- doc/users/next_whats_new/mathtext_delimiters.rst | 14 ++++++++++++++ lib/matplotlib/_mathtext.py | 8 ++++++-- lib/matplotlib/_mathtext_data.py | 4 +++- .../test_mathtext/mathtext1_dejavusans_06.png | Bin 0 -> 4782 bytes lib/matplotlib/tests/test_mathtext.py | 1 + 5 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 doc/users/next_whats_new/mathtext_delimiters.rst create mode 100644 lib/matplotlib/tests/baseline_images/test_mathtext/mathtext1_dejavusans_06.png diff --git a/doc/users/next_whats_new/mathtext_delimiters.rst b/doc/users/next_whats_new/mathtext_delimiters.rst new file mode 100644 index 000000000000..7c1c29f4b9ec --- /dev/null +++ b/doc/users/next_whats_new/mathtext_delimiters.rst @@ -0,0 +1,14 @@ +``mathtext`` has more sizable delimiters +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The ``\lgroup`` and ``\rgroup`` sizable delimiters have been added. + +The following delimiter names have been supported earlier, but can now be sized with +``\left`` and ``\right``: + +* ``\lbrace``, ``\rbrace``, ``\leftbrace``, and ``\rightbrace`` +* ``\lbrack`` and ``\rbrack`` +* ``\leftparen`` and ``\rightparen`` + +There are really no obvious advantages in using these. +Instead, they are are added for completeness. diff --git a/lib/matplotlib/_mathtext.py b/lib/matplotlib/_mathtext.py index b1942d0c98e4..35f7f1c606cf 100644 --- a/lib/matplotlib/_mathtext.py +++ b/lib/matplotlib/_mathtext.py @@ -1808,8 +1808,12 @@ class _MathStyle(enum.Enum): _ambi_delims = set(r""" | \| / \backslash \uparrow \downarrow \updownarrow \Uparrow \Downarrow \Updownarrow . \vert \Vert""".split()) - _left_delims = set(r"( [ \{ < \lfloor \langle \lceil".split()) - _right_delims = set(r") ] \} > \rfloor \rangle \rceil".split()) + _left_delims = set(r""" + ( [ \{ < \lfloor \langle \lceil \lbrace \leftbrace \lbrack \leftparen \lgroup + """.split()) + _right_delims = set(r""" + ) ] \} > \rfloor \rangle \rceil \rbrace \rightbrace \rbrack \rightparen \rgroup + """.split()) _delims = _left_delims | _right_delims | _ambi_delims _small_greek = set([unicodedata.name(chr(i)).split()[-1].lower() for i in diff --git a/lib/matplotlib/_mathtext_data.py b/lib/matplotlib/_mathtext_data.py index 84136ffe8b3e..40ba4f96f103 100644 --- a/lib/matplotlib/_mathtext_data.py +++ b/lib/matplotlib/_mathtext_data.py @@ -957,6 +957,8 @@ 'cwopencirclearrow' : 8635, 'geqq' : 8807, 'rightleftarrows' : 8644, + 'lgroup' : 0x27EE, + 'rgroup' : 0x27EF, 'aa' : 229, 'ac' : 8766, 'ae' : 230, @@ -1016,7 +1018,7 @@ 'leftparen' : 40, 'rightparen' : 41, 'bigoplus' : 10753, - 'leftbrace' : 124, + 'leftbrace' : 123, 'rightbrace' : 125, 'jmath' : 567, 'bigodot' : 10752, diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext1_dejavusans_06.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathtext1_dejavusans_06.png new file mode 100644 index 0000000000000000000000000000000000000000..85d0adf15112e8e22b97ff1442f61f61a6f96602 GIT binary patch literal 4782 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 literal 0 HcmV?d00001 diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py index 41619c18cf91..0a3354954280 100644 --- a/lib/matplotlib/tests/test_mathtext.py +++ b/lib/matplotlib/tests/test_mathtext.py @@ -135,6 +135,7 @@ r'$1.$ $2.$ $19680801.$ $a.$ $b.$ $mpl.$', r'$\text{text}_{\text{sub}}^{\text{sup}} + \text{\$foo\$} + \frac{\text{num}}{\mathbf{\text{den}}}\text{with space, curly brackets \{\}, and dash -}$', r'$\boldsymbol{abcde} \boldsymbol{+} \boldsymbol{\Gamma + \Omega} \boldsymbol{01234} \boldsymbol{\alpha * \beta}$', + r'$\left\lbrace\frac{\left\lbrack A^b_c\right\rbrace}{\left\leftbrace D^e_f \right\rbrack}\right\rightbrace\ \left\leftparen\max_{x} \left\lgroup \frac{A}{B}\right\rgroup \right\rightparen$', ] digits = "0123456789"