doc/devel/MEP/MEP29.rst
.. contents:: :local:
Discussion
None at the moment, proof of concept only.
This MEP proposes to add lightweight markup to the text artist.
Using different size/color/family in a text annotation is difficult because the
~.Axes.text method accepts argument for size/color/family/weight/etc. that are used
for the whole text. But, if one wants, for example, to have different colors,
one has to look at the gallery where one such example is provided:
:doc:/gallery/text_labels_and_annotations/rainbow_text
This example takes a list of strings as well as a list of colors which makes it cumbersome to use. An alternative would be to use a restricted set of pango_-like markup and to interpret this markup.
.. _pango: https://docs.gtk.org/Pango/pango_markup.html#pango-markup
Some markup examples::
Hello <b>world!</b>` Hello <span color="blue">world!</span>
A proof of concept is provided in markup_example.py <https://github.com/rougier/matplotlib/blob/markup/examples/text_labels_and_annotations/markup.py>_ but it currently only handles the horizontal direction.
This proof of concept uses regex to parse the text but it may be better to use the html.parser from the standard library.
Computation of text fragment positions could benefit from the OffsetFrom
class. See for example item 5 in Using Complex Coordinates with Annotations <https://matplotlib.org/devdocs/users/explain/text/annotations.html#using-complex-coordinates-with-annotations>_
One serious problem is how to deal with text having both LaTeX and HTML-like tags. For example, consider the following::
$<b>Bold$</b>
Recommendation would be to have mutual exclusion.
None at the moment since it is only a proof of concept
As proposed by @anntzer, this could be also implemented as improvements to mathtext. For example::
r"$\text{Hello \textbf{world}}$" r"$\text{Hello \textcolor{blue}{world}}$" r"$\text{Hello \textsf{\small world}}$"