# MEP29: Text light markup

::: {.contents local=""}
:::

## Status

Discussion

## Branches and Pull requests

None at the moment, proof of concept only.

## Abstract

This MEP proposes to add lightweight markup to the text artist.

## Detailed description

Using different size/color/family in a text annotation is difficult
because the [\~.Axes.text]{.title-ref} 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:
`/gallery/text_labels_and_annotations/rainbow_text`{.interpreted-text
role="doc"}

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](https://docs.gtk.org/Pango/pango_markup.html#pango-markup)-like
markup and to interpret this markup.

Some markup examples:

    Hello <b>world!</b>`
    Hello <span color="blue">world!</span>

## Implementation

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.

### Improvements

-   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)

### Problems

-   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.

## Backward compatibility

None at the moment since it is only a proof of concept

## Alternatives

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}}$"