=========================
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` 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 world!`
Hello world!
Implementation
==============
A proof of concept is provided in `markup_example.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 `_
Problems
--------
* One serious problem is how to deal with text having both LaTeX and
HTML-like tags. For example, consider the following::
$Bold$
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}}$"