diff --git a/doc/users/next_whats_new/updated_mathtext.rst b/doc/users/next_whats_new/updated_mathtext.rst new file mode 100644 index 000000000000..3658b8db6be1 --- /dev/null +++ b/doc/users/next_whats_new/updated_mathtext.rst @@ -0,0 +1,14 @@ +Bold-italic mathtext command ``\mathbfit`` +----------------------------------------------------- + +Supports use of bold-italic font style in mathtext using the ``\mathbfit{}`` command: + +To change font to bold and italic enclose the text in a font command as +shown: + +.. code-block:: + + r'$\mathbfit{\eta \leq C(\delta(\eta))}$ + +.. math:: + \mathbfit{\eta \leq C(\delta(\eta))} diff --git a/galleries/users_explain/text/mathtext.py b/galleries/users_explain/text/mathtext.py index 858fb86e2f4c..ea6138632a45 100644 --- a/galleries/users_explain/text/mathtext.py +++ b/galleries/users_explain/text/mathtext.py @@ -225,6 +225,7 @@ ``\mathfrak{Fraktur}`` :math-stix:`\mathfrak{Fraktur}` ``\mathsf{sansserif}`` :math-stix:`\mathsf{sansserif}` ``\mathrm{\mathsf{sansserif}}`` :math-stix:`\mathrm{\mathsf{sansserif}}` + ``\mathbfit{bolditalic}`` :math-stix:`\mathbfit{bolditalic}` ================================ ========================================= There are also five global "font sets" to choose from, which are @@ -290,7 +291,8 @@ ``mathtext.it`` ``\mathit{}`` or default italic ``mathtext.rm`` ``\mathrm{}`` Roman (upright) ``mathtext.tt`` ``\mathtt{}`` Typewriter (monospace) - ``mathtext.bf`` ``\mathbf{}`` bold italic + ``mathtext.bf`` ``\mathbf{}`` bold + ``mathtext.bfit`` ``\mathbfit{}`` bold italic ``mathtext.cal`` ``\mathcal{}`` calligraphic ``mathtext.sf`` ``\mathsf{}`` sans-serif ============================== ================================= diff --git a/lib/matplotlib/_mathtext.py b/lib/matplotlib/_mathtext.py index 2cc47ef200a9..09f5c618794e 100644 --- a/lib/matplotlib/_mathtext.py +++ b/lib/matplotlib/_mathtext.py @@ -484,7 +484,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fontmap = {} - for texfont in "cal rm tt it bf sf".split(): + for texfont in "cal rm tt it bf sf bfit".split(): prop = mpl.rcParams['mathtext.' + texfont] font = findfont(prop) self.fontmap[texfont] = font @@ -631,6 +631,7 @@ class DejaVuSerifFonts(DejaVuFonts): 'rm': 'DejaVu Serif', 'it': 'DejaVu Serif:italic', 'bf': 'DejaVu Serif:weight=bold', + 'bfit': 'DejaVu Serif:italic:bold', 'sf': 'DejaVu Sans', 'tt': 'DejaVu Sans Mono', 'ex': 'DejaVu Serif Display', @@ -648,6 +649,7 @@ class DejaVuSansFonts(DejaVuFonts): 'rm': 'DejaVu Sans', 'it': 'DejaVu Sans:italic', 'bf': 'DejaVu Sans:weight=bold', + 'bfit': 'DejaVu Sans:italic:bold', 'sf': 'DejaVu Sans', 'tt': 'DejaVu Sans Mono', 'ex': 'DejaVu Sans Display', @@ -671,6 +673,7 @@ class StixFonts(UnicodeFonts): 'rm': 'STIXGeneral', 'it': 'STIXGeneral:italic', 'bf': 'STIXGeneral:weight=bold', + 'bfit': 'STIXGeneral:italic:bold', 'nonunirm': 'STIXNonUnicode', 'nonuniit': 'STIXNonUnicode:italic', 'nonunibf': 'STIXNonUnicode:weight=bold', @@ -736,7 +739,7 @@ def _map_virtual_font(self, fontname, font_class, uniindex): uniindex = stix_glyph_fixes.get(uniindex, uniindex) # Handle private use area glyphs - if fontname in ('it', 'rm', 'bf') and 0xe000 <= uniindex <= 0xf8ff: + if fontname in ('it', 'rm', 'bf', 'bfit') and 0xe000 <= uniindex <= 0xf8ff: fontname = 'nonuni' + fontname return fontname, uniindex @@ -1665,7 +1668,7 @@ def font(self): @font.setter def font(self, name): - if name in ('rm', 'it', 'bf'): + if name in ('rm', 'it', 'bf', 'bfit'): self.font_class = name self._font = name @@ -1771,7 +1774,8 @@ class _MathStyle(enum.Enum): _dropsub_symbols = set(r'''\int \oint'''.split()) - _fontnames = set("rm cal it tt sf bf default bb frak scr regular".split()) + _fontnames = set("rm cal it tt sf bf bfit " + "default bb frak scr regular".split()) _function_names = set(""" arccos csc ker min arcsin deg lg Pr arctan det lim sec arg dim diff --git a/lib/matplotlib/_mathtext_data.py b/lib/matplotlib/_mathtext_data.py index ef571b90712e..8befc7294754 100644 --- a/lib/matplotlib/_mathtext_data.py +++ b/lib/matplotlib/_mathtext_data.py @@ -1210,6 +1210,13 @@ (0x2202, 0x2202, 'bf', 0x1d789), # partial differential (0x2207, 0x2207, 'bf', 0x1d76f), # \Nabla ], + 'bfit': + [ + (0x0041, 0x005a, 'bfit', 0x1d468), # A-Z + (0x0061, 0x007a, 'bfit', 0x1d482), # a-z + (0x0393, 0x03a9, 'bfit', 0x1d71e), # \Gamma-\Omega + (0x03b1, 0x03c9, 'bfit', 0x1d736), # \alpha-\omega + ], }, 'tt': [ diff --git a/lib/matplotlib/mpl-data/matplotlibrc b/lib/matplotlib/mpl-data/matplotlibrc index d6f5a987157d..a5e36cba22cc 100644 --- a/lib/matplotlib/mpl-data/matplotlibrc +++ b/lib/matplotlib/mpl-data/matplotlibrc @@ -340,6 +340,7 @@ ## settings which map a TeX font name to a fontconfig font pattern. (These ## settings are not used for other font sets.) #mathtext.bf: sans:bold +#mathtext.bfit: sans:italic:bold #mathtext.cal: cursive #mathtext.it: sans:italic #mathtext.rm: sans diff --git a/lib/matplotlib/rcsetup.py b/lib/matplotlib/rcsetup.py index d39cc0c1f528..912e87dd9fb3 100644 --- a/lib/matplotlib/rcsetup.py +++ b/lib/matplotlib/rcsetup.py @@ -937,10 +937,11 @@ def _convert_validator_spec(key, conv): "mathtext.tt": validate_font_properties, "mathtext.it": validate_font_properties, "mathtext.bf": validate_font_properties, + "mathtext.bfit": validate_font_properties, "mathtext.sf": validate_font_properties, "mathtext.fontset": ["dejavusans", "dejavuserif", "cm", "stix", "stixsans", "custom"], - "mathtext.default": ["rm", "cal", "it", "tt", "sf", "bf", "default", + "mathtext.default": ["rm", "cal", "bfit", "it", "tt", "sf", "bf", "default", "bb", "frak", "scr", "regular"], "mathtext.fallback": _validate_mathtext_fallback, diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_60.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_60.png new file mode 100644 index 000000000000..92c6be388eb3 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_60.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_61.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_61.png new file mode 100644 index 000000000000..eb3ccc2ba586 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_61.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_62.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_62.png new file mode 100644 index 000000000000..a646f604a3e3 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_62.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_63.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_63.png new file mode 100644 index 000000000000..d9e3e47b176e Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_63.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_64.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_64.png new file mode 100644 index 000000000000..5985624ec817 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_cm_64.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_60.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_60.png new file mode 100644 index 000000000000..58c3cf96845b Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_60.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_61.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_61.png new file mode 100644 index 000000000000..5c9e07694012 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_61.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_62.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_62.png new file mode 100644 index 000000000000..0a06cd6a2598 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_62.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_63.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_63.png new file mode 100644 index 000000000000..cca544da1bc2 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_63.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_64.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_64.png new file mode 100644 index 000000000000..a5cd8629efea Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavusans_64.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_60.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_60.png new file mode 100644 index 000000000000..46ff984ed8c4 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_60.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_61.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_61.png new file mode 100644 index 000000000000..59dfb57d9de2 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_61.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_62.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_62.png new file mode 100644 index 000000000000..f899ba21bb2d Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_62.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_63.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_63.png new file mode 100644 index 000000000000..4d670f64af3e Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_63.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_64.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_64.png new file mode 100644 index 000000000000..621dfad14623 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_dejavuserif_64.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_60.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_60.png new file mode 100644 index 000000000000..92c6be388eb3 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_60.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_61.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_61.png new file mode 100644 index 000000000000..eb3ccc2ba586 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_61.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_62.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_62.png new file mode 100644 index 000000000000..a646f604a3e3 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_62.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_63.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_63.png new file mode 100644 index 000000000000..d9e3e47b176e Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_63.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_64.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_64.png new file mode 100644 index 000000000000..5985624ec817 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stix_64.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_60.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_60.png new file mode 100644 index 000000000000..92c6be388eb3 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_60.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_61.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_61.png new file mode 100644 index 000000000000..ee51257365e6 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_61.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_62.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_62.png new file mode 100644 index 000000000000..1fcf6a6dcb53 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_62.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_63.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_63.png new file mode 100644 index 000000000000..851cc51fc1ad Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_63.png differ diff --git a/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_64.png b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_64.png new file mode 100644 index 000000000000..39c976685823 Binary files /dev/null and b/lib/matplotlib/tests/baseline_images/test_mathtext/mathfont_stixsans_64.png differ diff --git a/lib/matplotlib/tests/test_mathtext.py b/lib/matplotlib/tests/test_mathtext.py index a926d0bd71ad..841e62d184ae 100644 --- a/lib/matplotlib/tests/test_mathtext.py +++ b/lib/matplotlib/tests/test_mathtext.py @@ -172,7 +172,8 @@ (['mathscr'], [uppercase, lowercase]), (['mathsf'], [digits, uppercase, lowercase]), (['mathrm', 'mathsf'], [digits, uppercase, lowercase]), - (['mathbf', 'mathsf'], [digits, uppercase, lowercase]) + (['mathbf', 'mathsf'], [digits, uppercase, lowercase]), + (['mathbfit'], all), ] font_tests: list[None | str] = [] @@ -426,6 +427,7 @@ def test_mathtext_fallback(fallback, fontlist): mpl.rcParams['mathtext.rm'] = 'mpltest' mpl.rcParams['mathtext.it'] = 'mpltest:italic' mpl.rcParams['mathtext.bf'] = 'mpltest:bold' + mpl.rcParams['mathtext.bfit'] = 'mpltest:italic:bold' mpl.rcParams['mathtext.fallback'] = fallback test_str = r'a$A\AA\breve\gimel$'